Model Verification

How Model Fingerprint Checks Prevent Watered-Down AI Routes

How Model Fingerprint Checks Prevent Watered-Down AI Routes: A kimi-k3 Case Study

If your team buys model access through an AI gateway, reseller, or routing layer, do not stop at asking whether the model can answer a prompt.

The first question is more basic:

Did the endpoint actually serve the model you requested?

That is the job of model fingerprint verification. It is not a benchmark score and it is not a subjective quality review. It is a runtime evidence check: does the raw request and raw response prove that the selected model, protocol shape, usage metadata, and response identity match what was promised?

In a recent TokenTest run, the requested model was kimi-k3, but successful chat completion responses repeatedly reported kimi-k2.7-code as the returned model. That makes the case useful beyond one vendor or one model family: it shows why channel verification cannot rely on model lists, dropdowns, or sales claims alone.

TokenTest model fingerprint verification flow: request kimi-k3, runtime response returns kimi-k2.7-code

That is the core of the problem: the application request, the routing platform, and the runtime response are three different layers of evidence. A buyer should not trust only the first two layers of claims; raw response evidence must be part of acceptance testing.

The core rule

Before connecting any AI route to production, run at least one black-box model fingerprint check.

Do not inspect only the answer text. Check:

If request.body.model and response.model disagree, the route needs review even when the answer looks correct.

Why the model list is not enough

Many AI gateways expose a model registry:

GET /v1/models

That proves what the platform claims to offer. It does not prove what the runtime call actually used.

Separate the evidence:

Evidence What it proves What it does not prove
/v1/models The platform advertises a model Every call is routed to that model
response.model The response self-reports a runtime model The ID is officially equivalent to the requested alias
Nonce echo The answer is not an old cached response The model was not substituted
Usage fields Metering looks present and plausible Billing backend is fully correct
Repeated probes Whether the signal is consistent The commercial reason behind the behavior

The model list is entry evidence. The actual completion response is runtime evidence.

What happened in the kimi-k3 run

The evaluation setup was simple:

TokenTest first checked /v1/models. The registry included kimi-k3, so the requested model name was not obviously invalid.

But multiple chat completion responses returned a different model ID.

The raw evidence

The following is a redacted minimal evidence snippet. It keeps the fields required to judge fingerprint consistency, but removes the real endpoint, Authorization header, request ID, response ID, and one-time nonce.

If you reproduce the check with curl, the shape looks like this. The domain, key, and nonce below are examples:

curl https://router.example.com/v1/chat/completions \
  -H "Authorization: Bearer sk-REDACTED" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k3",
    "messages": [
      {"role":"system","content":"You are being evaluated. Follow the user instruction exactly."},
      {"role":"user","content":"Return exactly this JSON: {\"probe\":\"ok\",\"answer\":42,\"nonce\":\"TT_SAMPLE_NONCE\"}"}
    ],
    "max_tokens": 80
  }'

The core request fields were:

{
  "method": "POST",
  "path": "/v1/chat/completions",
  "body": {
    "model": "kimi-k3",
    "messages": [
      {
        "role": "system",
        "content": "You are being evaluated. Follow the user instruction exactly."
      },
      {
        "role": "user",
        "content": "Return exactly this JSON: {\"probe\":\"ok\",\"answer\":42,\"nonce\":\"TT_SAMPLE_NONCE\"}"
      }
    ],
    "max_tokens": 80
  }
}

The model answered the simple nonce probe correctly, but the response-level model field said:

{
  "id": "chatcmpl-REDACTED",
  "object": "chat.completion",
  "model": "kimi-k2.7-code",
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "{\"probe\":\"ok\",\"answer\":42,\"nonce\":\"TT_SAMPLE_NONCE\"}"
      },
      "finish_reason": "stop"
    }
  ]
}

TokenTest therefore recorded:

requested=kimi-k3; returned=kimi-k2.7-code

This is not a reasoning failure. It answered the task. The issue is that the requested model and returned model identity did not match.

Why this is a watered-channel risk

A watered-down AI route does not always look obviously worse. The gray area is usually metadata and routing:

  1. A cheaper or older model serves requests sold as a newer model.
  2. Peak traffic silently falls back to another channel.
  3. An internal alias is returned without a public equivalence mapping.
  4. /models shows a sales name while runtime responses reveal another serving name.
  5. Usage, model IDs, and error shapes are wrapped in a way that makes buyer-side audits difficult.

If kimi-k2.7-code is a documented internal serving name for kimi-k3, and the mapping can be verified through the Kimi official open platform or the Moonshot AI official site, the platform can solve this with an explicit alias map. Without that evidence, TokenTest treats the mismatch as a P0 fingerprint risk by default.

That is the right default because the buyer did not purchase "a model that answers." The buyer purchased access to a specified model.

TokenTest procurement evidence matrix: model registry, request model, response model, nonce, usage, request ID

How to run this check in TokenTest

You can start from the TokenTest homepage and use the same endpoint and model name your application will use.

1. Discover models

Use model discovery or call:

GET /v1/models

Confirm the target model appears in the registry.

2. Run quick or truth evaluation

Use the same endpoint and model name your application will use:

Endpoint: https://your-router.example.com
Model: kimi-k3
Protocol: OpenAI /v1/chat/completions

Focus first on D1 Identity & Protocol Integrity, not the overall score.

3. Open the raw evidence

For successful probes, inspect:

request.body.model
response.model
response.id
finish_reason
usage
content_preview

If the same model mismatch appears across many probes, it is not a one-off response anomaly.

4. Ask the provider for an explanation

Send the request IDs and raw snippets to the provider. Ask:

A procurement checklist

Check Pass condition Risk signal
Model registry /models contains the target model Missing model or suspicious owner
Fingerprint consistency response.model matches request or has a documented alias Another model ID is returned
Nonce behavior Each probe returns the current nonce Old nonce, missing nonce, static answer
Usage integrity input/output/total are explainable zero output, inconsistent total, messy fields
Truncation behavior finish reason matches token limits many empty or invisible answers
Error shape protocol-correct 4xx/5xx internal stack traces or channel leakage

This checklist is more useful for procurement than a benchmark score because it asks whether the channel itself can be trusted.

Why TokenTest separates authenticity from production compatibility

The same kimi-k3 run also showed many length-limited or empty visible outputs.

That evidence matters, but it should not be mixed with the model fingerprint finding.

TokenTest separates the result into two layers:

  1. Authenticity: model identity, protocol shape, nonce, auth, headers, and usage evidence.
  2. Production compatibility: structured output, deterministic tasks, tools, long output, latency, and truncation behavior.

This avoids two bad conclusions:

For AI middle-layer buyers, that distinction is critical. You need to know whether the channel has an identity problem, or whether the identity is plausible but production behavior needs tuning.

Common mistakes

Final take

Model fingerprint verification answers a practical procurement question:

Are we receiving the model access we paid for, or a substituted route, alias, or fallback?

The response.model field is not decorative metadata. It is the first runtime identity signal.

This kimi-k3 case shows why runtime evidence matters: an endpoint can list the requested model and answer simple probes while still returning a different model identity in the raw response.

Before production, run a black-box TokenTest evaluation and keep the request, response, nonce, usage, and request ID evidence. If the route is clean, the evidence helps prove it. If the route is watered down, aliased, or silently falling back, you see it before your customers do.