~ LOSSY

any-llm 1.40.2

stream.missing-finish · ollama

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

What the provider sent

Finish
none
Raw finish
null
Text
Octopuses are master of camouflage, relying on a distinct ability where their color
Tool calls
[]
Usage
{
  "alternatives": {},
  "cached_input": null,
  "input": null,
  "output": null,
  "raw": {},
  "reasoning": null,
  "total": null
}
Stream completed
false
Error
null
Wire excerpt
status: 200
content-type: application/x-ndjson
body (ndjson):
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:19.421674958Z","message":{"role":"assistant","content":"Oct"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:19.533325633Z","message":{"role":"assistant","content":"op"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:19.533383631Z","message":{"role":"assistant","content":"uses"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:19.533501035Z","message":{"role":"assistant","content":" are"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:19.65099542Z","message":{"role":"assistant","content":" master"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:19.759551535Z","message":{"role":"assistant","content":" of"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:19.872036409Z","message":{"role":"assistant","content":" camouflage"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:19.982184117Z","message":{"role":"assistant","content":","},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:19.982211749Z","message":{"role":"assistant","content":" relying"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:20.092858018Z","message":{"role":"assistant","content":" on"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:20.092890519Z","message":{"role":"assistant","content":" a"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:20.202009085Z","message":{"role":"assistant","content":" distinct"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:20.315262694Z","message":{"role":"assistant","content":" ability"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:20.4294355Z","message":{"role":"assistant","content":" where"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:20.510076663Z","message":{"role":"assistant","content":" their"},"done":false}
{"model":"qwen3.5:0.8b","created_at":"2026-10-12T19:01:20.543159517Z","message":{"role":"assistant","content":" color"},"done":false}

What the library reported

Outcome
returned
Finish
{
  "raw": null,
  "source": null,
  "surface": "absent",
  "value": null
}
Text
Value
Octopuses are master of camouflage, relying on a distinct ability where their color
Surface
primary
Tool calls
[]
Usage
{
  "cached_input": null,
  "input": null,
  "output": null,
  "reasoning": null,
  "surface": {
    "cached_input": "absent",
    "input": "absent",
    "output": "absent",
    "reasoning": "absent",
    "total": "absent"
  },
  "total": null
}
Stream
{
  "chunks_seen": 16,
  "completed": null,
  "used": true
}
Error
null
Unsupported reason
null
Full observation JSON
{
  "elapsed_ms": 267.96215679496527,
  "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": [],
  "outcome": "returned",
  "stream": {
    "chunks_seen": 16,
    "completed": null,
    "used": true
  },
  "structured": {
    "attempted": false,
    "returned_as_success": false,
    "value": null
  },
  "text": {
    "surface": "primary",
    "value": "Octopuses are master of camouflage, relying on a distinct ability where their color"
  },
  "tool_calls": [],
  "unsupported_reason": null,
  "usage": {
    "cached_input": null,
    "input": null,
    "output": null,
    "reasoning": null,
    "surface": {
      "cached_input": "absent",
      "input": "absent",
      "output": "absent",
      "reasoning": "absent",
      "total": "absent"
    },
    "total": null
  }
}

Fixture

derived ollama/stream.missing-finish

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

Reproduce

wiretruth serve ollama/stream.missing-finish

Plain-library snippet from the shim manifest.

any_llm.completion(model=model, provider='ollama', api_base=WIRETRUTH_BASE_URL_OLLAMA, api_key=WIRETRUTH_API_KEY)

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