~ LOSSY

any-llm 1.40.2

stream.missing-finish · gemini

Back to results · Scenario

Requirements

IdLevelStatusEvidence
no-normal-stopMUSTSATISFIEDoutcome=returned; finish.value=null (absent); truth.finish="none"; forbidden finish="stop"
stream-incompleteMUSTNOT_OBSERVABLEstream.completed=null; outcome=returned; truth.stream_completed=false

Notes

  • shim: Gemini reasoning_effort none is unsupported by any-llm; omitted to use the model default.

What the provider sent

Finish
none
Raw finish
null
Text
Octopuses are the ultimate masters of disguise, utilizing a
Tool calls
[]
Usage
{
  "alternatives": {},
  "cached_input": null,
  "input": 22,
  "output": 12,
  "raw": {
    "candidatesTokenCount": 12,
    "promptTokenCount": 22,
    "promptTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 22
      }
    ],
    "serviceTier": "standard",
    "totalTokenCount": 34
  },
  "reasoning": null,
  "total": 34
}
Stream completed
false
Error
null
Wire excerpt
status: 200
content-type: text/event-stream
body (sse):
data: {"candidates": [{"content": {"parts": [{"text": "Octop"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 22,"candidatesTokenCount": 2,"totalTokenCount": 24,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 22}],"serviceTier": "standard"},"modelVersion": "gemini-3.5-flash-lite","responseId": "pgTOaonbKMuV_uMPvK7d4AE"}


data: {"candidates": [{"content": {"parts": [{"text": "uses are the ultimate masters of disguise, utilizing a"}],"role": "model"},"index": 0}],"usageMetadata": {"promptTokenCount": 22,"candidatesTokenCount": 12,"totalTokenCount": 34,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 22}],"serviceTier": "standard"},"modelVersion": "gemini-3.5-flash-lite","responseId": "pgTOaonbKMuV_uMPvK7d4AE"}

What the library reported

Outcome
returned
Finish
{
  "raw": null,
  "source": null,
  "surface": "absent",
  "value": null
}
Text
Value
Octopuses are the ultimate masters of disguise, utilizing a
Surface
primary
Tool calls
[]
Usage
{
  "cached_input": null,
  "input": 22,
  "output": 12,
  "reasoning": null,
  "surface": {
    "cached_input": "absent",
    "input": "primary",
    "output": "primary",
    "reasoning": "absent",
    "total": "primary"
  },
  "total": 34
}
Stream
{
  "chunks_seen": 2,
  "completed": null,
  "used": true
}
Error
null
Unsupported reason
null
Full observation JSON
{
  "elapsed_ms": 761.2541867420077,
  "error": null,
  "finish": {
    "raw": null,
    "source": null,
    "surface": "absent",
    "value": null
  },
  "format": "wiretruth.observation/v1",
  "library": {
    "api": "any_llm.completion",
    "language": "python",
    "name": "any-llm",
    "version": "1.40.2"
  },
  "notes": [
    "Gemini reasoning_effort none is unsupported by any-llm; omitted to use the model default."
  ],
  "outcome": "returned",
  "stream": {
    "chunks_seen": 2,
    "completed": null,
    "used": true
  },
  "structured": {
    "attempted": false,
    "returned_as_success": false,
    "value": null
  },
  "text": {
    "surface": "primary",
    "value": "Octopuses are the ultimate masters of disguise, utilizing a"
  },
  "tool_calls": [],
  "unsupported_reason": null,
  "usage": {
    "cached_input": null,
    "input": 22,
    "output": 12,
    "reasoning": null,
    "surface": {
      "cached_input": "absent",
      "input": "primary",
      "output": "primary",
      "reasoning": "absent",
      "total": "primary"
    },
    "total": 34
  }
}

Fixture

derived gemini/stream.missing-finish

ProvenanceValue
Transformstrip_finish
Source fixturegemini/truncation.text-stream
RationaleThe stream ends cleanly without its finish signal.
Evidencehttps://github.com/pydantic/pydantic-ai/issues/6610

Reproduce

wiretruth serve gemini/stream.missing-finish

Plain-library snippet from the shim manifest.

any_llm.completion(model=model, provider='gemini', api_base=WIRETRUTH_BASE_URL_GEMINI, api_key=WIRETRUTH_API_KEY); host-root base URL

Upstream

reported Issue

Fixed in: not specified

A stream that ends before the provider's terminal signal returns the partial chunks normally, with no error and no incomplete flag (reproduced on 1.40.2 and 1.50.0). The OpenAI Responses path reports the output item as incomplete and passes.

History

VersionGrade
1.40.2~ LOSSY
1.38.0~ LOSSY
1.33.0~ LOSSY