feat(llm): halkyon_llm, language models' APIs streamed over plain HTTP (ADR 0021, step 2)

A pure Dart package, no SDKs, one interface (LlmClient) over Anthropic's
Messages API, OpenAI's chat completions, in each known host's dialect and
the local servers' (D45), and OpenAI's Responses API, stateless (D46). A
model's turn keeps what its provider wants back with the tools' results:
Anthropic's thinking blocks, the Responses API's reasoning items and
message phase, Gemini's thought signatures. Failures come by kind, the
provider's words cut and without keys.

Tested on replies written from the providers' documentation, replayed in
pieces of 1, 7 and 4,096 bytes; tool/record_llm.dart records real ones
with a key of one's own, which the tests then run on too (D36).
FakeLlmClient for the code that uses it. BSD-3-Clause, as halkyon_oidc.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-25 17:38:53 +01:00
commit 038aca5439
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
30 changed files with 4841 additions and 0 deletions

View file

@ -0,0 +1,15 @@
HTTP 200
content-type: text/event-stream; charset=utf-8
event: message_start
data: {"type":"message_start","message":{"id":"msg_01Qm2vYB8xkN4cH6sGtRpL3J","type":"message","role":"assistant","model":"claude-sonnet-5-5","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":412,"output_tokens":1}}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"„Hund“"}}
event: error
data: {"type": "error", "error": {"type": "overloaded_error", "message": "Overloaded"}}

View file

@ -0,0 +1,4 @@
HTTP 400
content-type: application/json
{"type":"error","error":{"type":"invalid_request_error","message":"model: claude-sonet-5-5 is not a valid model"},"request_id":"req_011CSHoEeqs5C35K2UUqR7G0"}

View file

@ -0,0 +1,5 @@
HTTP 401
content-type: application/json
request-id: req_018EeWyXxfu5pfWkrYcMdjWG
{"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"},"request_id":"req_018EeWyXxfu5pfWkrYcMdjWG"}

View file

@ -0,0 +1,4 @@
HTTP 402
content-type: application/json
{"type":"error","error":{"type":"billing_error","message":"Your credit balance is too low to access the Claude API."},"request_id":"req_011CSHoEeqs5C35K2UUqR7G1"}

View file

@ -0,0 +1,5 @@
HTTP 429
content-type: application/json
retry-after: 30
{"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed the rate limit for your organization of 50 requests per minute."},"request_id":"req_011CSHoEeqs5C35K2UUqR7Fy"}

View file

@ -0,0 +1,4 @@
HTTP 529
content-type: application/json
{"type":"error","error":{"type":"overloaded_error","message":"Overloaded"},"request_id":"req_011CSHoEeqs5C35K2UUqR7Fz"}

View file

@ -0,0 +1,39 @@
HTTP 200
content-type: text/event-stream; charset=utf-8
event: message_start
data: {"type":"message_start","message":{"id":"msg_01Xq7aVbN3T9kd2LwPZr5HcE","type":"message","role":"assistant","model":"claude-sonnet-5-5","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":412,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":1}}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""}}
event: ping
data: {"type": "ping"}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"EqQBCgIYAhIMxk3Lr9vQm2HbW7pTGgy1d2nXo8Rf4KsJ0eQiMNp6"}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"„Hund“ heißt auf Japanisch"}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" 犬 (いぬ, inu)."}}
event: content_block_stop
data: {"type":"content_block_stop","index":1}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":38}}
event: message_stop
data: {"type":"message_stop"}

View file

@ -0,0 +1,45 @@
HTTP 200
content-type: text/event-stream; charset=utf-8
event: message_start
data: {"type":"message_start","message":{"id":"msg_014p7gG3wDgGV9EUtLvnow3U","type":"message","role":"assistant","model":"claude-sonnet-5-5","stop_sequence":null,"usage":{"input_tokens":472,"output_tokens":2},"content":[],"stop_reason":null}}
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":"Ich sehe"}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" im Studienset nach."}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_01T1x1fJ34qAmk2tNTrN7Up6","name":"find_cards","input":{}}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"query\":"}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":" \"Hu"}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"nd\", \"limit\": 5}"}}
event: content_block_stop
data: {"type":"content_block_stop","index":1}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"tool_use","stop_sequence":null},"usage":{"output_tokens":89}}
event: message_stop
data: {"type":"message_stop"}

