Telluvian

include_scores

The switch that controls whether the probe runs, what it changes in the response, and what it costs.

Copy this page as Markdown to paste into an AI assistant, or open it in one.

include_scores decides whether verification runs for a request. It is a boolean and defaults to false. Use probes to specify exactly which response probes to run when you opt in.

{
  "model": "google/gemma-4-31b-it",
  "messages": [{"role": "user", "content": "Hello"}],
  "include_scores": true
}

Leave it out, or send false, and the request is an ordinary unscored completion.

What it changes

true (opt-in)false (default)
choices[0].message.contentthe model's answerthe model's answer
usage, finish_reasonunchangedunchanged
scores, the probe's outputpresentnull
tokens, the array those scores align topresentnull
scores on stream chunkspresentabsent
Verification fee$1.00 / 1M completion tokensnot charged
Latencyprobe pass includedno probe pass

You always get the answer. Only the two probe extensions go away. include_scores: false is a request for an unscored completion, not for a shorter one. The generation settings are unchanged, although separate sampled requests can produce different answers.

tokens is the one to read carefully. It is not the completion: it is the decoded text of each generated token, in order, such that joining it reproduces content exactly. It exists so a score has something to point at, so it is null when there are no scores. The text itself is in content, as always.

Sending it

curl https://api.telluvian.ai/v1/chat/completions \
  -H "Authorization: Bearer $TELLUVIAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemma-4-31b-it",
    "messages": [{"role": "user", "content": "Hello"}],
    "include_scores": true
  }'

A dropped opt-in means no verification

If include_scores: true does not reach the API, verification stays off. In Python use extra_body; check the response for scores rather than assuming a framework forwarded the field. A missing token score is not a score of zero.

When to turn it on

Turn it on for anything a user reads as a factual claim.

Leave it off where the score would not change what you do:

  • Cheap intermediate steps in a chain: dispatch, classification, reformatting, where nothing factual is being asserted.
  • Re-running a prompt you have already verified, e.g. regenerating output from a template with the same facts.

Choosing probes

Discover the probes loaded by the backend:

curl -sS https://api.telluvian.ai/v1/probes \
  -H "Authorization: Bearer $TELLUVIAN_API_KEY"

Use IDs from the response's data array in probes. This works with both a named generation model and telluvian/gallery-1, on Chat Completions and the Responses API:

{
  "model": "telluvian/gallery-1",
  "messages": [{"role": "user", "content": "When was the Eiffel Tower built?"}],
  "include_scores": true,
  "probes": ["hallucination"]
}

With probing enabled, omitting probes runs all loaded probes. A non-empty list selects only those probes; unknown names return 400. An empty list disables probing and its surcharge. Supplying names alone does not enable probing: include_scores: true is still required.

Request fieldsResponse probes run
include_scores omitted or falseNone, even if probes names a probe
include_scores: true, probes: ["hallucination"]Only hallucination, if available
include_scores: true, probes omitted or nullAll currently loaded response probes
probes: []None; no verification surcharge
include_scores: true, an unknown probe IDRequest rejected with 400

Use an explicit list when you want a fixed set of probes. The set selected by omitting probes can change as probes are loaded. GET /v1/probes lists available probes, not probes automatically enabled for your requests. Read each entry's id and description; do not assume that a name shown in an example is available on every deployment.

Gallery's routing probe selects the generation model. It is separate from these optional response probes: using telluvian/gallery-1 does not enable hallucination detection or add response probe scores.

Each selected probe's ID is also its key in scores. In the Python SDK, pass both controls through extra_body, for example extra_body={"include_scores": True, "probes": ["hallucination"]}. The older probe_path selector is deprecated and only accepts an already loaded probe; it cannot load arbitrary files or be combined with probes.

Per-request, not per-key

There is no account-level setting. Each request decides for itself, so a single API key can serve both scored and unscored traffic. One client can verify user-facing answers while another skips the probe for internal bookkeeping.

Verifying what you got

The honest check is the response itself, not the request you think you sent:

response = client.chat.completions.create(
    model="google/gemma-4-31b-it",
    messages=[{"role": "user", "content": "Hello"}],
    extra_body={"include_scores": True},
)

assert response.scores is not None, "the opt-in was dropped: no verification ran"

Your usage records also carry the per-request cost, so a scored request is visible in the dashboard as a higher cost_micros than an unscored one with the same token counts.