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:
parent
e4c7259df3
commit
038aca5439
30 changed files with 4841 additions and 0 deletions
15
packages/halkyon_llm/test/fixtures/documented/anthropic/overloaded_midstream.http
vendored
Normal file
15
packages/halkyon_llm/test/fixtures/documented/anthropic/overloaded_midstream.http
vendored
Normal 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"}}
|
||||
|
||||
4
packages/halkyon_llm/test/fixtures/documented/anthropic/status_400.http
vendored
Normal file
4
packages/halkyon_llm/test/fixtures/documented/anthropic/status_400.http
vendored
Normal 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"}
|
||||
5
packages/halkyon_llm/test/fixtures/documented/anthropic/status_401.http
vendored
Normal file
5
packages/halkyon_llm/test/fixtures/documented/anthropic/status_401.http
vendored
Normal 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"}
|
||||
4
packages/halkyon_llm/test/fixtures/documented/anthropic/status_402.http
vendored
Normal file
4
packages/halkyon_llm/test/fixtures/documented/anthropic/status_402.http
vendored
Normal 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"}
|
||||
5
packages/halkyon_llm/test/fixtures/documented/anthropic/status_429.http
vendored
Normal file
5
packages/halkyon_llm/test/fixtures/documented/anthropic/status_429.http
vendored
Normal 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"}
|
||||
4
packages/halkyon_llm/test/fixtures/documented/anthropic/status_529.http
vendored
Normal file
4
packages/halkyon_llm/test/fixtures/documented/anthropic/status_529.http
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
HTTP 529
|
||||
content-type: application/json
|
||||
|
||||
{"type":"error","error":{"type":"overloaded_error","message":"Overloaded"},"request_id":"req_011CSHoEeqs5C35K2UUqR7Fz"}
|
||||
39
packages/halkyon_llm/test/fixtures/documented/anthropic/text.http
vendored
Normal file
39
packages/halkyon_llm/test/fixtures/documented/anthropic/text.http
vendored
Normal 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"}
|
||||
|
||||
45
packages/halkyon_llm/test/fixtures/documented/anthropic/tool.http
vendored
Normal file
45
packages/halkyon_llm/test/fixtures/documented/anthropic/tool.http
vendored
Normal 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"}
|
||||
|
||||
24
packages/halkyon_llm/test/fixtures/documented/openai-responses/incomplete.http
vendored
Normal file
24
packages/halkyon_llm/test/fixtures/documented/openai-responses/incomplete.http
vendored
Normal 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":{}}}
|
||||
|
||||
15
packages/halkyon_llm/test/fixtures/documented/openai-responses/quota_error.http
vendored
Normal file
15
packages/halkyon_llm/test/fixtures/documented/openai-responses/quota_error.http
vendored
Normal 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":{}}}
|
||||
|
||||
18
packages/halkyon_llm/test/fixtures/documented/openai-responses/server_error_midstream.http
vendored
Normal file
18
packages/halkyon_llm/test/fixtures/documented/openai-responses/server_error_midstream.http
vendored
Normal 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":{}}}
|
||||
|
||||
4
packages/halkyon_llm/test/fixtures/documented/openai-responses/status_401.http
vendored
Normal file
4
packages/halkyon_llm/test/fixtures/documented/openai-responses/status_401.http
vendored
Normal 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"}}
|
||||
5
packages/halkyon_llm/test/fixtures/documented/openai-responses/status_429.http
vendored
Normal file
5
packages/halkyon_llm/test/fixtures/documented/openai-responses/status_429.http
vendored
Normal 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"}}
|
||||
4
packages/halkyon_llm/test/fixtures/documented/openai-responses/status_429_quota.http
vendored
Normal file
4
packages/halkyon_llm/test/fixtures/documented/openai-responses/status_429_quota.http
vendored
Normal 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"}}
|
||||
44
packages/halkyon_llm/test/fixtures/documented/openai-responses/text.http
vendored
Normal file
44
packages/halkyon_llm/test/fixtures/documented/openai-responses/text.http
vendored
Normal 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":{}}}
|
||||
|
||||
45
packages/halkyon_llm/test/fixtures/documented/openai-responses/tool.http
vendored
Normal file
45
packages/halkyon_llm/test/fixtures/documented/openai-responses/tool.http
vendored
Normal 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":{}}}
|
||||
|
||||
4
packages/halkyon_llm/test/fixtures/documented/openai/gemini_status_400.http
vendored
Normal file
4
packages/halkyon_llm/test/fixtures/documented/openai/gemini_status_400.http
vendored
Normal 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"}}]
|
||||
9
packages/halkyon_llm/test/fixtures/documented/openai/gemini_tool.http
vendored
Normal file
9
packages/halkyon_llm/test/fixtures/documented/openai/gemini_tool.http
vendored
Normal 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]
|
||||
|
||||
7
packages/halkyon_llm/test/fixtures/documented/openai/llamacpp_error.http
vendored
Normal file
7
packages/halkyon_llm/test/fixtures/documented/openai/llamacpp_error.http
vendored
Normal 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"}}
|
||||
|
||||
4
packages/halkyon_llm/test/fixtures/documented/openai/mistral_status_422.http
vendored
Normal file
4
packages/halkyon_llm/test/fixtures/documented/openai/mistral_status_422.http
vendored
Normal 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
Loading…
Reference in a new issue