View file

@ -0,0 +1,24 @@
HTTP 200
content-type: text/event-stream; charset=utf-8
event: response.created
data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_2d8f33e0a1b2c3d4","object":"response","created_at":1761400200,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":null,"metadata":{}}}
event: response.output_item.added
data: {"type":"response.output_item.added","sequence_number":1,"output_index":0,"item":{"id":"rs_2d8f33e0aa01","type":"reasoning","encrypted_content":"gAAAAABo_Rk1","summary":[]}}
event: response.output_item.done
data: {"type":"response.output_item.done","sequence_number":2,"output_index":0,"item":{"id":"rs_2d8f33e0aa01","type":"reasoning","encrypted_content":"gAAAAABo_Rk1nQ2xv8WcTq0Lz3HfJ5yV7aBdE9gKmPuRtY1sXo4iC6eNlA2vB8jM0zQwU=","summary":[]}}
event: response.output_item.added
data: {"type":"response.output_item.added","sequence_number":3,"output_index":1,"item":{"id":"msg_2d8f33e0bb02","type":"message","status":"in_progress","role":"assistant","content":[],"phase":"final_answer"}}
event: response.output_text.delta
data: {"type":"response.output_text.delta","sequence_number":4,"item_id":"msg_2d8f33e0bb02","output_index":1,"content_index":0,"delta":"„Hund“ heißt","logprobs":[],"obfuscation":"Zr"}
event: response.output_item.done
data: {"type":"response.output_item.done","sequence_number":5,"output_index":1,"item":{"id":"msg_2d8f33e0bb02","type":"message","status":"incomplete","role":"assistant","content":[{"type":"output_text","text":"„Hund“ heißt","annotations":[],"logprobs":[]}],"phase":"final_answer"}}
event: response.incomplete
data: {"type":"response.incomplete","sequence_number":6,"response":{"id":"resp_2d8f33e0a1b2c3d4","object":"response","created_at":1761400200,"status":"incomplete","background":false,"error":null,"incomplete_details":{"reason":"max_output_tokens"},"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[{"id":"rs_2d8f33e0aa01","type":"reasoning","encrypted_content":"gAAAAABo_Rk1nQ2xv8WcTq0Lz3HfJ5yV7aBdE9gKmPuRtY1sXo4iC6eNlA2vB8jM0zQwU=","summary":[]},{"id":"msg_2d8f33e0bb02","type":"message","status":"incomplete","role":"assistant","content":[{"type":"output_text","text":"„Hund“ heißt","annotations":[],"logprobs":[]}],"phase":"final_answer"}],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":{"input_tokens":412,"input_tokens_details":{"cached_tokens":0},"output_tokens":16,"output_tokens_details":{"reasoning_tokens":12},"total_tokens":428},"metadata":{}}}

View file

@ -0,0 +1,15 @@
HTTP 200
content-type: text/event-stream; charset=utf-8
event: response.created
data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_3e9044f1b2c3d4e5","object":"response","created_at":1761400200,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":null,"metadata":{}}}
event: response.in_progress
data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_3e9044f1b2c3d4e5","object":"response","created_at":1761400200,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":null,"metadata":{}}}
event: error
data: {"type":"error","sequence_number":2,"error":{"type":"insufficient_quota","code":"insufficient_quota","message":"You exceeded your current quota, please check your plan and billing details.","param":null}}
event: response.failed
data: {"type":"response.failed","sequence_number":3,"response":{"id":"resp_3e9044f1b2c3d4e5","object":"response","created_at":1761400200,"status":"failed","background":false,"error":{"code":"insufficient_quota","message":"You exceeded your current quota, please check your plan and billing details."},"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":null,"metadata":{}}}

View file

