litellm-e2e · build #718
889 passed, 0 failed, 57 skipped
1.106.0stableAll 946 tests
✓test_anthropic_chat_returns_thinking_content TestAnthropicChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-anthropic-thinking-e39b4533e154 that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-anthropic-thinking-e39b4533e154
✓test_anthropic_chat_returns_tool_call TestAnthropicChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-anthropic-tool-fbb66b469217 that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-anthropic-tool-fbb66b469217
✓test_anthropic_chat_streams_real_content TestAnthropicChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-anthropic-stream-21284659f235 that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-anthropic-stream-21284659f235
✓test_anthropic_chat_streams_tool_call TestAnthropicChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-anthropic-tool-stream-ada489244468 that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-anthropic-tool-stream-ada489244468
✓test_anthropic_chat_structured_output_conforms_to_schema TestAnthropicChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-anthropic-schema-fbc1fa59b84e that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-anthropic-schema-fbc1fa59b84e
✓test_anthropic_chat_vision_describes_image TestAnthropicChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-anthropic-vision-02b1161221dd that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-anthropic-vision-02b1161221dd
✓test_anthropic_passthrough_nonstreaming_logs_costtest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to claude-haiku-4-5 through /anthropic with streaming set to False
- Wait for the request's spend log in /spend/logs
✓test_anthropic_passthrough_streaming_logs_costtest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to claude-haiku-4-5 through /anthropic with streaming set to True
- Wait for the request's spend log in /spend/logs
✓test_anthropic_passthrough_tool_call_logs_costtest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to claude-haiku-4-5 through /anthropic with streaming set to False
- Wait for the request's spend log in /spend/logs
✓test_anthropic_prompt_caching_reads_cache TestCacheControltest_cache_control.py›
- Add a deployment named e2e-anthropic-cache-f6f47ccd7f73 that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with user id: e2e-test-user
- POST /chat/completions
✓test_anthropic_with_extended_thinking TestChatToolResultRoundTriptest_chat_tool_round_trip_e2e.py›
- Add a deployment named e2e-chat-tool-loop-8c07e8e16697 that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-chat-tool-loop-8c07e8e16697
✓test_array_input_returns_vectors TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Add a deployment named e2e-embeddings-array-50c862dbfdf3 that calls openai/text-embedding-3-small
- Generate a virtual key with user id: e2e-test-user
✓test_audio_speech_returns_audio TestAudioSpeechtest_audio_speech_e2e.py›
- Add a deployment named e2e-speech-ff750937901b that calls openai/gpt-4o-mini-tts
- Generate a virtual key with user id: e2e-test-user
✓test_audio_speech_streams_audio_chunks TestAudioSpeechtest_audio_speech_e2e.py›
- Add a deployment named e2e-speech-1e68526b1432 that calls openai/gpt-4o-mini-tts
- Generate a virtual key with user id: e2e-test-user
✓test_audio_transcriptions_returns_text TestAudioTranscriptionstest_audio_transcriptions_e2e.py›
- Add a deployment named e2e-transcribe-5680399aef07 that calls openai/gpt-4o-mini-transcribe
- Generate a virtual key with user id: e2e-test-user
✓test_azure_foundry_chat_returns_content TestAzureFoundryChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-azure-foundry-chat-348014543cb4 that calls azure_ai/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-azure-foundry-chat-348014543cb4
✓test_azure_openai_chat_returns_content TestAzureOpenAIChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-azure-openai-chat-b84c6a42cb40 that calls azure/gpt-5.4-nano
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-azure-openai-chat-b84c6a42cb40
✓test_azure_openai_chat_returns_tool_call TestAzureOpenAIChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-azure-openai-tool-01e59c6ff1bf that calls azure/gpt-5.4-nano
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-azure-openai-tool-01e59c6ff1bf
✓test_basic_nonstream TestAzureFoundryMessagestest_messages_azure_foundry_e2e.py›
- Add a deployment named e2e-azure-foundry-messages-586574c1cb8b that calls azure_ai/claude-haiku-4-5
- Generate a virtual key with models: e2e-azure-foundry-messages-586574c1cb8b and user id: e2e-test-user
✓test_basic_stream TestAzureFoundryMessagestest_messages_azure_foundry_e2e.py›
- Add a deployment named e2e-azure-foundry-messages-d23a775b0633 that calls azure_ai/claude-haiku-4-5
- Generate a virtual key with models: e2e-azure-foundry-messages-d23a775b0633 and user id: e2e-test-user
✓test_batch_s3_keys_do_not_break_chat TestBedrockBatchDeploymentServesChattest_bedrock_provider_matrix_e2e.py›
- Add a deployment named e2e-bedrock-batch-chat-05b172ca7b3b that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
✓test_bedrock_converse TestChatToolResultRoundTriptest_chat_tool_round_trip_e2e.py›
- Add a deployment named e2e-chat-tool-loop-c89ee9652ccf that calls bedrock/converse/us.anthropic.claude-sonnet-5-5
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-chat-tool-loop-c89ee9652ccf
✓test_bedrock_converse_chat_returns_content TestBedrockConverseChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-bedrock-chat-b9dfde19078f that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-bedrock-chat-b9dfde19078f
✓test_bedrock_converse_chat_returns_reasoning TestBedrockConverseChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-bedrock-thinking-21e513eaf5c1 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-bedrock-thinking-21e513eaf5c1
✓test_bedrock_converse_chat_returns_tool_call TestBedrockConverseChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-bedrock-tool-cfcadb700460 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-bedrock-tool-cfcadb700460
✓test_bedrock_converse_chat_streams_real_content TestBedrockConverseChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-bedrock-stream-fbbfd1251ff0 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-bedrock-stream-fbbfd1251ff0
✓test_bedrock_converse_chat_vision_describes_image TestBedrockConverseChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-bedrock-vision-ad6ea6726b32 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-bedrock-vision-ad6ea6726b32
✓test_bedrock_converse_reads_a_pdf_sent_by_url TestBedrockConverseChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-bedrock-document-59ae4b0b017d that calls bedrock/us.amazon.nova-2-lite-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-bedrock-document-59ae4b0b017d
✓test_bedrock_converse_with_extended_thinking TestChatToolResultRoundTriptest_chat_tool_round_trip_e2e.py›
- Add a deployment named e2e-chat-tool-loop-05854f19b66e that calls bedrock/converse/us.anthropic.claude-sonnet-4-6
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-chat-tool-loop-05854f19b66e
✓test_bedrock_embeddings_returns_vector TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Add a deployment named e2e-embeddings-bedrock-792b96b466e3 that calls bedrock/amazon.titan-embed-text-v2:0
- Generate a virtual key with user id: e2e-test-user
✓test_bedrock_image_generation_returns_image TestImageGenerationtest_image_generation_e2e.py›
- Add a deployment named e2e-bedrock-image-c2c2aa8caf1f that calls bedrock/stability.stable-image-core-v1:1
- Generate a virtual key with user id: e2e-test-user
✓test_bedrock_prompt_caching_reads_cache TestCacheControltest_cache_control.py›
- Add a deployment named e2e-bedrock-cache-a95e6ca60f9d that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- POST /chat/completions
✓test_bedrock_request_id_header_surfaces TestBedrockResponseHeaderstest_bedrock_provider_matrix_e2e.py›
- Add a deployment named e2e-bedrock-headers-050952fd0296 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
✓test_bedrock_request_id_header_surfaces_on_stream TestBedrockResponseHeaderstest_bedrock_provider_matrix_e2e.py›
- Add a deployment named e2e-bedrock-headers-stream-2beafbb2124c that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-bedrock-headers-stream-2beafbb2124c
✓test_bedrock_rerank_scores_top_n TestReranktest_rerank_e2e.py›
- Add a deployment named e2e-bedrock-rerank-93423437bfcb that calls bedrock/arn:aws:bedrock:us-east-1::foundation-model/cohere.rerank-v3-5:0
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/rerank request to e2e-bedrock-rerank-93423437bfcb for "What is the capital of the United States?"
✓test_bedrock_titan_embeds_token_array_input_as_its_decoded_text TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Add a deployment named e2e-embeddings-titan-tokens-b1cce3913594 that calls bedrock/amazon.titan-embed-text-v2:0
- Generate a virtual key with user id: e2e-test-user
✓test_bridged_stream_delivers_content_finish_reason_and_done TestResponsesBridgeChatCompletionsStreamingtest_responses_bridge_streaming_e2e.py›
- Add a deployment named e2e-bridge-stream-f6c103b993ce that calls openai/gpt-5.3-codex
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-bridge-stream-f6c103b993ce
✓test_bridged_stream_reassembles_tool_call TestResponsesBridgeChatCompletionsStreamingtest_responses_bridge_streaming_e2e.py›
- Add a deployment named e2e-bridge-stream-7bbc8ea83210 that calls openai/gpt-5.3-codex
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-bridge-stream-7bbc8ea83210
✓test_bridged_stream_shares_one_chunk_id TestResponsesBridgeChatCompletionsStreamingtest_responses_bridge_streaming_e2e.py›
- Add a deployment named e2e-bridge-stream-f31e15bb9d37 that calls openai/gpt-5.3-codex
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-bridge-stream-f31e15bb9d37
✓test_cache_read_tokens_bill_at_the_cache_read_rate TestTogetherChatCompletionstest_together_ai_e2e.py›
- Add a deployment named e2e-together-9663a11a8f0c that calls together_ai/deepseek-ai/DeepSeek-V4-Flash-0731
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-together-9663a11a8f0c
- Send a request to /chat/completions
- Wait for the request's spend log in /spend/logs
✓test_caller_completion_window_bills_its_rates TestSailResponsestest_sail_e2e.py›
- Add a deployment named e2e-sail-ec10d5abb348 that calls sail/zai-org/GLM-5.3
- Generate a virtual key with user id: e2e-test-user
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_calls_without_auth_is_denied TestRealtimeHttptest_realtime_http_e2e.py›
- Send a request to /v1/realtime/calls
✓test_cancel_background_response[azure] TestBackgroundResponseCanceltest_responses_retrieve_e2e.py›
- Add a deployment named e2e-resp-cancel-1a3ebeec9b13 that calls azure/gpt-5.4-nano
- Generate a virtual key with user id: e2e-test-user
✓test_cancel_background_response[openai] TestBackgroundResponseCanceltest_responses_retrieve_e2e.py›
- Add a deployment named e2e-resp-cancel-1c9c2e455e35 that calls openai/gpt-5.5
- Generate a virtual key with user id: e2e-test-user
✓test_cancel_background_streaming_response_by_streamed_id TestBackgroundResponseCanceltest_responses_retrieve_e2e.py›
- Add a deployment named e2e-resp-cancel-stream-952c0545af17 that calls openai/gpt-5.5
- Generate a virtual key with user id: e2e-test-user
✓test_chat_returns_real_completion[claude-haiku-4-5-anthropic] TestChatCompletionsRegressiontest_chat_completions_regression_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to claude-haiku-4-5
✓test_chat_returns_real_completion[gemini-2.5-flash-gemini] TestChatCompletionsRegressiontest_chat_completions_regression_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash
✓test_chat_returns_real_completion[gpt-5.5-openai] TestChatCompletionsRegressiontest_chat_completions_regression_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gpt-5.5
✓test_chat_stream_is_sse_and_ends_with_done TestChatStreamContracttest_chat_stream_contract_e2e.py›
- Add a deployment named e2e-chat-stream-838b17e60167 that calls openai/gpt-5.6
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-chat-stream-838b17e60167
✓test_chat_template_kwargs_reach_together TestTogetherChatCompletionstest_together_ai_e2e.py›
- Add a deployment named e2e-together-034079936f07 that calls together_ai/Qwen/Qwen3.5-9B
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-together-034079936f07
✓test_client_secret_missing_auth_is_denied TestRealtimeHttptest_realtime_http_e2e.py›
- Add a deployment named e2e-realtime-http-1082b7659570 that calls openai/gpt-realtime
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/realtime/client_secrets
✓test_client_tool_call_marks_work_without_injection_points[azure-foundry] TestCacheControlInjectionToolCallstest_cache_control_injection_tool_calls_e2e.py›
- Add a deployment named e2e-cache-control-tool-calls-azure_foundry-7c781bba94a4 that calls azure_ai/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
- POST /v1/chat/completions
✓test_client_tool_call_marks_work_without_injection_points[vertex] TestCacheControlInjectionToolCallstest_cache_control_injection_tool_calls_e2e.py›
- Add a deployment named e2e-cache-control-tool-calls-vertex-6a2722e96929 that calls vertex_ai/claude-sonnet-5
- Generate a virtual key with user id: e2e-test-user
- POST /v1/chat/completions
✓test_cohere_chat_returns_content TestCohereChattest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-cohere-chat-704e96380c60 that calls cohere/command-r-08-2024
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-cohere-chat-704e96380c60
✓test_cohere_embeddings_returns_vector TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Add a deployment named e2e-embeddings-cohere-39b7373c965c that calls cohere/embed-v4.0
- Generate a virtual key with user id: e2e-test-user
✓test_container_file_lifecycle_through_the_gateway TestOpenAIContainerFilestest_containers_e2e.py›
- Generate a virtual key with user id: e2e-test-user
✓test_contents_are_counted_by_the_provider_endpoint[gemini-2.5-flash-vertex] TestGeminiContentsTokenCountingtest_token_counter_gemini_contents_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a request to /utils/token_counter
✓test_contents_are_counted_by_the_provider_endpoint[gemini-2.5-flash] TestGeminiContentsTokenCountingtest_token_counter_gemini_contents_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a request to /utils/token_counter
✓test_converse_empty_messages_returns_client_error TestBedrockNativetest_bedrock_native_e2e.py›
- Add a deployment named e2e-bedrock-native-3a908deef2e1 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /bedrock/model/e2e-bedrock-native-3a908deef2e1/converse
✓test_converse_invalid_model_returns_error TestBedrockNativetest_bedrock_native_e2e.py›
- Add a deployment named e2e-bedrock-native-e2cdea32f606 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /bedrock/model/does-not-exist/converse
✓test_converse_missing_messages_returns_error TestBedrockNativetest_bedrock_native_e2e.py›
- Add a deployment named e2e-bedrock-native-443eaf29a68e that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /bedrock/model/e2e-bedrock-native-443eaf29a68e/converse
✓test_converse_output_format_returns_schema_json_text TestBedrockMessagestest_messages_bedrock_e2e.py›
- Add a deployment named e2e-messages-bedrock-5550b7709ffe that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
✓test_converse_returns_assistant TestBedrockNativetest_bedrock_native_e2e.py›
- Add a deployment named e2e-bedrock-native-f7fe7aedd688 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /bedrock/model/e2e-bedrock-native-f7fe7aedd688/converse
✓test_converse_stream_returns_chunks TestBedrockNativetest_bedrock_native_e2e.py›
- Add a deployment named e2e-bedrock-native-45e5b0c8397b that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /bedrock/model/e2e-bedrock-native-45e5b0c8397b/converse-stream
✓test_cost_header_and_spend_row_match_the_registry_price TestTogetherChatCompletionstest_together_ai_e2e.py›
- Add a deployment named e2e-together-f90b1f80fe87 that calls together_ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[chat_completions-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "Say hello. 680a63afb1c7" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[chat_completions-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "Say hello. 4eac27a26140" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[chat_completions-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "Say hello. 451a35cdbb04" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[chat_completions-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "Say hello. edc1faf9ab33" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[chat_completions-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "Say hello. 1747d1d870b3" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[chat_completions-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "Say hello. b8b55135f05d" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[messages-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "Say hello. 480b4f0cd6f6" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[messages-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "Say hello. f7d3e08bd69f" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[messages-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "Say hello. 03089220a32c" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[messages-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "Say hello. 9995e5f5ac9b" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[messages-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "Say hello. 89892fe66187" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[messages-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "Say hello. 13af680ff753" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[responses-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "Say hello. bd92e5c88722" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[responses-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "Say hello. d14fe663ed47" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[responses-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "Say hello. 363f978fa547" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[responses-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "Say hello. 993a27d57933" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[responses-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "Say hello. 1dab7789dbeb" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cost_header_matches_the_spend_log[responses-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "Say hello. 8a428c7d2d1d" and forced weather tool use set to False
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_count_matches_billed_input_tokens_for_a_model_bedrock_runtime_cannot_count TestBedrockMessagesCountTokenstest_messages_count_tokens_bedrock_e2e.py›
- Add a deployment named e2e-count-tokens-bedrock-9397c8fd95eb that calls bedrock/global.anthropic.claude-opus-4-8
- Generate a virtual key with user id: e2e-test-user
✓test_create_batch_missing_input_file_id_returns_error TestFilesBatchesContracttest_files_batches_contract_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/batches
✓test_create_client_secret TestRealtimeHttptest_realtime_http_e2e.py›
- Add a deployment named e2e-realtime-http-6e79e144bfae that calls openai/gpt-realtime
- Generate a virtual key with user id: e2e-test-user
- POST /v1/realtime/client_secrets
✓test_create_list_retrieve_delete_lifecycle TestVectorStorestest_vector_stores_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- POST /v1/vector_stores
- GET /v1/vector_stores/vs_6ad44605948c8191926f23ba4d2563e7
- GET /v1/vector_stores
- DELETE /v1/vector_stores/vs_6ad44605948c8191926f23ba4d2563e7
✓test_credential_backed_messages TestCredentialBackedMessagestest_credential_messages_e2e.py›
- Save the provider credential e2e-cred-ed8d0c3492a7
- Add a deployment named e2e-cred-messages-ed8d0c3492a7 that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
✓test_custom_pricing_is_billed_at_configured_rate TestCustomPricingtest_custom_pricing_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named custom-priced-flash-7be4251eb58d that calls gemini/gemini-2.5-flash
- Send a /chat/completions request to custom-priced-flash-7be4251eb58d
- GET /spend/logs
✓test_custom_pricing_is_isolated_from_sibling_deployment TestCustomPricingtest_custom_pricing_e2e.py›
- Add a deployment named custom-priced-flash-fe1c6de1430e that calls gemini/gemini-2.5-flash
- Add a deployment named base-flash-4543e21f6ba4 that calls gemini/gemini-2.5-flash
- List the deployments from /model/info
✓test_deleted_response_is_no_longer_retrievable[azure] TestStoredResponseLifecycletest_responses_retrieve_e2e.py›
- Add a deployment named e2e-resp-delete-a0a083daeb02 that calls azure/gpt-5.4-nano
- Generate a virtual key with user id: e2e-test-user
✓test_deleted_response_is_no_longer_retrievable[openai] TestStoredResponseLifecycletest_responses_retrieve_e2e.py›
- Add a deployment named e2e-resp-delete-aac2bbb6aa87 that calls openai/gpt-5.5
- Generate a virtual key with user id: e2e-test-user
✓test_embeddings_call_logs_its_cost TestOpenAIPassthroughSpendtest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/embeddings request to text-embedding-3-small through /openai_passthrough for "cost this sentence 6def653c26ad"
- Wait for the request's spend log in /spend/logs
✓test_embeddings_returns_vector TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Add a deployment named e2e-embeddings-a1f796e75e98 that calls openai/text-embedding-3-small
- Generate a virtual key with user id: e2e-test-user
✓test_empty_image_returns_error TestImageEdittest_image_edits_e2e.py›
- Add a deployment named e2e-image-edit-8cbf904adf84 that calls openai/gpt-image-1
- Generate a virtual key with user id: e2e-test-user
✓test_empty_input_returns_client_error TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-val-6c30fd47c15c that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/responses
✓test_empty_messages_returns_client_error TestChatCompletionsContracttest_chat_completions_contract_e2e.py›
- Add a deployment named e2e-chat-sec-a9ffe3601d3c that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
✓test_empty_prompt_returns_client_error TestImageGenerationtest_image_generation_e2e.py›
- Add a deployment named e2e-image-26bc8c6e7344 that calls openai/gpt-image-1-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/images/generations
✓test_empty_prompt_returns_error TestImageEdittest_image_edits_e2e.py›
- Add a deployment named e2e-image-edit-a7206bd88647 that calls openai/gpt-image-1
- Generate a virtual key with user id: e2e-test-user
✓test_file_attach_poll_and_search TestVectorStorestest_vector_stores_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload vs_doc.txt to /v1/files
- POST /v1/vector_stores
- POST /v1/vector_stores/vs_6ad4461127a881919c87e690cef1afc1/files
- GET /v1/vector_stores/vs_6ad4461127a881919c87e690cef1afc1/files/file-22uc9Hq8aBrXgUwSwygrnV
- POST /v1/vector_stores/vs_6ad4461127a881919c87e690cef1afc1/search
- DELETE /v1/vector_stores/vs_6ad4461127a881919c87e690cef1afc1/files/file-22uc9Hq8aBrXgUwSwygrnV
✓test_flagged_model_keeps_prompt_cache_across_system_reminder TestAnthropicChatMidConversationSystemtest_chat_mid_conversation_system_e2e.py›
- Add a deployment named e2e-chat-midsys-e86d595b7f89 that calls anthropic/claude-opus-4-8
- Generate a virtual key with models: e2e-chat-midsys-e86d595b7f89 and user id: e2e-test-user
- POST /v1/chat/completions
✓test_flagged_model_keeps_prompt_cache_across_system_reminder TestBedrockInvokeChatMidConversationSystemtest_chat_mid_conversation_system_e2e.py›
- Add a deployment named e2e-chat-midsys-c3efcb76e183 that calls bedrock/invoke/us.anthropic.claude-sonnet-5
- Generate a virtual key with models: e2e-chat-midsys-c3efcb76e183 and user id: e2e-test-user
- POST /v1/chat/completions
✓test_gemini TestChatToolResultRoundTriptest_chat_tool_round_trip_e2e.py›
- Add a deployment named e2e-chat-tool-loop-67a8472fb5e2 that calls gemini/gemini-3.5-flash-lite
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-chat-tool-loop-67a8472fb5e2
✓test_gemini_chat_returns_content_and_logs_cost TestGeminiChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-gemini-chat-72adf9a0d64a that calls gemini/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-gemini-chat-72adf9a0d64a
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_gemini_passthrough_nonstreaming_logs_costtest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a Gemini generateContent request to gemini-2.5-flash through /gemini
- Wait for the request's spend log in /spend/logs
✓test_gemini_passthrough_streaming_logs_costtest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a Gemini streamGenerateContent request to gemini-2.5-flash through /gemini
- Wait for the request's spend log in /spend/logs
✓test_gemini_passthrough_tool_call_logs_costtest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a Gemini generateContent request to gemini-2.5-flash through /gemini
- Wait for the request's spend log in /spend/logs
✓test_generate_content_returns_response_cost_header TestGoogleNativeGenerateContenttest_google_native_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-google-native-2586559f6af6 that calls gemini/gemini-2.5-flash
- Send a request to /v1beta/models/e2e-google-native-2586559f6af6:generateContent
✓test_image_edit_returns_image TestImageEdittest_image_edits_e2e.py›
- Add a deployment named e2e-image-edit-2c33a114534a that calls openai/gpt-image-1
- Generate a virtual key with user id: e2e-test-user
✓test_image_generation_returns_image TestImageGenerationtest_image_generation_e2e.py›
- Add a deployment named e2e-image-85a7cf46277c that calls openai/gpt-image-1-mini
- Generate a virtual key with user id: e2e-test-user
✓test_injection_points_respect_cap_with_tool_call_marks[azure-foundry] TestCacheControlInjectionToolCallstest_cache_control_injection_tool_calls_e2e.py›
- Add a deployment named e2e-cache-control-tool-calls-azure_foundry-372a7dcb9819 that calls azure_ai/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
- POST /v1/chat/completions
✓test_injection_points_respect_cap_with_tool_call_marks[vertex] TestCacheControlInjectionToolCallstest_cache_control_injection_tool_calls_e2e.py›
- Add a deployment named e2e-cache-control-tool-calls-vertex-a37a807885a8 that calls vertex_ai/claude-sonnet-5
- Generate a virtual key with user id: e2e-test-user
- POST /v1/chat/completions
✓test_input_items_list_the_stored_prompt TestStoredResponseLifecycletest_responses_retrieve_e2e.py›
- Add a deployment named e2e-resp-items-111128b2707d that calls openai/gpt-5.5
- Generate a virtual key with user id: e2e-test-user
✓test_invalid_chunking_returns_error TestVectorStorestest_vector_stores_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/vector_stores
✓test_invalid_max_completion_tokens_return_client_errors TestChatCompletionsContracttest_chat_completions_contract_e2e.py›
- Add a deployment named e2e-chat-sec-9e3a61546a98 that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
✓test_invalid_n_returns_client_error TestImageGenerationtest_image_generation_e2e.py›
- Add a deployment named e2e-image-c14444e2c8ff that calls openai/gpt-image-1-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/images/generations
✓test_invalid_role_returns_client_error TestChatCompletionsContracttest_chat_completions_contract_e2e.py›
- Add a deployment named e2e-chat-sec-2fcc3a0101b9 that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
✓test_invalid_size_returns_client_error TestImageGenerationtest_image_generation_e2e.py›
- Add a deployment named e2e-image-460c7b6ec61e that calls openai/gpt-image-1-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/images/generations
✓test_invalid_temperatures_return_client_errors TestChatCompletionsContracttest_chat_completions_contract_e2e.py›
- Add a deployment named e2e-chat-sec-9e4d65545531 that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
✓test_invoke_invalid_temperature_returns_client_error TestBedrockNativetest_bedrock_native_e2e.py›
- Add a deployment named e2e-bedrock-native-a7741739d08d that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /bedrock/model/e2e-bedrock-native-a7741739d08d/invoke
✓test_invoke_missing_max_tokens_returns_error TestBedrockNativetest_bedrock_native_e2e.py›
- Add a deployment named e2e-bedrock-native-0111194d1c53 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /bedrock/model/e2e-bedrock-native-0111194d1c53/invoke
✓test_invoke_missing_messages_returns_error TestBedrockNativetest_bedrock_native_e2e.py›
- Add a deployment named e2e-bedrock-native-ed82867b9d8f that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /bedrock/model/e2e-bedrock-native-ed82867b9d8f/invoke
✓test_invoke_regional_id_completes TestBedrockInvokeRegionalModelIdstest_bedrock_provider_matrix_e2e.py›
- Add a deployment named e2e-bedrock-invoke-27a54af381f2 that calls bedrock/invoke/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-bedrock-invoke-27a54af381f2
✓test_invoke_regional_id_streams TestBedrockInvokeRegionalModelIdstest_bedrock_provider_matrix_e2e.py›
- Add a deployment named e2e-bedrock-invoke-stream-3fa36fc5694a that calls bedrock/invoke/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-bedrock-invoke-stream-3fa36fc5694a
✓test_invoke_returns_message TestBedrockNativetest_bedrock_native_e2e.py›
- Add a deployment named e2e-bedrock-native-419b28745495 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /bedrock/model/e2e-bedrock-native-419b28745495/invoke
✓test_invoke_stream_returns_chunks TestBedrockNativetest_bedrock_native_e2e.py›
- Add a deployment named e2e-bedrock-native-8a912d5a5d6b that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /bedrock/model/e2e-bedrock-native-8a912d5a5d6b/invoke-with-response-stream
✓test_messages_logs_cost_matching_the_response_header TestAnthropicMessagestest_messages_e2e.py›
- Add a deployment named e2e-messages-cost-fb43ea624ffb that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_messages_output_format_returns_schema_json TestAnthropicMessagestest_messages_e2e.py›
- Add a deployment named e2e-messages-7a6fe16c1d89 that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
✓test_messages_returns_completion TestAnthropicMessagestest_messages_e2e.py›
- Add a deployment named e2e-messages-6e042d52f360 that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
✓test_messages_streams_completion TestAnthropicMessagestest_messages_e2e.py›
- Add a deployment named e2e-messages-dde6af10c339 that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
✓test_messages_tool_use TestAnthropicMessagestest_messages_e2e.py›
- Add a deployment named e2e-messages-04a1b2e0d8c8 that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
✓test_missing_file_returns_error TestAudioTranscriptionstest_audio_transcriptions_e2e.py›
- Add a deployment named e2e-transcribe-d7e7f3d26957 that calls openai/gpt-4o-mini-transcribe
- Generate a virtual key with user id: e2e-test-user
- Upload empty.wav to /v1/audio/transcriptions
✓test_missing_input_returns_error TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Add a deployment named e2e-embeddings-missin-f32bc667c212 that calls openai/text-embedding-3-small
- Generate a virtual key with user id: e2e-test-user
- Send a request to /embeddings
✓test_missing_messages_returns_error TestChatCompletionsContracttest_chat_completions_contract_e2e.py›
- Add a deployment named e2e-chat-sec-0db557bddc04 that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
✓test_missing_model_returns_client_error TestChatCompletionsContracttest_chat_completions_contract_e2e.py›
- Add a deployment named e2e-chat-sec-1350d5aa1650 that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
✓test_missing_model_returns_client_error TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a request to /embeddings
✓test_missing_model_returns_client_error TestResponsestest_responses_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/responses
✓test_missing_model_returns_error TestAudioTranscriptionstest_audio_transcriptions_e2e.py›
- Add a deployment named e2e-transcribe-6710471ab984 that calls openai/gpt-4o-mini-transcribe
- Generate a virtual key with user id: e2e-test-user
- Upload weather_question_24k.wav to /v1/audio/transcriptions
✓test_missing_model_returns_error TestAnthropicMessagestest_messages_e2e.py›
- Add a deployment named e2e-messages-cb388d2bb95d that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/messages
✓test_mistral TestChatToolResultRoundTriptest_chat_tool_round_trip_e2e.py›
- Add a deployment named e2e-chat-tool-loop-1e4ddda7d3a0 that calls mistral/mistral-medium-3.5
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-chat-tool-loop-1e4ddda7d3a0
✓test_mistral_embeddings_returns_vector TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Add a deployment named e2e-embeddings-mistral-d39954532084 that calls mistral/mistral-embed
- Generate a virtual key with user id: e2e-test-user
✓test_model_info_reports_custom_pricing TestCustomPricingtest_custom_pricing_e2e.py›
- Add a deployment named custom-priced-flash-e0a005d0cf7a that calls gemini/gemini-2.5-flash
- List the deployments from /model/info
✓test_moderations_flags_violent_content TestModerationstest_moderations_e2e.py›
- Add a deployment named e2e-moderation-a4524e5cacb2 that calls openai/omni-moderation-latest
- Generate a virtual key with user id: e2e-test-user
✓test_moderations_passes_benign_content TestModerationstest_moderations_e2e.py›
- Add a deployment named e2e-moderation-452e8293a3a4 that calls openai/omni-moderation-latest
- Generate a virtual key with user id: e2e-test-user
✓test_multi_turn_history_is_honored TestChatCompletionsContracttest_chat_completions_contract_e2e.py›
- Add a deployment named e2e-chat-sec-26d91886913b that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-chat-sec-26d91886913b
✓test_nova_sonic_response_create_completes TestNovaSonicRealtimerealtime/test_realtime_bedrock_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-nova-sonic-1e30af012873 that calls bedrock/amazon.nova-2-sonic-v1:0
- Open a /v1/realtime websocket session to e2e-nova-sonic-1e30af012873
- Wait for a session.created event on the realtime websocket
- Send the realtime event session.update over the websocket
- Wait for a session.updated event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
✓test_nova_sonic_voice_turn_shows_each_sentence_once TestNovaSonicAssistantTextrealtime/test_realtime_bedrock_duplicate_text_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-nova-sonic-dupe-226264958bbd that calls bedrock/amazon.nova-2-sonic-v1:0
- Open a /v1/realtime websocket session to e2e-nova-sonic-dupe-226264958bbd
- Wait for a session.created event on the realtime websocket
- Send the realtime event session.update over the websocket
- Wait for a session.updated event on the realtime websocket
- Stream the spoken question as mic chunks, then silence until the turn goes idle
✓test_nova_stream_relays_text_usage_and_stop TestBedrockMessagestest_messages_bedrock_e2e.py›
- Add a deployment named e2e-messages-bedrock-d79e9d389b24 that calls bedrock/us.amazon.nova-2-lite-v1:0
- Generate a virtual key with user id: e2e-test-user
✓test_ocr_reads_the_document_and_bills_its_pages[azure-ai-image] TestOcrDocumentContenttest_ocr_rust_e2e.py›
- Add a deployment named ocr-content-azure-ai-image-0415d2548b42 that calls azure_ai/mistral-document-ai-2512
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/ocr
✓test_ocr_reads_the_document_and_bills_its_pages[cohere-image] TestOcrDocumentContenttest_ocr_rust_e2e.py›
- Add a deployment named ocr-content-cohere-image-a591b941be0b that calls cohere/parse-v5.0
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/ocr
✓test_ocr_reads_the_document_and_bills_its_pages[mistral-image] TestOcrDocumentContenttest_ocr_rust_e2e.py›
- Add a deployment named ocr-content-mistral-image-d7ee67212baf that calls mistral/mistral-ocr-latest
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/ocr
✓test_ocr_reads_the_document_and_bills_its_pages[mistral-pdf] TestOcrDocumentContenttest_ocr_rust_e2e.py›
- Add a deployment named ocr-content-mistral-pdf-a17ab9e35b83 that calls mistral/mistral-ocr-latest
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/ocr
✓test_ocr_reads_the_document_and_bills_its_pages[vertex-mistral-image] TestOcrDocumentContenttest_ocr_rust_e2e.py›
- Add a deployment named ocr-content-vertex-mistral-image-59aecbaec657 that calls vertex_ai/mistral-ocr-2505
- Generate a virtual key with user id: e2e-test-user
- Send a request to /v1/ocr
✓test_openai_chat_logs_cost TestOpenAIChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-openai-cost-2b8a2e7602b9 that calls openai/gpt-5.6
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-openai-cost-2b8a2e7602b9
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_openai_chat_reasoning_reports_reasoning_tokens TestOpenAIChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-openai-reasoning-4e4a883d5624 that calls openai/gpt-5.6
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-openai-reasoning-4e4a883d5624
✓test_openai_chat_returns_tool_call TestOpenAIChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-openai-tool-2ac02800b27f that calls openai/gpt-5.6
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-openai-tool-2ac02800b27f
✓test_openai_chat_streams_real_content TestOpenAIChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-openai-chat-2d2d60d7c6b3 that calls openai/gpt-5.6
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-openai-chat-2d2d60d7c6b3
✓test_openai_chat_streams_tool_call TestOpenAIChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-openai-tool-stream-ef15d0d5da08 that calls openai/gpt-5.6
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-openai-tool-stream-ef15d0d5da08
✓test_openai_chat_structured_output_conforms_to_schema TestOpenAIChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-openai-schema-bd16d05253e9 that calls openai/gpt-5.6
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-openai-schema-bd16d05253e9
✓test_openai_chat_vision_describes_image TestOpenAIChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-openai-vision-12ac78605543 that calls openai/gpt-4o
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-openai-vision-12ac78605543
✓test_openai_family_model_id_completes_with_max_tokens TestBedrockOpenAIFamilyDefaultRoutetest_bedrock_provider_matrix_e2e.py›
- Add a deployment named e2e-bedrock-openai-family-1474de4f94a5 that calls bedrock/global.openai.gpt-6-sol
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-bedrock-openai-family-1474de4f94a5
✓test_openai_prefix_chat_returns_completion_and_logs_its_cost TestOpenAIProviderPrefixChattest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/chat/completions request to gpt-5.5 through /openai
- Wait for the request's spend log in /spend/logs
✓test_openai_prompt_caching_reads_cache TestCacheControltest_cache_control.py›
- Add a deployment named e2e-openai-cache-4b39e96c6cb4 that calls openai/gpt-5.6
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-openai-cache-4b39e96c6cb4
✓test_openai_service_tier_is_echoed TestServiceTiertest_provider_features_e2e.py›
- Add a deployment named e2e-service-tier-7d505dc93621 that calls openai/gpt-5.5
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-service-tier-7d505dc93621
✓test_output_format_returns_schema_json TestAzureFoundryMessagestest_messages_azure_foundry_e2e.py›
- Add a deployment named e2e-azure-foundry-messages-1b540edd48e0 that calls azure_ai/claude-haiku-4-5
- Generate a virtual key with models: e2e-azure-foundry-messages-1b540edd48e0 and user id: e2e-test-user
✓test_passthrough_denies_model_outside_key_allowlist TestPassthroughModelAllowlisttest_passthrough_e2e.py›
- Generate a virtual key with models: gemini-2.5-flash
- Send a /v1/messages request to claude-haiku-4-5 through /anthropic with streaming set to False
✓test_passthrough_prefix_lists_batches_from_openai TestOpenAIPassthroughPrefixtest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- List batches from /openai_passthrough/v1/batches
✓test_passthrough_prefix_uploads_a_file_to_openai TestOpenAIPassthroughPrefixtest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload e2e-passthrough-batch.jsonl to /openai_passthrough/v1/files
✓test_pipecat_tool_smoke[azure]realtime/test_realtime_pipecat_e2e.py›
- Generate a virtual key with user id: e2e-test-user
✓test_pipecat_tool_smoke[gemini]realtime/test_realtime_pipecat_e2e.py›
- Generate a virtual key with user id: e2e-test-user
✓test_pipecat_tool_smoke[openai]realtime/test_realtime_pipecat_e2e.py›
- Add a realtime deployment that calls openai/gpt-realtime-2
- Add a realtime deployment that calls azure/gpt-realtime
- Add a realtime deployment that calls gemini/gemini-3.1-flash-live-preview
- Add a realtime deployment that calls vertex_ai/gemini-live-2.5-flash-native-audio
- Generate a virtual key with user id: e2e-test-user
✓test_plain_call_returns_a_message TestSailMessagestest_sail_e2e.py›
- Add a deployment named e2e-sail-b29ed1917283 that calls sail/zai-org/GLM-5.3
- Generate a virtual key with user id: e2e-test-user
✓test_polly_generative_voice_returns_mp3 TestAwsPollySpeechtest_audio_speech_e2e.py›
- Add a deployment named e2e-speech-polly-a4b962238ff0 that calls aws_polly/generative
- Generate a virtual key with user id: e2e-test-user
✓test_realtime_upgrade_reaches_openai_through_the_passthrough_prefix TestOpenAIPassthroughWebsockettest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Open a websocket to /openai_passthrough/v1/realtime and wait for its first event
✓test_reasoner_returns_reasoning_by_default TestDeepSeekReasoningDisabletest_deepseek_reasoning_e2e.py›
- Add a deployment named e2e-deepseek-reasoner-119ad51d9a8f that calls deepseek/deepseek-v4-pro
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-deepseek-reasoner-119ad51d9a8f
✓test_reasoning_effort_none_disables_reasoning TestDeepSeekReasoningDisabletest_deepseek_reasoning_e2e.py›
- Add a deployment named e2e-deepseek-reasoner-4a71386bc646 that calls deepseek/deepseek-v4-pro
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-deepseek-reasoner-4a71386bc646
✓test_reasoning_effort_none_reaches_together TestTogetherChatCompletionstest_together_ai_e2e.py›
- Add a deployment named e2e-together-4ec166da4bba that calls together_ai/Qwen/Qwen3.5-9B
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-together-4ec166da4bba
✓test_reasoning_items_replay_into_structured_output_after_tool_call TestResponsesOpenAIHostedFeaturestest_responses_e2e.py›
- Add a deployment named e2e-responses-reasoning-a69070e1da2a that calls openai/gpt-5.4-mini
- Generate a virtual key with user id: e2e-test-user
✓test_reasoning_streams_as_reasoning_content_deltas TestTogetherChatCompletionstest_together_ai_e2e.py›
- Add a deployment named e2e-together-774d6c9c0db6 that calls together_ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-together-774d6c9c0db6
✓test_reasoning_surfaces_as_reasoning_content TestTogetherChatCompletionstest_together_ai_e2e.py›
- Read the model cost map
- Add a deployment named e2e-together-20857154ff4c that calls together_ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-together-20857154ff4c
✓test_replayed_reasoning_content_reaches_together TestTogetherChatCompletionstest_together_ai_e2e.py›
- Add a deployment named e2e-together-33cac20a7677 that calls together_ai/MiniMaxAI/MiniMax-M3
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-together-33cac20a7677
✓test_reply_carries_assistant_text_and_usage[chat_completions-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[chat_completions-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[chat_completions-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Start a provider edge server
- Add a deployment named e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 that calls openai/gpt-4o-mini
- Save the provider credential e2e-matrix-gpt-4o-mini-bf2cbf121c6d
- Add a deployment named e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d that calls openai/gpt-4o-mini
- Add a deployment named e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 that calls openai/gpt-5.4-mini
- Save the provider credential e2e-matrix-gpt-5.4-mini-ded258805787
- Add a deployment named e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 that calls openai/gpt-5.4-mini
- Add a deployment named e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 that calls anthropic/claude-haiku-4-5
- Save the provider credential e2e-matrix-claude-haiku-4-5-6e5e03796d71
- Add a deployment named e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[chat_completions-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[chat_completions-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[chat_completions-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[chat_completions-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Add a deployment named e2e-ollama-ollama_chat-68a32c9c8050 that calls ollama_chat/gemma4:31b
- Add a deployment named e2e-ollama-ollama-9d6596ad7e4b that calls ollama/gemma4:31b
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[chat_completions-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[messages-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[messages-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[messages-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[messages-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[messages-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[messages-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[messages-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[messages-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[responses-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[responses-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[responses-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[responses-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[responses-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[responses-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[responses-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "Say hello." and forced weather tool use set to False
✓test_reply_carries_assistant_text_and_usage[responses-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "Say hello." and forced weather tool use set to False
✓test_required_tool_arguments_and_correlated_result[nonstream] TestOpenAIMessagesToolContinuationtest_messages_e2e.py›
- Add a deployment named e2e-bridge-tool-abfe7742c770 that calls openai/gpt-5.6
- Generate a virtual key with models: e2e-bridge-tool-abfe7742c770 and user id: e2e-test-user
✓test_required_tool_arguments_and_correlated_result[stream] TestOpenAIMessagesToolContinuationtest_messages_e2e.py›
- Add a deployment named e2e-bridge-tool-b5860eea4163 that calls openai/gpt-5.6
- Generate a virtual key with models: e2e-bridge-tool-b5860eea4163 and user id: e2e-test-user
✓test_rerank_scores_top_n TestReranktest_rerank_e2e.py›
- Add a deployment named e2e-rerank-9a6b721af5ec that calls cohere/rerank-v3.5
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/rerank request to e2e-rerank-9a6b721af5ec for "What is the capital of the United States?"
✓test_response_format_json_schema_shapes_the_reply TestTogetherChatCompletionstest_together_ai_e2e.py›
- Add a deployment named e2e-together-f28225d07897 that calls together_ai/Qwen/Qwen3.5-9B
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-together-f28225d07897
✓test_responses_anthropic_returns_completion TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-bcf0d1eae4b2 that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
✓test_responses_anthropic_returns_function_call TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-e0a4543c0b0c that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
✓test_responses_anthropic_strict_array_schema_tool_call TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-ed5ec7650237 that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
✓test_responses_anthropic_tool_output_continues_with_previous_response_id TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-6fae30094dea that calls anthropic/claude-haiku-4-5
- Generate a virtual key with user id: e2e-test-user
✓test_responses_azure_openai_preview_api_version_accepts_truncation TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-azure-preview-20604c66df20 that calls azure/gpt-5.4-nano
- Generate a virtual key with user id: e2e-test-user
✓test_responses_azure_openai_returns_completion TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-azure-openai-3851c3485d69 that calls azure/gpt-5.4-nano
- Generate a virtual key with user id: e2e-test-user
✓test_responses_azure_openai_returns_function_call TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-azure-openai-tool-2e4bd0c9f130 that calls azure/gpt-5.4-nano
- Generate a virtual key with user id: e2e-test-user
✓test_responses_azure_openai_streaming_returns_completion TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-azure-stream-2249957ad1f3 that calls azure/gpt-5.4-nano
- Generate a virtual key with user id: e2e-test-user
✓test_responses_bedrock_returns_completion TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-cf93a5688744 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
✓test_responses_bedrock_returns_function_call TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-93ac03a684eb that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
✓test_responses_compact_returns_compacted_conversation TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-compact-698529f1b7df that calls openai/gpt-5.5
- Generate a virtual key with user id: e2e-test-user
✓test_responses_context_management_compacts_server_side TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-context-compaction-a37d7181f7d9 that calls openai/gpt-5.5
- Generate a virtual key with user id: e2e-test-user
✓test_responses_gemini_replays_legacy_function_call_output TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-gemini-tool-45e25ae6925b that calls gemini/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
✓test_responses_gemini_returns_completion TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-gemini-0ab149835c13 that calls gemini/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
✓test_responses_gemini_streaming_returns_completion TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-gemini-f943842be5b1 that calls gemini/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
✓test_responses_logs_cost TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-f55f95a4f8ed that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Wait for the request's spend log in /spend/logs
✓test_responses_returns_completion TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-45d4d5b7d8db that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
✓test_responses_returns_function_call TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-5db656188635 that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
✓test_responses_streaming_returns_completion TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-ff41ebe303e5 that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
✓test_responses_upgrade_is_accepted_on_the_openai_prefix TestOpenAIPassthroughWebsockettest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Open a websocket to /openai/v1/responses and wait for its first event
✓test_responses_vertex_returns_completion TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-vertex-44e6e5dae023 that calls vertex_ai/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
✓test_responses_vertex_returns_function_call TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-vertex-tool-95e063aca28c that calls vertex_ai/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
✓test_responses_vision_describes_image TestResponsestest_responses_e2e.py›
- Add a deployment named e2e-responses-b8c211cecba9 that calls openai/gpt-4o
- Generate a virtual key with user id: e2e-test-user
✓test_retrieve_invalid_batch_id_returns_error TestFilesBatchesContracttest_files_batches_contract_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- GET /v1/batches/invalid-batch-id
✓test_rust_ocr_response[azure-ai] TestRustOcrGatewaytest_ocr_rust_e2e.py›
- Add a deployment named rust-ocr-azure-ai-8a7a7885239f that calls azure_ai/mistral-document-ai-2512
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/ocr request to rust-ocr-azure-ai-8a7a7885239f
✓test_rust_ocr_response[azure-document-intelligence] TestRustOcrGatewaytest_ocr_rust_e2e.py›
- Add a deployment named rust-ocr-azure-document-intelligence-918ac23f8b3a that calls azure_ai/doc-intelligence/prebuilt-layout
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/ocr request to rust-ocr-azure-document-intelligence-918ac23f8b3a
✓test_rust_ocr_response[mistral] TestRustOcrGatewaytest_ocr_rust_e2e.py›
- Add a deployment named rust-ocr-mistral-fca94e488196 that calls mistral/mistral-ocr-latest
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/ocr request to rust-ocr-mistral-fca94e488196
✓test_rust_ocr_response[vertex-mistral] TestRustOcrGatewaytest_ocr_rust_e2e.py›
- Add a deployment named rust-ocr-vertex-mistral-feb6e9abccd2 that calls vertex_ai/mistral-ocr-2505
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/ocr request to rust-ocr-vertex-mistral-feb6e9abccd2
✓test_service_account_key_reads_container_file_by_native_id TestAzureContainerFilestest_containers_e2e.py›
- Add a deployment named e2e-containers-decoy-4f66d0c3f664 that calls azure/gpt-5.4-nano
- Add a deployment named e2e-containers-4f66d0c3f664 that calls azure/gpt-5.4-nano
- Create a team with team alias: e2e-containers-4f66d0c3f664 and models: e2e-containers-4f66d0c3f664
- Create an internal user with user email: e2e-containers-4f66d0c3f664@example.com and user role: internal_user
- Add a user to the team with /team/member_add
- POST /key/service-account/generate
✓test_service_account_key_reads_container_file_created_by_a_streamed_response TestAzureContainerFilestest_containers_e2e.py›
- Add a deployment named e2e-containers-decoy-c28cdb3f18f9 that calls azure/gpt-5.4-nano
- Add a deployment named e2e-containers-c28cdb3f18f9 that calls azure/gpt-5.4-nano
- Create a team with team alias: e2e-containers-c28cdb3f18f9 and models: e2e-containers-c28cdb3f18f9
- Create an internal user with user email: e2e-containers-c28cdb3f18f9@example.com and user role: internal_user
- Add a user to the team with /team/member_add
- POST /key/service-account/generate
✓test_service_tier_bills_the_matching_completion_window[auto-base] TestSailChatCompletionstest_sail_e2e.py›
- Add a deployment named e2e-sail-53282b3ce57a that calls sail/zai-org/GLM-5.3
- Generate a virtual key with user id: e2e-test-user
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_service_tier_bills_the_matching_completion_window[balanced-balanced] TestSailChatCompletionstest_sail_e2e.py›
- Add a deployment named e2e-sail-872563185cda that calls sail/zai-org/GLM-5.3
- Generate a virtual key with user id: e2e-test-user
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_shell_tool_stream_surfaces_shell_call_and_its_output TestResponsesOpenAIHostedFeaturestest_responses_e2e.py›
- Add a deployment named e2e-responses-shell-00b98aa366ef that calls openai/gpt-5.5
- Generate a virtual key with user id: e2e-test-user
✓test_stream_delivers_text_usage_and_a_terminal_event[chat_completions-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[chat_completions-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[chat_completions-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[chat_completions-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[chat_completions-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[chat_completions-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[chat_completions-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[chat_completions-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[messages-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/messages request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[messages-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/messages request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[messages-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/messages request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[messages-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/messages request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[messages-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/messages request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[messages-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/messages request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[messages-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/messages request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[messages-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/messages request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[responses-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/responses request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[responses-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/responses request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[responses-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/responses request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[responses-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/responses request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[responses-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/responses request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[responses-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/responses request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[responses-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/responses request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "Say hello."
✓test_stream_delivers_text_usage_and_a_terminal_event[responses-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/responses request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "Say hello."
✓test_stream_generate_content_frames_sse_the_way_google_sdks_expect TestGoogleNativeGenerateContenttest_google_native_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-google-native-0da89f69b98c that calls gemini/gemini-2.5-flash
- Send a request to /v1beta/models/e2e-google-native-0da89f69b98c:streamGenerateContent
✓test_streamed_response_can_be_deleted[azure] TestStoredResponseLifecycletest_responses_retrieve_e2e.py›
- Add a deployment named e2e-resp-delete-stream-b0fc4584d76d that calls azure/gpt-5.4-nano
- Generate a virtual key with user id: e2e-test-user
✓test_streamed_response_can_be_deleted[openai] TestStoredResponseLifecycletest_responses_retrieve_e2e.py›
- Add a deployment named e2e-resp-delete-stream-8d24f3dce6b7 that calls openai/gpt-5.5
- Generate a virtual key with user id: e2e-test-user
✓test_streamed_responses_call_logs_its_cost TestOpenAIPassthroughSpendtest_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to gpt-5.5 through /openai_passthrough with streaming set to True
- Wait for the request's spend log in /spend/logs
✓test_streams_text_deltas TestTogetherMessagestest_together_ai_e2e.py›
- Add a deployment named e2e-together-b3653a40c464 that calls together_ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/messages request to e2e-together-b3653a40c464
✓test_success_response_matches_chat_completion_contract TestChatCompletionsContracttest_chat_completions_contract_e2e.py›
- Add a deployment named e2e-chat-sec-c52fc1c7f1fc that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
✓test_temperature_boundaries_succeed TestChatCompletionsContracttest_chat_completions_contract_e2e.py›
- Add a deployment named e2e-chat-sec-db3cdd221db3 that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Send a request to /chat/completions
✓test_text_completion_returns_text TestCompletionsEndpointtest_completions_endpoint_e2e.py›
- Add a deployment named e2e-completions-7779d087a5b6 that calls openai/gpt-5.4-nano
- Generate a virtual key with user id: e2e-test-user
✓test_text_conversation[azure]realtime/test_realtime_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Open a /v1/realtime websocket session to azure-realtime-261a10691a8e
- Wait for a session.created event on the realtime websocket
- Send the realtime event session.update over the websocket
- Wait for a session.updated event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
✓test_text_conversation[gemini]realtime/test_realtime_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Open a /v1/realtime websocket session to gemini-realtime-ef7a585f92c0
- Wait for a session.created event on the realtime websocket
- Send the realtime event session.update over the websocket
- Wait for a session.updated event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
✓test_text_conversation[openai]realtime/test_realtime_e2e.py›
- Add a realtime deployment that calls openai/gpt-realtime-2
- Add a realtime deployment that calls azure/gpt-realtime
- Add a realtime deployment that calls gemini/gemini-3.1-flash-live-preview
- Add a realtime deployment that calls vertex_ai/gemini-live-2.5-flash-native-audio
- Generate a virtual key with user id: e2e-test-user
- Open a /v1/realtime websocket session to openai-realtime-b165dc74f922
- Wait for a session.created event on the realtime websocket
- Send the realtime event session.update over the websocket
- Wait for a session.updated event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
✓test_text_conversation[vertex_ai]realtime/test_realtime_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Open a /v1/realtime websocket session to vertex-realtime-fdba0438cdcf
- Wait for a session.created event on the realtime websocket
- Send the realtime event session.update over the websocket
- Wait for a session.updated event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
✓test_thinking_disabled_disables_reasoning TestDeepSeekReasoningDisabletest_deepseek_reasoning_e2e.py›
- Add a deployment named e2e-deepseek-reasoner-b3a9e765dd63 that calls deepseek/deepseek-v4-pro
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-deepseek-reasoner-b3a9e765dd63
✓test_tool_call_is_returned TestTogetherChatCompletionstest_together_ai_e2e.py›
- Add a deployment named e2e-together-6f73f263fce6 that calls together_ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-together-6f73f263fce6
✓test_tool_call_is_returned_named_and_addressable[chat_completions-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set
✓test_tool_call_is_returned_named_and_addressable[chat_completions-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather to
✓test_tool_call_is_returned_named_and_addressable[chat_completions-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to T
✓test_tool_call_is_returned_named_and_addressable[chat_completions-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool us
✓test_tool_call_is_returned_named_and_addressable[chat_completions-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to
✓test_tool_call_is_returned_named_and_addressable[chat_completions-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool u
✓test_tool_call_is_returned_named_and_addressable[chat_completions-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
✓test_tool_call_is_returned_named_and_addressable[chat_completions-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
✓test_tool_call_is_returned_named_and_addressable[messages-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to T
✓test_tool_call_is_returned_named_and_addressable[messages-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool us
✓test_tool_call_is_returned_named_and_addressable[messages-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
✓test_tool_call_is_returned_named_and_addressable[messages-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set
✓test_tool_call_is_returned_named_and_addressable[messages-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
✓test_tool_call_is_returned_named_and_addressable[messages-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use se
✓test_tool_call_is_returned_named_and_addressable[messages-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
✓test_tool_call_is_returned_named_and_addressable[messages-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
✓test_tool_call_is_returned_named_and_addressable[responses-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to
✓test_tool_call_is_returned_named_and_addressable[responses-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool u
✓test_tool_call_is_returned_named_and_addressable[responses-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
✓test_tool_call_is_returned_named_and_addressable[responses-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use se
✓test_tool_call_is_returned_named_and_addressable[responses-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
✓test_tool_call_is_returned_named_and_addressable[responses-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use s
✓test_tool_call_is_returned_named_and_addressable[responses-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
✓test_tool_call_is_returned_named_and_addressable[responses-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
✓test_tool_call_is_streamed TestTogetherChatCompletionstest_together_ai_e2e.py›
- Add a deployment named e2e-together-ab46c357d03d that calls together_ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-together-ab46c357d03d
✓test_tool_call_round_trip[azure]realtime/test_realtime_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Open a /v1/realtime websocket session to azure-realtime-261a10691a8e
- Wait for a session.created event on the realtime websocket
- Send the realtime event session.update over the websocket
- Wait for a session.updated event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
✓test_tool_call_round_trip[gemini]realtime/test_realtime_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Open a /v1/realtime websocket session to gemini-realtime-ef7a585f92c0
- Wait for a session.created event on the realtime websocket
- Send the realtime event session.update over the websocket
- Wait for a session.updated event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
✓test_tool_call_round_trip[openai]realtime/test_realtime_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Open a /v1/realtime websocket session to openai-realtime-b165dc74f922
- Wait for a session.created event on the realtime websocket
- Send the realtime event session.update over the websocket
- Wait for a session.updated event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
✓test_tool_call_round_trip[vertex_ai]realtime/test_realtime_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Open a /v1/realtime websocket session to vertex-realtime-fdba0438cdcf
- Wait for a session.created event on the realtime websocket
- Send the realtime event session.update over the websocket
- Wait for a session.updated event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
- Send the realtime event conversation.item.create over the websocket
- Send the realtime event response.create over the websocket
- Wait for a response.done event on the realtime websocket
✓test_tool_call_streams_as_tool_call_deltas[ollama_chat] TestOllamaStreamedToolCalltest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
✓test_tool_call_streams_as_tool_call_deltas[ollama] TestOllamaStreamedToolCalltest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
✓test_tool_result_round_trip TestTogetherChatCompletionstest_together_ai_e2e.py›
- Add a deployment named e2e-together-4204cb25cbd6 that calls together_ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-together-4204cb25cbd6
✓test_tool_result_round_trip TestTogetherMessagestest_together_ai_e2e.py›
- Add a deployment named e2e-together-0486c487d932 that calls together_ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-together-0486c487d932
✓test_tool_result_round_trip_reaches_the_model[chat_completions-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set
- Send the get_weather tool result back to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 over /chat/completions
✓test_tool_result_round_trip_reaches_the_model[chat_completions-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather to
- Send the get_weather tool result back to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 over /chat/completions
✓test_tool_result_round_trip_reaches_the_model[chat_completions-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to T
- Send the get_weather tool result back to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 over /chat/completions
✓test_tool_result_round_trip_reaches_the_model[chat_completions-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool us
- Send the get_weather tool result back to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d over /chat/completions
✓test_tool_result_round_trip_reaches_the_model[chat_completions-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to
- Send the get_weather tool result back to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 over /chat/completions
✓test_tool_result_round_trip_reaches_the_model[chat_completions-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool u
- Send the get_weather tool result back to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 over /chat/completions
✓test_tool_result_round_trip_reaches_the_model[chat_completions-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
- Send the get_weather tool result back to e2e-ollama-ollama_chat-68a32c9c8050 over /chat/completions
✓test_tool_result_round_trip_reaches_the_model[chat_completions-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
- Send the get_weather tool result back to e2e-ollama-ollama-9d6596ad7e4b over /chat/completions
✓test_tool_result_round_trip_reaches_the_model[messages-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to T
- Send the get_weather tool result back to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 over /v1/messages
✓test_tool_result_round_trip_reaches_the_model[messages-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool us
- Send the get_weather tool result back to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 over /v1/messages
✓test_tool_result_round_trip_reaches_the_model[messages-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
- Send the get_weather tool result back to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 over /v1/messages
✓test_tool_result_round_trip_reaches_the_model[messages-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set
- Send the get_weather tool result back to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d over /v1/messages
✓test_tool_result_round_trip_reaches_the_model[messages-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
- Send the get_weather tool result back to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 over /v1/messages
✓test_tool_result_round_trip_reaches_the_model[messages-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use se
- Send the get_weather tool result back to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 over /v1/messages
✓test_tool_result_round_trip_reaches_the_model[messages-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
- Send the get_weather tool result back to e2e-ollama-ollama_chat-68a32c9c8050 over /v1/messages
✓test_tool_result_round_trip_reaches_the_model[messages-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
- Send the get_weather tool result back to e2e-ollama-ollama-9d6596ad7e4b over /v1/messages
✓test_tool_result_round_trip_reaches_the_model[responses-claude-haiku-4-5-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to
- Send the get_weather tool result back to e2e-matrix-claude-haiku-4-5-env_ref-b5e6a1f4be46 over /v1/responses
✓test_tool_result_round_trip_reaches_the_model[responses-claude-haiku-4-5-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool u
- Send the get_weather tool result back to e2e-matrix-claude-haiku-4-5-stored_credential-6e5e03796d71 over /v1/responses
✓test_tool_result_round_trip_reaches_the_model[responses-gpt-4o-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
- Send the get_weather tool result back to e2e-matrix-gpt-4o-mini-env_ref-925b291094e0 over /v1/responses
✓test_tool_result_round_trip_reaches_the_model[responses-gpt-4o-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use se
- Send the get_weather tool result back to e2e-matrix-gpt-4o-mini-stored_credential-bf2cbf121c6d over /v1/responses
✓test_tool_result_round_trip_reaches_the_model[responses-gpt-5.4-mini-env_ref] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
- Send the get_weather tool result back to e2e-matrix-gpt-5.4-mini-env_ref-769d104ab902 over /v1/responses
✓test_tool_result_round_trip_reaches_the_model[responses-gpt-5.4-mini-stored_credential] TestConversationalMatrixtest_conversational_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use s
- Send the get_weather tool result back to e2e-matrix-gpt-5.4-mini-stored_credential-ded258805787 over /v1/responses
✓test_tool_result_round_trip_reaches_the_model[responses-ollama_chat] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-ollama-ollama_chat-68a32c9c8050 with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
- Send the get_weather tool result back to e2e-ollama-ollama_chat-68a32c9c8050 over /v1/responses
✓test_tool_result_round_trip_reaches_the_model[responses-ollama] TestOllamaConversationtest_ollama_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to e2e-ollama-ollama-9d6596ad7e4b with the prompt "What is the weather in Paris right now? Use the get_weather tool." and forced weather tool use set to True
- Send the get_weather tool result back to e2e-ollama-ollama-9d6596ad7e4b over /v1/responses
✓test_tool_use_block_is_returned TestTogetherMessagestest_together_ai_e2e.py›
- Add a deployment named e2e-together-9754e7ada40a that calls together_ai/nvidia/NVIDIA-Nemotron-3.5-Super-VL
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/messages request to e2e-together-9754e7ada40a
✓test_tool_use_nonstream TestAzureFoundryMessagestest_messages_azure_foundry_e2e.py›
- Add a deployment named e2e-azure-foundry-messages-45e3ad4b96cf that calls azure_ai/claude-haiku-4-5
- Generate a virtual key with models: e2e-azure-foundry-messages-45e3ad4b96cf and user id: e2e-test-user
✓test_tool_use_stream TestAzureFoundryMessagestest_messages_azure_foundry_e2e.py›
- Add a deployment named e2e-azure-foundry-messages-978e3c7eee50 that calls azure_ai/claude-haiku-4-5
- Generate a virtual key with models: e2e-azure-foundry-messages-978e3c7eee50 and user id: e2e-test-user
✓test_unflagged_model_converts_system_reminder_and_succeeds TestAnthropicChatMidConversationSystemtest_chat_mid_conversation_system_e2e.py›
- Add a deployment named e2e-chat-midsys-cc139fbb3112 that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with models: e2e-chat-midsys-cc139fbb3112 and user id: e2e-test-user
- POST /v1/chat/completions
✓test_unflagged_model_converts_system_reminder_and_succeeds TestBedrockInvokeChatMidConversationSystemtest_chat_mid_conversation_system_e2e.py›
- Add a deployment named e2e-chat-midsys-140c3517ef02 that calls bedrock/invoke/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with models: e2e-chat-midsys-140c3517ef02 and user id: e2e-test-user
- POST /v1/chat/completions
✓test_unflagged_model_converts_system_reminder_and_succeeds TestBedrockInvokeMidConversationSystemtest_messages_mid_conversation_system_e2e.py›
- Add a deployment named e2e-midsys-54d6308eaa3b that calls bedrock/invoke/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with models: e2e-midsys-54d6308eaa3b and user id: e2e-test-user
✓test_unflagged_model_converts_system_reminder_and_succeeds TestAzureFoundryMidConversationSystemtest_messages_mid_conversation_system_native_providers_e2e.py›
- Add a deployment named e2e-midsys-0fb0515b744d that calls azure_ai/claude-opus-4-7
- Generate a virtual key with models: e2e-midsys-0fb0515b744d and user id: e2e-test-user
✓test_unflagged_model_converts_system_reminder_and_succeeds TestVertexMidConversationSystemtest_messages_mid_conversation_system_native_providers_e2e.py›
- Add a deployment named e2e-midsys-4f8d96927695 that calls vertex_ai/claude-sonnet-4-6
- Generate a virtual key with models: e2e-midsys-4f8d96927695 and user id: e2e-test-user
✓test_unknown_service_tier_is_dropped_and_billed_asap[5] TestSailChatCompletionstest_sail_e2e.py›
- Add a deployment named e2e-sail-9203fa3e7d06 that calls sail/zai-org/GLM-5.3
- Generate a virtual key with user id: e2e-test-user
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_unknown_service_tier_is_dropped_and_billed_asap[bogus] TestSailChatCompletionstest_sail_e2e.py›
- Add a deployment named e2e-sail-056ab9b24ea3 that calls sail/zai-org/GLM-5.3
- Generate a virtual key with user id: e2e-test-user
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_upload_without_purpose_returns_error TestFilesBatchesContracttest_files_batches_contract_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload batch_input.jsonl to /v1/files
✓test_upstream_handshake_refusal_is_an_error_event_and_policy_close[azure-bad-key]realtime/test_realtime_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a realtime deployment that calls azure/gpt-realtime
- Open a /v1/realtime websocket session to azure-realtime-refused-5f186d93fbe0
✓test_verbose_json_returns_word_timestamps TestWhisperTranscriptionFormatstest_audio_transcriptions_e2e.py›
- Add a deployment named e2e-whisper-verbose-fb0b6a8b596a that calls openai/whisper-1
- Generate a virtual key with user id: e2e-test-user
- Upload weather_question_24k.wav to /v1/audio/transcriptions
✓test_vertex_chat_returns_content TestVertexChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-vertex-chat-18a699acc73e that calls vertex_ai/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-vertex-chat-18a699acc73e
✓test_vertex_chat_returns_tool_call TestVertexChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-vertex-tool-30bc0a678e8f that calls vertex_ai/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-vertex-tool-30bc0a678e8f
✓test_vertex_chat_streams_real_content TestVertexChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-vertex-stream-cdfef44be888 that calls vertex_ai/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to e2e-vertex-stream-cdfef44be888
✓test_vertex_chat_vision_describes_image TestVertexChatCompletionstest_chat_completions_regression_e2e.py›
- Add a deployment named e2e-vertex-vision-fb2d0a295c4a that calls vertex_ai/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-vertex-vision-fb2d0a295c4a
✓test_vertex_embeddings_honor_requested_dimensions TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Add a deployment named e2e-embeddings-vertex-dims-cea7ef09a25d that calls vertex_ai/text-embedding-005
- Generate a virtual key with user id: e2e-test-user
✓test_vertex_embeddings_returns_vector TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Add a deployment named e2e-embeddings-vertex-e58259d21ba8 that calls vertex_ai/text-embedding-005
- Generate a virtual key with user id: e2e-test-user
✓test_vertex_multimodal_embeddings_honor_dimensions_and_are_costed TestEmbeddingsEndpointtest_embeddings_endpoint_e2e.py›
- Add a deployment named e2e-embeddings-vertex-mm-564a28d9ae01 that calls vertex_ai/multimodalembedding@001
- Generate a virtual key with user id: e2e-test-user
✓test_vertex_passthrough_via_managed_model_logs_cost TestVertexPassthroughSpendTrackingtest_vertex_passthrough_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- POST /model/new
- Wait for the last control-plane write to reach every proxy replica
- Send a Vertex AI generateContent request to gemini-2.5-flash in us-central1 through /vertex_ai
- Wait for the request's spend log in /spend/logs
✓test_vertex_prompt_caching_reads_cache TestCacheControltest_cache_control.py›
- Add a deployment named e2e-vertex-cache-0d4252c0a3c2 that calls vertex_ai/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
- POST /chat/completions
- Wait for the request's spend log in /spend/logs
- List the deployments from /model/info
✓test_vtt_format_returns_webvtt_transcript TestWhisperTranscriptionFormatstest_audio_transcriptions_e2e.py›
- Add a deployment named e2e-whisper-vtt-34fbee4c5878 that calls openai/whisper-1
- Generate a virtual key with user id: e2e-test-user
- Upload weather_question_24k.wav to /v1/audio/transcriptions
−test_empty_input_returns_error TestAudioSpeechtest_audio_speech_e2e.py›
No steps recorded
stage red: product gap, /v1/audio/speech 500s on empty input instead of surfacing the provider 4xx
View test on GitHub ↗−test_flagged_model_keeps_prompt_cache_across_system_reminder TestBedrockInvokeMidConversationSystemtest_messages_mid_conversation_system_e2e.py›
No steps recorded
LIT-4873: a mid-conversation role='system' reminder invalidates the prompt cache on the vertex_ai / azure_ai / bedrock_invoke Messages paths, while the same request preserves it both direct to Anthropic and through litellm's first-party anthropic path. Product bug, not a test defect: the assertion here is correct and must be restored unchanged with the fix
View test on GitHub ↗−test_flagged_model_keeps_prompt_cache_across_system_reminder TestAzureFoundryMidConversationSystemtest_messages_mid_conversation_system_native_providers_e2e.py›
No steps recorded
LIT-4873: a mid-conversation role='system' reminder invalidates the prompt cache on the vertex_ai / azure_ai / bedrock_invoke Messages paths, while the same request preserves it both direct to Anthropic and through litellm's first-party anthropic path. Product bug, not a test defect: the assertion here is correct and must be restored unchanged with the fix
View test on GitHub ↗−test_flagged_model_keeps_prompt_cache_across_system_reminder TestVertexMidConversationSystemtest_messages_mid_conversation_system_native_providers_e2e.py›
No steps recorded
LIT-4873: a mid-conversation role='system' reminder invalidates the prompt cache on the vertex_ai / azure_ai / bedrock_invoke Messages paths, while the same request preserves it both direct to Anthropic and through litellm's first-party anthropic path. Product bug, not a test defect: the assertion here is correct and must be restored unchanged with the fix
View test on GitHub ↗−test_gemini_passthrough_returns_the_same_header_contract_as_the_managed_routetest_passthrough_e2e.py›
No steps recorded
stage red: product gap, native passthrough returns no x-litellm-response-cost or x-ratelimit-* headers
View test on GitHub ↗−test_hosted_vllm_chat_returns_content TestHostedVllmChattest_chat_completions_regression_e2e.py›
No steps recorded
set HOSTED_VLLM_API_BASE (the live vLLM server this deployment targets)
View test on GitHub ↗−test_invalid_response_id_returns_error TestResponsesRetrievetest_responses_retrieve_e2e.py›
No steps recorded
stage red: product gap (LIT-5447), retrieving an unknown response id returns 400 (model=None) instead of 404
View test on GitHub ↗−test_invalid_voice_returns_error TestAudioSpeechtest_audio_speech_e2e.py›
No steps recorded
stage red: product gap, /v1/audio/speech 500s on invalid voice instead of surfacing the provider 4xx
View test on GitHub ↗−test_missing_document_returns_error TestRustOcrGatewaytest_ocr_rust_e2e.py›
No steps recorded
stage red: product gap, /v1/ocr 500s (aocr TypeError) on missing document instead of 400
View test on GitHub ↗−test_missing_input_returns_error TestAudioSpeechtest_audio_speech_e2e.py›
No steps recorded
stage red: product gap, /v1/audio/speech 500s on missing input instead of 400
View test on GitHub ↗−test_missing_input_returns_error TestModerationstest_moderations_e2e.py›
No steps recorded
stage red: product gap, /v1/moderations 500s (KeyError 'input') on missing input instead of 400
View test on GitHub ↗−test_missing_input_returns_error TestResponsestest_responses_e2e.py›
No steps recorded
stage red: product gap, /v1/responses 500s (aresponses TypeError) on missing input instead of 400
View test on GitHub ↗−test_missing_max_tokens_returns_error TestAnthropicMessagestest_messages_e2e.py›
No steps recorded
stage red: product gap, /v1/messages 500s (anthropic_messages TypeError) on missing max_tokens instead of 400
View test on GitHub ↗−test_missing_messages_returns_error TestAnthropicMessagestest_messages_e2e.py›
No steps recorded
stage red: product gap, /v1/messages 500s (anthropic_messages TypeError) on missing messages instead of 400
View test on GitHub ↗−test_missing_model_returns_error TestAudioSpeechtest_audio_speech_e2e.py›
No steps recorded
stage red: product gap, /v1/audio/speech 500s on missing model instead of 400
View test on GitHub ↗−test_missing_prompt_returns_error TestImageGenerationtest_image_generation_e2e.py›
No steps recorded
stage red: product gap, /v1/images/generations 500s (aimage_generation TypeError) on missing prompt instead of 400
View test on GitHub ↗−test_retrieve_invalid_id_returns_error TestVectorStorestest_vector_stores_e2e.py›
No steps recorded
stage red: product gap, retrieving a nonexistent vector store returns 2xx with an error envelope in the body instead of 404
View test on GitHub ↗−test_search_missing_query_returns_error TestVectorStorestest_vector_stores_e2e.py›
No steps recorded
stage red: product gap, vector store search 500s (asearch TypeError) on missing query instead of 400
View test on GitHub ↗−test_static_and_x_pass_headers_reach_upstream TestPassthroughHeaderstest_passthrough_headers_e2e.py›
No steps recorded
stage red: ALB sends custom passthrough paths to backend pods, which lack ANTHROPIC_API_KEY, so the os.environ header forwards unresolved and Anthropic 401s; routing user-defined paths to the gateway needs a product/infra decision (fixed path namespace or dynamic ingress)
View test on GitHub ↗−test_store_and_retrieve_by_id TestResponsesRetrievetest_responses_retrieve_e2e.py›
No steps recorded
stage red: product gap (LIT-5446), retrieve returns a different id than the stored response (non-idempotent response-id re-encryption)
View test on GitHub ↗−test_vertex_partner_model_streams_openai_shaped_chunks[vertex_ai/mistral-small-2503] TestVertexPartnerChatCompletionstest_chat_completions_regression_e2e.py›
No steps recorded
the e2e Vertex project has no access to mistral-small-2503 (404 publisher model not found)
View test on GitHub ↗−test_vertex_partner_model_streams_openai_shaped_chunks[vertex_ai/openai/gpt-oss-120b-maas] TestVertexPartnerChatCompletionstest_chat_completions_regression_e2e.py›
No steps recorded
never served by the e2e Vertex project (60s read timeout, no headers)
View test on GitHub ↗−test_web_search_server_tool_is_served TestBedrockWebSearchServerTooltest_bedrock_web_search_server_tool_e2e.py›
No steps recorded
stage red: environment gap, the e2e stack neither enables the websearch_interception callback nor declares a search backend, so the request reaches bedrock's transformation and takes its by-design 400. Unskip once the ephemeral stack ships the config in this module's docstring.
View test on GitHub ↗✓test_a_drained_group_does_not_block_a_different_group TestModelAccessGroupBudgetbudgets/test_model_access_group_budget_e2e.py›
- Generate a virtual key with models: e2e-mag-free-0a1b3d48afce and user id: e2e-test-user
- Send a /chat/completions request to e2e-mag-unbudgeted-0a1b3d48afce with the prompt "hi 1e6f8f91f1a1"
✓test_a_key_that_spent_nothing_is_blocked_by_the_shared_pool TestModelAccessGroupBudgetbudgets/test_model_access_group_budget_e2e.py›
- Generate a virtual key with models: e2e-mag-budget-0a1b3d48afce and user id: e2e-test-user
- Send a /chat/completions request to e2e-mag-budgeted-0a1b3d48afce with the prompt "hi b5074fc53a63"
✓test_alias_shares_rpm_bucket_with_model_group TestModelGroupAliasRateLimitratelimit/test_model_group_alias_rate_limit_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-alias-rl-target with the prompt "reply with one word ba585835cc3c"
- Send a /chat/completions request to e2e-alias-rl-target with the prompt "reply with one word 24775318381e"
- Send a /chat/completions request to e2e-alias-rl-target with the prompt "reply with one word caa8173011d1"
- Send a /chat/completions request to e2e-alias-rl-alias with the prompt "reply with one word 5fef9f64f5a6"
✓test_bare_key_blocks_over_its_own_budget TestBudgetBlocksPerLevelbudgets/test_budget_enforcement_e2e.py›
- Generate a virtual key with max budget: 3e-06
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 2d10b14df458"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 692f52af7255"
✓test_bare_key_budget_resets_after_window TestBudgetResetPerLevelbudgets/test_budget_reset_e2e.py›
- Generate a virtual key with max budget: 3e-06 and budget duration: 30s
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 94ee4de783f8"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 19712e2356c9"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 6b4c5445de68"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 80f484d72c30"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset dcf6f4c75501"
✓test_blocked_member_does_not_block_peer TestTeamMemberBudgetIsolationbudgets/test_team_member_budget_isolation_e2e.py›
- Create the team e2e-member-iso-2249ad9cc80a and wait until /team/info returns it
- Create an internal user with max budget: 100.0
- Add the internal user to the team
- Generate a virtual key with user id: 55e95b1e-22b3-4bb2-ae55-89134c9e99bb and team id: 9e9d7258-e232-4362-88bf-531a8c9ad06f
- Generate a virtual key with user id: 7bff5574-a979-4c79-8782-cbe166ffb872 and team id: 9e9d7258-e232-4362-88bf-531a8c9ad06f
- Send a /chat/completions request to gpt-5.5 with the prompt "tight c57b24392daf"
- Send a /chat/completions request to gpt-5.5 with the prompt "tight 6cdecd278206"
- Send a /chat/completions request to gpt-5.5
- Send a /chat/completions request to gpt-5.5 with the prompt "tight b1e479d8a9dc"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_budget_crud_roundtripbudgets/test_budget_crud_e2e.py›
- Create a budget with /budget/new
- Read the budget from /budget/info
- Generate a virtual key with budget id: 4763780f-97a0-46dd-9f79-728786af1cfa
- Read the key's settings back from /key/info
✓test_budget_delete_removes_itbudgets/test_budget_crud_e2e.py›
- Create a budget with /budget/new
- Delete the budget
- Read the budget from /budget/info
✓test_budget_duration_schedules_reset_on_keybudgets/test_budget_crud_e2e.py›
- Generate a virtual key with max budget: 10.0 and budget duration: 30d
- Read the key's settings back from /key/info
✓test_budget_fallback_reroutes_anthropic_messages_to_openaibudgets/test_budget_fallback_e2e.py›
- Generate a virtual key with model max budget: claude-haiku-4-5: budget limit: 1e-06 and time period: 30d and budget fallbacks: claude-haiku-4-5: gpt-5.5
- Send a /v1/messages request to claude-haiku-4-5 with the prompt "hi 4a1c4a40b534"
- Send a /v1/messages request to claude-haiku-4-5 with the prompt "hi bf2fe8debef1"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_burst_of_concurrent_calls_loses_no_spendspend_tracking/test_spend_tracking_e2e.py›
- Add a priced deployment, then create two teams with one key each and send 7 /chat/completions requests per key, 6 of them at once
- Send a /chat/completions request to e2e-reconciliation-39d5177e2794
- Check that the /spend/logs rows of team b8fc6e0f-4f85-45fa-81cb-3ceb9eaca9f7 match each response's tokens and cost
- Wait for the key's spend in /key/info to reach the expected minimum
- Check that the /spend/logs rows of team b0d36151-e0f2-4d85-a31d-96c0c423d65d match each response's tokens and cost
- Wait for the key's spend in /key/info to reach the expected minimum
✓test_burst_rate_limit_does_not_freeze_fresh_key TestRedisCircuitBreakerPathratelimit/test_redis_circuit_breaker_e2e.py›
- Add a deployment named e2e-cb-model-032162450b4c that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with models: e2e-cb-model-032162450b4c, key alias: e2e-cb-hot-8e94f41b83c0 and rpm limit: 1
- Generate a virtual key with models: e2e-cb-model-032162450b4c and key alias: e2e-cb-cool-c7e912d795a2
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst 77b5daa41d88"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst d9e54de2141b"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst 88bc39653c04"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst 3aba8af5fee0"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst daaa3fbcbeb6"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst 99bcb9c5a17e"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst 9dc76b1eb158"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst 271cea29c814"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst eb950a72592e"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst aa7c54b3b4a4"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst e88a04f73a95"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "burst 7aa30af1cc10"
- Send a /chat/completions request to e2e-cb-model-032162450b4c with the prompt "fresh fcb264a79f7a"
✓test_cache_hit_is_zero_cost_and_suffixedspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash with the prompt "What is the capital of France? Answer in one word. 92757c17319b"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cache_hit_reduces_tpm_by_non_cached_only TestTpmExcludesCachedTokensratelimit/test_tpm_excludes_cached_tokens_e2e.py›
- Add a deployment named e2e-tpm-cache-8fb96751a521 that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with models: e2e-tpm-cache-8fb96751a521 and tpm limit: 100000
- POST /chat/completions
- Send a request to /chat/completions
✓test_cache_write_tokens_billed_at_cache_creation_rate TestCacheCostAccountingspend_tracking/test_cache_cost_accounting_e2e.py›
- List the deployments from /model/info
- Generate a virtual key with user id: e2e-test-user
- Add a deployment with custom rates that calls openai/gpt-5.6-luna
- Send a /chat/completions request to cache-write-priced-fdf0597f6e23
- Wait for the request's cost breakdown in /spend/logs
✓test_capture_rate_reports_or_names_the_missing_billing_keyspend_tracking/test_spend_routes.py›
- Call the management route /spend/capture_rate
✓test_chat_completion_writes_nonzero_spend_rowspend_tracking/test_spend_tracking_e2e.py›
- List the deployments from /model/info
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash with the prompt "reply with one word c5de039db019"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cold_counter_reseed_keeps_counter_equal_to_db_spendbudgets/test_spend_counter_reseed_e2e.py›
- Generate a virtual key with models: claude-haiku-4-5 and max budget: 1.0
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed e8b25114fe33"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 7ce4ec543362"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed e0140f0a2e76"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 04573d0cf7fa"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 043ce7814511"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 9d6f32bc3c44"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 0b81e37daffb"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed cf3571b5623c"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed d3d3b2e82d40"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed c48873e840e0"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 11d99e192419"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed ddec9ec811f2"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed c0b364f0302c"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed f0adcd81ec3a"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 0b9c51b62e10"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 2cc30a3ca7c7"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 43281ded46db"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed d1722deb23e7"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed d34f95b83852"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 975a8d809de3"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 4a861dc930af"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed c48a164b894e"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed f0e17862ec0d"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed de40953c6909"
- Read the key's settings back from /key/info
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed cc11e1b6ab77"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed d658c216636c"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed db9a080b4608"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 1d36f9444a3d"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed b65f617e8451"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reseed 6d437467cd6b"
✓test_component_cost_headers_sum_to_total TestCostHeadersspend_tracking/test_cost_headers_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment with custom rates that calls openai/gpt-5.5
- Send a request to /chat/completions
✓test_cost_breakdown_reports_component_costs TestCacheCostAccountingspend_tracking/test_cache_cost_accounting_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment with custom rates that calls openai/gpt-5.5
- Send a /chat/completions request to breakdown-priced-d8d7fb70f7e3
- Wait for the request's cost breakdown in /spend/logs
✓test_each_model_on_a_shared_key_gets_its_own_rowspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash with the prompt "one word 5ce1e5d2ada1"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "one word e6ff6d61fcc0"
- Wait for at least 2 of the key's spend logs in /spend/logs
✓test_edge_wired_chat_writes_nonzero_spend_rowspend_tracking/test_provider_edge_spend_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-edge-openai-bcf7b3377d86 that calls openai/gpt-5.5
- Send a /chat/completions request to e2e-edge-openai-bcf7b3377d86 with the prompt "reply with one word daf3487d26f9"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_embedding_writes_nonzero_spend_rowspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send an /embeddings request to openai-text-embedding-3-small for "vectorize this sentence d0a6e5bc97e4"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_end_user_budget_blocks_attributed_calls TestBudgetBlocksPerLevelbudgets/test_budget_enforcement_e2e.py›
- Create the end user e2e-budget-cust-5ca689954634
- Generate a virtual key with models: claude-haiku-4-5
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 353140b1d626"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 3d472f4f50d8"
✓test_end_user_header_attributes_responses_row[x-litellm-customer-id]spend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to openai-responses-codex with custom headers and the prompt "one word 1aeda4b8e45d"
- Wait for at least 1 of the key's spend logs in /spend/logs
- Wait for the end user's spend in /customer/info to go above 0.0
✓test_end_user_header_attributes_responses_row[x-litellm-end-user-id]spend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /v1/responses request to openai-responses-codex with custom headers and the prompt "one word 1465fedeac61"
- Wait for at least 1 of the key's spend logs in /spend/logs
- Wait for the end user's spend in /customer/info to go above 0.0
✓test_end_user_spend_attributed_on_rowspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash with the prompt "hi"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_every_streamed_chunk_carries_the_served_tier TestServiceTierPricingspend_tracking/test_service_tier_pricing_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment with custom rates that calls openai/gpt-5.5
- Send a streaming /chat/completions request to tier-echo-stream-03451d6a1b5d
✓test_every_write_path_row_joins_the_key TestKeyAttributionspend_tracking/test_key_attribution_e2e.py›
- List the deployments from /model/info
- Create an internal user with the role proxy_admin
- Generate a virtual key with user id: key-attribution-7c2e9f6de952 and key alias: key-attribution-7c2e9f6de952
- Send a /chat/completions request to gemini-2.5-flash with the prompt "Reply with the word ok. 0848ab9253aa"
- Send a /queue/chat/completions request to gemini-2.5-flash with the prompt "Reply with the word ok. 0848ab9253aa"
- Send a /v1/messages request to claude-haiku-4-5 with the prompt "Reply with the word ok. 0848ab9253aa"
- Send a /v1/responses request to openai-responses-codex with the prompt "Reply with the word ok. 0848ab9253aa"
- Send an /embeddings request to openai-text-embedding-3-small for "Reply with the word ok. 0848ab9253aa"
- Send a Gemini generateContent request to gemini-2.5-flash through /gemini with the prompt "Reply with the word ok. 0848ab9253aa"
- Upload a batch input file for openai-gpt-4o-mini to /v1/files
- Create a batch for openai-gpt-4o-mini on /v1/batches
- Post a callback log for gemini-2.5-flash to /v1/rust_control_plane/logs
- Wait for the request's spend log in /spend/logs
✓test_failure_call_writes_failure_status_rowspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-spend-failure-745ea5c49315 that calls openai/gpt-5.5
- Send a /chat/completions request to e2e-spend-failure-745ea5c49315 with the prompt "trigger failure da2047c5bb7c"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_failure_rows_share_normalized_error_across_provider_wordingspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-norm-openai-b31102d26af5 that calls openai/gpt-5.5
- Send a /chat/completions request to e2e-norm-openai-b31102d26af5 with the prompt "normalize failure b31102d26af5"
- Add a deployment named e2e-norm-anthropic-b31102d26af5 that calls anthropic/claude-haiku-4-5
- Send a /chat/completions request to e2e-norm-anthropic-b31102d26af5 with the prompt "normalize failure b31102d26af5"
- Wait for at least 2 of the key's spend logs in /spend/logs
✓test_generous_mode_lets_priority_borrow_past_reservation TestDynamicRateLimitPriorityratelimit/test_dynamic_rate_limit_priority_e2e.py›
- Add a deployment named e2e-dynpri-generous-9fc36bf3995a that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with models: e2e-dynpri-generous-9fc36bf3995a, key alias: e2e-dynpri-generous-dev-c88d82f6661e and metadata: priority: dev
- Generate a virtual key with models: e2e-dynpri-generous-9fc36bf3995a, key alias: e2e-dynpri-generous-prod-0c167a2ab91a and metadata: priority: prod
- Read the key's settings back from /key/info
- Send a /chat/completions request to e2e-dynpri-generous-9fc36bf3995a with the prompt "reply with one word fe462e170fbf"
- Send a /chat/completions request to e2e-dynpri-generous-9fc36bf3995a with the prompt "reply with one word b1daf90bee64"
- Send a /chat/completions request to e2e-dynpri-generous-9fc36bf3995a with the prompt "reply with one word 34a4c8f32e0b"
- Send a /chat/completions request to e2e-dynpri-generous-9fc36bf3995a with the prompt "reply with one word e6d86dbccd83"
✓test_headers_report_limit_and_remaining TestKeyRateLimitsratelimit/test_rate_limit_e2e.py›
- Generate a virtual key with models: claude-haiku-4-5, tpm limit: 100000 and rpm limit: 5
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word c8b8e232666b"
✓test_health_check_rows_keep_the_service_account_key TestKeyAttributionspend_tracking/test_key_attribution_e2e.py›
- Run a health check on gemini-2.5-flash with /health
- Read /spend/logs between 2026-10-18 04:06:40.372059+00:00 and 2026-10-18 04:08:41.054547+00:00
- Read /spend/logs between 2026-10-18 04:06:40.372059+00:00 and 2026-10-18 04:08:46.124297+00:00
- Read /spend/logs between 2026-10-18 04:06:40.372059+00:00 and 2026-10-18 04:08:51.185082+00:00
✓test_intercepted_search_is_billed_under_the_request_session TestWebSearchInterceptionSessionspend_tracking/test_websearch_interception_session_e2e.py›
- Add a deployment named e2e-websearch-session-a71a83f1569b that calls bedrock/invoke/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with models: e2e-websearch-session-a71a83f1569b and user id: e2e-test-user
- Send a /v1/messages request to e2e-websearch-session-a71a83f1569b
- Wait for at least 2 of the session's spend logs in /spend/logs
✓test_key_budget_reset_at_advances_after_windowbudgets/test_budget_reset_advances_e2e.py›
- Generate a virtual key with max budget: 3e-06 and budget duration: 30s
- Read the key's settings back from /key/info
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance e406ef3b16d7"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 8cf43d195ad9"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 75a37b5d3110"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance ea4a0fa9cddd"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 130b59625202"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 5afbb6d4fa40"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance d86bb9ca426f"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 2a5f133f38e5"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance b092fefe62bd"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance adc6628217be"
- Read the key's settings back from /key/info
✓test_key_spend_blocks_at_capbudgets/test_budget_reset_advances_e2e.py›
- Generate a virtual key with max budget: 3e-06 and budget duration: 30s
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 5dbdfb96a477"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance cd6ae19826db"
✓test_key_spend_equals_sum_of_logsspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash with the prompt "say hi a15419c9bad5"
- Send a /chat/completions request to gemini-2.5-flash with the prompt "say hi aad5ae0c4936"
- Wait for at least 2 of the key's spend logs in /spend/logs
- Wait for the key's spend in /key/info to reach the expected minimum
✓test_key_with_budget_duration_schedules_reset_at_creationbudgets/test_budget_reset_advances_e2e.py›
- Generate a virtual key with max budget: 3e-06 and budget duration: 30s
- Read the key's settings back from /key/info
✓test_long_window_blocks_after_short_window_resetsbudgets/test_multi_window_budget_e2e.py›
- Generate a virtual key with models: gpt-5.5 and budget limits: budget duration: 30s and max budget: 1e-09, budget duration: 1d and max budget: 5e-07
- Send a /chat/completions request to gpt-5.5 with the prompt "window 6f4aed717c7f"
- Send a /chat/completions request to gpt-5.5 with the prompt "window 873a393d6eb2"
- Read the key's budget windows from /key/info
- Send a /chat/completions request to gpt-5.5 with the prompt "window d8cb5e1388b4"
✓test_member_budget_blocks_without_touching_teammates TestBudgetBlocksPerLevelbudgets/test_budget_enforcement_e2e.py›
- Create the team e2e-budget-team-b74f345d4e02 and wait until /team/info returns it
- Create an internal user with max budget: 100.0
- Add the internal user to the team
- Generate a virtual key with user id: b07cb2da-c427-41b2-bfc2-d1436dd3cb3e and team id: 0e5b6087-0449-4c5f-91a0-088cb14e3ce0
- Create an internal user with max budget: 100.0
- Add the internal user to the team
- Generate a virtual key with user id: 65f31de9-54fe-416f-bc61-1e14c5d5151a and team id: 0e5b6087-0449-4c5f-91a0-088cb14e3ce0
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 9f904e532500"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend ba4e37d03900"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend c21b4f34aeab"
✓test_member_spend_attributed_to_team_and_user TestTeamMemberBudgetbudgets/test_team_member_budget_e2e.py›
- Create the team e2e-team-member-af07956a0e91 and wait until /team/info returns it
- Create an internal user with max budget: 100.0
- Add the internal user to the team
- Generate a virtual key with user id: 4ab406b7-e076-4b8e-82b7-5b98f95e7aca and team id: f9f2847c-bf33-4180-8cd0-3fb0c20521ba
- Send a /chat/completions request to claude-haiku-4-5
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_member_spend_over_budget_is_blocked TestTeamMemberBudgetbudgets/test_team_member_budget_e2e.py›
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend b8b30042ecd5"
✓test_messages_bridge_keeps_cache_tokens TestCacheCostAccountingspend_tracking/test_cache_cost_accounting_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment with custom rates that calls openai/gpt-5.3-codex
- Send a /v1/messages request to bridge-cache-priced-59bca2cf039a
- Wait for a matching cost breakdown in the key's /spend/logs
✓test_messages_stream_records_the_served_tier TestServiceTierPricingspend_tracking/test_service_tier_pricing_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment with custom rates that calls openai/gpt-5.5
- Send a streaming /v1/messages request to tier-messages-stream-ad49778f8608
- Wait for a matching cost breakdown in the key's /spend/logs
✓test_missing_end_date_is_rejected TestTeamDailyActivityspend_tracking/test_team_daily_activity_e2e.py›
- Probe /team/daily/activity
✓test_missing_start_date_is_rejected TestTeamDailyActivityspend_tracking/test_team_daily_activity_e2e.py›
- Probe /team/daily/activity
✓test_model_group_shares_rpm_bucket_with_alias TestModelGroupAliasRateLimitratelimit/test_model_group_alias_rate_limit_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-alias-rl-alias with the prompt "reply with one word 60f4abc3c0d6"
- Send a /chat/completions request to e2e-alias-rl-alias with the prompt "reply with one word 7f7bc434c078"
- Send a /chat/completions request to e2e-alias-rl-alias with the prompt "reply with one word 3f5b9c791f06"
- Send a /chat/completions request to e2e-alias-rl-target with the prompt "reply with one word cf569d5f76ea"
✓test_model_max_budget_isolates_per_modelbudgets/test_model_max_budget_e2e.py›
- Generate a virtual key with model max budget: claude-haiku-4-5: budget limit: 1e-06 and time period: 30d and gemini-2.5-flash: budget limit: 1000.0 and time period: 30d
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "hi 1847b48a475e"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "hi 72886c734ffc"
- Send a /chat/completions request to gemini-2.5-flash with the prompt "hi 83caa7d11426"
✓test_multi_window_key_resets_each_window_independentlybudgets/test_budget_reset_advances_e2e.py›
- Generate a virtual key with budget limits: budget duration: 30s and max budget: 3e-06, budget duration: 1m and max budget: 1.0
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 11ded95f38a7"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance a8bba6c3c3d7"
- Read the key's settings back from /key/info
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 3f6dc045f7d8"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 2b6885dbc523"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 2ae2adb1aa12"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance d61b8537b051"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance bef9310362eb"
- Read the key's settings back from /key/info
✓test_one_request_lands_the_same_spend_on_every_surface TestSpendSurfaceConsistencyspend_tracking/test_spend_surface_consistency_e2e.py›
- List the deployments from /model/info
- Add a deployment named e2e-spend-surfaces-f566bbd77910 that calls openai/gpt-5.6-luna
- Create a team with team alias: e2e-spend-surfaces-f566bbd77910
- Generate a virtual key with models: e2e-spend-surfaces-f566bbd77910, team id: 6455a1cf-c145-46fe-b562-7cd5c1d89cd2 and key alias: e2e-spend-surfaces-f566bbd77910
- Send a /chat/completions request to e2e-spend-surfaces-f566bbd77910
- Wait for the request's spend log in /spend/logs
- Wait for the key's spend in /key/info to reach the expected minimum
- Wait for the team's spend in /team/info to reach the expected minimum
- Wait for at least 1 of the key's requests in /user/daily/activity/aggregated
- Scrape /metrics/ on every proxy replica
✓test_org_budget_blocks_keys_under_it TestBudgetBlocksPerLevelbudgets/test_budget_enforcement_e2e.py›
- Create the organization e2e-budget-org-61a1d7181b05 with max budget: 3e-06
- Create the team e2e-budget-team-23c5d874647b and wait until /team/info returns it
- Generate a virtual key with team id: e5f813d1-fe50-4aab-8de7-1222d7fefc12
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend ca3bee30c9c5"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 3fd4847ab1e6"
✓test_org_budget_resets_after_window TestBudgetResetPerLevelbudgets/test_budget_reset_e2e.py›
- Create the organization e2e-org-reset-966276d6ff4e with max budget: 3e-06
- Create the team e2e-org-team-7316b872fc61 and wait until /team/info returns it
- Generate a virtual key with team id: 6cd23dc7-9555-49ef-b5ca-5330f12add58
- Read the organization's budget id from /organization/info
- Read the budget from /budget/info
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 6d05a1c299d8"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset c43438a48267"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset e642e7dfe8fa"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset eb596ffb2f9f"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 4ca0a1e8183d"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 2e1b0940f5c7"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 9876028fe219"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 275c46c04bc1"
✓test_personal_key_blocks_over_its_own_budget TestKeyBudgetBlocksAcrossKeyKindsbudgets/test_budget_enforcement_e2e.py›
- Create an internal user with max budget: 100.0
- Generate a virtual key with max budget: 3e-06 and user id: a6ccde87-7583-424b-bc07-7a8001f5a425
- Generate a virtual key with user id: a6ccde87-7583-424b-bc07-7a8001f5a425
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 7896eb13d5f3"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 8794eded8933"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 7a5d8f19fad5"
✓test_personal_key_resets_after_window TestKeyBudgetResetAcrossKeyKindsbudgets/test_budget_reset_e2e.py›
- Create an internal user with max budget: 100.0
- Generate a virtual key with max budget: 3e-06, budget duration: 30s and user id: 3e86b1a7-0ab0-47de-b31f-f980d96bdf9b
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 557ca73f5372"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 5ada2ee5c4f8"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset ec7ec03c0433"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset a92beb8f1477"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 899b76496cf6"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset c3000bcdd53f"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset c90ef3c1d932"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 50bcff69ff31"
✓test_personal_key_user_budget_resets_after_window TestBudgetResetPerLevelbudgets/test_budget_reset_e2e.py›
- Create an internal user with max budget: 3e-06
- Generate a virtual key with user id: 9cf205e7-3d8f-445b-88c3-cb4bc90dd197
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset c3439b8e9f40"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset a46b43009604"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset fd55b7de882e"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 929c361b8093"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 17734f50a950"
✓test_pre_call_rejection_row_attributes_provider_and_model_idspend_tracking/test_spend_tracking_e2e.py›
- Add a deployment named e2e-spend-precall-5c4f279da945 that calls openai/gpt-5.5
- Generate a virtual key with models: e2e-spend-precall-5c4f279da945 and rpm limit: 1
- Send a /chat/completions request to e2e-spend-precall-5c4f279da945 with the prompt "reply with one word 5de2f48eca45"
- Send a /chat/completions request to e2e-spend-precall-5c4f279da945 with the prompt "over the rpm limit 1d678b243140"
- Wait for at least 2 of the key's spend logs in /spend/logs
✓test_priority_tier_bills_priority_rates TestServiceTierPricingspend_tracking/test_service_tier_pricing_e2e.py›
- List the deployments from /model/info
- Generate a virtual key with user id: e2e-test-user
- Add a deployment with custom rates that calls openai/gpt-5.6-luna
- Send a /chat/completions request to tier-priced-8ffef866f940
- Wait for the request's cost breakdown in /spend/logs
✓test_request_tags_round_tripspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash with the prompt "tagged request"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_reset_wait_never_yields_non_budget_errorbudgets/test_budget_reset_advances_e2e.py›
- Generate a virtual key with max budget: 3e-06 and budget duration: 30s
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 777cc9c4e8c9"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance c3bc9c94e9f3"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 2b7f3f481e57"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 658133c88142"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance 45bfe783acb9"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance cf7ea4f60095"
✓test_responses_stream_records_the_served_tier TestServiceTierPricingspend_tracking/test_service_tier_pricing_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment with custom rates that calls openai/gpt-5.5
- Send a streaming /v1/responses request to tier-responses-stream-f935b1034501
- Wait for a matching cost breakdown in the key's /spend/logs
✓test_rpm_limit_blocks_over_limit TestKeyRateLimitsratelimit/test_rate_limit_e2e.py›
- Generate a virtual key with models: claude-haiku-4-5 and rpm limit: 3
- Read the key's settings back from /key/info
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word d849b56b3fd4"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word d92692326245"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word e77567a3671d"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 0db636c3a518"
✓test_rpm_limit_one_blocks_second_call TestRedisBackedRateLimitratelimit/test_redis_backed_ratelimit_e2e.py›
- Add a deployment named e2e-redis-rpm-8899f3db8cc7 that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with models: e2e-redis-rpm-8899f3db8cc7, key alias: e2e-redis-rpm-8c94e2b1f143 and rpm limit: 1
- Read the key's settings back from /key/info
- Send a /chat/completions request to e2e-redis-rpm-8899f3db8cc7 with the prompt "ping 178e3d76d2fd"
- Send a /chat/completions request to e2e-redis-rpm-8899f3db8cc7 with the prompt "pong b61b411f3faf"
✓test_rpm_limit_resets_after_window TestKeyRateLimitsratelimit/test_rate_limit_e2e.py›
- Generate a virtual key with models: claude-haiku-4-5 and rpm limit: 1
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word df44bbac4fa5"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 3c6f77da843b"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 3a3a660cb39a"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 58dc563c6ad6"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 89e8f39b7f54"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 7477ad48d1dc"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 23512030e0ef"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word ea90159ebcce"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 85a87835a3b1"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 3480539e7967"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 32f9a05fe63a"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 3b525721031d"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word a23b443be8c6"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word d171b0d77e0f"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 2d43baf11d27"
✓test_schema_listed_spend_routes_are_responsivespend_tracking/test_spend_routes.py›
- Read the OpenAPI schema from /openapi.json
✓test_short_window_blocks_then_resetsbudgets/test_multi_window_budget_e2e.py›
- Generate a virtual key with models: gpt-5.5 and budget limits: budget duration: 30s and max budget: 1e-09, budget duration: 1m and max budget: 1.0
- Send a /chat/completions request to gpt-5.5 with the prompt "window bdb1a361c8eb"
- Send a /chat/completions request to gpt-5.5 with the prompt "window 714f316e76ac"
- Send a /chat/completions request to gpt-5.5 with the prompt "window 4880e43c5ac5"
- Send a /chat/completions request to gpt-5.5 with the prompt "window feabc6c58f8a"
✓test_soft_budget_does_not_blockbudgets/test_soft_budget_e2e.py›
- Generate a virtual key with max budget: 1000.0 and soft budget: 1e-09
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "hi 6a91adfdf6e7"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "hi 496c1abff469"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "hi f6e2018a6a94"
✓test_spend_calculate_returns_nonzero_costspend_tracking/test_spend_tracking_e2e.py›
- Estimate the cost of sending "estimate the cost of this request" to gemini-2.5-flash with /spend/calculate
✓test_spend_logs_by_key_return_every_row_with_the_alias TestKeyAttributionspend_tracking/test_key_attribution_e2e.py›
- Wait for at least 9 of the key's spend logs in /spend/logs
✓test_spend_logs_endpoint_returns_spendspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash with the prompt "spend logs 0e3ac3545fee"
- GET /spend/logs
✓test_spend_logs_v2_pagination_caps_pages_and_keeps_totalspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash with the prompt "page fodder da7f59597bcc"
- Send a /chat/completions request to gemini-2.5-flash with the prompt "page fodder 801e562dc2fb"
- Wait for at least 2 of the key's spend logs in /spend/logs
- Read page 1 of /spend/logs/v2 at a page size of 1
- Read page 9 of /spend/logs/v2 at a page size of 1
- Read page 1 of /spend/logs/v2 at a page size of 1
✓test_spend_route_responsive[/customer/daily/activity]spend_tracking/test_spend_routes.py›
- Call the management route /customer/daily/activity
✓test_spend_route_responsive[/customer/list]spend_tracking/test_spend_routes.py›
- Call the management route /customer/list
✓test_spend_route_responsive[/end_user/daily/activity]spend_tracking/test_spend_routes.py›
- Call the management route /end_user/daily/activity
✓test_spend_route_responsive[/global/activity]spend_tracking/test_spend_routes.py›
- Call the management route /global/activity
✓test_spend_route_responsive[/global/activity/exceptions]spend_tracking/test_spend_routes.py›
- Call the management route /global/activity/exceptions
✓test_spend_route_responsive[/global/activity/exceptions/deployment]spend_tracking/test_spend_routes.py›
- Call the management route /global/activity/exceptions/deployment
✓test_spend_route_responsive[/global/activity/model]spend_tracking/test_spend_routes.py›
- Call the management route /global/activity/model
✓test_spend_route_responsive[/global/all_end_users]spend_tracking/test_spend_routes.py›
- Call the management route /global/all_end_users
✓test_spend_route_responsive[/global/spend]spend_tracking/test_spend_routes.py›
- Call the management route /global/spend until it answers successfully
✓test_spend_route_responsive[/global/spend/all_tag_names]spend_tracking/test_spend_routes.py›
- Call the management route /global/spend/all_tag_names
✓test_spend_route_responsive[/global/spend/keys]spend_tracking/test_spend_routes.py›
- Call the management route /global/spend/keys until it answers successfully
✓test_spend_route_responsive[/global/spend/logs]spend_tracking/test_spend_routes.py›
- Call the management route /global/spend/logs until it answers successfully
✓test_spend_route_responsive[/global/spend/models]spend_tracking/test_spend_routes.py›
- Call the management route /global/spend/models until it answers successfully
✓test_spend_route_responsive[/global/spend/provider]spend_tracking/test_spend_routes.py›
- Call the management route /global/spend/provider
✓test_spend_route_responsive[/global/spend/report]spend_tracking/test_spend_routes.py›
- Call the management route /global/spend/report
✓test_spend_route_responsive[/global/spend/tags]spend_tracking/test_spend_routes.py›
- Call the management route /global/spend/tags until it answers successfully
✓test_spend_route_responsive[/global/spend/teams]spend_tracking/test_spend_routes.py›
- Call the management route /global/spend/teams
✓test_spend_route_responsive[/key/list]spend_tracking/test_spend_routes.py›
- Call the management route /key/list
✓test_spend_route_responsive[/organization/daily/activity]spend_tracking/test_spend_routes.py›
- Call the management route /organization/daily/activity
✓test_spend_route_responsive[/organization/list]spend_tracking/test_spend_routes.py›
- Call the management route /organization/list
✓test_spend_route_responsive[/spend/keys]spend_tracking/test_spend_routes.py›
- List the deployments from /model/info
- Add a deployment named openai-text-embedding-3-small that calls openai/text-embedding-3-small
- Add a deployment named openai-responses-codex that calls openai/gpt-5.3-codex
- Add a deployment named openai-gpt-4o-mini that calls openai/gpt-4o-mini
- Call the management route /spend/keys
✓test_spend_route_responsive[/spend/logs]spend_tracking/test_spend_routes.py›
- Call the management route /spend/logs
✓test_spend_route_responsive[/spend/logs/session/ui]spend_tracking/test_spend_routes.py›
- Call the management route /spend/logs/session/ui
✓test_spend_route_responsive[/spend/logs/ui]spend_tracking/test_spend_routes.py›
- Call the management route /spend/logs/ui
✓test_spend_route_responsive[/spend/logs/v2]spend_tracking/test_spend_routes.py›
- Call the management route /spend/logs/v2
✓test_spend_route_responsive[/spend/tags]spend_tracking/test_spend_routes.py›
- Call the management route /spend/tags
✓test_spend_route_responsive[/spend/users]spend_tracking/test_spend_routes.py›
- Call the management route /spend/users
✓test_spend_route_responsive[/tag/daily/activity]spend_tracking/test_spend_routes.py›
- Call the management route /tag/daily/activity
✓test_spend_route_responsive[/team/daily/activity]spend_tracking/test_spend_routes.py›
- Call the management route /team/daily/activity
✓test_spend_route_responsive[/team/list]spend_tracking/test_spend_routes.py›
- Call the management route /team/list
✓test_spend_route_responsive[/user/daily/activity]spend_tracking/test_spend_routes.py›
- Call the management route /user/daily/activity
✓test_spend_route_responsive[/user/daily/activity/aggregated]spend_tracking/test_spend_routes.py›
- Call the management route /user/daily/activity/aggregated
✓test_spend_route_responsive[/user/list]spend_tracking/test_spend_routes.py›
- Call the management route /user/list
✓test_streamed_call_records_and_bills_the_served_tier TestServiceTierPricingspend_tracking/test_service_tier_pricing_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment with custom rates that calls openai/gpt-5.6-luna
- Send a streaming /chat/completions request to tier-priced-stream-c4006ccb3959
- Wait for the request's cost breakdown in /spend/logs
✓test_streaming_cache_read_billed_at_cache_read_rate TestCacheCostAccountingspend_tracking/test_cache_cost_accounting_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment with custom rates that calls openai/gpt-5.5
- Send a /chat/completions request to stream-cache-priced-7cb7f495b44b
- Send a streaming /chat/completions request to stream-cache-priced-7cb7f495b44b
- Wait for the request's cost breakdown in /spend/logs
✓test_streaming_chat_completion_tracks_spendspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /chat/completions request to gemini-2.5-flash with the prompt "count to three f41ef52ca642"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_streaming_messages_via_responses_bridge_tracks_spendspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a streaming /v1/messages request to openai-responses-codex with the prompt "reply with exactly one word b32599c6c276"
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_tag_budget_blocks_tagged_requestsbudgets/test_tag_budget_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Create the tag e2e-budget-tag-c5adb99f2541 with max budget: 1e-06
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "hi dc0b37f97a13"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "hi 4fd4b7b09f32"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "hi 15e54a6b5176"
✓test_tag_spend_matches_sum_of_tagged_logsspend_tracking/test_spend_tracking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash with the prompt "hi 152a1b6280c7"
- Send a /chat/completions request to gemini-2.5-flash with the prompt "hi 56983fd613ba"
- Wait for at least 2 of the key's spend logs in /spend/logs
- Wait for the tag e2e-tagspend-463aab428045 to reach the expected spend in /spend/tags
✓test_team_budget_blocks_every_team_key TestBudgetBlocksPerLevelbudgets/test_budget_enforcement_e2e.py›
- Create the team e2e-budget-team-7df5d48c25ad and wait until /team/info returns it
- Generate a virtual key with team id: 103a4f1c-2c2a-4150-ae4c-e61329ddc377
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 59cef391b07a"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend dffa4acffff2"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend d4b000cebb2e"
✓test_team_budget_resets_after_window TestBudgetResetPerLevelbudgets/test_budget_reset_e2e.py›
- Create the team e2e-team-reset-4e15518192bf and wait until /team/info returns it
- Generate a virtual key with team id: cd50c797-d03b-4ac9-b8aa-f6589873d551
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 3ec2b5c46474"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 8eed9a88a2eb"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 581c5f01f3fc"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset a7bf46274db9"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 7813a301cb0e"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 019d52f81221"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 8b71eb43d668"
✓test_team_key_blocks_over_its_own_budget TestKeyBudgetBlocksAcrossKeyKindsbudgets/test_budget_enforcement_e2e.py›
- Create the team e2e-key-cap-team-bfbc73d72cbb and wait until /team/info returns it
- Generate a virtual key with max budget: 3e-06 and team id: a7a2428d-720b-4388-a3bc-36e0325aac02
- Generate a virtual key with team id: a7a2428d-720b-4388-a3bc-36e0325aac02
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 33058abe6371"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 039fa21c7d06"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend b757883c7fa4"
✓test_team_key_resets_after_window TestKeyBudgetResetAcrossKeyKindsbudgets/test_budget_reset_e2e.py›
- Create the team e2e-key-reset-team-f6a746c16abe and wait until /team/info returns it
- Generate a virtual key with max budget: 3e-06, budget duration: 30s and team id: 19aba9b8-f25c-4e94-9356-de8c96c963cb
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 74c29bd8ca6c"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 2b7ba13b93aa"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 99bd0c9dda33"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset cc346b4a6ad2"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset f62d81fbfca3"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 716d2f372ac2"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 7b4f9bd85ac8"
✓test_team_long_window_blocks_after_short_window_resetsbudgets/test_team_multi_window_budget_e2e.py›
- Create the team e2e-team-long-window-ec56bc9137bf and wait until /team/info returns it
- Generate a virtual key with models: claude-haiku-4-5 and team id: ba30ab0e-3195-4cee-af61-19c66993607f
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "team-window 9948a97173ed"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "team-window ee0db94aec67"
- Read the team's budget windows from /team/info
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "team-window 03baa480940f"
✓test_team_member_budget_reset_at_advancesbudgets/test_budget_reset_advances_e2e.py›
- Create the team e2e-member-advance-d4ee303fbd90 and wait until /team/info returns it
- Create an internal user with max budget: 100.0
- Add the internal user to the team
- Update the team member's budget with /team/member_update
- Read the team member's budget reset time from /team/info
- Generate a virtual key with user id: ca15666d-e828-48f9-8a92-4cb248f662e7 and team id: 4baa40e7-1323-45a4-987c-68de1323938f
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "advance cd47c66f278a"
- Read the team member's budget reset time from /team/info
✓test_team_member_budget_reset_keeps_advancingbudgets/test_team_member_budget_reset_e2e.py›
- Create the team e2e-member-reset-cde3f4d12c70 and wait until /team/info returns it
- Create an internal user with max budget: 100.0
- Add the internal user to the team
- Update the team member's budget with /team/member_update
- Read the team member's budget reset time from /team/info
- Generate a virtual key with user id: aeae3ca5-d061-4613-91d8-e1a523c736fc and team id: ba83def0-7339-49eb-a7d1-cf023d5ac926
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset c293a9220bf6"
- Read the team member's budget reset time from /team/info
✓test_team_member_key_blocks_over_its_own_budget TestKeyBudgetBlocksAcrossKeyKindsbudgets/test_budget_enforcement_e2e.py›
- Create the team e2e-key-cap-team-eb3c0f9fb7c8 and wait until /team/info returns it
- Create an internal user with max budget: 100.0
- Add the internal user to the team
- Generate a virtual key with max budget: 3e-06, user id: f461be50-d27e-4fd9-98e5-946c4d8e42f7 and team id: ad74a9d3-36ca-4a30-bf97-7976b93b9ec3
- Generate a virtual key with user id: f461be50-d27e-4fd9-98e5-946c4d8e42f7 and team id: ad74a9d3-36ca-4a30-bf97-7976b93b9ec3
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 449e8aa4fad0"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 3f70323ea72a"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend bd420cfdfc66"
✓test_team_member_key_resets_after_window TestKeyBudgetResetAcrossKeyKindsbudgets/test_budget_reset_e2e.py›
- Create the team e2e-key-reset-team-de3df90ea03d and wait until /team/info returns it
- Create an internal user with max budget: 100.0
- Add the internal user to the team
- Generate a virtual key with max budget: 3e-06, budget duration: 30s, user id: 5a53e9c7-9855-4aee-9c93-7c936c9fc723 and team id: 6986b41b-b09b-4959-b4c1-49db461dc2d3
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset f49834af6e00"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 5cfd2c4487d6"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 5d8cb93f7325"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset f66363c6bda7"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset fd3236fb8243"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset efe170e810f6"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset ef26844228ec"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reset 04c0ffbd6887"
✓test_team_short_window_blocks_then_resetsbudgets/test_team_multi_window_budget_e2e.py›
- Create the team e2e-team-window-d6950c437225 and wait until /team/info returns it
- Generate a virtual key with models: claude-haiku-4-5 and team id: efedbab8-e794-411c-a332-b55d92a8388c
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "team-window 016b5a1ab639"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "team-window 72fe07ecc1ac"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "team-window 5b14049df599"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "team-window 081fc9643c15"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "team-window 2e01a4e62582"
✓test_terminal_batch_cost_row_joins_the_retrieving_key TestKeyAttributionspend_tracking/test_key_attribution_e2e.py›
- Retrieve the openai batch from /v1/batches
- Wait for the request's spend log in /spend/logs
✓test_the_budget_read_reports_the_spend_drawn_against_the_pool TestModelAccessGroupBudgetbudgets/test_model_access_group_budget_e2e.py›
- Read the budget and spend of the model access group e2e-mag-budget-0a1b3d48afce
✓test_the_key_that_drained_the_pool_stays_blocked TestModelAccessGroupBudgetbudgets/test_model_access_group_budget_e2e.py›
- Generate a virtual key with models: e2e-mag-budget-0a1b3d48afce
- Add a deployment named e2e-mag-budgeted-0a1b3d48afce that calls openai/gpt-5.4-nano
- Add a deployment named e2e-mag-unbudgeted-0a1b3d48afce that calls openai/gpt-5.4-nano
- Set a shared budget on the model access group e2e-mag-budget-0a1b3d48afce
- Send a /chat/completions request to e2e-mag-budgeted-0a1b3d48afce with the prompt "hi cbcc8b7e3c79"
- Send a /chat/completions request to e2e-mag-budgeted-0a1b3d48afce with the prompt "hi 77040c00e8ed"
- Send a /chat/completions request to e2e-mag-budgeted-0a1b3d48afce with the prompt "hi f59978523621"
✓test_tpm_limit_blocks_over_limit TestKeyRateLimitsratelimit/test_rate_limit_e2e.py›
- Generate a virtual key with models: claude-haiku-4-5 and tpm limit: 60
- Read the key's settings back from /key/info
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 16f894b6e72d"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 8ab1d51d6270"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "reply with one word 235a4580ed67"
✓test_user_budget_blocks_a_second_key TestUserBudgetAcrossKeysbudgets/test_user_budget_across_keys_e2e.py›
- Create an internal user with max budget: 3e-06
- Generate a virtual key with user id: 21d4a092-12b3-49f3-816c-4b2c54746604
- Send a /chat/completions request to gpt-5.5 with the prompt "across 0f6c32497961"
- Send a /chat/completions request to gpt-5.5 with the prompt "across 076ffa3fce32"
- Send a /chat/completions request to gpt-5.5 with the prompt "across e9e8af33f409"
- Read the internal user's spend and budget from /user/info
✓test_user_budget_enforced_across_their_personal_keys TestBudgetBlocksPerLevelbudgets/test_budget_enforcement_e2e.py›
- Create an internal user with max budget: 3e-06
- Generate a virtual key with user id: 3250825f-aceb-4382-bbff-c0a9460fe8c9
- Create the team e2e-budget-team-2ac7b12502d3 and wait until /team/info returns it
- Add the internal user to the team
- Generate a virtual key with user id: 3250825f-aceb-4382-bbff-c0a9460fe8c9 and team id: 1d8030c8-04c2-419e-80b4-181805265dc1
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend a9a0548357b0"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 6b32abecd60c"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 4c6613f94efe"
- Send a /chat/completions request to claude-haiku-4-5 with the prompt "spend 1c9f368ac474"
✓test_user_daily_activity_reports_alias_and_email TestKeyAttributionspend_tracking/test_key_attribution_e2e.py›
- Wait for at least 9 of the key's requests in /user/daily/activity
✓test_valid_date_range_returns_results_and_metadata TestTeamDailyActivityspend_tracking/test_team_daily_activity_e2e.py›
- Add a priced deployment, then create two teams with one key each and send 7 /chat/completions requests per key, 6 of them at once
- Send a /chat/completions request to e2e-reconciliation-5006d7259798
- Check that the /spend/logs rows of team 5d4340c1-5f9a-4db3-a156-5db280607621 match each response's tokens and cost
- Check that the /spend/logs rows of team 35842378-5090-450c-bc81-cbaf07a6b235 match each response's tokens and cost
- Probe /team/daily/activity
−test_end_user_model_max_budget_enforces_per_model_rpmbudgets/test_model_max_budget_e2e.py›
No steps recorded
stage red: product gap, end-user model_max_budget rpm_limit is stored but never enforced
View test on GitHub ↗−test_strict_mode_blocks_saturated_priority_but_serves_the_other TestDynamicRateLimitPriorityratelimit/test_dynamic_rate_limit_priority_e2e.py›
No steps recorded
LIT-5118: the stage proxy does not run the dynamic_rate_limiter_v3 callbacks + priority_reservation config this module's docstring requires (zero limiter log lines on any pod during the 2026-08-02 run), so strict enforcement can never engage there
View test on GitHub ↗✓test_access_group_info_reports_membership TestModelAccessGroupRoutestest_model_tag_accessgroup_e2e.py›
- Add a deployment named e2e-mgmt-agmodel-8342e92bee6b that calls openai/gpt-5.5
- POST /access_group/new
- GET /access_group/e2e-mgmt-ag-681c9d34108f/info
✓test_actor_subject_and_database_role[internal_user_viewer] TestJwtManagementtest_jwt_management_e2e.py›
- Create an actor in the internal_user_viewer role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the internal_user_viewer role
- Read the user back from /user/info
- GET /user/info
✓test_actor_subject_and_database_role[internal_user] TestJwtManagementtest_jwt_management_e2e.py›
- Create an actor in the internal_user role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the internal_user role
- Read the user back from /user/info
- GET /user/info
✓test_actor_subject_and_database_role[organization_admin] TestJwtManagementtest_jwt_management_e2e.py›
- Create an organization, a team in it and a matching identity provider group
- Create an actor in the organization_admin role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the organization_admin role
- Read the user back from /user/info
- GET /user/info
- Read the team back from /team/info
- Read the organization back from /organization/info
✓test_actor_subject_and_database_role[proxy_admin_viewer] TestJwtManagementtest_jwt_management_e2e.py›
- Create an actor in the proxy_admin_viewer role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the proxy_admin_viewer role
- Read the user back from /user/info
- GET /user/info
✓test_actor_subject_and_database_role[proxy_admin] TestJwtManagementtest_jwt_management_e2e.py›
- Create an actor in the proxy_admin role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the proxy_admin role
- Read the user back from /user/info
- GET /user/info
✓test_actor_subject_and_database_role[team_admin] TestJwtManagementtest_jwt_management_e2e.py›
- Create an organization, a team in it and a matching identity provider group
- Create an actor in the team_admin role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the team_admin role
- Read the user back from /user/info
- GET /user/info
- Read the team back from /team/info
- Read the organization back from /organization/info
✓test_actor_subject_and_database_role[team_member] TestJwtManagementtest_jwt_management_e2e.py›
- Create an organization, a team in it and a matching identity provider group
- Create an actor in the team_member role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the team_member role
- Read the user back from /user/info
- GET /user/info
- Read the team back from /team/info
- Read the organization back from /organization/info
✓test_actor_subject_and_database_role[unrelated_user] TestJwtManagementtest_jwt_management_e2e.py›
- Create an actor in the unrelated_user role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the unrelated_user role
- Read the user back from /user/info
- GET /user/info
✓test_admin_creates_reads_updates_clears_and_deletes_a_key[direct_jwt] TestJwtManagementtest_jwt_management_e2e.py›
- Create an organization, a team in it and a matching identity provider group
- Create an actor in the proxy_admin role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the proxy_admin role
- Read the user back from /user/info
- Generate a virtual key with models: gpt-5.5, team id: ed44f2d4-4386-4458-b269-51e505866fac and key alias: e2e-jwt-key-5ede78cf477a
- Read the key's settings back from /key/info
- Update the virtual key's settings with /key/update
- Read the key's settings back from /key/info
- Update the virtual key's settings with /key/update
- Read the key's settings back from /key/info
- List the keys with the alias e2e-jwt-key-5ede78cf477a-updated from /key/list
- Delete the virtual key
- List the keys with the alias e2e-jwt-key-5ede78cf477a-updated from /key/list
✓test_admin_creates_reads_updates_clears_and_deletes_a_key[virtual_key] TestJwtManagementtest_jwt_management_e2e.py›
- Create an organization, a team in it and a matching identity provider group
- Create an actor in the proxy_admin role, with its identity provider user, internal user and any tenant memberships
- Generate a virtual key as the proxy admin
- Read the user back from /user/info
- Generate a virtual key with models: gpt-5.5, team id: 0b960786-369f-4377-aec0-0271253f540c and key alias: e2e-jwt-key-ce2d4f01c203
- Read the key's settings back from /key/info
- Update the virtual key's settings with /key/update
- Read the key's settings back from /key/info
- Update the virtual key's settings with /key/update
- Read the key's settings back from /key/info
- List the keys with the alias e2e-jwt-key-ce2d4f01c203-updated from /key/list
- Delete the virtual key
- List the keys with the alias e2e-jwt-key-ce2d4f01c203-updated from /key/list
✓test_admin_viewer_reads_but_cannot_update TestJwtManagementtest_jwt_management_e2e.py›
- Create an actor in the proxy_admin_viewer role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the proxy_admin_viewer role
- Generate a virtual key as the proxy admin
- Update the virtual key's settings with /key/update
- Read the key's settings back from /key/info
- Update the virtual key's settings with /key/update
- Read the key's settings back from /key/info
✓test_approve_activates_submission_and_persists TestMcpServerSubmissiontest_config_misc_endpoints_e2e.py›
- Create a team with team alias: e2e-mcp-team-e7add0ab9af2
- Generate a virtual key with team id: 313143ba-2a2d-4dae-924d-0e5779b67f42
- POST /v1/mcp/server/register
- PUT /v1/mcp/server/ba6d00db-e844-4432-8269-32d4d374d353/approve
- GET /v1/mcp/server/ba6d00db-e844-4432-8269-32d4d374d353
✓test_bedrock_mantle_responses_connection_succeeds TestModelTestConnectiontest_model_test_connection_e2e.py›
- Run Test Connection on bedrock_mantle/openai.gpt-5.6-luna in responses mode with /health/test_connection
✓test_block_persists_to_key_info TestKeyRoutestest_management_e2e.py›
- Generate a virtual key with models: gemini-2.5-flash
- Read the key's settings back from /key/info
- Block the virtual key
- Read the key's settings back from /key/info
✓test_block_then_unblock_persists_to_model_info TestModelRoutestest_model_tag_accessgroup_e2e.py›
- Add a deployment named e2e-mgmt-model-block-94a40dbc449a that calls openai/gpt-5.5
- GET /model/info
- POST /model/block
- GET /model/info
- POST /model/unblock
- GET /model/info
✓test_block_then_unblock_persists_to_team_info TestTeamManagementRoutestest_team_management_e2e.py›
- Create a team with team alias: e2e-team-block-3ebefea2583c and models: gemini-2.5-flash
- GET /team/info
- POST /team/block
- GET /team/info
- POST /team/unblock
- GET /team/info
✓test_bulk_update_applies_max_budget_to_target_key TestKeyManagementRoutestest_key_management_e2e.py›
- Generate a virtual key with models: gpt-5.5 and max budget: 5.0
- Read the key's settings back from /key/info
- POST /key/bulk_update
- Read the key's settings back from /key/info
✓test_callbacks_list_reports_active_logging_callbacks TestInventoryRoutestest_config_misc_endpoints_e2e.py›
- GET /callbacks/list
✓test_clearing_the_description_with_null_reads_back_null TestMcpServerLifecycletest_mcp_lifecycle_e2e.py›
- Create an MCP server named e2e_mcp_lifecycle_5b20ef60d91e
- Update the MCP server's settings with PUT /v1/mcp/server
- Read /v1/mcp/server/119e189f-f194-482a-b41e-3bcfa4348dc0 on every proxy replica until it settles
✓test_clearing_the_description_with_null_reads_back_null TestMcpToolsetLifecycletest_mcp_lifecycle_e2e.py›
- Create an MCP server named e2e_mcp_lifecycle_2f880bac9814
- Create an MCP toolset with the tools server id: f4558986-00c7-489c-ba2d-b1fd5d733acc and tool name: search_datadog_logs, server id: f4558986-00c7-489c-ba2d-b1fd5d733acc and tool name: get_datadog_metr
- Update an MCP toolset with toolset id: ff1418e1-dd88-4d7e-8449-7aaba0bce46c
- Read /v1/mcp/toolset/ff1418e1-dd88-4d7e-8449-7aaba0bce46c on every proxy replica until it settles
✓test_config_update_persists_router_setting_to_get TestRouterSettingstest_config_misc_endpoints_e2e.py›
- GET /router/settings
- POST /config/update
- GET /router/settings
- POST /config/update
- GET /router/settings
✓test_create_echoes_every_field_written TestKeyLifecycletest_key_lifecycle_e2e.py›
- Add a deployment named e2e-key-lifecycle-9d02cbc562be that calls gpt-4o-mini
- Create a team with team alias: e2e-key-lifecycle-team-17df92149710
- Generate a virtual key with models: e2e-key-lifecycle-9d02cbc562be, max budget: 25.0, budget duration: 30d, team id: 3c145414-afe0-48ee-87aa-6fdcf6de1494, key alias: e2e-key-lifecycle-17df92149710, tp
✓test_create_persists_and_is_read_back TestFallbackManagementtest_config_misc_endpoints_e2e.py›
- Add a deployment named e2e-fallback-primary-9632754bbc2b that calls openai/gpt-5.5
- Add a deployment named e2e-fallback-secondary-577bddb5627f that calls openai/gpt-5.5
- POST /fallback
- GET /fallback/e2e-fallback-primary-9632754bbc2b
✓test_create_persists_both_tools_under_the_exact_names_written TestMcpToolsetLifecycletest_mcp_lifecycle_e2e.py›
- Create an MCP server named e2e_mcp_lifecycle_4b47bf3aba6b
- Create an MCP toolset with the tools server id: d890908d-4f2b-421d-a6d8-816036b27d29 and tool name: search_datadog_logs, server id: d890908d-4f2b-421d-a6d8-816036b27d29 and tool name: get_datadog_metr
- Read /v1/mcp/toolset/d5a6e69c-c761-4493-b695-ac76c3cea85a on every proxy replica until it settles
- Read /v1/mcp/toolset on every proxy replica until it settles
✓test_create_persists_every_field_on_every_replica TestMcpServerLifecycletest_mcp_lifecycle_e2e.py›
- Create an MCP server named e2e_mcp_lifecycle_a1396a08f18e
- Read /v1/mcp/server/a2020bd6-3089-4087-9029-fd12c3d68a3d on every proxy replica until it settles
✓test_created_budget_appears_in_budget_list TestBudgetManagementtest_budget_customer_user_org_e2e.py›
- POST /budget/new
- GET /budget/list
✓test_created_key_appears_in_key_list_inventory TestKeyRoutestest_management_e2e.py›
- Count the keys with the alias e2e-mgmt-keylist-022e0d1e065e in /key/list
- Generate a virtual key with key alias: e2e-mgmt-keylist-022e0d1e065e
- Count the keys with the alias e2e-mgmt-keylist-022e0d1e065e in /key/list
✓test_created_team_appears_in_team_list TestTeamRoutestest_management_e2e.py›
- Create a team with team alias: e2e-mgmt-team-648cb8f06fe0 and models: gemini-2.5-flash
- List the teams from /team/list
✓test_created_users_appear_in_user_list TestUserRoutestest_management_e2e.py›
- Create an internal user with user email: e2e-mgmt-574157c24c63@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bb8c0e865c22@example.com and user role: internal_user
- List the matching users from /user/list
✓test_creating_a_key_from_the_dashboard_persists_and_works TestDashboardKeyRoutestest_management_e2e.py›
- Sign in to the Admin UI with /v2/login
- Read the key's settings back from /key/info
- Generate a virtual key with models: gemini-2.5-flash, key alias: e2e-mgmt-uicreate-d1340575ca04 and tpm limit: 100
- Read the key's settings back from /key/info
- List the keys with the alias e2e-mgmt-uicreate-d1340575ca04 from /key/list
- Send a /chat/completions request to gemini-2.5-flash
- Send a /chat/completions request to gpt-5.5
✓test_credential_migration_check_reports_residual_scan TestInventoryRoutestest_config_misc_endpoints_e2e.py›
- GET /credentials/migrate-encryption/check
✓test_customer_create_persists_to_info TestCustomertest_management_e2e.py›
- Create the end user e2e-customer-9352437e9fc6
- Read the end user e2e-customer-9352437e9fc6 back from /customer/info
✓test_delete_forbidden_for_non_admin_key TestKeyManagementRoutestest_key_management_e2e.py›
- Generate a virtual key with models: gpt-5.5
- Send a request to /key/delete
- Read the key's settings back from /key/info
✓test_delete_persists_and_revokes_team_bound_key TestTeamRoutestest_management_e2e.py›
- Create a team with team alias: e2e-mgmt-team-4572c0955ae9 and models: gpt-5.5
- Generate a virtual key with team id: 0479fe1b-f5cd-4277-bb31-24bd0aafc076
- Send a /chat/completions request to gpt-5.5
- Delete the team
- Check whether /team/info finds the team
- Send a /chat/completions request to gpt-5.5
✓test_delete_removes_from_model_info_catalog TestModelRoutestest_management_e2e.py›
- Add a deployment named e2e-mgmt-model-2c13c65a4ab1 that calls openai/gpt-5.5
- List the deployments from /model/info
- Delete the deployment
- List the deployments from /model/info
✓test_delete_removes_from_organization_info TestOrganizationRoutestest_management_e2e.py›
- Create an organization with organization alias: e2e-mgmt-org-cb84473214db
- Check whether /organization/info finds the organization
- Delete the organization
- Check whether /organization/info finds the organization
✓test_delete_removes_the_customer TestCustomerManagementtest_budget_customer_user_org_e2e.py›
- POST /customer/new
- GET /customer/info
- POST /customer/delete
- Probe /customer/info
✓test_delete_removes_the_server_from_every_replica TestMcpServerLifecycletest_mcp_lifecycle_e2e.py›
- Create an MCP server named e2e_mcp_lifecycle_91d3a7149b1b
- Delete the MCP server
- Check that /v1/mcp/server/53b43344-a6a1-4f18-8eed-a0e150a391c8 returns 404 on every proxy replica
- Read /v1/mcp/server on every proxy replica until it settles
✓test_delete_removes_the_toolset_from_every_replica TestMcpToolsetLifecycletest_mcp_lifecycle_e2e.py›
- Create an MCP server named e2e_mcp_lifecycle_82be05935e94
- Create an MCP toolset with the tools server id: 76417960-d10e-4cf7-9e2e-41ba2376a955 and tool name: search_datadog_logs, server id: 76417960-d10e-4cf7-9e2e-41ba2376a955 and tool name: get_datadog_metr
- Delete the MCP toolset
- Check that /v1/mcp/toolset/e4205108-5e3d-4f05-9018-29ffaca314f9 returns 404 on every proxy replica
- Read /v1/mcp/toolset on every proxy replica until it settles
✓test_delete_removes_the_user_from_inventory TestUserRoutestest_management_e2e.py›
- Create an internal user with user email: e2e-mgmt-bf4146dd0944@example.com and user role: internal_user
- Count the matching users in /user/list
- Delete the internal user
- Count the matching users in /user/list
✓test_delete_revokes_info_and_chat_on_every_replica TestKeyLifecycletest_key_lifecycle_e2e.py›
- Create a team with team alias: e2e-key-lifecycle-team-2c7bed3f5c3f
- Generate a virtual key with models: e2e-key-lifecycle-9d02cbc562be, max budget: 25.0, budget duration: 30d, team id: f69d6d44-5d53-4888-a6c7-174dc30c9369, key alias: e2e-key-lifecycle-2c7bed3f5c3f, tp
- Send a request to /chat/completions
- Delete the virtual key
- Read /key/info on every proxy replica until they all agree
- Send a request to /chat/completions
✓test_delete_revokes_the_key_on_chat TestKeyRoutestest_management_e2e.py›
- Generate a virtual key with models: gemini-2.5-flash
- Send a /chat/completions request to gemini-2.5-flash
- Delete the virtual key
- Send a /chat/completions request to gemini-2.5-flash
✓test_editing_a_key_from_the_dashboard_persists_and_is_enforced TestDashboardKeyRoutestest_management_e2e.py›
- Generate a virtual key with models: gemini-2.5-flash, key alias: e2e-mgmt-uiedit-fab2a53382e2, tpm limit: 100 and rpm limit: 200
- Send a /chat/completions request to gemini-2.5-flash
- Send a /chat/completions request to gpt-5.5
- Sign in to the Admin UI with /v2/login
- Update the virtual key's settings with /key/update
- Read the key's settings back from /key/info
- Send a /chat/completions request to gpt-5.5
- Send a /chat/completions request to gemini-2.5-flash
✓test_end_user_new_persists_to_end_user_info TestCustomerManagementtest_budget_customer_user_org_e2e.py›
- POST /end_user/new
- GET /end_user/info
✓test_estimate_computes_cost_from_token_counts TestCostEstimatetest_config_misc_endpoints_e2e.py›
- POST /cost/estimate
✓test_explicit_null_clears_the_budget_and_its_reset_time TestKeyLifecycletest_key_lifecycle_e2e.py›
- Create a team with team alias: e2e-key-lifecycle-team-d29420fefdd5
- Generate a virtual key with models: e2e-key-lifecycle-9d02cbc562be, max budget: 25.0, budget duration: 30d, team id: 33e8bcf8-f063-4c43-91b9-151ae19ef4e4, key alias: e2e-key-lifecycle-d29420fefdd5, tp
- Read /key/info on every proxy replica until they all agree
- Update the virtual key's settings with /key/update
- Read /key/info on every proxy replica until they all agree
✓test_gdpr_check_derives_verdict_from_the_request TestComplianceRoutestest_config_misc_endpoints_e2e.py›
- POST /compliance/gdpr
✓test_generate_forbidden_for_non_admin_key TestKeyManagementRoutestest_key_management_e2e.py›
- Generate a virtual key with models: gpt-5.5
- Send a request to /key/generate
✓test_generate_persists_to_key_info_and_scopes_chat TestKeyRoutestest_management_e2e.py›
- Generate a virtual key with models: gemini-2.5-flash, key alias: e2e-mgmt-key-73594514bfb6, tpm limit: 424242 and rpm limit: 424243
- Read the key's settings back from /key/info
- Send a /chat/completions request to gemini-2.5-flash
- Send a /chat/completions request to gpt-5.5
✓test_health_reports_the_calling_key_healthy TestKeyManagementRoutestest_key_management_e2e.py›
- Generate a virtual key with models: gpt-5.5
- POST /key/health
✓test_info_reflects_the_fields_the_key_was_created_with TestKeyManagementRoutestest_key_management_e2e.py›
- Generate a virtual key with models: gpt-5.5, gemini-2.5-flash, key alias: e2e-mgmt-keyinfo-2d71246a70e5, tpm limit: 131313 and rpm limit: 141414
- Read the key's settings back from /key/info
✓test_info_returns_created_team_fields TestTeamManagementRoutestest_team_management_e2e.py›
- Create a team with team alias: e2e-team-info-a235de04d5ed and models: gemini-2.5-flash
- GET /team/info
✓test_is_null_finds_the_budget_left_uncapped TestBudgetListV1test_budget_customer_user_org_e2e.py›
- POST /budget/new
- GET /management/v1/budgets
✓test_is_refused_for_a_non_admin_key TestBudgetListV1test_budget_customer_user_org_e2e.py›
- Generate a virtual key with default settings
- GET /management/v1/budgets
✓test_key_delete_by_alias_writes_audit_row TestKeyDeletionAuditLogtest_management_e2e.py›
- Generate a virtual key with key alias: e2e-audit-a528479245d9
- Delete the virtual key with the alias e2e-audit-a528479245d9
- Read the key's settings back from /key/info
- Read the key's deletion entries from the /audit log
✓test_key_delete_by_key_writes_audit_row TestKeyDeletionAuditLogtest_management_e2e.py›
- Generate a virtual key with key alias: e2e-audit-44a0d993f78a
- Delete the virtual key
- Read the key's settings back from /key/info
- Read the key's deletion entries from the /audit log
✓test_key_serves_its_model_and_is_denied_others TestKeyLifecycletest_key_lifecycle_e2e.py›
- Create a team with team alias: e2e-key-lifecycle-team-c9fc1db4f221
- Generate a virtual key with models: e2e-key-lifecycle-9d02cbc562be, max budget: 25.0, budget duration: 30d, team id: f8101425-5f2b-4439-95c1-00f4141b79af, key alias: e2e-key-lifecycle-c9fc1db4f221, tp
- Send a request to /chat/completions
- Send a /chat/completions request to gpt-5.5
✓test_llm_only_key_forbidden_from_management_writes TestManagementRoutePermissionstest_management_e2e.py›
- Generate a virtual key limited to the LLM API routes
- Try to generate a virtual key with key alias: e2e-mgmt-forbidden-key-09dbee923f2c, calling with a virtual key
- Try to create a team with team alias: e2e-mgmt-forbidden-team-09dbee923f2c and team id: e2e-mgmt-forbidden-team-09dbee923f2c, calling with a virtual key
- Try to create an internal user with user email: e2e-mgmt-forbidden-user-09dbee923f2c@example.com, user role: internal_user and user id: e2e-mgmt-forbidden-user-09dbee923f2c, calling with a virtual key
- Count the keys with the alias e2e-mgmt-forbidden-key-09dbee923f2c in /key/list
- Check whether /team/info finds the team
- Count the matching users in /user/list
✓test_member_add_and_delete_persist_to_team_info TestTeamRoutestest_management_e2e.py›
- Create an internal user with user email: e2e-mgmt-c37075aa7ce9@example.com and user role: internal_user
- Create a team with team alias: e2e-mgmt-team-17792ede5ee6 and models: gemini-2.5-flash
- Add a user to the team with /team/member_add
- Read the team back from /team/info
- Remove a user from the team with /team/member_delete
- Read the team back from /team/info
✓test_member_add_forbidden_to_plain_member TestTeamManagementRoutestest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-fb-e832bb40d219@example.com and user role: internal_user
- Create an internal user with user email: e2e-team-fb-4d8d3015d267@example.com and user role: internal_user
- Create a team with team alias: e2e-team-fb-4b41de3ef0d8 and models: gemini-2.5-flash
- Add a user to the team with /team/member_add
- Generate a virtual key with user id: 9d8dbc03-f41b-48ee-b1c0-12ee81c0cd99 and team id: bc9d6a56-6b93-40da-9f32-2996a909a3a1
- Send a request to /team/member_add
✓test_member_add_records_membership TestOrganizationMembershiptest_budget_customer_user_org_e2e.py›
- Create an organization with organization alias: e2e-mgmt-org-45d9a609ea8d
- Create an internal user with user email: e2e-mgmt-155b0e8a1eac@example.com and user role: internal_user
- POST /organization/member_add
- GET /organization/info
✓test_member_cannot_write_and_another_team_cannot_read_the_key TestJwtManagementtest_jwt_management_e2e.py›
- Create the Keycloak group e2e-jwt-team-51cff6b1de37 and the user e2e-jwt-user-51cff6b1de37 in it
- POST /user/new
- Create a team with team alias: e2e-jwt-51cff6b1de37 and team id: e2e-jwt-team-51cff6b1de37
- Get a Keycloak access token for e2e-jwt-user-51cff6b1de37 from the client litellm-e2e-admin
- Get a Keycloak access token for e2e-jwt-user-51cff6b1de37 from the client litellm-e2e-tests
- Generate a virtual key with team id: e2e-jwt-team-51cff6b1de37 and key alias: e2e-jwt-owned-dfe8741647a5
- Add a user to the team with /team/member_add
- Read the key's settings back from /key/info
- Update the virtual key's settings with /key/update
- Read the key's settings back from /key/info
- Create the Keycloak group e2e-jwt-team-2a711b1be4bb and the user e2e-jwt-user-2a711b1be4bb in it
- Create an internal user with user email: e2e-jwt-user-2a711b1be4bb@example.com, user role: internal_user and user id: 80abe067-d81c-4778-beba-ee9d9076e870
- Create a team with team alias: 2a711b1be4bb and team id: e2e-jwt-team-2a711b1be4bb
- Add a user to the team with /team/member_add
- Get a Keycloak access token for e2e-jwt-user-2a711b1be4bb from the client litellm-e2e-tests
- Read the key's settings back from /key/info
✓test_member_delete_forbidden_to_plain_member TestTeamManagementRoutestest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-fb-e278f7d847d5@example.com and user role: internal_user
- Create an internal user with user email: e2e-team-fb-f7337e79fdd8@example.com and user role: internal_user
- Create a team with team alias: e2e-team-fb-7d643dc431d6 and models: gemini-2.5-flash
- Add a user to the team with /team/member_add
- Generate a virtual key with user id: 780b4b82-3384-4662-b9b9-8f237bb476c6 and team id: 102f60ea-d784-4a81-940e-3fe2ba1450d0
- Send a request to /team/member_delete
✓test_member_delete_persists_to_team_info TestTeamManagementRoutestest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-md-627c5943ec1e@example.com and user role: internal_user
- Create a team with team alias: e2e-team-md-6439b83f8e38 and models: gemini-2.5-flash
- Add a user to the team with /team/member_add
- GET /team/info
- Remove a user from the team with /team/member_delete
- GET /team/info
✓test_member_update_persists_role_and_budget TestTeamManagementRoutestest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-mu-d9fa28d53d49@example.com and user role: internal_user
- Create a team with team alias: e2e-team-mu-11c3d6bde7f3 and models: gemini-2.5-flash
- Add a user to the team with /team/member_add
- GET /team/info
- POST /team/member_update
- GET /team/info
✓test_multi_group_actor_keeps_exact_memberships TestJwtManagementtest_jwt_management_e2e.py›
- Create an organization, a team in it and a matching identity provider group
- Create an actor in the team_member role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the team_member role
- Read the team back from /team/info
✓test_new_access_group_tags_the_deployment TestModelAccessGroupRoutestest_model_tag_accessgroup_e2e.py›
- Add a deployment named e2e-mgmt-agmodel-c61df01ada30 that calls openai/gpt-5.5
- POST /access_group/new
- GET /access_group/e2e-mgmt-ag-5d00b2d36eea/info
✓test_new_is_denied_to_non_admin_keys TestTeamManagementRoutestest_team_management_e2e.py›
- Generate a virtual key with default settings
- Create an internal user with user email: e2e-team-adm-e5ddbb5594ae@example.com and user role: internal_user
- Generate a virtual key with user id: 8d06c2a9-b6d8-4886-87e3-c00ddcdfcef0
- Try to create a team with team alias: e2e-team-adm-d125e7c3425d, calling with a virtual key
- Try to create a team with team alias: e2e-team-adm-1420f39b18a2, calling with a virtual key
✓test_new_is_refused_for_a_non_admin_key TestBudgetManagementtest_budget_customer_user_org_e2e.py›
- Generate a virtual key with default settings
- Send a request to /budget/new
✓test_new_persists_mapping_and_is_read_back TestJwtKeyMappingtest_config_misc_endpoints_e2e.py›
- Generate a virtual key with default settings
- POST /jwt/key/mapping/new
- GET /jwt/key/mapping/info
✓test_new_persists_to_customer_info TestCustomerManagementtest_budget_customer_user_org_e2e.py›
- POST /customer/new
- GET /customer/info
✓test_new_persists_to_model_info_catalog TestModelRoutestest_management_e2e.py›
- Add a deployment named e2e-mgmt-model-57fe2b72a5a3 that calls openai/gpt-5.5
- List the deployments from /model/info
✓test_new_persists_to_organization_info TestOrganizationRoutestest_management_e2e.py›
- Create an organization with organization alias: e2e-mgmt-org-db970413ab45 and models: gemini-2.5-flash
- Read the organization back from /organization/info
✓test_new_persists_to_tag_list TestTagRoutestest_management_e2e.py›
- List the tags from /tag/list
- Create a tag with name: e2e-mgmt-tag-8c831c86b055 and description: Tag for spend categorization
- List the tags from /tag/list
✓test_new_persists_to_team_info_and_binds_keys TestTeamRoutestest_management_e2e.py›
- Create a team with team alias: e2e-mgmt-team-b5806505b9e0 and models: gemini-2.5-flash
- Read the team back from /team/info
- Generate a virtual key with team id: 3aded2a9-5c14-4d7e-9f04-964d6baae909
- Read the key's settings back from /key/info
✓test_new_persists_to_user_info TestUserRoutestest_management_e2e.py›
- Create an internal user with user email: e2e-mgmt-2465818d8d0e@example.com and user role: internal_user
- Read the user back from /user/info
✓test_new_user_is_readable_via_user_info TestUserManagementtest_budget_customer_user_org_e2e.py›
- Create an internal user with user email: e2e-mgmt-20c860b4d9ab@example.com and user role: internal_user
- Read the user back from /user/info
✓test_non_admin_key_cannot_add_global_model TestModelRoutestest_model_tag_accessgroup_e2e.py›
- Generate a virtual key with default settings
- Send a request to /model/new
- List the deployments from /model/info
✓test_oidc_browser_profile_identity_mapping TestJwtManagementtest_jwt_management_e2e.py›
- Create an actor in the internal_user role, with its identity provider user, internal user and any tenant memberships
- Read Keycloak's OpenID Connect discovery document
- Register a browser SSO client in Keycloak
- Get a Keycloak access token for e2e-jwt-user-ffce62ae70bf through the browser SSO client
- Read the signed-in user's profile from Keycloak's userinfo endpoint
✓test_partial_setup_removes_previously_created_identities[group] TestJwtManagementtest_jwt_management_e2e.py›
- Create the Keycloak group e2e-partial-08e539b10e0d
- Delete every resource the test created, newest first
- Check that Keycloak's admin API returns 404 for the deleted entry under /groups
✓test_partial_setup_removes_previously_created_identities[user] TestJwtManagementtest_jwt_management_e2e.py›
- Create the Keycloak group e2e-partial-3b0d98365d5e
- Create the Keycloak user e2e-jwt-user-3b0d98365d5e with a password of its own
- Create the Keycloak user e2e-jwt-user-3b0d98365d5e
- Delete every resource the test created, newest first
- Check that Keycloak's admin API returns 404 for the deleted entry under /groups
- Check that Keycloak's admin API returns 404 for the deleted entry under /users
✓test_partial_update_changes_only_the_named_field TestKeyLifecycletest_key_lifecycle_e2e.py›
- Create a team with team alias: e2e-key-lifecycle-team-0eac471bfa39
- Generate a virtual key with models: e2e-key-lifecycle-9d02cbc562be, max budget: 25.0, budget duration: 30d, team id: 5ce0aee7-eafe-4a5f-a481-f535e8155889, key alias: e2e-key-lifecycle-0eac471bfa39, tp
- Read /key/info on every proxy replica until they all agree
- Update the virtual key's settings with /key/update
- Read /key/info on every proxy replica until they all agree
✓test_project_detachment_preserves_key_scope_and_refreshes_auth TestKeyManagementRoutestest_key_management_e2e.py›
- Add a deployment named e2e-detach-d014b0d4ed2e that calls openai/synthetic-detachment
- Create an organization with organization alias: e2e-detach-d014b0d4ed2e and models: e2e-detach-d014b0d4ed2e
- Create a team with team alias: e2e-detach-d014b0d4ed2e, models: e2e-detach-d014b0d4ed2e and organization id: 43bad0db-994d-4d63-8320-4f12e5cb7538
- POST /project/new
- Generate a virtual key with models: e2e-detach-d014b0d4ed2e, max budget: 5.0, team id: ad05cc68-473a-46a6-90a3-f861e0d6dd89, project id: e9c77f61-d4f1-4e98-b094-fa6465a96730, organization id: 43bad0db
- Send a /chat/completions request to e2e-detach-d014b0d4ed2e
- Update the virtual key's settings with /key/update
- Read the key's settings back from /key/info
- Update the virtual key's settings with /key/update
- Send a request to /key/update
- Read the key's settings back from /key/info
- POST /project/update
- Send a /chat/completions request to e2e-detach-d014b0d4ed2e
- POST /key/update
- Read the key's settings back from /key/info
- Send a /chat/completions request to e2e-detach-d014b0d4ed2e
- Update the virtual key's settings with /key/update
- Read the key's settings back from /key/info
- Send a /chat/completions request to e2e-detach-d014b0d4ed2e-outside
✓test_read_reflects_the_create_on_every_replica TestKeyLifecycletest_key_lifecycle_e2e.py›
- Create a team with team alias: e2e-key-lifecycle-team-0ea93b6c1596
- Generate a virtual key with models: e2e-key-lifecycle-9d02cbc562be, max budget: 25.0, budget duration: 30d, team id: c053309b-b7f1-484f-a1d8-4acb57549007, key alias: e2e-key-lifecycle-0ea93b6c1596, tp
- Read /key/info on every proxy replica until they all agree
✓test_refuses_a_sort_field_and_a_parameter_it_does_not_support TestBudgetListV1test_budget_customer_user_org_e2e.py›
- GET /management/v1/budgets
✓test_regenerate_rotates_to_a_working_new_key TestKeyRegenerationtest_management_e2e.py›
- Generate a virtual key with models: gpt-5.5
- Regenerate the virtual key with /key/regenerate
- Send a /chat/completions request to gpt-5.5
✓test_regenerate_with_grace_period_keeps_old_key_until_revoked TestKeyRegenerationtest_management_e2e.py›
- Generate a virtual key with models: gpt-5.5
- Regenerate the virtual key with /key/regenerate
- Send a /chat/completions request to gpt-5.5
✓test_register_submits_pending_server TestMcpServerSubmissiontest_config_misc_endpoints_e2e.py›
- Create a team with team alias: e2e-mcp-team-f344b4b4f88f
- Generate a virtual key with team id: 61bfdd55-58a7-4895-a6e5-b945b779516b
- POST /v1/mcp/server/register
✓test_reset_spend_zeroes_recorded_spend_and_lifts_the_budget_block TestKeyManagementRoutestest_key_management_e2e.py›
- Generate a virtual key with models: claude-haiku-4-5 and max budget: 3e-06
- Send a /chat/completions request to claude-haiku-4-5
- Read the key's settings back from /key/info
- Reset the virtual key's spend to 0.0
- Read the key's settings back from /key/info
- Send a /chat/completions request to claude-haiku-4-5
✓test_sorts_pages_and_filters_the_budgets_it_created TestBudgetListV1test_budget_customer_user_org_e2e.py›
- POST /budget/new
- GET /management/v1/budgets
✓test_successful_actor_cleanup_removes_owned_state TestJwtManagementtest_jwt_management_e2e.py›
- Create an organization, a team in it and a matching identity provider group
- Create an actor in the team_member role, with its identity provider user, internal user and any tenant memberships
- Generate a virtual key as the proxy admin
- Read the key's settings back from /key/info
- Delete every resource the test created, newest first
- Count the matching users in /user/list
- Count the keys with the alias e2e-actor-key-29f0e787a404 in /key/list
- Check whether /team/info finds the team
- Check whether /organization/info finds the organization
- Check that Keycloak's admin API returns 404 for the deleted entry under /users
- Check that Keycloak's admin API returns 404 for the deleted entry under /groups
✓test_tag_delete_removes_from_list TestTagRoutestest_model_tag_accessgroup_e2e.py›
- POST /tag/new
- GET /tag/list
- POST /tag/delete
- GET /tag/list
✓test_tag_list_reports_created_tag TestTagRoutestest_model_tag_accessgroup_e2e.py›
- GET /tag/list
- POST /tag/new
- GET /tag/list
✓test_team_admin_cannot_change_a_setting_that_is_not_enabled[budget_duration] TestTeamAdminWithTpmLimitEnabledtest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-admin-00135d2a83d0@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-a3517747c6f3, tpm limit: 1000 and members with roles: role: admin and user id: 8ccfd82b-922e-4ee0-831f-fc76a848ce39
- Generate a virtual key with user id: 8ccfd82b-922e-4ee0-831f-fc76a848ce39
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_cannot_change_a_setting_that_is_not_enabled[max_budget] TestTeamAdminWithTpmLimitEnabledtest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-admin-a95c15e84e4a@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-c16bd4c18f0b, tpm limit: 1000 and members with roles: role: admin and user id: 3be4fc57-382c-4589-83ad-a4ba8929e5c5
- Generate a virtual key with user id: 3be4fc57-382c-4589-83ad-a4ba8929e5c5
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_cannot_change_a_setting_that_is_not_enabled[metadata] TestTeamAdminWithTpmLimitEnabledtest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-admin-2a7a30e7f1de@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-e3787be74565, tpm limit: 1000 and members with roles: role: admin and user id: e0893266-bf30-478c-bbac-f59a29357734
- Generate a virtual key with user id: e0893266-bf30-478c-bbac-f59a29357734
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_cannot_change_a_setting_that_is_not_enabled[models] TestTeamAdminWithTpmLimitEnabledtest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-admin-109f0aba3131@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-2b6a8142b463, tpm limit: 1000 and members with roles: role: admin and user id: 3e2402a1-f7fd-439e-af93-b84a10b73510
- Generate a virtual key with user id: 3e2402a1-f7fd-439e-af93-b84a10b73510
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_cannot_change_a_setting_that_is_not_enabled[rpm_limit] TestTeamAdminWithTpmLimitEnabledtest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-admin-c8cdf27b6a9e@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-036a7f7f615c, tpm limit: 1000 and members with roles: role: admin and user id: 01448621-3501-4532-abb5-46248e63305b
- Generate a virtual key with user id: 01448621-3501-4532-abb5-46248e63305b
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_cannot_change_a_setting_that_is_not_enabled[team_alias] TestTeamAdminWithTpmLimitEnabledtest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-admin-e51d112255fd@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-01527b0ea185, tpm limit: 1000 and members with roles: role: admin and user id: e70eaebf-7f83-4444-b5b6-3e21dea0a2e2
- Generate a virtual key with user id: e70eaebf-7f83-4444-b5b6-3e21dea0a2e2
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_cannot_change_any_team_setting TestTeamAdminWithNoEditableFieldstest_team_management_e2e.py›
- GET /get/ui_settings
- PATCH /update/ui_settings
- Wait for the last control-plane write to reach every proxy replica
- Create an internal user with user email: e2e-team-admin-36b4d82f0836@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-d6eae8bb32e6, tpm limit: 1000 and members with roles: role: admin and user id: 00459ae7-23b0-4456-baff-37dce4f7897d
- Generate a virtual key with user id: 00459ae7-23b0-4456-baff-37dce4f7897d
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_cannot_raise_an_org_team_budget_under_the_org_cap TestTeamAdminWithRpmLimitAndMaxBudgetEnabledtest_team_management_e2e.py›
- Create an organization with organization alias: e2e-team-admin-org-dd0da2034d09 and max budget: 100.0
- Create an internal user with user email: e2e-team-admin-62886fedbe2c@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-cd1afa7b3574, organization id: 5c45384d-96a5-4f06-9ed8-9b3e3d6142e6, tpm limit: 1000, max budget: 10.0 and members with roles: role: admin and user id: dc
- Generate a virtual key with user id: dc33770a-f0c6-416b-b5de-93610df9a7dd
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_cannot_raise_or_remove_the_budget[raise] TestTeamAdminWithRpmLimitAndMaxBudgetEnabledtest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-admin-bc805a5b7959@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-03756d73d81a, tpm limit: 1000, max budget: 10.0 and members with roles: role: admin and user id: 47cb4906-4006-4888-86d0-a996066d6e6c
- Generate a virtual key with user id: 47cb4906-4006-4888-86d0-a996066d6e6c
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_cannot_raise_or_remove_the_budget[remove] TestTeamAdminWithRpmLimitAndMaxBudgetEnabledtest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-admin-d77f82573476@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-ce5d7f5b0fb0, tpm limit: 1000, max budget: 10.0 and members with roles: role: admin and user id: 58f52e6d-4fa5-4779-b50f-79d45253fd50
- Generate a virtual key with user id: 58f52e6d-4fa5-4779-b50f-79d45253fd50
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_resending_the_budget_settings_keeps_the_next_budget_reset TestTeamAdminWithTpmLimitEnabledtest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-admin-abd076d7e5b3@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-fa6f3b847dd7, tpm limit: 1000 and members with roles: role: admin and user id: df8089cf-06aa-4d9d-9224-d9f33857eb17
- Generate a virtual key with user id: df8089cf-06aa-4d9d-9224-d9f33857eb17
- POST /team/update
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_saves_a_new_rpm_limit_and_a_tighter_budget[first-budget] TestTeamAdminWithRpmLimitAndMaxBudgetEnabledtest_team_management_e2e.py›
- Create an internal user with user email: e2e-team-admin-bea252928ebf@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-5566041a42e0, tpm limit: 1000 and members with roles: role: admin and user id: 53311fb6-fe24-4bdd-addc-6e201d56a896
- Generate a virtual key with user id: 53311fb6-fe24-4bdd-addc-6e201d56a896
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_saves_a_new_rpm_limit_and_a_tighter_budget[lower] TestTeamAdminWithRpmLimitAndMaxBudgetEnabledtest_team_management_e2e.py›
- GET /get/ui_settings
- PATCH /update/ui_settings
- Wait for the last control-plane write to reach every proxy replica
- Create an internal user with user email: e2e-team-admin-39ad8cdbb455@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-1fa70a70c0af, tpm limit: 1000, max budget: 10.0 and members with roles: role: admin and user id: cbe801b1-1dd3-41a6-8608-8c3dd48b950f
- Generate a virtual key with user id: cbe801b1-1dd3-41a6-8608-8c3dd48b950f
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_admin_saves_the_settings_form_with_a_new_tpm_limit TestTeamAdminWithTpmLimitEnabledtest_team_management_e2e.py›
- GET /get/ui_settings
- PATCH /update/ui_settings
- Wait for the last control-plane write to reach every proxy replica
- Create an internal user with user email: e2e-team-admin-263c270d765e@example.com and user role: internal_user
- Create a team with team alias: e2e-team-admin-f8ba1362e911, tpm limit: 1000 and members with roles: role: admin and user id: a7a776ff-cec7-401e-9779-1ff324439dc2
- Generate a virtual key with user id: a7a776ff-cec7-401e-9779-1ff324439dc2
- GET /team/info
- Send a request to /team/update
- GET /team/info
✓test_team_delete_succeeds_for_team_larger_than_db_pool TestTeamRoutestest_management_e2e.py›
- (205 earlier steps not recorded)
- Create an internal user with user email: e2e-mgmt-bulk-204-476e404f0647@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-205-40dbdada3fb8@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-206-7f6c8984e4c2@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-207-92306eb18734@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-208-2ad1f429824e@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-209-32731d17420a@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-210-19a28effa2a7@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-211-ccd3ca4a1849@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-212-06dc0edc208d@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-213-2248388ec9c9@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-214-3863d05ae547@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-215-b81f349dd40a@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-216-b60ea6d9a046@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-217-507dfe31fd16@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-218-035387889e6a@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-219-e553678f82f7@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-220-00d6e5fdc023@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-221-144cb14dba81@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-222-f31affbe8747@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-223-a7bcbb1e4f90@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-224-90b81b5b50e7@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-225-b91d7b1cc660@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-226-49bbe68fe3d0@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-227-1fe7d3a0b6ee@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-228-e7761c642f15@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-229-5d9b7247cd06@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-230-bf90b6b64e18@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-231-0073c5ec3fa5@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-232-21b4b2bd789f@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-233-119c4742038a@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-234-80846267ecdb@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-235-00cdc6dc2d19@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-236-2e5aa2e0a357@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-237-4b587e9d7489@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-238-b8882fd2cb1c@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-239-10cfbb07d7a5@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-240-ed0054352b2a@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-241-86b118918cfa@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-242-8e98b7651b82@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-243-7bbbedb69e89@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-244-b1b923398988@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-245-b14c875ac023@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-246-6ab648fb00cf@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-247-cf3b89df31ad@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-248-68b5d4ce7134@example.com and user role: internal_user
- Create an internal user with user email: e2e-mgmt-bulk-249-8753058afde2@example.com and user role: internal_user
- Add a roster of members to the team with /team/member_add
- Read the team back from /team/info
- Try to delete the team with /team/delete
- Check whether /team/info finds the team
✓test_team_delete_writes_audit_row_for_team_keys TestKeyDeletionAuditLogtest_management_e2e.py›
- Create a team with team alias: e2e-audit-team-2d6e30b86a5b
- Generate a virtual key with team id: 38c34d17-d9de-444c-8bb6-aaa4a09f6e67
- Delete the team
- Read the key's settings back from /key/info
- Read the key's deletion entries from the /audit log
✓test_team_member_delete_writes_audit_row_for_member_keys TestKeyDeletionAuditLogtest_management_e2e.py›
- Create a team with team alias: e2e-audit-team-f4eaff1b345f
- Create an internal user with user email: e2e-audit-a6be77a422e9@example.com and user role: internal_user
- Add a user to the team with /team/member_add
- Generate a virtual key with user id: 278304c0-d18b-4867-b70e-d82ea87690f4 and team id: fe46216c-6a2d-4bed-8057-7717b7105eb8
- Remove a user from the team with /team/member_delete
- Read the key's settings back from /key/info
- Read the key's deletion entries from the /audit log
✓test_tool_list_returns_catalog_with_consistent_total TestInventoryRoutestest_config_misc_endpoints_e2e.py›
- GET /v1/tool/list
✓test_two_actor_sets_keep_tenants_and_keys_isolated TestJwtManagementtest_jwt_management_e2e.py›
- Create an organization, a team in it and a matching identity provider group
- Create an actor in the team_member role, with its identity provider user, internal user and any tenant memberships
- Get a JWT from the identity provider for the actor in the team_member role
- Generate a virtual key as the proxy admin
- Read the key's settings back from /key/info
✓test_unblock_flips_key_info_blocked_back TestKeyManagementRoutestest_key_management_e2e.py›
- Generate a virtual key with models: gpt-5.5
- POST /key/block
- Read the key's settings back from /key/info
- POST /key/unblock
- Read the key's settings back from /key/info
✓test_update_accepts_per_model_budgets_including_punctuated_names TestBudgetManagementtest_budget_customer_user_org_e2e.py›
- POST /budget/new
- POST /budget/update
- POST /budget/info
- POST /budget/new
- POST /budget/update
- POST /budget/info
✓test_update_alias_persists_to_organization_info TestOrganizationRoutestest_management_e2e.py›
- Create an organization with organization alias: e2e-mgmt-org-619c11a01746
- Update an organization with organization id: 0540d67f-553e-492f-80d2-b42d013d51e5 and organization alias: e2e-mgmt-org-78fc14a2c591
- Read the organization back from /organization/info
✓test_update_forbidden_for_non_admin_key TestKeyManagementRoutestest_key_management_e2e.py›
- Generate a virtual key with models: gpt-5.5
- Send a request to /key/update
- Read the key's settings back from /key/info
✓test_update_max_budget_persists_to_budget_info TestBudgetManagementtest_budget_customer_user_org_e2e.py›
- POST /budget/new
- POST /budget/info
- POST /budget/update
- POST /budget/info
✓test_update_models_persists_and_flips_enforcement TestKeyRoutestest_management_e2e.py›
- Generate a virtual key with models: gemini-2.5-flash
- Send a /chat/completions request to gemini-2.5-flash
- Send a /chat/completions request to gpt-5.5
- Set the virtual key's models to [gpt-5.5]
- Read the key's settings back from /key/info
- Send a /chat/completions request to gpt-5.5
- Send a /chat/completions request to gemini-2.5-flash
✓test_update_persists_input_cost_to_model_info TestModelRoutestest_management_e2e.py›
- Add a deployment named e2e-mgmt-model-ec13418a632e that calls gpt-4o-mini
- List the deployments from /model/info
- Update a deployment's settings to model: gpt-4o-mini and input cost per token: 2.22e-06
- List the deployments from /model/info
✓test_update_persists_to_team_info TestTeamRoutestest_management_e2e.py›
- Create a team with team alias: e2e-mgmt-team-236ced83613c and models: gemini-2.5-flash
- Update a team with team id: ddd4e1f1-29fb-457c-8e8b-1fd32f082dbb and team alias: e2e-mgmt-team-updated-dab37b73ed44
- Read the team back from /team/info
✓test_update_persists_to_user_info TestUserRoutestest_management_e2e.py›
- Create an internal user with user email: e2e-mgmt-b9672475fbd2@example.com and user role: internal_user
- Read the user back from /user/info
- Update an internal user with user id: aee2121a-8f4c-4f35-a4f5-953e6ea79dd8 and user role: internal_user_viewer
- Read the user back from /user/info
✓test_updating_only_the_alias_keeps_every_other_field_on_every_replica TestMcpServerLifecycletest_mcp_lifecycle_e2e.py›
- Create an MCP server named e2e_mcp_lifecycle_cbdb2bb97244
- Update the MCP server's settings with PUT /v1/mcp/server
- Read /v1/mcp/server/195dc914-b8ad-412c-b3bf-8b121e3585ec on every proxy replica until it settles
✓test_updating_only_the_description_keeps_the_tools_and_name TestMcpToolsetLifecycletest_mcp_lifecycle_e2e.py›
- Create an MCP server named e2e_mcp_lifecycle_c7a57632b261
- Create an MCP toolset with the tools server id: 2edca686-0684-4c98-83f9-8d9838af99a7 and tool name: search_datadog_logs, server id: 2edca686-0684-4c98-83f9-8d9838af99a7 and tool name: get_datadog_metr
- Update an MCP toolset with toolset id: adc8db7a-f574-4357-b774-3fc35956edc5 and description: edited
- Read /v1/mcp/toolset/adc8db7a-f574-4357-b774-3fc35956edc5 on every proxy replica until it settles
✓test_updating_the_tools_to_one_entry_reads_back_exactly_that_entry TestMcpToolsetLifecycletest_mcp_lifecycle_e2e.py›
- Create an MCP server named e2e_mcp_lifecycle_7679033f2f8a
- Create an MCP toolset with the tools server id: 5922509a-0e2e-4f28-a5e5-06eab4063da3 and tool name: search_datadog_logs, server id: 5922509a-0e2e-4f28-a5e5-06eab4063da3 and tool name: get_datadog_metr
- Update an MCP toolset with toolset id: f7c73cd4-0d0f-4490-be74-a0a867fc1bfd and tools: server id: 5922509a-0e2e-4f28-a5e5-06eab4063da3 and tool name: search_datadog_logs
- Read /v1/mcp/toolset/f7c73cd4-0d0f-4490-be74-a0a867fc1bfd on every proxy replica until it settles
✓test_user_delete_writes_audit_row_for_user_keys TestKeyDeletionAuditLogtest_management_e2e.py›
- Create an internal user with user email: e2e-audit-7ab5cc4723f8@example.com and user role: internal_user
- Generate a virtual key with user id: 8f4e3034-6088-4b3e-b597-7832d5e1d4ce
- Delete the internal user
- Read the key's settings back from /key/info
- Read the key's deletion entries from the /audit log
✓test_workflow_runs_list_returns_consistent_count TestInventoryRoutestest_config_misc_endpoints_e2e.py›
- GET /v1/workflows/runs
−test_created_server_is_listed_with_every_field TestMcpServerLifecycletest_mcp_lifecycle_e2e.py›
No steps recorded
product gap: GET /v1/mcp/server builds each row from the in-memory registry, whose _build_mcp_server_table sets description from mcp_info['description'], so the list reports the mcp_info description while GET /v1/mcp/server/{server_id} reports the stored description column. A server created with both set to different text reads back with two different descriptions depending on the route
View test on GitHub ↗✓test_basic_messaging_non_streaming_anthropicbasic_messaging_non_streaming/test_anthropic.py›
- Add a deployment named claude-haiku-4-5 that calls anthropic/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5 that calls anthropic/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7 that calls anthropic/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-invoke that calls bedrock/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-converse that calls bedrock/converse/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-vertex that calls vertex_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-vertex that calls vertex_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-vertex that calls vertex_ai/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-azure that calls azure_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-azure that calls azure_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-azure that calls azure_ai/claude-opus-4-7
- Add a deployment named gpt-5-6-sol-openai that calls openai/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-openai that calls openai/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-openai that calls openai/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-azure-openai that calls azure/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-azure-openai that calls azure/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-azure-openai that calls azure/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-luna
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 through the proxy and check every model replies
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_basic_messaging_non_streaming_azurebasic_messaging_non_streaming/test_azure.py›
- Add a deployment named claude-haiku-4-5 that calls anthropic/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5 that calls anthropic/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7 that calls anthropic/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-invoke that calls bedrock/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-converse that calls bedrock/converse/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-vertex that calls vertex_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-vertex that calls vertex_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-vertex that calls vertex_ai/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-azure that calls azure_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-azure that calls azure_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-azure that calls azure_ai/claude-opus-4-7
- Add a deployment named gpt-5-6-sol-openai that calls openai/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-openai that calls openai/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-openai that calls openai/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-azure-openai that calls azure/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-azure-openai that calls azure/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-azure-openai that calls azure/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-luna
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure through the proxy and check every model replies
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_basic_messaging_non_streaming_azure_openaibasic_messaging_non_streaming/test_azure_openai.py›
- Add a deployment named claude-haiku-4-5 that calls anthropic/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5 that calls anthropic/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7 that calls anthropic/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-invoke that calls bedrock/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-converse that calls bedrock/converse/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-vertex that calls vertex_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-vertex that calls vertex_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-vertex that calls vertex_ai/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-azure that calls azure_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-azure that calls azure_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-azure that calls azure_ai/claude-opus-4-7
- Add a deployment named gpt-5-6-sol-openai that calls openai/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-openai that calls openai/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-openai that calls openai/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-azure-openai that calls azure/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-azure-openai that calls azure/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-azure-openai that calls azure/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-luna
- Run Claude Code headless against gpt-5-6-sol-azure-openai, gpt-5-6-terra-azure-openai, gpt-5-6-luna-azure-openai through the proxy and check every model replies
- Run Claude Code headless against gpt-5-6-sol-azure-openai through the proxy
- Run Claude Code headless against gpt-5-6-terra-azure-openai through the proxy
- Run Claude Code headless against gpt-5-6-luna-azure-openai through the proxy
✓test_basic_messaging_non_streaming_bedrock_conversebasic_messaging_non_streaming/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse through the proxy and check every model replies
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_basic_messaging_non_streaming_bedrock_invokebasic_messaging_non_streaming/test_bedrock_invoke.py›
- Add a deployment named claude-haiku-4-5 that calls anthropic/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5 that calls anthropic/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7 that calls anthropic/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-invoke that calls bedrock/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-converse that calls bedrock/converse/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-vertex that calls vertex_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-vertex that calls vertex_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-vertex that calls vertex_ai/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-azure that calls azure_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-azure that calls azure_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-azure that calls azure_ai/claude-opus-4-7
- Add a deployment named gpt-5-6-sol-openai that calls openai/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-openai that calls openai/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-openai that calls openai/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-azure-openai that calls azure/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-azure-openai that calls azure/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-azure-openai that calls azure/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-luna
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke through the proxy and check every model replies
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_basic_messaging_non_streaming_vertex_aibasic_messaging_non_streaming/test_vertex_ai.py›
- Add a deployment named claude-haiku-4-5 that calls anthropic/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5 that calls anthropic/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7 that calls anthropic/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-invoke that calls bedrock/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-converse that calls bedrock/converse/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-vertex that calls vertex_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-vertex that calls vertex_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-vertex that calls vertex_ai/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-azure that calls azure_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-azure that calls azure_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-azure that calls azure_ai/claude-opus-4-7
- Add a deployment named gpt-5-6-sol-openai that calls openai/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-openai that calls openai/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-openai that calls openai/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-azure-openai that calls azure/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-azure-openai that calls azure/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-azure-openai that calls azure/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-luna
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex through the proxy and check every model replies
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_basic_messaging_non_streaming_vertex_ai_gptbasic_messaging_non_streaming/test_vertex_ai_gpt.py›
- Add a deployment named claude-haiku-4-5 that calls anthropic/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5 that calls anthropic/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7 that calls anthropic/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-invoke that calls bedrock/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-converse that calls bedrock/converse/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-vertex that calls vertex_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-vertex that calls vertex_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-vertex that calls vertex_ai/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-azure that calls azure_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-azure that calls azure_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-azure that calls azure_ai/claude-opus-4-7
- Add a deployment named gpt-5-6-sol-openai that calls openai/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-openai that calls openai/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-openai that calls openai/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-azure-openai that calls azure/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-azure-openai that calls azure/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-azure-openai that calls azure/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-luna
✓test_basic_messaging_streaming_anthropicbasic_messaging_streaming/test_anthropic.py›
- Add a deployment named claude-haiku-4-5 that calls anthropic/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5 that calls anthropic/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7 that calls anthropic/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-invoke that calls bedrock/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-converse that calls bedrock/converse/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-vertex that calls vertex_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-vertex that calls vertex_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-vertex that calls vertex_ai/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-azure that calls azure_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-azure that calls azure_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-azure that calls azure_ai/claude-opus-4-7
- Add a deployment named gpt-5-6-sol-openai that calls openai/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-openai that calls openai/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-openai that calls openai/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-azure-openai that calls azure/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-azure-openai that calls azure/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-azure-openai that calls azure/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-luna
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 through the proxy and check every model replies
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_basic_messaging_streaming_azurebasic_messaging_streaming/test_azure.py›
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure through the proxy and check every model replies
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_basic_messaging_streaming_azure_openaibasic_messaging_streaming/test_azure_openai.py›
- Run Claude Code headless against gpt-5-6-sol-azure-openai, gpt-5-6-terra-azure-openai, gpt-5-6-luna-azure-openai through the proxy and check every model replies
- Run Claude Code headless against gpt-5-6-sol-azure-openai through the proxy
- Run Claude Code headless against gpt-5-6-terra-azure-openai through the proxy
- Run Claude Code headless against gpt-5-6-luna-azure-openai through the proxy
✓test_basic_messaging_streaming_bedrock_conversebasic_messaging_streaming/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse through the proxy and check every model replies
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_basic_messaging_streaming_bedrock_invokebasic_messaging_streaming/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke through the proxy and check every model replies
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_basic_messaging_streaming_vertex_aibasic_messaging_streaming/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex through the proxy and check every model replies
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_basic_messaging_streaming_vertex_ai_gptbasic_messaging_streaming/test_vertex_ai_gpt.py›
No steps recorded
View test on GitHub ↗✓test_count_tokens_anthropiccount_tokens/test_anthropic.py›
- Count tokens with /v1/messages/count_tokens for claude-haiku-4-5 on the message "hello world"
- Count tokens with /v1/messages/count_tokens for claude-sonnet-4-5 on the message "hello world"
- Count tokens with /v1/messages/count_tokens for claude-opus-4-7 on the message "hello world"
✓test_count_tokens_azurecount_tokens/test_azure.py›
- Count tokens with /v1/messages/count_tokens for claude-haiku-4-5-azure on the message "hello world"
- Count tokens with /v1/messages/count_tokens for claude-sonnet-4-5-azure on the message "hello world"
- Count tokens with /v1/messages/count_tokens for claude-opus-4-7-azure on the message "hello world"
✓test_count_tokens_bedrock_conversecount_tokens/test_bedrock_converse.py›
- Count tokens with /v1/messages/count_tokens for claude-haiku-4-5-bedrock-converse on the message "hello world"
- Count tokens with /v1/messages/count_tokens for claude-sonnet-4-5-bedrock-converse on the message "hello world"
- Count tokens with /v1/messages/count_tokens for claude-opus-4-7-bedrock-converse on the message "hello world"
✓test_count_tokens_bedrock_invokecount_tokens/test_bedrock_invoke.py›
- Count tokens with /v1/messages/count_tokens for claude-haiku-4-5-bedrock-invoke on the message "hello world"
- Count tokens with /v1/messages/count_tokens for claude-sonnet-4-5-bedrock-invoke on the message "hello world"
- Count tokens with /v1/messages/count_tokens for claude-opus-4-7-bedrock-invoke on the message "hello world"
✓test_passthrough_anthropicpassthrough/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 through the proxy's native provider passthrough route and check every model replies
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_passthrough_bedrock_conversepassthrough/test_bedrock_converse.py›
No steps recorded
View test on GitHub ↗✓test_passthrough_bedrock_invokepassthrough/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke through the proxy's native provider passthrough route and check every
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_passthrough_vertex_aipassthrough/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex through the proxy's native provider passthrough route and check every model replies
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_pdf_input_anthropicpdf_input/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_pdf_input_azurepdf_input/test_azure.py›
- Add a deployment named claude-haiku-4-5 that calls anthropic/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5 that calls anthropic/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7 that calls anthropic/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-invoke that calls bedrock/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-converse that calls bedrock/converse/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-vertex that calls vertex_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-vertex that calls vertex_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-vertex that calls vertex_ai/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-azure that calls azure_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-azure that calls azure_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-azure that calls azure_ai/claude-opus-4-7
- Add a deployment named gpt-5-6-sol-openai that calls openai/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-openai that calls openai/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-openai that calls openai/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-azure-openai that calls azure/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-azure-openai that calls azure/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-azure-openai that calls azure/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-luna
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_pdf_input_bedrock_conversepdf_input/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_pdf_input_bedrock_invokepdf_input/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_pdf_input_vertex_aipdf_input/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_prompt_caching_1h_anthropicprompt_caching_1h/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_prompt_caching_1h_azureprompt_caching_1h/test_azure.py›
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_prompt_caching_1h_bedrock_converseprompt_caching_1h/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_prompt_caching_1h_bedrock_invokeprompt_caching_1h/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_prompt_caching_1h_vertex_aiprompt_caching_1h/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_prompt_caching_5m_anthropicprompt_caching_5m/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_prompt_caching_5m_azureprompt_caching_5m/test_azure.py›
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_prompt_caching_5m_bedrock_converseprompt_caching_5m/test_bedrock_converse.py›
- Add a deployment named claude-haiku-4-5 that calls anthropic/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5 that calls anthropic/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7 that calls anthropic/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-invoke that calls bedrock/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-converse that calls bedrock/converse/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-vertex that calls vertex_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-vertex that calls vertex_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-vertex that calls vertex_ai/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-azure that calls azure_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-azure that calls azure_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-azure that calls azure_ai/claude-opus-4-7
- Add a deployment named gpt-5-6-sol-openai that calls openai/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-openai that calls openai/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-openai that calls openai/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-azure-openai that calls azure/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-azure-openai that calls azure/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-azure-openai that calls azure/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-luna
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_prompt_caching_5m_bedrock_invokeprompt_caching_5m/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_prompt_caching_5m_vertex_aiprompt_caching_5m/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_structured_outputs_anthropicstructured_outputs/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_structured_outputs_azurestructured_outputs/test_azure.py›
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_structured_outputs_bedrock_conversestructured_outputs/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_structured_outputs_bedrock_invokestructured_outputs/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_structured_outputs_vertex_aistructured_outputs/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_thinking_anthropicthinking/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_thinking_azurethinking/test_azure.py›
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_thinking_bedrock_conversethinking/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_thinking_bedrock_invokethinking/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_thinking_vertex_aithinking/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_thinking_with_tool_use_anthropicthinking_with_tool_use/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_thinking_with_tool_use_azurethinking_with_tool_use/test_azure.py›
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_thinking_with_tool_use_bedrock_conversethinking_with_tool_use/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_thinking_with_tool_use_bedrock_invokethinking_with_tool_use/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_thinking_with_tool_use_vertex_aithinking_with_tool_use/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_tool_search_anthropictool_search/test_anthropic.py›
- Send a /v1/messages request to claude-haiku-4-5 with the tool_search tool declared
- Send a /v1/messages request to claude-sonnet-4-5 with the tool_search tool declared
- Send a /v1/messages request to claude-opus-4-7 with the tool_search tool declared
✓test_tool_search_bedrock_conversetool_search/test_bedrock_converse.py›
- Send a /v1/messages request to claude-haiku-4-5-bedrock-converse with the tool_search tool declared
- Send a /v1/messages request to claude-sonnet-4-5-bedrock-converse with the tool_search tool declared
- Send a /v1/messages request to claude-opus-4-7-bedrock-converse with the tool_search tool declared
✓test_tool_search_bedrock_invoketool_search/test_bedrock_invoke.py›
- Add a deployment named claude-haiku-4-5 that calls anthropic/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5 that calls anthropic/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7 that calls anthropic/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-invoke that calls bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-invoke that calls bedrock/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Add a deployment named claude-sonnet-4-5-bedrock-converse that calls bedrock/converse/us.anthropic.claude-sonnet-4-5-20250929-v1:0
- Add a deployment named claude-opus-4-7-bedrock-converse that calls bedrock/converse/us.anthropic.claude-opus-4-7
- Add a deployment named claude-haiku-4-5-vertex that calls vertex_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-vertex that calls vertex_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-vertex that calls vertex_ai/claude-opus-4-7
- Add a deployment named claude-haiku-4-5-azure that calls azure_ai/claude-haiku-4-5
- Add a deployment named claude-sonnet-4-5-azure that calls azure_ai/claude-sonnet-4-5
- Add a deployment named claude-opus-4-7-azure that calls azure_ai/claude-opus-4-7
- Add a deployment named gpt-5-6-sol-openai that calls openai/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-openai that calls openai/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-openai that calls openai/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-azure-openai that calls azure/gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-azure-openai that calls azure/gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-azure-openai that calls azure/gpt-5.6-luna
- Add a deployment named gpt-5-6-sol-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-sol
- Add a deployment named gpt-5-6-terra-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-terra
- Add a deployment named gpt-5-6-luna-bedrock-mantle that calls bedrock_mantle/openai.gpt-5.6-luna
- Send a /v1/messages request to claude-haiku-4-5-bedrock-invoke with the tool_search tool declared
- Send a /v1/messages request to claude-sonnet-4-5-bedrock-invoke with the tool_search tool declared
- Send a /v1/messages request to claude-opus-4-7-bedrock-invoke with the tool_search tool declared
✓test_tool_search_history_bedrock_invoketool_search/test_bedrock_invoke.py›
- Send a /v1/messages request to claude-haiku-4-5-bedrock-invoke with the tool_search tool declared, then send its answer back as history in a second request
- Send a /v1/messages request to claude-sonnet-4-5-bedrock-invoke with the tool_search tool declared, then send its answer back as history in a second request
- Send a /v1/messages request to claude-opus-4-7-bedrock-invoke with the tool_search tool declared, then send its answer back as history in a second request
✓test_tool_use_anthropictool_use/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_tool_use_azuretool_use/test_azure.py›
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_tool_use_azure_openaitool_use/test_azure_openai.py›
- Run Claude Code headless against gpt-5-6-sol-azure-openai, gpt-5-6-terra-azure-openai, gpt-5-6-luna-azure-openai in parallel through the proxy
- Run Claude Code headless against gpt-5-6-sol-azure-openai through the proxy
- Run Claude Code headless against gpt-5-6-terra-azure-openai through the proxy
- Run Claude Code headless against gpt-5-6-luna-azure-openai through the proxy
✓test_tool_use_bedrock_conversetool_use/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_tool_use_bedrock_invoketool_use/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_tool_use_streaming_anthropictool_use_streaming/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_tool_use_streaming_azuretool_use_streaming/test_azure.py›
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_tool_use_streaming_azure_openaitool_use_streaming/test_azure_openai.py›
- Run Claude Code headless against gpt-5-6-sol-azure-openai, gpt-5-6-terra-azure-openai, gpt-5-6-luna-azure-openai in parallel through the proxy
- Run Claude Code headless against gpt-5-6-sol-azure-openai through the proxy
- Run Claude Code headless against gpt-5-6-terra-azure-openai through the proxy
- Run Claude Code headless against gpt-5-6-luna-azure-openai through the proxy
✓test_tool_use_streaming_bedrock_conversetool_use_streaming/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_tool_use_streaming_bedrock_invoketool_use_streaming/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_tool_use_streaming_vertex_aitool_use_streaming/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_tool_use_streaming_vertex_ai_gpttool_use_streaming/test_vertex_ai_gpt.py›
No steps recorded
View test on GitHub ↗✓test_tool_use_vertex_aitool_use/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_tool_use_vertex_ai_gpttool_use/test_vertex_ai_gpt.py›
No steps recorded
View test on GitHub ↗✓test_vision_anthropicvision/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_vision_azurevision/test_azure.py›
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_vision_bedrock_conversevision/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_vision_bedrock_invokevision/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_vision_vertex_aivision/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
✓test_web_search_anthropicweb_search/test_anthropic.py›
- Run Claude Code headless against claude-haiku-4-5, claude-sonnet-4-5, claude-opus-4-7 in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5 through the proxy
- Run Claude Code headless against claude-sonnet-4-5 through the proxy
- Run Claude Code headless against claude-opus-4-7 through the proxy
✓test_web_search_azureweb_search/test_azure.py›
- Run Claude Code headless against claude-haiku-4-5-azure, claude-sonnet-4-5-azure, claude-opus-4-7-azure in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-azure through the proxy
- Run Claude Code headless against claude-sonnet-4-5-azure through the proxy
- Run Claude Code headless against claude-opus-4-7-azure through the proxy
✓test_web_search_bedrock_converseweb_search/test_bedrock_converse.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse, claude-sonnet-4-5-bedrock-converse, claude-opus-4-7-bedrock-converse in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-converse through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-converse through the proxy
✓test_web_search_bedrock_invokeweb_search/test_bedrock_invoke.py›
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke, claude-sonnet-4-5-bedrock-invoke, claude-opus-4-7-bedrock-invoke in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-sonnet-4-5-bedrock-invoke through the proxy
- Run Claude Code headless against claude-opus-4-7-bedrock-invoke through the proxy
✓test_web_search_vertex_aiweb_search/test_vertex_ai.py›
- Run Claude Code headless against claude-haiku-4-5-vertex, claude-sonnet-4-5-vertex, claude-opus-4-7-vertex in parallel through the proxy
- Run Claude Code headless against claude-haiku-4-5-vertex through the proxy
- Run Claude Code headless against claude-sonnet-4-5-vertex through the proxy
- Run Claude Code headless against claude-opus-4-7-vertex through the proxy
−test_basic_messaging_non_streaming_bedrock_mantlebasic_messaging_non_streaming/test_bedrock_mantle.py›
No steps recorded
Bedrock Mantle GPT-5.6 cells are opt-in; set COMPAT_MANTLE_CELLS=1 once the AWS account is allowlisted for the openai.gpt-5.6-* models
View test on GitHub ↗−test_basic_messaging_non_streaming_openaibasic_messaging_non_streaming/test_openai.py›
No steps recorded
OpenAI GPT-5.6 cells are opt-in; set COMPAT_OPENAI_GPT_CELLS=1 to run them (stage suite timeouts under concurrent load)
View test on GitHub ↗−test_basic_messaging_streaming_bedrock_mantlebasic_messaging_streaming/test_bedrock_mantle.py›
No steps recorded
Bedrock Mantle GPT-5.6 cells are opt-in; set COMPAT_MANTLE_CELLS=1 once the AWS account is allowlisted for the openai.gpt-5.6-* models
View test on GitHub ↗−test_basic_messaging_streaming_openaibasic_messaging_streaming/test_openai.py›
No steps recorded
OpenAI GPT-5.6 cells are opt-in; set COMPAT_OPENAI_GPT_CELLS=1 to run them (stage suite timeouts under concurrent load)
View test on GitHub ↗−test_count_tokens_vertex_aicount_tokens/test_vertex_ai.py›
No steps recorded
stage red: Vertex returns not supported for token counting for Claude aliases
View test on GitHub ↗−test_long_context_1m_anthropiclong_context_1m/test_anthropic.py›
No steps recorded
stage red: 1M long_context not green on stage Anthropic path yet (200k sonnet / model alias)
View test on GitHub ↗−test_long_context_1m_azurelong_context_1m/test_azure.py›
No steps recorded
stage red: 1M long_context not green on stage Azure Foundry deployments yet
View test on GitHub ↗−test_long_context_1m_bedrock_converselong_context_1m/test_bedrock_converse.py›
No steps recorded
stage red: 1M long_context not green on stage Bedrock Converse deployments yet
View test on GitHub ↗−test_long_context_1m_bedrock_invokelong_context_1m/test_bedrock_invoke.py›
No steps recorded
stage red: 1M long_context not green on stage Bedrock Invoke deployments yet
View test on GitHub ↗−test_long_context_1m_vertex_ailong_context_1m/test_vertex_ai.py›
No steps recorded
stage red: 1M long_context not green on stage Vertex deployments yet
View test on GitHub ↗−test_passthrough_azurepassthrough/test_azure.py›
No steps recorded
stage red: /azure passthrough drops client headers (e.g. anthropic-version); product gap
View test on GitHub ↗−test_tool_search_azuretool_search/test_azure.py›
No steps recorded
stage red: Azure Foundry tool_search_server not supported in workspace for probed models
View test on GitHub ↗−test_tool_search_vertex_aitool_search/test_vertex_ai.py›
No steps recorded
stage red: Vertex rejects tool_search when deployment extra_headers inject context-1m beta; product/config
View test on GitHub ↗−test_tool_use_bedrock_mantletool_use/test_bedrock_mantle.py›
No steps recorded
Bedrock Mantle GPT-5.6 cells are opt-in; set COMPAT_MANTLE_CELLS=1 once the AWS account is allowlisted for the openai.gpt-5.6-* models
View test on GitHub ↗−test_tool_use_openaitool_use/test_openai.py›
No steps recorded
OpenAI GPT-5.6 cells are opt-in; set COMPAT_OPENAI_GPT_CELLS=1 to run them (stage suite timeouts under concurrent load)
View test on GitHub ↗−test_tool_use_streaming_bedrock_mantletool_use_streaming/test_bedrock_mantle.py›
No steps recorded
Bedrock Mantle GPT-5.6 cells are opt-in; set COMPAT_MANTLE_CELLS=1 once the AWS account is allowlisted for the openai.gpt-5.6-* models
View test on GitHub ↗−test_tool_use_streaming_openaitool_use_streaming/test_openai.py›
No steps recorded
OpenAI GPT-5.6 cells are opt-in; set COMPAT_OPENAI_GPT_CELLS=1 to run them (stage suite timeouts under concurrent load)
View test on GitHub ↗✓test_batch_create_over_rpm_returns_mapped_429 TestBatchRateLimitErrorMappingtest_batches_e2e.py›
- Generate a virtual key with user id: e2e-batch-rl-map-66dca1068f48, tpm limit: 1000000 and rpm limit: 2
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
✓test_batch_key_model_access_deniedtest_batches_e2e.py›
- Generate a virtual key with models: openai-batch-34f8fec52438 and user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
✓test_batch_lifecycle[azure-encoded]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- Cancel the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[azure-model_param]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- Cancel the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[azure-provider_fallback]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- Cancel the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[azure-unified]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- Cancel the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[bedrock-unified]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- Cancel the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[openai-encoded]test_batches_e2e.py›
- Call the management route /health/liveliness
- Add a batch deployment named openai-batch-34f8fec52438 that calls openai/gpt-4o-mini
- Add a batch deployment named azure-batch-34f8fec52438 that calls azure/gpt-5.4-mini-batch
- Add a batch deployment named vertex-batch-34f8fec52438 that calls vertex_ai/gemini-2.5-flash
- Add a batch deployment named bedrock-batch-34f8fec52438 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- Cancel the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[openai-model_param]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- Cancel the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[openai-provider_fallback]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- Cancel the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[openai-unified]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- Cancel the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[vertex_ai-encoded]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[vertex_ai-model_param]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[vertex_ai-provider_fallback]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- List the batches the key can see from /v1/batches
✓test_batch_lifecycle[vertex_ai-unified]test_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- List the batches the key can see from /v1/batches
✓test_completed_batch_downloads_output_and_books_cost TestBatchTerminalStatetest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- List the batches the key can see from /v1/batches
✓test_endpoint_mismatch_fails_batch_and_cancel_conflicts TestBatchFailurePathstest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
- Wait for the request's spend log in /spend/logs
- Cancel the batch
✓test_enqueued_allowance_accepts_batch_over_key_rpm TestBatchEnqueuedTokenLimittest_batches_e2e.py›
- Generate a virtual key with user id: e2e-batch-enq-rpm-16bd257e1d32, rpm limit: 2 and metadata: batch enqueued token limit: 100000
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
✓test_exhausted_allowance_blocks_until_cancel_refunds TestBatchEnqueuedTokenLimittest_batches_e2e.py›
- Generate a virtual key with user id: e2e-batch-enq-size-91e87f1c90f9 and metadata: batch enqueued token limit: 1
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Generate a virtual key with user id: e2e-batch-enq-refund-36503787d8ab and metadata: batch enqueued token limit: 36
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Cancel the batch
- Create a batch of /v1/chat/completions requests from the uploaded file
✓test_file_content_matches_upload TestBatchFileContenttest_batches_e2e.py›
- Start a provider edge server
- Add a batch deployment named e2e-file-content-0e4e6297713e that calls openai/gpt-4o-mini
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Download /v1/files/bGl0ZWxsbV9wcm94eTphcHBsaWNhdGlvbi9qc29ubDt1bmlmaWVkX2lkLGVmMDY2MGVjLTRlNGUtNDQwOC04NWQ2LTZhNDFhNGQ3NTAyZDt0YXJnZXRfbW9kZWxfbmFtZXMsZTJlLWZpbGUtY29udGVudC0wZTRlNjI5NzcxM2U7bGxtX291d
✓test_file_lifecycle_signs_s3_with_s3_credentials TestBedrockBatchSplitS3Credentialstest_batches_e2e.py›
- Add a batch deployment named bedrock-split-s3-batch-34f8fec52438 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Download /v1/files/bGl0ZWxsbV9wcm94eTphcHBsaWNhdGlvbi9qc29ubDt1bmlmaWVkX2lkLDI3MjhiZGM4LWYwZjEtNDQ2Zi1iZDg5LThhOGMzOTk0NWVmMzt0YXJnZXRfbW9kZWxfbmFtZXMsYmVkcm9jay1zcGxpdC1zMy1iYXRjaC0zNGY4ZmVjNTI0Mzg7b
- Delete the uploaded file
✓test_file_upload_and_delete_outputstest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Delete the uploaded file
✓test_foreign_encoded_file_id_routes_by_file_model TestBatchFailurePathstest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
✓test_gemini_file_upload TestGeminiFilestest_batches_e2e.py›
- Add a batch deployment named gemini-files-34f8fec52438 that calls gemini/gemini-2.5-flash
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
✓test_list_page_cursors_address_only_the_callers_own_files TestOpenAIFilestest_batches_e2e.py›
- Generate a virtual key with user id: e2e-file-list-5ed3fa474bb0
- List the files the key can see from /v1/files
✓test_malformed_jsonl_upload_rejected TestBatchFailurePathstest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
✓test_native_jsonl_round_trips_untouched_and_starts_a_batch TestVertexNativePassthroughtest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Download /v1/files/bGl0ZWxsbV9wcm94eTphcHBsaWNhdGlvbi9qc29ubDt1bmlmaWVkX2lkLDNkZTYzOWRmLTMyN2ItNGJmOS1iYjQwLTk5ZDA1ZDZlNjNiMzt0YXJnZXRfbW9kZWxfbmFtZXMsdmVydGV4LWJhdGNoLTM0ZjhmZWM1MjQzODtsbG1fb3V0cHV0X
- Create a batch of /v1/chat/completions requests from the uploaded file
✓test_passthrough_upload_is_rejected_outside_a_native_vertex_batch[no-target-model] TestVertexNativePassthroughtest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
✓test_passthrough_upload_is_rejected_outside_a_native_vertex_batch[non-vertex-target-model] TestVertexNativePassthroughtest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
✓test_passthrough_upload_is_rejected_outside_a_native_vertex_batch[openai-shaped-rows] TestVertexNativePassthroughtest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
✓test_retrieve_round_trips_metadata TestOpenAIFilestest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Retrieve the uploaded file
✓test_unified_batch_create_with_assume_role TestBedrockBatchAssumeRoletest_batches_e2e.py›
- Add a batch deployment named bedrock-sts-batch-34f8fec52438 that calls bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
✓test_unified_create_and_retrieve_via_chained_gateway TestBatchSecondHoptest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a batch deployment named openai-batch-hop-34f8fec52438 that calls litellm_proxy/openai-batch-34f8fec52438
- Upload a batch input file to /v1/files
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
✓test_unified_file_content_downloads[azure] TestBatchFileContenttest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Download /v1/files/bGl0ZWxsbV9wcm94eTphcHBsaWNhdGlvbi9qc29ubDt1bmlmaWVkX2lkLDU5MzYyOTYxLWRkZGEtNGVjOS05YzAzLTRlNmY4ZjRlMmRkNTt0YXJnZXRfbW9kZWxfbmFtZXMsYXp1cmUtYmF0Y2gtMzRmOGZlYzUyNDM4O2xsbV9vdXRwdXRfZ
✓test_unified_file_content_downloads[bedrock] TestBatchFileContenttest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Download /v1/files/bGl0ZWxsbV9wcm94eTphcHBsaWNhdGlvbi9qc29ubDt1bmlmaWVkX2lkLDU0OGFkNmE5LWFkNzYtNDY0OC1hZjA5LWExYzdjMTM4YmNhMjt0YXJnZXRfbW9kZWxfbmFtZXMsYmVkcm9jay1iYXRjaC0zNGY4ZmVjNTI0Mzg7bGxtX291dHB1d
✓test_unified_file_content_downloads[vertex_ai] TestBatchFileContenttest_batches_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Download /v1/files/bGl0ZWxsbV9wcm94eTphcHBsaWNhdGlvbi9qc29ubDt1bmlmaWVkX2lkLGEzMzU3ZjZiLWIxYjYtNDIwMS05ZmE3LTAwN2U3MzhjN2E5Yzt0YXJnZXRfbW9kZWxfbmFtZXMsdmVydGV4LWJhdGNoLTM0ZjhmZWM1MjQzODtsbG1fb3V0cHV0X
✓test_unified_file_upload_and_batch_create_in_govcloud TestBedrockBatchGovCloudtest_batches_e2e.py›
- Add a batch deployment named bedrock-govcloud-batch-34f8fec52438 that calls bedrock/amazon.nova-lite-v1:0
- Generate a virtual key with user id: e2e-test-user
- Upload a batch input file to /v1/files
- Download /v1/files/bGl0ZWxsbV9wcm94eTphcHBsaWNhdGlvbi9qc29ubDt1bmlmaWVkX2lkLDVmYTYwYTZjLWMzYmYtNDYwZi04MmIyLWRlZGVmNGMwN2JjNTt0YXJnZXRfbW9kZWxfbmFtZXMsYmVkcm9jay1nb3ZjbG91ZC1iYXRjaC0zNGY4ZmVjNTI0Mzg7b
- Create a batch of /v1/chat/completions requests from the uploaded file
- Retrieve the batch
−test_batch_runs_to_completion_with_a_downloadable_output[model_query] TestHostedVllmBatchtest_batches_e2e.py›
No steps recorded
set HOSTED_VLLM_API_BASE (the live vLLM server this deployment targets)
View test on GitHub ↗−test_batch_runs_to_completion_with_a_downloadable_output[target_model_names] TestHostedVllmBatchtest_batches_e2e.py›
No steps recorded
set HOSTED_VLLM_API_BASE (the live vLLM server this deployment targets)
View test on GitHub ↗−test_failing_line_lands_in_the_error_file_not_the_batch_status TestHostedVllmBatchtest_batches_e2e.py›
No steps recorded
set HOSTED_VLLM_API_BASE (the live vLLM server this deployment targets)
View test on GitHub ↗−test_rate_limited_batch_create_leaves_no_unattributed_spend_rowtest_batches_e2e.py›
No steps recorded
LIT-5027: the path under test hangs. The batch rate limiter reads the input file to count tokens by awaiting litellm.afile_content with no timeout, so a slow Files API holds POST /v1/batches open past any client deadline (63.6s observed on stage against a 60s read timeout). The unattributed-spend-row contract below is never reached, so the test reports a timeout rather than the behavior it guards. Unskip once the fetch is bounded.
View test on GitHub ↗−test_uploaded_file_appears_in_list TestOpenAIFilestest_batches_e2e.py›
No steps recorded
LIT-4820 (https://linear.app/litellm-ai/issue/LIT-4820): GET /v1/files omits newly uploaded files. The upload succeeds and GET /v1/files/{id} returns the file, but it never appears in the listing; the returned set is stable with its newest entry ~10h old, on both the managed (/v1/files?model=) and provider-scoped (/openai/v1/files) routes. Skipped rather than weakened because the assertion below is the correct contract. Remove this marker when LIT-4820 is fixed; do not relax the assertion to make it pass.
View test on GitHub ↗✓test_429_on_first_deployment_succeeds_on_retry TestReliabilityRetriestest_reliability_retries_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Generate a virtual key with models: gpt-5.5, user id: e2e-test-user and rpm limit: 1
- Add a deployment named reliability-retry-429-153003d9f6df that fronts gpt-5.5 on this proxy with a key out of rpm, so it always gets a 429 and is benched on the first one
- Add a zero-weight backup deployment named reliability-retry-429-153003d9f6df that calls openai/gpt-5.5
- Use up the rpm-limited key's one allowed request with a /chat/completions call to gpt-5.5
- Send a /chat/completions request to reliability-retry-429-153003d9f6df with stream set to False
✓test_429_trips_cooldown_then_recovers TestReliabilityCooldownstest_reliability_cooldowns_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Generate a virtual key with models: gpt-5.5, user id: e2e-test-user and rpm limit: 1
- Add a deployment named reliability-cooldown-429-72bc42e2af84 that fronts gpt-5.5 on this proxy with a key out of rpm, so it always gets a 429 and is benched on the first one
- Add a zero-weight backup deployment named reliability-cooldown-429-72bc42e2af84 that calls openai/gpt-5.5
- Use up the rpm-limited key's one allowed request with a /chat/completions call to gpt-5.5
- Send a /chat/completions request to reliability-cooldown-429-72bc42e2af84 with stream set to False
✓test_5xx_on_first_deployment_succeeds_on_retry TestReliabilityRetriestest_reliability_retries_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-5xx-upstream-cf86a794ccb4 that calls openai/gpt-5.5 at an unreachable address
- Add a deployment named reliability-retry-5xx-6be601f0dc6d that fronts reliability-5xx-upstream-cf86a794ccb4 on this proxy, so it always gets a 500 and is benched on the first one
- Add a zero-weight backup deployment named reliability-retry-5xx-6be601f0dc6d that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-retry-5xx-6be601f0dc6d with stream set to False
✓test_5xx_routes_to_fallback TestReliabilityFallbackstest_reliability_fallbacks_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-fail-fd326b1e9547 that calls openai/gpt-5.5 at an unreachable address
- Send a /chat/completions request to reliability-fail-fd326b1e9547 with stream set to False
✓test_5xx_trips_cooldown_then_recovers TestReliabilityCooldownstest_reliability_cooldowns_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-cooldown-5xx-upstream-cff8e9adfff5 that calls openai/gpt-5.5 at an unreachable address
- Add a deployment named reliability-cooldown-5xx-844165ee9f22 that fronts reliability-cooldown-5xx-upstream-cff8e9adfff5 on this proxy, so it always gets a 500 and is benched on the first one
- Add a zero-weight backup deployment named reliability-cooldown-5xx-844165ee9f22 that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-cooldown-5xx-844165ee9f22 with stream set to False
✓test_alias_api_key_never_overrides_the_tier_credential TestAliasParamForwardingtest_auto_router_regressions_e2e.py›
- Add a deployment named e2e-cred-tier-d855eb1d8481 that calls anthropic/claude-haiku-4-5
- Add a deployment named e2e-cred-alias-d855eb1d8481 that calls auto_router/complexity_router
- Generate a virtual key with models: e2e-cred-alias-d855eb1d8481, e2e-cred-tier-d855eb1d8481 and user id: e2e-auto-router-regressions
- Send a /chat/completions request to e2e-cred-alias-d855eb1d8481
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_auth_failure_on_first_deployment_succeeds_on_retry TestReliabilityRetriestest_reliability_retries_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-retry-auth-e324e1a78143 that calls openai/gpt-5.5 with an invalid key and is benched on its first 401
- Add a zero-weight backup deployment named reliability-retry-auth-e324e1a78143 that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-retry-auth-e324e1a78143 with stream set to False
✓test_auth_failure_trips_cooldown_then_recovers TestReliabilityCooldownstest_reliability_cooldowns_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-cooldown-auth-e52fb8eaafd6 that calls openai/gpt-5.5 with an invalid key and is benched on its first 401
- Add a zero-weight backup deployment named reliability-cooldown-auth-e52fb8eaafd6 that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-cooldown-auth-e52fb8eaafd6 with stream set to False
✓test_body_tagged_chat_reaches_the_untagged_tier_after_marker_rewrite TestUntaggedTierDeploymentstest_auto_router_regressions_e2e.py›
- Generate a virtual key with models: e2e-autoroute-386412ea40bb, e2e-tier-386412ea40bb, user id: e2e-auto-router-regressions and router settings: enable tag filtering: True
- Send a /chat/completions request to e2e-autoroute-386412ea40bb
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_body_tagged_chat_routes_through_the_marker_to_its_tier TestTagSplitRoutingtest_auto_router_regressions_e2e.py›
- Add a deployment named e2e-autoroute-310707a0beb8 that calls anthropic/claude-sonnet-5
- Add a deployment named e2e-tier-310707a0beb8 that calls anthropic/claude-haiku-4-5
- Add a deployment named e2e-autoroute-310707a0beb8 that calls auto_router/complexity_router
- Generate a virtual key with models: e2e-autoroute-310707a0beb8, e2e-tier-310707a0beb8, user id: e2e-auto-router-regressions and router settings: enable tag filtering: True
- Send a /chat/completions request to e2e-autoroute-310707a0beb8
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_body_tagged_responses_with_list_input_routes_to_the_tier TestResponsesApiTagRoutingtest_auto_router_regressions_e2e.py›
- Generate a virtual key with models: e2e-autoroute-1167180c9239, e2e-tier-1167180c9239, user id: e2e-auto-router-regressions and router settings: enable tag filtering: True
- POST /v1/responses
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_cached_conversation_stays_on_deployment_holding_its_cache TestReliabilityPromptCachingAffinitytest_reliability_prompt_caching_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Read the router settings from /router/settings
- Add a deployment named reliability-cache-7dbd00d02682 that calls anthropic/claude-haiku-4-5 with prompt caching
- Send a /chat/completions request to reliability-cache-7dbd00d02682 with a full message history and stream set to False
- Add a deployment named reliability-cache-7dbd00d02682 that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-cache-7dbd00d02682 with a full message history and stream set to False
✓test_client_hanging_up_never_benches_the_deployment TestReliabilityCancelOnDisconnecttest_reliability_cancel_on_disconnect_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Check whether the general setting cancel_on_disconnect is on
- Add a deployment named reliability-cooldown-disconnect-14879a0b320a that calls azure/gpt-5.4-nano and is benched for 300.0s on its first failure
- Add a zero-weight backup deployment named reliability-cooldown-disconnect-14879a0b320a that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-cooldown-disconnect-14879a0b320a with stream set to False
- Abandon the request to /chat/completions after 5.0s
- Send a /chat/completions request to reliability-cooldown-disconnect-14879a0b320a with stream set to False
✓test_content_policy_routes_to_fallback TestReliabilityFallbackstest_reliability_fallbacks_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-policyfail-27afabea2ce2 that calls azure/gpt-5.4-nano behind Azure's content filter
- Send a /chat/completions request to reliability-policyfail-27afabea2ce2 with stream set to False
✓test_context_window_refusal_on_first_deployment_succeeds_on_retry TestReliabilityRetriestest_reliability_retries_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-retry-context-2525a3b4dcd1 that calls openai/gpt-3.5-turbo and takes all of its group's traffic
- Add a zero-weight backup deployment named reliability-retry-context-2525a3b4dcd1 that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-retry-context-2525a3b4dcd1 with stream set to False
✓test_context_window_routes_to_fallback TestReliabilityFallbackstest_reliability_fallbacks_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-ctxfail-d634e224a0be that calls the small-context model openai/gpt-3.5-turbo
- Send a /chat/completions request to reliability-ctxfail-d634e224a0be with stream set to False
✓test_cost_based_picks_cheapest_deployment TestReliabilityRoutingStrategiestest_reliability_routing_strategies_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-cost-3a89636313ba that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-cost-3a89636313ba with stream set to False
✓test_exact_cache_returns_cached TestReliabilityCachetest_reliability_cache_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Run an observed provider edge server
- Add a deployment named e2e-cache-60f4fa075cd4 that calls openai/gpt-5.6
- Send a request to /chat/completions
✓test_failing_requests_do_not_grow_rss_or_stored_request TestReliabilityMemorytest_reliability_memory_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-memory-556c1fb64314 that calls openai/gpt-5.5 at an unreachable address and is never benched
- Add a deployment named reliability-memory-fb-556c1fb64314 that calls openai/gpt-5.5 at an unreachable address and is never benched
- Send a /chat/completions request to reliability-memory-556c1fb64314 with stream set to False
- Wait for the request's spend log in /spend/logs
- Send a /chat/completions request to reliability-memory-556c1fb64314 with stream set to False
- Read memory usage from /debug/memory/summary on every proxy replica
- Send a /chat/completions request to reliability-memory-556c1fb64314 with stream set to False
- Read memory usage from /debug/memory/summary on every proxy replica
✓test_header_tagged_messages_routes_through_the_marker_to_an_untagged_tier TestUntaggedTierDeploymentstest_auto_router_regressions_e2e.py›
- Add a deployment named e2e-autoroute-386412ea40bb that calls auto_router/complexity_router
- Add a deployment named e2e-tier-386412ea40bb that calls anthropic/claude-haiku-4-5
- Add a deployment named e2e-autoroute-386412ea40bb that calls anthropic/claude-sonnet-5
- Generate a virtual key with models: e2e-autoroute-386412ea40bb, e2e-tier-386412ea40bb, user id: e2e-auto-router-regressions and router settings: enable tag filtering: True
- POST /v1/messages
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_header_tagged_responses_with_string_input_routes_to_the_tier TestResponsesApiTagRoutingtest_auto_router_regressions_e2e.py›
- Add a deployment named e2e-autoroute-1167180c9239 that calls anthropic/claude-sonnet-5
- Add a deployment named e2e-tier-1167180c9239 that calls anthropic/claude-haiku-4-5
- Add a deployment named e2e-autoroute-1167180c9239 that calls auto_router/complexity_router
- Generate a virtual key with models: e2e-autoroute-1167180c9239, e2e-tier-1167180c9239, user id: e2e-auto-router-regressions and router settings: enable tag filtering: True
- POST /v1/responses
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_request_timeout_exceeds_deadline TestReliabilityTimeoutstest_reliability_timeouts_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-timeout-1c150a348f98 that calls openai/gpt-5.5 with a 1ms timeout
- Send a /chat/completions request to reliability-timeout-1c150a348f98 with stream set to False
✓test_responses_input_reaches_the_semantic_auto_router TestSemanticAutoRouterResponsestest_auto_router_regressions_e2e.py›
- Add a deployment named e2e-semantic-embedding-30fb43d986b1 that calls openai/text-embedding-3-small
- Add a deployment named e2e-semantic-target-30fb43d986b1 that calls anthropic/claude-haiku-4-5
- Add a deployment named e2e-semantic-fallback-30fb43d986b1 that calls anthropic/claude-sonnet-5
- Add a deployment named e2e-semantic-router-30fb43d986b1 that calls auto_router/e2e-semantic-router-30fb43d986b1
- Generate a virtual key with models: e2e-semantic-router-30fb43d986b1, e2e-semantic-target-30fb43d986b1, e2e-semantic-fallback-30fb43d986b1 and user id: e2e-auto-router-regressions
- POST /v1/responses
- Wait for at least 2 of the key's spend logs in /spend/logs
✓test_sibling_replica_serves_backup_within_redis_read_interval TestReliabilityCooldownstest_reliability_cooldowns_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-cooldown-sibling-upstream-4346e1342a2d that calls openai/gpt-5.5 at an unreachable address
- Add a deployment named reliability-cooldown-sibling-a6ec5223ef16 that fronts reliability-cooldown-sibling-upstream-4346e1342a2d on this proxy, so it always gets a 500 and is benched on the first one
- Add a zero-weight backup deployment named reliability-cooldown-sibling-a6ec5223ef16 that calls openai/gpt-5.5
- Add a deployment named reliability-cooldown-sibling-warm-473ae5ec9c20 for openai/gpt-5.5 that answers with a canned reply
- Send a /chat/completions request to reliability-cooldown-sibling-warm-473ae5ec9c20 with stream set to False
- Send a /chat/completions request to reliability-cooldown-sibling-a6ec5223ef16 with stream set to False
✓test_simple_shuffle_honors_weights TestReliabilityRoutingStrategiestest_reliability_routing_strategies_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-shuffle-422f1466a818 that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-shuffle-422f1466a818 with stream set to False
✓test_stream_timeout_exceeds_deadline TestReliabilityTimeoutstest_reliability_timeouts_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-stream-timeout-9be96a014f73 that calls openai/gpt-5.5 with a 1ms timeout
- Send a /chat/completions request to reliability-stream-timeout-9be96a014f73 with stream set to True
✓test_tagged_call_straight_at_an_untagged_deployment_stays_denied TestUntaggedTierDeploymentstest_auto_router_regressions_e2e.py›
- Generate a virtual key with models: e2e-tier-386412ea40bb, user id: e2e-auto-router-regressions and router settings: enable tag filtering: True
- Send a /chat/completions request to e2e-tier-386412ea40bb
✓test_timeout_on_first_deployment_succeeds_on_retry TestReliabilityRetriestest_reliability_retries_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-retry-a293c1d4b958 that calls openai/gpt-5.5 with a 1ms timeout and is benched on its first timeout
- Add a zero-weight backup deployment named reliability-retry-a293c1d4b958 that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-retry-a293c1d4b958 with stream set to False
✓test_timeout_routes_to_fallback TestReliabilityFallbackstest_reliability_fallbacks_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-tofail-4cd896bb72da that calls openai/gpt-5.5 with a 1ms timeout
- Send a /chat/completions request to reliability-tofail-4cd896bb72da with stream set to False
✓test_timeout_trips_cooldown_then_recovers TestReliabilityCooldownstest_reliability_cooldowns_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-cooldown-timeout-b92d037414fc that calls openai/gpt-5.5 with a 1ms timeout and is benched on its first timeout
- Add a zero-weight backup deployment named reliability-cooldown-timeout-b92d037414fc that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-cooldown-timeout-b92d037414fc with stream set to False
✓test_trivial_ask_behind_keyword_heavy_system_prompt_stays_on_the_cheap_tier TestComplexityHeuristicScopetest_auto_router_regressions_e2e.py›
- Add a deployment named e2e-heuristic-cheap-92bf7eb3c4e9 that calls anthropic/claude-haiku-4-5
- Add a deployment named e2e-heuristic-strong-92bf7eb3c4e9 that calls openai/gpt-5.6
- Add a deployment named e2e-heuristic-router-92bf7eb3c4e9 that calls auto_router/complexity_router
- Generate a virtual key with models: e2e-heuristic-router-92bf7eb3c4e9, e2e-heuristic-cheap-92bf7eb3c4e9, e2e-heuristic-strong-92bf7eb3c4e9 and user id: e2e-auto-router-regressions
- Send a /chat/completions request to e2e-heuristic-router-92bf7eb3c4e9
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_untagged_chat_is_always_served_by_the_plain_deployment TestTagSplitRoutingtest_auto_router_regressions_e2e.py›
- Generate a virtual key with models: e2e-autoroute-310707a0beb8, e2e-tier-310707a0beb8, user id: e2e-auto-router-regressions and router settings: enable tag filtering: True
- Send a /chat/completions request to e2e-autoroute-310707a0beb8
- Wait for at least 5 of the key's spend logs in /spend/logs
✓test_untagged_messages_is_served_by_the_plain_deployment TestTagSplitRoutingtest_auto_router_regressions_e2e.py›
- Generate a virtual key with models: e2e-autoroute-310707a0beb8, e2e-tier-310707a0beb8, user id: e2e-auto-router-regressions and router settings: enable tag filtering: True
- Send a /v1/messages request to e2e-autoroute-310707a0beb8
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_untagged_responses_is_served_by_the_plain_deployment TestResponsesApiTagRoutingtest_auto_router_regressions_e2e.py›
- Generate a virtual key with models: e2e-autoroute-1167180c9239, e2e-tier-1167180c9239, user id: e2e-auto-router-regressions and router settings: enable tag filtering: True
- POST /v1/responses
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_usage_based_picks_deployment_with_tpm_headroom TestReliabilityRoutingStrategiestest_reliability_routing_strategies_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named reliability-usage-6e359bbf1278 that calls openai/gpt-5.5
- Send a /chat/completions request to reliability-usage-6e359bbf1278 with stream set to False
✓test_workers_idle_under_rss_budget_before_traffic TestReliabilityMemorytest_reliability_memory_e2e.py›
No steps recorded
View test on GitHub ↗✓test_zero_priced_alias_still_logs_spend_at_the_tier_rate TestStrategyAliasPricingtest_auto_router_regressions_e2e.py›
- Add a deployment named e2e-priced-tier-73d5a8b446dd that calls anthropic/claude-haiku-4-5
- Add a deployment named e2e-priced-alias-73d5a8b446dd that calls auto_router/complexity_router
- Generate a virtual key with models: e2e-priced-alias-73d5a8b446dd, e2e-priced-tier-73d5a8b446dd and user id: e2e-auto-router-regressions
- Send a /chat/completions request to e2e-priced-alias-73d5a8b446dd
- Wait for at least 1 of the key's spend logs in /spend/logs
−test_latency_based_routes_around_deployment_that_times_out TestReliabilityRoutingStrategiestest_reliability_routing_strategies_e2e.py›
No steps recorded
LIT-7682: since #40229 the per-request routing_strategy override runs without the latency sampler, so latency-based has no signal to route on
View test on GitHub ↗−test_least_busy_avoids_deployment_with_request_in_flight TestReliabilityRoutingStrategiestest_reliability_routing_strategies_e2e.py›
No steps recorded
LIT-7682: since #40229 the per-request routing_strategy override runs without the in-flight counter, so least-busy has no signal to route on
View test on GitHub ↗−test_llm_classifier_runs_and_routes_by_semantic_tier TestComplexityRouterLlmClassifiertest_complexity_router_e2e.py›
No steps recorded
product bug LIT-4521: LLM classifier returns SIMPLE for short hard prompts (e.g. Is P equal to NP?); re-enable when classifier tier quality is fixed
View test on GitHub ↗✓test_apply_guardrail_blocks_banned_and_allows_clean TestApplyGuardrailEndpointtest_apply_guardrail_e2e.py›
- Register the content filter guardrail e2e-apply-db95b1c735b2 that blocks prompts containing e2e-banned-3609a7ba9441
- Apply the guardrail e2e-apply-db95b1c735b2 to a piece of text with /guardrails/apply_guardrail
✓test_bedrock_post_call_blocks_denied_model_output TestBedrockGuardrailtest_bedrock_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the bedrock guardrail e2e-bedrock-post-95ff99afb9aa with mode post_call
- Retry the call until a guardrail blocks it
✓test_bedrock_post_call_blocks_denied_streamed_output_and_passes_clean_streams TestBedrockGuardrailtest_bedrock_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the bedrock guardrail e2e-bedrock-post-stream-ee41deea65e0 with mode post_call
- Retry the streamed call until a guardrail blocks it
- Send a streaming /chat/completions request to gemini-2.5-flash
✓test_bedrock_pre_call_blocks_harmful_prompt TestBedrockGuardrailtest_bedrock_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the Bedrock guardrail e2e-bedrock-guard-f0ff24964663
- Retry the call until a guardrail blocks it
✓test_bedrock_pre_call_blocks_on_messages TestBedrockGuardrailtest_bedrock_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the Bedrock guardrail e2e-bedrock-messages-83e4dc92c674
- Retry the streamed call until a guardrail blocks it
✓test_bedrock_pre_call_blocks_on_responses TestBedrockGuardrailtest_bedrock_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the Bedrock guardrail e2e-bedrock-responses-cef37d727fc4
- Retry the streamed call until a guardrail blocks it
✓test_blocks_execution_request_but_allows_explanation TestBlockCodeExecutionGuardrailtest_block_code_execution_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-blockcode-backend-23bde407a5a3 that calls gemini/gemini-2.5-flash
- Register the block_code_execution guardrail e2e-block-code-0271b8583a5d with mode pre_call
- Send a /chat/completions request to e2e-blockcode-backend-23bde407a5a3
✓test_chat_blocks_category TestOpenAIModerationCategoryMatrixtest_openai_moderation_category_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-mod-cat-chat-a1998115003d that calls gemini/gemini-2.5-flash
- Register the openai_moderation guardrail e2e-mod-cat-chat-55485aa96929 with mode pre_call
- Send a /chat/completions request to e2e-mod-cat-chat-a1998115003d
✓test_child_condition_match_applies_child_and_inherited_parent_guardrails TestPolicyInheritedGuardrailtest_policy_inherited_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the content filter guardrail e2e-parent-guard-8e3436b78b9b that blocks prompts containing 8e3436b78b9b
- Register the content filter guardrail e2e-child-guard-31e5c5247b1a that blocks prompts containing 31e5c5247b1a
- Create the guardrail policy e2e-parent-policy-8e3436b78b9b that adds the guardrails e2e-parent-guard-8e3436b78b9b
- Create the guardrail policy e2e-child-policy-31e5c5247b1a that adds the guardrails e2e-child-guard-31e5c5247b1a
- Attach the guardrail policy e2e-child-policy-31e5c5247b1a to requests tagged e2e-policy-tag-91430015358c
- Send a /chat/completions request to gpt-5.5
✓test_child_condition_miss_still_applies_inherited_parent_guardrail TestPolicyInheritedGuardrailtest_policy_inherited_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the content filter guardrail e2e-parent-guard-037270e710bd that blocks prompts containing 037270e710bd
- Register the content filter guardrail e2e-child-guard-cca5c134f5b8 that blocks prompts containing cca5c134f5b8
- Create the guardrail policy e2e-parent-policy-037270e710bd that adds the guardrails e2e-parent-guard-037270e710bd
- Create the guardrail policy e2e-child-policy-cca5c134f5b8 that adds the guardrails e2e-child-guard-cca5c134f5b8
- Attach the guardrail policy e2e-child-policy-cca5c134f5b8 to requests tagged e2e-policy-tag-aaa91acb613f
- Send a /chat/completions request to gpt-5.5
✓test_during_call_blocks_stream_before_first_chunk TestBedrockDuringCallStreamingtest_streaming_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the bedrock guardrail e2e-bedrock-during-3d8a52168917 with mode during_call
- Retry the streamed call until a guardrail blocks it
✓test_flag_returns_guardrail_information_for_the_guardrail_that_ran TestGuardrailInformationResponsetest_guardrail_information_response_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the litellm_content_filter guardrail e2e-guardrail-information-06434397f57a with mode pre_call
- Add a deployment named e2e-guardrail-info-backend-53ccc9c0cd44 that calls openai/gpt-4.1-mini
- Send a /chat/completions request to e2e-guardrail-info-backend-53ccc9c0cd44
✓test_global_guardrail_blocks_key_without_team_opt_out TestTeamDisableGlobalGuardrailtest_team_disable_global_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the content filter guardrail e2e-content-filter-d9b4403ebb12 that blocks prompts containing d9b4403ebb12
- Send a /chat/completions request to gemini-2.5-flash
✓test_key_attached_content_filter_blocks_banned_image_edit_prompt TestKeyAttachedGuardrailOnImageEditstest_key_guardrail_image_edit_e2e.py›
- Register the content filter guardrail e2e-image-edit-filter-415538e11cef that blocks prompts containing 415538e11cef
- Generate a virtual key with the guardrails e2e-image-edit-filter-415538e11cef
- Add a deployment named e2e-guard-image-edit-b65264397c08 that calls openai/gpt-image-2.5-flare
- Retry the call until a guardrail blocks it
- Send a /v1/images/edits request to e2e-guard-image-edit-b65264397c08
✓test_key_attached_content_filter_blocks_banned_video_prompt TestKeyAttachedGuardrailOnVideostest_key_guardrail_video_e2e.py›
- Register the content filter guardrail e2e-video-filter-b49d09c63bad that blocks prompts containing b49d09c63bad
- Generate a virtual key with the guardrails e2e-video-filter-b49d09c63bad
- Add a deployment named e2e-guard-video-017fc7dcd2b7 that calls vertex_ai/veo-3.1-fast-generate-001
- Retry the call until a guardrail blocks it
- Send a /v1/videos request to e2e-guard-video-017fc7dcd2b7
✓test_masking_run_is_recorded_on_the_spend_log TestPresidioSpendLogRecordtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-log-25b43ed496ec with mode pre_call
- Send a /chat/completions request to gemini-2.5-flash
- Wait for the request's spend log in /spend/logs
✓test_messages_blocks_category TestOpenAIModerationCategoryMatrixtest_openai_moderation_category_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-mod-cat-msg-f80285000f5d that calls anthropic/claude-haiku-4-5
- Register the openai_moderation guardrail e2e-mod-cat-msg-f5dda4235fc0 with mode pre_call
- Send a /v1/messages request to e2e-mod-cat-msg-f80285000f5d
✓test_moderation_blocks_flagged_input TestOpenAIModerationGuardrailtest_openai_moderation_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-moderation-backend-a739efaa242b that calls gemini/gemini-2.5-flash
- Register the openai_moderation guardrail e2e-openai-moderation-8eb25113ad6b with mode pre_call
- Retry the call until a guardrail blocks it
- Send a /chat/completions request to e2e-moderation-backend-a739efaa242b
✓test_moderation_blocks_flagged_input_on_messages TestOpenAIModerationGuardrailtest_openai_moderation_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-moderation-msg-backend-4c9636d60bbe that calls gemini/gemini-2.5-flash
- Register the openai_moderation guardrail e2e-openai-moderation-msg-b503b23c732e with mode pre_call
- Retry the call until a guardrail blocks it
- Send a /v1/messages request to e2e-moderation-msg-backend-4c9636d60bbe
✓test_non_stream_block_is_schema_valid_json TestResponsesPreCallBlocktest_responses_pre_call_block_stream_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the custom_code guardrail e2e-custom-code-responses-block-e0db6699289d with mode pre_call
- Add a deployment named e2e-responses-block-74f6d1f08a05 that calls openai/gpt-4.1-mini
- Send a /v1/responses request to e2e-responses-block-74f6d1f08a05
✓test_post_call_masks_pii_in_model_output TestPresidioPostCallMaskingtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-post-chat-8a037d0861d2 with mode post_call
- Send a /chat/completions request to gemini-2.5-flash
✓test_pre_call_allows_permitted_tool TestToolPermissionPreCalltest_tool_permission_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the tool_permission guardrail e2e-toolperm-allow-8309b2cc21ec with mode pre_call
- Retry the call until the guardrail e2e-toolperm-allow-8309b2cc21ec is applied
✓test_pre_call_blocks_tool_outside_the_allow_list TestToolPermissionPreCalltest_tool_permission_guardrail_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the tool_permission guardrail e2e-toolperm-block-b411d419d75f with mode pre_call
- Retry the call until a guardrail blocks it
✓test_pre_call_masks_pii_on_chat_completions TestPresidioPreCallMaskingtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-pre-chat-b54e64e3f47d with mode pre_call
- Send a /chat/completions request to gemini-2.5-flash
✓test_pre_call_masks_pii_on_messages TestPresidioPreCallMaskingtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-pre-msg-225f667c2fb5 with mode pre_call
- Send a /v1/messages request to gemini-2.5-flash
✓test_responses_blocks_category TestOpenAIModerationCategoryMatrixtest_openai_moderation_category_matrix_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Add a deployment named e2e-mod-cat-resp-8b4d6ae59a55 that calls openai/gpt-4o-mini
- Register the openai_moderation guardrail e2e-mod-cat-resp-4e835bfe5c52 with mode pre_call
- Send a /v1/responses request to e2e-mod-cat-resp-8b4d6ae59a55
✓test_spend_log_stores_masked_output_on_anthropic_messages TestPresidioSpendLogStoresMaskedOutputtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-log-card-messages-f22f3169aef7 with mode post_call
- Send a /v1/messages request to gemini-2.5-flash
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_spend_log_stores_masked_output_on_chat_completions TestPresidioSpendLogStoresMaskedOutputtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-log-card-chat-ee07297df64c with mode post_call
- Send a /chat/completions request to gemini-2.5-flash
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_spend_log_stores_masked_output_on_responses TestPresidioSpendLogStoresMaskedOutputtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-log-card-responses-facff37bfe44 with mode post_call
- Send a /v1/responses request to gemini-2.5-flash
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_spend_log_stores_masked_output_on_streaming_anthropic_messages TestPresidioSpendLogStoresMaskedOutputtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-log-card-messages-stream-7d693fda3a24 with mode post_call
- Send a streaming /v1/messages request to gemini-2.5-flash
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_spend_log_stores_masked_output_on_streaming_chat_completions TestPresidioSpendLogStoresMaskedOutputtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-log-card-chat-stream-11fd97078f42 with mode post_call
- Send a streaming /chat/completions request to gemini-2.5-flash
- Wait for at least 1 of the key's spend logs in /spend/logs
✓test_stream_block_is_sse_with_completed_assistant_message TestResponsesPreCallBlocktest_responses_pre_call_block_stream_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the custom_code guardrail e2e-custom-code-responses-block-020850756312 with mode pre_call
- Add a deployment named e2e-responses-block-9f071a170662 that calls openai/gpt-4.1-mini
- Send a streaming /v1/responses request to e2e-responses-block-9f071a170662
✓test_team_with_disable_flag_bypasses_global_guardrail TestTeamDisableGlobalGuardrailtest_team_disable_global_guardrail_e2e.py›
- Register the content filter guardrail e2e-content-filter-ff7b4826c29c that blocks prompts containing ff7b4826c29c
- Create the team e2e-guardrail-optout-ff7b4826c29c opted out of global guardrails and wait until /team/info returns it
- Generate a virtual key in the team
- Send a /chat/completions request to gemini-2.5-flash
✓test_ui_default_scope_masks_a_card_number_the_model_generates_on_chat_completions TestPresidioCreditCardOutputMaskingtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-card-chat-07fedddba6c1 with mode pre_call, post_call
- Send a /chat/completions request to gemini-2.5-flash
✓test_ui_default_scope_masks_a_card_number_the_model_generates_on_streaming_anthropic_messages TestPresidioCreditCardOutputMaskingtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-card-messages-stream-30b7148fc57b with mode pre_call, post_call
- Send a streaming /v1/messages request to gemini-2.5-flash
✓test_ui_default_scope_masks_a_card_number_the_model_generates_on_streaming_chat_completions TestPresidioCreditCardOutputMaskingtest_presidio_masking_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the presidio guardrail e2e-presidio-card-stream-2c0ac917cfd3 with mode pre_call, post_call
- Send a streaming /chat/completions request to gemini-2.5-flash
✓test_without_flag_response_has_no_guardrail_information TestGuardrailInformationResponsetest_guardrail_information_response_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the litellm_content_filter guardrail e2e-guardrail-information-default-e8a18c7fc3e4 with mode pre_call
- Add a deployment named e2e-guardrail-info-backend-35eb75bb2fa9 that calls openai/gpt-4.1-mini
- Send a /chat/completions request to e2e-guardrail-info-backend-35eb75bb2fa9
−test_request_naming_an_unknown_guardrail_fails_closedtest_guardrail_dispatch_e2e.py›
No steps recorded
stage red: product gap, a request naming a guardrail the proxy does not serve is silently served unguarded (200) instead of failing closed
View test on GitHub ↗✓test_chat_completions_emits_one_log_event TestDataDogLogDeliverytest_datadog_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named dd-chat-6e3af92e12ed with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Wait for DataDog to ingest logs carrying the marker 6d0f3eb9a934, then watch for duplicates
✓test_chat_completions_exports_complete_trace TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named otel-trace-chat-6bd2f253c843 with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Poll Jaeger for the traces of call 803c22a1-b5ce-4e33-9f6b-114590eca9df
✓test_chat_completions_failure_writes_one_object TestS3LogDeliverytest_s3_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Add a deployment named s3-err-0e475430ac92 that calls anthropic/claude-haiku-4-5
- Generate a virtual key named s3-err-key-7338241d2079 with models: s3-err-0e475430ac92
- Send a /chat/completions request to s3-err-0e475430ac92 with stream=False and the prompt "trigger an upstream auth failure"
- Wait for the request's log object to land in the S3 bucket under s3-err-key-7338241d2079/, then watch for duplicates
✓test_chat_completions_object_key_follows_the_partition_granularity TestS3LogDeliverytest_s3_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named s3-layout-163055d344c7 with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Wait for the request's log object to land in the S3 bucket under s3-layout-163055d344c7/, then watch for duplicates
- List the log objects in the S3 bucket under s3-layout-163055d344c7/
✓test_chat_completions_stream_emits_one_log_event TestDataDogLogDeliverytest_datadog_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named dd-stream-chat-a2104c01483d with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Wait for the key's spend log in /spend/logs
- Wait for DataDog to ingest logs carrying the marker 43587934de41, then watch for duplicates
✓test_chat_completions_stream_exports_complete_trace TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named otel-stream-chat-54609e5eac99 with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Poll Jaeger for the traces of call 8e9564dc-43e3-408a-b874-881dfea445e8
✓test_chat_completions_stream_records_real_ttft TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named otel-ttft-chat-c8523fefeb56 with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Poll Jaeger for the traces of call 365cdb6f-f57a-45ec-9930-40c84320a362
✓test_chat_completions_writes_one_success_object TestS3LogDeliverytest_s3_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named s3-chat-06534b7ad08f with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Wait for the request's log object to land in the S3 bucket under s3-chat-06534b7ad08f/, then watch for duplicates
✓test_chat_completions_writes_one_success_record TestGcsLogDeliverytest_gcs_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named gcs-chat-bf37727125c2 with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Wait for the log of the response chatcmpl-e70ad191-6afc-4154-bae3-6de00f8a8b64 to land in the GCS bucket, then watch for duplicates
✓test_distinct_key_aliases_produce_distinct_series TestPrometheusPerKeyCardinalitytest_prometheus_cardinality_e2e.py›
- Generate a virtual key named e2e-prom-f009967215c6 with models: gemini-2.5-flash
- Send a /chat/completions request to gemini-2.5-flash with the prompt "reply with one word e2e-prom-f009967215c6"
- Generate a virtual key named e2e-prom-2425ea602910 with models: gemini-2.5-flash
- Send a /chat/completions request to gemini-2.5-flash with the prompt "reply with one word e2e-prom-2425ea602910"
- Generate a virtual key named e2e-prom-f24944b87345 with models: gemini-2.5-flash
- Send a /chat/completions request to gemini-2.5-flash with the prompt "reply with one word e2e-prom-f24944b87345"
- Scrape the Prometheus metrics from /metrics
✓test_failed_chat_completions_emits_one_error_event TestDataDogFailureDeliverytest_datadog_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Add a deployment named dd-err-98a9345da957 that calls anthropic/claude-haiku-4-5
- Generate a virtual key named dd-err-key-e73b9826bff8 with models: dd-err-98a9345da957
- Send a /chat/completions request to dd-err-98a9345da957 with stream=False and the prompt "trigger an upstream auth failure"
- Wait for DataDog to ingest logs matching @model_group:dd-err-98a9345da957, then watch for duplicates
✓test_failed_chat_completions_error_span_attributes TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Add a deployment named otel-err-9b7434fa7eac that calls anthropic/claude-haiku-4-5
- Generate a virtual key named otel-err-ba8d97207462 with models: otel-err-9b7434fa7eac
- Send a /chat/completions request to otel-err-9b7434fa7eac with stream=False and the prompt "trigger an upstream auth failure"
- Poll Jaeger for the traces of call dfce0f37-9dab-410f-94ad-f89ad0e3ce6e
✓test_failed_chat_completions_stream_emits_one_error_event TestDataDogFailureDeliverytest_datadog_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Add a deployment named dd-err-stream-9717e1adab9e that calls anthropic/claude-haiku-4-5
- Generate a virtual key named dd-err-stream-key-24fe200201c3 with models: dd-err-stream-9717e1adab9e
- Stream a POST to /chat/completions
- Wait for DataDog to ingest logs matching @model_group:dd-err-stream-9717e1adab9e, then watch for duplicates
✓test_failed_messages_error_span_attributes TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Add a deployment named otel-err-1d2b42174e41 that calls anthropic/claude-haiku-4-5
- Generate a virtual key named otel-err-3f2d07a6d61c with models: otel-err-1d2b42174e41
- Send a /v1/messages request to otel-err-1d2b42174e41 with stream=False and the prompt "trigger an upstream auth failure"
- Poll Jaeger for the traces of call ed213836-a094-4c1a-a64d-1a82daa7ef6e
✓test_messages_emits_one_log_event TestDataDogLogDeliverytest_datadog_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named dd-messages-2f28c2e4f889 with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Wait for DataDog to ingest logs carrying the marker b5557de1e560, then watch for duplicates
✓test_messages_exports_complete_trace TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named otel-trace-messages-ba181fe5de33 with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Poll Jaeger for the traces of call d44b5e29-1501-4aa1-aac1-419fc9d91e6e
✓test_messages_stream_emits_one_log_event TestDataDogLogDeliverytest_datadog_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named dd-stream-messages-b6de5c642884 with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Wait for the key's spend log in /spend/logs
- Wait for DataDog to ingest logs carrying the marker 6c182cf1452e, then watch for duplicates
✓test_messages_stream_exports_complete_trace TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named otel-stream-messages-69b19c851b40 with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Poll Jaeger for the traces of call d8a0bcb0-3e5c-4a04-822e-79bbc8075540
✓test_messages_stream_records_real_ttft TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named otel-ttft-messages-faf6f785bfba with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Poll Jaeger for the traces of call 1c40e02d-52b0-4703-8d54-211cb5ec7afc
✓test_non_json_native_metadata_reaches_langsmith TestLangsmithBatchSerializationtest_langsmith_batch_serialization_e2e.py›
- GET the external URL https://api.smith.langchain.com/runs/8c4cf6ce-1675-447c-866d-49a849eb6cda
✓test_queue_time_histogram_records_an_observation TestPrometheusRequestQueueTimetest_prometheus_queue_time_e2e.py›
- Generate a virtual key named e2e-queue-time-8013ab231c21 with models: gemini-2.5-flash
- Send a /chat/completions request to gemini-2.5-flash with the prompt "reply with one word e2e-queue-time-8013ab231c21"
- Scrape the Prometheus metrics from /metrics
✓test_responses_emits_one_log_event TestDataDogLogDeliverytest_datadog_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named dd-responses-5bf01b9ebed0 with models: gpt-5.5
- Retry the call until the fresh key stops answering 401
- Wait for DataDog to ingest logs carrying the marker 328b7080be5e, then watch for duplicates
✓test_responses_exports_complete_trace TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named otel-trace-responses-d2fc9652564c with models: gpt-5.5
- Retry the call until the fresh key stops answering 401
- Poll Jaeger for the traces of call 392c6140-6c56-466d-a046-6be06a6cb059
✓test_responses_stream_emits_one_log_event TestDataDogLogDeliverytest_datadog_log_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named dd-stream-responses-b2bcb60f47ea with models: gpt-5.5
- Retry the call until the fresh key stops answering 401
- Wait for the key's spend log in /spend/logs
- Wait for DataDog to ingest logs carrying the marker 05182efeb760, then watch for duplicates
✓test_responses_stream_exports_complete_trace TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named otel-stream-responses-7ad0faca9162 with models: gpt-5.5
- Retry the call until the fresh key stops answering 401
- Poll Jaeger for the traces of call dbcfb62f-8cf7-45bf-b984-cd974565c8d3
- Wait for the key's spend log in /spend/logs
✓test_responses_stream_records_real_ttft TestOtelTraceCompletenesstest_otel_trace_e2e.py›
- Read the proxy's callback list from /health/readiness/details
- Generate a virtual key named otel-ttft-responses-c35465c1b22c with models: gpt-5.5
- Retry the call until the fresh key stops answering 401
- Poll Jaeger for the traces of call 80b05447-2df9-433d-909d-0f21881e2291
✓test_team_callback_delivers_and_isolates TestTeamLangfuseCallbacktest_team_langfuse_callback_e2e.py›
- Create the team lf-team-1d83a23d5160 with models: claude-haiku-4-5
- Add a Langfuse OTel logging callback for success_and_failure events to the team
- Generate a virtual key named lf-team-key-f9f899682bd9 with models: claude-haiku-4-5
- Generate a virtual key named lf-solo-key-84a0438bfd40 with models: claude-haiku-4-5
- Retry the call until the fresh key stops answering 401
- Wait for the Langfuse generation for the key lf-team-key-f9f899682bd9
- Retry the call until the fresh key stops answering 401
- Look up the Langfuse generation for the key lf-solo-key-84a0438bfd40
−test_chat_completions_delivers_one_call_with_spend TestWeaveLogDeliverytest_weave_log_e2e.py›
No steps recorded
stage red: product gap, key-scoped weave_otel spans are not delivered when the OTEL v2 callback is active
View test on GitHub ↗−test_failed_chat_completions_delivers_one_error_call TestWeaveLogDeliverytest_weave_log_e2e.py›
No steps recorded
stage red: product gap, key-scoped weave_otel spans are not delivered when the OTEL v2 callback is active
View test on GitHub ↗✓test_encrypted_stored_value_is_not_a_bearer_token TestSessionTokentest_session_token_e2e.py›
- Generate a virtual key with key alias: e2e-session-37ad8af4600b and metadata: logging: callback name: langfuse and callback vars: default settings
- Read the key's settings back from /key/info
- List users from /user/list with the given key
✓test_expired_session_token_is_denied TestSessionTokentest_session_token_e2e.py›
- List users from /user/list with the given key
✓test_expired_token_is_rejected TestJwtAuthtest_jwt_auth_e2e.py›
- Create the Keycloak group e2e-jwt-team-dc2340e14f7f and the user e2e-jwt-user-dc2340e14f7f in it
- Create a team with team alias: e2e-jwt-dc2340e14f7f and team id: e2e-jwt-team-dc2340e14f7f
- Get a Keycloak access token for e2e-jwt-user-dc2340e14f7f from the client litellm-e2e-shortlived
- Send a /chat/completions request to gpt-5.5
✓test_liveness_reports_alive_without_auth TestHealthLifecycletest_health_lifecycle_e2e.py›
- Call /health/liveliness without credentials
✓test_master_key_authenticates_and_grants_admin_route TestMasterKeyAuthtest_master_key_auth_e2e.py›
- List users from /user/list with the given key
✓test_non_matching_master_key_is_denied TestMasterKeyAuthtest_master_key_auth_e2e.py›
- List users from /user/list with the given key
✓test_plain_virtual_key_still_works_with_jwt_auth_enabled TestJwtAuthtest_jwt_auth_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to gpt-5.5
✓test_readiness_details_require_auth_and_expose_diagnostics TestHealthLifecycletest_health_lifecycle_e2e.py›
- Call /health/readiness/details without credentials
- Call /health/readiness/details with the given key
✓test_readiness_is_reachable_without_credentials TestHealthLifecycletest_health_lifecycle_e2e.py›
- Call /health/readiness without credentials
✓test_readiness_reports_connected_db TestHealthLifecycletest_health_lifecycle_e2e.py›
- Call /health/readiness without credentials
✓test_signed_token_for_another_application_is_rejected TestJwtAuthtest_jwt_auth_e2e.py›
- Create the Keycloak group e2e-jwt-team-63d05c3f494e and the user e2e-jwt-user-63d05c3f494e in it
- Create a team with team alias: e2e-jwt-63d05c3f494e and team id: e2e-jwt-team-63d05c3f494e
- Get a Keycloak access token for e2e-jwt-user-63d05c3f494e from the client litellm-e2e-other-app
- Send a /chat/completions request to gpt-5.5
✓test_signed_token_from_the_wrong_issuer_is_rejected TestJwtAuthtest_jwt_auth_e2e.py›
- Create the Keycloak group e2e-jwt-team-7b7116fcd9c2 and the user e2e-jwt-user-7b7116fcd9c2 in it
- Create a team with team alias: e2e-jwt-7b7116fcd9c2 and team id: e2e-jwt-team-7b7116fcd9c2
- Get a Keycloak access token for e2e-jwt-user-7b7116fcd9c2 from the client litellm-e2e-tests
- Send a /chat/completions request to gpt-5.5
✓test_tampered_signature_is_rejected TestJwtAuthtest_jwt_auth_e2e.py›
- Create the Keycloak group e2e-jwt-team-6f829df8d6b4 and the user e2e-jwt-user-6f829df8d6b4 in it
- Create a team with team alias: e2e-jwt-6f829df8d6b4 and team id: e2e-jwt-team-6f829df8d6b4
- Get a Keycloak access token for e2e-jwt-user-6f829df8d6b4 from the client litellm-e2e-tests
- Send a /chat/completions request to gpt-5.5
✓test_team_header_with_the_alias_of_a_team_the_caller_is_not_in_is_rejected_like_an_unknown_value TestJwtTeamHeadertest_jwt_auth_e2e.py›
- Create the Keycloak group e2e-jwt-team-707645200d47 and the user e2e-jwt-user-707645200d47 in it
- Create a team with team alias: e2e-jwt-alias-707645200d47 and team id: e2e-jwt-team-707645200d47
- Get a Keycloak access token for e2e-jwt-user-707645200d47 from the client litellm-e2e-tests
- Create a team with team alias: e2e-jwt-alias-841a524550f9 and team id: e2e-jwt-other-841a524550f9
- Send a /chat/completions request to gpt-5.5 as team e2e-jwt-alias-841a524550f9 with the given token
- Send a /chat/completions request to gpt-5.5 as team e2e-jwt-unknown-946fe99f0de6 with the given token
✓test_team_header_with_the_team_alias_binds_the_same_team_as_the_team_id TestJwtTeamHeadertest_jwt_auth_e2e.py›
- Create the Keycloak group e2e-jwt-team-f0950379a0a8 and the user e2e-jwt-user-f0950379a0a8 in it
- Create a team with team alias: e2e-jwt-alias-f0950379a0a8 and team id: e2e-jwt-team-f0950379a0a8
- Get a Keycloak access token for e2e-jwt-user-f0950379a0a8 from the client litellm-e2e-tests
- Send a /chat/completions request to gpt-5.5 as team e2e-jwt-team-f0950379a0a8 with the given token
- Wait for the request's spend log in /spend/logs
- Send a /chat/completions request to gpt-5.5 as team e2e-jwt-alias-f0950379a0a8 with the given token
- Wait for the request's spend log in /spend/logs
✓test_team_model_alias_is_listed_by_v1_models_under_the_same_token_that_routes_it[anthropic_shape] TestJwtTeamHeadertest_jwt_auth_e2e.py›
- Create the Keycloak group e2e-jwt-team-9aa1010908e4 and the user e2e-jwt-user-9aa1010908e4 in it
- Create a team with team alias: e2e-jwt-aliased-9aa1010908e4, models: gpt-5.5, team id: e2e-jwt-team-9aa1010908e4 and model aliases: e2e-jwt-model-alias-9aa1010908e4: gpt-5.5
- Get a Keycloak access token for e2e-jwt-user-9aa1010908e4 from the client litellm-e2e-tests
- Send a /chat/completions request to e2e-jwt-model-alias-9aa1010908e4
- List the models from /v1/models with the given token, in the Anthropic shape: True
✓test_team_model_alias_is_listed_by_v1_models_under_the_same_token_that_routes_it[openai_shape] TestJwtTeamHeadertest_jwt_auth_e2e.py›
- Create the Keycloak group e2e-jwt-team-287f591461ad and the user e2e-jwt-user-287f591461ad in it
- Create a team with team alias: e2e-jwt-aliased-287f591461ad, models: gpt-5.5, team id: e2e-jwt-team-287f591461ad and model aliases: e2e-jwt-model-alias-287f591461ad: gpt-5.5
- Get a Keycloak access token for e2e-jwt-user-287f591461ad from the client litellm-e2e-tests
- Send a /chat/completions request to e2e-jwt-model-alias-287f591461ad
- List the models from /v1/models with the given token, in the Anthropic shape: False
✓test_token_naming_a_team_that_does_not_exist_is_rejected TestJwtAuthtest_jwt_auth_e2e.py›
- Create the Keycloak group e2e-jwt-team-deff0200e548 and the user e2e-jwt-user-deff0200e548 in it
- Get a Keycloak access token for e2e-jwt-user-deff0200e548 from the client litellm-e2e-tests
- Send a /chat/completions request to gpt-5.5
✓test_unexpired_session_token_reaches_admin_route TestSessionTokentest_session_token_e2e.py›
- List users from /user/list with the given key
✓test_valid_token_for_an_existing_team_is_accepted_and_attributed TestJwtAuthtest_jwt_auth_e2e.py›
- Create the Keycloak group e2e-jwt-team-05cf51066cea and the user e2e-jwt-user-05cf51066cea in it
- Create a team with team alias: e2e-jwt-05cf51066cea and team id: e2e-jwt-team-05cf51066cea
- Get a Keycloak access token for e2e-jwt-user-05cf51066cea from the client litellm-e2e-tests
- Send a /chat/completions request to gpt-5.5
- Wait for the request's spend log in /spend/logs
✓test_allowed_model_is_permitted TestAccessControltest_access_control_e2e.py›
- Generate a virtual key with models: gemini-2.5-flash and user id: e2e-test-user
- Send a /chat/completions request to gemini-2.5-flash with the prompt "capital of France? c72d3d2fa1fd"
✓test_bearer_invalid_token_is_denied TestChatAuthHeaderstest_chat_auth_headers_e2e.py›
- Send a request to /chat/completions
✓test_disallowed_model_is_denied_403 TestAccessControltest_access_control_e2e.py›
- Generate a virtual key with models: gemini-2.5-flash and user id: e2e-test-user
- Send a /chat/completions request to gpt-5.5 with the prompt "capital of France? 854218f9484c"
✓test_empty_bearer_token_is_denied TestChatAuthHeaderstest_chat_auth_headers_e2e.py›
- Send a request to /chat/completions
✓test_group_grants_every_deployment_in_it[bare name the group's wildcard covers-<lambda>] TestKeyScopedToAccessGrouptest_model_access_group_e2e.py›
- Add a deployment named openai/gpt-5.4* that calls openai/gpt-5.4*
- Add a deployment named e2e-ag-member-dd4037f2299c that calls openai/gpt-5.4-nano
- Add a deployment named e2e-ag-outsider-dd4037f2299c that calls openai/gpt-5.4-nano
- List the deployments in the model access group e2e-ag-dd4037f2299c
- Generate a virtual key with models: e2e-ag-dd4037f2299c and user id: e2e-test-user
- Send a /chat/completions request to gpt-5.4-nano with the prompt "Reply with exactly: OK 11b938b1a5d8"
✓test_group_grants_every_deployment_in_it[exactly-named deployment in the group-<lambda>] TestKeyScopedToAccessGrouptest_model_access_group_e2e.py›
- Generate a virtual key with models: e2e-ag-dd4037f2299c and user id: e2e-test-user
- Send a /chat/completions request to e2e-ag-member-dd4037f2299c with the prompt "Reply with exactly: OK 03adf24452b6"
✓test_group_grants_every_deployment_in_it[provider-prefixed name the group's wildcard covers-<lambda>] TestKeyScopedToAccessGrouptest_model_access_group_e2e.py›
- Generate a virtual key with models: e2e-ag-dd4037f2299c and user id: e2e-test-user
- Send a /chat/completions request to openai/gpt-5.4-nano with the prompt "Reply with exactly: OK b36216d1b0da"
✓test_group_grants_nothing_outside_it[deployment outside the group-<lambda>] TestKeyScopedToAccessGrouptest_model_access_group_e2e.py›
- Generate a virtual key with models: e2e-ag-dd4037f2299c and user id: e2e-test-user
- Send a /chat/completions request to e2e-ag-outsider-dd4037f2299c with the prompt "Reply with exactly: OK 59778f4b3387"
✓test_group_grants_nothing_outside_it[name no provider claims-<lambda>] TestKeyScopedToAccessGrouptest_model_access_group_e2e.py›
- Generate a virtual key with models: e2e-ag-dd4037f2299c and user id: e2e-test-user
- Send a /chat/completions request to e2e-ag-unknown-de6fb5ff483c with the prompt "Reply with exactly: OK 0eca31bde9b6"
✓test_group_grants_nothing_outside_it[provider model outside the group's wildcard-<lambda>] TestKeyScopedToAccessGrouptest_model_access_group_e2e.py›
- Generate a virtual key with models: e2e-ag-dd4037f2299c and user id: e2e-test-user
- Send a /chat/completions request to gpt-5.2 with the prompt "Reply with exactly: OK 1f8d7dd45ccd"
✓test_group_grants_the_team_nothing_outside_it TestTeamScopedToAccessGrouptest_model_access_group_e2e.py›
- Send a /chat/completions request to e2e-ag-unknown-52d063830142 with the prompt "Reply with exactly: OK 2891a806167e"
✓test_group_grants_the_teams_own_wildcard TestTeamScopedToAccessGrouptest_model_access_group_e2e.py›
- Create the team e2e-ag-team-5e43c8140664 with models: e2e-agt-5e43c8140664
- Generate a virtual key with team id: d997096a-7490-47d6-a4fa-f2e3dc184729
- Add a deployment named openai/gpt-5.6* that calls openai/gpt-5.6*
- Set the team e2e-ag-team-5e43c8140664's models to e2e-agt-5e43c8140664 through /team/update
- Read /team/info?team_id=d997096a-7490-47d6-a4fa-f2e3dc184729 on every proxy replica until it settles
- Wait for the last control-plane write to reach every proxy replica
- Send a /chat/completions request to gpt-5.6-luna with the prompt "Reply with exactly: OK 91b8d40c30ea"
✓test_llm_api_routes_group_grants_every_llm_endpoint TestAccessControltest_access_control_e2e.py›
- Generate a virtual key that can only call LLM API routes
- Send a /chat/completions request to gemini-2.5-flash with the prompt "capital of France? 8ebfbaf78b8c"
- Send an /embeddings request to openai-text-embedding-3-small for "route group a49d1f5eb603"
- Add a deployment named e2e-route-group-9ea0cf84c9f0 that calls openai/gpt-4o-mini with the given key
✓test_llm_only_key_forbidden_from_management_route_403 TestAccessControltest_access_control_e2e.py›
- Generate a virtual key that can only call LLM API routes
- Add a deployment named e2e-forbidden-0da686857af6 that calls openai/gpt-4o-mini with the given key
✓test_missing_authorization_header_is_denied TestChatAuthHeaderstest_chat_auth_headers_e2e.py›
- Send a request to /chat/completions
✓test_not_bearer_scheme_is_denied TestChatAuthHeaderstest_chat_auth_headers_e2e.py›
- Send a request to /chat/completions
✓test_token_without_bearer_prefix_is_denied TestChatAuthHeaderstest_chat_auth_headers_e2e.py›
- Send a request to /chat/completions
✓test_unknown_model_returns_400 TestAccessControltest_access_control_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to nonexistent-model-7bea577582f0 with the prompt "hi this is a test"
✓test_valid_key_allows_and_invalid_key_denied TestVirtualKeyAuthtest_access_control_e2e.py›
- Add a deployment named e2e-auth-chat-b258da8ab54e that calls anthropic/claude-haiku-4-5-20251001
- Generate a virtual key with user id: e2e-test-user
- Send a /chat/completions request to e2e-auth-chat-b258da8ab54e
✓test_access_group_scopes_tool_selection TestMcpAccessGroupToolSelectiontest_mcp_access_group_e2e.py›
- Register the Datadog remote MCP server with its credentials from the environment
- Wait for every proxy replica to list the MCP server in /v1/mcp/server
- Generate a virtual key for the user e2e-mcp-ag-granted-263031a74fc1
- Generate a virtual key for the user e2e-mcp-ag-other-ee1d66eb1113
- Wait for /mcp-rest/tools/list to show the MCP server's tool matching "search_datadog_logs"
- List the MCP tools the key can see from /mcp-rest/tools/list
✓test_alias_grant_persists_verbatim_and_lists_tools TestMcpKeyGrantByAliastest_mcp_key_access_e2e.py›
- Register the Datadog remote MCP server with its credentials from the environment
- Wait for every proxy replica to list the MCP server in /v1/mcp/server
- Generate a virtual key for the user e2e-mcp-allowed-83a5bd7385e0
- Read the key's settings back from /key/info
- Wait for /mcp-rest/tools/list to show the MCP server's tool matching "search_datadog_logs"
✓test_call_tool_denied_without_permission TestMcpKeyWithoutAccessIsDeniedtest_mcp_key_access_e2e.py›
- Register the Datadog remote MCP server with its credentials from the environment
- Wait for every proxy replica to list the MCP server in /v1/mcp/server
- Generate a virtual key for the user e2e-mcp-allowed-1fa04c40c187
- Generate a virtual key for the user e2e-mcp-denied-c8e88145e262
- Wait for /mcp-rest/tools/list to show the MCP server's tool matching "search_datadog_logs"
- Call the MCP tool search_datadog_logs through /mcp-rest/tools/call
- Call the MCP tool search_datadog_logs through /mcp-rest/tools/call and wait for a 403
✓test_content_filter_blocks_banned_keyword_in_tool_args TestMcpToolCallGuardrailtest_mcp_guardrail_e2e.py›
- Create the guardrail e2e-mcp-cf-aa9d3c30703f that blocks MCP tool calls containing "e2eblockedaa9d3c30703f"
- Register the Datadog remote MCP server with its credentials from the environment
- Generate a virtual key for the user e2e-mcp-guard-aa9d3c30703f
- Wait for /mcp-rest/tools/list to show the MCP server's tool matching "search_datadog_logs"
- Call the MCP tool search_datadog_logs through /mcp-rest/tools/call with query: tell me about e2eblockedaa9d3c30703f, from: now-30m, to: now and max tokens: 500
- Call the MCP tool search_datadog_logs through /mcp-rest/tools/call with query: still about e2eblockedaa9d3c30703f #1, from: now-30m, to: now and max tokens: 500
- Call the MCP tool search_datadog_logs through /mcp-rest/tools/call with query: still about e2eblockedaa9d3c30703f #2, from: now-30m, to: now and max tokens: 500
- Call the MCP tool search_datadog_logs through /mcp-rest/tools/call with query: still about e2eblockedaa9d3c30703f #3, from: now-30m, to: now and max tokens: 500
- Call the MCP tool search_datadog_logs through /mcp-rest/tools/call with query: still about e2eblockedaa9d3c30703f #4, from: now-30m, to: now and max tokens: 500
- Call the MCP tool search_datadog_logs through /mcp-rest/tools/call with query: e2e-clean-aa9d3c30703f, from: now-30m, to: now and max tokens: 500
✓test_key_granted_a_toolset_lists_exactly_its_tools TestMcpToolsetEnforcementtest_mcp_toolset_enforcement_e2e.py›
- Register the Datadog remote MCP server with its credentials from the environment
- Wait for every proxy replica to list the MCP server in /v1/mcp/server
- Generate a virtual key for the user e2e-mcp-catalog-c14b5088a93b
- Wait for /mcp-rest/tools/list to show the MCP server's tool matching "search_datadog_logs"
- List the MCP tools the key can see from /mcp-rest/tools/list
- Create an MCP toolset with the tools server id: c48afae5-36a9-4991-992f-bc5b225d94d7 and tool name: _dd_gff, server id: c48afae5-36a9-4991-992f-bc5b225d94d7 and tool name: _dd_guc
- Generate a virtual key for the user e2e-mcp-toolset-a77e84724762
- Wait for /mcp-rest/tools/list to show the key exactly the expected tools on the MCP server
✓test_list_tools_denied_without_permission TestMcpKeyWithoutAccessIsDeniedtest_mcp_key_access_e2e.py›
- Register the Datadog remote MCP server with its credentials from the environment
- Wait for every proxy replica to list the MCP server in /v1/mcp/server
- Generate a virtual key for the user e2e-mcp-allowed-1dd4a0bd32c4
- Generate a virtual key for the user e2e-mcp-denied-1d17ad27b1fb
- Wait for /mcp-rest/tools/list to show the MCP server's tool matching "search_datadog_logs"
- List the MCP tools the key can see from /mcp-rest/tools/list
✓test_route_restricted_health_matches_server_grants TestMcpHealthVisibilitytest_mcp_key_access_e2e.py›
- Register the Datadog remote MCP server with its credentials from the environment
- Wait for every proxy replica to list the MCP server in /v1/mcp/server
- Generate a virtual key for the user e2e-mcp-allowed-7892a094b0bd
- Wait for /mcp-rest/tools/list to show the MCP server's tool matching "search_datadog_logs"
- Call the MCP tool search_datadog_logs through /mcp-rest/tools/call
- Generate a virtual key with user id: e2e-mcp-health-cb22f46b9a61, allowed routes: /v1/mcp/server, /v1/mcp/server/health and object permission: mcp servers: b771ae74-faed-43d0-84f3-123a43895996
- List the MCP servers the key can see from /v1/mcp/server
- Check the health of the MCP servers the key can see from /v1/mcp/server/health
- Generate a virtual key with user id: e2e-mcp-health-4c5c0561de3b, allowed routes: /v1/mcp/server, /v1/mcp/server/health and object permission: mcp servers: 1fe25c93-f0f1-47e8-bde8-374f526f0928
- List the MCP servers the key can see from /v1/mcp/server
- Check the health of the MCP servers the key can see from /v1/mcp/server/health
- Generate a virtual key with user id: e2e-mcp-health-29301e8c9da8, allowed routes: /v1/mcp/server, /v1/mcp/server/health and object permission: default settings
- List the MCP servers the key can see from /v1/mcp/server
- Check the health of the MCP servers the key can see from /v1/mcp/server/health
✓test_search_logs_finds_seeded_completion TestDatadogMcpRoundTriptest_mcp_datadog_e2e.py›
- Call the management route /health/readiness/details
- Register the Datadog remote MCP server with its credentials from the environment
- Wait for every proxy replica to list the MCP server in /v1/mcp/server
- Generate a virtual key for the user e2e-dd-mcp-00029a8575e0
- Send a /chat/completions request to claude-haiku-4-5
- Wait for DataDog to ingest logs carrying the marker e2e-datadog-mcp-e63f132f2394, then watch for duplicates
- Wait for /mcp-rest/tools/list to show the MCP server's tool matching "search_datadog_logs"
- Call the MCP tool search_datadog_logs through /mcp-rest/tools/call
−test_chat_completion_uses_linear_with_authorization_bearer_header TestMcpChatCompletionOauthtest_mcp_chat_completion_oauth_e2e.py›
No steps recorded
set E2E_LINEAR_STORAGE_STATE to a Linear session captured via mcp/linear_session_capture.py
View test on GitHub ↗−test_chat_completion_uses_linear_with_x_litellm_api_key_header TestMcpChatCompletionOauthtest_mcp_chat_completion_oauth_e2e.py›
No steps recorded
set E2E_LINEAR_STORAGE_STATE to a Linear session captured via mcp/linear_session_capture.py
View test on GitHub ↗✓test_discovery_card_is_proxy_fronted TestA2AAgentLifecycletest_a2a_agent_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the A2A agent e2e-a2a-563dfa895c50 through /v1/agents
- Read the A2A agent's card from /a2a/{agent_id}/.well-known/agent-card.json with the given key
✓test_malformed_protocol_version_rejected TestA2AAgentLifecycletest_a2a_agent_e2e.py›
- Register the A2A agent e2e-a2a-bad-28696ed65a07 through /v1/agents
✓test_message_send_runs_completion_bridge TestA2AAgentLifecycletest_a2a_agent_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the A2A agent e2e-a2a-64031cc67ade through /v1/agents
- Send an A2A message to /a2a/{agent_id} with text: Reply with exactly the word PONG and nothing else
- Wait for the request's spend log in /spend/logs
✓test_pinned_v0_3_serves_flat_message_shape TestA2AAgentLifecycletest_a2a_agent_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the A2A agent e2e-a2a-362e50e2b603 through /v1/agents
- Send an A2A message to /a2a/{agent_id} with text: Say hi in one word
✓test_pinned_v1_0_serves_nested_message_shape TestA2AAgentLifecycletest_a2a_agent_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the A2A agent e2e-a2a-f68b18dcc5d5 through /v1/agents
- Send an A2A message to /a2a/{agent_id} with text: Say hi in one word
✓test_real_world_agent_replies_to_property_query TestA2AAgentLifecycletest_a2a_agent_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Fetch a published A2A agent card from its /.well-known endpoint
- Register the A2A agent e2e-a2a-real-773129160c2a through /v1/agents
- Send an A2A message to /a2a/{agent_id} with data: skill: search_properties and params: un locode: GBLON, service type: long_term and limit: 3
✓test_register_persists TestA2AAgentLifecycletest_a2a_agent_e2e.py›
- Register the A2A agent e2e-a2a-ab665698198e through /v1/agents
- Read the A2A agent back from /v1/agents/{agent_id}
✓test_semver_protocol_version_registers_and_serves TestA2AAgentLifecycletest_a2a_agent_e2e.py›
- Generate a virtual key with user id: e2e-test-user
- Register the A2A agent e2e-a2a-83d9343d2923 through /v1/agents
- Read the A2A agent's card from /a2a/{agent_id}/.well-known/agent-card.json with the given key
- Send an A2A message to /a2a/{agent_id} with text: Say hi in one word
✓test_unsupported_protocol_version_rejected TestA2AAgentLifecycletest_a2a_agent_e2e.py›
- Register the A2A agent e2e-a2a-bad-77f93a24ef11 through /v1/agents
−llm_translation/realtime/test_realtime_pipecat_audio_e2e.pyllm_translation/realtime/test_realtime_pipecat_audio_e2e.py›
No steps recorded
collection skipped