✓ PASS
pydantic-ai 2.61.0
stream.utf8-split · gemini
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
- STOP
- Text
- Café Zürich — καλημέρα! 東京で会いましょう 🌸🎉
- Tool calls
[]
- Usage
{ "alternatives": {}, "cached_input": null, "input": 20, "output": 16, "raw": { "candidatesTokenCount": 16, "promptTokenCount": 20, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 20 } ], "serviceTier": "standard", "totalTokenCount": 36 }, "reasoning": null, "total": 36 }- Stream completed
true
- Error
null
Wire excerpt
status: 200 content-type: text/event-stream body (chunks_b64): ZGF0YTogeyJjYW5kaWRhdGVzIjogW3siY29udGVudCI6IHsicGFydHMiOiBbeyJ0ZXh0IjogIkNhZsM= qSJ9XSwicm9sZSI6ICJtb2RlbCJ9LCJpbmRleCI6IDB9XSwidXNhZ2VNZXRhZGF0YSI6IHsicHJvbXB0VG9rZW5Db3VudCI6IDIwLCJjYW5kaWRhdGVzVG9rZW5Db3VudCI6IDIsInRvdGFsVG9rZW5Db3VudCI6IDIyLCJwcm9tcHRUb2tlbnNEZXRhaWxzIjogW3sibW9kYWxpdHkiOiAiVEVYVCIsInRva2VuQ291bnQiOiAyMH1dLCJzZXJ2aWNlVGllciI6ICJzdGFuZGFyZCJ9LCJtb2RlbFZlcnNpb24iOiAiZ2VtaW5pLTMuNS1mbGFzaC1saXRlIiwicmVzcG9uc2VJZCI6ICJmZ1RPYXJpN05ZemdqTWNQM0p6cW9BMCJ9DQoNCmRhdGE6IHsiY2FuZGlkYXRlcyI6IFt7ImNvbnRlbnQiOiB7InBhcnRzIjogW3sidGV4dCI6ICIgWsM= vHJpY2gg4g== gJQgzrrOsc67zrfOvM6tz4HOsSEg5g== nbHkuqzjgafkvJrjgYTjgb7jgZfjgofjgYYg8A== n4w= uPCfjokifV0sInJvbGUiOiAibW9kZWwifSwiaW5kZXgiOiAwfV0sInVzYWdlTWV0YWRhdGEiOiB7InByb21wdFRva2VuQ291bnQiOiAyMCwiY2FuZGlkYXRlc1Rva2VuQ291bnQiOiAxNiwidG90YWxUb2tlbkNvdW50IjogMzYsInByb21wdFRva2Vuc0RldGFpbHMiOiBbeyJtb2RhbGl0eSI6ICJURVhUIiwidG9rZW5Db3VudCI6IDIwfV0sInNlcnZpY2VUaWVyIjogInN0YW5kYXJkIn0sIm1vZGVsVmVyc2lvbiI6ICJnZW1pbmktMy41LWZsYXNoLWxpdGUiLCJyZXNwb25zZUlkIjogImZnVE9hcmk3Tll6Z2pNY1AzSnpxb0EwIn0NCg0KZGF0YTogeyJjYW5kaWRhdGVzIjogW3siY29udGVudCI6IHsicGFydHMiOiBbeyJ0ZXh0IjogIiIsInRob3VnaHRTaWduYXR1cmUiOiAiRW1BS1hnRnBGSDBUb0l6aVdEMFM2MncvY1F5UVRXL2NoUU1OYXRRU3d5cFlCckYyRVRqVkM1TzRoRjFpbVRPM1poakVzRXdVYUxPdWF3Q3BtbG1XMlpPeVZGQytVNXRYeWVxYUN5bnhYK09Ld0tPenQxeVh4VlNnSUNxTGNaMFVkeTQ9In1dLCJyb2xlIjogIm1vZGVsIn0sImZpbmlzaFJlYXNvbiI6ICJTVE9QIiwiaW5kZXgiOiAwfV0sInVzYWdlTWV0YWRhdGEiOiB7InByb21wdFRva2VuQ291bnQiOiAyMCwiY2FuZGlkYXRlc1Rva2VuQ291bnQiOiAxNiwidG90YWxUb2tlbkNvdW50IjogMzYsInByb21wdFRva2Vuc0RldGFpbHMiOiBbeyJtb2RhbGl0eSI6ICJURVhUIiwidG9rZW5Db3VudCI6IDIwfV0sInNlcnZpY2VUaWVyIjogInN0YW5kYXJkIn0sIm1vZGVsVmVyc2lvbiI6ICJnZW1pbmktMy41LWZsYXNoLWxpdGUiLCJyZXNwb25zZUlkIjogImZnVE9hcmk3Tll6Z2pNY1AzSnpxb0EwIn0NCg0K
What the library reported
- Outcome
- returned
- Finish
{ "raw": "STOP", "source": "ModelResponse.finish_reason", "surface": "primary", "value": "stop" }- Text
- Value
- Café Zürich — καλημέρα! 東京で会いましょう 🌸🎉
- Surface
- primary
- Tool calls
[]
- Usage
{ "cached_input": 0, "input": 20, "output": 16, "reasoning": 0, "surface": { "cached_input": "primary", "input": "primary", "output": "primary", "reasoning": "primary", "total": "primary" }, "total": 36 }- Stream
{ "chunks_seen": 6, "completed": true, "used": true }- Error
null
- Unsupported reason
null
Full observation JSON
{
"elapsed_ms": 223.48461113870144,
"error": null,
"finish": {
"raw": "STOP",
"source": "ModelResponse.finish_reason",
"surface": "primary",
"value": "stop"
},
"format": "wiretruth.observation/v1",
"library": {
"api": "Agent.run_stream_events",
"language": "python",
"name": "pydantic-ai",
"version": "2.61.0"
},
"notes": [],
"outcome": "returned",
"stream": {
"chunks_seen": 6,
"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": 20,
"output": 16,
"reasoning": 0,
"surface": {
"cached_input": "primary",
"input": "primary",
"output": "primary",
"reasoning": "primary",
"total": "primary"
},
"total": 36
}
}Fixture
derived gemini/stream.utf8-split
| Provenance | Value |
|---|---|
| Transform | rechunk_inside_utf8 |
| Source fixture | gemini/stream.utf8 |
| Rationale | A network chunk boundary splits a multi-byte UTF-8 character. |
| Evidence | https://github.com/langchain-ai/langchainjs/issues/5285 |
Reproduce
wiretruth serve gemini/stream.utf8-splitPlain-library snippet from the shim manifest.
GoogleModel(model, provider=GoogleProvider(base_url=WIRETRUTH_BASE_URL_GEMINI, api_key=WIRETRUTH_API_KEY)); host rootUpstream
No matching upstream report.
History
| Version | Grade |
|---|---|
| 2.61.0 | ✓ PASS |
| 2.56.0 | ✓ PASS |