@ -0,0 +1,18 @@
HTTP 200
content-type: text/event-stream; charset=utf-8
event: response.created
data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_4fa155a2c3d4e5f6","object":"response","created_at":1761400200,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":null,"metadata":{}}}
event: response.output_item.added
data: {"type":"response.output_item.added","sequence_number":1,"output_index":0,"item":{"id":"msg_4fa155a2bb01","type":"message","status":"in_progress","role":"assistant","content":[],"phase":"final_answer"}}
event: response.output_text.delta
data: {"type":"response.output_text.delta","sequence_number":2,"item_id":"msg_4fa155a2bb01","output_index":0,"content_index":0,"delta":"„Hund“","logprobs":[],"obfuscation":"Qx"}
event: error
data: {"type":"error","sequence_number":3,"code":"server_error","message":"The server had an error while processing your request.","param":null}
event: response.failed
data: {"type":"response.failed","sequence_number":4,"response":{"id":"resp_4fa155a2c3d4e5f6","object":"response","created_at":1761400200,"status":"failed","background":false,"error":{"code":"server_error","message":"The server had an error while processing your request."},"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":{"input_tokens":412,"input_tokens_details":{"cached_tokens":0},"output_tokens":3,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":415},"metadata":{}}}

View file

@ -0,0 +1,4 @@
HTTP 401
content-type: application/json
{"error":{"message":"Incorrect API key provided: sk-proj-****wxyz. You can find your API key at https://platform.openai.com/account/api-keys.","type":"invalid_request_error","param":null,"code":"invalid_api_key"}}

View file

@ -0,0 +1,5 @@
HTTP 429
content-type: application/json
retry-after: 20
{"error":{"message":"Rate limit reached for gpt-5-mini in organization org-x on requests per min (RPM): Limit 500, Used 500, Requested 1.","type":"requests","param":null,"code":"rate_limit_exceeded"}}

View file

@ -0,0 +1,4 @@
HTTP 429
content-type: application/json
{"error":{"message":"You exceeded your current quota, please check your plan and billing details.","type":"insufficient_quota","param":null,"code":"insufficient_quota"}}

View file

@ -0,0 +1,44 @@
HTTP 200
content-type: text/event-stream; charset=utf-8
event: response.created
data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_0f3a91c2d4e5b6a7","object":"response","created_at":1761400200,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":null,"metadata":{}}}
event: response.in_progress
data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_0f3a91c2d4e5b6a7","object":"response","created_at":1761400200,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":null,"metadata":{}}}
event: response.output_item.added
data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"rs_0f3a91c2aa01","type":"reasoning","encrypted_content":"gAAAAABo_Rk1","summary":[]}}
event: response.output_item.done
data: {"type":"response.output_item.done","sequence_number":3,"output_index":0,"item":{"id":"rs_0f3a91c2aa01","type":"reasoning","encrypted_content":"gAAAAABo_Rk1nQ2xv8WcTq0Lz3HfJ5yV7aBdE9gKmPuRtY1sXo4iC6eNlA2vB8jM0zQwU=","summary":[]}}
event: response.output_item.added
data: {"type":"response.output_item.added","sequence_number":4,"output_index":1,"item":{"id":"msg_0f3a91c2bb02","type":"message","status":"in_progress","role":"assistant","content":[],"phase":"final_answer"}}
event: response.content_part.added
data: {"type":"response.content_part.added","sequence_number":5,"item_id":"msg_0f3a91c2bb02","output_index":1,"content_index":0,"part":{"type":"output_text","text":"","annotations":[],"logprobs":[]}}
event: response.output_text.delta
data: {"type":"response.output_text.delta","sequence_number":6,"item_id":"msg_0f3a91c2bb02","output_index":1,"content_index":0,"delta":"„Hund“ heißt","logprobs":[],"obfuscation":"q8Zr"}
: keep-alive
event: response.output_text.delta
data: {"type":"response.output_text.delta","sequence_number":7,"item_id":"msg_0f3a91c2bb02","output_index":1,"content_index":0,"delta":" auf Japanisch 犬","logprobs":[],"obfuscation":"Lm"}
event: response.output_text.delta
data: {"type":"response.output_text.delta","sequence_number":8,"item_id":"msg_0f3a91c2bb02","output_index":1,"content_index":0,"delta":" (いぬ, inu).","logprobs":[],"obfuscation":"x0Tq3Wv"}
event: response.output_text.done
data: {"type":"response.output_text.done","sequence_number":9,"item_id":"msg_0f3a91c2bb02","output_index":1,"content_index":0,"text":"„Hund“ heißt auf Japanisch 犬 (いぬ, inu).","logprobs":[]}
event: response.content_part.done
data: {"type":"response.content_part.done","sequence_number":10,"item_id":"msg_0f3a91c2bb02","output_index":1,"content_index":0,"part":{"type":"output_text","text":"„Hund“ heißt auf Japanisch 犬 (いぬ, inu).","annotations":[],"logprobs":[]}}
event: response.output_item.done
data: {"type":"response.output_item.done","sequence_number":11,"output_index":1,"item":{"id":"msg_0f3a91c2bb02","type":"message","status":"completed","role":"assistant","content":[{"type":"output_text","text":"„Hund“ heißt auf Japanisch 犬 (いぬ, inu).","annotations":[],"logprobs":[]}],"phase":"final_answer"}}
event: response.completed
data: {"type":"response.completed","sequence_number":12,"response":{"id":"resp_0f3a91c2d4e5b6a7","object":"response","created_at":1761400200,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[{"id":"rs_0f3a91c2aa01","type":"reasoning","encrypted_content":"gAAAAABo_Rk1nQ2xv8WcTq0Lz3HfJ5yV7aBdE9gKmPuRtY1sXo4iC6eNlA2vB8jM0zQwU=","summary":[]},{"id":"msg_0f3a91c2bb02","type":"message","status":"completed","role":"assistant","content":[{"type":"output_text","text":"„Hund“ heißt auf Japanisch 犬 (いぬ, inu).","annotations":[],"logprobs":[]}],"phase":"final_answer"}],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":{"input_tokens":412,"input_tokens_details":{"cached_tokens":256},"output_tokens":62,"output_tokens_details":{"reasoning_tokens":24},"total_tokens":474},"metadata":{}}}

View file

@ -0,0 +1,45 @@
HTTP 200
content-type: text/event-stream; charset=utf-8
event: response.created
data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_1c7e22d9f0a1b2c3","object":"response","created_at":1761400200,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":null,"metadata":{}}}
event: response.in_progress
data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_1c7e22d9f0a1b2c3","object":"response","created_at":1761400200,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":null,"metadata":{}}}
event: response.output_item.added
data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"rs_1c7e22d9aa01","type":"reasoning","encrypted_content":"gAAAAABo_Rk1","summary":[]}}
event: response.output_item.done
data: {"type":"response.output_item.done","sequence_number":3,"output_index":0,"item":{"id":"rs_1c7e22d9aa01","type":"reasoning","encrypted_content":"gAAAAABo_Sx9pL3mN7kT1bV5cX2zA8dF4gH6jK0qW=","summary":[]}}
event: response.output_item.added
data: {"type":"response.output_item.added","sequence_number":4,"output_index":1,"item":{"id":"fc_1c7e22d9cc01","type":"function_call","status":"in_progress","arguments":"","call_id":"call_Hq2ZtX0aP4kLm9sB","name":"find_cards"}}
event: response.function_call_arguments.delta
data: {"type":"response.function_call_arguments.delta","sequence_number":5,"item_id":"fc_1c7e22d9cc01","output_index":1,"delta":"{\"query\":","obfuscation":"h0EQ"}
event: response.function_call_arguments.delta
data: {"type":"response.function_call_arguments.delta","sequence_number":6,"item_id":"fc_1c7e22d9cc01","output_index":1,"delta":"\"Hund\",\"limit\":5}","obfuscation":"h0EQ"}
event: response.function_call_arguments.done
data: {"type":"response.function_call_arguments.done","sequence_number":7,"item_id":"fc_1c7e22d9cc01","output_index":1,"arguments":"{\"query\":\"Hund\",\"limit\":5}"}
event: response.output_item.done
data: {"type":"response.output_item.done","sequence_number":8,"output_index":1,"item":{"id":"fc_1c7e22d9cc01","type":"function_call","status":"completed","arguments":"{\"query\":\"Hund\",\"limit\":5}","call_id":"call_Hq2ZtX0aP4kLm9sB","name":"find_cards"}}
event: response.output_item.added
data: {"type":"response.output_item.added","sequence_number":9,"output_index":2,"item":{"id":"fc_1c7e22d9cc02","type":"function_call","status":"in_progress","arguments":"","call_id":"call_7DdmO9pD3xa9XTPN","name":"find_cards"}}
event: response.function_call_arguments.delta
data: {"type":"response.function_call_arguments.delta","sequence_number":10,"item_id":"fc_1c7e22d9cc02","output_index":2,"delta":"{\"query\":\"犬\"}","obfuscation":"h0EQ"}
event: response.function_call_arguments.done
data: {"type":"response.function_call_arguments.done","sequence_number":11,"item_id":"fc_1c7e22d9cc02","output_index":2,"arguments":"{\"query\":\"犬\"}"}
event: response.output_item.done
data: {"type":"response.output_item.done","sequence_number":12,"output_index":2,"item":{"id":"fc_1c7e22d9cc02","type":"function_call","status":"completed","arguments":"{\"query\":\"犬\"}","call_id":"call_7DdmO9pD3xa9XTPN","name":"find_cards"}}
event: response.completed
data: {"type":"response.completed","sequence_number":13,"response":{"id":"resp_1c7e22d9f0a1b2c3","object":"response","created_at":1761400200,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":"Du hilfst beim Japanischlernen.","max_output_tokens":4096,"model":"gpt-6-astra-2026-09-30","output":[{"id":"rs_1c7e22d9aa01","type":"reasoning","encrypted_content":"gAAAAABo_Sx9pL3mN7kT1bV5cX2zA8dF4gH6jK0qW=","summary":[]},{"id":"fc_1c7e22d9cc01","type":"function_call","status":"completed","arguments":"{\"query\":\"Hund\",\"limit\":5}","call_id":"call_Hq2ZtX0aP4kLm9sB","name":"find_cards"},{"id":"fc_1c7e22d9cc02","type":"function_call","status":"completed","arguments":"{\"query\":\"犬\"}","call_id":"call_7DdmO9pD3xa9XTPN","name":"find_cards"}],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":"medium","summary":null},"safety_identifier":"p_8Zq3","store":false,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"truncation":"disabled","usage":{"input_tokens":472,"input_tokens_details":{"cached_tokens":0},"output_tokens":89,"output_tokens_details":{"reasoning_tokens":64},"total_tokens":561},"metadata":{}}}

View file

@ -0,0 +1,4 @@
HTTP 400
content-type: application/json
[{"error":{"code":400,"message":"Invalid JSON payload received. Unknown name \"store\": Cannot find field.","status":"INVALID_ARGUMENT"}}]

View file

@ -0,0 +1,9 @@
HTTP 200
content-type: text/event-stream
data: {"choices":[{"delta":{"content":"Ich sehe nach.","role":"assistant"},"index":0}],"created":1761400300,"id":"gR0qaZ6uNvqU","model":"gemini-3-flash","object":"chat.completion.chunk","usage":{"completion_tokens":4,"prompt_tokens":472,"total_tokens":540}}
data: {"choices":[{"delta":{"role":"assistant","tool_calls":[{"extra_content":{"google":{"thought_signature":"CiQBcsjafQ=="}},"function":{"arguments":"{\"query\":\"Hund\",\"limit\":5}","name":"find_cards"},"id":"function-call-1","type":"function"}]},"finish_reason":"stop","index":0}],"created":1761400300,"id":"gR0qaZ6uNvqU","model":"gemini-3-flash","object":"chat.completion.chunk","usage":{"completion_tokens":21,"prompt_tokens":472,"total_tokens":561}}
data: [DONE]

View file

@ -0,0 +1,7 @@
HTTP 200
content-type: text/event-stream
data: {"choices":[{"finish_reason":null,"index":0,"delta":{"role":"assistant","content":null}}],"created":1761400500,"id":"chatcmpl-x3Yb","model":"gpt-oss-20b","system_fingerprint":"b6900","object":"chat.completion.chunk"}
data: {"error":{"code":500,"message":"the request exceeds the available context size","type":"server_error"}}

View file

@ -0,0 +1,4 @@
HTTP 422
content-type: application/json
{"object":"error","message":{"detail":[{"type":"extra_forbidden","loc":["body","messages",0,"content"],"msg":"Extra inputs are not permitted","input":"Mein geheimer Text"}]},"type":"invalid_request_message_error","param":null,"code":null}

Some files were not shown because too many files have changed in this diff Show more