diff --git a/tests/integration/cost_calculation/cases/azure.py b/tests/integration/cost_calculation/cases/azure.py index d9f17c12bda..f2503f4d674 100644 --- a/tests/integration/cost_calculation/cases/azure.py +++ b/tests/integration/cost_calculation/cases/azure.py @@ -6069,6 +6069,21 @@ PARITY: Final[tuple[StreamParityTestCase, ...]] = ( ) BRIDGE_COST_PARITY: Final[tuple[BridgeCostParityTestCase, ...]] = ( + *bridge_pairs( + (AZURE_GPT_6_ASTRA_RESPONSES_JSON,), + ("/v1/chat/completions",), + deployment=Deployment(model="azure/responses/gpt-6-astra"), + ), + *bridge_pairs( + (AZURE_GPT_6_LUNA_RESPONSES_JSON,), + ("/v1/chat/completions",), + deployment=Deployment(model="azure/responses/gpt-6-luna"), + ), + *bridge_pairs( + (AZURE_GPT_6_1_SOL_RESPONSES_JSON,), + ("/v1/chat/completions",), + deployment=Deployment(model="azure/responses/gpt-6.1-sol"), + ), *bridge_pairs( (AZURE_GPT_5_6_INPUT_TEXT, AZURE_GPT_5_6_CACHE_READ, AZURE_GPT_5_6_STREAM, AZURE_GPT_5_6_REASONING), ("/v1/messages",), diff --git a/tests/integration/cost_calculation/cases/gemini.py b/tests/integration/cost_calculation/cases/gemini.py index 9fe4b1c50d5..397a7fc711c 100644 --- a/tests/integration/cost_calculation/cases/gemini.py +++ b/tests/integration/cost_calculation/cases/gemini.py @@ -23,6 +23,7 @@ def _gemini_case_response( response: JsonResponse | SseResponse, model_version: str, usage_fields: dict[str, JsonValue] | None = None, + omit_usage_fields: frozenset[str] = frozenset(), ) -> JsonResponse | SseResponse: match response: case JsonResponse(): @@ -35,11 +36,11 @@ def _gemini_case_response( **( { "usageMetadata": { - **cast(dict[str, JsonValue], usage), - **usage_fields, + **{key: value for key, value in usage.items() if key not in omit_usage_fields}, + **(usage_fields or {}), } } - if usage_fields is not None and isinstance(usage, dict) + if (usage_fields is not None or omit_usage_fields) and isinstance(usage, dict) else {} ), } @@ -49,17 +50,21 @@ def _gemini_case_response( return response.model_copy( update={ "frames": tuple( - _gemini_case_frame(frame, model_version, usage_fields) for frame in response.frames + _gemini_case_frame(frame, model_version, usage_fields, omit_usage_fields) + for frame in response.frames ) } ) def _gemini_case_frame( - frame: str, model_version: str, usage_fields: dict[str, JsonValue] | None + frame: str, + model_version: str, + usage_fields: dict[str, JsonValue] | None, + omit_usage_fields: frozenset[str] = frozenset(), ) -> str: replaced: Final = frame.replace("gemini-3.8-flash", model_version) - if usage_fields is None: + if usage_fields is None and not omit_usage_fields: return replaced prefix, separator, payload = replaced.partition("data: ") if not separator or payload == "[DONE]": @@ -68,7 +73,11 @@ def _gemini_case_frame( usage: Final = event.get("usageMetadata") if not isinstance(usage, dict): return replaced - return f"{prefix}data: {json.dumps({**event, 'usageMetadata': {**usage, **usage_fields}})}" + updated_usage: Final = { + **{key: value for key, value in usage.items() if key not in omit_usage_fields}, + **(usage_fields or {}), + } + return f"{prefix}data: {json.dumps({**event, 'usageMetadata': updated_usage})}" def _gemini_case( @@ -79,13 +88,14 @@ def _gemini_case( expected: ExactExpected, *, usage_fields: dict[str, JsonValue] | None = None, + omit_usage_fields: frozenset[str] = frozenset(), ) -> CostTrackingTestCase: return sibling.model_copy( update={ "name": name, "model": model, "response": _gemini_case_response( - cast(JsonResponse | SseResponse, sibling.response), model_version, usage_fields + cast(JsonResponse | SseResponse, sibling.response), model_version, usage_fields, omit_usage_fields ), "expected": expected, } @@ -3398,21 +3408,25 @@ GEMINI_GEMINI_4_ARGON_INPUT_TEXT: Final = _gemini_case( GEMINI_GEMINI_3_8_FLASH_INPUT_TEXT, "gemini-gemini-4-argon-input_text", "gemini/gemini-4-argon", "gemini-4-argon", ExactExpected(spend=0.00858, input_cost=0.004048, output_cost=0.004532, prompt_tokens=1840, completion_tokens=412), usage_fields={"candidatesTokensDetails": [{"modality": "TEXT", "tokenCount": 412}]}, + omit_usage_fields=frozenset({"serviceTier"}), ) GEMINI_GEMINI_4_ARGON_STREAM: Final = _gemini_case( GEMINI_GEMINI_3_8_FLASH_STREAM, "gemini-gemini-4-argon-stream", "gemini/gemini-4-argon", "gemini-4-argon", ExactExpected(spend=0.00858, input_cost=0.004048, output_cost=0.004532, prompt_tokens=1840, completion_tokens=412), usage_fields={"candidatesTokensDetails": [{"modality": "TEXT", "tokenCount": 412}]}, + omit_usage_fields=frozenset({"serviceTier"}), ) GEMINI_GEMINI_4_ARGON_CACHE_READ: Final = _gemini_case( GEMINI_GEMINI_3_8_FLASH_CACHE_READ, "gemini-gemini-4-argon-cache_read", "gemini/gemini-4-argon", "gemini-4-argon", ExactExpected(spend=0.00693968, input_cost=0.00275968, output_cost=0.00418, prompt_tokens=12928, completion_tokens=380), usage_fields={"candidatesTokensDetails": [{"modality": "TEXT", "tokenCount": 380}]}, + omit_usage_fields=frozenset({"serviceTier"}), ) GEMINI_GEMINI_4_ARGON_REASONING: Final = _gemini_case( GEMINI_GEMINI_3_8_FLASH_REASONING, "gemini-gemini-4-argon-reasoning", "gemini/gemini-4-argon", "gemini-4-argon", ExactExpected(spend=0.047168, input_cost=0.002728, output_cost=0.04444, prompt_tokens=1240, completion_tokens=4040), usage_fields={"candidatesTokensDetails": [{"modality": "TEXT", "tokenCount": 560}]}, + omit_usage_fields=frozenset({"serviceTier"}), ) GEMINI_GEMINI_4_ARGON_SERVICE_TIER_FLEX: Final = _gemini_case( GEMINI_GEMINI_3_8_FLASH_SERVICE_TIER_FLEX, diff --git a/tests/integration/cost_calculation/cases/openai.py b/tests/integration/cost_calculation/cases/openai.py index bc7fb3486be..a0e7d0a1f21 100644 --- a/tests/integration/cost_calculation/cases/openai.py +++ b/tests/integration/cost_calculation/cases/openai.py @@ -12075,7 +12075,791 @@ GATEWAY_REPORTED_COST_OPENROUTER_OPERATOR_PRICED_STREAM: Final = ( ) ) +GPT_6_1_TERRA_INPUT_TEXT: Final = CostTrackingTestCase( + name="gpt-6.1-terra-input_text", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + request={ + "model": "$MODEL", + "messages": [{"role": "user", "content": "Say hello."}], + "stream": False, + "allowed_openai_params": [], + }, + response=JsonResponse( + content_type="application/json", + body={ + "id": "chatcmpl-$REQUEST_ID", + "object": "chat.completion", + "created": 1793550477, + "model": "gpt-6.1-terra", + "choices": [ + { + "index": 0, + "message": {"role": "assistant", "content": "Hello!", "refusal": None, "annotations": []}, + "finish_reason": "stop", + } + ], + "usage": { + "prompt_tokens": 1840, + "completion_tokens": 412, + "total_tokens": 2252, + "prompt_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0, "audio_tokens": 0}, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0, + }, + }, + "service_tier": "default", + "system_fingerprint": None, + }, + ), + expected=ExactExpected( + spend=0.01443, input_cost=0.006808, output_cost=0.007622, prompt_tokens=1840, completion_tokens=412 + ), +) + +GPT_6_1_TERRA_STREAM: Final = CostTrackingTestCase( + name="gpt-6.1-terra-stream", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + request={ + "model": "$MODEL", + "messages": [ + { + "role": "system", + "content": [ + { + "type": "text", + "text": "You are a deterministic pricing-harness assistant. Keep answers to a " + "single short line.", + } + ], + }, + { + "role": "user", + "content": [ + { + "type": "text", + "text": "fe2e0078a155 summarize the attached material in one line and name the city weather", + } + ], + }, + ], + "stream": True, + "stream_options": {"include_usage": True}, + "allowed_openai_params": [], + }, + response=SseResponse( + content_type="text/event-stream", + frames=( + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"V6maPTGAg2ee7"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Please"},"finish_reason":null}],"usage":null,"obfuscation":"DeB2F5WWE"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ' + 'attach"},"finish_reason":null}],"usage":null,"obfuscation":"vhKBOJ81"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ' + 'the"},"finish_reason":null}],"usage":null,"obfuscation":"INVpNKhs7DW"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ' + 'material"},"finish_reason":null}],"usage":null,"obfuscation":"0O1Pvm"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ' + 'and"},"finish_reason":null}],"usage":null,"obfuscation":"MuEX4UDBYtT"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ' + 'specify"},"finish_reason":null}],"usage":null,"obfuscation":"ndkC0Cl"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ' + 'the"},"finish_reason":null}],"usage":null,"obfuscation":"q6k4WZYcNRM"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ' + 'city"},"finish_reason":null}],"usage":null,"obfuscation":"IpYix0p3PR"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ' + 'for"},"finish_reason":null}],"usage":null,"obfuscation":"rKxPKxRq4qx"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ' + 'the"},"finish_reason":null}],"usage":null,"obfuscation":"H3i2dOw4fnn"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ' + 'weather"},"finish_reason":null}],"usage":null,"obfuscation":"SYkCNCB"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}],"usage":null,"obfuscation":"KwuEGDWIiki1oD"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":null,"obfuscation":"FHSsHelue"}', + "data: " + '{"id":"chatcmpl-$REQUEST_ID","object":"chat.completion.chunk","created":1793550481,"model":"gpt-6.1-terra","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":1840,"completion_tokens":412,"total_tokens":2252,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"0MOoQz"}', + "data: [DONE]", + ), + ), + expected=ExactExpected( + spend=0.01443, input_cost=0.006808, output_cost=0.007622, prompt_tokens=1840, completion_tokens=412 + ), +) + +GPT_6_1_TERRA_RESPONSES_NATIVE_JSON: Final = CostTrackingTestCase( + name="gpt-6.1-terra-responses_native_json", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + endpoint="/v1/responses", + request={"model": "$MODEL", "input": "responses native fixture", "stream": False}, + response=JsonResponse( + content_type="application/json", + body={ + "id": "resp_$REQUEST_ID", + "object": "response", + "created_at": 1793550478, + "status": "completed", + "access_programs": {"cyber": "standard"}, + "background": False, + "billing": {"payer": "developer"}, + "completed_at": 1793550480, + "error": None, + "frequency_penalty": 0.0, + "incomplete_details": None, + "instructions": None, + "max_output_tokens": None, + "max_tool_calls": None, + "model": "gpt-6.1-terra", + "moderation": None, + "output": [ + { + "id": "rs_$REQUEST_ID", + "type": "reasoning", + "content": [], + "encrypted_content": "gAAAAABq52iQo3ILWVDdQ9urPwquhcD7cD3bBTTat3yuH4RGh0k47sW-tcihEoa2U-3cTXx3sbe8M_zsmc-x3bBxuNOSDtdMGki6W5QlQAKXOawPDaJZfBXS6D_s1KquRjnZveQU5tSCyV61MYFnIBoxtTap_MD3CgyabiddVA2-1zLyyNf2gzGnuzW75-GScgzKPGDD-k-F7bJw4r0T8ZLzmLGG_OR2blLygTvAPu9MkRlm9swj70PCmvOojv2TVrSBTCcIBHa91DsNKr03e1IFDPAQ_63FuNqwv3H2O3BjtQxW2EcwlO2pn5pCinwRHp5dYG0-sXDYZqZRixQ65bvwT0yKsF1-Ehda1HwZnYmEUluJrPQMZs5IqTQmziRqdxo5xQmNdu_nfz0qpE-R0eLF4uOPcDaYlwbmwUC99G7vIgD2nC4l18R_iU213FN_R-Zb3z1VGG4Qy9p86mUep91AlEk0-49badioVT7DUgYMbgPXmzv9zfQY6EqXRqW4mhdYhLUDcwNcO7PK5lySX1occbZOdyyGOaypeGb8I1eX8vK32PlI-v8WZge0l673_sMTfPaOpsUAMw2yYoCQ3Ky5flxiDhv_26DSDVRBWwm1HqvsW-lqTKeTFXv9VWu753a6QbGS9fG1TcCy_v0_cilG02kVoX7uXH9U1EtUz_fu-jjE4to_NdULJS4anC6I--0na2nHQBjTmJ2Pg2CRdf8yQdJ-xXcP9EP_jrXEEze6wCfjBVUbEUwB4CIVM4IVWBz4h3eXAK-sQ328hKgD-WtlNor_BEA4oEGVDBEVlBp437pzzvnHMwFzeyMYuC6c-jOKmqVujx0hjUp4Uc0qwG1MFbBPYBjEmCOb4r-Rzs5PLvzDN-j4TUxx075ZQQiAmW3W73oQbm2fxS5_xNYHe-uh6TcNCxBXpBGW0FUHy0-kLDCxPDFLpPQpVG4Tp1iD0oN3FiFmQZ4sKSe8P4pZhdZIoFEgKZzrdLXzqGVC_1UwTzJbLkaVZ0rzfijYfZd3BgA2gx1A3-zKVcMHyTtpPtyypiGcdcXnkeEU8sfkjOBX2w8Y_n47KbPz71gOXb3fILIaIaVft7ZYA1Die28rpKKaFpKKzlc5PeuZLzIUlLp7rS4SVab4iXyY1dfxNI-If1W9yESy50356OVmRTaVske78Qv80iiRkTP6WLnpH7xUixvRQe1yOga70Mu-ztOBQGPEafxEY4j4ecVhIkEExIBATKhOfFuOWpES3dABfSuxjdBz-vq6a9Kt3kd84SO_s6gBIVXfW86F8Rx8O7bXJME4WtbpM0FJtFXjkSUnsgT3XRyKc_cEBcltEvkJr8q75T79rUDBeGgBpIS2qyZ22h-1DvU8CLe6NjfazmaAlfNesRCPdIp13LzfOP5rai1gXvnFy8TjLsh3nIFNC3R2-KRG8eLAvke-THLJ7Npsxt9MY0TBkCJK79kmJDiKKwGhaBUPQQhzmqXhjsKMP4pYzCMyCDw8xnMjb_SvV7jiuapLLr1A-8uk9jENYkmWnpwcHCLUmYUjnzuuQSUTOY0cx9xjO-pSzwVfrqrEv-AMxb7UgQNePKing-cOkF25mrvymJrEs5aLY5pvHW3XjmYmj-tExRSZeJsWwFFyt_EGNkgam9Gx2DGZCB3ybk1-BZBBzKD6ogMHhkY3vZeerC5dAUv8RjxVJZUBP_9wr6Ycxim_m9O63GEcH4MCCJJZGyE_Ckg4ioqb0fOZB_AeQMgUsG8h9zo5tCK_-ZX3q5cVSmws27WQMqqF0kI5dKvdocpVwGrc0mm0eiwSFXHPtygITEvGPvP-og6cBLBX3VCI4C7D3L2PvlGt7UTmiEZsaOPJPfLVoV5RfvJx5ID3CyLjD7FIx8iFXgwfEJdajjulUuSE0SvecHaO3y9dEEsGFUgi9WLc1cNOsplxPeOk1QjUoYZHPm2MxGvZ9j9G2wYb7GIAYPe3s6HgbZHZEH73vilA2RtlUwupChfBHaxA18HqJPHInA8wnazb94Gnjhdep5UswhmMdBtGnl6bl8cvveXHJY6f_eIEbEXm4qEs-qvqdqz3e-NjXTqb18BknQD79Npv3963SQduPeWEzz5TlFoqBXqPROx1U3MMQvHIIGu988dA-OszWTDyovY1yDkXRNqW5flJ8taID-Dpl0sDwNJPxq4ixnrlwQUG8FbMyGXVXdVbsykOoIJnqBZ-V69nzk9AqjjxcrRtzApR0zn8xh103WpQpB5BMkqwVOyWIkMkYQ0u0Ph5S3u4k5LmjqO-4oXdxmRMcSOgy3WYXiFO-tXGgNEPfT5lqRiA7Q6lA0lHc06K-pyu23KR2hBkpN7WLwH0nnUjtz7_CmU=", + "summary": [], + }, + { + "id": "msg_$REQUEST_ID", + "type": "message", + "status": "completed", + "content": [ + {"type": "output_text", "annotations": [], "logprobs": [], "text": "scripted response"} + ], + "phase": "final_answer", + "role": "assistant", + }, + ], + "parallel_tool_calls": True, + "presence_penalty": 0.0, + "previous_response_id": None, + "prompt_cache_key": None, + "prompt_cache_retention": "24h", + "reasoning": {"context": "all_turns", "effort": "medium", "mode": "standard", "summary": None}, + "safety_identifier": None, + "service_tier": "default", + "store": True, + "temperature": 1.0, + "text": {"format": {"type": "text"}, "verbosity": "medium"}, + "tool_choice": "auto", + "tool_usage": { + "image_gen": { + "input_tokens": 0, + "input_tokens_details": {"image_tokens": 0, "text_tokens": 0}, + "output_tokens": 0, + "output_tokens_details": {"image_tokens": 0, "text_tokens": 0}, + "total_tokens": 0, + }, + "web_search": {"num_requests": 0}, + }, + "tools": [], + "top_logprobs": 0, + "top_p": 0.98, + "truncation": "disabled", + "usage": { + "input_tokens": 1840, + "input_tokens_details": {"cache_write_tokens": 0, "cached_tokens": 0}, + "output_tokens": 412, + "output_tokens_details": {"reasoning_tokens": 0}, + "total_tokens": 2252, + }, + "user": None, + "metadata": {}, + }, + ), + expected=ExactExpected( + spend=0.01443, input_cost=0.006808, output_cost=0.007622, prompt_tokens=1840, completion_tokens=412 + ), +) + +GPT_6_1_TERRA_RESPONSES_NATIVE_STREAM: Final = CostTrackingTestCase( + name="gpt-6.1-terra-responses_native_stream", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + endpoint="/v1/responses", + request={"model": "$MODEL", "input": "responses native fixture", "stream": True}, + response=SseResponse( + content_type="text/event-stream", + frames=( + "event: response.created\n" + "data: " + '{"type":"response.created","response":{"id":"resp_$REQUEST_ID","object":"response","created_at":1793550482,"status":"in_progress","access_programs":{"cyber":"standard"},"background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-6.1-terra","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"24h","reasoning":{"context":"all_turns","effort":"medium","mode":"standard","summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0}', + "event: response.in_progress\n" + "data: " + '{"type":"response.in_progress","response":{"id":"resp_$REQUEST_ID","object":"response","created_at":1793550482,"status":"in_progress","access_programs":{"cyber":"standard"},"background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-6.1-terra","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"24h","reasoning":{"context":"all_turns","effort":"medium","mode":"standard","summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1}', + "event: response.output_item.added\n" + "data: " + '{"type":"response.output_item.added","item":{"id":"rs_$REQUEST_ID","type":"reasoning","content":[],"encrypted_content":"gAAAAABq52iT_lK9OyCJUuDXlzdJ3FX1QD01svdydIIJBHfWCL4eWlT26dAxoavxpPSzcTXNUZtcdR7EzrVqR0IyhCd-kPJJ9FdF_pomv_LUSaQf3Xal2znb3ByAz642c8jmew8nkfNiqHsgclkggndAbe13DZt_jmEb07JtnhKFEsu7qbQA4lVksJOe9ovwGqC5fKxYs2OSQz-hDrFkBPKZbtCNgRNixPq7D79_v9_azyHfVxK7MvpqvIBfiObNtZwBhLlL4HXKnA__BHGjAVYveH4RDKKTvHCcfObqw0RE00I9IMe3AE5LjkdwiUAXPVJe9IbinfcLeXWAXMOAbJCSF4k-OWBYtmbpaibyCZQZN6Yh_BubpFnJtsGiQVdZMtlyx4HuxvLAetIo9ppz7UEPLe0teaPWaxHUqMOpERl1ZcQJFmQEghxMPM2rk5sBBFgBr3tlQUmpxJEYT9A3N5WK9izrs9khZc9fazDDZrrSJ2wJdo5Yo0oXbJV3it2a_7UlfNNfLe_GHal4GSor5C_iki1dLhCkHLZAFdv-MgHeUXd9BTaH7Uc-yyCcN_LUpCS30QRVLOPZB86sr6ximq6nHasYknhDv4e52kHyGIgFMlFZxumypFe4JMVNBpHHBdNBpsdeD_Z1EPO8kpn7RNF6qch0KO2LDkNkSbW-NU5-OUXEosDW5wb84DF-1kctFpUfTwtI_vk0KwINbVcRLh0vHgNPwXEIUKPHKi4SU_tKyXc2m9DCirhhCjcdbRgAI2cEezxlLoE3qqrUg1VK1RxhEDcb7djiec4uZ9W8yZhLQURx9QnK5NXH_59MiNZpS54EbmiVYLkh19EQ1Widqm8eMz1xgv7Lyox-faHsUeESUbIb3BowijB_w3inKxzBbIipc0IdbRq2OSqbfLDEXn9ffcdIpjmpKcctgw0zjkIxU7_LuL3o2EM--iSgXPHN8v54EBpTpGrOKqKhJhleKkeAFwX_XR5lzGuwr78xf4H_h-ERbEoypFTI6e9r8Brrbkd3Ai4kjDy5lrZ6wh5LMpCpOuoFBu6DCl2GQtcSmimdKkx1QpjKAVwpx6OdlOAUr_Uf17XXvhQe_BACsL6F5l3dYFHwZ7-IPnhvXGvW3-EaeD35x9TaZQ-d3DRKHlvKBgtZ6c7wgk969UOB1cxLvd975MGZsuZbg2CjSqfD12U3rW35gnDDW7j2lBrUYuOKTF1bf2nO5ocl","summary":[]},"output_index":0,"sequence_number":2}', + "event: response.output_item.done\n" + "data: " + '{"type":"response.output_item.done","item":{"id":"rs_$REQUEST_ID","type":"reasoning","content":[],"encrypted_content":"gAAAAABq52iUqG8tEb_xF36BEfJWBH58SYtrRaBLB3-SJOeRPsdWLdX9L98t_9G6f9D11g6oIqiUS93TVazEp8z4jT1KZYIZb26G_i5LC_Xl72OqnIMDW2JoOopESrZ_ozSnTf9T6GANMZHhaUfQyx8mmUm3phdC1xYtFC_RKsXiNjDUL_7Tm6XE2SCgLICljezY17L94CNpuL0zrhQPoFOjdXeo4mCsKiBn4SAzC4-Y1qbM7KZOlCZSDxg-Dj5GEco1r2qzdq04RhvfVwDgHgvz4SXWLoDEfl4DkARGzkEflQAzjb7Ob_bB7vIjmEtaiI8fpAutCFTrDHSIuhmCuQVZMFaY-Hs6cuZ7TnFJlwEZV0Uz1mdD1-Z0E7UAZ9_H4uVsVTq256GHDl-Y6aaRhw0gqNzGgVkc-0TiGoOHA1kvHnTL4lkauEVK7HuTCcwc5k1GjPldyqoxOgvYJ4Bhf-Rbc-D3rueq9bTc2DB9zarCThtPfBydh0HxYr0ouh4iSdZVkU4Jnt_v7e6AM9uJ3Ycgio-BRXj4G6XL03kr5EqWsJ6uLW1pVWcFbegx4lBxIO0nkp0op0OYS-M3O9KUKry_-JpIrl0i-PVJvMTQunAFbmDzG8iPag7TQ2R5gUw56RLPFLGtTNzTVcrk4L-JxrSf5PWR94qwi2sag43lGiM-S0Karaa1W4hmyXcTuCeKRm0oaEDcMYmub0AG0JEzwj-AMYJ3UlgKywkBOSPhm_q-IKN94bvqiGoqwQJ4otj8AildzeMXCl60R_o0mbC6Wt-mhbw36e4O3TCt26iw2I2vR6Z9iWHck1jOq6Bt7WiwNdsJLZxGhSG3j3fvaKYMUSak29o7DpNytkBI9ZJmRDIVEqaefGetMJndEqvHsfZVfMYcV07YJjyy2YoLdGAc24p0YAl4UAOV5Yd9KNpbk_NB3TPlNQS75rgMUC8lLbNWhGSrZrQu1b3MSAZHSlzLhgo1RUk3bntG1tRBHdgkGhsXi9bkwuX7ffuzh1GSZ-fY71NvwtVbNqUfFwwWMB--_w9_G6qf9GFzVssRsYEJ_fVhz2paLLsmltaWAKXte5FM9ThfTsXJ-9YYQY0Xkcm0xcnXhSUobJcx0RQnJZSzbOEa985wgZ-9kMntbgS6W0dYxDwksArG-aOeoJXP99YNJKKCVmTwMmSrqEChhXefM_mtFRRUJuYoB8wbh-Dv2fs-XjM__E2DQ0r6bcNtrsnNNZiKwDhoPY-6fn2ygn0dTDepfoxjQ3u9RMbiRo5KORN39h0MmaA8oATrG9MLLKxlcc4mK_VIsokt6YOoKdew7I4aO7uGfxf6S8grunxuRsCHAJy0RlQAWzd2xS7Jt1A8uuZx5CVb_mixDaJqhryePU93EM39rIlDzv1DrYDO_y35QBdNSY8ZeaSCFu2dXvl-OgGCrzyj--7aATJP9pVY3joUhL9bg5aaLvPRTFBilSqkfu0uTE3x-RDcckVn8tjCabG6sX25hf1HcYmSNI7z6yLHnQWtYmIrR5pRjti2Mm069ezFHVuMkPZq7OlO6zo-ZWRMR1k5-cNcB0K_542rNST-mu87Qxv1gBMoAsN7RH-pQRD7yX--fdPfudQiIADessceNMtHpgK3oqVN4G3wCbkdE-z5UYBmAWschMjymShjR5Y5p9VmFe92_xW_D68O_Arj3mqTEl024Byf7MIiJVR3Ks49aPtfc2_-fDeKfwvu5nL-JiOPMeve8HAFI-k--5a5sp_Br3K0yzE5TfcVi2mAdMN18AGMvHk6u9fj0GI2DxlCPcI3hhRwBK2pVOZBRShzecHdYLgj8Bu2WT4zLiJMEXbqQQ_0MZS6C0cmnkSjjgvrZu7V5j0n7ivOOSKkMVKcC57pcqrwWCOLWSbeIakPFDCf5JeGnXQgaueI2wElpnalKn8J4g7Xf-q9rmW7Kxcw03hTabY-QlQC3QPLF7F3XsHadqecRZEb2-qVqksGW1nyVaDgwojdj6qCoGTHwls3vmYFnTwPwWnYgkEzQfyRefmCOkeUUat_kkXtcGmwmqbTwc-XTLHTbcPjy8WUAQc2gvctGhavLAotLT-G9vt4_0wbPgd297k5D9rRIF3z0kjOT1rEJRbDiEuCwsXQYT1WQEEFayko3XOy0wWzGDqvk7LFU4jZUaemP6TK2QfY50D4wwfoBCOhfZzfPqW8YcCLRTPiFQAu3ch-c90UdQqGgDf1v6uUP7-7_QkCugHq83eeL3JHAGGd4DcUZv_PlSF5EFpaHvE60iIOBIaC-lBqOs_5BWWhS0o=","summary":[]},"output_index":0,"sequence_number":3}', + "event: response.output_item.added\n" + "data: " + '{"type":"response.output_item.added","item":{"id":"msg_$REQUEST_ID","type":"message","status":"in_progress","content":[],"phase":"final_answer","role":"assistant"},"output_index":1,"sequence_number":4}', + "event: response.content_part.added\n" + "data: " + '{"type":"response.content_part.added","content_index":0,"item_id":"msg_$REQUEST_ID","output_index":1,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"scripted ' + 'response"},"sequence_number":5}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"BNlrxoKanmvoh","output_index":1,"sequence_number":6}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"d6wAn19psL70","output_index":1,"sequence_number":7}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"jMGY8bec","output_index":1,"sequence_number":8}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"HmpVCzj8PFzc","output_index":1,"sequence_number":9}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"9Vjs4mK0JawGR1","output_index":1,"sequence_number":10}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"HqaRQ2JEQ","output_index":1,"sequence_number":11}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"gdho1n5Vt","output_index":1,"sequence_number":12}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"K87IZj","output_index":1,"sequence_number":13}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"x5JBl1t1t7fr","output_index":1,"sequence_number":14}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"gjt97uyl","output_index":1,"sequence_number":15}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"q1LP8GolRM9Pfk7","output_index":1,"sequence_number":16}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"TYZMPgoiJYwGJ","output_index":1,"sequence_number":17}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"I3Gw9kr6Cq7g8","output_index":1,"sequence_number":18}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"Zz0A6WnHpDAVPnP","output_index":1,"sequence_number":19}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"5LEGsKITSF","output_index":1,"sequence_number":20}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"Nr6ahaM","output_index":1,"sequence_number":21}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"hEetz35s15FDz","output_index":1,"sequence_number":22}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"O5kMNPuVTYr","output_index":1,"sequence_number":23}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"HHChpZ","output_index":1,"sequence_number":24}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"aYh85gozY4Zp","output_index":1,"sequence_number":25}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"gQG8S0pMKCom","output_index":1,"sequence_number":26}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"jqOoYUeCiN","output_index":1,"sequence_number":27}', + "event: response.output_text.delta\n" + 'data: {"type":"response.output_text.delta","content_index":0,"delta":"scripted ' + 'response","item_id":"msg_$REQUEST_ID","logprobs":[],"obfuscation":"FLNhK86Yqg2gYgq","output_index":1,"sequence_number":28}', + "event: response.output_text.done\n" + "data: " + '{"type":"response.output_text.done","content_index":0,"item_id":"msg_$REQUEST_ID","logprobs":[],"output_index":1,"sequence_number":29,"text":"scripted ' + 'response"}', + "event: response.content_part.done\n" + "data: " + '{"type":"response.content_part.done","content_index":0,"item_id":"msg_$REQUEST_ID","output_index":1,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"scripted ' + 'response"},"sequence_number":30}', + "event: response.output_item.done\n" + "data: " + '{"type":"response.output_item.done","item":{"id":"msg_$REQUEST_ID","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"scripted ' + 'response"}],"phase":"final_answer","role":"assistant"},"output_index":1,"sequence_number":31}', + "event: response.completed\n" + "data: " + '{"type":"response.completed","response":{"id":"resp_$REQUEST_ID","object":"response","created_at":1793550482,"status":"completed","access_programs":{"cyber":"standard"},"background":false,"completed_at":1793550484,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-6.1-terra","moderation":null,"output":[{"id":"rs_$REQUEST_ID","type":"reasoning","content":[],"encrypted_content":"gAAAAABq52iUDgldbCdlDfQqIlheMaTv1sfoxtG261Dz8GrQlERV2ayPHJ69kxZNRAN1bCj6d-W2ssHd962G1wjgtm-8BLs8RZluhpSxA-JaIERag4nuIzMeMAZWJGNCaXSHKsqO9hZl50GLt0EfC_VUD2KvZov4FN-uG31ydbOVojI5SspKq-iRh4HQ0cJPq67gQ47gep8zg2xUToLoQdm1sy4N_CnR0JJ-qKsHo19Mwi07y3ZYBJOm3bBGVRwjkqkkC85oP7xkWHU_CmHVYnOCLvtXfej8VEpHQ2kUJj6ZWSh7VfMCKynvj1vnZb2aVJ-IngO8qVpKjFx_hatfJH2HVOiu0Tg5pXZZkcihdR_nTBX_qFVvFuyxvFtafg45R8kL9nWfBNmM59yVuTz4rv2PTyAc2rKe59L_yBO_s9GJ8ENywKZICvB1tbbCIzBLgA7ovBhfnQPxY1VedCO2geHKwFlEcU2ePNzg58C-I9C3qG6ywU50-gbEiy4ECLayaOIVyjJbjwjcu8HLmmko_UKqhNOZ_PvQyt3Gg4QLeY2nTatNL71iPj3DobKSQq_gi2n7oJ0wN7asqPMWfec5EPq7lQxDlwpUas28Yu0Lpf_uEgLJn-VHPeVAw3vpeRblKdC_df6Y6v8jY5H9Htg0bV1qvg1Ow_hnHVHvB4QZyf46hU89lAwYiOPzofrUd_rUO3EHRZ_4Bu4gulI0LySulXbBSM98PXLwN8Ml-lVPqpJ2FZ6gRQtgZyTGmFk_DOdGdUz-1vwR61zYolDajZu6y7Y9Xlg8JydYBAOZN2Clf8BKbZ-5O13W5ks9UyNHIe7AUnYjIuu8a38T5zof1W1nRFDfrJFYiu5ul_zcNyIWF6v5fEAKIbnNYSXdTWwVZEBEkz3dHdZoJ_AEJIIUTzd5GN-JlBijdiwarOFqgGtOpNHr89MC1pSEOK9AucKWsOsYZxRTnSVYHGxWn9tgDLG733Skm7-rodmYstnys9SDHjJcUWtBImSmttFDq0xtnuTvCpV9AfoHCEoktmr-zbzn2f2goIyb8SvChNkzAAGHkkOIa-5_JWD2u7nCBgEYhv16brPKIJzHEfR6UNUUyuZ2hgsHro9mGIEaf7ymM9_SgKkzkJuNk17Xt9JA5bZWYH455SDauQIlUgjOaI_dN2A3DdaW-1-EL2BeRQ2gVinJQctt6gH21S2WATqFDIC5gttMPL2pJi1hR5Fu_g9fz0r4aV-mkeLjsBhOddVbfttFeOtWeVdc2YAig8euR4y29JsKfxAk0kQtSQGN_PZ6C0JVurCYjrsZC24lgzECX9ABqmS1b6spVb-5r--JVa-XEKYeh0hSw55q7qFJJhU2ksTiS0IadfUnAmPPrgHIYs21BnmKTgGaUDT82C_sqT9bVsx65UjycbOvFT7r8DxgBjbD9WnsUntJt2jrwU4Bwy5bYDx6GCX7DtDjoIYMj-Wo9z0seGQXgLm0P277RLjZQOOJIKaeukdm9dCCn9NfQoHG73TylMfCxZv__BlvXFNcPn291xBPnn3A9QHIdVrJBA0O8wlqzjUndp3_WNSqyvY9KsJFyh82gcf6OwDL6j46kjELlRhw83p7LneHeGlfLXjtTDuKK1n7LgXmK8HFyLq3axaGqmaoCRIu18bLVsDx6ZrEZy1_s4yS9mOrOkBuq1IBB-L3OeDwvUYKAi3ay5y5_nivHo3rSa3-0PxX0hiPBafXSPtcJOM9dUOm6Pqx8uZfxRWUKkd6D6JNgbLcHiZfj85DHOSOtk-mD9kpL08HfBIwybzP0gX3uoJJT8mLsPRTM2UyWWOmUq2NnMbIp4GHUHADdFSs00IQDxFnF2ARAlp4yUTGWlUnHMQdd4Nigc9M80TOL3RnDDnHeNLLEzfpz19YPZgvyQl_TSN2WIJKgE7Iv7pTcUq5r_Fo0-NX4WTgIbGAdbR973gXvOiAQOrF0cOazZUyZxI7qjNuSvn7fbif7xk0WG5McD5FyC_-W6kaVV2Fc_H_XG6zRTVZMrl-zgj1jrVXtwwXXMM-qCO9T3O0ULf4zwAj5ZOsssw1064Z0ETsQCWv-MLdS3mQpZfCkhr9afabZXxyjvKkeje9G-RkAa3D8B-bqGTMoBsfu5zTDEAFLUP2Af8qsOzoRpEh8VYvnHQVO4LT_h4KLEVuswCzS1v3MWHjbZ4Bmi7UkyRf_a0LTJXjyMYTQyhMf21k92ghq8UL8_z-DC2SxIPylOIwsipgeIUzoHx_bNNAwwyuQhZhQ1eMsrbnpCzH9WmjQWSlnQ5rKcFmnWw=","summary":[]},{"id":"msg_$REQUEST_ID","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"scripted ' + 'response"}],"phase":"final_answer","role":"assistant"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"24h","reasoning":{"context":"all_turns","effort":"medium","mode":"standard","summary":null},"safety_identifier":null,"service_tier":"default","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":{"input_tokens":1840,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":412,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":2252},"user":null,"metadata":{}},"sequence_number":32}', + ), + ), + expected=ExactExpected( + spend=0.01443, input_cost=0.006808, output_cost=0.007622, prompt_tokens=1840, completion_tokens=412 + ), +) + +GPT_6_1_TERRA_MESSAGES_BRIDGED_JSON: Final = CostTrackingTestCase( + name="gpt-6.1-terra-messages_bridged_json", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + endpoint="/v1/messages", + request={ + "model": "$MODEL", + "max_tokens": 412, + "messages": [{"role": "user", "content": "responses native fixture"}], + }, + response=GPT_6_1_TERRA_RESPONSES_NATIVE_JSON.response, + expected=ExactExpected( + spend=0.01443, input_cost=0.006808, output_cost=0.007622, prompt_tokens=1840, completion_tokens=412 + ), +) + +GPT_6_1_TERRA_MESSAGES_BRIDGED_STREAM: Final = CostTrackingTestCase( + name="gpt-6.1-terra-messages_bridged_stream", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + endpoint="/v1/messages", + request={ + "model": "$MODEL", + "max_tokens": 412, + "messages": [{"role": "user", "content": "responses native fixture"}], + "stream": True, + }, + response=GPT_6_1_TERRA_RESPONSES_NATIVE_STREAM.response, + expected=ExactExpected( + spend=0.01443, input_cost=0.006808, output_cost=0.007622, prompt_tokens=1840, completion_tokens=412 + ), +) + +GPT_6_1_TERRA_RESPONSES_DEPLOYMENT_JSON: Final = CostTrackingTestCase( + name="gpt-6.1-terra-responses_deployment_json", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + endpoint="/v1/responses", + deployment=Deployment(model="openai/responses/gpt-6.1-terra"), + request={"model": "$MODEL", "input": "responses native fixture", "stream": False}, + response=GPT_6_1_TERRA_RESPONSES_NATIVE_JSON.response, + expected=ExactExpected( + spend=0.01443, input_cost=0.006808, output_cost=0.007622, prompt_tokens=1840, completion_tokens=412 + ), +) + +GPT_6_1_TERRA_CHAT_BRIDGED_JSON: Final = CostTrackingTestCase( + name="gpt-6.1-terra-chat_bridged_json", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + deployment=Deployment(model="openai/responses/gpt-6.1-terra"), + request={"model": "$MODEL", "messages": [{"role": "user", "content": "responses native fixture"}], "stream": False}, + response=GPT_6_1_TERRA_RESPONSES_NATIVE_JSON.response, + expected=ExactExpected( + spend=0.01443, input_cost=0.006808, output_cost=0.007622, prompt_tokens=1840, completion_tokens=412 + ), +) + +GPT_6_1_TERRA_CACHE_READ: Final = CostTrackingTestCase( + name="gpt-6.1-terra-cache_read", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + request={ + "model": "$MODEL", + "messages": [ + { + "role": "system", + "content": [ + { + "type": "text", + "text": "You are a deterministic pricing-harness assistant. Keep answers to a " + "single short line.", + } + ], + }, + { + "role": "user", + "content": [ + { + "type": "text", + "text": "b770f5df16a2 summarize the attached material in one line and name the city weather", + } + ], + }, + ], + "stream": False, + "allowed_openai_params": [], + }, + response=JsonResponse( + content_type="application/json", + body={ + "id": "chatcmpl-$REQUEST_ID", + "object": "chat.completion", + "created": 1793550524, + "model": "gpt-6.1-terra", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Material: alpha, beta, gamma, and delta; city and weather not specified.", + "refusal": None, + "annotations": [], + }, + "finish_reason": "stop", + } + ], + "usage": { + "prompt_tokens": 12928, + "completion_tokens": 380, + "total_tokens": 13308, + "prompt_tokens_details": {"cached_tokens": 12288, "cache_write_tokens": 0, "audio_tokens": 0}, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0, + }, + }, + "service_tier": "default", + "system_fingerprint": None, + }, + ), + expected=ExactExpected( + spend=0.01167128, input_cost=0.00464128, output_cost=0.00703, prompt_tokens=12928, completion_tokens=380 + ), +) + +GPT_6_1_TERRA_CACHE_WRITE_5M: Final = CostTrackingTestCase( + name="gpt-6.1-terra-cache_write_5m", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + request={ + "model": "$MODEL", + "messages": [ + { + "role": "system", + "content": [ + { + "type": "text", + "text": "You are a deterministic pricing-harness assistant. Keep answers to a " + "single short line.", + } + ], + }, + { + "role": "user", + "content": [ + { + "type": "text", + "text": "b770f5df16a2 summarize the attached material in one line and name the city weather", + } + ], + }, + ], + "stream": False, + "allowed_openai_params": [], + }, + response=JsonResponse( + content_type="application/json", + body={ + "id": "chatcmpl-$REQUEST_ID", + "object": "chat.completion", + "created": 1793550522, + "model": "gpt-6.1-terra", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "The material mentions alpha, beta, gamma, and delta; no city or " + "weather is specified.", + "refusal": None, + "annotations": [], + }, + "finish_reason": "stop", + } + ], + "usage": { + "prompt_tokens": 12928, + "completion_tokens": 380, + "total_tokens": 13308, + "prompt_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 12288, "audio_tokens": 0}, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0, + }, + }, + "service_tier": "default", + "system_fingerprint": None, + }, + ), + expected=ExactExpected( + spend=0.06623, input_cost=0.0592, output_cost=0.00703, prompt_tokens=12928, completion_tokens=380 + ), +) + +GPT_6_1_TERRA_REASONING: Final = CostTrackingTestCase( + name="gpt-6.1-terra-reasoning", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + request={ + "model": "$MODEL", + "messages": [ + { + "role": "system", + "content": [ + { + "type": "text", + "text": "You are a deterministic pricing-harness assistant. Keep answers to a " + "single short line.", + } + ], + }, + { + "role": "user", + "content": [ + { + "type": "text", + "text": "6450817d8662 summarize the attached material in one line and name the city weather", + } + ], + }, + ], + "stream": False, + "reasoning_effort": "medium", + "allowed_openai_params": ["reasoning_effort"], + }, + response=JsonResponse( + content_type="application/json", + body={ + "id": "chatcmpl-$REQUEST_ID", + "object": "chat.completion", + "created": 1793550519, + "model": "gpt-6.1-terra", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Please attach the material and specify the city for the weather.", + "refusal": None, + "annotations": [], + }, + "finish_reason": "stop", + } + ], + "usage": { + "prompt_tokens": 1240, + "completion_tokens": 4040, + "total_tokens": 5280, + "prompt_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0, "audio_tokens": 0}, + "completion_tokens_details": { + "reasoning_tokens": 3480, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0, + }, + }, + "service_tier": "default", + "system_fingerprint": None, + }, + ), + expected=ExactExpected( + spend=0.079328, input_cost=0.004588, output_cost=0.07474, prompt_tokens=1240, completion_tokens=4040 + ), +) + +GPT_6_1_TERRA_SERVICE_TIER_PRIORITY: Final = CostTrackingTestCase( + name="gpt-6.1-terra-service_tier_priority", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + request={ + "model": "$MODEL", + "messages": [ + { + "role": "system", + "content": [ + { + "type": "text", + "text": "You are a deterministic pricing-harness assistant. Keep answers to a " + "single short line.", + } + ], + }, + { + "role": "user", + "content": [ + { + "type": "text", + "text": "27c98f26478e summarize the attached material in one line and name the city weather", + } + ], + }, + ], + "stream": False, + "service_tier": "priority", + "allowed_openai_params": [], + }, + response=JsonResponse( + content_type="application/json", + body={ + "id": "chatcmpl-$REQUEST_ID", + "object": "chat.completion", + "created": 1793550517, + "model": "gpt-6.1-terra", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Please attach the material and specify the city.", + "refusal": None, + "annotations": [], + }, + "finish_reason": "stop", + } + ], + "usage": { + "prompt_tokens": 1840, + "completion_tokens": 412, + "total_tokens": 2252, + "prompt_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0, "audio_tokens": 0}, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0, + }, + }, + "service_tier": "fast", + "system_fingerprint": None, + }, + ), + expected=ExactExpected( + spend=0.02886, input_cost=0.013616, output_cost=0.015244, prompt_tokens=1840, completion_tokens=412 + ), +) + +GPT_6_1_TERRA_TOOL_CALL: Final = CostTrackingTestCase( + name="gpt-6.1-terra-tool_call", + covers="quota_management.spend_tracking.cost_matrix.logs_cost", + model="gpt-6.1-terra", + request={ + "model": "$MODEL", + "messages": [ + { + "role": "system", + "content": [ + { + "type": "text", + "text": "You are a deterministic pricing-harness assistant. Keep answers to a " + "single short line.", + } + ], + }, + { + "role": "user", + "content": [ + { + "type": "text", + "text": "29a8fbc85239 summarize the attached material in one line and name the city weather", + } + ], + }, + ], + "stream": False, + "tools": [ + { + "type": "function", + "function": { + "name": "get_weather", + "description": "Get the current weather and a short forecast for a city.", + "parameters": { + "type": "object", + "properties": { + "city": {"type": "string", "description": "City name"}, + "days": {"type": "integer", "description": "Forecast horizon in days"}, + "units": {"type": "string", "enum": ["metric", "imperial"]}, + }, + "required": ["city"], + }, + }, + } + ], + "tool_choice": {"type": "function", "function": {"name": "get_weather"}}, + "reasoning_effort": "none", + "allowed_openai_params": ["tool_choice", "reasoning_effort"], + }, + response=JsonResponse( + content_type="application/json", + body={ + "id": "chatcmpl-$REQUEST_ID", + "object": "chat.completion", + "created": 1793553086, + "model": "gpt-6.1-terra", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": None, + "tool_calls": [ + { + "id": "call_$REQUEST_ID", + "type": "function", + "function": {"name": "get_weather", "arguments": '{"city":"Paris"}'}, + } + ], + "refusal": None, + "annotations": [], + }, + "finish_reason": "tool_calls", + } + ], + "usage": { + "prompt_tokens": 1840, + "completion_tokens": 412, + "total_tokens": 2252, + "prompt_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0, "audio_tokens": 0}, + "completion_tokens_details": { + "reasoning_tokens": 0, + "audio_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0, + }, + }, + "service_tier": "default", + "system_fingerprint": None, + }, + ), + expected=ExactExpected( + spend=0.01443, input_cost=0.006808, output_cost=0.007622, prompt_tokens=1840, completion_tokens=412 + ), +) + CASES: Final[tuple[CostTrackingTestCase, ...]] = ( + GPT_6_1_TERRA_INPUT_TEXT, + GPT_6_1_TERRA_STREAM, + GPT_6_1_TERRA_RESPONSES_NATIVE_JSON, + GPT_6_1_TERRA_RESPONSES_NATIVE_STREAM, + GPT_6_1_TERRA_MESSAGES_BRIDGED_JSON, + GPT_6_1_TERRA_MESSAGES_BRIDGED_STREAM, + GPT_6_1_TERRA_RESPONSES_DEPLOYMENT_JSON, + GPT_6_1_TERRA_CHAT_BRIDGED_JSON, + GPT_6_1_TERRA_CACHE_READ, + GPT_6_1_TERRA_CACHE_WRITE_5M, + GPT_6_1_TERRA_REASONING, + GPT_6_1_TERRA_SERVICE_TIER_PRIORITY, + GPT_6_1_TERRA_TOOL_CALL, GATEWAY_REPORTED_COST, GATEWAY_REPORTED_COST_STREAM, GATEWAY_REPORTED_COST_OPERATOR_PRICED, @@ -12329,6 +13113,9 @@ CASES: Final[tuple[CostTrackingTestCase, ...]] = ( ) PARITY: Final[tuple[StreamParityTestCase, ...]] = ( + StreamParityTestCase(plain=GPT_6_1_TERRA_INPUT_TEXT, streamed=GPT_6_1_TERRA_STREAM), + StreamParityTestCase(plain=GPT_6_1_TERRA_RESPONSES_NATIVE_JSON, streamed=GPT_6_1_TERRA_RESPONSES_NATIVE_STREAM), + StreamParityTestCase(plain=GPT_6_1_TERRA_MESSAGES_BRIDGED_JSON, streamed=GPT_6_1_TERRA_MESSAGES_BRIDGED_STREAM), StreamParityTestCase(plain=GATEWAY_REPORTED_COST, streamed=GATEWAY_REPORTED_COST_STREAM), StreamParityTestCase( plain=GATEWAY_REPORTED_COST_OPERATOR_PRICED, streamed=GATEWAY_REPORTED_COST_OPERATOR_PRICED_STREAM @@ -12384,6 +13171,11 @@ PARITY: Final[tuple[StreamParityTestCase, ...]] = ( ) BRIDGE_COST_PARITY: Final[tuple[BridgeCostParityTestCase, ...]] = ( + BridgeCostParityTestCase(native=GPT_6_1_TERRA_RESPONSES_NATIVE_JSON, bridged=GPT_6_1_TERRA_MESSAGES_BRIDGED_JSON), + BridgeCostParityTestCase( + native=GPT_6_1_TERRA_RESPONSES_NATIVE_STREAM, bridged=GPT_6_1_TERRA_MESSAGES_BRIDGED_STREAM + ), + BridgeCostParityTestCase(native=GPT_6_1_TERRA_RESPONSES_DEPLOYMENT_JSON, bridged=GPT_6_1_TERRA_CHAT_BRIDGED_JSON), *bridge_pairs( ( GPT_5_6_RESPONSES_NATIVE_JSON, diff --git a/tests/integration/cost_calculation/cost_map.py b/tests/integration/cost_calculation/cost_map.py index 8f11b3ce2f1..043ec93ff44 100644 --- a/tests/integration/cost_calculation/cost_map.py +++ b/tests/integration/cost_calculation/cost_map.py @@ -7,6 +7,47 @@ from typing import Final from pydantic import JsonValue COST_MAP_ENTRIES: Final[dict[str, dict[str, JsonValue]]] = { + "gpt-6.1-terra": { + "cache_creation_input_token_cost": 4.625e-06, + "cache_creation_input_token_cost_above_12hr": 9.25e-06, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens": 1.85e-05, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens_flex": 9.25e-06, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens_priority": 3.7e-05, + "cache_creation_input_token_cost_above_12hr_flex": 4.625e-06, + "cache_creation_input_token_cost_above_12hr_priority": 1.85e-05, + "cache_creation_input_token_cost_above_272k_tokens": 9.25e-06, + "cache_creation_input_token_cost_above_272k_tokens_flex": 4.625e-06, + "cache_creation_input_token_cost_above_272k_tokens_priority": 1.85e-05, + "cache_creation_input_token_cost_flex": 2.3125e-06, + "cache_creation_input_token_cost_priority": 9.25e-06, + "cache_read_input_token_cost": 1.85e-07, + "cache_read_input_token_cost_above_272k_tokens": 3.7e-07, + "cache_read_input_token_cost_above_272k_tokens_flex": 1.85e-07, + "cache_read_input_token_cost_above_272k_tokens_priority": 7.4e-07, + "cache_read_input_token_cost_flex": 9.25e-08, + "cache_read_input_token_cost_priority": 3.7e-07, + "input_cost_per_token": 3.7e-06, + "input_cost_per_token_above_272k_tokens": 7.4e-06, + "input_cost_per_token_above_272k_tokens_flex": 3.7e-06, + "input_cost_per_token_above_272k_tokens_priority": 1.48e-05, + "input_cost_per_token_flex": 1.85e-06, + "input_cost_per_token_priority": 7.4e-06, + "litellm_provider": "openai", + "max_input_tokens": 922000, + "max_output_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.85e-05, + "output_cost_per_token_above_272k_tokens": 2.775e-05, + "output_cost_per_token_above_272k_tokens_flex": 1.3875e-05, + "output_cost_per_token_above_272k_tokens_priority": 5.55e-05, + "output_cost_per_token_flex": 9.25e-06, + "output_cost_per_token_priority": 3.7e-05, + "supported_endpoints": ["/v1/chat/completions", "/v1/batch", "/v1/responses"], + "supports_function_calling": True, + "supports_none_reasoning_effort": True, + "supports_prompt_caching": True, + "supports_reasoning": True, + }, "dashscope/qwen4-max": { "litellm_provider": "dashscope", "mode": "chat", @@ -1289,6 +1330,7 @@ COST_MAP_ENTRIES: Final[dict[str, dict[str, JsonValue]]] = { "supports_function_calling": True, }, "claude-opus-5-5": { + "provider_specific_entry": {"us": 1.1, "fast": 2}, "cache_creation_input_token_cost_above_1hr": 8e-06, "litellm_provider": "anthropic", "mode": "chat", @@ -1302,6 +1344,14 @@ COST_MAP_ENTRIES: Final[dict[str, dict[str, JsonValue]]] = { "supports_function_calling": True, }, "gpt-6.1-sol": { + "cache_creation_input_token_cost_above_12hr": 5e-06, + "cache_creation_input_token_cost_above_12hr_ultrafast": 3e-05, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens": 1e-05, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens_flex": 5e-06, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens_priority": 2e-05, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens_ultrafast": 6e-05, + "cache_creation_input_token_cost_above_12hr_flex": 2.5e-06, + "cache_creation_input_token_cost_above_12hr_priority": 1e-05, "output_cost_per_token_priority": 2e-05, "input_cost_per_token_priority": 4e-06, "output_cost_per_token_flex": 5e-06, @@ -1342,6 +1392,7 @@ COST_MAP_ENTRIES: Final[dict[str, dict[str, JsonValue]]] = { "output_cost_per_token_ultrafast": 6e-05, }, "claude-sonnet-5-5": { + "provider_specific_entry": {"us": 1.1}, "cache_creation_input_token_cost": 4.125e-06, "cache_creation_input_token_cost_above_1hr": 6.6e-06, "cache_read_input_token_cost": 3.3e-07, @@ -1355,6 +1406,7 @@ COST_MAP_ENTRIES: Final[dict[str, dict[str, JsonValue]]] = { "supports_function_calling": True, }, "claude-haiku-5-5": { + "provider_specific_entry": {"us": 1.1}, "cache_creation_input_token_cost": 1.375e-06, "cache_creation_input_token_cost_above_1hr": 2.2e-06, "cache_read_input_token_cost": 1.1e-07, @@ -1386,6 +1438,7 @@ COST_MAP_ENTRIES: Final[dict[str, dict[str, JsonValue]]] = { "supports_function_calling": True, }, "claude-fable-5-1": { + "provider_specific_entry": {"us": 1.1}, "cache_creation_input_token_cost": 2e-05, "cache_creation_input_token_cost_above_1hr": 3.2e-05, "cache_read_input_token_cost": 1.6e-06, @@ -1504,6 +1557,14 @@ COST_MAP_ENTRIES: Final[dict[str, dict[str, JsonValue]]] = { "cache_read_input_token_cost_above_272k_tokens": 4.4e-07, }, "gpt-6-astra": { + "cache_creation_input_token_cost_above_12hr": 3e-05, + "cache_creation_input_token_cost_above_12hr_ultrafast": 0.00018, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens": 6e-05, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens_flex": 3e-05, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens_priority": 0.00012, + "cache_creation_input_token_cost_above_12hr_above_272k_tokens_ultrafast": 0.00036, + "cache_creation_input_token_cost_above_12hr_flex": 1.5e-05, + "cache_creation_input_token_cost_above_12hr_priority": 6e-05, "cache_read_input_token_cost": 1.2e-06, "cache_creation_input_token_cost": 1.5e-05, "cache_creation_input_token_cost_above_272k_tokens": 3e-05, @@ -1619,6 +1680,10 @@ COST_MAP_ENTRIES: Final[dict[str, dict[str, JsonValue]]] = { "cache_read_input_token_cost_above_272k_tokens": 2.6e-08, }, "azure/gpt-6-astra": { + "cache_creation_input_token_cost_above_272k_tokens_flex": 1.5625e-05, + "cache_read_input_token_cost_above_272k_tokens_flex": 1.25e-06, + "input_cost_per_token_above_272k_tokens_flex": 1.25e-05, + "output_cost_per_token_above_272k_tokens_flex": 4.6875e-05, "cache_read_input_token_cost": 1.25e-06, "cache_creation_input_token_cost": 1.5625e-05, "cache_creation_input_token_cost_above_272k_tokens": 3.125e-05,