✓ PASS
vercel-ai 7.0.153
stream.utf8 · anthropic
Requirements
| Id | Level | Status | Evidence |
|---|---|---|---|
| text-reported | MUST | SATISFIED | text.value="Café Zürich — καλημέρα! 東京で会いましょう 🌸🎉" (primary); truth.text="Café Zürich — καλημέρα! 東京で会いましょう 🌸🎉" |
| no-replacement-chars | MUST | SATISFIED | text.value="Café Zürich — καλημέρα! 東京で会いましょう 🌸🎉" (primary); U+FFFD count=0 |
What the provider sent
- Finish
- stop
- Raw finish
- end_turn
- Text
- Café Zürich — καλημέρα! 東京で会いましょう 🌸🎉
- Tool calls
[]
- Usage
{ "alternatives": {}, "cached_input": null, "input": 25, "output": 40, "raw": { "input_tokens": 25, "output_tokens": 40 }, "reasoning": null, "total": 65 }- 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": "Café "}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "Zürich — καλημέρα! 東京で会いましょう 🌸🎉"}}
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":40}}
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
- Café Zürich — καλημέρα! 東京で会いましょう 🌸🎉
- Surface
- primary
- Tool calls
[]
- Usage
{ "cached_input": 0, "input": 25, "output": 40, "reasoning": null, "surface": { "cached_input": "primary", "input": "primary", "output": "primary", "reasoning": "absent", "total": "primary" }, "total": 65 }- Stream
{ "chunks_seen": 9, "completed": true, "used": true }- Error
null
- Unsupported reason
null
Full observation JSON
{
"elapsed_ms": 161.06262400000003,
"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": "Café Zürich — καλημέρα! 東京で会いましょう 🌸🎉"
},
"tool_calls": [],
"unsupported_reason": null,
"usage": {
"cached_input": 0,
"input": 25,
"output": 40,
"reasoning": null,
"surface": {
"cached_input": "primary",
"input": "primary",
"output": "primary",
"reasoning": "absent",
"total": "primary"
},
"total": 65
}
}Fixture
documented anthropic/stream.utf8
| 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, substituting the requested accented Latin, Greek, Japanese and emoji text. Each text fragment occurs once in the response. Adaptive thinking is assumed skipped. UTF-8 byte boundaries are unchanged here; the derived variant splits characters. 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/stream.utf8Plain-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 |