Website
The manual and API sampling modes, the switches in the API configuration, and how to read detection results.
The detection website lm.ikale.io is a pure frontend app. Challenge generation, feature extraction, and ranking all run in the browser, and the reference bank is served as static files. The website only runs detection and browses the reference bank read-only. It never writes any reply to the reference bank. Your API key is sent only when a request goes out, to the API you enter or to a forwarding proxy, as the connection mode you choose decides; see Connection.
Sampling modes
The page generates three challenges. Send each challenge to the target model separately (for example, in a new conversation in a chat interface), then paste each answer into its sample box. This mode suits the case where you have a chat interface but no API key. Prompts and replies are not translated, and switching the interface language does not change them.
Before any reply is filled in, "New prompts" in the action bar replaces all three challenges at once. Once a reply is there, "Start over" replaces the challenges and clears the replies.
API configuration
| Field | Description |
|---|---|
| Base URL | Base URL or complete endpoint. An address that ends in a protocol endpoint (such as /chat/completions) is used as it is, an address that ends in /v1 gets the endpoint added, and any other address gets /v1 and the endpoint added; for an API whose base path is not /v1, enter the complete endpoint |
| Model | The model name in the request |
| API key | Hidden by default. You can toggle it visible |
| Reasoning effort | Can be left blank, or set to any reasoning_effort value that the upstream supports |
| Protocol | Chat Completions, Responses, or Messages |
| Service tier | Flex, Default, Fast, or Ultrafast. Default sends no parameter. Messages sends speed with the anthropic-beta: fast-mode-2026-02-01 header; Chat Completions and Responses send service_tier |
Switches below the configuration, all on by default except "Tokenizer probe":
- Streaming: uses SSE and shows output as it is generated. When off, the page waits for the complete JSON response.
- Parallel requests: sends the three samples at once, and the tokenizer probe four requests at a time. When off, requests go one by one, which takes longer.
- Relaxed mode: streaming sampling stops once it receives the requested count of complete valid integers. A non-streaming reply that exceeds the requested count keeps only the first N. The interface marks both cases as "Capped". When off, the upstream reply must finish naturally and completely.
- Verify automatically after sampling: computes the result automatically once all three samples succeed and no other sample is still sampling.
- Tokenizer probe: off by default. When on, it sends about 12 extra short requests while sampling (at most 22) and identifies the upstream tokenizer. The result is reference information and does not change the ranking. APIs billed per request bill these requests. See Tokenizer probe.
Below the switches is "Connection": Auto, Direct, This site's proxy (the default), or Own Worker. It decides whether the browser calls the API directly or sends requests through a proxy; see Connection.
The configuration and the key are saved automatically in the browser's localStorage and are restored after a reload or when you reopen the page. The profile menu supports several profiles, which you can rename, create, duplicate, and delete. "Save" only confirms the current configuration in the browser. "Export" and "Load" move a configuration between a file and the browser. An exported file contains your API key in plain text, so do not send it to anyone or upload it to cloud storage. "Connection" is a browser-level setting and does not belong to any profile.
Reading results
If all three answers are valid, the result area lists the candidates of the reference bank in ranking order, with one confidence value per row. The confidence is a relative probability within the reference bank: all candidates total 100%, and models outside the bank are not included. When the calibration does not match the detector, the page shows only the ranking, without confidence.
The ranking and the confidence come from the number fingerprint alone. In API mode, the result of the tokenizer probe appears separately as reference information in the fourth entry of the sample strip and in the tokenizer details. The result does not wait for the probe, which keeps running beside it.
If the confidence of the top candidate is below 75%, the page shows a low-confidence warning. If only one or two answers are valid, the page shows only the ranking, without confidence.
If the smallest valid number of a sample is 200 or more, the page marks its distribution as abnormal and the result as unreliable. The prompt causes this distribution, so resampling with the same prompt repeats it. In API mode, "New prompt and resample" generates new challenges for these samples and samples them again at once with the original settings; in manual mode, "New prompt" only replaces the prompts and clears the matching answers. The other samples stay as they are. This warning plays no part in scoring.
A ranking is not proof of identity
A model outside the bank still gets a "closest" candidate. A result with the same name as the claimed model is supporting evidence, but it cannot prove identity on its own. A result naming another model does not directly prove that the model was substituted, because the fingerprints of some models are naturally close. This site cannot reliably detect intermittent model substitution.
Export
- PNG image: generated in a browser Canvas at twice the pixel density. It contains the site name, the date, the top candidate, the top five entries, the number of valid samples, and a note on the limitations, in the current language and theme. It does not contain the API key, the Base URL, the model ID you entered, or the reply text.
- JSON: the candidate list and the confidence values; once the probe has ended, also the tokenizer probe report (the verdict, the check against the model you entered, and the count of every request). It contains neither the API address nor the API key.
- Library page: browse reference replies by model, each with its original prompt. You can search, filter by family, and export to JSONL. Keys and authorization fields are removed before export.
Related pages
- Tokenizer probe: how API detection identifies the upstream tokenizer, and how to read the result.
- Connection: where each of the four connection modes sends requests, and how Auto decides between a direct call and this site's proxy.
Last updated on
Quick start
Run one detection on the website, or run fpd in a terminal without installing anything.
Tokenizer probe
While sampling, API detection identifies the upstream tokenizer and checks whether it matches the model you entered. The result is reference information; it neither changes the ranking nor delays the detection result.