diff --git a/.circleci/config.yml b/.circleci/config.yml index 23a62df4789..81b8b12c49b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1320,7 +1320,7 @@ jobs: pip install "respx==0.22.0" pip install "pytest-xdist==3.6.1" pip install "pytest-timeout==2.2.0" - pip install "websockets" + pip install "websockets==13.1.0" # Run pytest and generate JUnit XML report - run: name: Run realtime tests diff --git a/provider_endpoints_support.json b/provider_endpoints_support.json index b1d4d5a1164..39a77222365 100644 --- a/provider_endpoints_support.json +++ b/provider_endpoints_support.json @@ -458,6 +458,24 @@ "interactions": true } }, + "charity_engine": { + "display_name": "Charity Engine (`charity_engine`)", + "url": "https://docs.litellm.ai/docs/providers/charity_engine", + "endpoints": { + "chat_completions": true, + "messages": false, + "responses": false, + "embeddings": false, + "image_generations": false, + "audio_transcriptions": false, + "audio_speech": false, + "moderations": false, + "batches": false, + "rerank": false, + "a2a": false, + "interactions": false + } + }, "chutes": { "display_name": "Chutes (`chutes`)", "endpoints": { @@ -813,6 +831,24 @@ "search": true } }, + "black_forest_labs": { + "display_name": "Black Forest Labs (`black_forest_labs`)", + "url": "https://docs.litellm.ai/docs/providers/black_forest_labs", + "endpoints": { + "chat_completions": false, + "messages": false, + "responses": false, + "embeddings": false, + "image_generations": true, + "audio_transcriptions": false, + "audio_speech": false, + "moderations": false, + "batches": false, + "rerank": false, + "a2a": false, + "interactions": false + } + }, "brave": { "display_name": "Brave Search (`brave`)", "url": "https://docs.litellm.ai/docs/search/brave", diff --git a/tests/litellm_utils_tests/test_health_check.py b/tests/litellm_utils_tests/test_health_check.py index 963fe4f5b9f..b25b5763343 100644 --- a/tests/litellm_utils_tests/test_health_check.py +++ b/tests/litellm_utils_tests/test_health_check.py @@ -117,8 +117,20 @@ async def test_azure_img_gen_health_check(): or "internal failure" in error_str ) + # Check if the model deployment has been permanently deprecated by Azure + is_model_deprecated = ( + "modeldeprecated" in error_str + or "model deprecated" in error_str + or "deprecated and no longer available" in error_str + ) + # If it's the last attempt or not a transient error, fail the test if attempt == max_retries - 1 or not is_transient_error: + if is_model_deprecated: + pytest.skip( + f"Azure model deployment is deprecated (external infrastructure issue): " + f"{response.get('error', 'Unknown error')}" + ) assert ( isinstance(response, dict) and "error" not in response ), f"Health check failed: {response.get('error', 'Unknown error')}" diff --git a/tests/llm_translation/realtime/test_openai_realtime.py b/tests/llm_translation/realtime/test_openai_realtime.py index 87eeb9b5c97..2aa836485d0 100644 --- a/tests/llm_translation/realtime/test_openai_realtime.py +++ b/tests/llm_translation/realtime/test_openai_realtime.py @@ -101,7 +101,7 @@ async def test_openai_realtime_direct_call_no_intent(): try: await litellm._arealtime( - model="gpt-4o-realtime-preview-2024-10-01", + model="gpt-4o-realtime-preview-2024-12-17", websocket=websocket_client, api_key=os.environ.get("OPENAI_API_KEY"), timeout=60 @@ -234,13 +234,13 @@ async def test_openai_realtime_direct_call_with_intent(): caught_exception = None query_params: RealtimeQueryParams = { - "model": "gpt-4o-realtime-preview-2024-10-01", + "model": "gpt-4o-realtime-preview-2024-12-17", "intent": "chat" } try: await litellm._arealtime( - model="gpt-4o-realtime-preview-2024-10-01", + model="gpt-4o-realtime-preview-2024-12-17", websocket=websocket_client, api_key=os.environ.get("OPENAI_API_KEY"), query_params=query_params, @@ -296,7 +296,7 @@ def test_realtime_query_params_construction(): from litellm.types.realtime import RealtimeQueryParams # Test case 1: intent is None (should not be included) - model = "gpt-4o-realtime-preview-2024-10-01" + model = "gpt-4o-realtime-preview-2024-12-17" intent = None query_params: RealtimeQueryParams = {"model": model} @@ -334,17 +334,17 @@ async def test_realtime_query_params_use_normalized_model_name(monkeypatch): ) def fake_get_llm_provider(model, api_base=None, api_key=None): - return ("gpt-4o-realtime-preview-2024-10-01", "openai", None, None) + return ("gpt-4o-realtime-preview-2024-12-17", "openai", None, None) monkeypatch.setattr(realtime_main, "get_llm_provider", fake_get_llm_provider) query_params: RealtimeQueryParams = { - "model": "openai/gpt-4o-realtime-preview-2024-10-01", + "model": "openai/gpt-4o-realtime-preview-2024-12-17", "intent": "chat", } await realtime_main._arealtime( - model="openai/gpt-4o-realtime-preview-2024-10-01", + model="openai/gpt-4o-realtime-preview-2024-12-17", websocket=MagicMock(), api_key="sk-test", query_params=query_params, @@ -353,6 +353,6 @@ async def test_realtime_query_params_use_normalized_model_name(monkeypatch): called_kwargs = mock_async_realtime.call_args.kwargs assert ( - called_kwargs["query_params"]["model"] == "gpt-4o-realtime-preview-2024-10-01" + called_kwargs["query_params"]["model"] == "gpt-4o-realtime-preview-2024-12-17" ) assert called_kwargs["query_params"]["intent"] == "chat"