✓ PASS
vercel-ai 7.0.153
usage.stream-final-chunk · anthropic
Requirements
| Id | Level | Status | Evidence |
|---|---|---|---|
| usage-reported | MUST | SATISFIED | usage.input=25 (primary); truth.usage.input=25; usage.output=12 (primary); truth.usage.output=12 |
What the provider sent
- Finish
- stop
- Raw finish
- end_turn
- Text
- Air scatters blue light more strongly.
- Tool calls
[]
- Usage
{ "alternatives": {}, "cached_input": null, "input": 25, "output": 12, "raw": { "input_tokens": 25, "output_tokens": 12 }, "reasoning": null, "total": 37 }- Stream completed
true
- Error
null
Wire excerpt
status: 200
content-type: text/event-stream
body (sse):
event: message_start
data: {"type": "message_start", "message": {"id": "msg_01Aq9w938a90dw8q", "type": "message", "role": "assistant", "content": [], "model": "claude-sonnet-5-5", "stop_reason": null, "stop_sequence": null, "usage": {"input_tokens": 25, "output_tokens": 1}}}
event: content_block_start
data: {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}}
event: ping
data: {"type": "ping"}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "Air "}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "scatters blue light more strongly."}}
event: content_block_stop
data: {"type": "content_block_stop", "index": 0}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":12}}
event: message_stop
data: {"type": "message_stop"}
What the library reported
- Outcome
- returned
- Finish
{ "raw": "end_turn", "source": "fullStream.finish.finishReason", "surface": "primary", "value": "stop" }- Text
- Value
- Air scatters blue light more strongly.
- Surface
- primary
- Tool calls
[]
- Usage
{ "cached_input": 0, "input": 25, "output": 12, "reasoning": null, "surface": { "cached_input": "primary", "input": "primary", "output": "primary", "reasoning": "absent", "total": "primary" }, "total": 37 }- Stream
{ "chunks_seen": 9, "completed": true, "used": true }- Error
null
- Unsupported reason
null
Full observation JSON
{
"elapsed_ms": 160.498637,
"error": null,
"finish": {
"raw": "end_turn",
"source": "fullStream.finish.finishReason",
"surface": "primary",
"value": "stop"
},
"format": "wiretruth.observation/v1",
"library": {
"api": "streamText",
"language": "javascript",
"name": "vercel-ai",
"version": "7.0.153"
},
"notes": [],
"outcome": "returned",
"stream": {
"chunks_seen": 9,
"completed": true,
"used": true
},
"structured": {
"attempted": false,
"returned_as_success": false,
"value": null
},
"text": {
"surface": "primary",
"value": "Air scatters blue light more strongly."
},
"tool_calls": [],
"unsupported_reason": null,
"usage": {
"cached_input": 0,
"input": 25,
"output": 12,
"reasoning": null,
"surface": {
"cached_input": "primary",
"input": "primary",
"output": "primary",
"reasoning": "absent",
"total": "primary"
},
"total": 37
}
}Fixture
documented anthropic/usage.stream-final-chunk
| Provenance | Value |
|---|---|
| Source | https://platform.claude.com/docs/en/build-with-claude/streaming#basic-streaming-request |
| Notes | Documented shapes, not a recording. Message envelope and stop fields follow handling-stop-reasons; content blocks follow thinking/streaming and handle-tool-calls. Model changed to claude-sonnet-5-5; IDs and scenario text are filled in. Token counts are illustrative, filled in to include thinking within the requested output limit, not measured. Based on the basic Hello stream, changing model and text to the scenario. Initial usage has input_tokens 25 and output_tokens 1; final cumulative output_tokens is filled in as 12. Adaptive thinking is assumed skipped; no cache fields were present in the base example. SSE names, JSON shapes, field order and spaced text/thinking events follow streaming examples; the compact message_delta follows Streaming request with tool use. Fragment boundaries and counts are filled in. Signature placeholder is copied literally from the signature_delta example; empty thinking_delta follows the documented omitted display flow. |
Reproduce
wiretruth serve anthropic/usage.stream-final-chunkPlain-library snippet from the shim manifest.
createAnthropic({ baseURL: WIRETRUTH_BASE_URL_ANTHROPIC + '/v1', apiKey })(model)Upstream
No matching upstream report.
History
| Version | Grade |
|---|---|
| 7.0.153 | ✓ PASS |
| 7.0.146 | ✓ PASS |
| 7.0.142 | ✓ PASS |