From 8be374c98d1c38b5dabb7ed239c6a58c427103f6 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Thu, 13 Nov 2025 16:12:48 -0800 Subject: [PATCH 01/42] fix docker v --- .circleci/config.yml | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 63b06e6f2b..0ebf912703 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -563,8 +563,9 @@ jobs: - run: name: Install Docker CLI (In case it's not already installed) command: | - sudo apt-get update - sudo apt-get install -y docker-ce docker-ce-cli containerd.io + curl -fsSL https://get.docker.com | sh + sudo usermod -aG docker $USER + docker version - run: name: Install Python 3.13 command: | @@ -1770,8 +1771,9 @@ jobs: - run: name: Install Docker CLI (In case it's not already installed) command: | - sudo apt-get update - sudo apt-get install -y docker-ce docker-ce-cli containerd.io + curl -fsSL https://get.docker.com | sh + sudo usermod -aG docker $USER + docker version - run: name: Install Python 3.9 command: | @@ -1908,8 +1910,9 @@ jobs: - run: name: Install Docker CLI (In case it's not already installed) command: | - sudo apt-get update - sudo apt-get install -y docker-ce docker-ce-cli containerd.io + curl -fsSL https://get.docker.com | sh + sudo usermod -aG docker $USER + docker version - run: name: Install Python 3.9 command: | @@ -2050,8 +2053,9 @@ jobs: - run: name: Install Docker CLI (In case it's not already installed) command: | - sudo apt-get update - sudo apt-get install -y docker-ce docker-ce-cli containerd.io + curl -fsSL https://get.docker.com | sh + sudo usermod -aG docker $USER + docker version - run: name: Install Python 3.9 command: | @@ -2234,8 +2238,9 @@ jobs: - run: name: Install Docker CLI (In case it's not already installed) command: | - sudo apt-get update - sudo apt-get install -y docker-ce docker-ce-cli containerd.io + curl -fsSL https://get.docker.com | sh + sudo usermod -aG docker $USER + docker version - run: name: Install Python 3.9 command: | @@ -2342,8 +2347,9 @@ jobs: - run: name: Install Docker CLI (In case it's not already installed) command: | - sudo apt-get update - sudo apt-get install -y docker-ce docker-ce-cli containerd.io + curl -fsSL https://get.docker.com | sh + sudo usermod -aG docker $USER + docker version - run: name: Install Python 3.9 command: | @@ -2475,8 +2481,9 @@ jobs: - run: name: Install Docker CLI (In case it's not already installed) command: | - sudo apt-get update - sudo apt-get install -y docker-ce docker-ce-cli containerd.io + curl -fsSL https://get.docker.com | sh + sudo usermod -aG docker $USER + docker version sudo systemctl restart docker - run: name: Install Python 3.9 @@ -2684,8 +2691,9 @@ jobs: - run: name: Install Docker CLI (In case it's not already installed) command: | - sudo apt-get update - sudo apt-get install -y docker-ce docker-ce-cli containerd.io + curl -fsSL https://get.docker.com | sh + sudo usermod -aG docker $USER + docker version - run: name: Install Python 3.9 command: | From 32885087c2f760ecb920dea5bdcd700e0b9a8638 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Thu, 13 Nov 2025 16:25:27 -0800 Subject: [PATCH 02/42] add runwayml_models --- litellm/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/litellm/__init__.py b/litellm/__init__.py index 487b94d0f8..2ca14a7a98 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -500,6 +500,7 @@ watsonx_models: Set = set() gemini_models: Set = set() xai_models: Set = set() deepseek_models: Set = set() +runwayml_models: Set = set() azure_ai_models: Set = set() jina_ai_models: Set = set() voyage_models: Set = set() @@ -687,6 +688,8 @@ def add_known_models(): fal_ai_models.add(key) elif value.get("litellm_provider") == "deepseek": deepseek_models.add(key) + elif value.get("litellm_provider") == "runwayml": + runwayml_models.add(key) elif value.get("litellm_provider") == "meta_llama": llama_models.add(key) elif value.get("litellm_provider") == "nscale": @@ -830,6 +833,7 @@ model_list = list( | deepinfra_models | perplexity_models | set(maritalk_models) + | runwayml_models | vertex_language_models | watsonx_models | gemini_models @@ -921,6 +925,7 @@ models_by_provider: dict = { "xai": xai_models, "fal_ai": fal_ai_models, "deepseek": deepseek_models, + "runwayml": runwayml_models, "mistral": mistral_chat_models, "azure_ai": azure_ai_models, "voyage": voyage_models, From ee8b1cfabcccc05bfca139114088cfb1408c4de2 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Thu, 13 Nov 2025 16:26:02 -0800 Subject: [PATCH 03/42] test_call_with_end_user_over_budget --- tests/proxy_unit_tests/test_key_generate_prisma.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/proxy_unit_tests/test_key_generate_prisma.py b/tests/proxy_unit_tests/test_key_generate_prisma.py index 06972c32a6..ca8014f76f 100644 --- a/tests/proxy_unit_tests/test_key_generate_prisma.py +++ b/tests/proxy_unit_tests/test_key_generate_prisma.py @@ -132,6 +132,11 @@ def prisma_client(): ### add connection pool + pool timeout args params = {"connection_limit": 100, "pool_timeout": 60} database_url = os.getenv("DATABASE_URL") + + # If DATABASE_URL is not set, use a default test database URL + if not database_url: + database_url = "postgresql://postgres:postgres@localhost:5432/circle_test" + modified_url = append_query_params(database_url, params) os.environ["DATABASE_URL"] = modified_url @@ -666,7 +671,8 @@ def test_call_with_end_user_over_budget(prisma_client): except Exception as e: print(f"raised error: {e}, traceback: {traceback.format_exc()}") error_detail = e.message - assert "Budget has been exceeded! Current" in error_detail + assert "ExceededBudget: End User=" in error_detail + assert "over budget" in error_detail assert isinstance(e, ProxyException) assert e.type == ProxyErrorTypes.budget_exceeded print(vars(e)) From 3c662eadb4867cc38e37994091b68a3913e76ab3 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Thu, 13 Nov 2025 16:45:35 -0800 Subject: [PATCH 04/42] add runwayml/eleven_multilingual_v2 pricing --- ...odel_prices_and_context_window_backup.json | 7 +++++++ model_prices_and_context_window.json | 7 +++++++ tests/audio_tests/runwayml_speech.mp3 | Bin 67503 -> 64662 bytes tests/audio_tests/test_audio_speech.py | 2 +- 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index fa36e2d608..c8f878a90b 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -24864,5 +24864,12 @@ "1920x1080" ], "comment": "2 credits per image (any resolution) @ $0.01 per credit = $0.02 per image" + }, + "runwayml/eleven_multilingual_v2": { + "litellm_provider": "runwayml", + "mode": "audio_speech", + "input_cost_per_character": 3e-07, + "source": "https://docs.dev.runwayml.com/guides/pricing/", + "comment": "Estimated cost based on standard TTS pricing. RunwayML uses ElevenLabs models." } } diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index fa36e2d608..c8f878a90b 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -24864,5 +24864,12 @@ "1920x1080" ], "comment": "2 credits per image (any resolution) @ $0.01 per credit = $0.02 per image" + }, + "runwayml/eleven_multilingual_v2": { + "litellm_provider": "runwayml", + "mode": "audio_speech", + "input_cost_per_character": 3e-07, + "source": "https://docs.dev.runwayml.com/guides/pricing/", + "comment": "Estimated cost based on standard TTS pricing. RunwayML uses ElevenLabs models." } } diff --git a/tests/audio_tests/runwayml_speech.mp3 b/tests/audio_tests/runwayml_speech.mp3 index 22aee2084ba131cf077a4fdee3706272f52f861e..5eaa8b3362979e5e7a3945c33a76bb7ac46c1c42 100644 GIT binary patch literal 64662 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 literal 67503 zcmd>ljSJbUeR)}se`pF9Bgf0v*Uo04SIr0YFR~JVG!j1r;4V z6AK#$7mt9Dh?uy<3mG{DWi>4w14Cmo8wZzHUOxVTL2nV^Q8DpJsp*+nIeG6s6ciSh zlvme&Y;11r`23}}e`tJaW_E6Ib$xSZ@B87&>Ba9qxAzZ^$iM%kr6#Q|FTl;m%ZuLe zeSAH|1VeMeZk)Yf&oxU{_Ys!2(Y$<08r#`FyOBykxz7V zA;>Mdv$M0Fe{h_go!`~5FebWi#?<_NbsMTwQTM#862#KHpl278v$2tFXsT!W-hvL%hYk;bpihg8rk5o6?#c6_A( z4MyoBgY_QyRfv3$9pzG!x|5wS2Mwgw;`J(pif|-Q>(&@FQ!(D zW{fu=kHX%i!}rEj6JW)brIOX9LEdW(oWOA=ZmG+&9eVwFtnD*-QE+UyBZ>hq0l<(f zvAO^V8v)T~9EtEoLzx50dE@ocClB=0#lr&+w0oZ_82eXZML? zV-85yCyS5JV2m{y@9G#jcHZ5IjK(4b`(SneWhn67KjhUF3A+X{nUJP9x8qHzFkUelo%;xhD;oH*Rr3; znK(V9iO6gui5NoP#nc7k;7GLLiKZUp5REH0@|&2tFVq${2B|b(&-$RF3`DBm&~?hL zu|Tb+-kE3EWMwmQj-S}^#!|j09BJ0}@X-}EqZMGH)%>9wLtq2KDYeDMz>^qGQauA?2Hr8O+q!9{7 z7!1avI!(kY<7!rlO*Z*w>MC+Nl<%3QBk0pi>*>0B*hfeQWk)6WSPV6>dGw&kIR7D5 z@=MFQeS$AF`pkkesqxK9`FiI=$RO{MbjddjWtsWr^!^*O;L>PN)9Uf3Dk4vXCgVgO2Or39~P-IU?A70p^F=r zZ}QHn`uqXpoh2~CV&1$JF7=)eiehb9A%yVS%~m;0OEmU1<@#83Q5gFpQztL}x9G6R zCy75IwOw!BCs*_z-zd2oaUt*F1FLXQM}+PPw8`0l|4=f$sC44?qNzD}=Q+A|Pra(n z>eaQ*Y?6By>aYV%=t;Tx%$fp4-(WoB?j7fp{lU|ΨG%-fafY!m>&%q3nlIsp)a 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 WW^#Hsf 0 - print(f"Azure TTS audio saved to: {speech_file_path}") + print(f"RunwayML TTS audio saved to: {speech_file_path}") # assert response cost is greater than 0 print("Response cost: ", response._hidden_params["response_cost"]) From 3feae855bd89827b8c7fcb3bd616b21cf544aac3 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Thu, 13 Nov 2025 17:00:09 -0800 Subject: [PATCH 05/42] fix mapped test --- ...odel_prices_and_context_window_backup.json | 24 ++++++++++++++----- model_prices_and_context_window.json | 24 ++++++++++++++----- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index c8f878a90b..41e36994e0 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -24789,7 +24789,9 @@ "1280x720", "720x1280" ], - "comment": "5 credits per second @ $0.01 per credit = $0.05 per second" + "metadata": { + "comment": "5 credits per second @ $0.01 per credit = $0.05 per second" + } }, "runwayml/gen4_aleph": { "litellm_provider": "runwayml", @@ -24807,7 +24809,9 @@ "1280x720", "720x1280" ], - "comment": "15 credits per second @ $0.01 per credit = $0.15 per second" + "metadata": { + "comment": "15 credits per second @ $0.01 per credit = $0.15 per second" + } }, "runwayml/gen3a_turbo": { "litellm_provider": "runwayml", @@ -24825,7 +24829,9 @@ "1280x720", "720x1280" ], - "comment": "5 credits per second @ $0.01 per credit = $0.05 per second" + "metadata": { + "comment": "5 credits per second @ $0.01 per credit = $0.05 per second" + } }, "runwayml/gen4_image": { "litellm_provider": "runwayml", @@ -24844,7 +24850,9 @@ "1280x720", "1920x1080" ], - "comment": "5 credits per 720p image or 8 credits per 1080p image @ $0.01 per credit. Using 5 credits ($0.05) as base cost" + "metadata": { + "comment": "5 credits per 720p image or 8 credits per 1080p image @ $0.01 per credit. Using 5 credits ($0.05) as base cost" + } }, "runwayml/gen4_image_turbo": { "litellm_provider": "runwayml", @@ -24863,13 +24871,17 @@ "1280x720", "1920x1080" ], - "comment": "2 credits per image (any resolution) @ $0.01 per credit = $0.02 per image" + "metadata": { + "comment": "2 credits per image (any resolution) @ $0.01 per credit = $0.02 per image" + } }, "runwayml/eleven_multilingual_v2": { "litellm_provider": "runwayml", "mode": "audio_speech", "input_cost_per_character": 3e-07, "source": "https://docs.dev.runwayml.com/guides/pricing/", - "comment": "Estimated cost based on standard TTS pricing. RunwayML uses ElevenLabs models." + "metadata": { + "comment": "Estimated cost based on standard TTS pricing. RunwayML uses ElevenLabs models." + } } } diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index c8f878a90b..41e36994e0 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -24789,7 +24789,9 @@ "1280x720", "720x1280" ], - "comment": "5 credits per second @ $0.01 per credit = $0.05 per second" + "metadata": { + "comment": "5 credits per second @ $0.01 per credit = $0.05 per second" + } }, "runwayml/gen4_aleph": { "litellm_provider": "runwayml", @@ -24807,7 +24809,9 @@ "1280x720", "720x1280" ], - "comment": "15 credits per second @ $0.01 per credit = $0.15 per second" + "metadata": { + "comment": "15 credits per second @ $0.01 per credit = $0.15 per second" + } }, "runwayml/gen3a_turbo": { "litellm_provider": "runwayml", @@ -24825,7 +24829,9 @@ "1280x720", "720x1280" ], - "comment": "5 credits per second @ $0.01 per credit = $0.05 per second" + "metadata": { + "comment": "5 credits per second @ $0.01 per credit = $0.05 per second" + } }, "runwayml/gen4_image": { "litellm_provider": "runwayml", @@ -24844,7 +24850,9 @@ "1280x720", "1920x1080" ], - "comment": "5 credits per 720p image or 8 credits per 1080p image @ $0.01 per credit. Using 5 credits ($0.05) as base cost" + "metadata": { + "comment": "5 credits per 720p image or 8 credits per 1080p image @ $0.01 per credit. Using 5 credits ($0.05) as base cost" + } }, "runwayml/gen4_image_turbo": { "litellm_provider": "runwayml", @@ -24863,13 +24871,17 @@ "1280x720", "1920x1080" ], - "comment": "2 credits per image (any resolution) @ $0.01 per credit = $0.02 per image" + "metadata": { + "comment": "2 credits per image (any resolution) @ $0.01 per credit = $0.02 per image" + } }, "runwayml/eleven_multilingual_v2": { "litellm_provider": "runwayml", "mode": "audio_speech", "input_cost_per_character": 3e-07, "source": "https://docs.dev.runwayml.com/guides/pricing/", - "comment": "Estimated cost based on standard TTS pricing. RunwayML uses ElevenLabs models." + "metadata": { + "comment": "Estimated cost based on standard TTS pricing. RunwayML uses ElevenLabs models." + } } } From 4a486dc669867df037658e57616f86fe923c0647 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 13 Nov 2025 17:03:14 -0800 Subject: [PATCH 06/42] [Bug fix] Fixes SambaNova API rejecting requests when message content is passed as a list format (#16612) * add runwayml_models * test_call_with_end_user_over_budget * TestSambanovaContentListHandling * add _transform_messages for sambanova --- litellm/llms/sambanova/chat.py | 33 ++++- .../test_sambanova_chat_transformation.py | 127 ++++++++++++++++++ 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 tests/llm_translation/test_sambanova_chat_transformation.py diff --git a/litellm/llms/sambanova/chat.py b/litellm/llms/sambanova/chat.py index 57a39ec8bb..b0534347c9 100644 --- a/litellm/llms/sambanova/chat.py +++ b/litellm/llms/sambanova/chat.py @@ -4,9 +4,13 @@ Sambanova Chat Completions API this is OpenAI compatible - no translation needed / occurs """ -from typing import Optional, Union +from typing import Any, Coroutine, List, Literal, Optional, Union, overload +from litellm.litellm_core_utils.prompt_templates.common_utils import ( + handle_messages_with_content_list_to_str_conversion, +) from litellm.llms.openai.chat.gpt_transformation import OpenAIGPTConfig +from litellm.types.llms.openai import AllMessageValues class SambanovaConfig(OpenAIGPTConfig): @@ -92,3 +96,30 @@ class SambanovaConfig(OpenAIGPTConfig): elif param in supported_openai_params: optional_params[param] = value return optional_params + + @overload + def _transform_messages( + self, messages: List[AllMessageValues], model: str, is_async: Literal[True] + ) -> Coroutine[Any, Any, List[AllMessageValues]]: + ... + + @overload + def _transform_messages( + self, + messages: List[AllMessageValues], + model: str, + is_async: Literal[False] = False, + ) -> List[AllMessageValues]: + ... + + def _transform_messages( + self, messages: List[AllMessageValues], model: str, is_async: bool = False + ) -> Union[List[AllMessageValues], Coroutine[Any, Any, List[AllMessageValues]]]: + """ + Transform messages to handle content list conversion. + + SambaNova API doesn't support content as a list - only string content. + This converts content lists like [{"type": "text", "text": "..."}] to strings. + """ + messages = handle_messages_with_content_list_to_str_conversion(messages) + return messages diff --git a/tests/llm_translation/test_sambanova_chat_transformation.py b/tests/llm_translation/test_sambanova_chat_transformation.py new file mode 100644 index 0000000000..368c09931d --- /dev/null +++ b/tests/llm_translation/test_sambanova_chat_transformation.py @@ -0,0 +1,127 @@ +""" +Unit tests for SambaNova chat message transformation +""" +import pytest +from litellm.llms.sambanova.chat import SambanovaConfig + + +class TestSambanovaContentListHandling: + """ + Test that SambaNova properly transforms content lists to strings + """ + + def test_content_list_to_string_transformation(self): + """ + Test content list with text objects is converted to string. + + SambaNova API doesn't support content as a list - only string content. + """ + config = SambanovaConfig() + + messages = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "Hello, how are you?"} + ] + } + ] + + transformed_messages = config._transform_messages( + messages=messages, + model="sambanova/gpt-oss-120b", + is_async=False + ) + + assert len(transformed_messages) == 1 + assert transformed_messages[0]["role"] == "user" + assert isinstance(transformed_messages[0]["content"], str) + assert transformed_messages[0]["content"] == "Hello, how are you?" + + def test_content_list_multiple_text_blocks(self): + """ + Test content list with multiple text blocks is converted to concatenated string. + """ + config = SambanovaConfig() + + messages = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "Hello, "}, + {"type": "text", "text": "how are you?"} + ] + } + ] + + transformed_messages = config._transform_messages( + messages=messages, + model="sambanova/gpt-oss-120b", + is_async=False + ) + + assert transformed_messages[0]["content"] == "Hello, how are you?" + + def test_string_content_unchanged(self): + """ + Test that string content is passed through unchanged. + """ + config = SambanovaConfig() + + messages = [ + { + "role": "user", + "content": "Hello, how are you?" + } + ] + + transformed_messages = config._transform_messages( + messages=messages, + model="sambanova/gpt-oss-120b", + is_async=False + ) + + assert transformed_messages[0]["content"] == "Hello, how are you?" + + def test_multiple_messages_transformation(self): + """ + Test transformation of multiple messages with mixed content types. + """ + config = SambanovaConfig() + + messages = [ + { + "role": "system", + "content": "You are a helpful assistant." + }, + { + "role": "user", + "content": [ + {"type": "text", "text": "What is the weather?"} + ] + }, + { + "role": "assistant", + "content": "I need your location." + }, + { + "role": "user", + "content": [ + {"type": "text", "text": "I'm in "}, + {"type": "text", "text": "San Francisco"} + ] + } + ] + + transformed_messages = config._transform_messages( + messages=messages, + model="sambanova/gpt-oss-120b", + is_async=False + ) + + assert len(transformed_messages) == 4 + assert transformed_messages[0]["content"] == "You are a helpful assistant." + assert transformed_messages[1]["content"] == "What is the weather?" + assert transformed_messages[2]["content"] == "I need your location." + assert transformed_messages[3]["content"] == "I'm in San Francisco" + From 40a9d72be7bcc658c80ab704949a72ab580eadb2 Mon Sep 17 00:00:00 2001 From: sep-grindr <161519846+sep-grindr@users.noreply.github.com> Date: Thu, 13 Nov 2025 21:43:57 -0800 Subject: [PATCH 07/42] fix(ui): remove misleading 'Custom' option mention from OpenAI endpoint tooltips (#16622) The tooltip for OpenAI api_base select fields incorrectly mentioned 'choose Custom to enter your own' but there was no Custom option available in the dropdown. This fix updates the tooltip text to accurately reflect the available options. Affected providers: - OpenAI - OpenAI_Text --- .../add_model/provider_specific_fields.tsx | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx b/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx index 2f29461140..c34014436b 100644 --- a/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx +++ b/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx @@ -68,10 +68,15 @@ const PROVIDER_CREDENTIAL_FIELDS: Record = { key: "api_base", label: "API Base", - type: "text", - placeholder: "https://api.openai.com/v1", - tooltip: "Common endpoints: https://api.openai.com/v1, https://eu.api.openai.com, https://us.api.openai.com", + type: "select", + placeholder: "Select an endpoint", + tooltip: "Select from common OpenAI endpoints", defaultValue: "https://api.openai.com/v1", + options: [ + "https://api.openai.com/v1", + "https://us.api.openai.com/v1", + "https://eu.api.openai.com/v1", + ], }, { key: "organization", @@ -89,10 +94,15 @@ const PROVIDER_CREDENTIAL_FIELDS: Record = { key: "api_base", label: "API Base", - type: "text", - placeholder: "https://api.openai.com/v1", - tooltip: "Common endpoints: https://api.openai.com/v1, https://eu.api.openai.com, https://us.api.openai.com", + type: "select", + placeholder: "Select an endpoint", + tooltip: "Select from common OpenAI endpoints", defaultValue: "https://api.openai.com/v1", + options: [ + "https://api.openai.com/v1", + "https://us.api.openai.com/v1", + "https://eu.api.openai.com/v1", + ], }, { key: "organization", From 21ba491656b034cef0a6ae798ddf36c72ea429ae Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 13 Nov 2025 21:46:35 -0800 Subject: [PATCH 08/42] [UI] Add RunwayML on Admin UI supported models/providers (#16606) * add runway.png * add gen4_turbo --- .../_experimental/out/assets/logos/runway.png | Bin 0 -> 5165 bytes .../public/assets/logos/runway.png | Bin 0 -> 5165 bytes .../src/components/provider_info_helpers.tsx | 5 +++++ 3 files changed, 5 insertions(+) create mode 100644 litellm/proxy/_experimental/out/assets/logos/runway.png create mode 100644 ui/litellm-dashboard/public/assets/logos/runway.png diff --git a/litellm/proxy/_experimental/out/assets/logos/runway.png b/litellm/proxy/_experimental/out/assets/logos/runway.png new file mode 100644 index 0000000000000000000000000000000000000000..c909cb9e0f2115225cad95649df448caf3980f0b GIT binary patch literal 5165 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 literal 0 HcmV?d00001 diff --git a/ui/litellm-dashboard/public/assets/logos/runway.png b/ui/litellm-dashboard/public/assets/logos/runway.png new file mode 100644 index 0000000000000000000000000000000000000000..c909cb9e0f2115225cad95649df448caf3980f0b GIT binary patch literal 5165 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 literal 0 HcmV?d00001 diff --git a/ui/litellm-dashboard/src/components/provider_info_helpers.tsx b/ui/litellm-dashboard/src/components/provider_info_helpers.tsx index fb6162f304..f3b7357ffa 100644 --- a/ui/litellm-dashboard/src/components/provider_info_helpers.tsx +++ b/ui/litellm-dashboard/src/components/provider_info_helpers.tsx @@ -31,6 +31,7 @@ export enum Providers { Openrouter = "Openrouter", Oracle = "Oracle Cloud Infrastructure (OCI)", Perplexity = "Perplexity", + RunwayML = "RunwayML", Sambanova = "Sambanova", Snowflake = "Snowflake", TogetherAI = "TogetherAI", @@ -65,6 +66,7 @@ export const provider_map: Record = { Cerebras: "cerebras", Sambanova: "sambanova", Perplexity: "perplexity", + RunwayML: "runwayml", TogetherAI: "together_ai", Openrouter: "openrouter", Oracle: "oci", @@ -113,6 +115,7 @@ export const providerLogoMap: Record = { [Providers.Openrouter]: `${asset_logos_folder}openrouter.svg`, [Providers.Oracle]: `${asset_logos_folder}oracle.svg`, [Providers.Perplexity]: `${asset_logos_folder}perplexity-ai.svg`, + [Providers.RunwayML]: `${asset_logos_folder}runwayml.png`, [Providers.Sambanova]: `${asset_logos_folder}sambanova.svg`, [Providers.Snowflake]: `${asset_logos_folder}snowflake.svg`, [Providers.TogetherAI]: `${asset_logos_folder}togetherai.svg`, @@ -188,6 +191,8 @@ export const getPlaceholder = (selectedProvider: string): string => { return "deepinfra/"; } else if (selectedProvider == Providers.FalAI) { return "fal_ai/fal-ai/flux-pro/v1.1-ultra"; + } else if (selectedProvider == Providers.RunwayML) { + return "runwayml/gen4_turbo"; } else { return "gpt-3.5-turbo"; } From 792339200aa4c8f75bf42bc724bea26d2f05985c Mon Sep 17 00:00:00 2001 From: yuneng-jiang Date: Thu, 13 Nov 2025 21:48:57 -0800 Subject: [PATCH 09/42] Migrate Add Model Fields to backend (#16620) --- .../provider_create_metadata.py | 744 ++++++++++++++++++ .../public_endpoints/public_endpoints.py | 21 +- .../public_endpoints/public_endpoints.py | 21 +- .../test_provider_create_metadata.py | 55 ++ .../public_endpoints/test_public_endpoints.py | 22 + 5 files changed, 861 insertions(+), 2 deletions(-) create mode 100644 litellm/proxy/public_endpoints/provider_create_metadata.py create mode 100644 tests/test_litellm/proxy/public_endpoints/test_provider_create_metadata.py diff --git a/litellm/proxy/public_endpoints/provider_create_metadata.py b/litellm/proxy/public_endpoints/provider_create_metadata.py new file mode 100644 index 0000000000..f2ef03e2a0 --- /dev/null +++ b/litellm/proxy/public_endpoints/provider_create_metadata.py @@ -0,0 +1,744 @@ +from __future__ import annotations + +from typing import Any, Dict, List + +from litellm.types.proxy.public_endpoints.public_endpoints import ( + ProviderCreateInfo, + ProviderCredentialField, +) + +DEFAULT_MODEL_PLACEHOLDER = "gpt-3.5-turbo" + +_FALLBACK_FIELDS: List[Dict[str, Any]] = [ + { + "key": "api_base", + "label": "API Base", + "field_type": "text", + "required": False, + }, + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": False, + }, +] + +PROVIDER_BASE_INFO: Dict[str, Dict[str, Any]] = { + "AIML": { + "provider_display_name": "AI/ML API", + "litellm_provider": "aiml", + "default_model_placeholder": "aiml/flux-pro/v1.1", + }, + "Anthropic": { + "provider_display_name": "Anthropic", + "litellm_provider": "anthropic", + "default_model_placeholder": "claude-3-opus", + }, + "AssemblyAI": { + "provider_display_name": "AssemblyAI", + "litellm_provider": "assemblyai", + }, + "Azure": { + "provider_display_name": "Azure", + "litellm_provider": "azure", + "default_model_placeholder": "azure/my-deployment", + }, + "Azure_AI_Studio": { + "provider_display_name": "Azure AI Foundry (Studio)", + "litellm_provider": "azure_ai", + "default_model_placeholder": "azure_ai/command-r-plus", + }, + "Bedrock": { + "provider_display_name": "Amazon Bedrock", + "litellm_provider": "bedrock", + "default_model_placeholder": "claude-3-opus", + }, + "Cerebras": { + "provider_display_name": "Cerebras", + "litellm_provider": "cerebras", + }, + "Cohere": { + "provider_display_name": "Cohere", + "litellm_provider": "cohere", + }, + "Dashscope": { + "provider_display_name": "Dashscope", + "litellm_provider": "dashscope", + }, + "Databricks": { + "provider_display_name": "Databricks (Qwen API)", + "litellm_provider": "databricks", + }, + "DeepInfra": { + "provider_display_name": "DeepInfra", + "litellm_provider": "deepinfra", + "default_model_placeholder": "deepinfra/", + }, + "Deepgram": { + "provider_display_name": "Deepgram", + "litellm_provider": "deepgram", + }, + "Deepseek": { + "provider_display_name": "Deepseek", + "litellm_provider": "deepseek", + }, + "ElevenLabs": { + "provider_display_name": "ElevenLabs", + "litellm_provider": "elevenlabs", + }, + "FalAI": { + "provider_display_name": "Fal AI", + "litellm_provider": "fal_ai", + "default_model_placeholder": "fal_ai/fal-ai/flux-pro/v1.1-ultra", + }, + "FireworksAI": { + "provider_display_name": "Fireworks AI", + "litellm_provider": "fireworks_ai", + }, + "Google_AI_Studio": { + "provider_display_name": "Google AI Studio", + "litellm_provider": "gemini", + "default_model_placeholder": "gemini-pro", + }, + "GradientAI": { + "provider_display_name": "GradientAI", + "litellm_provider": "gradient_ai", + }, + "Groq": { + "provider_display_name": "Groq", + "litellm_provider": "groq", + }, + "Hosted_Vllm": { + "provider_display_name": "vllm", + "litellm_provider": "hosted_vllm", + }, + "Infinity": { + "provider_display_name": "Infinity", + "litellm_provider": "infinity", + }, + "JinaAI": { + "provider_display_name": "Jina AI", + "litellm_provider": "jina_ai", + "default_model_placeholder": "jina_ai/", + }, + "MistralAI": { + "provider_display_name": "Mistral AI", + "litellm_provider": "mistral", + }, + "Ollama": { + "provider_display_name": "Ollama", + "litellm_provider": "ollama", + }, + "OpenAI": { + "provider_display_name": "OpenAI", + "litellm_provider": "openai", + }, + "OpenAI_Compatible": { + "provider_display_name": "OpenAI-Compatible Endpoints (Together AI, etc.)", + "litellm_provider": "openai", + }, + "OpenAI_Text": { + "provider_display_name": "OpenAI Text Completion", + "litellm_provider": "text-completion-openai", + }, + "OpenAI_Text_Compatible": { + "provider_display_name": "OpenAI-Compatible Text Completion Models (Together AI, etc.)", + "litellm_provider": "text-completion-openai", + }, + "Openrouter": { + "provider_display_name": "Openrouter", + "litellm_provider": "openrouter", + }, + "Oracle": { + "provider_display_name": "Oracle Cloud Infrastructure (OCI)", + "litellm_provider": "oci", + "default_model_placeholder": "oci/xai.grok-4", + }, + "Perplexity": { + "provider_display_name": "Perplexity", + "litellm_provider": "perplexity", + }, + "SageMaker": { + "provider_display_name": "AWS SageMaker", + "litellm_provider": "sagemaker_chat", + "default_model_placeholder": "sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b", + }, + "Sambanova": { + "provider_display_name": "Sambanova", + "litellm_provider": "sambanova", + }, + "Snowflake": { + "provider_display_name": "Snowflake", + "litellm_provider": "snowflake", + "default_model_placeholder": "snowflake/mistral-7b", + }, + "TogetherAI": { + "provider_display_name": "TogetherAI", + "litellm_provider": "together_ai", + }, + "Triton": { + "provider_display_name": "Triton", + "litellm_provider": "triton", + }, + "Vertex_AI": { + "provider_display_name": "Vertex AI (Anthropic, Gemini, etc.)", + "litellm_provider": "vertex_ai", + "default_model_placeholder": "gemini-pro", + }, + "VolcEngine": { + "provider_display_name": "VolcEngine", + "litellm_provider": "volcengine", + "default_model_placeholder": "volcengine/", + }, + "Voyage": { + "provider_display_name": "Voyage AI", + "litellm_provider": "voyage", + "default_model_placeholder": "voyage/", + }, + "xAI": { + "provider_display_name": "xAI", + "litellm_provider": "xai", + }, +} + +PROVIDER_CREDENTIAL_FIELDS: Dict[str, List[Dict[str, Any]]] = { + "OpenAI": [ + { + "key": "api_base", + "label": "API Base", + "field_type": "text", + "placeholder": "https://api.openai.com/v1", + "tooltip": "Common endpoints: https://api.openai.com/v1, https://eu.api.openai.com, https://us.api.openai.com", + "default_value": "https://api.openai.com/v1", + }, + { + "key": "organization", + "label": "OpenAI Organization ID", + "placeholder": "[OPTIONAL] my-unique-org", + }, + { + "key": "api_key", + "label": "OpenAI API Key", + "field_type": "password", + "required": True, + }, + ], + "OpenAI_Text": [ + { + "key": "api_base", + "label": "API Base", + "field_type": "text", + "placeholder": "https://api.openai.com/v1", + "tooltip": "Common endpoints: https://api.openai.com/v1, https://eu.api.openai.com, https://us.api.openai.com", + "default_value": "https://api.openai.com/v1", + }, + { + "key": "organization", + "label": "OpenAI Organization ID", + "placeholder": "[OPTIONAL] my-unique-org", + }, + { + "key": "api_key", + "label": "OpenAI API Key", + "field_type": "password", + "required": True, + }, + ], + "Vertex_AI": [ + { + "key": "vertex_project", + "label": "Vertex Project", + "placeholder": "adroit-cadet-1234..", + "required": True, + }, + { + "key": "vertex_location", + "label": "Vertex Location", + "placeholder": "us-east-1", + "required": True, + }, + { + "key": "vertex_credentials", + "label": "Vertex Credentials", + "field_type": "upload", + "required": True, + }, + ], + "AssemblyAI": [ + { + "key": "api_base", + "label": "API Base", + "field_type": "select", + "required": True, + "options": [ + "https://api.assemblyai.com", + "https://api.eu.assemblyai.com", + ], + }, + { + "key": "api_key", + "label": "AssemblyAI API Key", + "field_type": "password", + "required": True, + }, + ], + "Azure": [ + { + "key": "api_base", + "label": "API Base", + "placeholder": "https://...", + "required": True, + }, + { + "key": "api_version", + "label": "API Version", + "placeholder": "2023-07-01-preview", + "tooltip": "By default litellm will use the latest version. If you want to use a different version, you can specify it here", + }, + { + "key": "base_model", + "label": "Base Model", + "placeholder": "azure/gpt-3.5-turbo", + }, + { + "key": "api_key", + "label": "Azure API Key", + "field_type": "password", + "placeholder": "Enter your Azure API Key", + }, + { + "key": "azure_ad_token", + "label": "Azure AD Token", + "field_type": "password", + "placeholder": "Enter your Azure AD Token", + }, + ], + "Azure_AI_Studio": [ + { + "key": "api_base", + "label": "API Base", + "placeholder": "https://.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-10-21", + "tooltip": "Enter your full Target URI from Azure Foundry here. Example: https://litellm8397336933.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-10-21", + "required": True, + }, + { + "key": "api_key", + "label": "Azure API Key", + "field_type": "password", + "required": True, + }, + ], + "OpenAI_Compatible": [ + { + "key": "api_base", + "label": "API Base", + "placeholder": "https://...", + "required": True, + }, + { + "key": "api_key", + "label": "OpenAI API Key", + "field_type": "password", + "required": True, + }, + ], + "Dashscope": [ + { + "key": "api_key", + "label": "Dashscope API Key", + "field_type": "password", + "required": True, + }, + { + "key": "api_base", + "label": "API Base", + "placeholder": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", + "default_value": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", + "required": True, + "tooltip": "The base URL for your Dashscope server. Defaults to https://dashscope-intl.aliyuncs.com/compatible-mode/v1 if not specified.", + }, + ], + "OpenAI_Text_Compatible": [ + { + "key": "api_base", + "label": "API Base", + "placeholder": "https://...", + "required": True, + }, + { + "key": "api_key", + "label": "OpenAI API Key", + "field_type": "password", + "required": True, + }, + ], + "Bedrock": [ + { + "key": "aws_access_key_id", + "label": "AWS Access Key ID", + "field_type": "password", + "tooltip": "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", + }, + { + "key": "aws_secret_access_key", + "label": "AWS Secret Access Key", + "field_type": "password", + "tooltip": "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", + }, + { + "key": "aws_session_token", + "label": "AWS Session Token", + "field_type": "password", + "tooltip": "Temporary credentials session token. You can provide the raw token or the environment variable (e.g. `os.environ/MY_SESSION_TOKEN`).", + }, + { + "key": "aws_region_name", + "label": "AWS Region Name", + "placeholder": "us-east-1", + "tooltip": "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", + }, + { + "key": "aws_session_name", + "label": "AWS Session Name", + "placeholder": "my-session", + "tooltip": "Name for the AWS session. You can provide the raw value or the environment variable (e.g. `os.environ/MY_SESSION_NAME`).", + }, + { + "key": "aws_profile_name", + "label": "AWS Profile Name", + "placeholder": "default", + "tooltip": "AWS profile name to use for authentication. You can provide the raw value or the environment variable (e.g. `os.environ/MY_PROFILE_NAME`).", + }, + { + "key": "aws_role_name", + "label": "AWS Role Name", + "placeholder": "MyRole", + "tooltip": "AWS IAM role name to assume. You can provide the raw value or the environment variable (e.g. `os.environ/MY_ROLE_NAME`).", + }, + { + "key": "aws_web_identity_token", + "label": "AWS Web Identity Token", + "field_type": "password", + "tooltip": "Web identity token for OIDC authentication. You can provide the raw token or the environment variable (e.g. `os.environ/MY_WEB_IDENTITY_TOKEN`).", + }, + { + "key": "aws_bedrock_runtime_endpoint", + "label": "AWS Bedrock Runtime Endpoint", + "placeholder": "https://bedrock-runtime.us-east-1.amazonaws.com", + "tooltip": "Custom Bedrock runtime endpoint URL. You can provide the raw value or the environment variable (e.g. `os.environ/MY_BEDROCK_ENDPOINT`).", + }, + ], + "SageMaker": [ + { + "key": "aws_access_key_id", + "label": "AWS Access Key ID", + "field_type": "password", + "tooltip": "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", + }, + { + "key": "aws_secret_access_key", + "label": "AWS Secret Access Key", + "field_type": "password", + "tooltip": "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", + }, + { + "key": "aws_region_name", + "label": "AWS Region Name", + "placeholder": "us-east-1", + "tooltip": "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", + }, + ], + "Ollama": [ + { + "key": "api_base", + "label": "API Base", + "placeholder": "http://localhost:11434", + "default_value": "http://localhost:11434", + "tooltip": "The base URL for your Ollama server. Defaults to http://localhost:11434 if not specified.", + }, + ], + "Anthropic": [ + { + "key": "api_key", + "label": "API Key", + "placeholder": "sk-", + "field_type": "password", + "required": True, + }, + ], + "Deepgram": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "ElevenLabs": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "Google_AI_Studio": [ + { + "key": "api_key", + "label": "API Key", + "placeholder": "aig-", + "field_type": "password", + "required": True, + }, + ], + "Groq": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "MistralAI": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "Deepseek": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "Cohere": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "Databricks": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "xAI": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "AIML": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "Cerebras": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "Sambanova": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "Perplexity": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "TogetherAI": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "Openrouter": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "FireworksAI": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "GradientAI": [ + { + "key": "api_base", + "label": "GradientAI Endpoint", + "placeholder": "https://...", + }, + { + "key": "api_key", + "label": "GradientAI API Key", + "field_type": "password", + "required": True, + }, + ], + "Triton": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + }, + { + "key": "api_base", + "label": "API Base", + "placeholder": "http://localhost:8000/generate", + }, + ], + "Hosted_Vllm": [ + { + "key": "api_base", + "label": "API Base", + "placeholder": "https://...", + "required": True, + }, + { + "key": "api_key", + "label": "vLLM API Key", + "field_type": "password", + }, + ], + "Voyage": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "JinaAI": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "VolcEngine": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "DeepInfra": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "Oracle": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], + "Snowflake": [ + { + "key": "api_key", + "label": "Snowflake API Key / JWT Key for Authentication", + "field_type": "password", + "required": True, + }, + { + "key": "api_base", + "label": "Snowflake API Endpoint", + "placeholder": "https://1234567890.snowflakecomputing.com/api/v2/cortex/inference:complete", + "tooltip": "Enter the full endpoint with path here. Example: https://1234567890.snowflakecomputing.com/api/v2/cortex/inference:complete", + "required": True, + }, + ], + "Infinity": [ + { + "key": "api_base", + "label": "API Base", + "placeholder": "http://localhost:7997", + }, + ], + "FalAI": [ + { + "key": "api_key", + "label": "API Key", + "field_type": "password", + "required": True, + }, + ], +} + + +def _normalize_field(field: Dict[str, Any]) -> ProviderCredentialField: + return ProviderCredentialField( + key=field["key"], + label=field["label"], + placeholder=field.get("placeholder"), + tooltip=field.get("tooltip"), + required=field.get("required", False), + field_type=field.get("field_type", "text"), + options=field.get("options"), + default_value=field.get("default_value"), + ) + + +def get_provider_create_metadata() -> List[ProviderCreateInfo]: + providers: List[ProviderCreateInfo] = [] + + for provider_key, base_info in PROVIDER_BASE_INFO.items(): + raw_fields = PROVIDER_CREDENTIAL_FIELDS.get(provider_key, _FALLBACK_FIELDS) + normalized_fields = [_normalize_field(field) for field in raw_fields] + + providers.append( + ProviderCreateInfo( + provider=provider_key, + provider_display_name=base_info["provider_display_name"], + litellm_provider=base_info["litellm_provider"], + default_model_placeholder=base_info.get( + "default_model_placeholder", DEFAULT_MODEL_PLACEHOLDER + ), + credential_fields=normalized_fields, + ) + ) + + providers.sort(key=lambda item: item.provider_display_name.lower()) + return providers + diff --git a/litellm/proxy/public_endpoints/public_endpoints.py b/litellm/proxy/public_endpoints/public_endpoints.py index 2cc3dd0ed4..8c1e6b74b3 100644 --- a/litellm/proxy/public_endpoints/public_endpoints.py +++ b/litellm/proxy/public_endpoints/public_endpoints.py @@ -3,11 +3,17 @@ from typing import List from fastapi import APIRouter, Depends, HTTPException from litellm.proxy._types import CommonProxyErrors +from litellm.proxy.public_endpoints.provider_create_metadata import ( + get_provider_create_metadata, +) from litellm.proxy.auth.user_api_key_auth import user_api_key_auth from litellm.types.proxy.management_endpoints.model_management_endpoints import ( ModelGroupInfoProxy, ) -from litellm.types.proxy.public_endpoints.public_endpoints import PublicModelHubInfo +from litellm.types.proxy.public_endpoints.public_endpoints import ( + PublicModelHubInfo, + ProviderCreateInfo, +) from litellm.types.utils import LlmProviders router = APIRouter() @@ -74,3 +80,16 @@ async def get_supported_providers() -> List[str]: """ return sorted(provider.value for provider in LlmProviders) + + +@router.get( + "/public/providers/fields", + tags=["public", "providers"], + response_model=List[ProviderCreateInfo], +) +async def get_provider_fields() -> List[ProviderCreateInfo]: + """ + Return provider metadata required by the dashboard create-model flow. + """ + + return get_provider_create_metadata() diff --git a/litellm/types/proxy/public_endpoints/public_endpoints.py b/litellm/types/proxy/public_endpoints/public_endpoints.py index b2949a719e..7edf05dc94 100644 --- a/litellm/types/proxy/public_endpoints/public_endpoints.py +++ b/litellm/types/proxy/public_endpoints/public_endpoints.py @@ -1,4 +1,4 @@ -from typing import Dict, Optional +from typing import Dict, List, Literal, Optional from pydantic import BaseModel @@ -8,3 +8,22 @@ class PublicModelHubInfo(BaseModel): custom_docs_description: Optional[str] litellm_version: str useful_links: Optional[Dict[str, str]] + + +class ProviderCredentialField(BaseModel): + key: str + label: str + placeholder: Optional[str] = None + tooltip: Optional[str] = None + required: bool = False + field_type: Literal["text", "password", "select", "upload"] = "text" + options: Optional[List[str]] = None + default_value: Optional[str] = None + + +class ProviderCreateInfo(BaseModel): + provider: str + provider_display_name: str + litellm_provider: str + credential_fields: List[ProviderCredentialField] + default_model_placeholder: Optional[str] = None diff --git a/tests/test_litellm/proxy/public_endpoints/test_provider_create_metadata.py b/tests/test_litellm/proxy/public_endpoints/test_provider_create_metadata.py new file mode 100644 index 0000000000..6676720b7a --- /dev/null +++ b/tests/test_litellm/proxy/public_endpoints/test_provider_create_metadata.py @@ -0,0 +1,55 @@ +import os +import sys +from copy import deepcopy + +import pytest + +sys.path.insert(0, os.path.abspath("../../..")) + +import litellm.proxy.public_endpoints.provider_create_metadata as pcm # noqa: E402 +from litellm.proxy.public_endpoints.provider_create_metadata import ( # noqa: E402 + _normalize_field, + get_provider_create_metadata, +) + + +def test_get_provider_create_metadata_includes_openai_fields(): + metadata = get_provider_create_metadata() + + openai_info = next(item for item in metadata if item.provider == "OpenAI") + + assert openai_info.provider_display_name == "OpenAI" + assert openai_info.litellm_provider == "openai" + keys = {field.key for field in openai_info.credential_fields} + assert {"api_base", "api_key"}.issubset(keys) + + +def test_get_provider_create_metadata_returns_sorted_display_names(): + metadata = get_provider_create_metadata() + display_names = [item.provider_display_name for item in metadata] + + assert display_names == sorted(display_names, key=str.lower) + + +def test_get_provider_create_metadata_uses_fallback_fields(monkeypatch): + overridden_fields = deepcopy(pcm.PROVIDER_CREDENTIAL_FIELDS) + overridden_fields.pop("Azure", None) + monkeypatch.setattr(pcm, "PROVIDER_CREDENTIAL_FIELDS", overridden_fields) + + metadata = get_provider_create_metadata() + azure_info = next(item for item in metadata if item.provider == "Azure") + + fallback_keys = [field.key for field in azure_info.credential_fields] + assert fallback_keys == ["api_base", "api_key"] + assert all(field.required is False for field in azure_info.credential_fields) + + +def test_normalize_field_applies_defaults(): + normalized = _normalize_field({"key": "api_key", "label": "API Key"}) + + assert normalized.key == "api_key" + assert normalized.label == "API Key" + assert normalized.field_type == "text" + assert normalized.required is False + assert normalized.placeholder is None + assert normalized.options is None diff --git a/tests/test_litellm/proxy/public_endpoints/test_public_endpoints.py b/tests/test_litellm/proxy/public_endpoints/test_public_endpoints.py index 89f9dd0987..f433c64c58 100644 --- a/tests/test_litellm/proxy/public_endpoints/test_public_endpoints.py +++ b/tests/test_litellm/proxy/public_endpoints/test_public_endpoints.py @@ -23,3 +23,25 @@ def test_get_supported_providers_returns_enum_values(): expected_providers = sorted(provider.value for provider in LlmProviders) assert response.json() == expected_providers + +def test_get_provider_fields_returns_metadata(): + app = FastAPI() + app.include_router(router) + client = TestClient(app) + + response = client.get("/public/providers/fields") + + assert response.status_code == 200 + payload = response.json() + assert isinstance(payload, list) + + provider_lookup = {item["provider"]: item for item in payload} + assert "OpenAI" in provider_lookup + + openai_fields = provider_lookup["OpenAI"] + assert openai_fields["provider_display_name"] == "OpenAI" + assert openai_fields["litellm_provider"] == "openai" + + credential_keys = {field["key"] for field in openai_fields["credential_fields"]} + assert {"api_base", "api_key"}.issubset(credential_keys) + From 44bb18a6ba6bd14341cf6cf5fcdaed11d59cda36 Mon Sep 17 00:00:00 2001 From: pnookala-godaddy <93624827+pnookala-godaddy@users.noreply.github.com> Date: Thu, 13 Nov 2025 21:51:27 -0800 Subject: [PATCH 10/42] fix: forward OpenAI organization for image generation (#16607) --- litellm/images/main.py | 3 ++ litellm/llms/openai/openai.py | 6 +++- tests/llm_translation/test_openai.py | 42 ++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/litellm/images/main.py b/litellm/images/main.py index ce6da640f9..333a751b04 100644 --- a/litellm/images/main.py +++ b/litellm/images/main.py @@ -400,6 +400,8 @@ def image_generation( # noqa: PLR0915 or custom_llm_provider == LlmProviders.LITELLM_PROXY.value or custom_llm_provider in litellm.openai_compatible_providers ): + # Forward OpenAI organization if present (set by proxy pre-call utils) + organization: Optional[str] = kwargs.get("organization", None) model_response = openai_chat_completions.image_generation( model=model, prompt=prompt, @@ -409,6 +411,7 @@ def image_generation( # noqa: PLR0915 logging_obj=litellm_logging_obj, optional_params=optional_params, model_response=model_response, + organization=organization, aimg_generation=aimg_generation, client=client, ) diff --git a/litellm/llms/openai/openai.py b/litellm/llms/openai/openai.py index 492ed62423..2949e35e5e 100644 --- a/litellm/llms/openai/openai.py +++ b/litellm/llms/openai/openai.py @@ -1285,6 +1285,7 @@ class OpenAIChatCompletion(BaseLLM, BaseOpenAILLM): api_base: Optional[str] = None, client=None, max_retries=None, + organization: Optional[str] = None, ): response = None try: @@ -1294,6 +1295,7 @@ class OpenAIChatCompletion(BaseLLM, BaseOpenAILLM): api_base=api_base, timeout=timeout, max_retries=max_retries, + organization=organization, client=client, ) @@ -1328,6 +1330,7 @@ class OpenAIChatCompletion(BaseLLM, BaseOpenAILLM): model_response: Optional[ImageResponse] = None, client=None, aimg_generation=None, + organization: Optional[str] = None, ) -> ImageResponse: data = {} try: @@ -1337,7 +1340,7 @@ class OpenAIChatCompletion(BaseLLM, BaseOpenAILLM): raise OpenAIError(status_code=422, message="max retries must be an int") if aimg_generation is True: - return self.aimage_generation(data=data, prompt=prompt, logging_obj=logging_obj, model_response=model_response, api_base=api_base, api_key=api_key, timeout=timeout, client=client, max_retries=max_retries) # type: ignore + return self.aimage_generation(data=data, prompt=prompt, logging_obj=logging_obj, model_response=model_response, api_base=api_base, api_key=api_key, timeout=timeout, client=client, max_retries=max_retries, organization=organization) # type: ignore openai_client: OpenAI = self._get_openai_client( # type: ignore is_async=False, @@ -1345,6 +1348,7 @@ class OpenAIChatCompletion(BaseLLM, BaseOpenAILLM): api_base=api_base, timeout=timeout, max_retries=max_retries, + organization=organization, client=client, ) diff --git a/tests/llm_translation/test_openai.py b/tests/llm_translation/test_openai.py index 1b96a99621..ba1d9e6ac2 100644 --- a/tests/llm_translation/test_openai.py +++ b/tests/llm_translation/test_openai.py @@ -337,6 +337,48 @@ def test_openai_max_retries_0(mock_get_openai_client): assert mock_get_openai_client.call_args.kwargs["max_retries"] == 0 +@patch("litellm.main.openai_chat_completions._get_openai_client") +def test_openai_image_generation_forwards_organization(mock_get_openai_client): + """Ensure organization flows to OpenAI client for image generation.""" + + class _DummyImages: + def generate(self, **kwargs): # type: ignore + class _Resp: + def model_dump(self_inner): # minimal OpenAI ImagesResponse shape + return { + "created": 123, + "data": [{"url": "http://example.com/image.png"}], + "usage": {"input_tokens": 0, "output_tokens": 0, "total_tokens": 0}, + } + + return _Resp() + + class _DummyClient: + def __init__(self): + self.api_key = "sk-test" + + class _BaseURL: + _uri_reference = "https://api.openai.com/v1" + + self._base_url = _BaseURL() + self.images = _DummyImages() + + mock_get_openai_client.return_value = _DummyClient() + + org = "org_test_123" + resp = litellm.image_generation( + model="gpt-image-1", + prompt="A cute baby sea otter", + organization=org, + ) + + # Assert organization forwarded into OpenAI client factory + assert mock_get_openai_client.call_args.kwargs.get("organization") == org + + # Basic sanity on response shape + assert hasattr(resp, "data") and len(resp.data) == 1 + + @pytest.mark.parametrize("model", ["o1", "o3-mini"]) def test_o1_parallel_tool_calls(model): litellm.completion( From 331be4f57b519e2aa3e054f286a583d7802ce916 Mon Sep 17 00:00:00 2001 From: YutaSaito <36355491+uc4w6c@users.noreply.github.com> Date: Fri, 14 Nov 2025 15:01:11 +0900 Subject: [PATCH 11/42] fix: avoid crashing when MCP server record lacks credentials (#16601) --- .../mcp_management_endpoints.py | 4 +- .../test_mcp_management_endpoints.py | 45 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/management_endpoints/mcp_management_endpoints.py b/litellm/proxy/management_endpoints/mcp_management_endpoints.py index 22874ca8f1..4e8db85e5e 100644 --- a/litellm/proxy/management_endpoints/mcp_management_endpoints.py +++ b/litellm/proxy/management_endpoints/mcp_management_endpoints.py @@ -68,7 +68,9 @@ if MCP_AVAILABLE: except AttributeError: redacted_server = mcp_server.copy(deep=True) # type: ignore[attr-defined] - redacted_server.credentials = None + if hasattr(redacted_server, "credentials"): + setattr(redacted_server, "credentials", None) + return redacted_server def _redact_mcp_credentials_list( diff --git a/tests/test_litellm/proxy/management_endpoints/test_mcp_management_endpoints.py b/tests/test_litellm/proxy/management_endpoints/test_mcp_management_endpoints.py index 2102fe71b1..6c22837a09 100644 --- a/tests/test_litellm/proxy/management_endpoints/test_mcp_management_endpoints.py +++ b/tests/test_litellm/proxy/management_endpoints/test_mcp_management_endpoints.py @@ -520,6 +520,51 @@ class TestListMCPServers: assert mock_server.credentials == {"auth_value": "top-secret"} assert result.status == "healthy" + @pytest.mark.asyncio + async def test_fetch_single_mcp_server_handles_missing_credentials_field(self): + mock_server = generate_mock_mcp_server_db_record( + server_id="server-2", alias="Server 2" + ) + # Simulate ORM object without credentials attribute (e.g., older schema) + delattr(mock_server, "credentials") + + mock_prisma_client = MagicMock() + mock_health_result = { + "status": "healthy", + "last_health_check": datetime.now().isoformat(), + "error": None, + } + + mock_user_auth = generate_mock_user_api_key_auth( + user_role=LitellmUserRoles.PROXY_ADMIN + ) + + with patch( + "litellm.proxy.management_endpoints.mcp_management_endpoints.get_prisma_client_or_throw", + return_value=mock_prisma_client, + ), patch( + "litellm.proxy.management_endpoints.mcp_management_endpoints.get_mcp_server", + AsyncMock(return_value=mock_server), + ), patch( + "litellm.proxy.management_endpoints.mcp_management_endpoints.global_mcp_server_manager.health_check_server", + AsyncMock(return_value=mock_health_result), + ), patch( + "litellm.proxy.management_endpoints.mcp_management_endpoints._user_has_admin_view", + return_value=True, + ): + from litellm.proxy.management_endpoints.mcp_management_endpoints import ( + fetch_mcp_server, + ) + + result = await fetch_mcp_server( + server_id="server-2", user_api_key_dict=mock_user_auth + ) + + assert result.server_id == "server-2" + # credentials attribute should still be absent and no exception raised + assert not hasattr(result, "credentials") + assert result.status == "healthy" + class TestMCPHealthCheckEndpoints: """Test MCP health check endpoints""" From 01065a128401f2b00e8b5a6febb83794b9d5b69b Mon Sep 17 00:00:00 2001 From: yuneng-jiang Date: Thu, 13 Nov 2025 22:02:07 -0800 Subject: [PATCH 12/42] Fixed inconsistent button sizes and variants (#16600) --- .../src/components/model_info_view.tsx | 14 +--- .../organization/organization_view.test.tsx | 84 +++++++++++++++++++ .../organization/organization_view.tsx | 52 ++++++------ .../src/components/public_model_hub.tsx | 1 - .../components/templates/key_edit_view.tsx | 6 +- .../components/templates/key_info_view.tsx | 4 +- .../view_users/user_info_view.test.tsx | 51 +++++++++++ .../components/view_users/user_info_view.tsx | 4 +- 8 files changed, 171 insertions(+), 45 deletions(-) create mode 100644 ui/litellm-dashboard/src/components/organization/organization_view.test.tsx create mode 100644 ui/litellm-dashboard/src/components/view_users/user_info_view.test.tsx diff --git a/ui/litellm-dashboard/src/components/model_info_view.tsx b/ui/litellm-dashboard/src/components/model_info_view.tsx index 9095937d82..e90cc361a6 100644 --- a/ui/litellm-dashboard/src/components/model_info_view.tsx +++ b/ui/litellm-dashboard/src/components/model_info_view.tsx @@ -493,22 +493,14 @@ export default function ModelInfoView({ Model Settings
{isAutoRouter && canEditModel && !isEditing && ( - setIsAutoRouterModalOpen(true)} - className="flex items-center" - > + setIsAutoRouterModalOpen(true)} className="flex items-center"> Edit Auto Router )} {canEditModel ? ( !isEditing && ( - setIsEditing(true)} - className="flex items-center" - > - Edit Model + setIsEditing(true)} className="flex items-center"> + Edit Settings ) ) : ( diff --git a/ui/litellm-dashboard/src/components/organization/organization_view.test.tsx b/ui/litellm-dashboard/src/components/organization/organization_view.test.tsx new file mode 100644 index 0000000000..0be03169e8 --- /dev/null +++ b/ui/litellm-dashboard/src/components/organization/organization_view.test.tsx @@ -0,0 +1,84 @@ +import React from "react"; +import { render, waitFor } from "@testing-library/react"; +import { vi, test, expect } from "vitest"; +import OrganizationInfoView from "./organization_view"; + +// Mock networking calls used by the component +vi.mock("../networking", () => { + return { + __esModule: true, + organizationInfoCall: vi.fn(), + organizationMemberAddCall: vi.fn(), + organizationMemberUpdateCall: vi.fn(), + organizationMemberDeleteCall: vi.fn(), + organizationUpdateCall: vi.fn(), + }; +}); + +// Mock noisy/heavy child components to keep this test focused on render +vi.mock("../object_permissions_view", () => ({ + __esModule: true, + default: () =>
, +})); +vi.mock("../molecules/notifications_manager", () => ({ + __esModule: true, + default: { success: vi.fn(), fromBackend: vi.fn() }, +})); +vi.mock("../team/edit_membership", () => ({ + __esModule: true, + default: () => null, +})); +vi.mock("../common_components/user_search_modal", () => ({ + __esModule: true, + default: () => null, +})); +vi.mock("../vector_store_management/VectorStoreSelector", () => ({ + __esModule: true, + default: () => null, +})); +vi.mock("../mcp_server_management/MCPServerSelector", () => ({ + __esModule: true, + default: () => null, +})); + +const mockOrg = { + organization_alias: "Acme Corp", + organization_id: "org_123", + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), + created_by: "admin@example.com", + spend: 0, + models: ["gpt-4o-mini"], + litellm_budget_table: { + tpm_limit: null, + rpm_limit: null, + max_budget: 1000, + budget_duration: "30d", + max_parallel_requests: null, + }, + object_permission: {}, + members: [], + teams: [], + metadata: null, +}; + +test("renders organization view after loading data", async () => { + const { organizationInfoCall } = await import("../networking"); + (organizationInfoCall as unknown as ReturnType).mockResolvedValueOnce(mockOrg); + + const { findAllByText } = render( + {}} + accessToken="test-token" + is_org_admin={false} + is_proxy_admin={false} + userModels={[]} + editOrg={false} + />, + ); + + await waitFor(() => { + expect(findAllByText("Acme Corp")).toBeTruthy(); + }); +}); diff --git a/ui/litellm-dashboard/src/components/organization/organization_view.tsx b/ui/litellm-dashboard/src/components/organization/organization_view.tsx index 17e21baedf..b284519ce1 100644 --- a/ui/litellm-dashboard/src/components/organization/organization_view.tsx +++ b/ui/litellm-dashboard/src/components/organization/organization_view.tsx @@ -1,46 +1,46 @@ -import React, { useState, useEffect } from "react"; +import { formatNumberWithCommas, copyToClipboard as utilCopyToClipboard } from "@/utils/dataUtils"; +import { ArrowLeftIcon, PencilAltIcon, TrashIcon } from "@heroicons/react/outline"; import { - Card, - Title, - Text, - TextInput, - Tab, - TabList, - TabGroup, - TabPanel, - TabPanels, - Grid, Badge, + Card, + Grid, + Icon, + Tab, + TabGroup, Table, - TableHead, - TableRow, - TableHeaderCell, TableBody, TableCell, + TableHead, + TableHeaderCell, + TableRow, + TabList, + TabPanel, + TabPanels, + Text, + TextInput, + Title, Button as TremorButton, - Icon, } from "@tremor/react"; -import NumericalInput from "../shared/numerical_input"; import { Button, Form, Input, Select } from "antd"; -import { ArrowLeftIcon, PencilAltIcon, TrashIcon } from "@heroicons/react/outline"; +import { CheckIcon, CopyIcon } from "lucide-react"; +import React, { useEffect, useState } from "react"; +import UserSearchModal from "../common_components/user_search_modal"; import { getModelDisplayName } from "../key_team_helpers/fetch_available_models_team_key"; +import MCPServerSelector from "../mcp_server_management/MCPServerSelector"; +import NotificationsManager from "../molecules/notifications_manager"; import { Member, Organization, organizationInfoCall, organizationMemberAddCall, - organizationMemberUpdateCall, organizationMemberDeleteCall, + organizationMemberUpdateCall, organizationUpdateCall, } from "../networking"; -import UserSearchModal from "../common_components/user_search_modal"; -import MemberModal from "../team/edit_membership"; import ObjectPermissionsView from "../object_permissions_view"; +import NumericalInput from "../shared/numerical_input"; +import MemberModal from "../team/edit_membership"; import VectorStoreSelector from "../vector_store_management/VectorStoreSelector"; -import MCPServerSelector from "../mcp_server_management/MCPServerSelector"; -import { copyToClipboard as utilCopyToClipboard, formatNumberWithCommas } from "@/utils/dataUtils"; -import { CheckIcon, CopyIcon } from "lucide-react"; -import NotificationsManager from "../molecules/notifications_manager"; interface OrganizationInfoProps { organizationId: string; @@ -492,7 +492,9 @@ const OrganizationInfoView: React.FC = ({
- + setIsEditing(false)}> + Cancel + Save Changes
diff --git a/ui/litellm-dashboard/src/components/public_model_hub.tsx b/ui/litellm-dashboard/src/components/public_model_hub.tsx index b1a0cc9021..c32c7462a5 100644 --- a/ui/litellm-dashboard/src/components/public_model_hub.tsx +++ b/ui/litellm-dashboard/src/components/public_model_hub.tsx @@ -14,7 +14,6 @@ import { getProviderLogoAndName } from "./provider_info_helpers"; import Navbar from "./navbar"; import { ThemeProvider } from "@/contexts/ThemeContext"; import NotificationsManager from "./molecules/notifications_manager"; -// Simple approach without react-markdown dependency interface ModelGroupInfo { model_group: string; diff --git a/ui/litellm-dashboard/src/components/templates/key_edit_view.tsx b/ui/litellm-dashboard/src/components/templates/key_edit_view.tsx index d90b9e32f7..caa9729d4e 100644 --- a/ui/litellm-dashboard/src/components/templates/key_edit_view.tsx +++ b/ui/litellm-dashboard/src/components/templates/key_edit_view.tsx @@ -1,6 +1,6 @@ import GuardrailSelector from "@/components/guardrails/GuardrailSelector"; import { TextInput, Button as TremorButton } from "@tremor/react"; -import { Button as AntdButton, Form, Input, Select, Tooltip } from "antd"; +import { Form, Input, Select, Tooltip } from "antd"; import { useEffect, useState } from "react"; import { mapInternalToDisplayNames } from "../callback_info_helpers"; import KeyLifecycleSettings from "../common_components/KeyLifecycleSettings"; @@ -548,7 +548,9 @@ export function KeyEditView({
- Cancel + + Cancel + Save Changes
diff --git a/ui/litellm-dashboard/src/components/templates/key_info_view.tsx b/ui/litellm-dashboard/src/components/templates/key_info_view.tsx index 411d73a90c..58b8363e30 100644 --- a/ui/litellm-dashboard/src/components/templates/key_info_view.tsx +++ b/ui/litellm-dashboard/src/components/templates/key_info_view.tsx @@ -545,9 +545,7 @@ export default function KeyInfoView({
Key Settings {!isEditing && userRole && rolesWithWriteAccess.includes(userRole) && ( - + )}
diff --git a/ui/litellm-dashboard/src/components/view_users/user_info_view.test.tsx b/ui/litellm-dashboard/src/components/view_users/user_info_view.test.tsx new file mode 100644 index 0000000000..7334dd72fc --- /dev/null +++ b/ui/litellm-dashboard/src/components/view_users/user_info_view.test.tsx @@ -0,0 +1,51 @@ +import { render } from "@testing-library/react"; +import { describe, expect, it, vi } from "vitest"; +import UserInfoView from "./user_info_view"; + +vi.mock("../networking", () => { + const MOCK_USER_DATA = { + user_id: "user-123", + user_info: { + user_email: "test@example.com", + user_role: "admin", + teams: [], + models: [], + max_budget: 100, + budget_duration: "30d", + spend: 0, + metadata: {}, + created_at: "2025-01-01T00:00:00.000Z", + updated_at: "2025-01-02T00:00:00.000Z", + }, + keys: [], + teams: [], + }; + + return { + userInfoCall: vi.fn().mockResolvedValue(MOCK_USER_DATA), + userDeleteCall: vi.fn(), + userUpdateUserCall: vi.fn(), + modelAvailableCall: vi.fn().mockResolvedValue({ data: [] }), + invitationCreateCall: vi.fn(), + getProxyBaseUrl: () => "https://litellm.test", + }; +}); + +describe("UserInfoView", () => { + const defaultProps = { + userId: "user-123", + onClose: vi.fn(), + accessToken: "test-token", + userRole: null, + possibleUIRoles: null, + }; + + it("renders loading state and then the user email", async () => { + const { getByText, findAllByText } = render(); + + expect(getByText("Loading user data...")).toBeInTheDocument(); + + const emails = await findAllByText("test@example.com"); + expect(emails.length).toBeGreaterThan(0); + }); +}); diff --git a/ui/litellm-dashboard/src/components/view_users/user_info_view.tsx b/ui/litellm-dashboard/src/components/view_users/user_info_view.tsx index ab2c177707..65aa7c9d4c 100644 --- a/ui/litellm-dashboard/src/components/view_users/user_info_view.tsx +++ b/ui/litellm-dashboard/src/components/view_users/user_info_view.tsx @@ -343,9 +343,7 @@ export default function UserInfoView({
User Settings {!isEditing && userRole && rolesWithWriteAccess.includes(userRole) && ( - + )}
From 379aa7b79a4ba163ce4892a655d3fb0e3254ee95 Mon Sep 17 00:00:00 2001 From: yuneng-jiang Date: Thu, 13 Nov 2025 22:03:00 -0800 Subject: [PATCH 13/42] Pagination for /spend/logs/session/ui endpoint (#16603) --- .../spend_management_endpoints.py | 51 ++++++++++++++++-- .../test_spend_management_endpoints.py | 53 +++++++++++++++++++ 2 files changed, 99 insertions(+), 5 deletions(-) diff --git a/litellm/proxy/spend_tracking/spend_management_endpoints.py b/litellm/proxy/spend_tracking/spend_management_endpoints.py index b60acd1428..a167f564fd 100644 --- a/litellm/proxy/spend_tracking/spend_management_endpoints.py +++ b/litellm/proxy/spend_tracking/spend_management_endpoints.py @@ -2968,10 +2968,30 @@ async def ui_view_session_spend_logs( session_id: str = fastapi.Query( description="Get all spend logs for a particular session", ), + page: int = fastapi.Query( + default=1, + ge=1, + description="Page number for pagination", + ), + page_size: int = fastapi.Query( + default=50, + ge=1, + le=100, + description="Number of items per page", + ), user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), ): """ - Get all spend logs for a particular session + Get paginated spend logs for a particular session. + + Returns: + { + "data": List[LiteLLM_SpendLogs], + "total": int, + "page": int, + "page_size": int, + "total_pages": int, + } """ from litellm.proxy.proxy_server import prisma_client @@ -2984,11 +3004,32 @@ async def ui_view_session_spend_logs( # Build query conditions where_conditions = {"session_id": session_id} - # Query the database - result = await prisma_client.db.litellm_spendlogs.find_many( - where=where_conditions, order={"startTime": "asc"} + + # Calculate pagination offsets + skip = (page - 1) * page_size + + # Get total count for pagination metadata + total_records = await prisma_client.db.litellm_spendlogs.count( + where=where_conditions ) - return result + + # Query the database with pagination + result = await prisma_client.db.litellm_spendlogs.find_many( + where=where_conditions, + order={"startTime": "asc"}, + skip=skip, + take=page_size, + ) + + total_pages = (total_records + page_size - 1) // page_size + + return { + "data": result, + "total": total_records, + "page": page, + "page_size": page_size, + "total_pages": total_pages, + } except Exception as e: if isinstance(e, HTTPException): raise e diff --git a/tests/test_litellm/proxy/spend_tracking/test_spend_management_endpoints.py b/tests/test_litellm/proxy/spend_tracking/test_spend_management_endpoints.py index 3a9229b3c4..7acca1804f 100644 --- a/tests/test_litellm/proxy/spend_tracking/test_spend_management_endpoints.py +++ b/tests/test_litellm/proxy/spend_tracking/test_spend_management_endpoints.py @@ -628,6 +628,59 @@ async def test_ui_view_spend_logs_pagination(client, monkeypatch): assert data["page"] == 2 +@pytest.mark.asyncio +async def test_ui_view_session_spend_logs_pagination(client, monkeypatch): + mock_spend_logs = [ + { + "id": "log1", + "request_id": "req1", + "session_id": "session-123", + "startTime": "2024-01-01T00:00:00Z", + }, + { + "id": "log2", + "request_id": "req2", + "session_id": "session-123", + "startTime": "2024-01-02T00:00:00Z", + }, + ] + + class MockDB: + async def count(self, *args, **kwargs): + assert kwargs.get("where") == {"session_id": "session-123"} + return len(mock_spend_logs) + + async def find_many(self, *args, **kwargs): + assert kwargs.get("where") == {"session_id": "session-123"} + assert kwargs.get("order") == {"startTime": "asc"} + assert kwargs.get("skip") == 1 # page=2, page_size=1 + assert kwargs.get("take") == 1 + return [mock_spend_logs[1]] + + class MockPrismaClient: + def __init__(self): + self.db = MockDB() + self.db.litellm_spendlogs = self.db + + mock_prisma_client = MockPrismaClient() + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) + + response = client.get( + "/spend/logs/session/ui", + params={"session_id": "session-123", "page": 2, "page_size": 1}, + headers={"Authorization": "Bearer sk-test"}, + ) + + assert response.status_code == 200 + data = response.json() + assert data["total"] == 2 + assert data["page"] == 2 + assert data["page_size"] == 1 + assert data["total_pages"] == 2 + assert len(data["data"]) == 1 + assert data["data"][0]["request_id"] == "req2" + + @pytest.mark.asyncio async def test_ui_view_spend_logs_date_range_filter(client, monkeypatch): # Create mock data with different dates From aedfe8f7a1c68a216411b0d53776e4fc50ad3538 Mon Sep 17 00:00:00 2001 From: Otavio Brito <69211663+otaviofbrito@users.noreply.github.com> Date: Fri, 14 Nov 2025 03:03:47 -0300 Subject: [PATCH 14/42] remove generic exception handling (#16599) --- .../adapters/handler.py | 82 ++++++++----------- 1 file changed, 36 insertions(+), 46 deletions(-) diff --git a/litellm/llms/anthropic/experimental_pass_through/adapters/handler.py b/litellm/llms/anthropic/experimental_pass_through/adapters/handler.py index 88a63fc6f5..795f9a4cd0 100644 --- a/litellm/llms/anthropic/experimental_pass_through/adapters/handler.py +++ b/litellm/llms/anthropic/experimental_pass_through/adapters/handler.py @@ -152,32 +152,27 @@ class LiteLLMMessagesToCompletionTransformationHandler: ) ) - try: - completion_response = await litellm.acompletion(**completion_kwargs) + completion_response = await litellm.acompletion(**completion_kwargs) - if stream: - transformed_stream = ( - ANTHROPIC_ADAPTER.translate_completion_output_params_streaming( - completion_response, - model=model, - ) + if stream: + transformed_stream = ( + ANTHROPIC_ADAPTER.translate_completion_output_params_streaming( + completion_response, + model=model, ) - if transformed_stream is not None: - return transformed_stream - raise ValueError("Failed to transform streaming response") - else: - anthropic_response = ( - ANTHROPIC_ADAPTER.translate_completion_output_params( - cast(ModelResponse, completion_response) - ) - ) - if anthropic_response is not None: - return anthropic_response - raise ValueError("Failed to transform response to Anthropic format") - except Exception as e: # noqa: BLE001 - raise ValueError( - f"Error calling litellm.acompletion for non-Anthropic model: {str(e)}" ) + if transformed_stream is not None: + return transformed_stream + raise ValueError("Failed to transform streaming response") + else: + anthropic_response = ( + ANTHROPIC_ADAPTER.translate_completion_output_params( + cast(ModelResponse, completion_response) + ) + ) + if anthropic_response is not None: + return anthropic_response + raise ValueError("Failed to transform response to Anthropic format") @staticmethod def anthropic_messages_handler( @@ -239,29 +234,24 @@ class LiteLLMMessagesToCompletionTransformationHandler: ) ) - try: - completion_response = litellm.completion(**completion_kwargs) + completion_response = litellm.completion(**completion_kwargs) - if stream: - transformed_stream = ( - ANTHROPIC_ADAPTER.translate_completion_output_params_streaming( - completion_response, - model=model, - ) + if stream: + transformed_stream = ( + ANTHROPIC_ADAPTER.translate_completion_output_params_streaming( + completion_response, + model=model, ) - if transformed_stream is not None: - return transformed_stream - raise ValueError("Failed to transform streaming response") - else: - anthropic_response = ( - ANTHROPIC_ADAPTER.translate_completion_output_params( - cast(ModelResponse, completion_response) - ) - ) - if anthropic_response is not None: - return anthropic_response - raise ValueError("Failed to transform response to Anthropic format") - except Exception as e: # noqa: BLE001 - raise ValueError( - f"Error calling litellm.completion for non-Anthropic model: {str(e)}" ) + if transformed_stream is not None: + return transformed_stream + raise ValueError("Failed to transform streaming response") + else: + anthropic_response = ( + ANTHROPIC_ADAPTER.translate_completion_output_params( + cast(ModelResponse, completion_response) + ) + ) + if anthropic_response is not None: + return anthropic_response + raise ValueError("Failed to transform response to Anthropic format") From eca226286ac069128bfa8a1a788bc8bf04659aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Dvo=C5=99=C3=A1k?= Date: Fri, 14 Nov 2025 07:07:15 +0100 Subject: [PATCH 15/42] fix: parse failed chunks for Groq (#16595) * fix: parse failed chunks for Groq Ref: #13960 Signed-off-by: Tomas Dvorak * chore: formatting Signed-off-by: Tomas Dvorak --------- Signed-off-by: Tomas Dvorak --- litellm/llms/groq/chat/transformation.py | 61 ++++++++++++++++++++---- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/litellm/llms/groq/chat/transformation.py b/litellm/llms/groq/chat/transformation.py index 165301efb5..20e0d412ed 100644 --- a/litellm/llms/groq/chat/transformation.py +++ b/litellm/llms/groq/chat/transformation.py @@ -1,9 +1,27 @@ """ Translate from OpenAI's `/v1/chat/completions` to Groq's `/v1/chat/completions` """ -from typing import Any, Coroutine, List, Literal, Optional, Tuple, Union, cast, overload +from typing import ( + Any, + Coroutine, + List, + Literal, + Optional, + Tuple, + Union, + cast, + overload, + Iterator, + AsyncIterator, +) import httpx + +from litellm.llms.openai.chat.gpt_transformation import ( + OpenAIChatCompletionStreamingHandler, +) +from litellm.llms.openai.common_utils import OpenAIError + from pydantic import BaseModel import litellm @@ -16,7 +34,7 @@ from litellm.types.llms.openai import ( ChatCompletionToolParam, ChatCompletionToolParamFunctionChunk, ) -from litellm.types.utils import ModelResponse +from litellm.types.utils import ModelResponse, ModelResponseStream from ...openai_like.chat.transformation import OpenAILikeChatConfig @@ -65,6 +83,18 @@ class GroqChatConfig(OpenAILikeChatConfig): def get_config(cls): return super().get_config() + def get_model_response_iterator( + self, + streaming_response: Union[Iterator[str], AsyncIterator[str], ModelResponse], + sync_stream: bool, + json_mode: Optional[bool] = False, + ) -> Any: + return GroqChatCompletionStreamingHandler( + streaming_response=streaming_response, + sync_stream=sync_stream, + json_mode=json_mode, + ) + def get_supported_openai_params(self, model: str) -> list: base_params = super().get_supported_openai_params(model) try: @@ -209,7 +239,6 @@ class GroqChatConfig(OpenAILikeChatConfig): ) return optional_params - def transform_response( self, @@ -239,12 +268,17 @@ class GroqChatConfig(OpenAILikeChatConfig): json_mode=json_mode, ) - mapped_service_tier: Literal["auto", "default", "flex"] = self._map_groq_service_tier(original_service_tier=getattr(model_response, "service_tier")) + mapped_service_tier: Literal[ + "auto", "default", "flex" + ] = self._map_groq_service_tier( + original_service_tier=getattr(model_response, "service_tier") + ) setattr(model_response, "service_tier", mapped_service_tier) return model_response - - def _map_groq_service_tier(self, original_service_tier: Optional[str]) -> Literal["auto", "default", "flex"]: + def _map_groq_service_tier( + self, original_service_tier: Optional[str] + ) -> Literal["auto", "default", "flex"]: """ Ensure groq service tier is OpenAI compatible. """ @@ -252,5 +286,16 @@ class GroqChatConfig(OpenAILikeChatConfig): return "auto" if original_service_tier not in ["auto", "default", "flex"]: return "auto" - - return cast(Literal["auto", "default", "flex"], original_service_tier) \ No newline at end of file + + return cast(Literal["auto", "default", "flex"], original_service_tier) + + +class GroqChatCompletionStreamingHandler(OpenAIChatCompletionStreamingHandler): + def chunk_parser(self, chunk: dict) -> ModelResponseStream: + error = chunk.get("error") + if error: + raise OpenAIError( + status_code=error.get("code"), message=error.get("message"), body=error + ) + + return super().chunk_parser(chunk) From a22b2b0a674c373610091cdb1cf5219f7069e24b Mon Sep 17 00:00:00 2001 From: Dmitrii Tunikov <106737620+dtunikov@users.noreply.github.com> Date: Fri, 14 Nov 2025 07:20:50 +0100 Subject: [PATCH 16/42] fix(mcp): Fix Gemini conversation format issue with MCP auto-execution (#16592) When using MCP tools with require_approval='never' and Gemini models, the follow-up call after tool execution was failing with: 'Please ensure that function call turn comes immediately after a user turn or after a function response turn.' This was caused by adding an empty assistant message between the user message and function calls, which violates Gemini's conversation format requirements. Changes: - Only add assistant message to follow-up input if it contains actual content - Allow function calls to come directly after user messages (as Gemini requires) - Add explanatory comments about Gemini's format requirements This fix allows MCP auto-execution to work correctly with Gemini models while maintaining compatibility with other models. Fixes: #[issue-number-if-any] --- litellm/responses/mcp/litellm_proxy_mcp_handler.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/litellm/responses/mcp/litellm_proxy_mcp_handler.py b/litellm/responses/mcp/litellm_proxy_mcp_handler.py index 7ad26e0a86..c7322cab09 100644 --- a/litellm/responses/mcp/litellm_proxy_mcp_handler.py +++ b/litellm/responses/mcp/litellm_proxy_mcp_handler.py @@ -526,8 +526,10 @@ class LiteLLM_Proxy_MCP_Handler: else: assistant_message_content.append(content) - # Add assistant message with content and function calls - if assistant_message_content or function_calls: + # Add assistant message only if there's actual content (not empty) + # For example, gemini requires that function call turns come immediately after user turns, + # so we should not add empty assistant messages + if assistant_message_content: follow_up_input.append( { "type": "message", @@ -536,9 +538,9 @@ class LiteLLM_Proxy_MCP_Handler: } ) - # Add function calls after assistant message - for function_call in function_calls: - follow_up_input.append(function_call) + # Add function calls (these can come directly after user message for LLM) + for function_call in function_calls: + follow_up_input.append(function_call) # Add tool results (function call outputs) for tool_result in tool_results: From 266744a5bdfd253f68939be15fcd81418f1bf59f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 13 Nov 2025 22:29:36 -0800 Subject: [PATCH 17/42] docs: add contribution guide for new guardrails --- .../simple_guardrail_tutorial.md | 184 ++++++++++++++++++ docs/my-website/sidebars.js | 9 +- 2 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 docs/my-website/docs/adding_provider/simple_guardrail_tutorial.md diff --git a/docs/my-website/docs/adding_provider/simple_guardrail_tutorial.md b/docs/my-website/docs/adding_provider/simple_guardrail_tutorial.md new file mode 100644 index 0000000000..2722a4a024 --- /dev/null +++ b/docs/my-website/docs/adding_provider/simple_guardrail_tutorial.md @@ -0,0 +1,184 @@ +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Adding a New Guardrail Integration + +You're going to create a class that checks text before it goes to the LLM or after it comes back. If it violates your rules, you block it. + +## How It Works + +Request with guardrail: + +```bash +curl --location 'http://localhost:4000/chat/completions' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "model": "gpt-4", + "messages": [{"role": "user", "content": "How do I hack a system?"}], + "guardrails": ["my-guardrail"] +}' +``` + +Your guardrail checks input, then output. If something's wrong, raise an exception. + +## Build Your Guardrail + +### Create Your Directory + +```bash +mkdir -p litellm/proxy/guardrails/guardrail_hooks/my_guardrail +cd litellm/proxy/guardrails/guardrail_hooks/my_guardrail +``` + +Two files: `my_guardrail.py` (main class) and `__init__.py` (initialization). + +### Write the Main Class + +`my_guardrail.py`: + +```python +import os +from typing import Optional, List +from fastapi import HTTPException + +from litellm.integrations.custom_guardrail import CustomGuardrail +from litellm.types.guardrails import PiiEntityType +from litellm._logging import verbose_proxy_logger +from litellm.llms.custom_httpx.http_handler import ( + get_async_httpx_client, + httpxSpecialProvider, +) + +class MyGuardrail(CustomGuardrail): + def __init__(self, api_key: Optional[str] = None, api_base: Optional[str] = None, **kwargs): + self.api_key = api_key or os.getenv("MY_GUARDRAIL_API_KEY") + self.api_base = api_base or os.getenv("MY_GUARDRAIL_API_BASE", "https://api.myguardrail.com") + super().__init__(default_on=True) + + async def apply_guardrail( + self, + text: str, + language: Optional[str] = None, + entities: Optional[List[PiiEntityType]] = None, + request_data: Optional[dict] = None, + ) -> str: + result = await self._check_with_api(text, request_data) + + if result.get("action") == "BLOCK": + raise Exception(f"Content blocked: {result.get('reason', 'Policy violation')}") + + return text + + async def _check_with_api(self, text: str, request_data: Optional[dict]) -> dict: + async_client = get_async_httpx_client(llm_provider=httpxSpecialProvider.LoggingCallback) + + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {self.api_key}", + } + + response = await async_client.post( + f"{self.api_base}/check", + headers=headers, + json={"text": text}, + timeout=5, + ) + + response.raise_for_status() + return response.json() +``` + +### Create the Init File + +`__init__.py`: + +```python +from typing import TYPE_CHECKING + +from litellm.types.guardrails import SupportedGuardrailIntegrations + +from .my_guardrail import MyGuardrail + +if TYPE_CHECKING: + from litellm.types.guardrails import Guardrail, LitellmParams + + +def initialize_guardrail(litellm_params: "LitellmParams", guardrail: "Guardrail"): + import litellm + + _my_guardrail_callback = MyGuardrail( + api_base=litellm_params.api_base, + api_key=litellm_params.api_key, + guardrail_name=guardrail.get("guardrail_name", ""), + event_hook=litellm_params.mode, + default_on=litellm_params.default_on, + ) + + litellm.logging_callback_manager.add_litellm_callback(_my_guardrail_callback) + return _my_guardrail_callback + + +guardrail_initializer_registry = { + SupportedGuardrailIntegrations.MY_GUARDRAIL.value: initialize_guardrail, +} + +guardrail_class_registry = { + SupportedGuardrailIntegrations.MY_GUARDRAIL.value: MyGuardrail, +} +``` + +### Register Your Guardrail Type + +Add to `litellm/types/guardrails.py`: + +```python +class SupportedGuardrailIntegrations(str, Enum): + LAKERA = "lakera_prompt_injection" + APORIA = "aporia" + BEDROCK = "bedrock_guardrails" + PRESIDIO = "presidio" + ZSCALER_AI_GUARD = "zscaler_ai_guard" + MY_GUARDRAIL = "my_guardrail" +``` + +## Usage + +### Config File + +```yaml +model_list: + - model_name: gpt-4 + litellm_params: + model: gpt-4 + api_key: os.environ/OPENAI_API_KEY + +litellm_settings: + guardrails: + - guardrail_name: my_guardrail + litellm_params: + guardrail: my_guardrail + mode: during_call + api_key: os.environ/MY_GUARDRAIL_API_KEY + api_base: https://api.myguardrail.com +``` + +### Per-Request + +```bash +curl --location 'http://localhost:4000/chat/completions' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "model": "gpt-4", + "messages": [{"role": "user", "content": "Test message"}], + "guardrails": ["my_guardrail"] +}' +``` + +## Testing + +Add unit tests inside `test_litellm/` folder. + + + diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index 809e0bc0b7..c0484b6aa1 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -31,9 +31,16 @@ const sidebars = { label: "Guardrails", items: [ "proxy/guardrails/quick_start", + { + type: "category", + "label": "Contributing to Guardrails", + items: [ + "adding_provider/simple_guardrail_tutorial", + "adding_provider/adding_guardrail_support", + ] + }, "proxy/guardrails/test_playground", ...[ - "adding_provider/adding_guardrail_support", "proxy/guardrails/aim_security", "proxy/guardrails/aporia_api", "proxy/guardrails/azure_content_guardrail", From 13993d6ea378eb0f2ff8d749ad2646e4f6173cca Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Fri, 14 Nov 2025 12:01:31 +0530 Subject: [PATCH 18/42] Add fal-ai/flux/schnell support (#16580) --- docs/my-website/docs/providers/fal_ai.md | 1 + litellm/llms/fal_ai/__init__.py | 2 + .../llms/fal_ai/image_generation/__init__.py | 4 + .../flux_schnell_transformation.py | 88 +++++++++++++++++++ ...odel_prices_and_context_window_backup.json | 8 ++ model_prices_and_context_window.json | 8 ++ .../test_fal_ai_image_generation.py | 1 + 7 files changed, 112 insertions(+) create mode 100644 litellm/llms/fal_ai/image_generation/flux_schnell_transformation.py diff --git a/docs/my-website/docs/providers/fal_ai.md b/docs/my-website/docs/providers/fal_ai.md index d42182b57a..e50ef919da 100644 --- a/docs/my-website/docs/providers/fal_ai.md +++ b/docs/my-website/docs/providers/fal_ai.md @@ -31,6 +31,7 @@ Get your API key from [fal.ai](https://fal.ai/). | Model Name | Description | Documentation | |------------|-------------|---------------| +| `fal_ai/flux/schnell` | Flux Schnell - Low-latency generation with `image_size` support | [Docs ↗](https://fal.ai/models/fal-ai/flux/schnell) | | `fal_ai/fal-ai/flux-pro/v1.1-ultra` | FLUX Pro v1.1 Ultra - High-quality image generation | [Docs ↗](https://fal.ai/models/fal-ai/flux-pro/v1.1-ultra) | | `fal_ai/fal-ai/imagen4/preview` | Google's Imagen 4 - Highest quality model | [Docs ↗](https://fal.ai/models/fal-ai/imagen4/preview) | | `fal_ai/fal-ai/recraft/v3/text-to-image` | Recraft v3 - Multiple style options | [Docs ↗](https://fal.ai/models/fal-ai/recraft/v3/text-to-image) | diff --git a/litellm/llms/fal_ai/__init__.py b/litellm/llms/fal_ai/__init__.py index 492197951e..1f4cbe0e9c 100644 --- a/litellm/llms/fal_ai/__init__.py +++ b/litellm/llms/fal_ai/__init__.py @@ -3,6 +3,7 @@ from .image_generation import ( FalAIBaseConfig, FalAIBriaConfig, FalAIFluxProV11UltraConfig, + FalAIFluxSchnellConfig, FalAIImageGenerationConfig, FalAIImagen4Config, FalAIRecraftV3Config, @@ -18,6 +19,7 @@ __all__ = [ "FalAIRecraftV3Config", "FalAIBriaConfig", "FalAIFluxProV11UltraConfig", + "FalAIFluxSchnellConfig", "FalAIStableDiffusionConfig", "get_fal_ai_image_generation_config", ] diff --git a/litellm/llms/fal_ai/image_generation/__init__.py b/litellm/llms/fal_ai/image_generation/__init__.py index 74d3b434b8..b4ae6734c6 100644 --- a/litellm/llms/fal_ai/image_generation/__init__.py +++ b/litellm/llms/fal_ai/image_generation/__init__.py @@ -4,6 +4,7 @@ from litellm.llms.base_llm.image_generation.transformation import ( from .bria_transformation import FalAIBriaConfig from .flux_pro_v11_ultra_transformation import FalAIFluxProV11UltraConfig +from .flux_schnell_transformation import FalAIFluxSchnellConfig from .imagen4_transformation import FalAIImagen4Config from .recraft_v3_transformation import FalAIRecraftV3Config from .stable_diffusion_transformation import FalAIStableDiffusionConfig @@ -16,6 +17,7 @@ __all__ = [ "FalAIRecraftV3Config", "FalAIBriaConfig", "FalAIFluxProV11UltraConfig", + "FalAIFluxSchnellConfig", "FalAIStableDiffusionConfig", ] @@ -41,6 +43,8 @@ def get_fal_ai_image_generation_config(model: str) -> BaseImageGenerationConfig: return FalAIBriaConfig() elif "flux-pro" in model_lower and "ultra" in model_lower: return FalAIFluxProV11UltraConfig() + elif "flux/schnell" in model_lower or "flux-schnell" in model_lower or "schnell" in model_lower: + return FalAIFluxSchnellConfig() elif "stable-diffusion" in model_lower: return FalAIStableDiffusionConfig() diff --git a/litellm/llms/fal_ai/image_generation/flux_schnell_transformation.py b/litellm/llms/fal_ai/image_generation/flux_schnell_transformation.py new file mode 100644 index 0000000000..ed6ed37fb4 --- /dev/null +++ b/litellm/llms/fal_ai/image_generation/flux_schnell_transformation.py @@ -0,0 +1,88 @@ +from typing import Any + +from .flux_pro_v11_ultra_transformation import FalAIFluxProV11UltraConfig + + +class FalAIFluxSchnellConfig(FalAIFluxProV11UltraConfig): + """ + Configuration for Fal AI Flux Schnell model. + + Flux Schnell shares the same response format as Flux Pro models but expects + the OpenAI `size` parameter to be translated into Fal AI's `image_size` + enum/object. + + Model endpoint: fal-ai/flux/schnell + Documentation: https://fal.ai/models/fal-ai/flux/schnell + """ + + IMAGE_GENERATION_ENDPOINT: str = "fal-ai/flux/schnell" + + _OPENAI_SIZE_TO_IMAGE_SIZE = { + "1024x1024": "square_hd", + "512x512": "square", + "1792x1024": "landscape_16_9", + "1024x1792": "portrait_16_9", + "1024x768": "landscape_4_3", + "768x1024": "portrait_4_3", + } + + def map_openai_params( + self, + non_default_params: dict, + optional_params: dict, + model: str, + drop_params: bool, + ) -> dict: + supported_params = self.get_supported_openai_params(model) + + param_mapping = { + "n": "num_images", + "response_format": "output_format", + "size": "image_size", + } + + for k in non_default_params.keys(): + if k not in optional_params.keys(): + if k in supported_params: + mapped_key = param_mapping.get(k, k) + mapped_value = non_default_params[k] + + if k == "response_format": + if mapped_value in ["b64_json", "url"]: + mapped_value = "jpeg" + elif k == "size": + mapped_value = self._map_image_size(mapped_value) + + optional_params[mapped_key] = mapped_value + elif drop_params: + continue + else: + raise ValueError( + f"Parameter {k} is not supported for model {model}. " + f"Supported parameters are {supported_params}. " + "Set drop_params=True to drop unsupported parameters." + ) + + return optional_params + + def _map_image_size(self, size: Any) -> Any: + if isinstance(size, dict): + return size + + if not isinstance(size, str): + return size + + if size in self._OPENAI_SIZE_TO_IMAGE_SIZE: + return self._OPENAI_SIZE_TO_IMAGE_SIZE[size] + + if "x" in size: + try: + width_str, height_str = size.split("x") + width = int(width_str) + height = int(height_str) + return {"width": width, "height": height} + except (ValueError, AttributeError, ZeroDivisionError): + pass + + return "landscape_4_3" + diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 41e36994e0..c16980211e 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -8523,6 +8523,14 @@ "/v1/images/generations" ] }, + "fal_ai/fal-ai/flux/schnell": { + "litellm_provider": "fal_ai", + "mode": "image_generation", + "output_cost_per_image": 0.003, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, "fal_ai/fal-ai/imagen4/preview": { "litellm_provider": "fal_ai", "mode": "image_generation", diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 41e36994e0..c16980211e 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -8523,6 +8523,14 @@ "/v1/images/generations" ] }, + "fal_ai/fal-ai/flux/schnell": { + "litellm_provider": "fal_ai", + "mode": "image_generation", + "output_cost_per_image": 0.003, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, "fal_ai/fal-ai/imagen4/preview": { "litellm_provider": "fal_ai", "mode": "image_generation", diff --git a/tests/image_gen_tests/test_fal_ai_image_generation.py b/tests/image_gen_tests/test_fal_ai_image_generation.py index 949606a58a..7b5415e1d7 100644 --- a/tests/image_gen_tests/test_fal_ai_image_generation.py +++ b/tests/image_gen_tests/test_fal_ai_image_generation.py @@ -14,6 +14,7 @@ from litellm import aimage_generation "model", [ "fal_ai/fal-ai/flux-pro/v1.1-ultra", + "fal_ai/fal-ai/flux/schnell", "fal_ai/fal-ai/recraft/v3/text-to-image", "fal_ai/bria/text-to-image/3.2", "fal_ai/fal-ai/stable-diffusion-v35-medium" From 52a42e172874f40623a1037a64519c9238fe3f63 Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Fri, 14 Nov 2025 12:01:49 +0530 Subject: [PATCH 19/42] Add all imagen variants in fal ai in model map (#16579) --- .../image_generation/imagen4_transformation.py | 2 +- .../model_prices_and_context_window_backup.json | 16 ++++++++++++++++ model_prices_and_context_window.json | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/litellm/llms/fal_ai/image_generation/imagen4_transformation.py b/litellm/llms/fal_ai/image_generation/imagen4_transformation.py index f38ced6531..4e7708c9f4 100644 --- a/litellm/llms/fal_ai/image_generation/imagen4_transformation.py +++ b/litellm/llms/fal_ai/image_generation/imagen4_transformation.py @@ -23,7 +23,7 @@ class FalAIImagen4Config(FalAIBaseConfig): Model variants: - fal-ai/imagen4/preview (Standard): $0.05 per image - - fal-ai/imagen4/preview/fast (Fast): $0.04 per image + - fal-ai/imagen4/preview/fast (Fast): $0.02 per image - fal-ai/imagen4/preview/ultra (Ultra): $0.06 per image Documentation: https://fal.ai/models/fal-ai/imagen4/preview diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index c16980211e..7c86e570c3 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -8539,6 +8539,22 @@ "/v1/images/generations" ] }, + "fal_ai/fal-ai/imagen4/preview/fast": { + "litellm_provider": "fal_ai", + "mode": "image_generation", + "output_cost_per_image": 0.02, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "fal_ai/fal-ai/imagen4/preview/ultra": { + "litellm_provider": "fal_ai", + "mode": "image_generation", + "output_cost_per_image": 0.06, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, "fal_ai/fal-ai/recraft/v3/text-to-image": { "litellm_provider": "fal_ai", "mode": "image_generation", diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index c16980211e..7c86e570c3 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -8539,6 +8539,22 @@ "/v1/images/generations" ] }, + "fal_ai/fal-ai/imagen4/preview/fast": { + "litellm_provider": "fal_ai", + "mode": "image_generation", + "output_cost_per_image": 0.02, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "fal_ai/fal-ai/imagen4/preview/ultra": { + "litellm_provider": "fal_ai", + "mode": "image_generation", + "output_cost_per_image": 0.06, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, "fal_ai/fal-ai/recraft/v3/text-to-image": { "litellm_provider": "fal_ai", "mode": "image_generation", From c7847125c2b2eb9a35a651bf50087d3f851b2f11 Mon Sep 17 00:00:00 2001 From: Alexsander Hamir Date: Fri, 14 Nov 2025 09:21:45 -0800 Subject: [PATCH 20/42] [Perf] Embeddings: Use router's O(1) lookup and shared sessions (#16344) * Refactor proxy embeddings to use shared processor - allow ProxyBaseLLMRequestProcessing to accept the aembedding route so embeddings requests reuse the base pipeline hooks - route embeddings requests through base_process_llm_request, sharing logging, hook execution, retries, and header handling with chat/responses - tighten token array decoding logic by using router deployment lookups and the unified error handler * Fix: Correctly process embedding requests with token arrays The `test_embedding_input_array_of_tokens` test was failing due to a regression that caused embedding requests with token arrays to be processed incorrectly. This prevented the `aembedding` function from being called as expected. This was caused by a combination of three distinct issues: 1. In `litellm/proxy/common_request_processing.py`, the `function_setup` utility was called with `aembedding` as the `original_function` for embedding routes. This has been corrected to `embedding` to ensure proper request setup. 2. In `litellm/proxy/proxy_server.py`, a `TypeError` occurred because the `get_deployment` method was called with the `model_name` keyword argument instead of the expected `model_id`. This has been corrected. Additionally, the check for token arrays was improved to validate that all elements in the input subarray are integers. 3. In `litellm/proxy/litellm_pre_call_utils.py`, the check for the `enforced_params` enterprise feature was too strict. It blocked valid requests even when the `enforced_params` list was empty. The condition has been adjusted to trigger the check only for non-empty lists. Finally, the `test_embedding_input_array_of_tokens` assertion was updated to be more robust. The previous `assert_called_once_with` was overly strict, causing failures when unrelated internal parameters were added to the function call. The test now first asserts that `aembedding` is called and then separately verifies the `model` and `input` arguments. This makes the test more resilient to future changes without sacrificing its ability to catch regressions. * test: align proxy embedding assertions Update the embedding proxy test to match the new request pipeline: keep the data the proxy builds, expect the extra control kwargs, let the post-call hook return the actual response, and assert the normalized 'embeddings' hook type. This proves the refactor still forwards metadata and returns the mocked payload. * Update proxy exception test The proxy now forwards additional kwargs (request_timeout, litellm_call_id, litellm_logging_obj) to llm_router.aembedding. The test needs to accept these to match the real call signature and keep validating the error path instead of the kwargs list. * testing: unsure of this change I don't remember why I changed this, will revert and see if any tests fail since the manual test isn't failing without it. * fix: remove unrelated change This change was not related to the embeddings refactor and actually belonged to a different branch. --- litellm/proxy/common_request_processing.py | 8 +- litellm/proxy/litellm_pre_call_utils.py | 2 +- litellm/proxy/proxy_server.py | 192 +++++------------- .../test_proxy_exception_mapping.py | 3 + tests/proxy_unit_tests/test_proxy_server.py | 35 +++- tests/test_litellm/proxy/test_proxy_server.py | 21 +- 6 files changed, 98 insertions(+), 163 deletions(-) diff --git a/litellm/proxy/common_request_processing.py b/litellm/proxy/common_request_processing.py index 448528bd68..1029b1964a 100644 --- a/litellm/proxy/common_request_processing.py +++ b/litellm/proxy/common_request_processing.py @@ -292,6 +292,7 @@ class ProxyBaseLLMRequestProcessing: proxy_config: ProxyConfig, route_type: Literal[ "acompletion", + "aembedding", "aresponses", "_arealtime", "aget_responses", @@ -403,6 +404,7 @@ class ProxyBaseLLMRequestProcessing: user_api_key_dict: UserAPIKeyAuth, route_type: Literal[ "acompletion", + "aembedding", "aresponses", "_arealtime", "aget_responses", @@ -772,10 +774,12 @@ class ProxyBaseLLMRequestProcessing: @staticmethod def _get_pre_call_type( - route_type: Literal["acompletion", "aresponses"], - ) -> Literal["completion", "responses"]: + route_type: Literal["acompletion", "aembedding", "aresponses"], + ) -> Literal["completion", "embeddings", "responses"]: if route_type == "acompletion": return "completion" + elif route_type == "aembedding": + return "embeddings" elif route_type == "aresponses": return "responses" diff --git a/litellm/proxy/litellm_pre_call_utils.py b/litellm/proxy/litellm_pre_call_utils.py index c21a25b51c..ac78967140 100644 --- a/litellm/proxy/litellm_pre_call_utils.py +++ b/litellm/proxy/litellm_pre_call_utils.py @@ -1158,7 +1158,7 @@ def _enforced_params_check( ) if enforced_params is None: return True - if enforced_params is not None and premium_user is not True: + if enforced_params and premium_user is not True: raise ValueError( f"Enforced Params is an Enterprise feature. Enforced Params: {enforced_params}. {CommonProxyErrors.not_premium_user.value}" ) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 2077955fc5..40bc0dba8e 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -5011,40 +5011,11 @@ async def embeddings( # noqa: PLR0915 global proxy_logging_obj data: Any = {} try: - # Use orjson to parse JSON data, orjson speeds up requests significantly - body = await request.body() - data = orjson.loads(body) - - verbose_proxy_logger.debug( - "Request received by LiteLLM:\n%s", - json.dumps(data, indent=4), - ) - - # Include original request and headers in the data - data = await add_litellm_data_to_request( - data=data, - request=request, - general_settings=general_settings, - user_api_key_dict=user_api_key_dict, - version=version, - proxy_config=proxy_config, - ) - - data["model"] = ( - general_settings.get("embedding_model", None) # server default - or user_model # model name passed via cli args - or model # for azure deployments - or data.get("model", None) # default passed in http request - ) - if user_model: - data["model"] = user_model - - ### MODEL ALIAS MAPPING ### - # check if model name in model alias map - # get the actual model name - if data["model"] in litellm.model_alias_map: - data["model"] = litellm.model_alias_map[data["model"]] + # Use shared request body reading helper (same as chat/completions) + data = await _read_request_body(request=request) + ### HANDLE TOKEN ARRAY INPUT DECODING ### + # This must happen BEFORE base_process_llm_request() since it modifies the input router_model_names = llm_router.model_names if llm_router is not None else [] if ( "input" in data @@ -5054,126 +5025,61 @@ async def embeddings( # noqa: PLR0915 and isinstance(data["input"][0][0], int) ): # check if array of tokens passed in # check if provider accept list of tokens as input - e.g. for langchain integration - if llm_model_list is not None and data["model"] in router_model_names: - for m in llm_model_list: - if m["model_name"] == data["model"]: - if m["litellm_params"][ - "model" - ] in litellm.open_ai_embedding_models or any( - m["litellm_params"]["model"].startswith(provider) + if llm_router is not None and data.get("model") in router_model_names: + # Use router's O(1) lookup instead of O(N) iteration through llm_model_list + deployment = llm_router.get_deployment(model_id=data["model"]) + if deployment is not None: + litellm_model = deployment.get("litellm_params", {}).get("model", "") + # Check if this provider supports token arrays + supports_token_arrays = ( + litellm_model in litellm.open_ai_embedding_models + or any( + litellm_model.startswith(provider) for provider in LITELLM_EMBEDDING_PROVIDERS_SUPPORTING_INPUT_ARRAY_OF_TOKENS - ): - pass - else: - # non-openai/azure embedding model called with token input - input_list = [] - for i in data["input"]: - input_list.append( - litellm.decode(model="gpt-3.5-turbo", tokens=i) - ) - data["input"] = input_list - break + ) + ) + if not supports_token_arrays: + # non-openai/azure embedding model called with token input - decode tokens + input_list = [] + for i in data["input"]: + input_list.append( + litellm.decode(model="gpt-3.5-turbo", tokens=i) + ) + data["input"] = input_list - ### CALL HOOKS ### - modify incoming data / reject request before calling the model - data = await proxy_logging_obj.pre_call_hook( + # Use unified request processor (same as chat/completions and responses) + base_llm_response_processor = ProxyBaseLLMRequestProcessing(data=data) + + # Process the request with all optimizations (shared sessions, network tuning, etc.) + response = await base_llm_response_processor.base_process_llm_request( + request=request, + fastapi_response=fastapi_response, user_api_key_dict=user_api_key_dict, - data=data, - call_type=CallTypes.aembedding.value, - ) - - tasks = [] - tasks.append( - proxy_logging_obj.during_call_hook( - data=data, - user_api_key_dict=user_api_key_dict, - call_type="aembedding", - ) - ) - - ## ROUTE TO CORRECT ENDPOINT ## - llm_call = await route_request( - data=data, route_type="aembedding", + proxy_logging_obj=proxy_logging_obj, llm_router=llm_router, + general_settings=general_settings, + proxy_config=proxy_config, + select_data_generator=select_data_generator, + model=model, user_model=user_model, + user_temperature=user_temperature, + user_request_timeout=user_request_timeout, + user_max_tokens=user_max_tokens, + user_api_base=user_api_base, + version=version, ) - tasks.append(llm_call) - - # wait for call to end - llm_responses = asyncio.gather( - *tasks - ) # run the moderation check in parallel to the actual llm api call - - responses = await llm_responses - - response = responses[1] - - ### ALERTING ### - asyncio.create_task( - proxy_logging_obj.update_request_status( - litellm_call_id=data.get("litellm_call_id", ""), status="success" - ) - ) - - ### RESPONSE HEADERS ### - hidden_params = getattr(response, "_hidden_params", {}) or {} - model_id = hidden_params.get("model_id", None) or "" - cache_key = hidden_params.get("cache_key", None) or "" - api_base = hidden_params.get("api_base", None) or "" - response_cost = hidden_params.get("response_cost", None) or "" - litellm_call_id = hidden_params.get("litellm_call_id", None) or "" - additional_headers: dict = hidden_params.get("additional_headers", {}) or {} - - fastapi_response.headers.update( - ProxyBaseLLMRequestProcessing.get_custom_headers( - user_api_key_dict=user_api_key_dict, - model_id=model_id, - cache_key=cache_key, - api_base=api_base, - version=version, - response_cost=response_cost, - model_region=getattr(user_api_key_dict, "allowed_model_region", ""), - call_id=litellm_call_id, - request_data=data, - hidden_params=hidden_params, - **additional_headers, - ) - ) - await check_response_size_is_safe(response=response) - + return response except Exception as e: - await proxy_logging_obj.post_call_failure_hook( - user_api_key_dict=user_api_key_dict, original_exception=e, request_data=data + # Use unified error handler + base_llm_response_processor = ProxyBaseLLMRequestProcessing(data=data) + raise await base_llm_response_processor._handle_llm_api_exception( + e=e, + user_api_key_dict=user_api_key_dict, + proxy_logging_obj=proxy_logging_obj, + version=version, ) - litellm_debug_info = getattr(e, "litellm_debug_info", "") - verbose_proxy_logger.debug( - "\033[1;31mAn error occurred: %s %s\n\n Debug this by setting `--debug`, e.g. `litellm --model gpt-3.5-turbo --debug`", - e, - litellm_debug_info, - ) - verbose_proxy_logger.exception( - "litellm.proxy.proxy_server.embeddings(): Exception occured - {}".format( - str(e) - ) - ) - if isinstance(e, HTTPException): - message = get_error_message_str(e) - raise ProxyException( - message=message, - type=getattr(e, "type", "None"), - param=getattr(e, "param", "None"), - code=getattr(e, "status_code", status.HTTP_400_BAD_REQUEST), - ) - else: - error_msg = f"{str(e)}" - raise ProxyException( - message=getattr(e, "message", error_msg), - type=getattr(e, "type", "None"), - param=getattr(e, "param", "None"), - openai_code=getattr(e, "code", None), - code=getattr(e, "status_code", 500), - ) @router.post( diff --git a/tests/proxy_unit_tests/test_proxy_exception_mapping.py b/tests/proxy_unit_tests/test_proxy_exception_mapping.py index 5fbe389f35..2487c69d9d 100644 --- a/tests/proxy_unit_tests/test_proxy_exception_mapping.py +++ b/tests/proxy_unit_tests/test_proxy_exception_mapping.py @@ -157,6 +157,9 @@ def test_embedding_auth_exception_azure(mock_aembedding, client): metadata=mock.ANY, proxy_server_request=mock.ANY, secret_fields=mock.ANY, + request_timeout=mock.ANY, + litellm_call_id=mock.ANY, + litellm_logging_obj=mock.ANY, ) print("Response from proxy=", response) diff --git a/tests/proxy_unit_tests/test_proxy_server.py b/tests/proxy_unit_tests/test_proxy_server.py index 8b9c515234..9ae916db0a 100644 --- a/tests/proxy_unit_tests/test_proxy_server.py +++ b/tests/proxy_unit_tests/test_proxy_server.py @@ -545,17 +545,22 @@ def test_embedding(mock_aembedding, client_no_auth): "input": ["good morning from litellm"], } - pre_call_return_value = { - **test_data, - "metadata": {"source": "unit-test"}, - "proxy_server_request": {"path": "/v1/embeddings"}, - "secret_fields": [], - } + async def _pre_call_hook_side_effect(**kwargs): + data = kwargs["data"] + metadata = {**(data.get("metadata") or {}), "source": "unit-test"} + data["metadata"] = metadata + proxy_request = {**(data.get("proxy_server_request") or {})} + proxy_request["path"] = "/v1/embeddings" + data["proxy_server_request"] = proxy_request + return data + + async def _post_call_success_side_effect(**kwargs): + return kwargs["response"] with patch.object( litellm.proxy.proxy_server.proxy_logging_obj, "pre_call_hook", - new=AsyncMock(return_value=pre_call_return_value), + new=AsyncMock(side_effect=_pre_call_hook_side_effect), ) as mock_pre_call_hook, patch.object( litellm.proxy.proxy_server.proxy_logging_obj, "during_call_hook", @@ -563,7 +568,7 @@ def test_embedding(mock_aembedding, client_no_auth): ) as mock_during_hook, patch.object( litellm.proxy.proxy_server.proxy_logging_obj, "post_call_success_hook", - new=AsyncMock(return_value=None), + new=AsyncMock(side_effect=_post_call_success_side_effect), ): response = client_no_auth.post("/v1/embeddings", json=test_data) @@ -571,6 +576,9 @@ def test_embedding(mock_aembedding, client_no_auth): model="azure/text-embedding-ada-002", input=["good morning from litellm"], specific_deployment=True, + litellm_call_id=mock.ANY, + litellm_logging_obj=mock.ANY, + request_timeout=mock.ANY, metadata=mock.ANY, proxy_server_request=mock.ANY, secret_fields=mock.ANY, @@ -580,6 +588,9 @@ def test_embedding(mock_aembedding, client_no_auth): print(len(result["data"][0]["embedding"])) assert len(result["data"][0]["embedding"]) > 10 # this usually has len==1536 so + call_metadata = mock_aembedding.call_args.kwargs["metadata"] + assert call_metadata.get("source") == "unit-test" + pre_call_kwargs = mock_pre_call_hook.await_args_list[0].kwargs assert ( pre_call_kwargs.get("call_type") == "aembedding" @@ -587,8 +598,8 @@ def test_embedding(mock_aembedding, client_no_auth): during_call_kwargs = mock_during_hook.await_args_list[0].kwargs assert ( - during_call_kwargs.get("call_type") == "aembedding" - ), f"expected during_call_hook to receive call_type='aembedding', got {during_call_kwargs.get('call_type')}" + during_call_kwargs.get("call_type") == "embeddings" + ), f"expected during_call_hook to receive call_type='embeddings', got {during_call_kwargs.get('call_type')}" except Exception as e: pytest.fail(f"LiteLLM Proxy test failed. Exception - {str(e)}") @@ -609,11 +620,15 @@ def test_bedrock_embedding(mock_aembedding, client_no_auth): mock_aembedding.assert_called_once_with( model="amazon-embeddings", input=["good morning from litellm"], + litellm_call_id=mock.ANY, + litellm_logging_obj=mock.ANY, + request_timeout=mock.ANY, metadata=mock.ANY, proxy_server_request=mock.ANY, secret_fields=mock.ANY, ) assert response.status_code == 200 + print(response.status_code, response.text) result = response.json() print(len(result["data"][0]["embedding"])) assert len(result["data"][0]["embedding"]) > 10 # this usually has len==1536 so diff --git a/tests/test_litellm/proxy/test_proxy_server.py b/tests/test_litellm/proxy/test_proxy_server.py index e78a9689e8..865dc1b19a 100644 --- a/tests/test_litellm/proxy/test_proxy_server.py +++ b/tests/test_litellm/proxy/test_proxy_server.py @@ -325,13 +325,20 @@ def test_embedding_input_array_of_tokens(mock_aembedding, client_no_auth): response = client_no_auth.post("/v1/embeddings", json=test_data) - mock_aembedding.assert_called_once_with( - model="vllm_embed_model", - input=[[2046, 13269, 158208]], - metadata=mock.ANY, - proxy_server_request=mock.ANY, - secret_fields=mock.ANY, - ) + # DEPRECATED - mock_aembedding.assert_called_once_with is too strict, and will fail when new kwargs are added to embeddings + # mock_aembedding.assert_called_once_with( + # model="vllm_embed_model", + # input=[[2046, 13269, 158208]], + # metadata=mock.ANY, + # proxy_server_request=mock.ANY, + # secret_fields=mock.ANY, + # ) + # Assert that aembedding was called, and that input was not modified + mock_aembedding.assert_called_once() + call_args, call_kwargs = mock_aembedding.call_args + assert call_kwargs["model"] == "vllm_embed_model" + assert call_kwargs["input"] == [[2046, 13269, 158208]] + assert response.status_code == 200 result = response.json() print(len(result["data"][0]["embedding"])) From 65061bafc7ddccce4d9e2446091c57d47a869a44 Mon Sep 17 00:00:00 2001 From: Cesar Garcia <128240629+Chesars@users.noreply.github.com> Date: Fri, 14 Nov 2025 18:41:49 -0300 Subject: [PATCH 21/42] feat(openai): Add support for reasoning_effort='none' in GPT-5.1 (#16658) * feat(openai): Add support for reasoning_effort='none' in GPT-5.1 OpenAI's GPT-5.1 introduced a new reasoning effort parameter 'none' which replaces the previous 'minimal' setting for faster, lower-latency responses. This is now the default setting for GPT-5.1. Changes: - Updated REASONING_EFFORT type to include 'none' value - Added GPT-5.1, GPT-5-mini, and GPT-5-nano to documentation - Updated docs to reflect 'none' as GPT-5.1's default reasoning effort - Added test to verify reasoning_effort='none' passes through correctly Fixes #16633 * feat(responses): Add support for reasoning_effort='none' in Responses API transformation --- docs/my-website/docs/providers/openai.md | 11 +++++-- .../transformation.py | 4 ++- litellm/types/llms/openai.py | 2 +- .../llms/openai/test_gpt5_transformation.py | 30 +++++++++++++++++++ 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/docs/my-website/docs/providers/openai.md b/docs/my-website/docs/providers/openai.md index 51ebc881d2..e288f51155 100644 --- a/docs/my-website/docs/providers/openai.md +++ b/docs/my-website/docs/providers/openai.md @@ -412,7 +412,7 @@ Expected Response: ### Advanced: Using `reasoning_effort` with `summary` field -By default, `reasoning_effort` accepts a string value (`"low"`, `"medium"`, `"high"`, `"minimal"`) and only sets the effort level without including a reasoning summary. +By default, `reasoning_effort` accepts a string value (`"none"`, `"minimal"`, `"low"`, `"medium"`, `"high"`) and only sets the effort level without including a reasoning summary. To opt-in to the `summary` feature, you can pass `reasoning_effort` as a dictionary. **Note:** The `summary` field requires your OpenAI organization to have verification status. Using `summary` without verification will result in a 400 error from OpenAI. @@ -472,12 +472,17 @@ curl -X POST 'http://0.0.0.0:4000/chat/completions' \ | Model | Default (when not set) | Supported Values | |-------|----------------------|------------------| +| `gpt-5.1` | `none` | `none`, `low`, `medium`, `high` | | `gpt-5` | `medium` | `minimal`, `low`, `medium`, `high` | -| `gpt-5-mini` | `medium` | `minimal`, `low`, `medium`, `high` | +| `gpt-5-mini` | `medium` | `none`, `minimal`, `low`, `medium`, `high` | +| `gpt-5-nano` | `none` | `none`, `low`, `medium`, `high` | | `gpt-5-codex` | `adaptive` | `low`, `medium`, `high` (no `minimal`) | | `gpt-5-pro` | `high` | `high` only | -**Note:** `gpt-5-pro` only accepts `reasoning_effort="high"`. Other values will return an error. When `reasoning_effort` is not set (None), OpenAI defaults to the value shown in the "Default" column. +**Note:** +- GPT-5.1 introduced a new `reasoning_effort="none"` setting for faster, lower-latency responses. This replaces the `"minimal"` setting from GPT-5. +- `gpt-5-pro` only accepts `reasoning_effort="high"`. Other values will return an error. +- When `reasoning_effort` is not set (None), OpenAI defaults to the value shown in the "Default" column. See [OpenAI Reasoning documentation](https://platform.openai.com/docs/guides/reasoning) for more details on organization verification requirements. diff --git a/litellm/completion_extras/litellm_responses_transformation/transformation.py b/litellm/completion_extras/litellm_responses_transformation/transformation.py index 3ba75666b8..a64661da33 100644 --- a/litellm/completion_extras/litellm_responses_transformation/transformation.py +++ b/litellm/completion_extras/litellm_responses_transformation/transformation.py @@ -544,7 +544,9 @@ class LiteLLMResponsesTransformationHandler(CompletionTransformationBridge): return Reasoning(**reasoning_effort) # type: ignore[typeddict-item] # If string is passed, map without summary (default) - if reasoning_effort == "high": + if reasoning_effort == "none": + return Reasoning(effort="none") + elif reasoning_effort == "high": return Reasoning(effort="high") elif reasoning_effort == "medium": return Reasoning(effort="medium") diff --git a/litellm/types/llms/openai.py b/litellm/types/llms/openai.py index 7dab61b151..fd2f9b9d9c 100644 --- a/litellm/types/llms/openai.py +++ b/litellm/types/llms/openai.py @@ -1475,7 +1475,7 @@ ResponsesAPIStreamingResponse = Annotated[ ] -REASONING_EFFORT = Literal["minimal", "low", "medium", "high"] +REASONING_EFFORT = Literal["none", "minimal", "low", "medium", "high"] class OpenAIRealtimeStreamSession(TypedDict, total=False): diff --git a/tests/test_litellm/llms/openai/test_gpt5_transformation.py b/tests/test_litellm/llms/openai/test_gpt5_transformation.py index 876eb8b29f..42db678d1d 100644 --- a/tests/test_litellm/llms/openai/test_gpt5_transformation.py +++ b/tests/test_litellm/llms/openai/test_gpt5_transformation.py @@ -153,3 +153,33 @@ def test_gpt5_codex_supports_function_calling(config: OpenAIConfig): assert "functions" in supported_params assert "function_call" in supported_params assert "tools" in supported_params + + +def test_gpt5_1_reasoning_effort_none(config: OpenAIConfig): + """Test that GPT-5.1 supports reasoning_effort='none' parameter. + + Related issue: https://github.com/BerriAI/litellm/issues/16633 + GPT-5.1 introduced 'none' as the new default reasoning effort setting + for faster, lower-latency responses. + """ + # Test that reasoning_effort is a supported parameter + assert "reasoning_effort" in config.get_supported_openai_params(model="gpt-5.1") + + # Test that reasoning_effort="none" passes through correctly + params = config.map_openai_params( + non_default_params={"reasoning_effort": "none"}, + optional_params={}, + model="gpt-5.1", + drop_params=False, + ) + assert params["reasoning_effort"] == "none" + + # Test with other valid values for GPT-5.1 + for effort in ["low", "medium", "high"]: + params = config.map_openai_params( + non_default_params={"reasoning_effort": effort}, + optional_params={}, + model="gpt-5.1", + drop_params=False, + ) + assert params["reasoning_effort"] == effort From b1922e19f8bfc8580f45a445a797cc049bbbe271 Mon Sep 17 00:00:00 2001 From: fzowl <160063452+fzowl@users.noreply.github.com> Date: Fri, 14 Nov 2025 23:09:11 +0100 Subject: [PATCH 22/42] Voyageai pricing and doc update (#16641) * Refresh VoyageAI models and prices and context * Refresh VoyageAI models and prices and context * Refresh VoyageAI models and prices and context * Updating the available VoyageAI models in the docs * Updating the available VoyageAI models in the docs * Updating the model prices and the docs --- docs/my-website/docs/providers/voyage.md | 114 ++++++++++++++++++++++- model_prices_and_context_window.json | 16 ++++ 2 files changed, 127 insertions(+), 3 deletions(-) diff --git a/docs/my-website/docs/providers/voyage.md b/docs/my-website/docs/providers/voyage.md index 4b729bc9f5..b1e4cf932e 100644 --- a/docs/my-website/docs/providers/voyage.md +++ b/docs/my-website/docs/providers/voyage.md @@ -14,12 +14,41 @@ import os os.environ['VOYAGE_API_KEY'] = "" response = embedding( - model="voyage/voyage-3-large", + model="voyage/voyage-3.5", input=["good morning from litellm"], ) print(response) ``` +## Supported Parameters + +VoyageAI embeddings support the following optional parameters: + +- `input_type`: Specifies the type of input for retrieval optimization + - `"query"`: Use for search queries + - `"document"`: Use for documents being indexed +- `dimensions`: Output embedding dimensions (256, 512, 1024, or 2048) +- `encoding_format`: Output format (`"float"`, `"int8"`, `"uint8"`, `"binary"`, `"ubinary"`) +- `truncation`: Whether to truncate inputs exceeding max tokens (default: `True`) + +### Example with Parameters + +```python +from litellm import embedding +import os + +os.environ['VOYAGE_API_KEY'] = "your-api-key" + +# Embedding with custom dimensions and input type +response = embedding( + model="voyage/voyage-3.5", + input=["Your text here"], + dimensions=512, + input_type="document" +) +print(f"Embedding dimensions: {len(response.data[0]['embedding'])}") +``` + ## Supported Models All models listed here https://docs.voyageai.com/embeddings/#models-and-specifics are supported @@ -40,5 +69,84 @@ All models listed here https://docs.voyageai.com/embeddings/#models-and-specific | voyage-2 | `embedding(model="voyage/voyage-2", input)` | | voyage-lite-02-instruct | `embedding(model="voyage/voyage-lite-02-instruct", input)` | | voyage-01 | `embedding(model="voyage/voyage-01", input)` | -| voyage-lite-01 | `embedding(model="voyage/voyage-lite-01", input)` | -| voyage-lite-01-instruct | `embedding(model="voyage/voyage-lite-01-instruct", input)` | +| voyage-lite-01 | `embedding(model="voyage/voyage-lite-01", input)` | +| voyage-lite-01-instruct | `embedding(model="voyage/voyage-lite-01-instruct", input)` | + +## Contextual Embeddings (voyage-context-3) + +VoyageAI's `voyage-context-3` model provides contextualized chunk embeddings, where each chunk is embedded with awareness of its surrounding document context. This significantly improves retrieval quality compared to standard context-agnostic embeddings. + +### Key Benefits +- Chunks understand their position and role within the full document +- Improved retrieval accuracy for long documents (outperforms competitors by 7-23%) +- Better handling of ambiguous references and cross-chunk dependencies +- Seamless drop-in replacement for standard embeddings in RAG pipelines + +### Usage + +Contextual embeddings require a **nested input format** where each inner list represents chunks from a single document: + +```python +from litellm import embedding +import os + +os.environ['VOYAGE_API_KEY'] = "your-api-key" + +# Single document with multiple chunks +response = embedding( + model="voyage/voyage-context-3", + input=[ + [ + "Chapter 1: Introduction to AI", + "This chapter covers the basics of artificial intelligence.", + "We will explore machine learning and deep learning." + ] + ] +) +print(f"Number of chunk groups: {len(response.data)}") + +# Multiple documents +response = embedding( + model="voyage/voyage-context-3", + input=[ + ["Paris is the capital of France.", "It is known for the Eiffel Tower."], + ["Tokyo is the capital of Japan.", "It is a major economic hub."] + ] +) +print(f"Processed {len(response.data)} documents") +``` + +### Specifications +- Model: `voyage-context-3` +- Context length: 32,000 tokens per document +- Output dimensions: 256, 512, 1024 (default), or 2048 +- Max inputs: 1,000 per request +- Max total tokens: 120,000 +- Max chunks: 16,000 +- Pricing: $0.18 per million tokens + +### When to Use Contextual Embeddings + +**Use `voyage-context-3` when:** +- Processing long documents split into chunks +- Document structure and flow are important +- References between sections matter +- You need to preserve document hierarchy + +**Use standard models (voyage-3.5, voyage-3-large) when:** +- Embedding independent pieces of text +- Processing short queries +- Document context is not relevant +- You need faster/cheaper processing + +## Model Selection Guide + +| Model | Best For | Context Length | Price/M Tokens | +|-------|----------|----------------|----------------| +| voyage-3.5 | General-purpose, multilingual | 32K | $0.06 | +| voyage-3.5-lite | Latency-sensitive applications | 32K | $0.02 | +| voyage-3-large | Best overall quality | 32K | $0.18 | +| voyage-code-3 | Code retrieval and search | 32K | $0.18 | +| voyage-finance-2 | Financial documents | 32K | $0.12 | +| voyage-law-2 | Legal documents | 16K | $0.12 | +| voyage-context-3 | Contextual document embeddings | 32K | $0.18 | diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 7c86e570c3..1c0ac1b436 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -23768,6 +23768,22 @@ "mode": "embedding", "output_cost_per_token": 0.0 }, + "voyage/voyage-3.5": { + "input_cost_per_token": 6e-08, + "litellm_provider": "voyage", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-3.5-lite": { + "input_cost_per_token": 2e-08, + "litellm_provider": "voyage", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, "voyage/voyage-code-2": { "input_cost_per_token": 1.2e-07, "litellm_provider": "voyage", From 7e22f4abc6bc754a2e1007387c7bb78ddc0d58c6 Mon Sep 17 00:00:00 2001 From: yuneng-jiang Date: Fri, 14 Nov 2025 14:11:01 -0800 Subject: [PATCH 23/42] Normalize table action columns (#16657) --- .../components/TeamsTable/TeamsTable.tsx | 12 +---- .../src/components/OldTeams.tsx | 37 +++++++++------ .../components/guardrails/guardrail_table.tsx | 23 +++++----- .../components/molecules/models/columns.tsx | 26 ++++++----- .../src/components/organizations.test.tsx | 33 +++++++++++++ .../src/components/organizations.tsx | 34 ++++++++------ .../src/components/view_users/columns.tsx | 29 +++++++++--- .../src/components/view_users/table.test.tsx | 46 +++++++++++++++++++ 8 files changed, 172 insertions(+), 68 deletions(-) create mode 100644 ui/litellm-dashboard/src/components/organizations.test.tsx create mode 100644 ui/litellm-dashboard/src/components/view_users/table.test.tsx diff --git a/ui/litellm-dashboard/src/app/(dashboard)/teams/components/TeamsTable/TeamsTable.tsx b/ui/litellm-dashboard/src/app/(dashboard)/teams/components/TeamsTable/TeamsTable.tsx index 6e972a97e7..4533d99b4a 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/teams/components/TeamsTable/TeamsTable.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/teams/components/TeamsTable/TeamsTable.tsx @@ -1,14 +1,4 @@ -import { - Button, - Icon, - Table, - TableBody, - TableCell, - TableHead, - TableHeaderCell, - TableRow, - Text, -} from "@tremor/react"; +import { Button, Icon, Table, TableBody, TableCell, TableHead, TableHeaderCell, TableRow, Text } from "@tremor/react"; import { Tooltip } from "antd"; import { formatNumberWithCommas } from "@/utils/dataUtils"; import { PencilAltIcon, TrashIcon } from "@heroicons/react/outline"; diff --git a/ui/litellm-dashboard/src/components/OldTeams.tsx b/ui/litellm-dashboard/src/components/OldTeams.tsx index 56c73e8691..df56ab5a5e 100644 --- a/ui/litellm-dashboard/src/components/OldTeams.tsx +++ b/ui/litellm-dashboard/src/components/OldTeams.tsx @@ -755,6 +755,7 @@ const Teams: React.FC = ({ Models Organization Info + Actions @@ -937,20 +938,28 @@ const Teams: React.FC = ({ {userRole == "Admin" ? ( <> - { - setSelectedTeamId(team.team_id); - setEditTeam(true); - }} - /> - handleDelete(team.team_id)} - icon={TrashIcon} - size="sm" - data-testid="delete-team-button" - /> + + {" "} + { + setSelectedTeamId(team.team_id); + setEditTeam(true); + }} + /> + + + {" "} + handleDelete(team.team_id)} + icon={TrashIcon} + size="sm" + className="cursor-pointer hover:text-red-600" + data-testid="delete-team-button" + /> + ) : null} diff --git a/ui/litellm-dashboard/src/components/guardrails/guardrail_table.tsx b/ui/litellm-dashboard/src/components/guardrails/guardrail_table.tsx index 6a2476960f..352f3148e7 100644 --- a/ui/litellm-dashboard/src/components/guardrails/guardrail_table.tsx +++ b/ui/litellm-dashboard/src/components/guardrails/guardrail_table.tsx @@ -159,7 +159,7 @@ const GuardrailTable: React.FC = ({ }, { id: "actions", - header: "", + header: "Actions", cell: ({ row }) => { const guardrail = row.original; const isConfigGuardrail = guardrail.guardrail_definition_location === GuardrailDefinitionLocation.CONFIG; @@ -177,16 +177,17 @@ const GuardrailTable: React.FC = ({ /> ) : ( - - guardrail.guardrail_id && - onDeleteClick(guardrail.guardrail_id, guardrail.guardrail_name || "Unnamed Guardrail") - } - className="cursor-pointer hover:text-red-500" - tooltip="Delete guardrail" - /> + + + guardrail.guardrail_id && + onDeleteClick(guardrail.guardrail_id, guardrail.guardrail_name || "Unnamed Guardrail") + } + className="cursor-pointer hover:text-red-500" + /> + )}
); diff --git a/ui/litellm-dashboard/src/components/molecules/models/columns.tsx b/ui/litellm-dashboard/src/components/molecules/models/columns.tsx index b94f4a2d00..d3e01a6632 100644 --- a/ui/litellm-dashboard/src/components/molecules/models/columns.tsx +++ b/ui/litellm-dashboard/src/components/molecules/models/columns.tsx @@ -290,23 +290,25 @@ export const columns = ( }, { id: "actions", - header: "", + header: () => Actions, cell: ({ row }) => { const model = row.original; const canEditModel = userRole === "Admin" || model.model_info?.created_by === userID; return (
- { - if (canEditModel) { - setSelectedModelId(model.model_info.id); - setEditModel(false); - } - }} - className={!canEditModel ? "opacity-50 cursor-not-allowed" : "cursor-pointer"} - /> + + { + if (canEditModel) { + setSelectedModelId(model.model_info.id); + setEditModel(false); + } + }} + className={!canEditModel ? "opacity-50 cursor-not-allowed" : "cursor-pointer hover:text-red-600"} + /> +
); }, diff --git a/ui/litellm-dashboard/src/components/organizations.test.tsx b/ui/litellm-dashboard/src/components/organizations.test.tsx new file mode 100644 index 0000000000..58eb9bb492 --- /dev/null +++ b/ui/litellm-dashboard/src/components/organizations.test.tsx @@ -0,0 +1,33 @@ +import { render } from "@testing-library/react"; +import { describe, expect, it, vi } from "vitest"; +import React from "react"; + +vi.mock("./vector_store_management/VectorStoreSelector", () => ({ + __esModule: true, + default: () => null, +})); +vi.mock("./mcp_server_management/MCPServerSelector", () => ({ + __esModule: true, + default: () => null, +})); + +import OrganizationsTable from "./organizations"; + +describe("OrganizationsTable", () => { + it("should render the OrganizationsTable component", () => { + const setOrganizations = vi.fn(); + + const { getByText } = render( + , + ); + + expect(getByText("+ Create New Organization")).toBeInTheDocument(); + }); +}); diff --git a/ui/litellm-dashboard/src/components/organizations.tsx b/ui/litellm-dashboard/src/components/organizations.tsx index 854073d847..71e9030a24 100644 --- a/ui/litellm-dashboard/src/components/organizations.tsx +++ b/ui/litellm-dashboard/src/components/organizations.tsx @@ -370,19 +370,27 @@ const OrganizationsTable: React.FC = ({ {userRole === "Admin" && ( <> - { - setSelectedOrgId(org.organization_id); - setEditOrg(true); - }} - /> - handleDelete(org.organization_id)} - icon={TrashIcon} - size="sm" - /> + + {" "} + { + setSelectedOrgId(org.organization_id); + setEditOrg(true); + }} + /> + + + {" "} + handleDelete(org.organization_id)} + icon={TrashIcon} + size="sm" + className="cursor-pointer hover:text-red-600" + /> + )} diff --git a/ui/litellm-dashboard/src/components/view_users/columns.tsx b/ui/litellm-dashboard/src/components/view_users/columns.tsx index 8946aac228..cb6c54d4d5 100644 --- a/ui/litellm-dashboard/src/components/view_users/columns.tsx +++ b/ui/litellm-dashboard/src/components/view_users/columns.tsx @@ -109,17 +109,32 @@ export const columns = ( }, { id: "actions", - header: "", + header: "Actions", cell: ({ row }) => (
- - handleUserClick(row.original.user_id, true)} /> + + handleUserClick(row.original.user_id, true)} + className="cursor-pointer hover:text-blue-600" + /> - - handleDelete(row.original.user_id)} /> + + handleDelete(row.original.user_id)} + className="cursor-pointer hover:text-red-600" + /> - - handleResetPassword(row.original.user_id)} /> + + handleResetPassword(row.original.user_id)} + className="cursor-pointer hover:text-green-600" + />
), diff --git a/ui/litellm-dashboard/src/components/view_users/table.test.tsx b/ui/litellm-dashboard/src/components/view_users/table.test.tsx new file mode 100644 index 0000000000..5b612b2732 --- /dev/null +++ b/ui/litellm-dashboard/src/components/view_users/table.test.tsx @@ -0,0 +1,46 @@ +import { render } from "@testing-library/react"; +import { describe, expect, it, vi } from "vitest"; +import React from "react"; + +import { UserDataTable } from "./table"; + +describe("UserDataTable", () => { + it("should render the UserDataTable component", () => { + const filters = { + email: "", + user_id: "", + user_role: "", + sso_user_id: "", + team: "", + model: "", + min_spend: null, + max_spend: null, + sort_by: "", + sort_order: "asc" as const, + }; + + const updateFilters = vi.fn(); + + const { getByText } = render( + , + ); + + expect(getByText("Filters")).toBeInTheDocument(); + }); +}); From 2bd6d0d82b8327990cd2a14c2c9a3f28b2e1c710 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 14 Nov 2025 16:00:43 -0800 Subject: [PATCH 24/42] [Feat] Bedrock Batches - Add support for custom KMS encryption keys in Bedrock Batch operations (#16662) * add s3_encryption_key_id * add s3EncryptionKeyId to BedrockS3OutputDataConfig * use s3EncryptionKeyId in bedrock output * docs s3_encryption_key_id * test_bedrock_batch_with_encryption_key_in_post_request --- .../docs/providers/bedrock_batches.md | 31 ++++++++++++ .../llms/bedrock/batches/transformation.py | 17 +++++-- litellm/types/llms/bedrock.py | 3 +- litellm/types/router.py | 2 + .../test_bedrock_files_and_batches.py | 50 +++++++++++++++++++ 5 files changed, 99 insertions(+), 4 deletions(-) diff --git a/docs/my-website/docs/providers/bedrock_batches.md b/docs/my-website/docs/providers/bedrock_batches.md index c262eef0e8..a1116f4107 100644 --- a/docs/my-website/docs/providers/bedrock_batches.md +++ b/docs/my-website/docs/providers/bedrock_batches.md @@ -40,6 +40,8 @@ model_list: s3_access_key_id: os.environ/AWS_ACCESS_KEY_ID s3_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY aws_batch_role_arn: arn:aws:iam::888602223428:role/service-role/AmazonBedrockExecutionRoleForAgents_BB9HNW6V4CV + # Optional: Custom KMS encryption key for S3 output + # s3_encryption_key_id: arn:aws:kms:us-west-2:123456789012:key/12345678-1234-1234-1234-123456789012 model_info: mode: batch # 👈 SPECIFY MODE AS BATCH, to tell user this is a batch model ``` @@ -55,6 +57,12 @@ model_list: | `aws_batch_role_arn` | IAM role ARN for Bedrock batch operations. Bedrock Batch APIs require an IAM role ARN to be set. | | `mode: batch` | Indicates to LiteLLM this is a batch model | +**Optional Parameters:** + +| Parameter | Description | +|-----------|-------------| +| `s3_encryption_key_id` | Custom KMS encryption key ID for S3 output data. If not specified, Bedrock uses AWS managed encryption keys. | + ### 2. Create Virtual Key ```bash showLineNumbers title="create_virtual_key.sh" @@ -174,6 +182,29 @@ When a `target_model_names` is specified, the file is written to the S3 bucket c LiteLLM only supports Bedrock Anthropic Models for Batch API. If you want other bedrock models file an issue [here](https://github.com/BerriAI/litellm/issues/new/choose). +### How do I use a custom KMS encryption key? + +If your S3 bucket requires a custom KMS encryption key, you can specify it in your configuration using `s3_encryption_key_id`. This is useful for enterprise customers with specific encryption requirements. + +You can set the encryption key in 2 ways: + +1. **In config.yaml** (recommended): +```yaml +model_list: + - model_name: "bedrock-batch-claude" + litellm_params: + model: bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0 + s3_encryption_key_id: arn:aws:kms:us-west-2:123456789012:key/12345678-1234-1234-1234-123456789012 + # ... other params +``` + +2. **As an environment variable**: +```bash +export AWS_S3_ENCRYPTION_KEY_ID=arn:aws:kms:us-west-2:123456789012:key/12345678-1234-1234-1234-123456789012 +``` + + + ## Further Reading - [AWS Bedrock Batch Inference Documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference.html) diff --git a/litellm/llms/bedrock/batches/transformation.py b/litellm/llms/bedrock/batches/transformation.py index 2f3d00dddd..a9bc1b26c8 100644 --- a/litellm/llms/bedrock/batches/transformation.py +++ b/litellm/llms/bedrock/batches/transformation.py @@ -6,6 +6,7 @@ from httpx import Headers, Response from litellm.llms.base_llm.batches.transformation import BaseBatchesConfig from litellm.llms.base_llm.chat.transformation import BaseLLMException +from litellm.secret_managers.main import get_secret_str from litellm.types.llms.bedrock import ( BedrockCreateBatchRequest, BedrockCreateBatchResponse, @@ -140,10 +141,20 @@ class BedrockBatchesConfig(BaseAWSLLM, BaseBatchesConfig): } # Build output data config + s3_output_config: BedrockS3OutputDataConfig = BedrockS3OutputDataConfig( + s3Uri=f"s3://{output_bucket}/{output_key}" + ) + + # Add optional KMS encryption key ID if provided + s3_encryption_key_id = ( + litellm_params.get("s3_encryption_key_id") + or get_secret_str("AWS_S3_ENCRYPTION_KEY_ID") + ) + if s3_encryption_key_id: + s3_output_config["s3EncryptionKeyId"] = s3_encryption_key_id + output_data_config: BedrockOutputDataConfig = { - "s3OutputDataConfig": BedrockS3OutputDataConfig( - s3Uri=f"s3://{output_bucket}/{output_key}" - ) + "s3OutputDataConfig": s3_output_config } # Create Bedrock batch request with proper typing diff --git a/litellm/types/llms/bedrock.py b/litellm/types/llms/bedrock.py index bc752dd26a..330308e179 100644 --- a/litellm/types/llms/bedrock.py +++ b/litellm/types/llms/bedrock.py @@ -679,10 +679,11 @@ class BedrockInputDataConfig(TypedDict): s3InputDataConfig: BedrockS3InputDataConfig -class BedrockS3OutputDataConfig(TypedDict): +class BedrockS3OutputDataConfig(TypedDict, total=False): """S3 output data configuration for Bedrock batch jobs.""" s3Uri: str + s3EncryptionKeyId: Optional[str] class BedrockOutputDataConfig(TypedDict): diff --git a/litellm/types/router.py b/litellm/types/router.py index 3801d5bb78..2bf126211c 100644 --- a/litellm/types/router.py +++ b/litellm/types/router.py @@ -205,6 +205,7 @@ class GenericLiteLLMParams(CredentialLiteLLMParams, CustomPricingLiteLLMParams): # Batch/File API Params s3_bucket_name: Optional[str] = None + s3_encryption_key_id: Optional[str] = None gcs_bucket_name: Optional[str] = None # Vector Store Params @@ -262,6 +263,7 @@ class GenericLiteLLMParams(CredentialLiteLLMParams, CustomPricingLiteLLMParams): auto_router_embedding_model: Optional[str] = None, # Batch/File API Params s3_bucket_name: Optional[str] = None, + s3_encryption_key_id: Optional[str] = None, gcs_bucket_name: Optional[str] = None, **params, ): diff --git a/tests/batches_tests/test_bedrock_files_and_batches.py b/tests/batches_tests/test_bedrock_files_and_batches.py index d082ed41ea..6ae373995d 100644 --- a/tests/batches_tests/test_bedrock_files_and_batches.py +++ b/tests/batches_tests/test_bedrock_files_and_batches.py @@ -193,3 +193,53 @@ async def test_bedrock_retrieve_batch(): assert batch_response.input_file_id == "s3://test-bucket/input/test-input.jsonl" assert batch_response.output_file_id == "s3://test-bucket/output/" + +def test_bedrock_batch_with_encryption_key_in_post_request(): + """ + Test that s3_encryption_key_id is included in the AWS POST request payload. + """ + import json + import litellm + + test_kms_key_id = "arn:aws:kms:us-west-2:123456789012:key/12345678-1234-1234-1234-123456789012" + + captured_request_body = None + + def mock_post(*args, **kwargs): + nonlocal captured_request_body + if "data" in kwargs: + captured_request_body = kwargs["data"] + + mock_response = MagicMock() + mock_response.json.return_value = { + "jobArn": "arn:aws:bedrock:us-west-2:123456789012:model-invocation-job/test-job", + "jobName": "test-job", + "status": "Submitted" + } + mock_response.status_code = 200 + mock_response.raise_for_status.return_value = None + return mock_response + + with patch("litellm.llms.custom_httpx.http_handler.HTTPHandler.post", side_effect=mock_post): + response = litellm.create_batch( + completion_window="24h", + endpoint="/v1/chat/completions", + input_file_id="s3://test-bucket/input/test.jsonl", + custom_llm_provider="bedrock", + model="us.anthropic.claude-3-5-sonnet-20240620-v1:0", + s3_encryption_key_id=test_kms_key_id, + aws_batch_role_arn="arn:aws:iam::123456789012:role/test-role" + ) + + assert captured_request_body is not None, "Request body was not captured" + + request_data = json.loads(captured_request_body) + print("REQUEST DATA to bedrock batch creation", json.dumps(request_data, indent=4)) + + assert "outputDataConfig" in request_data + assert "s3OutputDataConfig" in request_data["outputDataConfig"] + assert "s3EncryptionKeyId" in request_data["outputDataConfig"]["s3OutputDataConfig"] + assert request_data["outputDataConfig"]["s3OutputDataConfig"]["s3EncryptionKeyId"] == test_kms_key_id + + print("SUCCESS: s3_encryption_key_id properly included in AWS POST request") + From f1ff195bd85c8addf05d9d207ad15ad9f4658b50 Mon Sep 17 00:00:00 2001 From: yuneng-jiang Date: Fri, 14 Nov 2025 16:08:27 -0800 Subject: [PATCH 25/42] Add Model uses endpoint info (#16664) --- .../provider_create_metadata.py | 25 + .../public_endpoints/test_public_endpoints.py | 19 + .../add_model/add_model_tab.test.tsx | 9 + .../components/add_model/add_model_tab.tsx | 135 +++- .../handle_add_model_submit.test.tsx | 58 ++ .../add_model/handle_add_model_submit.tsx | 13 +- .../provider_specific_fields.test.tsx | 95 ++- .../add_model/provider_specific_fields.tsx | 687 ++++-------------- .../src/components/model_info_view.tsx | 11 +- .../components/molecules/models/columns.tsx | 10 +- .../src/components/networking.tsx | 45 +- 11 files changed, 516 insertions(+), 591 deletions(-) create mode 100644 ui/litellm-dashboard/src/components/add_model/handle_add_model_submit.test.tsx diff --git a/litellm/proxy/public_endpoints/provider_create_metadata.py b/litellm/proxy/public_endpoints/provider_create_metadata.py index f2ef03e2a0..bfb2fb2fe0 100644 --- a/litellm/proxy/public_endpoints/provider_create_metadata.py +++ b/litellm/proxy/public_endpoints/provider_create_metadata.py @@ -6,6 +6,7 @@ from litellm.types.proxy.public_endpoints.public_endpoints import ( ProviderCreateInfo, ProviderCredentialField, ) +from litellm.types.utils import LlmProviders DEFAULT_MODEL_PLACEHOLDER = "gpt-3.5-turbo" @@ -739,6 +740,30 @@ def get_provider_create_metadata() -> List[ProviderCreateInfo]: ) ) + # Ensure we have metadata entries for all providers defined in LlmProviders. + # If a provider enum value is not already present in the litellm_provider + # field of any entry, create a default entry for it using the fallback + # credential fields (api_key + api_base) and a generated display name. + existing_litellm_providers = {p.litellm_provider for p in providers} + + for provider_enum in LlmProviders: + litellm_provider_value = provider_enum.value + if litellm_provider_value in existing_litellm_providers: + continue + + normalized_fields = [_normalize_field(field) for field in _FALLBACK_FIELDS] + provider_display_name = provider_enum.value.replace("_", " ").title() + + providers.append( + ProviderCreateInfo( + provider=provider_enum.name, + provider_display_name=provider_display_name, + litellm_provider=litellm_provider_value, + default_model_placeholder=DEFAULT_MODEL_PLACEHOLDER, + credential_fields=normalized_fields, + ) + ) + providers.sort(key=lambda item: item.provider_display_name.lower()) return providers diff --git a/tests/test_litellm/proxy/public_endpoints/test_public_endpoints.py b/tests/test_litellm/proxy/public_endpoints/test_public_endpoints.py index f433c64c58..8456cf5538 100644 --- a/tests/test_litellm/proxy/public_endpoints/test_public_endpoints.py +++ b/tests/test_litellm/proxy/public_endpoints/test_public_endpoints.py @@ -45,3 +45,22 @@ def test_get_provider_fields_returns_metadata(): credential_keys = {field["key"] for field in openai_fields["credential_fields"]} assert {"api_base", "api_key"}.issubset(credential_keys) + # Every provider exposed by `/public/providers` (i.e. every LlmProviders value) + # should have a corresponding entry in `/public/providers/fields`. + expected_litellm_providers = {provider.value for provider in LlmProviders} + actual_litellm_providers = {item["litellm_provider"] for item in payload} + assert expected_litellm_providers.issubset(actual_litellm_providers) + + # Sanity check for runwayml specifically – it should be present and use the + # default API base + API key credential fields at minimum. + runway_entries = [ + item for item in payload if item["litellm_provider"] == "runwayml" + ] + assert ( + len(runway_entries) >= 1 + ), "Expected runwayml provider metadata in /public/providers/fields" + runway_credential_keys = { + field["key"] for field in runway_entries[0]["credential_fields"] + } + assert {"api_base", "api_key"}.issubset(runway_credential_keys) + diff --git a/ui/litellm-dashboard/src/components/add_model/add_model_tab.test.tsx b/ui/litellm-dashboard/src/components/add_model/add_model_tab.test.tsx index a74c6d283c..a3937c2f2f 100644 --- a/ui/litellm-dashboard/src/components/add_model/add_model_tab.test.tsx +++ b/ui/litellm-dashboard/src/components/add_model/add_model_tab.test.tsx @@ -19,6 +19,15 @@ vi.mock("../networking", async () => { modelAvailableCall: vi.fn().mockResolvedValue({ data: [{ id: "model-group-1" }, { id: "model-group-2" }], }), + getProviderCreateMetadata: vi.fn().mockResolvedValue([ + { + provider: "OpenAI", + provider_display_name: "OpenAI", + litellm_provider: "openai", + default_model_placeholder: "gpt-3.5-turbo", + credential_fields: [], + }, + ]), }; }); diff --git a/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx b/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx index 678ba741ca..4efcd7be90 100644 --- a/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx +++ b/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useMemo, useState } from "react"; import { Card, Form, Button, Tooltip, Typography, Select as AntdSelect, Modal } from "antd"; import type { FormInstance } from "antd"; import type { UploadProps } from "antd/es/upload"; @@ -9,7 +9,14 @@ import ProviderSpecificFields from "./provider_specific_fields"; import AdvancedSettings from "./advanced_settings"; import { Providers, providerLogoMap } from "../provider_info_helpers"; import type { Team } from "../key_team_helpers/key_list"; -import { CredentialItem, getGuardrailsList, modelAvailableCall, tagListCall } from "../networking"; +import { + type CredentialItem, + type ProviderCreateInfo, + getGuardrailsList, + getProviderCreateMetadata, + modelAvailableCall, + tagListCall, +} from "../networking"; import ConnectionErrorDisplay from "./model_connection_test"; import { TEST_MODES } from "./add_model_modes"; import { Row, Col } from "antd"; @@ -68,6 +75,11 @@ const AddModelTab: React.FC = ({ // Using a unique ID to force the ConnectionErrorDisplay to remount and run a fresh test const [connectionTestId, setConnectionTestId] = useState(""); + // Provider metadata for driving the provider select from backend config + const [providerMetadata, setProviderMetadata] = useState(null); + const [isProviderMetadataLoading, setIsProviderMetadataLoading] = useState(false); + const [providerMetadataError, setProviderMetadataError] = useState(null); + useEffect(() => { const fetchGuardrails = async () => { try { @@ -95,6 +107,37 @@ const AddModelTab: React.FC = ({ fetchTags(); }, [accessToken]); + useEffect(() => { + let isMounted = true; + + const fetchProviderMetadata = async () => { + setIsProviderMetadataLoading(true); + setProviderMetadataError(null); + try { + const metadata = await getProviderCreateMetadata(); + if (!isMounted) { + return; + } + setProviderMetadata(metadata); + } catch (error) { + console.error("Failed to fetch provider metadata:", error); + if (isMounted) { + setProviderMetadataError("Failed to load providers"); + } + } finally { + if (isMounted) { + setIsProviderMetadataLoading(false); + } + } + }; + + fetchProviderMetadata(); + + return () => { + isMounted = false; + }; + }, []); + // Test connection when button is clicked const handleTestConnection = async () => { setIsTestingConnection(true); @@ -118,6 +161,13 @@ const AddModelTab: React.FC = ({ fetchModelAccessGroups(); }, [accessToken]); + const sortedProviderMetadata: ProviderCreateInfo[] = useMemo(() => { + if (!providerMetadata) { + return []; + } + return [...providerMetadata].sort((a, b) => a.provider_display_name.localeCompare(b.provider_display_name)); + }, [providerMetadata]); + const isAdmin = all_admin_roles.includes(userRole); const handleAutoRouterOk = () => { @@ -166,41 +216,68 @@ const AddModelTab: React.FC = ({ labelAlign="left" > { - setSelectedProvider(value); - setProviderModelsFn(value); + setSelectedProvider(value as Providers); + setProviderModelsFn(value as Providers); + form.setFieldsValue({ + custom_llm_provider: value, + }); form.setFieldsValue({ model: [], model_name: undefined, }); }} > - {Object.entries(Providers).map(([providerEnum, providerDisplayName]) => ( - -
- {`${providerEnum} { - // Create a div with provider initial as fallback - const target = e.target as HTMLImageElement; - const parent = target.parentElement; - if (parent) { - const fallbackDiv = document.createElement("div"); - fallbackDiv.className = - "w-5 h-5 rounded-full bg-gray-200 flex items-center justify-center text-xs"; - fallbackDiv.textContent = providerDisplayName.charAt(0); - parent.replaceChild(fallbackDiv, target); - } - }} - /> - {providerDisplayName} -
+ {providerMetadataError && sortedProviderMetadata.length === 0 && ( + + {providerMetadataError} - ))} + )} + {sortedProviderMetadata.map((providerInfo) => { + const displayName = providerInfo.provider_display_name; + const providerKey = providerInfo.provider; + const logoSrc = providerLogoMap[displayName] ?? ""; + + return ( + +
+ {logoSrc ? ( + {`${displayName} { + const target = e.currentTarget as HTMLImageElement; + const parent = target.parentElement; + if (!parent || !parent.contains(target)) { + return; + } + + try { + const fallbackDiv = document.createElement("div"); + fallbackDiv.className = + "w-5 h-5 rounded-full bg-gray-200 flex items-center justify-center text-xs"; + fallbackDiv.textContent = displayName.charAt(0); + parent.replaceChild(fallbackDiv, target); + } catch (error) { + console.error("Failed to replace provider logo fallback:", error); + } + }} + /> + ) : ( +
+ {displayName.charAt(0)} +
+ )} + {displayName} +
+
+ ); + })}
({ + default: { + fromBackend: vi.fn(), + }, +})); + +describe("prepareModelAddRequest", () => { + it("returns deployment data for the most basic form", async () => { + const formValues = { + model_mappings: [ + { + public_name: "Public Model", + litellm_model: "litellm/public", + }, + ], + model_name: "custom-model-name", + base_model: "gpt-4", + team_id: "team-123", + model_access_group: ["group-1"], + input_cost_per_token: "2000000", + output_cost_per_token: "1000000", + }; + + const deployments = await prepareModelAddRequest({ ...formValues }, "token", null); + + expect(deployments).toHaveLength(1); + const [deployment] = deployments!; + expect(deployment.modelName).toBe("Public Model"); + expect(deployment.litellmParamsObj.model).toBe("custom-model-name"); + expect(deployment.litellmParamsObj.input_cost_per_token).toBe(2); + expect(deployment.litellmParamsObj.output_cost_per_token).toBe(1); + expect(deployment.modelInfoObj.base_model).toBe("gpt-4"); + expect(deployment.modelInfoObj.access_groups).toEqual(["group-1"]); + expect(deployment.modelInfoObj.team_id).toBe("team-123"); + }); + + it("uses a lowercase fallback for unrecognized custom providers", async () => { + const fallbackValues = { + model_mappings: [ + { + public_name: "Petals Model", + litellm_model: "petals/model", + }, + ], + model_name: "petals/model", + custom_llm_provider: "Petals", + }; + + const deployments = await prepareModelAddRequest({ ...fallbackValues }, "token", null); + + expect(deployments).toHaveLength(1); + const [deployment] = deployments!; + expect(deployment.litellmParamsObj.custom_llm_provider).toBe("petals"); + }); +}); diff --git a/ui/litellm-dashboard/src/components/add_model/handle_add_model_submit.tsx b/ui/litellm-dashboard/src/components/add_model/handle_add_model_submit.tsx index e41b114c77..8fa5ffd56a 100644 --- a/ui/litellm-dashboard/src/components/add_model/handle_add_model_submit.tsx +++ b/ui/litellm-dashboard/src/components/add_model/handle_add_model_submit.tsx @@ -1,6 +1,6 @@ -import { provider_map, Providers } from "../provider_info_helpers"; -import { modelCreateCall, Model } from "../networking"; import NotificationManager from "../molecules/notifications_manager"; +import { Model, modelCreateCall } from "../networking"; +import { provider_map } from "../provider_info_helpers"; export const prepareModelAddRequest = async (formValues: Record, accessToken: string, form: any) => { try { @@ -14,8 +14,10 @@ export const prepareModelAddRequest = async (formValues: Record, ac // Handle wildcard case if (formValues["model"] && formValues["model"].includes("all-wildcard")) { - const customProvider: Providers = formValues["custom_llm_provider"]; - const litellm_custom_provider = provider_map[customProvider as keyof typeof Providers]; + const customProviderKey = formValues["custom_llm_provider"] as string; + const mappedProvider = + provider_map[customProviderKey as keyof typeof provider_map] ?? customProviderKey.toLowerCase(); + const litellm_custom_provider = mappedProvider; const wildcardModel = litellm_custom_provider + "/*"; formValues["model_name"] = wildcardModel; modelMappings.push({ @@ -59,7 +61,8 @@ export const prepareModelAddRequest = async (formValues: Record, ac litellmParamsObj["model"] = value; } else if (key == "custom_llm_provider") { console.log("custom_llm_provider:", value); - const mappingResult = provider_map[value]; // Get the corresponding value from the mapping + const providerKey = value as string; + const mappingResult = provider_map[providerKey as keyof typeof provider_map] ?? providerKey.toLowerCase(); litellmParamsObj["custom_llm_provider"] = mappingResult; console.log("custom_llm_provider mappingResult:", mappingResult); } else if (key == "model") { diff --git a/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.test.tsx b/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.test.tsx index 454caf9e60..ab9b3e92e9 100644 --- a/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.test.tsx +++ b/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.test.tsx @@ -1,9 +1,102 @@ import { render, waitFor } from "@testing-library/react"; -import { describe, it, expect, beforeAll } from "vitest"; +import { describe, it, expect, beforeAll, vi } from "vitest"; import { Form } from "antd"; import { Providers } from "../provider_info_helpers"; import ProviderSpecificFields from "./provider_specific_fields"; +vi.mock("../networking", async () => { + const actual = await vi.importActual("../networking"); + return { + ...actual, + getProviderCreateMetadata: vi.fn().mockResolvedValue([ + { + provider: "OpenAI", + provider_display_name: Providers.OpenAI, + litellm_provider: "openai", + default_model_placeholder: "gpt-3.5-turbo", + credential_fields: [ + { + key: "api_base", + label: "API Base", + field_type: "text", + placeholder: "https://api.openai.com/v1", + tooltip: + "Common endpoints: https://api.openai.com/v1, https://eu.api.openai.com, https://us.api.openai.com", + default_value: "https://api.openai.com/v1", + }, + { + key: "organization", + label: "OpenAI Organization ID", + placeholder: "[OPTIONAL] my-unique-org", + }, + { + key: "api_key", + label: "OpenAI API Key", + field_type: "password", + required: true, + }, + ], + }, + { + provider: "Hosted_Vllm", + provider_display_name: Providers.Hosted_Vllm, + litellm_provider: "hosted_vllm", + default_model_placeholder: "vllm/any-model", + credential_fields: [ + { + key: "api_base", + label: "API Base", + placeholder: "https://...", + }, + { + key: "api_key", + label: "vLLM API Key", + field_type: "password", + }, + ], + }, + { + provider: "Azure", + provider_display_name: Providers.Azure, + litellm_provider: "azure", + default_model_placeholder: "azure/my-deployment", + credential_fields: [ + { + key: "api_base", + label: "API Base", + placeholder: "https://...", + required: true, + }, + { + key: "api_version", + label: "API Version", + placeholder: "2023-07-01-preview", + tooltip: + "By default litellm will use the latest version. If you want to use a different version, you can specify it here", + }, + { + key: "base_model", + label: "Base Model", + placeholder: "azure/gpt-3.5-turbo", + }, + { + key: "api_key", + label: "Azure API Key", + field_type: "password", + placeholder: "Enter your Azure API Key", + }, + { + key: "azure_ad_token", + label: "Azure AD Token", + field_type: "password", + placeholder: "Enter your Azure AD Token", + }, + ], + }, + ]), + }; +}); + // Mock window.matchMedia for Ant Design components beforeAll(() => { Object.defineProperty(window, "matchMedia", { diff --git a/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx b/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx index c34014436b..c1b17ff441 100644 --- a/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx +++ b/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx @@ -4,7 +4,12 @@ import { TextInput, Text } from "@tremor/react"; import { Row, Col, Typography, Button as Button2, Upload, UploadProps } from "antd"; import { UploadOutlined } from "@ant-design/icons"; import { provider_map, Providers } from "../provider_info_helpers"; -import { CredentialItem } from "../networking"; +import { + CredentialItem, + ProviderCreateInfo, + ProviderCredentialFieldMetadata, + getProviderCreateMetadata, +} from "../networking"; const { Link } = Typography; interface ProviderSpecificFieldsProps { @@ -28,6 +33,33 @@ export interface CredentialValues { value: string; } +const mapFieldMetadataToUiField = (field: ProviderCredentialFieldMetadata): ProviderCredentialField => { + const type: ProviderCredentialField["type"] = + field.field_type === "password" + ? "password" + : field.field_type === "select" + ? "select" + : field.field_type === "upload" + ? "upload" + : "text"; + + return { + key: field.key, + label: field.label, + placeholder: field.placeholder ?? undefined, + tooltip: field.tooltip ?? undefined, + required: field.required ?? false, + type, + options: field.options ?? undefined, + defaultValue: field.default_value ?? undefined, + }; +}; + +// In-memory cache of provider credential fields keyed by provider display name. +// This lets us reuse the data across multiple mounts and also supports +// non-React helpers like createCredentialFromModel. +const providerFieldsByDisplayName: Record = {}; + export const createCredentialFromModel = (provider: string, modelData: any): CredentialItem => { console.log("provider", provider); console.log("modelData", modelData); @@ -35,8 +67,8 @@ export const createCredentialFromModel = (provider: string, modelData: any): Cre if (!enumKey) { throw new Error(`Provider ${provider} not found in provider_map`); } - const providerEnum = Providers[enumKey as keyof typeof Providers]; - const providerFields = PROVIDER_CREDENTIAL_FIELDS[providerEnum] || []; + const providerDisplayName = Providers[enumKey as keyof typeof Providers]; + const providerFields = providerFieldsByDisplayName[providerDisplayName] || []; const credentialValues: object = {}; console.log("providerFields", providerFields); @@ -63,554 +95,103 @@ export const createCredentialFromModel = (provider: string, modelData: any): Cre return credential; }; -const PROVIDER_CREDENTIAL_FIELDS: Record = { - [Providers.OpenAI]: [ - { - key: "api_base", - label: "API Base", - type: "select", - placeholder: "Select an endpoint", - tooltip: "Select from common OpenAI endpoints", - defaultValue: "https://api.openai.com/v1", - options: [ - "https://api.openai.com/v1", - "https://us.api.openai.com/v1", - "https://eu.api.openai.com/v1", - ], - }, - { - key: "organization", - label: "OpenAI Organization ID", - placeholder: "[OPTIONAL] my-unique-org", - }, - { - key: "api_key", - label: "OpenAI API Key", - type: "password", - required: true, - }, - ], - [Providers.OpenAI_Text]: [ - { - key: "api_base", - label: "API Base", - type: "select", - placeholder: "Select an endpoint", - tooltip: "Select from common OpenAI endpoints", - defaultValue: "https://api.openai.com/v1", - options: [ - "https://api.openai.com/v1", - "https://us.api.openai.com/v1", - "https://eu.api.openai.com/v1", - ], - }, - { - key: "organization", - label: "OpenAI Organization ID", - placeholder: "[OPTIONAL] my-unique-org", - }, - { - key: "api_key", - label: "OpenAI API Key", - type: "password", - required: true, - }, - ], - [Providers.Vertex_AI]: [ - { - key: "vertex_project", - label: "Vertex Project", - placeholder: "adroit-cadet-1234..", - required: true, - }, - { - key: "vertex_location", - label: "Vertex Location", - placeholder: "us-east-1", - required: true, - }, - { - key: "vertex_credentials", - label: "Vertex Credentials", - required: true, - type: "upload", - }, - ], - [Providers.AssemblyAI]: [ - { - key: "api_base", - label: "API Base", - type: "select", - required: true, - options: ["https://api.assemblyai.com", "https://api.eu.assemblyai.com"], - }, - { - key: "api_key", - label: "AssemblyAI API Key", - type: "password", - required: true, - }, - ], - [Providers.Azure]: [ - { - key: "api_base", - label: "API Base", - placeholder: "https://...", - required: true, - }, - { - key: "api_version", - label: "API Version", - placeholder: "2023-07-01-preview", - tooltip: - "By default litellm will use the latest version. If you want to use a different version, you can specify it here", - }, - { - key: "base_model", - label: "Base Model", - placeholder: "azure/gpt-3.5-turbo", - }, - { - key: "api_key", - label: "Azure API Key", - type: "password", - placeholder: "Enter your Azure API Key", - required: false, - }, - { - key: "azure_ad_token", - label: "Azure AD Token", - type: "password", - placeholder: "Enter your Azure AD Token", - required: false, - }, - ], - [Providers.Azure_AI_Studio]: [ - { - key: "api_base", - label: "API Base", - placeholder: "https://.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-10-21", - tooltip: - "Enter your full Target URI from Azure Foundry here. Example: https://litellm8397336933.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-10-21", - required: true, - }, - { - key: "api_key", - label: "Azure API Key", - type: "password", - required: true, - }, - ], - [Providers.OpenAI_Compatible]: [ - { - key: "api_base", - label: "API Base", - placeholder: "https://...", - required: true, - }, - { - key: "api_key", - label: "OpenAI API Key", - type: "password", - required: true, - }, - ], - [Providers.Dashscope]: [ - { - key: "api_key", - label: "Dashscope API Key", - type: "password", - required: true, - }, - { - key: "api_base", - label: "API Base", - placeholder: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", - defaultValue: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", - required: true, - tooltip: - "The base URL for your Dashscope server. Defaults to https://dashscope-intl.aliyuncs.com/compatible-mode/v1 if not specified.", - }, - ], - [Providers.OpenAI_Text_Compatible]: [ - { - key: "api_base", - label: "API Base", - placeholder: "https://...", - required: true, - }, - { - key: "api_key", - label: "OpenAI API Key", - type: "password", - required: true, - }, - ], - [Providers.Bedrock]: [ - { - key: "aws_access_key_id", - label: "AWS Access Key ID", - type: "password", - required: false, - tooltip: "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", - }, - { - key: "aws_secret_access_key", - label: "AWS Secret Access Key", - type: "password", - required: false, - tooltip: "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", - }, - { - key: "aws_session_token", - label: "AWS Session Token", - type: "password", - required: false, - tooltip: - "Temporary credentials session token. You can provide the raw token or the environment variable (e.g. `os.environ/MY_SESSION_TOKEN`).", - }, - { - key: "aws_region_name", - label: "AWS Region Name", - placeholder: "us-east-1", - required: false, - tooltip: "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", - }, - { - key: "aws_session_name", - label: "AWS Session Name", - placeholder: "my-session", - required: false, - tooltip: - "Name for the AWS session. You can provide the raw value or the environment variable (e.g. `os.environ/MY_SESSION_NAME`).", - }, - { - key: "aws_profile_name", - label: "AWS Profile Name", - placeholder: "default", - required: false, - tooltip: - "AWS profile name to use for authentication. You can provide the raw value or the environment variable (e.g. `os.environ/MY_PROFILE_NAME`).", - }, - { - key: "aws_role_name", - label: "AWS Role Name", - placeholder: "MyRole", - required: false, - tooltip: - "AWS IAM role name to assume. You can provide the raw value or the environment variable (e.g. `os.environ/MY_ROLE_NAME`).", - }, - { - key: "aws_web_identity_token", - label: "AWS Web Identity Token", - type: "password", - required: false, - tooltip: - "Web identity token for OIDC authentication. You can provide the raw token or the environment variable (e.g. `os.environ/MY_WEB_IDENTITY_TOKEN`).", - }, - { - key: "aws_bedrock_runtime_endpoint", - label: "AWS Bedrock Runtime Endpoint", - placeholder: "https://bedrock-runtime.us-east-1.amazonaws.com", - required: false, - tooltip: - "Custom Bedrock runtime endpoint URL. You can provide the raw value or the environment variable (e.g. `os.environ/MY_BEDROCK_ENDPOINT`).", - }, - ], - [Providers.SageMaker]: [ - { - key: "aws_access_key_id", - label: "AWS Access Key ID", - type: "password", - required: false, - tooltip: "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", - }, - { - key: "aws_secret_access_key", - label: "AWS Secret Access Key", - type: "password", - required: false, - tooltip: "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", - }, - { - key: "aws_region_name", - label: "AWS Region Name", - placeholder: "us-east-1", - required: false, - tooltip: "You can provide the raw key or the environment variable (e.g. `os.environ/MY_SECRET_KEY`).", - }, - ], - [Providers.Ollama]: [ - { - key: "api_base", - label: "API Base", - placeholder: "http://localhost:11434", - defaultValue: "http://localhost:11434", - required: false, - tooltip: "The base URL for your Ollama server. Defaults to http://localhost:11434 if not specified.", - }, - ], - [Providers.Anthropic]: [ - { - key: "api_key", - label: "API Key", - placeholder: "sk-", - type: "password", - required: true, - }, - ], - [Providers.Deepgram]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.ElevenLabs]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.Google_AI_Studio]: [ - { - key: "api_key", - label: "API Key", - placeholder: "aig-", - type: "password", - required: true, - }, - ], - [Providers.Groq]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.MistralAI]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.Deepseek]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.Cohere]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.Databricks]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.xAI]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.AIML]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.Cerebras]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.Sambanova]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.Perplexity]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.TogetherAI]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.Openrouter]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.FireworksAI]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.GradientAI]: [ - { - key: "api_base", - label: "GradientAI Endpoint", - placeholder: "https://...", - required: false, - }, - { - key: "api_key", - label: "GradientAI API Key", - type: "password", - required: true, - }, - ], - [Providers.Triton]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: false, - }, - { - key: "api_base", - label: "API Base", - placeholder: "http://localhost:8000/generate", - required: false, - }, - ], - [Providers.Hosted_Vllm]: [ - { - key: "api_base", - label: "API Base", - placeholder: "https://...", - required: true, - }, - { - key: "api_key", - label: "vLLM API Key", - type: "password", - required: false, - }, - ], - [Providers.Voyage]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.JinaAI]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.VolcEngine]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.DeepInfra]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.Oracle]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], - [Providers.Snowflake]: [ - { - key: "api_key", - label: "Snowflake API Key / JWT Key for Authentication", - type: "password", - required: true, - }, - { - key: "api_base", - label: "Snowflake API Endpoint", - placeholder: "https://1234567890.snowflakecomputing.com/api/v2/cortex/inference:complete", - tooltip: - "Enter the full endpoint with path here. Example: https://1234567890.snowflakecomputing.com/api/v2/cortex/inference:complete", - required: true, - }, - ], - [Providers.Infinity]: [ - { - key: "api_base", - label: "API Base", - placeholder: "http://localhost:7997", - }, - ], - [Providers.FalAI]: [ - { - key: "api_key", - label: "API Key", - type: "password", - required: true, - }, - ], -}; - const ProviderSpecificFields: React.FC = ({ selectedProvider, uploadProps }) => { const selectedProviderEnum = Providers[selectedProvider as keyof typeof Providers] as Providers; const form = Form.useFormInstance(); // Get form instance from context - // Simply use the fields as defined in PROVIDER_CREDENTIAL_FIELDS + const [providerMetadata, setProviderMetadata] = React.useState(null); + const [isLoading, setIsLoading] = React.useState(false); + const [loadError, setLoadError] = React.useState(null); + + React.useEffect(() => { + const hasCachedFields = Object.keys(providerFieldsByDisplayName).length > 0; + if (hasCachedFields) { + // We already have fields cached globally; no need to refetch. + // This is important so we can reuse credential field definitions + // across mounts and in non-React helpers. + return; + } + + let isMounted = true; + + const fetchProviderFields = async () => { + setIsLoading(true); + setLoadError(null); + try { + const metadata = await getProviderCreateMetadata(); + if (!isMounted) { + return; + } + setProviderMetadata(metadata); + + // Populate cache keyed by provider display name and identifiers + metadata.forEach((providerInfo) => { + const displayName = providerInfo.provider_display_name; + const mappedFields = providerInfo.credential_fields.map(mapFieldMetadataToUiField); + + // Primary key: human-readable display name + providerFieldsByDisplayName[displayName] = mappedFields; + + // Also cache by backend identifiers so lookups by provider slug work + if (providerInfo.provider) { + providerFieldsByDisplayName[providerInfo.provider] = mappedFields; + } + if (providerInfo.litellm_provider) { + providerFieldsByDisplayName[providerInfo.litellm_provider] = mappedFields; + } + }); + } catch (error) { + console.error("Failed to load provider credential fields:", error); + if (isMounted) { + setLoadError("Failed to load provider credential fields"); + } + } finally { + if (isMounted) { + setIsLoading(false); + } + } + }; + + fetchProviderFields(); + + return () => { + isMounted = false; + }; + }, []); + const allFields = React.useMemo(() => { - return PROVIDER_CREDENTIAL_FIELDS[selectedProviderEnum] || []; - }, [selectedProviderEnum]); + // First try to resolve from the in-memory cache. We support both the + // enum/display-name form and the raw provider slug (e.g. "petals"). + const cachedFields = + providerFieldsByDisplayName[selectedProviderEnum] ?? providerFieldsByDisplayName[selectedProvider]; + if (cachedFields) { + return cachedFields; + } + + if (!providerMetadata) { + return []; + } + + const providerInfo = providerMetadata.find( + (p) => + p.provider_display_name === selectedProviderEnum || + p.provider === selectedProvider || + p.litellm_provider === selectedProvider, + ); + if (!providerInfo) { + return []; + } + + const mapped = providerInfo.credential_fields.map(mapFieldMetadataToUiField); + providerFieldsByDisplayName[providerInfo.provider_display_name] = mapped; + if (providerInfo.provider) { + providerFieldsByDisplayName[providerInfo.provider] = mapped; + } + if (providerInfo.litellm_provider) { + providerFieldsByDisplayName[providerInfo.litellm_provider] = mapped; + } + return mapped; + }, [selectedProviderEnum, selectedProvider, providerMetadata]); const handleUpload = { name: "file", @@ -643,6 +224,20 @@ const ProviderSpecificFields: React.FC = ({ selecte return ( <> + {isLoading && allFields.length === 0 && ( + + + Loading provider fields... + + + )} + {loadError && allFields.length === 0 && ( + + + {loadError} + + + )} {allFields.map((field) => ( { - // Create a div with provider initial as fallback - const target = e.target as HTMLImageElement; + const target = e.currentTarget as HTMLImageElement; const parent = target.parentElement; - if (parent) { + if (!parent || !parent.contains(target)) { + return; + } + + try { const fallbackDiv = document.createElement("div"); fallbackDiv.className = "w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs"; fallbackDiv.textContent = modelData.provider?.charAt(0) || "-"; parent.replaceChild(fallbackDiv, target); + } catch (error) { + console.error("Failed to replace provider logo fallback:", error); } }} /> diff --git a/ui/litellm-dashboard/src/components/molecules/models/columns.tsx b/ui/litellm-dashboard/src/components/molecules/models/columns.tsx index d3e01a6632..782eb3394a 100644 --- a/ui/litellm-dashboard/src/components/molecules/models/columns.tsx +++ b/ui/litellm-dashboard/src/components/molecules/models/columns.tsx @@ -67,14 +67,20 @@ export const columns = ( alt={`${model.provider} logo`} className="w-4 h-4" onError={(e) => { - const target = e.target as HTMLImageElement; + const target = e.currentTarget as HTMLImageElement; const parent = target.parentElement; - if (parent) { + if (!parent || !parent.contains(target)) { + return; + } + + try { const fallbackDiv = document.createElement("div"); fallbackDiv.className = "w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs"; fallbackDiv.textContent = model.provider?.charAt(0) || "-"; parent.replaceChild(fallbackDiv, target); + } catch (error) { + console.error("Failed to replace provider logo fallback:", error); } }} /> diff --git a/ui/litellm-dashboard/src/components/networking.tsx b/ui/litellm-dashboard/src/components/networking.tsx index a8cb05310c..2867034483 100644 --- a/ui/litellm-dashboard/src/components/networking.tsx +++ b/ui/litellm-dashboard/src/components/networking.tsx @@ -145,6 +145,25 @@ export interface CredentialItem { }; } +export interface ProviderCredentialFieldMetadata { + key: string; + label: string; + placeholder?: string | null; + tooltip?: string | null; + required?: boolean; + field_type?: "text" | "password" | "select" | "upload"; + options?: string[] | null; + default_value?: string | null; +} + +export interface ProviderCreateInfo { + provider: string; + provider_display_name: string; + litellm_provider: string; + default_model_placeholder?: string | null; + credential_fields: ProviderCredentialFieldMetadata[]; +} + export interface PublicModelHubInfo { docs_title: string; custom_docs_description: string | null; @@ -182,6 +201,26 @@ const handleError = async (errorData: string) => { } }; +export const getProviderCreateMetadata = async (): Promise => { + /** + * Fetch provider credential field metadata from the proxy's public endpoint. + * This is used by the UI to dynamically render provider-specific credential fields. + */ + const url = defaultProxyBaseUrl ? `${defaultProxyBaseUrl}/public/providers/fields` : `/public/providers/fields`; + const response = await fetch(url, { + method: "GET", + }); + + if (!response.ok) { + const errorText = await response.text(); + console.error("Failed to fetch provider create metadata:", response.status, errorText); + throw new Error("Failed to load provider configuration"); + } + + const jsonData: ProviderCreateInfo[] = await response.json(); + return jsonData; +}; + // Global variable for the header name let globalLitellmHeaderName: string = "Authorization"; const MCP_AUTH_HEADER: string = "x-mcp-auth"; @@ -5794,11 +5833,7 @@ export const listMCPTools = async (accessToken: string, serverId: string) => { } }; -export const callMCPTool = async ( - accessToken: string, - toolName: string, - toolArguments: Record -) => { +export const callMCPTool = async (accessToken: string, toolName: string, toolArguments: Record) => { try { // Construct base URL let url = proxyBaseUrl ? `${proxyBaseUrl}/mcp-rest/tools/call` : `/mcp-rest/tools/call`; From b360cc957e32b64c9ca6f2597eb077d1ef902112 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 14 Nov 2025 16:40:43 -0800 Subject: [PATCH 26/42] [Feat] Model Management API - Add API Endpoint for creating model access group (#16663) * add NewModelGroupRequest * add endpoint for create_model_group * fix model_access_group_management_router * add UpdateModelGroupRequest, info and delete * fix model management tag * fix validate_models_exist * fix get_all_access_groups_from_db * test_create_duplicate_access_group_fails * test fixes * fix working create access groups * fix access group management endpoints * add is db model checks for model access groups --- ...odel_prices_and_context_window_backup.json | 16 + ...model_access_group_management_endpoints.py | 700 ++++++++++++++++++ litellm/proxy/proxy_server.py | 4 + .../model_management_endpoints.py | 33 +- .../test_access_group_management.py | 80 ++ 5 files changed, 832 insertions(+), 1 deletion(-) create mode 100644 litellm/proxy/management_endpoints/model_access_group_management_endpoints.py create mode 100644 tests/test_litellm/proxy/management_endpoints/test_access_group_management.py diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 7c86e570c3..1c0ac1b436 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -23768,6 +23768,22 @@ "mode": "embedding", "output_cost_per_token": 0.0 }, + "voyage/voyage-3.5": { + "input_cost_per_token": 6e-08, + "litellm_provider": "voyage", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-3.5-lite": { + "input_cost_per_token": 2e-08, + "litellm_provider": "voyage", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, "voyage/voyage-code-2": { "input_cost_per_token": 1.2e-07, "litellm_provider": "voyage", diff --git a/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py b/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py new file mode 100644 index 0000000000..3867ac8387 --- /dev/null +++ b/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py @@ -0,0 +1,700 @@ +""" +Allow proxy admin to manage model access groups + +Endpoints here: +- POST /model_group/new - Create a new access group with multiple model names +""" + +import json +from typing import Any, Dict, List, Optional, Tuple + +from fastapi import APIRouter, Depends, HTTPException + +from litellm._logging import verbose_proxy_logger +from litellm.proxy._types import UserAPIKeyAuth +from litellm.proxy.auth.user_api_key_auth import user_api_key_auth + +# Clear cache and reload models to pick up the access group changes +from litellm.proxy.management_endpoints.model_management_endpoints import ( + clear_cache, +) +from litellm.proxy.utils import PrismaClient +from litellm.types.proxy.management_endpoints.model_management_endpoints import ( + AccessGroupInfo, + DeleteModelGroupResponse, + ListAccessGroupsResponse, + NewModelGroupRequest, + NewModelGroupResponse, + UpdateModelGroupRequest, +) + +router = APIRouter() + + +def validate_models_exist( + model_names: List[str], llm_router +) -> Tuple[bool, List[str]]: + """ + Validate that all requested model names exist in the router. + Checks only exact model name matches. + + Returns: + Tuple[bool, List[str]]: (all_valid, missing_models) + """ + if llm_router is None: + return False, model_names + + router_model_names = set(llm_router.get_model_names()) + missing = [m for m in model_names if m not in router_model_names] + return (len(missing) == 0, missing) + + +def add_access_group_to_deployment( + model_info: Dict[str, Any], access_group: str +) -> Tuple[Dict[str, Any], bool]: + """ + Add an access group to a deployment's model_info. + + Args: + model_info: The model_info dictionary from the deployment + access_group: The access group name to add + + Returns: + Tuple[Dict[str, Any], bool]: (updated_model_info, was_modified) + """ + access_groups = model_info.get("access_groups", []) + + # Check if access group already exists + if access_group in access_groups: + return model_info, False + + # Add the access group + access_groups.append(access_group) + model_info["access_groups"] = access_groups + + return model_info, True + + +async def update_deployments_with_access_group( + model_names: List[str], + access_group: str, + prisma_client: PrismaClient, +) -> int: + """ + Update all deployments for the given model names to include the access group. + + Args: + model_names: List of model names whose deployments should be updated + access_group: The access group name to add + prisma_client: Database client + + Returns: + int: Number of deployments updated + """ + models_updated = 0 + + for model_name in model_names: + verbose_proxy_logger.debug( + f"Updating deployments for model_name: {model_name}" + ) + + # Get all deployments with this model_name + deployments = await prisma_client.db.litellm_proxymodeltable.find_many( + where={"model_name": model_name} + ) + + verbose_proxy_logger.debug( + f"Found {len(deployments)} deployments for model_name: {model_name}" + ) + + # Update each deployment + for deployment in deployments: + model_info = deployment.model_info or {} + + # Check if this is a DB model (not a config model) + is_db_model = model_info.get("db_model", False) + if not is_db_model: + raise HTTPException( + status_code=400, + detail={ + "error": f"Cannot add config model '{model_name}' to access group. Access group management is only supported for database models. Config models must be managed through config.yaml." + }, + ) + + # Add access group using helper + updated_model_info, was_modified = add_access_group_to_deployment( + model_info=model_info, + access_group=access_group, + ) + + # Only update in DB if modified + if was_modified: + await prisma_client.db.litellm_proxymodeltable.update( + where={"model_id": deployment.model_id}, + data={"model_info": json.dumps(updated_model_info)}, + ) + + models_updated += 1 + verbose_proxy_logger.debug( + f"Updated deployment {deployment.model_id} with access group: {access_group}" + ) + + return models_updated + + +def remove_access_group_from_deployment( + model_info: Dict[str, Any], access_group: str +) -> Tuple[Dict[str, Any], bool]: + """ + Remove an access group from a deployment's model_info. + + Args: + model_info: The model_info dictionary from the deployment + access_group: The access group name to remove + + Returns: + Tuple[Dict[str, Any], bool]: (updated_model_info, was_modified) + """ + access_groups = model_info.get("access_groups", []) + + # Check if access group exists + if access_group not in access_groups: + return model_info, False + + # Remove the access group + access_groups.remove(access_group) + model_info["access_groups"] = access_groups + + return model_info, True + + +async def get_all_access_groups_from_db( + prisma_client: PrismaClient, +) -> Dict[str, AccessGroupInfo]: + """ + Get all access groups from the database. + + Returns: + Dict[str, AccessGroupInfo]: Dictionary mapping access_group name to info + """ + # Get all deployments + deployments = await prisma_client.db.litellm_proxymodeltable.find_many() + + # Build access group map + access_group_map: Dict[str, Dict[str, Any]] = {} + + for deployment in deployments: + model_info = deployment.model_info or {} + access_groups = model_info.get("access_groups", []) + model_name = deployment.model_name + + for access_group in access_groups: + if access_group not in access_group_map: + access_group_map[access_group] = { + "model_names": set(), + "deployment_count": 0, + } + + access_group_map[access_group]["model_names"].add(model_name) + access_group_map[access_group]["deployment_count"] += 1 + + # Convert to AccessGroupInfo objects + result = {} + for access_group, data in access_group_map.items(): + result[access_group] = AccessGroupInfo( + access_group=access_group, + model_names=sorted(list(data["model_names"])), + deployment_count=data["deployment_count"], + ) + + return result + + +@router.post( + "/access_group/new", + tags=["model management"], + dependencies=[Depends(user_api_key_auth)], + response_model=NewModelGroupResponse, +) +async def create_model_group( + data: NewModelGroupRequest, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Create a new access group containing multiple model names. + + An access group is a named collection of model groups that can be referenced + by teams/keys for simplified access control. + + Example: + ```bash + curl -X POST 'http://localhost:4000/access_group/new' \\ + -H 'Authorization: Bearer sk-1234' \\ + -H 'Content-Type: application/json' \\ + -d '{ + "access_group": "production-models", + "model_names": ["gpt-4", "claude-3-opus", "gemini-pro"] + }' + ``` + + Parameters: + - access_group: str - The access group name (e.g., "production-models") + - model_names: List[str] - List of existing model groups to include + + Returns: + - NewModelGroupResponse with the created access group details + + Raises: + - HTTPException 400: If any model names don't exist + - HTTPException 500: If database operations fail + """ + from litellm.proxy.proxy_server import ( + llm_router, + prisma_client, + proxy_config, + proxy_logging_obj, + ) + + verbose_proxy_logger.debug( + f"Creating access group: {data.access_group} with models: {data.model_names}" + ) + + # Validation: Check if access_group is provided + if not data.access_group or not data.access_group.strip(): + raise HTTPException( + status_code=400, + detail={"error": "access_group is required and cannot be empty"}, + ) + + # Validation: Check if model_names list is provided and not empty + if not data.model_names or len(data.model_names) == 0: + raise HTTPException( + status_code=400, + detail={"error": "model_names list is required and cannot be empty"}, + ) + + # Validation: Check if all models exist in the router + all_valid, missing_models = validate_models_exist( + model_names=data.model_names, + llm_router=llm_router, + ) + + if not all_valid: + raise HTTPException( + status_code=400, + detail={"error": f"Model(s) not found: {', '.join(missing_models)}"}, + ) + + # Check if database is connected + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": "Database not connected. Cannot create access group."}, + ) + + try: + # Check if access group already exists + existing_access_groups = await get_all_access_groups_from_db( + prisma_client=prisma_client + ) + + if data.access_group in existing_access_groups: + raise HTTPException( + status_code=409, + detail={"error": f"Access group '{data.access_group}' already exists. Use PUT /access_group/{data.access_group}/update to modify it."}, + ) + + # Update deployments using helper function + models_updated = await update_deployments_with_access_group( + model_names=data.model_names, + access_group=data.access_group, + prisma_client=prisma_client, + ) + + await clear_cache() + + verbose_proxy_logger.info( + f"Successfully created access group '{data.access_group}' with {models_updated} models updated" + ) + + return NewModelGroupResponse( + access_group=data.access_group, + model_names=data.model_names, + models_updated=models_updated, + ) + + except HTTPException: + raise + except Exception as e: + verbose_proxy_logger.exception( + f"Error creating access group '{data.access_group}': {str(e)}" + ) + raise HTTPException( + status_code=500, + detail={"error": f"Failed to create access group: {str(e)}"}, + ) + + +@router.get( + "/access_group/list", + tags=["model management"], + dependencies=[Depends(user_api_key_auth)], + response_model=ListAccessGroupsResponse, +) +async def list_access_groups( + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + List all access groups. + + Returns a list of all access groups with their model names and deployment counts. + + Example: + ```bash + curl -X GET 'http://localhost:4000/access_group/list' \\ + -H 'Authorization: Bearer sk-1234' + ``` + + Returns: + - ListAccessGroupsResponse with all access groups + """ + from litellm.proxy.proxy_server import prisma_client + + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": "Database not connected."}, + ) + + try: + access_groups_map = await get_all_access_groups_from_db( + prisma_client=prisma_client + ) + + # Sort by access group name + access_groups_list = sorted( + access_groups_map.values(), + key=lambda x: x.access_group, + ) + + return ListAccessGroupsResponse(access_groups=access_groups_list) + + except Exception as e: + verbose_proxy_logger.exception(f"Error listing access groups: {str(e)}") + raise HTTPException( + status_code=500, + detail={"error": f"Failed to list access groups: {str(e)}"}, + ) + + +@router.get( + "/access_group/{access_group}/info", + tags=["model management"], + dependencies=[Depends(user_api_key_auth)], + response_model=AccessGroupInfo, +) +async def get_access_group_info( + access_group: str, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Get information about a specific access group. + + Example: + ```bash + curl -X GET 'http://localhost:4000/access_group/production-models/info' \\ + -H 'Authorization: Bearer sk-1234' + ``` + + Parameters: + - access_group: str - The access group name (URL path parameter) + + Returns: + - AccessGroupInfo with the access group details + + Raises: + - HTTPException 404: If access group not found + """ + from litellm.proxy.proxy_server import prisma_client + + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": "Database not connected."}, + ) + + try: + access_groups_map = await get_all_access_groups_from_db( + prisma_client=prisma_client + ) + + if access_group not in access_groups_map: + raise HTTPException( + status_code=404, + detail={"error": f"Access group '{access_group}' not found"}, + ) + + return access_groups_map[access_group] + + except HTTPException: + raise + except Exception as e: + verbose_proxy_logger.exception( + f"Error getting access group info for '{access_group}': {str(e)}" + ) + raise HTTPException( + status_code=500, + detail={"error": f"Failed to get access group info: {str(e)}"}, + ) + + +@router.put( + "/access_group/{access_group}/update", + tags=["model management"], + dependencies=[Depends(user_api_key_auth)], + response_model=NewModelGroupResponse, +) +async def update_access_group( + access_group: str, + data: UpdateModelGroupRequest, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Update an access group's model names. + + This will: + 1. Remove the access group from all current deployments + 2. Add the access group to all deployments for the new model_names list + + Example: + ```bash + curl -X PUT 'http://localhost:4000/access_group/production-models/update' \\ + -H 'Authorization: Bearer sk-1234' \\ + -H 'Content-Type: application/json' \\ + -d '{ + "model_names": ["gpt-4", "claude-3-sonnet"] + }' + ``` + + Parameters: + - access_group: str - The access group name (URL path parameter) + - model_names: List[str] - New list of model groups to include + + Returns: + - NewModelGroupResponse with the updated access group details + + Raises: + - HTTPException 400: If any model names don't exist + - HTTPException 404: If access group not found + """ + from litellm.proxy.proxy_server import llm_router, prisma_client + + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": "Database not connected."}, + ) + + verbose_proxy_logger.debug( + f"Updating access group: {access_group} with models: {data.model_names}" + ) + + # Validation: Check if model_names list is provided and not empty + if not data.model_names or len(data.model_names) == 0: + raise HTTPException( + status_code=400, + detail={"error": "model_names list is required and cannot be empty"}, + ) + + # Validation: Check if access group exists + try: + access_groups_map = await get_all_access_groups_from_db( + prisma_client=prisma_client + ) + if access_group not in access_groups_map: + raise HTTPException( + status_code=404, + detail={"error": f"Access group '{access_group}' not found"}, + ) + except HTTPException: + raise + except Exception as e: + raise HTTPException( + status_code=500, + detail={"error": f"Failed to check access group existence: {str(e)}"}, + ) + + # Validation: Check if all new models exist + all_valid, missing_models = validate_models_exist( + model_names=data.model_names, + llm_router=llm_router, + ) + + if not all_valid: + raise HTTPException( + status_code=400, + detail={"error": f"Model(s) not found: {', '.join(missing_models)}"}, + ) + + try: + # Step 1: Remove access group from ALL DB deployments (skip config models) + all_deployments = await prisma_client.db.litellm_proxymodeltable.find_many() + + for deployment in all_deployments: + model_info = deployment.model_info or {} + + # Skip config models - they can't have access groups added via API + is_db_model = model_info.get("db_model", False) + if not is_db_model: + continue + + updated_model_info, was_modified = remove_access_group_from_deployment( + model_info=model_info, + access_group=access_group, + ) + + if was_modified: + await prisma_client.db.litellm_proxymodeltable.update( + where={"model_id": deployment.model_id}, + data={"model_info": json.dumps(updated_model_info)}, + ) + + # Step 2: Add access group to new model_names + models_updated = await update_deployments_with_access_group( + model_names=data.model_names, + access_group=access_group, + prisma_client=prisma_client, + ) + + # Clear cache and reload models to pick up the access group changes + await clear_cache() + + verbose_proxy_logger.info( + f"Successfully updated access group '{access_group}' with {models_updated} models updated" + ) + + return NewModelGroupResponse( + access_group=access_group, + model_names=data.model_names, + models_updated=models_updated, + ) + + except HTTPException: + raise + except Exception as e: + verbose_proxy_logger.exception( + f"Error updating access group '{access_group}': {str(e)}" + ) + raise HTTPException( + status_code=500, + detail={"error": f"Failed to update access group: {str(e)}"}, + ) + + +@router.delete( + "/access_group/{access_group}/delete", + tags=["model management"], + dependencies=[Depends(user_api_key_auth)], + response_model=DeleteModelGroupResponse, +) +async def delete_access_group( + access_group: str, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Delete an access group. + + Removes the access group from all deployments that have it. + + Example: + ```bash + curl -X DELETE 'http://localhost:4000/access_group/production-models/delete' \\ + -H 'Authorization: Bearer sk-1234' + ``` + + Parameters: + - access_group: str - The access group name (URL path parameter) + + Returns: + - DeleteModelGroupResponse with deletion details + + Raises: + - HTTPException 404: If access group not found + """ + from litellm.proxy.proxy_server import prisma_client + + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": "Database not connected."}, + ) + + verbose_proxy_logger.debug(f"Deleting access group: {access_group}") + + # Validation: Check if access group exists + try: + access_groups_map = await get_all_access_groups_from_db( + prisma_client=prisma_client + ) + if access_group not in access_groups_map: + raise HTTPException( + status_code=404, + detail={"error": f"Access group '{access_group}' not found"}, + ) + except HTTPException: + raise + except Exception as e: + raise HTTPException( + status_code=500, + detail={"error": f"Failed to check access group existence: {str(e)}"}, + ) + + try: + # Remove access group from all DB deployments (skip config models) + all_deployments = await prisma_client.db.litellm_proxymodeltable.find_many() + models_updated = 0 + + for deployment in all_deployments: + model_info = deployment.model_info or {} + + # Skip config models - they can't have access groups added via API + is_db_model = model_info.get("db_model", False) + if not is_db_model: + continue + + updated_model_info, was_modified = remove_access_group_from_deployment( + model_info=model_info, + access_group=access_group, + ) + + if was_modified: + await prisma_client.db.litellm_proxymodeltable.update( + where={"model_id": deployment.model_id}, + data={"model_info": json.dumps(updated_model_info)}, + ) + models_updated += 1 + + # Clear cache and reload models to pick up the access group changes + await clear_cache() + + verbose_proxy_logger.info( + f"Successfully deleted access group '{access_group}' from {models_updated} deployments" + ) + + return DeleteModelGroupResponse( + access_group=access_group, + models_updated=models_updated, + message=f"Access group '{access_group}' deleted successfully", + ) + + except HTTPException: + raise + except Exception as e: + verbose_proxy_logger.exception( + f"Error deleting access group '{access_group}': {str(e)}" + ) + raise HTTPException( + status_code=500, + detail={"error": f"Failed to delete access group: {str(e)}"}, + ) + diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 40bc0dba8e..f81bcd14d5 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -292,6 +292,9 @@ from litellm.proxy.management_endpoints.model_management_endpoints import ( from litellm.proxy.management_endpoints.model_management_endpoints import ( router as model_management_router, ) +from litellm.proxy.management_endpoints.model_access_group_management_endpoints import ( + router as model_access_group_management_router, +) from litellm.proxy.management_endpoints.organization_endpoints import ( router as organization_router, ) @@ -10086,6 +10089,7 @@ app.include_router(openai_files_router) app.include_router(team_callback_router) app.include_router(budget_management_router) app.include_router(model_management_router) +app.include_router(model_access_group_management_router) app.include_router(tag_management_router) app.include_router(cost_tracking_settings_router) app.include_router(router_settings_router) diff --git a/litellm/types/proxy/management_endpoints/model_management_endpoints.py b/litellm/types/proxy/management_endpoints/model_management_endpoints.py index 165562d32f..cb9dcc63e2 100644 --- a/litellm/types/proxy/management_endpoints/model_management_endpoints.py +++ b/litellm/types/proxy/management_endpoints/model_management_endpoints.py @@ -1,4 +1,4 @@ -from typing import Dict +from typing import Dict, List from pydantic import BaseModel, Field @@ -11,3 +11,34 @@ class ModelGroupInfoProxy(ModelGroupInfo): class UpdateUsefulLinksRequest(BaseModel): useful_links: Dict[str, str] + + +class NewModelGroupRequest(BaseModel): + access_group: str # The access group name (e.g., "production-models") + model_names: List[str] # Existing model groups to include (e.g., ["gpt-4", "claude-3"]) + + +class NewModelGroupResponse(BaseModel): + access_group: str + model_names: List[str] + models_updated: int # Number of models updated + + +class UpdateModelGroupRequest(BaseModel): + model_names: List[str] # Updated list of model groups to include + + +class DeleteModelGroupResponse(BaseModel): + access_group: str + models_updated: int # Number of deployments where the access group was removed + message: str + + +class AccessGroupInfo(BaseModel): + access_group: str + model_names: List[str] # List of model names in this access group + deployment_count: int # Total number of deployments with this access group + + +class ListAccessGroupsResponse(BaseModel): + access_groups: List[AccessGroupInfo] \ No newline at end of file diff --git a/tests/test_litellm/proxy/management_endpoints/test_access_group_management.py b/tests/test_litellm/proxy/management_endpoints/test_access_group_management.py new file mode 100644 index 0000000000..1846ffaeb6 --- /dev/null +++ b/tests/test_litellm/proxy/management_endpoints/test_access_group_management.py @@ -0,0 +1,80 @@ +""" +Test access group management endpoints +""" + +import os +import sys +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest + +sys.path.insert( + 0, os.path.abspath("../../../..") +) # Adds the parent directory to the system path + +from litellm import Router + + +@pytest.mark.asyncio +async def test_create_duplicate_access_group_fails(): + """ + Test that creating an access group with a name that already exists returns 409 error. + + Scenario: User creates "production-models" access group, then tries to create it again. + Should fail with 409 Conflict. + """ + from fastapi import HTTPException + + from litellm.proxy._types import LitellmUserRoles, UserAPIKeyAuth + from litellm.proxy.management_endpoints.model_access_group_management_endpoints import ( + create_model_group, + ) + from litellm.types.proxy.management_endpoints.model_management_endpoints import ( + NewModelGroupRequest, + ) + + # Mock dependencies - use exact model name (not wildcard) + mock_router = Router( + model_list=[ + { + "model_name": "gpt-4", # Exact model name + "litellm_params": { + "model": "gpt-4", + "api_key": "fake-key", + }, + } + ] + ) + + mock_prisma = MagicMock() + mock_prisma.db.litellm_proxymodeltable.find_many = AsyncMock( + return_value=[ + MagicMock( + model_id="1", + model_name="gpt-4", + model_info={"access_groups": ["production-models"]}, # Already exists + ) + ] + ) + + mock_user = UserAPIKeyAuth( + user_id="test_admin", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + + request_data = NewModelGroupRequest( + access_group="production-models", + model_names=["gpt-4"], + ) + + # Mock the imported dependencies from proxy_server (where they're actually imported from) + with patch("litellm.proxy.proxy_server.llm_router", mock_router), \ + patch("litellm.proxy.proxy_server.prisma_client", mock_prisma): + + # Should raise 409 Conflict + with pytest.raises(HTTPException) as exc_info: + await create_model_group(data=request_data, user_api_key_dict=mock_user) + + assert exc_info.value.status_code == 409 + assert "already exists" in str(exc_info.value.detail) + From d9df1e4ffd0da84a17bdf9cca5bdd9cb7e2e7554 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 14 Nov 2025 16:09:40 -0800 Subject: [PATCH 27/42] code qa fix --- .../model_access_group_management_endpoints.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py b/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py index 3867ac8387..76b8683c3f 100644 --- a/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py +++ b/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py @@ -6,7 +6,7 @@ Endpoints here: """ import json -from typing import Any, Dict, List, Optional, Tuple +from typing import Any, Dict, List, Tuple from fastapi import APIRouter, Depends, HTTPException @@ -251,8 +251,6 @@ async def create_model_group( from litellm.proxy.proxy_server import ( llm_router, prisma_client, - proxy_config, - proxy_logging_obj, ) verbose_proxy_logger.debug( From e240ccef6360edfa1c10bfa52593791a543cd036 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 14 Nov 2025 15:58:58 -0800 Subject: [PATCH 28/42] check if DB model --- ...model_access_group_management_endpoints.py | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py b/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py index 76b8683c3f..0c820f6b78 100644 --- a/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py +++ b/litellm/proxy/management_endpoints/model_access_group_management_endpoints.py @@ -107,20 +107,19 @@ async def update_deployments_with_access_group( f"Found {len(deployments)} deployments for model_name: {model_name}" ) + # If no deployments found, this is a config model (not in DB) + if len(deployments) == 0: + raise HTTPException( + status_code=400, + detail={ + "error": f"Can't find model '{model_name}' in Database. Access group management is only supported for database models." + }, + ) + # Update each deployment for deployment in deployments: model_info = deployment.model_info or {} - # Check if this is a DB model (not a config model) - is_db_model = model_info.get("db_model", False) - if not is_db_model: - raise HTTPException( - status_code=400, - detail={ - "error": f"Cannot add config model '{model_name}' to access group. Access group management is only supported for database models. Config models must be managed through config.yaml." - }, - ) - # Add access group using helper updated_model_info, was_modified = add_access_group_to_deployment( model_info=model_info, @@ -540,11 +539,7 @@ async def update_access_group( for deployment in all_deployments: model_info = deployment.model_info or {} - - # Skip config models - they can't have access groups added via API - is_db_model = model_info.get("db_model", False) - if not is_db_model: - continue + updated_model_info, was_modified = remove_access_group_from_deployment( model_info=model_info, @@ -655,11 +650,6 @@ async def delete_access_group( for deployment in all_deployments: model_info = deployment.model_info or {} - # Skip config models - they can't have access groups added via API - is_db_model = model_info.get("db_model", False) - if not is_db_model: - continue - updated_model_info, was_modified = remove_access_group_from_deployment( model_info=model_info, access_group=access_group, From 1dac7773467106044a36b30a33acc7623e7febef Mon Sep 17 00:00:00 2001 From: Emerson Gomes Date: Fri, 14 Nov 2025 18:49:48 -0600 Subject: [PATCH 29/42] Add Vertex Kimi-K2-Thinking (#16671) * Add Vertex Kimi-K2-Thinking * Update model_prices_and_context_window.json Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update litellm/model_prices_and_context_window_backup.json Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- litellm/__init__.py | 7 ++++++- .../vertex_ai/vertex_ai_partner_models/main.py | 3 +++ .../model_prices_and_context_window_backup.json | 13 +++++++++++++ model_prices_and_context_window.json | 13 +++++++++++++ .../vertex_ai/test_vertex_ai_common_utils.py | 17 +++++++++++++++++ 5 files changed, 52 insertions(+), 1 deletion(-) diff --git a/litellm/__init__.py b/litellm/__init__.py index 2ca14a7a98..4993570ade 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -485,6 +485,7 @@ vertex_ai_ai21_models: Set = set() vertex_mistral_models: Set = set() vertex_openai_models: Set = set() vertex_minimax_models: Set = set() +vertex_moonshot_models: Set = set() ai21_models: Set = set() ai21_chat_models: Set = set() nlp_cloud_models: Set = set() @@ -649,6 +650,9 @@ def add_known_models(): elif value.get("litellm_provider") == "vertex_ai-minimax_models": key = key.replace("vertex_ai/", "") vertex_minimax_models.add(key) + elif value.get("litellm_provider") == "vertex_ai-moonshot_models": + key = key.replace("vertex_ai/", "") + vertex_moonshot_models.add(key) elif value.get("litellm_provider") == "ai21": if value.get("mode") == "chat": ai21_chat_models.add(key) @@ -908,7 +912,8 @@ models_by_provider: dict = { | vertex_vision_models | vertex_language_models | vertex_deepseek_models - | vertex_minimax_models, + | vertex_minimax_models + | vertex_moonshot_models, "ai21": ai21_models, "bedrock": bedrock_models | bedrock_converse_models, "petals": petals_models, diff --git a/litellm/llms/vertex_ai/vertex_ai_partner_models/main.py b/litellm/llms/vertex_ai/vertex_ai_partner_models/main.py index 624e682ec5..712a06dece 100644 --- a/litellm/llms/vertex_ai/vertex_ai_partner_models/main.py +++ b/litellm/llms/vertex_ai/vertex_ai_partner_models/main.py @@ -39,6 +39,7 @@ class PartnerModelPrefixes(str, Enum): QWEN_PREFIX = "qwen" GPT_OSS_PREFIX = "openai/gpt-oss-" MINIMAX_PREFIX = "minimaxai/" + MOONSHOT_PREFIX = "moonshotai/" class VertexAIPartnerModels(VertexBase): @@ -64,6 +65,7 @@ class VertexAIPartnerModels(VertexBase): or model.startswith(PartnerModelPrefixes.QWEN_PREFIX) or model.startswith(PartnerModelPrefixes.GPT_OSS_PREFIX) or model.startswith(PartnerModelPrefixes.MINIMAX_PREFIX) + or model.startswith(PartnerModelPrefixes.MOONSHOT_PREFIX) ): return True return False @@ -76,6 +78,7 @@ class VertexAIPartnerModels(VertexBase): PartnerModelPrefixes.QWEN_PREFIX, PartnerModelPrefixes.GPT_OSS_PREFIX, PartnerModelPrefixes.MINIMAX_PREFIX, + PartnerModelPrefixes.MOONSHOT_PREFIX, ] if any(provider in model for provider in OPENAI_LIKE_VERTEX_PROVIDERS): return True diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 1c0ac1b436..0fe71e4541 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -23432,6 +23432,19 @@ "supports_function_calling": true, "supports_tool_choice": true }, + "vertex_ai/moonshotai/kimi-k2-thinking-maas": { + "input_cost_per_token": 6e-07, + "litellm_provider": "vertex_ai-moonshot_models", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_web_search": true + }, "vertex_ai/mistral-medium-3": { "input_cost_per_token": 4e-07, "litellm_provider": "vertex_ai-mistral_models", diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 1c0ac1b436..0fe71e4541 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -23432,6 +23432,19 @@ "supports_function_calling": true, "supports_tool_choice": true }, + "vertex_ai/moonshotai/kimi-k2-thinking-maas": { + "input_cost_per_token": 6e-07, + "litellm_provider": "vertex_ai-moonshot_models", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_web_search": true + }, "vertex_ai/mistral-medium-3": { "input_cost_per_token": 4e-07, "litellm_provider": "vertex_ai-mistral_models", diff --git a/tests/test_litellm/llms/vertex_ai/test_vertex_ai_common_utils.py b/tests/test_litellm/llms/vertex_ai/test_vertex_ai_common_utils.py index 98977e06ff..4ea1d81c26 100644 --- a/tests/test_litellm/llms/vertex_ai/test_vertex_ai_common_utils.py +++ b/tests/test_litellm/llms/vertex_ai/test_vertex_ai_common_utils.py @@ -967,6 +967,10 @@ async def test_vertex_ai_partner_model_detection(): assert VertexAIPartnerModels.is_vertex_partner_model("meta/llama-3.1-405b") # Test Minimax models assert VertexAIPartnerModels.is_vertex_partner_model("minimaxai/minimax-m2-maas") + # Test Moonshot models + assert VertexAIPartnerModels.is_vertex_partner_model( + "moonshotai/kimi-k2-thinking-maas" + ) # Test Gemini models (should NOT be detected as partner model) assert not VertexAIPartnerModels.is_vertex_partner_model("gemini-1.5-pro") @@ -989,3 +993,16 @@ def test_vertex_ai_minimax_uses_openai_handler(): assert VertexAIPartnerModels.should_use_openai_handler( "minimaxai/minimax-m2-maas" ) + + +def test_vertex_ai_moonshot_uses_openai_handler(): + """ + Ensure Moonshot partner models re-use the OpenAI-format handler. + """ + from litellm.llms.vertex_ai.vertex_ai_partner_models.main import ( + VertexAIPartnerModels, + ) + + assert VertexAIPartnerModels.should_use_openai_handler( + "moonshotai/kimi-k2-thinking-maas" + ) From 0a0b5eee477891d322b9dc2eb1f485a112db3076 Mon Sep 17 00:00:00 2001 From: Cesar Garcia <128240629+Chesars@users.noreply.github.com> Date: Fri, 14 Nov 2025 21:50:40 -0300 Subject: [PATCH 30/42] fix: Resolve pytest module name collision for test_transformation.py files (#16661) Fixes #16613 The issue was caused by two test files having the same module name (test_transformation.py) in different directories, which caused pytest to fail with an import file mismatch error. Changes: - Renamed tests/test_litellm/llms/xai/responses/test_transformation.py to test_xai_responses_transformation.py - Renamed tests/test_litellm/llms/openai_like/chat/test_transformation.py to test_openai_like_chat_transformation.py Both files now have unique, descriptive names that reflect their specific test purposes and prevent module name collisions. --- ..._transformation.py => test_openai_like_chat_transformation.py} | 0 ...est_transformation.py => test_xai_responses_transformation.py} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tests/test_litellm/llms/openai_like/chat/{test_transformation.py => test_openai_like_chat_transformation.py} (100%) rename tests/test_litellm/llms/xai/responses/{test_transformation.py => test_xai_responses_transformation.py} (100%) diff --git a/tests/test_litellm/llms/openai_like/chat/test_transformation.py b/tests/test_litellm/llms/openai_like/chat/test_openai_like_chat_transformation.py similarity index 100% rename from tests/test_litellm/llms/openai_like/chat/test_transformation.py rename to tests/test_litellm/llms/openai_like/chat/test_openai_like_chat_transformation.py diff --git a/tests/test_litellm/llms/xai/responses/test_transformation.py b/tests/test_litellm/llms/xai/responses/test_xai_responses_transformation.py similarity index 100% rename from tests/test_litellm/llms/xai/responses/test_transformation.py rename to tests/test_litellm/llms/xai/responses/test_xai_responses_transformation.py From efa4ec929480519ec0dc787702f4b2251ee42b6c Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 14 Nov 2025 17:07:54 -0800 Subject: [PATCH 31/42] [Docs] Add docs on APIs for model access management (#16673) * docs access groups * docs ui for access groups * fix code snippets * docs model access --- docs/my-website/docs/proxy/model_access.md | 238 +-------- .../docs/proxy/model_access_groups.md | 503 ++++++++++++++++++ .../docs/proxy/model_access_guide.md | 7 +- docs/my-website/img/add_model_access.png | Bin 0 -> 589903 bytes docs/my-website/img/add_model_key.png | Bin 0 -> 526523 bytes docs/my-website/sidebars.js | 1 + 6 files changed, 515 insertions(+), 234 deletions(-) create mode 100644 docs/my-website/docs/proxy/model_access_groups.md create mode 100644 docs/my-website/img/add_model_access.png create mode 100644 docs/my-website/img/add_model_key.png diff --git a/docs/my-website/docs/proxy/model_access.md b/docs/my-website/docs/proxy/model_access.md index e08530d90c..961207cad5 100644 --- a/docs/my-website/docs/proxy/model_access.md +++ b/docs/my-website/docs/proxy/model_access.md @@ -1,7 +1,7 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Control Model Access +# Restrict Model Access ## **Restrict models by Virtual Key** @@ -114,238 +114,6 @@ curl --location 'http://0.0.0.0:4000/chat/completions' \ ### [API Reference](https://litellm-api.up.railway.app/#/team%20management/new_team_team_new_post) -## **Model Access Groups** - -Use model access groups to give users access to select models, and add new ones to it over time (e.g. mistral, llama-2, etc.) - -**Step 1. Assign model, access group in config.yaml** - -```yaml -model_list: - - model_name: gpt-4 - litellm_params: - model: openai/fake - api_key: fake-key - api_base: https://exampleopenaiendpoint-production.up.railway.app/ - model_info: - access_groups: ["beta-models"] # 👈 Model Access Group - - model_name: fireworks-llama-v3-70b-instruct - litellm_params: - model: fireworks_ai/accounts/fireworks/models/llama-v3-70b-instruct - api_key: "os.environ/FIREWORKS" - model_info: - access_groups: ["beta-models"] # 👈 Model Access Group -``` - - - - - -**Create key with access group** - -```bash -curl --location 'http://localhost:4000/key/generate' \ --H 'Authorization: Bearer ' \ --H 'Content-Type: application/json' \ --d '{"models": ["beta-models"], # 👈 Model Access Group - "max_budget": 0,}' -``` - -Test Key - - - - -```shell -curl -i http://localhost:4000/v1/chat/completions \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer sk-" \ - -d '{ - "model": "gpt-4", - "messages": [ - {"role": "user", "content": "Hello"} - ] - }' -``` - - - - - -:::info - -Expect this to fail since gpt-4o is not in the `beta-models` access group - -::: - -```shell -curl -i http://localhost:4000/v1/chat/completions \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer sk-" \ - -d '{ - "model": "gpt-4o", - "messages": [ - {"role": "user", "content": "Hello"} - ] - }' -``` - - - - - - - - - -Create Team - -```shell -curl --location 'http://localhost:4000/team/new' \ --H 'Authorization: Bearer sk-' \ --H 'Content-Type: application/json' \ --d '{"models": ["beta-models"]}' -``` - -Create Key for Team - -```shell -curl --location 'http://0.0.0.0:4000/key/generate' \ ---header 'Authorization: Bearer sk-' \ ---header 'Content-Type: application/json' \ ---data '{"team_id": "0ac97648-c194-4c90-8cd6-40af7b0d2d2a"} -``` - - -Test Key - - - - -```shell -curl -i http://localhost:4000/v1/chat/completions \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer sk-" \ - -d '{ - "model": "gpt-4", - "messages": [ - {"role": "user", "content": "Hello"} - ] - }' -``` - - - - - -:::info - -Expect this to fail since gpt-4o is not in the `beta-models` access group - -::: - -```shell -curl -i http://localhost:4000/v1/chat/completions \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer sk-" \ - -d '{ - "model": "gpt-4o", - "messages": [ - {"role": "user", "content": "Hello"} - ] - }' -``` - - - - - - - - - - -### ✨ Control Access on Wildcard Models - -Control access to all models with a specific prefix (e.g. `openai/*`). - -Use this to also give users access to all models, except for a few that you don't want them to use (e.g. `openai/o1-*`). - -:::info - -Setting model access groups on wildcard models is an Enterprise feature. - -See pricing [here](https://litellm.ai/#pricing) - -Get a trial key [here](https://litellm.ai/#trial) -::: - - -1. Setup config.yaml - - -```yaml -model_list: - - model_name: openai/* - litellm_params: - model: openai/* - api_key: os.environ/OPENAI_API_KEY - model_info: - access_groups: ["default-models"] - - model_name: openai/o1-* - litellm_params: - model: openai/o1-* - api_key: os.environ/OPENAI_API_KEY - model_info: - access_groups: ["restricted-models"] -``` - -2. Generate a key with access to `default-models` - -```bash -curl -L -X POST 'http://0.0.0.0:4000/key/generate' \ --H 'Authorization: Bearer sk-1234' \ --H 'Content-Type: application/json' \ --d '{ - "models": ["default-models"], -}' -``` - -3. Test the key - - - - -```bash -curl -i http://localhost:4000/v1/chat/completions \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer sk-" \ - -d '{ - "model": "openai/gpt-4", - "messages": [ - {"role": "user", "content": "Hello"} - ] - }' -``` - - - -```bash -curl -i http://localhost:4000/v1/chat/completions \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer sk-" \ - -d '{ - "model": "openai/o1-mini", - "messages": [ - {"role": "user", "content": "Hello"} - ] - }' -``` - - - - - ## **View Available Fallback Models** Use the `/v1/models` endpoint to discover available fallback models for a given model. This helps you understand which backup models are available when your primary model is unavailable or restricted. @@ -451,4 +219,8 @@ When `include_metadata=true` is specified, the response includes fallback inform | `include_metadata` | boolean | Include additional model metadata including fallbacks | | `fallback_type` | string | Filter fallbacks by type: `general`, `context_window`, or `content_policy` | +## Advanced: Model Access Groups + +For advanced use cases, use [Model Access Groups](./model_access_groups) to dynamically group multiple models and manage access without restarting the proxy. + ## [Role Based Access Control (RBAC)](./jwt_auth_arch) \ No newline at end of file diff --git a/docs/my-website/docs/proxy/model_access_groups.md b/docs/my-website/docs/proxy/model_access_groups.md new file mode 100644 index 0000000000..f97c3c3d90 --- /dev/null +++ b/docs/my-website/docs/proxy/model_access_groups.md @@ -0,0 +1,503 @@ + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Model Access Groups + +### Overview + +Group multiple models under a single name, then grant keys or teams access to the entire group. Add or remove models from a group without updating individual keys. + +Use cases: +- Separate production and development models +- Restrict expensive models to specific teams +- Organize models by provider or capability +- Control access to model families with wildcards (e.g., `openai/*`) + +### How It Works + +```mermaid +graph LR + subgraph AG1["Access Group: 'prod-models'"] + M1["gpt-4o"] + M2["claude-opus"] + end + + subgraph AG2["Access Group: 'dev-models'"] + M3["gpt-4o-mini"] + M4["claude-haiku"] + end + + K1["Production API Key"] --> AG1 + K2["Development API Key"] --> AG2 + + style AG1 fill:#e3f2fd + style AG2 fill:#fff8e1 +``` + +**Key Concept:** Group models together → Attach group to key → Key gets access to all models in group + +**Step 1. Assign model, access group in config.yaml** + +```yaml showLineNumbers title="config.yaml" +model_list: + - model_name: gpt-4 + litellm_params: + model: openai/fake + api_key: fake-key + api_base: https://exampleopenaiendpoint-production.up.railway.app/ + model_info: + access_groups: ["beta-models"] # 👈 Model Access Group + - model_name: fireworks-llama-v3-70b-instruct + litellm_params: + model: fireworks_ai/accounts/fireworks/models/llama-v3-70b-instruct + api_key: "os.environ/FIREWORKS" + model_info: + access_groups: ["beta-models"] # 👈 Model Access Group +``` + + + + + +**Create key with access group** + +```bash showLineNumbers title="Create Key with Access Group" +curl --location 'http://localhost:4000/key/generate' \ +-H 'Authorization: Bearer ' \ +-H 'Content-Type: application/json' \ +-d '{"models": ["beta-models"], # 👈 Model Access Group + "max_budget": 0,}' +``` + +Test Key + + + + +```bash showLineNumbers title="Test Key - Allowed Access" +curl -i http://localhost:4000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer sk-" \ + -d '{ + "model": "gpt-4", + "messages": [ + {"role": "user", "content": "Hello"} + ] + }' +``` + + + + + +:::info + +Expect this to fail since gpt-4o is not in the `beta-models` access group + +::: + +```bash showLineNumbers title="Test Key - Disallowed Access" +curl -i http://localhost:4000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer sk-" \ + -d '{ + "model": "gpt-4o", + "messages": [ + {"role": "user", "content": "Hello"} + ] + }' +``` + + + + + + + + + +Create Team + +```bash showLineNumbers title="Create Team" +curl --location 'http://localhost:4000/team/new' \ +-H 'Authorization: Bearer sk-' \ +-H 'Content-Type: application/json' \ +-d '{"models": ["beta-models"]}' +``` + +Create Key for Team + +```bash showLineNumbers title="Create Key for Team" +curl --location 'http://0.0.0.0:4000/key/generate' \ +--header 'Authorization: Bearer sk-' \ +--header 'Content-Type: application/json' \ +--data '{"team_id": "0ac97648-c194-4c90-8cd6-40af7b0d2d2a"} +``` + + +Test Key + + + + +```bash showLineNumbers title="Test Team Key - Allowed Access" +curl -i http://localhost:4000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer sk-" \ + -d '{ + "model": "gpt-4", + "messages": [ + {"role": "user", "content": "Hello"} + ] + }' +``` + + + + + +:::info + +Expect this to fail since gpt-4o is not in the `beta-models` access group + +::: + +```bash showLineNumbers title="Test Team Key - Disallowed Access" +curl -i http://localhost:4000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer sk-" \ + -d '{ + "model": "gpt-4o", + "messages": [ + {"role": "user", "content": "Hello"} + ] + }' +``` + + + + + + + + + + +### ✨ Control Access on Wildcard Models + +Control access to all models with a specific prefix (e.g. `openai/*`). + +Use this to also give users access to all models, except for a few that you don't want them to use (e.g. `openai/o1-*`). + +:::info + +Setting model access groups on wildcard models is an Enterprise feature. + +See pricing [here](https://litellm.ai/#pricing) + +Get a trial key [here](https://litellm.ai/#trial) +::: + + +1. Setup config.yaml + + +```yaml showLineNumbers title="config.yaml - Wildcard Models" +model_list: + - model_name: openai/* + litellm_params: + model: openai/* + api_key: os.environ/OPENAI_API_KEY + model_info: + access_groups: ["default-models"] + - model_name: openai/o1-* + litellm_params: + model: openai/o1-* + api_key: os.environ/OPENAI_API_KEY + model_info: + access_groups: ["restricted-models"] +``` + +2. Generate a key with access to `default-models` + +```bash showLineNumbers title="Generate Key for Wildcard Access Group" +curl -L -X POST 'http://0.0.0.0:4000/key/generate' \ +-H 'Authorization: Bearer sk-1234' \ +-H 'Content-Type: application/json' \ +-d '{ + "models": ["default-models"], +}' +``` + +3. Test the key + + + + +```bash showLineNumbers title="Test Wildcard Access - Allowed" +curl -i http://localhost:4000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer sk-" \ + -d '{ + "model": "openai/gpt-4", + "messages": [ + {"role": "user", "content": "Hello"} + ] + }' +``` + + + +```bash showLineNumbers title="Test Wildcard Access - Rejected" +curl -i http://localhost:4000/v1/chat/completions \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer sk-" \ + -d '{ + "model": "openai/o1-mini", + "messages": [ + {"role": "user", "content": "Hello"} + ] + }' +``` + + + + +## Managing Access Groups via API + +:::warning Database Models Only +Access group management APIs only work with models stored in the database (added via `/model/new`). + +Models defined in `config.yaml` cannot be managed through these APIs and must be configured directly in the config file. +::: + +Use the access group management endpoints to dynamically create, update, and delete access groups without restarting the proxy. + +### Tutorial: Complete Access Group Workflow + +This tutorial shows how to create an access group, view its details, attach it to a key, and update the models in the group. + +**Prerequisites:** +- Models must be added to the database first (not just in config.yaml) +- You need your master key for authorization + +#### Step 1: Add Models to Database + +First, add some models to the database: + +```bash showLineNumbers title="Add Models to Database" +# Add GPT-4 to database +curl -X POST 'http://localhost:4000/model/new' \ + -H 'Authorization: Bearer sk-1234' \ + -H 'Content-Type: application/json' \ + -d '{ + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4", + "api_key": "os.environ/OPENAI_API_KEY" + } + }' + +# Add Claude to database +curl -X POST 'http://localhost:4000/model/new' \ + -H 'Authorization: Bearer sk-1234' \ + -H 'Content-Type: application/json' \ + -d '{ + "model_name": "claude-3-opus", + "litellm_params": { + "model": "claude-3-opus-20240229", + "api_key": "os.environ/ANTHROPIC_API_KEY" + } + }' +``` + +#### Step 2: Create Access Group + +Create an access group containing multiple models: + +```bash showLineNumbers title="Create Access Group" +curl -X POST 'http://localhost:4000/access_group/new' \ + -H 'Authorization: Bearer sk-1234' \ + -H 'Content-Type: application/json' \ + -d '{ + "access_group": "production-models", + "model_names": ["gpt-4", "claude-3-opus"] + }' +``` + +**Response:** +```json showLineNumbers title="Response" +{ + "access_group": "production-models", + "model_names": ["gpt-4", "claude-3-opus"], + "models_updated": 2 +} +``` + +#### Step 3: View Access Group Info + +Check the access group details: + +```bash showLineNumbers title="Get Access Group Info" +curl -X GET 'http://localhost:4000/access_group/production-models/info' \ + -H 'Authorization: Bearer sk-1234' +``` + +**Response:** +```json showLineNumbers title="Response" +{ + "access_group": "production-models", + "model_names": ["gpt-4", "claude-3-opus"], + "deployment_count": 2 +} +``` + +#### Step 4: Create Key with Access Group + +Create an API key that can access all models in the group: + +```bash showLineNumbers title="Create Key with Access Group" +curl -X POST 'http://localhost:4000/key/generate' \ + -H 'Authorization: Bearer sk-1234' \ + -H 'Content-Type: application/json' \ + -d '{ + "models": ["production-models"], + "max_budget": 100 + }' +``` + +**Response:** +```json showLineNumbers title="Response" +{ + "key": "sk-...", + "models": ["production-models"] +} +``` + +**Test the key:** +```bash showLineNumbers title="Test Key Access" +# This succeeds - gpt-4 is in production-models +curl -X POST 'http://localhost:4000/v1/chat/completions' \ + -H 'Authorization: Bearer sk-...' \ + -H 'Content-Type: application/json' \ + -d '{ + "model": "gpt-4", + "messages": [{"role": "user", "content": "Hello"}] + }' + +# This succeeds - claude-3-opus is in production-models +curl -X POST 'http://localhost:4000/v1/chat/completions' \ + -H 'Authorization: Bearer sk-...' \ + -H 'Content-Type: application/json' \ + -d '{ + "model": "claude-3-opus", + "messages": [{"role": "user", "content": "Hello"}] + }' +``` + +#### Step 5: Update Access Group + +Add or remove models from the access group: + +```bash showLineNumbers title="Update Access Group" +curl -X PUT 'http://localhost:4000/access_group/production-models/update' \ + -H 'Authorization: Bearer sk-1234' \ + -H 'Content-Type: application/json' \ + -d '{ + "model_names": ["gpt-4", "claude-3-opus", "gemini-pro"] + }' +``` + +**Response:** +```json showLineNumbers title="Response" +{ + "access_group": "production-models", + "model_names": ["gpt-4", "claude-3-opus", "gemini-pro"], + "models_updated": 3 +} +``` + +The API key from Step 4 now automatically has access to `gemini-pro` without any changes to the key itself. +### API Reference - Access Group Management + +For complete API documentation including all endpoints, parameters, and response schemas, see the [Access Group Management API Reference](https://litellm-api.up.railway.app/#/model%20management/create_model_group_access_group_new_post). + +## Managing Access Groups via UI + +You can also manage access groups through the LiteLLM Admin UI. + +### Step 1: Add Model to Access Group + +When adding a model to the database, assign it to an access group using the "Model Access Group" field: + +![Add Model with Access Group](../../img/add_model_access.png) + +In this example, `gpt-4` is added to the `production-models` access group. + +### Step 2: Create Key with Access Group + +When creating an API key, specify the access group in the "Models" field: + +![Create Key with Access Group](../../img/add_model_key.png) + +The key will have access to all models in the `production-models` group. + +### Step 3: Test the Key + +Use the generated key to make requests: + +```bash showLineNumbers title="Test Key with Access Group" +# This succeeds - gpt-4 is in production-models +curl -X POST 'http://localhost:4000/v1/chat/completions' \ + -H 'Authorization: Bearer sk-...' \ + -H 'Content-Type: application/json' \ + -d '{ + "model": "gpt-4", + "messages": [{"role": "user", "content": "Hello"}] + }' +``` + +**Response:** +```json showLineNumbers title="Success Response" +{ + "id": "chatcmpl-...", + "object": "chat.completion", + "created": 1234567890, + "model": "gpt-4", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": "Hello! How can I help you today?" + }, + "finish_reason": "stop" + } + ] +} +``` + +If you try to access a model not in the access group, the request will be rejected: + +```bash showLineNumbers title="Test Rejected Request" +# This fails - gpt-4o is not in production-models +curl -X POST 'http://localhost:4000/v1/chat/completions' \ + -H 'Authorization: Bearer sk-...' \ + -H 'Content-Type: application/json' \ + -d '{ + "model": "gpt-4o", + "messages": [{"role": "user", "content": "Hello"}] + }' +``` + +**Response:** +```json showLineNumbers title="Error Response" +{ + "error": { + "message": "Invalid model for key", + "type": "invalid_request_error" + } +} +``` + diff --git a/docs/my-website/docs/proxy/model_access_guide.md b/docs/my-website/docs/proxy/model_access_guide.md index 4eb273facb..c6cca1d934 100644 --- a/docs/my-website/docs/proxy/model_access_guide.md +++ b/docs/my-website/docs/proxy/model_access_guide.md @@ -85,4 +85,9 @@ litellm_settings: fallbacks: [{"my-custom-model": ["my-other-model"]}] ``` -Fallbacks are done sequentially, so the first model group in the list will be tried first. If it fails, the next model group will be tried. \ No newline at end of file +Fallbacks are done sequentially, so the first model group in the list will be tried first. If it fails, the next model group will be tried. + + +## Advanced: Model Access Groups + +For advanced use cases, use [Model Access Groups](./model_access_groups) to dynamically group multiple models and manage access without restarting the proxy. \ No newline at end of file diff --git a/docs/my-website/img/add_model_access.png b/docs/my-website/img/add_model_access.png new file mode 100644 index 0000000000000000000000000000000000000000..3de54a48a0dca896ad4ac4417451484aceceb090 GIT binary patch literal 589903 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

`Z?KoKD@{1QKl4S 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 z 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

c5U7~A*&6%6tBP2>l*-lfXE>29BbsL!!Qcd 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

@lzk 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

}K^1>spM;B~GStSXF*Dd`;i|r*g zxWPtWMdQXfPRD9Iaq;d5J!;zz6sR3a`+Ktt<{rtCDNdBN0N3+R z+`b}LpX+I#N6>DF=kfY^Lh~wrEw9U#Gw@xECYRXWQekbZ?;X=EcWL`x@Q6~}e%mzd zfHnum0-*=qv}f}Lvm$L*Wze^StGyxzJr#G>c2u*-NvXreu+6I85ML5z*5v>8 zzOkc;vj@5W64@-#R_m=!q_jjTR)WjEUQ#m8!>hqMwb??E&!3g%=iJ_G=Q2^#tPp=X z$eeSMwYnwZs9pEzFZr-pA8{;%wGV;h|3Lh**ros%CLqq;WMVm1RIs)`l-o`a3b`+K zAHBtEAlorqBzNVz!gXAFY)PBp^kv5Vo(RJQXtj9byYcLJ(J6R^+ zL^Fj9HwmWGL;LH zl)FE|D=NsVoBDXBNgo}mMJj1Kv?a6qL)dAdG!1ysg3edb4#^3;Qc2rD&u-?3Mc>Vq zIs@1Mft3}h0+m3K)0)crqG;AsaN~3S1KA2(ukgc%8ark}{q?ryhzLAdi)omQYc^#< zgi}!`Z@2H|S6i<`iW&T;oV8Ex`~ALMhp`NYnGdd-=Pb-z5fb(p1%3MpSKLhp7NWSV zoYKW}_>m5IQ*j&7BLpstt}b%BZcgylt8iY}$|X1Aj`vq-5hbHWDHrS(z+>cgQ9Uq7t0`+VHGghCCpUE!IX%Ci%#-3?icPj92h%v2(j zC!-Yi1HXQ_$GUgCCrcx~;1|bGk@k?f(QBcJ>iTN4m4r1pUq_upwAb9s-9LR5UB9BL zNV-{fE3|0sp%6xU1&zUAlP$^Oqsdq`e5-FRj(|oH3BJbzt zl_gdB%Wob(p{c0}-uSvD8T)PBumy-!I1{&E(ys9(ChXO+L3_(P+1Nym$J%u8%e_kg zCf#OaH|JB}k2oJ6-usodQe0nd_`DsGCvlGokI5MHD=wJBe!)u9k1RL3<9qqm3HkIi zl*yZ~%I`W|m-QmPo2wVumyqj*?^8Wk-5U2=YI84Hb1aR^$v!tV$*S7OB^EtNRF4KV z8;~SpmA{kq#mB>N&_nVAHuSo9%H#IiuG&}kBJdiOS@Oezv8T6e8r84~qi`shm6Y>` znYbtK)-GXcu45~!T)wrucE3ISTyl1Nx8D~wRd3Auh|$W?bo}L2WpFnu)<=A{P>KDH zJ#niZV7F=diw4dCGWehgO0_tl)>l->rKvQNdNMdF66qw?MBut(8M>AeQH5{H%hu(v z!SATE=`OkeBX&6N?g4Y|dmAkQmH5%su?U4zd*RPpNo~~*R&&7EpxA}M58}Z;&(}-W z0=~(g@yr(ap?m@(j%GRlN;84mNsAavMR(9N3Jr9fb4rF6Gsk}bYFniCWKCykdpy!s zck=5}eN$5{BGptaQYBj@$%SKFZ-|UhPl7e)nbeA-WbV`GCcXx+0D&5^6A&sPTcXx+yc=uj=&pFT8 z`<&7DH?vs$cYiJ(W`;Gx{k=W|CBCrvu~H>8q{&#-@V0Q0P@eJEu;<5S#Lr zui$N<;<{iz9cv)GG}RUJ<;=fP_$=~j`4u{v!`SB>aV2>fd_p*~;p#98dwk7Li~JK- z**zjGy;eWbj$NFcuTB+$=9{&ubRJBT+`GxfC54ZdmD?`9vYrKz7)r!z#drre`l^li zvGvPjx?A5|oK0`1BrY@Hl=4{k=`@m162dLnBK9H4_NIJmCWWtDLq{`zdbgxCY(ee- zZSV7?GRQ2z{7Yce5K>=X5}ayuLd)cU7i*U~A+)#Aj^(A45HD@dC!#Ku>p(pXxV+=b$I&+m$|rgCnBY+&#?kF^$8B@uZHRmo{F z7b1zgUs0JIR}~pAr`QBYZ1$;#iF-+QOI>yyGSZ9KL=q((vZi%7ND#uU@#qo#a0(Df z6?q$P#7e?LqZb?<_Abn3n^_%Z_N%7EREgRQv_9P}-V7uS&8b{$sY+qMY(Da{zJZx- z*QwerUgGcruI31nY$Mb*bYW&7Vuea z!U`!$?T~&BGdDgnf%E(N@(6Z7-RW@EgZp&oD^G5(+4(NH{+0*lXGe9>o&4xgrkS_L zesjaK|x_8aJQcc=Kebz}-EzvWFOzt7P zhmK6vPJ?G;f}N7-kJZ5QnKh~==5+ka#+MYKP|zl5E0IuspM>H$ z3j~T-{g|+jSh#8DR+MN1iYX6dLg+p%e1+zAyZ;tT_^AxL<5s_N&ss+^!1^^U95j^) zD-BPyF86b5xcjHBosf_{o6JI4=%fvqWuk}l8p^h?QeDhgYPH@*tP)RN-U;iBtKhXf z?Ge>vwRRfAzZs@xaIC0;&^YwkiV)C=C5FD-J;<+8fN$4K)ZJF<;}c2a$-)xWM&mVBLyd#E9{=r$c)Q}=w&&>*5lRh844kLC)&0^Bj?h^?>DcIk z9ObkUEO%c3X86KJLW0@VWBdZ4R_Ogm_6IZsZl1G zAfndEd$pgUc1hCXyK~kyxII2e)##$hcr)1Nml#<*`$s_<j^a)g^yR2HS16&%?*62q>Qgm z)V-jBTO_?f+@<&y(WfCcqFPtGDdGoVrM_+VenlX+L!u_Zbh_K3f!o+MLCr5NP2s1^ z!sOjp$kPc3_R-^v^OE+=>fa4}$;#?&5X_bCOIBq*q-|gA!wa=AvIkN!^)Wg?-fBb^ zLvS34gtqfe-Z@H`SMi7?3$s*5PeQv;ZOHdxDvS&Sm+Ax;v?iRbe~!b9Palh3&y; z$bv`8n~1I^6p*kvbl<(`(TL9M&FzAh`N%+`nI0|UeYZtbiL zlh!Fl|6YM}TOQ;^Z}x6->0!7Fd-Gw8W+z;yQR*cVv%w4B9ujJz zi&)dDVUQ=({Pz{_l554?s|t~OP6~d-mEJ}msAwj!%_sLmkxM{P;v1fmkIlKfJ(UsP z#z7|jj6+i0NKWHiYmj}A5Jerr59x3w@6a~^6*_)Lbo@bA(r|shICL@uW?Y&u0QW1K zE-KL^a>ql0qZ+VaP1hCNrsj&G#NJr!4~RFd9p zv72hm2yLb(#sq%nW{%+;66ltI=b4C65&ohl^NSy8WjN-;Zc&iUDz=1M{1t|{``u}T z?Yc5g5XY6%7WxGgYtP$B(?k=sRoP0^4{Zm%NwW@=KRO&p#QRiDme;nXj|&$l+(at_ z5Izpm8AhrY&+;7(pQr4SzlP0e7MCGprxL}k&5hF(3*fQ2MxXlxxW^BcR@-Y6s60WXW#&qcWV0OZY z)S~IOMFpW#Ep4OtDFLO1_QlCY0t!2Myw;{J8x&q!a=iUIQR8M;&d1w@L7S5eB)dAc zObp=`%XrDp+bGDGmxEOq#~t_V-4fCR(-$!fp_`_&c1ey?7m4oTWEY9v;=*&2uZx6X z1IsJnkZYY6dU$1!mYkGUTeZt+YZ zhaE{5MQl7#wtPqalbjxamIZ9XVH0!L!0!(@F_0`Xjx@*sNw8WQT;3Mm7j8 z7R$WVY{3>^bF;>mOY`KCO>2r%a#wus<)HZI_SYhtAU)qjSs+BugqZu~UGnA8^3ozD^${b(rLrEse)c4Kb|nM}o@O{wrdlNM7r zzEAwc#YD|6o_Yhr6R|R?RGBkll~Si?ZGPLXV9tWJdL?K3gFut7Ys5_KSU|PY!#XLC zMoF@mx)+mh{k*15TxLh1wz#4Cp=xAzwPF7MkFF$@Y(v2MQ?dSCHidgkdkCLU4oGiRDb4v1c@G6%*>= zK5UjBimCUrwUjcf3qo(U&ul+nzy1z+mdRdRQegnoz!72Zj3uPrJtSj)2KgeLL>L>2 zg)NYi2^)XSKkBWP%|XHB4}{H2|04$`x$DfvG&wyMlBFstn#HQ~^}w~O8vfL(y@V#H zZd)lD?O(fQUY^P_H@z_g{Hk-a+j1QkD7MLZKhBw;U4B$5XyaZ4s<#l%-LRLsF>uL8^}3-&vtY07juhZDLE;g1`@vge;Mk+y8XX zzXLs#BG*RcjVt0g&s0W$U8f`3>X=JZ>#TycCRe}snf=Xu$>Q%)nufg7H z1oagQvKKdNP1%qiTs=A0Kf)cYShb^E6(Ya6ru4Cfj)l)b8z6Oh(Ut<=6G&&e+^iv; zwZJO7?Wd@i7=@t89*3iN(-J)V*+iSqb5fm&@H{c>R+{1$`LA4}q30tWI)pI{{j~mM zu^fo@sPol$0$4uh+g9&C&7IDRE(;x)@!|R>G!bpdF(n#@C$`mHc&qoxvrY1FnASC_ zDYTT*rAHUt92%5pSCF06$JT_#(1sz$(bSvM6-#HvzZi8`z}(0+-0OW-Jv9BM#yIt> z7F#xJgJql2N}8JF&9o-X!N&*ln#;_n&TNQ$cT{`cCzD%o<>RLIbZ(tRRpn<_EFvNo z&Ik|6ZnKmv9sTc*B3-fKzo`$Di`RZOilJCCNd&{V0uf zb@u8+z&v0}a-Q8#EbF*VCZQpPi?U9M%U6w1A?~I*Hmiyt$}s$R8$E_*K7v@; zwL4@%j14PlxdEUnBij&wdpsi>`uMPB1DDR+ME}v9_;^nEjij)stdi&lCFzf|k1zYX zDyUq=zA4DF795=lc)Af5J%bH|FVrnrITJ{zc25q)XPjA|4`-qhE&68J?)sEB!_5j! z;Xm4rmYZ$xwkDI*F10x1osBIfryU>C%7ig6>EeA1O| zY{MXE3ZhIzr!BqVl`$+3B_Ge|vl}lNBg!&2aE|vC zZlIhoNgYq+<>O;6kjO#o(&J7|b)JR0Qs!@+WYGTBCd6&zCEaDSkKE<@lDwwb!Nt*s zL*=tCh0nycf=6@dTuKD-`@9txM|%)p(ifIC>I>u1Zx0d-Bzez>Z>E!M zjeLa~#cgY2&&hspsbV8=Ogp}XR}mU+)NjqqUE*vHa^qPJX*zfv0KeKb!)>qsOp?er zbD4)!F8Z>WcaEDWy;^*dESu03FO&=)*K<`=-mfor^_7{^MK~@B)HlBq7pZgm^5$oh z_AvrapIfT)=H9im9~$KjL8Tzq-RN|qHKWuyDcLj5xqsoV=Gj2YTRpHQv9e69hn+=UbT zDQ{Rg)v7*Nr~PZ80Gy1&)MsYh2<1Q;#E~+3*OhdJ$QuLv7n$_LclQP z7Btr(m^_+Q}bdgM#JhS^Ms#N+srx6`?#o-_3ZmQkRG(}_cc$cBgUBTXEp2X*S)&f z3sOfMW_9slac19?xqojMxR8h6x$>}q$rD%NoY z74AHpc*K`Dx33k}L_LyGwBQ6+t39H=d7-~3H*OrJ*}^p5zwWnRVIkX2MOY z=)Zuc364w`y$qmbFl+Ad<;WZ9$J!-wZmm=QFo(_9tpxPU0ZAc_br@= zC)QrGng_vyU&RYA4+CzGW&%qBg|<#N-?pt7W9!m){hi61!ux~bC+@DPXaxMv$YppG z6u(!7`fJ}XK{|*XdHC4u^{{pB!)PSNaBI9HlorNXtdFkF%|tX2`xbGTZqAFIQT~zz z3o-Z0LXG02=Yd&rB*s_>4sN(Cl27?ZGt&v+d9k%_nj%YjdA+M2O-fAHZ(@ za#wK)sqKv#?g=LNf&kn6KG`*a{Hy~y)ABmn(QLRIt&K(AqvqMflWNTQ96yh#7Fe~$ z!0!{gZQ~f7iBkAb_KciUBO!>s&v6+V@a1dB1DKb>P$??*Ae4!rV}8x@I3*kg9#}Y; z)N>rn9DMPkQSq&k+kQx4rGPjs4j&R=&&0NZvc zfVdP8&zH_hDBa*|16z2j0WYMVKl?PD`lMok*~JryR8}}FeSsSr%l`{BgK5D{a2AbH zR@Di~x4?~2SjH6FFa^EIWi~=p)_^$bZYkqCU7lC>6IvlZs9jn0KfsUse8${oR}cj0g&_)a9Wg;s)94iSU>M%nwdB+mqr51Ldx!W({KpW38%<62x;*%dj+r!zz$Hn9pn}!Ul3gLo|e*;nyI^6Wj;~>yzxSl=k%G?e-2Mw+Nv`g^8ZX zxntG8?WeQ3M3`WrYb$Ss(^q9l<;MgD9*18>hznvit7Bi{_G1q8qN2pTsviHmVno1! z6(TSkiF5=nq!ragd0n%BJ93S)>2$OMQ_wMpqdA2n_25v!TgW>2oGI@GMv>!%x^Ne_ zDNn_jjfKs)zOvjprZqX6d}+}^CI#^&{ev#>svXHqN4wj=R7GNLQ{spVfFKX)PvDw4y>p?xqhZk9GyLR zPawR-{LYN+^$Ez7jjTNtq#RJX|}@O0DPCEEj_wKZdS?M>h$(ys5k0 zan;n)X&8!5N+>-)Rv2_Vc5oHHR>do8TuNJBNUMal*RZx8K*sx-BvTRRYM%00RyI&% znUmg4kop&7>kNuQ{7gY#hUYip`c?&3!^^Ip{bdKTt2$v=y9~8vsc~{<=5z&{R&`a} z3fu#PH|as}7GXi}iMWVr6mABH7#!Xq&RdtnU6!w~IC|2;#bVuD5gtSs>3YSFq5FO) zSf@@f!sH)mk>3%}TnTc#y}1cmyy}b#uV+RA5GM*wYJ=}P`GhH#0R}ecq zW)3@b+PbJ2BqVY$tt*gf?#5N?JjUK`Wao<=L$S4TC3o>3zKOF(LSS(Qv}z^v&OX;v zPV`1M3V+&cp1iuTQ*OdnlCYBA{9`L0nG}_0Pzm$2Jod968s9~l(ZN;JB<}d0<5Y~0 z`Eki&y^8K^t&z8Kso^N41LwDX=}iX?dU+CY*O9KXu+-#$;ghfl3*=WL$yb!9G1Hq^ z46^*#(bY8hx^NJM?_PDHon*VcFkZGy-TthezfjF}>RdUxhRbCg{mLqp^gU};ulBp| zf$jVl_m?^^Tlx--WRMJ$2qGK0Hlk%#cRS|3s_8-uaOO%YR+vzTlfKHS-bD}-Q2w&W z;N+z0*Kl5MdN)j>E^B=s&bi-N5EkZYV8ZP{M%eR0$)UAi@g|GzOP``C?Hz;FdxIm$ zUz1;sQ{BEjBiK-^-0>%eZ6EnIf3d^Ucc;dXs2dY?fF!QM} z6P#CAT5e@NHL0w@y}Z4RR;f)4$;@u9WSwnFuRWgUkHh1I%lUp#lfMPc-pF;zVyJf| zB#nLCD!A;)P4TqwB=!D1Cew4jnj!0hIqu{0oS)NVe#@rB3(5X0+ zxwz!VTm4^Y2l~f+BlkDpbZp4sQTxprb5K51_w>@q4?xy9aPzJa}suKk+N3xym-uebMq|a_$=9TQ_Utmi)zME}BeYRU>LlBZz zkk>^EBTt)fZfMNG9p`9>kx){qtssP4$v;zY~{dvr5yMb<2) z_`S9Mjz)&sfkrd=N|+my1hJy{@`C~g742Oq1RBwyq2Bq*j*g%V^L}|V>;{z`^Fq5_ z^gR2qC>Ij1CpW1$*)>l4o>~?4!+s$Hb57z_>Kssb^yB+!@P7OM zQ$;#JHejO-h%Mo9{{}3!-|M#l0sxy{KmZTOU<3SC?+cIs*v0}Pm`4Gd;D4^01&9ai zM*-pOp#BCPxNRxGcwk!xD1P?ws2`XQ5U{&Dfa$>E2T(dP)^DW$K@9|u1X$((BKiJ1 zB!9cw0muccTL5u2V1s*wz$#w=1_N6VK*6av;0FJ0CjyWG*bx9?fW!rp;a^7kfA($s z+g|dIgS&uY8DKilpbtvddpvOq)>GqO>3`}@!-p&f$>0}GbkSRCD`$Q%kB&$0{WIgL|5Pv z{hoap2mlltg8)z|z`P{vzoj__0s!s2Ab^2a-~#-8S1*tXsI>)AQBi?U^@oyMAPi7S z3xc@<7v>KYwLlV}NESpg__&Jz)}NI>(aHibfKF5pMhGpq7~mLEfw@4(C@8n$afb)I zAOBH?^oPb#APvw83ZjXi2a^UIM<_5B=+FekPBMTU`!|f5Kpvn|62zmz1SZelG)w}C zfDT6xkux*6MBo}7f!RP;A}BljQ9lFDL-e=Ji9iIP(h!7T!ulHszb7~ZLIBN!APDit zy(BQN!|!c4*wHp7!U;L^#Xyo@PZ5S zrAuKRZc oM9iaK?>}AO|Ldy!bJtE@8s@RL@W~U7$2-pBr#_5-6^uXmUyLKZeE+l^## zU70^~m2+`kL4)KP0(tmcu-sRqgD<3Ke8eF7ml)}R91?YbpL&+^zQjxT=tDh?zcH&B zZF&SwCjCV6R5SbP{Dd*Y0Q!r;Qdf?et9klbhW6y54{zTPO`(i~%+VB9ckpVD`rNl8 z&zaYedmNffix9shZBX}NUtgHIXm2nmTKCg0IT`RP>xpmvI)yg160fi&%*$yh#6GXM{HWcO6#&sqx zXr7x)S^Qk~0Ew^FsAJvORwiU)|;l z_=@m>a+FL26?G8H&;2Z&&AaQw{y++r*bt5rmh_N5-77_`8&K!3eA*eQ4L((tMCSKv zMB26p;2=U0a3)uUmVvIRL}=*Z8s^wYotqA21L0_3^@j; zA(r1BE+}&%FvOv<9ID9fj2Xn}95uDO+fUv4kFLP{k+s{?sO9e6(KXzvub;Qd{qQp6 zY5!t5lsmko#=_gI%taK`=UaHgVMT(G}Oy%b!U5ZSd$@i^Bb+905|?;$i7vCORC$ zoS;RtWJe;E6TFo2hbT$x*O&EvPRBS>jEC5~O4N!djVP36l7}83``Z&pd`&`>yvb@o zAO*+5tDwY0F#qc{>C;$!QfumCMoI3 z9T@U_noMLMaBwgBT(q#V;}!`|QZuD!*KWlp9!F7tDdngi1@hr^%$0`e+sX=>^BC;P z*Oe1g!!kQr3%X6C!E$hr(uKWCOt<;BlO*5@e&o;vymE7h5v+;wO&bmcSoDGP%??K= zEA46kF&s3QsUn4`M+fovyUq)F>2Qb!eu&bzX>a?=a_T)2gDJ4 z8NN>nl{+&mPnTmHk4Dh>k@qhGVP&yPjZCfY0jXv~BMH640{beZrj8xY-8i@l*H7_p zJCdL6#K!eQCAt<0?a&ySbn)8hkzpiWcj=SaC|Z|N`gC-FeLRJJ6%pWe#Bd@HnzY91 z8WRYjFYly^Eg_rYv=P6^O2y_0@sct7(3mti)q{P%6cLIV@$Xo6S40;GFY-ZIICU@G zTs^+H{kz@?y%QsB@+z(g=Xdvf`S3S;eeQYl+@k@~oML4cN!nG0a!e=8PmGv%Ym6~W z$5WmmCkZVlH#krp0zaCaY>m_TJ45>{+f-lKMd+15;DhQ08JWZNB+pG`cO>ud_OXaP zhSE4}O`(eFC+u6LugTq(2PK%c#6Qq-AwE)pV!Yk%e@Q!uaw0!&`&x3UN+-4xcLX}^ zbQu5hKhT}Z5bXgQX63Z6e5JQ!6U4qb{2CTqYv-!rc)ZcpHP8YA|JZSS@VB|y^$`hYWlH5Do9Ne+c? zazbwKKtOrrI?zj>IPZOt*znPi-H;?k^Cg6evs( z%e9m$x&23i&+tVe3cF1HwumF7J>Zzb_$!Pmo1#<@dj1ncbp zmI5*FdObJ&s#@v#7e@K76&LrlI9j1lE($ElXrI+|FhG*rErdC-_pvjaCbS>w|H)xI zN9?zgrg3zCSI;Ny$?U-!6jwxbuQ#8TYpJzt$~5xi5pILYRKs~P`QH1o%z7%V zb3r-RU#31#+~0pFvm)D>(bRk7AC0+_u_`(LoxNW*K$qSZtlvt1!PBcqoVjafYZ3)7 z*~+f9P!opY)nBRmNuj@IpQyTIZJ($zlrH6Pa;}--KJ8R!L+*s$B>_lome02vR*N^X zB&gaug(~un+4pm|b2-$nAbhrPd|}jdMPl_>{vDwy1nqgzm$Sf>KA3b(sDnd^U17h> z-itWXbKPWAYsCpZ{F9Ww zUbH&QI%0RVbe7jt&+Qv~Rvf_)&GH9DyVINys1&MNW&{xBk`{}4fUn7?ej|EFwilY2 zUHww@z{&*KpSek#;0{S%a<5rR^6D+u{!TT?LhOw()Dp7^hu~}WhUU`TDOBYn z;y+^BJwkZYUC$f#`Up*t8B6@~6(YtzUa4xy`}X0!A$ZR?j;lN#5{6(}z@j!NNyN#*;r{ z*PtvonaV;)kJ$iusu%D=T}PR}+WHKU9)#NHQYvXe7@ORK6Lh7rg{-N0!SYm?VX5}) zBylO1+&JA2Vjw2|8pRRSFRFN7MnCBr@Lz8bct5c$Dmix}2~tR8LK;$-6~Ix)SvM)H zr(^DM9|niaJ@m#^qe@gQ!;BDM#RYUO2KG4{BSl&tOQC1`GQf(816hHjHDI+4TtJtefS8xiQWwnB!$$|hEe0C_Lw4) zRtO#yCx=_;x?>Id%M`I&v?4S6=6 zGr|#RrTf#_d_+@6KhhTF5MvRjMTt&*RQ%|Vp8;Q>lR%~$&oa>Bq+4xzyrl7Pd0SEo zazhSv{Sh|^*)|>j9-xCng3EulSbEqyotbE_L?}ejNe-heOlY)+h+kHm-X}o}BR?4! zk{ye|el_1#Fa7hn8`9qm*{-=qD_*}WNT)+(jE-*ivIxi)X=63Hv8CtfAVgXCTarFd zLG2WQ{A(yX^Fwp@(}C?FmDk6}gZS?Sm&9g5BC0Yx6T&&*x0AL@BLBq}O~YrIM6I>; zO?cVaP#2=|_`P)xu4d}`<{0_0_;W9w=;Zu0uaPnhb(iAn?=r6K;Krx#CjShl+*U-? zcn6alUh-@nQ(P4d5L;&xL{T?a$8fA<#d~m!2L;lWDQ<84#Lr95OC_??jW^V13n0zM zg7>3G4)MYnvQeL#sBf*r7afY@R*d9w;|WZ*uL0M{<4p z^XnsD+oR(ou!(T4`LyZ%_7&3XUn+8RdIQEhc)g@5z`F}Z?G*AzU8kG-n1Za%9A3>7 zA@MsRN!N;T=31o7PB8jQokT&wGk+T`)22t66shjQXbyD^erdw$J@zu&{5op~Tl|Sa zoPBf-^-iaQYP?8O8AYc`%6c9n6s5Elubg<0=NAhPCY1a(CapKix&eVgypD9Ria>+% z)yp*ClU)JXJhyuTu|0!8HOz0I=9h}u^B-x{VW*!bB6-&=}Ad?%EG(ej$aO(XAlJ?+=TnB-(0$+hl zj~`SjR%ga>+rw>UGu}Z&vmkQuWm;8PhMfnT;SEs&;$)Y0FLs>I@#WtybS)UNmxlJf zSV|}Ea>)+Hj!{POD>|JTqDotNHD{!GO9eF&qODcmx77naZxyeXHcw#uCy6D)_}5Dh zpY`+Z`xxllL5gS-F7jDQPNhX|dJ`!%mRht{U2Bz6J+a4&eGqzs_As!a!a)Ndu0Q~z zGhpt7eG~7qHvTQQuHeeAe{GF`hsX*5GQI{c>PEj(xTRAbd8E^LTK=Ucr|7dYYKQ~% zU4t=JSoT28ZL`Xwz=XT%DA2e96f1ZO=^4Xn)&KE!r3o~ zY0bTqE`9Zq%ZMI5V?LW@q9F^$mLG~HxI_y9yRlc5*=O=+!Q7c)y+I{laSL|T0!Xai zoW!1uJv5(Sz*YVbQ1(U7a}X2W#OoB+G?K>4&$KJehP{06SN2gF!`+@d!LPGA!UKT4?5 zrYlXup?wX7LUCL_?k9hSmLo56fw7@U!3t~LD@?YCo+DdRUJ5T)!Tl&}eNpf#q2)Ci zvq(!X8goT$QLH|(*%yi8CY_m4LnSUEa|hIs;8<|Osv)^UMjn>Nc017x zOz?nc?XdNd3TRqaivqRvnJK_qr#Nt>_6iPpcu-)H#A`p@rO<=CFNro0vTWeA^S!j2 zsh>7iFT`OR#H@lS^Ui3~O!f7;BpjcNVb7DFz<-xtK+ht25DBcOT!X-z_?IkRn3Ldd z6z7pLHo`l!SztfEgv1Ayk`GmE*4bMgtboUhF!12_zVOPsAemX@MxSw>~B^1WrtE4&7n)i=}3=J}d0~npzGoifswb z;?<@w#E0%0)K(v<-@QY*WiR@E35@t;jCh`W4f4?51YYv?f$nAa`YX*p9A^+}FDKz9 zB1ZLAc|DHTpd;%PYRii!(-YSn10}IN+rFlO~3<4?9K> z#~Y3oW&1SwXFmy?&7I`+-Qa^8mow?-?U0x0JMlJE$Y0;!GZc>WiLYMXk@$E8#hsVP z&3(q<_dvBAr1S=y|GIb&WbA>gep~~~Te=Ur_DDOelqq&p!)SJ6B|LsmTeZW$dnx7s z7nT#Chaa!N^B$-l0{lPcA`0P;L=JOqT}tx^f4Q!yjHSy($m|2KR`}Lj_5x}WnG|lz8-DPj z8%?Eib#DLT{wS{gQcZlGdEnv(x(!vyP||MU?)@IQstN6-d7^etSpKr*|a%dZA=Q zzapxwl+@J6EYGf+LjL*@g82Um)# z%;4XXlC>daWw&r`ya_y+>;q*Nz}f|dB-Sm$suGqGL5b6o2_oDxWKxd(KP>fw@c00S zO)-E$^(#lDlrL_fX0&+Jv?1Y-v?O_M@(;ywX_=ius0FuQLeQ5l`r3XeVT4e{Gi~i5 zNHYiMK?aiD2$;XtKiC&t%`5IwO%FG`E?$H9uEB_yQA6+>Zr{XWFc33l0snO%;X4K5PI{vmD zx~xp(F_&ZRV@a|g_OlQwMNrye&?(C{as-sa$3zugOl;|pW84kIAtJIBGy?A$;8F_M zJa)uH$Yuw_^?fIZF*9lE{U>V`2pW3^@vX4jfZf`JA;9(tP<#bCE3Nkcd7fZe4jUo8_0;rHzNelOE2iFX?FH+})gBVIX%Bopo@m|7OKyKJ6}HzAwjtw3e*m^YKxjCE(qcP`WwVs@(G)1!@QFQ+Yk8VDC zc*Q9>zj6TN^D*qM@izmd%>Rs>qH3GJ_tHa$m^>nU4O3!NV!$}iZ9*7@aT>G6O4GPA zBFsf_rS!M`c^^egSmo>aj1l<5U0jsVFiJ&rr_J#rT9>j6GfiHdl;HGfo7}^iDw11< zxXZ5JOoKZ9Ya$Bga6@j~SN=L$=?b=V7^h9Epdvj#MZpfgT~Uae z_7F@_4Ol$|xblIcNY%0lsIJLgQWvsm^$$UFPZZj8fRs%zNFzMp&ZcIN9blO@A_AsY zr>}A!7y!Env;D^;6}UHf@@zo)5Tqaey4i0B)kU}#%@Nf534LJ66`x1j`1M6+A4Jxm zeF!?W*atTO6j84nogxCAx+;nz32WCctBVYJ1XI^w*;l!VC)IcEP=H)ks6ZZ|eJ0JM z0$v=t*GPl$2))TSL9;yo_Q-!ozYd5jjjsS5hVQzO7MKPmJ&Myg#2OhYvmm@5U2RRW z0s?inuS%>s8^sYAy?Lb7BI8@0PaDX{VEFp}OwM4W*olZE*oL|0{#Z4-SF(>$Od5pj z+zO8PBajT(s!VSj3hwbVKk&vRl#h)3QWN+nZHO-8UV42PZFqR^Ls@q~9`V9j_mB?%o#AkZmMq52x4kOH_u$H+BtD z9(X@;18PfutadbB1#LzGi?^lC@&`iqmOQhK5jdgh4;ncVLi$+y^}|&dJSCmYX@k-V z`go{-JHO2MEn>*7=MobZ`2fU8<<;XqFE9l7gWj1zx4F4vb)P`$kI)+zrMv=WL1WM$ z&3}N|0c6Gl|0Lc~E#md?%2=Wv-nVKv3QoVUeI33-v47EA( z0uoNY0gGh=Acs@%^Xny%v_r?(QxIB&_~PF)2HV}h^;?=i(;r0V$+9#{79APfD0(2N0*ZX?NlHi^*Lrz80M+)d_ePne>aaiPEe$$Fr+8iW$v zt8rZ_!DocN8KshjMAkvy3yNW9=a4`B=E*DCLTh;a{Cb;~XYgQE@tKCucs70c;Hn4u zed4hF6z4JS<0+N1_d=B$_m(J4y%SYfU>~Q-KeWF}MFA_`n3a*odPae1W<_O(#QRfY zCh1`HmBr2ti7eI#Xbc42W^-HGtD&d~2VsJI`Pt$1{`)|U)*#%mRhkI%q6qYu;SPty zXY9N8v0ss+3eptyE!rk3S9?mku$UO}MQ&f!WB4%~FG)*qcY6g&S%i&;Z&QmI!Z!E* zZo!|dT=lZa9_A)gtS56}aIh~v=I*Q2d&Rya03Gvtppzh?#r5S23~yGfpN0rbJ^Nnb zlw>Hc@5-F5L3;owx&y@l@BZNBUB`?(8WSBq?{KgIsi}a_6GbBcQoaV&2tNVsH@-ey zs9Ty?l4|i-Q|y2oD^Nb=Px1t=uiOVbr~$k_yQk{^kP4J~52$!dfy6!W8DPH2?carL z#v1DXN{5?mwmVo`UXF1*S91KS&c4`wlivM1WUewhSq^!Wm|fJIuv_@yrzzUQW0q-l zTh+HSybTw;yQjyC=9x*4JmCE73p|tw_qbHnP+2gq^)EwLlD`2o$)9!k8gHz zTZIe%v5z8fioyK?B4ez2ZweFwhFRpCS@>3fV%;r5AOqu;LQxZZ8ajR7PePfDb+J>& z=~vs5JLcedX!gM8sRV5$I1b2#l(bTYh0qx9ulZ-=ACP9UN?<(|vS|F}Rp0`yfF;Zr zj=~UNxAH?sBsFg%tA1~Yyn))5AFDgxEj8&IM<#SeYuO3i&;4>pOpe6HQ1id1 zb$3?*P4+)Vzj>0SoPRu-fA&%M9)E|MLfuMN_~rD69-#jRaAG)o-HcfP77BnL9$Lk~ zok&}UR5b&8P>|E^ky_lsJ$Wre`(0GONN_&^e^;MhH~-#(+j0Pn_#6+r)Cq9uKIjj? z&;~3{9|8+BfX}4XJI5lq2?vXBB3=KHS)bzH<>jQNXkUOQ&-|}z)%ZHO0n9F50h^Jp zsc}^y;1r-a{=J|p4_x7tn_oMNw zZ%@We5YvwGQ*iV8>FEn-@fylSVma?Ao}ftRA?W*wM%=J+$IrXxNkd?#v#Heyk;fJJ z4ea^m~4~hC`ZGi%( zPcEddbxNlN3;vA42_LQbi)8m>pejr3fM2R&69RM{=8t|rAe7fw9)}OcQm7&{5$qR( z%v{Dc8Ro823Za&~>DXI(%8*p;B4V?U&&06Fi#l*~s(Pe<7uqBl$NmiD{ln)ln4wPV zRxtZ=5b{;JLP?ioE{o`WNEXytb?!Ao+Aa}ed?V{s9N>w29TRH-i{X!=<|z?osRQ@Y!NHI`7MIh+XfsCaNztna;F5 zS&6qZ1G#a|UM*{baF;}{M}<6$Pkd%^LUG+U?!N6};st_kq2c@MN6CsFp5A__0?=z= z-5fJ?re4M?%(A(yZvLRrgtc{@$UR|L@h~6gWo2*tT1nLYqi6qeb|JT+yytVX^k z2b1O}v?AVabLgmRd1mygHEt4a0&{IOp7n%4m&8}pF(|Ai=u!uNO`iP~hN({?jZGT% zIAO$dqCc>Aqjj24d4*tWsq2S-+e|DgU%oXmt|LUj2yE8)_$;S3+PY3hW*V4eX-&L<<>x0}?hx~G+DIF2%!>=&nNRqEqL82+F}`U-)#bq5%w$=MNg!;go}X2t!$aaY zhd4SK^g_!HBgEajjY88emqMZ5XdMY{=p2c1!S;}hBXbjjRmNAloQzSVjy$e0-UVsz zZuIPz!2)6JNtzalFNcD89aHo*GIZgoT5hML``_nQe2YCYwhfYP=T*HI)JXPd_yH&`0%2fgokJI;<+nqJQSfGSzUNnVf`{(#b_PY z1%g_VSrGh)y@H)ZaV6(m*q!r9E8x za}W=XPC7csicOf|CZaj9NH3-x?fj_Rx<)N;AF(4<>`U7$K*xQMuvK=-$6bKZRrZlM ziP*2aS#HLMiR037rfR8gSkTSbUwV|mBUL&seo*tfknLlnE$C6UW7 zH2fR9MZu86K7yh?R=tZ9WM^*AeW7vDZIit7m(|cPG^Nr>89Nu1qZzsoHNPbLD$7zv zni=Z=3h&8qM;Moj<-zQqvG8=ColR7%NS&DI(7qiwYht5MGt>ADc;&+FOeL-L7+#nz zvpTD8qJ*4|25}5t(q1#N3YXq}ujVTl!J|s{_2K0Fg&5x@?U5=Z+u|oZ7NyrTMbPSi zWSKoqq)*r!zX`e5iXTcp$z#$)ANAlT^PBT1%$y0u(4N!bvITN|JP?&9eTEvReWs?T zSCO-!{!5bQglVaOGSJ4{y!svq(&?{ER^*S-I*{6m=llrRZKm-skR|l-N#pl~1+oea z?Oo~$#)qBklD*o`PR6h1@cmU7YmN3wRTGKQvM!TwAJ`d!)$3(XEX1?9(Y+N5ohMxF zQ-n4rE)Ym~O5-G)vE@&f^s_@)tod+1DZ6%Uorud}4nc4wWtX&s*uR{CL8Sr?+;Hx& zJOf86d0h-+N1iYyZumR|1b+F+1=nqlOy<5+@}dk^y){;Qp*EVqa%mF>`FgxyTAd%R zzsfLjUK0q3NlVoe08pktWoGD?CHslPB96I?15Zb+vq4Gx zpZ`jQilvm(B+rGGmK!Xu0_er>&!#>sY82YGV)Z@>| z_5b$gPVdsp@kYvvEKuDqbBua}u`{`gs6e11ri`I{zvc ztr+KbDC6K#w1qGD5F3uKDCGD>zfiiN*$iG3Z;8e9Y4@-%aoAAF>-K-67oSIUrWtWC z6_zR84+)a@S;h%_hnV|f1j%8t66~Ed!hWU7m}*%!NB$VdUVj|e!x}=4g6gN&QnWqM zO}ODO%*$^f=W#TBjH(TB{$)c~nYPIp>>TqktS6}HjPeO~(bI9NmKc~kK&b30Y8~&N z_i5;AQHI^|`YDc0a4YuNLcP7{OfCCzfK_*{|)G^<(a&8{E7j#EAMi zFSsrSeAA4qY50h^9Q~5PjW?ov?I{F)aia%9-wVX2%-H|Yz!frP6IhVnVfPc)nz^)V zMWWv_5qwsom4$W^)!RCpf$@Oj;zHw27>1*u8x?0blh+I56O>eOI-V+j-AKq|`O^#c z`uRQ`W0pD1lr)b{m0MQMIhXLPntlE)#NwBUay9;RB`maC6Pj8Gq73Zo<5dySk?cRso;ZXJ_$(=WIzLGF0)!OMe7 zw3^Yy-T!&gIBIvccRSvI8`){Jk?Cn_3-?J-dLcS>&K7LwzCI23>ifvP(3QubV^Pxc!;D zzZ%zVXjDgtjJv=N)H!yePho*c1Q@TDY%TNByL&AWf;<;{&~OkZgDnuKi8d>}q-uL_ z=rHvt`$=>%bgeC~y3#|03^5BiOE-fQN7O}l7so^mf)=Dr z>?;Gs1M*eTpvem6BswU;#C{`7mvhgH%`Fkt+TB*QrtgUg2UKPg(rFTz6g1>y1FKNt zWIp1N;a3$EgXx*71u5egc1rd-onIVC#q_$YpRNkoF+^nJmgxeWjsFo`)yOiuAf^`P z{vr|0l7J!N#|eyXsJT*2lZaSi2goSM!bqw5`-U(COwsJDCl0RCbUhiWvyM4JWeJ7h zMKaF7xn4t7yz30m5G3opPU(cai*NMGB=G}>s1gN#tlkQCWSbXj#FNeO_QP>Z@Sycr z&A#o1IBPM70ulep*p4_dV6G3f$QIfh9-fZ~N58wd zHI^{0jvCv+qQP_|>M)hL|`DHY1b z|63cc0p;eF(%wy@SSP-bi(*QCRA0X9=asD`Ry%}Wa1_3TwU-|a15}3e$U&cKf0^3W zK2B0K+3K0`9iW0P;J;ooXk>;YOPGH52{Q2s`o0R&HO+ubldxmiWP3I z^HXHiS+dCmk@+tfcDw;|gj5bqK~k*DC;D{^rhRLTY9D3zj|6u1#~Dn@%1VOG&*DtphD( zY`K;d_UDKLhW^pXIr<-1gA~;$C8WGoO1P8IsM^z`radeiR0}^ha<}La(s!y=8=LT_Pc3fIy`1NP6g$0YUh9?(Pa;%l%obeV@QQs$FNsuQE?lhnU z*k*2aE@OUq~4|NXHUgj{M22SAe#8)HbmaV({#@9`#2b_#T?PL-i_?v zd80A4s!vd&NyVZK8-DdPg%thT zFYvKw;>rJgU>Awy>EYvFfA*%@|Froc61+b5R^2h-sJaQ%qzvZN!jWnWw%LYl8ezR% zD=%JKUK#T~;~CHp^?}%`0zOTd5q6kDN|29K$501p8lO^+oFI4{IWA}AN4rF?!xBFQ zj$pzza=9Bf-H2b!$PJs&-?Qh%!jBAhB+&?*NLXFs8**;&>XrRXmk&GqQa@iP_@^!g zt9?YFr$5GKk9H3OA-u(FHj?@Wy#JAd{16l!5+%&MB38&$Jx zKLFlT^AAGp9-A~&PgvXhmI?s*XC;M)N{OOw?3M=8tQ{-SD6o!WFcp^F) zq?;s$tfT!4Am{`BswA4YlfAm)=*-HaPA)(<0?jvuCWk=2mF=PH1gBNY;hb>iqZ#TSBXk8H3SMAKA2YSHTG#6 zhrs zjm;NxuFRoxI7d%`6?pm`MTU)&OtyExu`QPmC!y!18DnsH^y84NE6R>cW@eu8CLcq6^bMS7*s^uXZC+5DlXdkjUA+QY z)=FB_f#e6dNOAppbM;#XJJjS{HiV`f?)+wWB-Tgv-If~o3(IkvZRvYFc^oI~&VL7U z4u8HQC?C4I(&z^ZsS7e$cIF#}jo*o!2!tO9rr)jZE!|3#J)>O^W!$s|i=YRd#}LKd z9+SG_<_|?7RRsO5+4h}D5FS!r_ESS08*>$({`L*4kd2wLMTt$R8p`RTs0qoHkH3*x z=mwpW{m{L5Wrye|KYqWj^!1XCgdgyuTC)ywm8b6d@?P5rFzu3lYurv>Ow?N z5kpW*{Cd9~UQ79GASE$}<-RQYx$~Z7Z#m&W3X+7eej z{JhE;eT(KNXmU81H!BTSJ5^}}@;|(G9tt8{xGHAEMPOj~!=FWwWhm%TgxHuywuGQK zj8L+h>0X*m&^l9v?^1efk2}^{3WN*yeLxHs>{E%5{@|QkD}-314tp||pP^?`Nb2hw zCJPslEXDP$gypBnSS|(WEoY_D$J@%YI;F=hdWF+tPBJK3JL$3Sv475M!psi9@t3tw z@Yex0VWNywS|~IZWaW_~d`V*;GGrr4)48DtUl9A5uXt})_I$Td#0-)`x!o>21;!eo z3p)d4oeF{%X4(_AsM+9_4ed>bqG-MlxE$)~@5Zon(f&lvpCL9Ax46%=H7yc{7Kv_m zaX64cl-g1KH@T2V0eW)2FTC4brHBQ!d)8g?)y|}qtPG)~M}5IU{~N=VfK$=Sm@XNE z)yPnkZtf4e*4h#mx7@R(&pSwVmJnny%A4%SW09XTt523inrO{79$FF zC?Ed(<3V`e|FZKmwN%Gi5=t$tqD2s)hZiYU?o(f3KZfw7WJDROC|eEmP zm*9_c%U0p|ZRtEwQ`ruJ%>g14Lp(q1U^Zt`Xmo+dg@kIC@o1buth%2C?jw)=zrN*4 zZ4h(pVix~(SQC6pc(5sqgP|X1JrPO`+#jDN)?e(ef#f7QY6#Iz8 z(`T;_nMW;I3d6*%RRviGUx-8sqPmNG@ryTJT>#nm(XA|9xgjQXN7#k19sanksOJQ| zuXo5bBPV0r?@=7qI&FCeKIMu=yxjTasvj2K$tr4g>!}rQzUR6Da|POwHfS1@>(7)O z`!F#|gk#2sTken1f^0$DoL6R%uRQTFi;fX(TnY_YHv-hBX~Ju33Xh?ZReeG;JlZYt zj+w=sAy8VUYhfipO!j@uMYSGVe5#i@&7-BC7+DX>R6Ve3(CNtk=GL8v8RMMZ$b2Vj zzQu3~iOY^tw;#rjWLw^;r89Sok$}0B*IDkAP_EQbfW+gwvT~J+M*J1rmEI~|vP@Ig zhe5E}Ud#8++RkD4r=t8B0}AUVLSNL%my1sl;mZL?s>f`|L+L|DG(pq6c zzDul?26T8Qioc4BKcU-vVdYcg8%h$W)rqW_x0fp4`O3}Hsu%{XT-@b${!e!4*Vy<6 zsGn2y+_-YR>f)K+A5P)7wWyi*RO;O0cgn^L<24-*+Zo6PsP!p{`maL%x_XF^^1MMR zJP%OxA_#Qd3EX5*WQr|@}^O8;eWBE^r*Xw`ptPd->S-p5Z-^xmWmQeJE9BzSi> z4;73{`ZJ{p%Bo{tBG8zaXp2YvBGYGNAVhdOsICNRA>SH+_A9#?9L@@B#bP%5B>zT+ zgX}SRqlxpvZ(BOA>F8oCM@b@*#WXQr zf6->pNYmLmB`dShw3e;6kGA0k(D-y@i_T0Qo*7$d-UlyeQ3}Ktu0R?zTkrk1jygD z2?`+?uY&}l4Yhiis^0J9XJUS~US?>UmI$`14a=LV>G=_WoH`hwkdxgzSj&+_C6y6BnbyeN3FTgVTM~n^F4jZ6P$=0E&&N|&@A*Mft?y<{lV50mJ85XGpc!;& z_#&o-P$Nfe@d)AFO0x2mdA=<2!bnKu@#Gwf$j%r)aYtQ}Qb{vnd#c9R^5>1q8V^P@ z_bm99AE%GnL_qvY=qj10;^Pa)VUv)l?*rz35`y-CU8E}NTh~Rfn%}HwQos9`_S#63 z7L@gt$Uih9N8d4tDhQ7h?00G!j#w$pN3VkN#*DS)va8j%Z@LX=gHu*>$La$7wzVK^ z*Bn5I8<;*bQE2HK*Y`l_UU-_%}eE-GlqRXt@FmrvK+WT&-?G zaI3Tv%}~3!LH|pX11ZwM3BaFxIz{=%+dU4;Fz8I~^RiDCY7g?{(0~wa4f;Yr{;(We zbYDeoEhosH871B`i5TwBCr`lpz7G%WT)=qnhFqhg;gFoY852D}nD3@ZDl=Mj4zne( zZkVxXIj-KNd)05W?y1(>Qh?z>Iy{QfV5vD!TQ{f z@N+RI7MtucvszN7@j-4J6aDMfllA1UmtTXu_hYvF#OPih&qFTZD2Nv~q9(Y+u#=*r zj{9O9`8TwDACA{h?JcW5)0I$`6KJ2;3ivQ1;Az_OPo!2s54^&NA;*)n=$hOKko;== zTvk)VC|j@LVXqM|{EA>QQU)wW`oHM5wLO6m&nMo4w*MAy?%B0E^_F7j){u}K-TQe5 zVVqp-&YnJScB9I+KIJJ))A&11j&-?iW4h)}mEL$D4|@K{=W1 zJY2nJb=kf-Hv*g5KFIx%Zf*2`w)l~_{t~H`YQ^UN<0ssor1+1&V=w>y>3{Uo>+3h0 zT2$#6%N4 zvCT7I-hVSO|Ilw~_irW;)zZZt7;*{d7;}>z=}`wudUD zj5fzrZ~vQq?yA+r{=6@X#s9u=w`aT9|Mtakzc0+UGG!7jiA~#5!M~iD?Lp67_bQfI z&zV?H$nAOFBU<-$y6*kDeI>nl=|8pZK3)A~+WJj@-t2BZCYgRb`u(~7Zyic6%)0M9 z$eQahMg3^Emzt85X0*zVX+3XA8y*ryQ_ugp9Yu%OespLJ7X?zT?P)8D0fWqxEn8a? o6O<15=3.2.0)", "brotlicffi"] +speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] [[package]] name = "aiosignal" @@ -129,6 +131,7 @@ version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, @@ -143,6 +146,8 @@ version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, @@ -154,6 +159,8 @@ version = "1.17.1" description = "A database migration tool for SQLAlchemy." optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "alembic-1.17.1-py3-none-any.whl", hash = "sha256:cbc2386e60f89608bb63f30d2d6cc66c7aaed1fe105bd862828600e5ad167023"}, {file = "alembic-1.17.1.tar.gz", hash = "sha256:8a289f6778262df31571d29cca4c7fbacd2f0f582ea0816f4c399b6da7528486"}, @@ -174,10 +181,12 @@ version = "0.0.3" description = "Document parameters, class attributes, return types, and variables inline, with Annotated." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "annotated_doc-0.0.3-py3-none-any.whl", hash = "sha256:348ec6664a76f1fd3be81f43dffbee4c7e8ce931ba71ec67cc7f4ade7fbbb580"}, {file = "annotated_doc-0.0.3.tar.gz", hash = "sha256:e18370014c70187422c33e945053ff4c286f453a984eba84d0dbfa0c935adeda"}, ] +markers = {main = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\""} [[package]] name = "annotated-types" @@ -185,6 +194,7 @@ version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -199,6 +209,7 @@ version = "4.5.2" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "anyio-4.5.2-py3-none-any.whl", hash = "sha256:c011ee36bc1e8ba40e5a81cb9df91925c218fe9b778554e0b56a21e1b5d4716f"}, {file = "anyio-4.5.2.tar.gz", hash = "sha256:23009af4ed04ce05991845451e11ef02fc7c5ed29179ac9a420e5ad0ac7ddc5b"}, @@ -212,7 +223,7 @@ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21.0b1) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\""] trio = ["trio (>=0.26.1)"] [[package]] @@ -221,6 +232,8 @@ version = "3.11.1" description = "In-process task scheduler with Cron-like capabilities" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "apscheduler-3.11.1-py3-none-any.whl", hash = "sha256:6162cb5683cb09923654fa9bdd3130c4be4bfda6ad8990971c9597ecd52965d2"}, {file = "apscheduler-3.11.1.tar.gz", hash = "sha256:0db77af6400c84d1747fe98a04b8b58f0080c77d11d338c4f507a9752880f221"}, @@ -238,7 +251,7 @@ mongodb = ["pymongo (>=3.0)"] redis = ["redis (>=3.0)"] rethinkdb = ["rethinkdb (>=2.4.0)"] sqlalchemy = ["sqlalchemy (>=1.4)"] -test = ["APScheduler[etcd,mongodb,redis,rethinkdb,sqlalchemy,tornado,zookeeper]", "PySide6", "anyio (>=4.5.2)", "gevent", "pytest", "pytz", "twisted"] +test = ["APScheduler[etcd,mongodb,redis,rethinkdb,sqlalchemy,tornado,zookeeper]", "PySide6 ; platform_python_implementation == \"CPython\" and python_version < \"3.14\"", "anyio (>=4.5.2)", "gevent ; python_version < \"3.14\"", "pytest", "pytz", "twisted ; python_version < \"3.14\""] tornado = ["tornado (>=4.3)"] twisted = ["twisted"] zookeeper = ["kazoo"] @@ -247,8 +260,10 @@ zookeeper = ["kazoo"] name = "async-timeout" version = "5.0.1" description = "Timeout context manager for asyncio programs" -optional = false +optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_full_version < \"3.11.3\" and (extra == \"extra-proxy\" or extra == \"proxy\") or python_version <= \"3.10\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -260,18 +275,19 @@ version = "25.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, ] [package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] [[package]] name = "azure-core" @@ -279,6 +295,7 @@ version = "1.33.0" description = "Microsoft Azure Core Library for Python" optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "azure_core-1.33.0-py3-none-any.whl", hash = "sha256:9b5b6d0223a1d38c37500e6971118c1e0f13f54951e6893968b38910bc9cda8f"}, {file = "azure_core-1.33.0.tar.gz", hash = "sha256:f367aa07b5e3005fec2c1e184b882b0b039910733907d001c20fb08ebb8c0eb9"}, @@ -299,6 +316,7 @@ version = "1.21.0" description = "Microsoft Azure Identity Library for Python" optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "azure_identity-1.21.0-py3-none-any.whl", hash = "sha256:258ea6325537352440f71b35c3dffe9d240eae4a5126c1b7ce5efd5766bd9fd9"}, {file = "azure_identity-1.21.0.tar.gz", hash = "sha256:ea22ce6e6b0f429bc1b8d9212d5b9f9877bd4c82f1724bfa910760612c07a9a6"}, @@ -317,6 +335,8 @@ version = "4.9.0" description = "Microsoft Azure Key Vault Secrets Client Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "azure_keyvault_secrets-4.9.0-py3-none-any.whl", hash = "sha256:33c7e2aca2cc2092cebc8c6e96eca36a5cc30c767e16ea429c5fa21270e9fba6"}, {file = "azure_keyvault_secrets-4.9.0.tar.gz", hash = "sha256:2a03bb2ffd9a0d6c8ad1c330d9d0310113985a9de06607ece378fd72a5889fe1"}, @@ -333,6 +353,8 @@ version = "12.26.0" description = "Microsoft Azure Blob Storage Client Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "azure_storage_blob-12.26.0-py3-none-any.whl", hash = "sha256:8c5631b8b22b4f53ec5fff2f3bededf34cfef111e2af613ad42c9e6de00a77fe"}, {file = "azure_storage_blob-12.26.0.tar.gz", hash = "sha256:5dd7d7824224f7de00bfeb032753601c982655173061e242f13be6e26d78d71f"}, @@ -353,6 +375,8 @@ version = "2.17.0" description = "Internationalization utilities" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, @@ -362,7 +386,7 @@ files = [ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} [package.extras] -dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] [[package]] name = "backoff" @@ -370,10 +394,12 @@ version = "2.2.1" description = "Function decoration for backoff and retry" optional = false python-versions = ">=3.7,<4.0" +groups = ["main", "dev"] files = [ {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, ] +markers = {main = "python_version >= \"3.9\" and (extra == \"semantic-router\" or extra == \"proxy\") or extra == \"proxy\""} [[package]] name = "backports-zoneinfo" @@ -381,6 +407,8 @@ version = "0.2.1" description = "Backport of the standard library zoneinfo module" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"proxy\" and python_version < \"3.9\"" files = [ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, @@ -409,6 +437,7 @@ version = "23.12.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, @@ -445,7 +474,7 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +d = ["aiohttp (>=3.7.4) ; sys_platform != \"win32\" or implementation_name != \"pypy\"", "aiohttp (>=3.7.4,!=3.9.0) ; sys_platform == \"win32\" and implementation_name == \"pypy\""] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -455,6 +484,8 @@ version = "1.9.0" description = "Fast, simple object-to-object and broadcast signaling" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, @@ -466,6 +497,8 @@ version = "1.36.0" description = "The AWS SDK for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "boto3-1.36.0-py3-none-any.whl", hash = "sha256:d0ca7a58ce25701a52232cc8df9d87854824f1f2964b929305722ebc7959d5a9"}, {file = "boto3-1.36.0.tar.gz", hash = "sha256:159898f51c2997a12541c0e02d6e5a8fe2993ddb307b9478fd9a339f98b57e00"}, @@ -485,6 +518,8 @@ version = "1.36.26" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "botocore-1.36.26-py3-none-any.whl", hash = "sha256:4e3f19913887a58502e71ef8d696fe7eaa54de7813ff73390cd5883f837dfa6e"}, {file = "botocore-1.36.26.tar.gz", hash = "sha256:4a63bcef7ecf6146fd3a61dc4f9b33b7473b49bdaf1770e9aaca6eee0c9eab62"}, @@ -494,8 +529,8 @@ files = [ jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" urllib3 = [ - {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, + {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, ] [package.extras] @@ -507,6 +542,8 @@ version = "5.5.2" description = "Extensible memoizing collections and decorators" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\"" files = [ {file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"}, {file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"}, @@ -518,6 +555,7 @@ version = "2025.10.5" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, @@ -529,6 +567,7 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -598,16 +637,116 @@ files = [ {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] +markers = {main = "(platform_python_implementation != \"PyPy\" or extra == \"proxy\") and python_version < \"3.14\"", dev = "python_version < \"3.14\" and platform_python_implementation != \"PyPy\"", proxy-dev = "python_version < \"3.14\" and platform_python_implementation != \"PyPy\""} [package.dependencies] pycparser = "*" +[[package]] +name = "cffi" +version = "2.0.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev", "proxy-dev"] +files = [ + {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, + {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, + {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, + {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, + {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, + {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, + {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, + {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, + {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, + {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, + {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, + {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, + {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, + {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, + {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, + {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, + {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, + {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, + {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, + {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, + {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, + {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, +] +markers = {main = "(platform_python_implementation != \"PyPy\" or extra == \"proxy\") and python_version >= \"3.14\"", dev = "python_version >= \"3.14\" and platform_python_implementation != \"PyPy\"", proxy-dev = "python_version >= \"3.14\" and platform_python_implementation != \"PyPy\""} + +[package.dependencies] +pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} + [[package]] name = "charset-normalizer" version = "3.4.4" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, @@ -730,6 +869,7 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -744,6 +884,8 @@ version = "3.1.2" description = "Pickler class to extend the standard pickle.Pickler functionality" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a"}, {file = "cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414"}, @@ -755,6 +897,8 @@ version = "4.57" description = "Python SDK for the Cohere API" optional = true python-versions = ">=3.8,<4.0" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"semantic-router\"" files = [ {file = "cohere-4.57-py3-none-any.whl", hash = "sha256:479bdea81ae119e53f671f1ae808fcff9df88211780525d7ef2f7b99dfb32e59"}, {file = "cohere-4.57.tar.gz", hash = "sha256:71ace0204a92d1a2a8d4b949b88b353b4f22fc645486851924284cc5a0eb700d"}, @@ -774,10 +918,12 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "platform_system == \"Windows\" or sys_platform == \"win32\" and (extra == \"utils\" or extra == \"semantic-router\") and python_version >= \"3.9\" or sys_platform == \"win32\" and extra == \"utils\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\"", proxy-dev = "platform_system == \"Windows\""} [[package]] name = "coloredlogs" @@ -785,6 +931,8 @@ version = "15.0.1" description = "Colored terminal output for Python's logging module" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, @@ -802,6 +950,8 @@ version = "6.10.1" description = "Add colours to the output of Python's logging module." optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"semantic-router\"" files = [ {file = "colorlog-6.10.1-py3-none-any.whl", hash = "sha256:2d7e8348291948af66122cff006c9f8da6255d224e7cf8e37d8de2df3bad8c9c"}, {file = "colorlog-6.10.1.tar.gz", hash = "sha256:eb4ae5cb65fe7fec7773c2306061a8e63e02efc2c72eba9d27b0fa23c94f1321"}, @@ -819,6 +969,8 @@ version = "1.3.2" description = "Python library for calculating contours of 2D quadrilateral grids" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934"}, {file = "contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989"}, @@ -895,6 +1047,7 @@ version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, @@ -944,6 +1097,8 @@ version = "0.12.1" description = "Composable style cycles" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -959,6 +1114,8 @@ version = "0.73.0" description = "Databricks SDK for Python (Beta)" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "databricks_sdk-0.73.0-py3-none-any.whl", hash = "sha256:a4d3cfd19357a2b459d2dc3101454d7f0d1b62865ce099c35d0c342b66ac64ff"}, {file = "databricks_sdk-0.73.0.tar.gz", hash = "sha256:db09eaaacd98e07dded78d3e7ab47d2f6c886e0380cb577977bd442bace8bd8d"}, @@ -970,9 +1127,9 @@ protobuf = ">=4.25.8,<5.26.dev0 || >5.29.0,<5.29.1 || >5.29.1,<5.29.2 || >5.29.2 requests = ">=2.28.1,<3" [package.extras] -dev = ["autoflake", "black", "build", "databricks-connect", "httpx", "ipython", "ipywidgets", "isort", "langchain-openai", "openai", "pycodestyle", "pyfakefs", "pytest", "pytest-cov", "pytest-mock", "pytest-rerunfailures", "pytest-xdist (>=3.6.1,<4.0)", "requests-mock", "wheel"] +dev = ["autoflake", "black", "build", "databricks-connect", "httpx", "ipython", "ipywidgets", "isort", "langchain-openai ; python_version > \"3.7\"", "openai", "pycodestyle", "pyfakefs", "pytest", "pytest-cov", "pytest-mock", "pytest-rerunfailures", "pytest-xdist (>=3.6.1,<4.0)", "requests-mock", "wheel"] notebook = ["ipython (>=8,<10)", "ipywidgets (>=8,<9)"] -openai = ["httpx", "langchain-openai", "openai"] +openai = ["httpx", "langchain-openai ; python_version > \"3.7\"", "openai"] [[package]] name = "deprecated" @@ -980,16 +1137,18 @@ version = "1.3.1" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f"}, {file = "deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223"}, ] +markers = {main = "python_version >= \"3.10\""} [package.dependencies] wrapt = ">=1.10,<3" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] [[package]] name = "diskcache" @@ -997,6 +1156,8 @@ version = "5.6.3" description = "Disk Cache -- Disk and file backed persistent cache." optional = true python-versions = ">=3" +groups = ["main"] +markers = "extra == \"caching\"" files = [ {file = "diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19"}, {file = "diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc"}, @@ -1008,6 +1169,7 @@ version = "1.9.0" description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -1019,6 +1181,8 @@ version = "2.6.1" description = "DNS toolkit" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, @@ -1039,6 +1203,8 @@ version = "7.1.0" description = "A Python library for the Docker Engine API." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0"}, {file = "docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c"}, @@ -1061,6 +1227,8 @@ version = "0.20.1" description = "Docutils -- Python Documentation Utilities" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, @@ -1072,6 +1240,8 @@ version = "2.3.0" description = "A robust email address syntax and deliverability validation library." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4"}, {file = "email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426"}, @@ -1087,6 +1257,8 @@ version = "1.3.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] +markers = "python_version <= \"3.10\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, @@ -1104,10 +1276,12 @@ version = "0.121.0" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "fastapi-0.121.0-py3-none-any.whl", hash = "sha256:8bdf1b15a55f4e4b0d6201033da9109ea15632cb76cf156e7b8b4019f2172106"}, {file = "fastapi-0.121.0.tar.gz", hash = "sha256:06663356a0b1ee93e875bbf05a31fb22314f5bed455afaaad2b2dad7f26e98fa"}, ] +markers = {main = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\""} [package.dependencies] annotated-doc = ">=0.0.2" @@ -1126,6 +1300,7 @@ version = "1.7.5" description = "FastAPI without reliance on CDNs for docs" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "fastapi_offline-1.7.5-py3-none-any.whl", hash = "sha256:00369632d604e8156b9ca9ab9c65e58ad8beff83d1ffc7bdbcec4a86173d51b4"}, {file = "fastapi_offline-1.7.5.tar.gz", hash = "sha256:07a58cb8d8fab68ba625698414b4cac833bb2d94d82dc0fbc2a8519bee7af87d"}, @@ -1143,6 +1318,8 @@ version = "0.16.0" description = "FastAPI plugin to enable SSO to most common providers (such as Facebook login, Google login and login via Microsoft Office 365 Account)" optional = true python-versions = "<4.0,>=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "fastapi_sso-0.16.0-py3-none-any.whl", hash = "sha256:3a66a942474ef9756d3a9d8b945d55bd9faf99781facdb9b87a40b73d6d6b0c3"}, {file = "fastapi_sso-0.16.0.tar.gz", hash = "sha256:f3941f986347566b7d3747c710cf474a907f581bfb6697ff3bb3e44eb76b438c"}, @@ -1161,6 +1338,8 @@ version = "1.12.1" description = "Fast read/write of AVRO files" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"semantic-router\"" files = [ {file = "fastavro-1.12.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:00650ca533907361edda22e6ffe8cf87ab2091c5d8aee5c8000b0f2dcdda7ed3"}, {file = "fastavro-1.12.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac76d6d95f909c72ee70d314b460b7e711d928845771531d823eb96a10952d26"}, @@ -1222,6 +1401,7 @@ version = "0.14.0" description = "Python bindings to Rust's UUID library." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "fastuuid-0.14.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a"}, {file = "fastuuid-0.14.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00"}, @@ -1309,6 +1489,7 @@ version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, @@ -1317,7 +1498,7 @@ files = [ [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] -typing = ["typing-extensions (>=4.12.2)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] [[package]] name = "flake8" @@ -1325,6 +1506,7 @@ version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" +groups = ["dev"] files = [ {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, @@ -1341,6 +1523,8 @@ version = "3.1.2" description = "A simple framework for building complex web applications." optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "flask-3.1.2-py3-none-any.whl", hash = "sha256:ca1d8112ec8a6158cc29ea4858963350011b5c846a414cdb7a954aa9e967d03c"}, {file = "flask-3.1.2.tar.gz", hash = "sha256:bf656c15c80190ed628ad08cdfd3aaa35beb087855e2f494910aa3774cc4fd87"}, @@ -1364,6 +1548,8 @@ version = "6.0.1" description = "A Flask extension simplifying CORS support" optional = true python-versions = "<4.0,>=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "flask_cors-6.0.1-py3-none-any.whl", hash = "sha256:c7b2cbfb1a31aa0d2e5341eea03a6805349f7a61647daee1a15c46bbe981494c"}, {file = "flask_cors-6.0.1.tar.gz", hash = "sha256:d81bcb31f07b0985be7f48406247e9243aced229b7747219160a0559edd678db"}, @@ -1379,6 +1565,8 @@ version = "4.60.1" description = "Tools to manipulate font files" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9a52f254ce051e196b8fe2af4634c2d2f02c981756c6464dc192f1b6050b4e28"}, {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7420a2696a44650120cdd269a5d2e56a477e2bfa9d95e86229059beb1c19e15"}, @@ -1441,17 +1629,17 @@ files = [ ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "pycairo", "scipy"] +interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] -type1 = ["xattr"] -unicode = ["unicodedata2 (>=15.1.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +type1 = ["xattr ; sys_platform == \"darwin\""] +unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""] +woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] [[package]] name = "frozenlist" @@ -1459,6 +1647,7 @@ version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -1560,6 +1749,7 @@ version = "2025.3.0" description = "File-system specification" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "fsspec-2025.3.0-py3-none-any.whl", hash = "sha256:efb87af3efa9103f94ca91a7f8cb7a4df91af9f74fc106c9c7ea0efd7277c1b3"}, {file = "fsspec-2025.3.0.tar.gz", hash = "sha256:a935fd1ea872591f2b5148907d103488fc523295e6c64b835cfad8c3eca44972"}, @@ -1599,6 +1789,8 @@ version = "4.0.12" description = "Git Object Database" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"}, {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"}, @@ -1613,6 +1805,8 @@ version = "3.1.45" description = "GitPython is a Python library used to interact with Git repositories" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77"}, {file = "gitpython-3.1.45.tar.gz", hash = "sha256:85b0ee964ceddf211c41b9f27a49086010a190fd8132a24e21f362a4b36a791c"}, @@ -1623,7 +1817,7 @@ gitdb = ">=4.0.1,<5" [package.extras] doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"] -test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions ; python_version < \"3.11\""] [[package]] name = "google-api-core" @@ -1631,6 +1825,8 @@ version = "2.25.2" description = "Google API client core library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version >= \"3.14\" and extra == \"extra-proxy\"" files = [ {file = "google_api_core-2.25.2-py3-none-any.whl", hash = "sha256:e9a8f62d363dc8424a8497f4c2a47d6bcda6c16514c935629c257ab5d10210e7"}, {file = "google_api_core-2.25.2.tar.gz", hash = "sha256:1c63aa6af0d0d5e37966f157a77f9396d820fba59f9e43e9415bc3dc5baff300"}, @@ -1647,7 +1843,7 @@ requests = ">=2.18.0,<3.0.0" [package.extras] async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.0)"] -grpc = ["grpcio (>=1.33.2,<2.0.0)", "grpcio (>=1.49.1,<2.0.0)", "grpcio-status (>=1.33.2,<2.0.0)", "grpcio-status (>=1.49.1,<2.0.0)"] +grpc = ["grpcio (>=1.33.2,<2.0.0)", "grpcio (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0.0)", "grpcio-status (>=1.49.1,<2.0.0) ; python_version >= \"3.11\""] grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.0)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.0)"] @@ -1657,6 +1853,8 @@ version = "2.28.1" description = "Google API client core library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version < \"3.14\" and extra == \"extra-proxy\"" files = [ {file = "google_api_core-2.28.1-py3-none-any.whl", hash = "sha256:4021b0f8ceb77a6fb4de6fde4502cecab45062e66ff4f2895169e0b35bc9466c"}, {file = "google_api_core-2.28.1.tar.gz", hash = "sha256:2b405df02d68e68ce0fbc138559e6036559e685159d148ae5861013dc201baf8"}, @@ -1666,15 +1864,15 @@ files = [ google-auth = ">=2.14.1,<3.0.0" googleapis-common-protos = ">=1.56.2,<2.0.0" grpcio = [ + {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, {version = ">=1.33.2,<2.0.0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, - {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\" and python_version < \"3.14\""}, ] grpcio-status = [ - {version = ">=1.33.2,<2.0.0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, - {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\" and python_version < \"3.14\""}, + {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0.0", optional = true, markers = "extra == \"grpc\""}, ] proto-plus = [ - {version = ">=1.22.3,<2.0.0", markers = "python_version < \"3.13\""}, + {version = ">=1.22.3,<2.0.0"}, {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""}, ] protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" @@ -1682,7 +1880,7 @@ requests = ">=2.18.0,<3.0.0" [package.extras] async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.0)"] -grpc = ["grpcio (>=1.33.2,<2.0.0)", "grpcio (>=1.49.1,<2.0.0)", "grpcio (>=1.75.1,<2.0.0)", "grpcio-status (>=1.33.2,<2.0.0)", "grpcio-status (>=1.49.1,<2.0.0)", "grpcio-status (>=1.75.1,<2.0.0)"] +grpc = ["grpcio (>=1.33.2,<2.0.0)", "grpcio (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio (>=1.75.1,<2.0.0) ; python_version >= \"3.14\"", "grpcio-status (>=1.33.2,<2.0.0)", "grpcio-status (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio-status (>=1.75.1,<2.0.0) ; python_version >= \"3.14\""] grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.0)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.0)"] @@ -1692,6 +1890,8 @@ version = "2.43.0" description = "Google Authentication Library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\"" files = [ {file = "google_auth-2.43.0-py2.py3-none-any.whl", hash = "sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16"}, {file = "google_auth-2.43.0.tar.gz", hash = "sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483"}, @@ -1705,37 +1905,21 @@ rsa = ">=3.1.4,<5" [package.extras] aiohttp = ["aiohttp (>=3.6.2,<4.0.0)", "requests (>=2.20.0,<3.0.0)"] enterprise-cert = ["cryptography", "pyopenssl"] -pyjwt = ["cryptography (<39.0.0)", "cryptography (>=38.0.3)", "pyjwt (>=2.0)"] -pyopenssl = ["cryptography (<39.0.0)", "cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +pyjwt = ["cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "pyjwt (>=2.0)"] +pyopenssl = ["cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0)"] -testing = ["aiohttp (<3.10.0)", "aiohttp (>=3.6.2,<4.0.0)", "aioresponses", "cryptography (<39.0.0)", "cryptography (<39.0.0)", "cryptography (>=38.0.3)", "cryptography (>=38.0.3)", "flask", "freezegun", "grpcio", "mock", "oauth2client", "packaging", "pyjwt (>=2.0)", "pyopenssl (<24.3.0)", "pyopenssl (>=20.0.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-localserver", "pyu2f (>=0.1.5)", "requests (>=2.20.0,<3.0.0)", "responses", "urllib3"] +testing = ["aiohttp (<3.10.0)", "aiohttp (>=3.6.2,<4.0.0)", "aioresponses", "cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "cryptography (>=38.0.3)", "flask", "freezegun", "grpcio", "mock", "oauth2client", "packaging", "pyjwt (>=2.0)", "pyopenssl (<24.3.0)", "pyopenssl (>=20.0.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-localserver", "pyu2f (>=0.1.5)", "requests (>=2.20.0,<3.0.0)", "responses", "urllib3"] urllib3 = ["packaging", "urllib3"] -[[package]] -name = "google-cloud-iam" -version = "2.19.1" -description = "Google Cloud Iam API client library" -optional = true -python-versions = ">=3.7" -files = [ - {file = "google_cloud_iam-2.19.1-py3-none-any.whl", hash = "sha256:11b08b86d82510021f9dd9f0beb5a08219e070deab09e28d4c0ce49f8c70997d"}, - {file = "google_cloud_iam-2.19.1.tar.gz", hash = "sha256:f059c369ad98af6be3401f0f5d087775d775fb96833be1e9ab8048c422fb1bf4"}, -] - -[package.dependencies] -google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0", extras = ["grpc"]} -google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0" -grpc-google-iam-v1 = ">=0.12.4,<1.0.0" -proto-plus = {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""} -protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" - [[package]] name = "google-cloud-iam" version = "2.20.0" description = "Google Cloud Iam API client library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "google_cloud_iam-2.20.0-py3-none-any.whl", hash = "sha256:643fcf6db3100772f222c7173bc1af15541a05ec1c43785191e835146ed150b8"}, {file = "google_cloud_iam-2.20.0.tar.gz", hash = "sha256:06568ed8313f59fac46d21a5aae4c54eb1dda9f6bcecf2736c58ab1065dc9173"}, @@ -1745,9 +1929,12 @@ files = [ google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0", extras = ["grpc"]} google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0" grpc-google-iam-v1 = ">=0.12.4,<1.0.0" -grpcio = {version = ">=1.33.2,<2.0.0", markers = "python_version < \"3.14\""} +grpcio = [ + {version = ">=1.33.2,<2.0.0"}, + {version = ">=1.75.1,<2.0.0", markers = "python_version >= \"3.14\""}, +] proto-plus = [ - {version = ">=1.22.3,<2.0.0", markers = "python_version < \"3.13\""}, + {version = ">=1.22.3,<2.0.0"}, {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""}, ] protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" @@ -1758,6 +1945,8 @@ version = "2.24.2" description = "Google Cloud Kms API client library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "google_cloud_kms-2.24.2-py2.py3-none-any.whl", hash = "sha256:368209b035dfac691a467c1cf50986d8b1b26cac1166bdfbaa25d738df91ff7b"}, {file = "google_cloud_kms-2.24.2.tar.gz", hash = "sha256:e9e18bbfafd1a4035c76c03fb5ff03f4f57f596d08e1a9ede7e69ec0151b27a1"}, @@ -1776,10 +1965,12 @@ version = "1.72.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "googleapis_common_protos-1.72.0-py3-none-any.whl", hash = "sha256:4299c5a82d5ae1a9702ada957347726b167f9f8d1fc352477702a1e851ff4038"}, {file = "googleapis_common_protos-1.72.0.tar.gz", hash = "sha256:e55a601c1b32b52d7a3e65f43563e2aa61bcd737998ee672ac9b951cd49319f5"}, ] +markers = {main = "extra == \"extra-proxy\""} [package.dependencies] grpcio = {version = ">=1.44.0,<2.0.0", optional = true, markers = "extra == \"grpc\""} @@ -1794,6 +1985,8 @@ version = "3.4.3" description = "GraphQL Framework for Python" optional = true python-versions = "*" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "graphene-3.4.3-py2.py3-none-any.whl", hash = "sha256:820db6289754c181007a150db1f7fff544b94142b556d12e3ebc777a7bf36c71"}, {file = "graphene-3.4.3.tar.gz", hash = "sha256:2a3786948ce75fe7e078443d37f609cbe5bb36ad8d6b828740ad3b95ed1a0aaa"}, @@ -1815,6 +2008,8 @@ version = "3.2.7" description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." optional = true python-versions = "<4,>=3.7" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "graphql_core-3.2.7-py3-none-any.whl", hash = "sha256:17fc8f3ca4a42913d8e24d9ac9f08deddf0a0b2483076575757f6c412ead2ec0"}, {file = "graphql_core-3.2.7.tar.gz", hash = "sha256:27b6904bdd3b43f2a0556dad5d579bdfdeab1f38e8e8788e555bdcb586a6f62c"}, @@ -1826,6 +2021,8 @@ version = "3.2.0" description = "Relay library for graphql-core" optional = true python-versions = ">=3.6,<4" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "graphql-relay-3.2.0.tar.gz", hash = "sha256:1ff1c51298356e481a0be009ccdff249832ce53f30559c1338f22a0e0d17250c"}, {file = "graphql_relay-3.2.0-py3-none-any.whl", hash = "sha256:c9b22bd28b170ba1fe674c74384a8ff30a76c8e26f88ac3aa1584dd3179953e5"}, @@ -1840,6 +2037,8 @@ version = "3.2.4" description = "Lightweight in-process concurrent programming" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\") and extra == \"mlflow\"" files = [ {file = "greenlet-3.2.4-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:8c68325b0d0acf8d91dde4e6f930967dd52a5302cd4062932a6b2e7c2969f47c"}, {file = "greenlet-3.2.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:94385f101946790ae13da500603491f04a76b6e4c059dab271b3ce2e283b2590"}, @@ -1849,6 +2048,8 @@ files = [ {file = "greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d"}, {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5"}, {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f"}, + {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7"}, + {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8"}, {file = "greenlet-3.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c"}, {file = "greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2"}, {file = "greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246"}, @@ -1858,6 +2059,8 @@ files = [ {file = "greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8"}, {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52"}, {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa"}, + {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c"}, + {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5"}, {file = "greenlet-3.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9"}, {file = "greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd"}, {file = "greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb"}, @@ -1867,6 +2070,8 @@ files = [ {file = "greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0"}, {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0"}, {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f"}, + {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0"}, + {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d"}, {file = "greenlet-3.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02"}, {file = "greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31"}, {file = "greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945"}, @@ -1876,6 +2081,8 @@ files = [ {file = "greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671"}, {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b"}, {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae"}, + {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b"}, + {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929"}, {file = "greenlet-3.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b"}, {file = "greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0"}, {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f"}, @@ -1883,6 +2090,8 @@ files = [ {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1"}, {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735"}, {file = "greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337"}, + {file = "greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269"}, + {file = "greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681"}, {file = "greenlet-3.2.4-cp314-cp314-win_amd64.whl", hash = "sha256:e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01"}, {file = "greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c"}, {file = "greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d"}, @@ -1892,6 +2101,8 @@ files = [ {file = "greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df"}, {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594"}, {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98"}, + {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10"}, + {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be"}, {file = "greenlet-3.2.4-cp39-cp39-win32.whl", hash = "sha256:65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b"}, {file = "greenlet-3.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb"}, {file = "greenlet-3.2.4.tar.gz", hash = "sha256:0dca0d95ff849f9a364385f36ab49f50065d76964944638be9691e1832e9f86d"}, @@ -1907,6 +2118,8 @@ version = "0.14.3" description = "IAM API client library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "grpc_google_iam_v1-0.14.3-py3-none-any.whl", hash = "sha256:7a7f697e017a067206a3dfef44e4c634a34d3dee135fe7d7a4613fe3e59217e6"}, {file = "grpc_google_iam_v1-0.14.3.tar.gz", hash = "sha256:879ac4ef33136c5491a6300e27575a9ec760f6cdf9a2518798c1b8977a5dc389"}, @@ -1923,6 +2136,7 @@ version = "1.70.0" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "grpcio-1.70.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:95469d1977429f45fe7df441f586521361e235982a0b39e33841549143ae2851"}, {file = "grpcio-1.70.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:ed9718f17fbdb472e33b869c77a16d0b55e166b100ec57b016dc7de9c8d236bf"}, @@ -1980,16 +2194,97 @@ files = [ {file = "grpcio-1.70.0-cp39-cp39-win_amd64.whl", hash = "sha256:a31d7e3b529c94e930a117b2175b2efd179d96eb3c7a21ccb0289a8ab05b645c"}, {file = "grpcio-1.70.0.tar.gz", hash = "sha256:8d1584a68d5922330025881e63a6c1b54cc8117291d382e4fa69339b6d914c56"}, ] +markers = {main = "python_version < \"3.14\" and extra == \"extra-proxy\"", dev = "python_version < \"3.14\"", proxy-dev = "python_version < \"3.14\""} [package.extras] protobuf = ["grpcio-tools (>=1.70.0)"] +[[package]] +name = "grpcio" +version = "1.76.0" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev", "proxy-dev"] +files = [ + {file = "grpcio-1.76.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc"}, + {file = "grpcio-1.76.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde"}, + {file = "grpcio-1.76.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3"}, + {file = "grpcio-1.76.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990"}, + {file = "grpcio-1.76.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af"}, + {file = "grpcio-1.76.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2"}, + {file = "grpcio-1.76.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6"}, + {file = "grpcio-1.76.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3"}, + {file = "grpcio-1.76.0-cp310-cp310-win32.whl", hash = "sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b"}, + {file = "grpcio-1.76.0-cp310-cp310-win_amd64.whl", hash = "sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b"}, + {file = "grpcio-1.76.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a"}, + {file = "grpcio-1.76.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c"}, + {file = "grpcio-1.76.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465"}, + {file = "grpcio-1.76.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48"}, + {file = "grpcio-1.76.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da"}, + {file = "grpcio-1.76.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397"}, + {file = "grpcio-1.76.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749"}, + {file = "grpcio-1.76.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00"}, + {file = "grpcio-1.76.0-cp311-cp311-win32.whl", hash = "sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054"}, + {file = "grpcio-1.76.0-cp311-cp311-win_amd64.whl", hash = "sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d"}, + {file = "grpcio-1.76.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8"}, + {file = "grpcio-1.76.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280"}, + {file = "grpcio-1.76.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4"}, + {file = "grpcio-1.76.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11"}, + {file = "grpcio-1.76.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6"}, + {file = "grpcio-1.76.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8"}, + {file = "grpcio-1.76.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980"}, + {file = "grpcio-1.76.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882"}, + {file = "grpcio-1.76.0-cp312-cp312-win32.whl", hash = "sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958"}, + {file = "grpcio-1.76.0-cp312-cp312-win_amd64.whl", hash = "sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347"}, + {file = "grpcio-1.76.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2"}, + {file = "grpcio-1.76.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468"}, + {file = "grpcio-1.76.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3"}, + {file = "grpcio-1.76.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb"}, + {file = "grpcio-1.76.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae"}, + {file = "grpcio-1.76.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77"}, + {file = "grpcio-1.76.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03"}, + {file = "grpcio-1.76.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42"}, + {file = "grpcio-1.76.0-cp313-cp313-win32.whl", hash = "sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f"}, + {file = "grpcio-1.76.0-cp313-cp313-win_amd64.whl", hash = "sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8"}, + {file = "grpcio-1.76.0-cp314-cp314-linux_armv7l.whl", hash = "sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62"}, + {file = "grpcio-1.76.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd"}, + {file = "grpcio-1.76.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc"}, + {file = "grpcio-1.76.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a"}, + {file = "grpcio-1.76.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba"}, + {file = "grpcio-1.76.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09"}, + {file = "grpcio-1.76.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc"}, + {file = "grpcio-1.76.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc"}, + {file = "grpcio-1.76.0-cp314-cp314-win32.whl", hash = "sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e"}, + {file = "grpcio-1.76.0-cp314-cp314-win_amd64.whl", hash = "sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e"}, + {file = "grpcio-1.76.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783"}, + {file = "grpcio-1.76.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d"}, + {file = "grpcio-1.76.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd"}, + {file = "grpcio-1.76.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378"}, + {file = "grpcio-1.76.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70"}, + {file = "grpcio-1.76.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416"}, + {file = "grpcio-1.76.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c"}, + {file = "grpcio-1.76.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886"}, + {file = "grpcio-1.76.0-cp39-cp39-win32.whl", hash = "sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f"}, + {file = "grpcio-1.76.0-cp39-cp39-win_amd64.whl", hash = "sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a"}, + {file = "grpcio-1.76.0.tar.gz", hash = "sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73"}, +] +markers = {main = "python_version >= \"3.14\" and extra == \"extra-proxy\"", dev = "python_version >= \"3.14\"", proxy-dev = "python_version >= \"3.14\""} + +[package.dependencies] +typing-extensions = ">=4.12,<5.0" + +[package.extras] +protobuf = ["grpcio-tools (>=1.76.0)"] + [[package]] name = "grpcio-status" version = "1.62.3" description = "Status proto mapping for gRPC" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "grpcio-status-1.62.3.tar.gz", hash = "sha256:289bdd7b2459794a12cf95dc0cb727bd4a1742c37bd823f760236c937e53a485"}, {file = "grpcio_status-1.62.3-py3-none-any.whl", hash = "sha256:f9049b762ba8de6b1086789d8315846e094edac2c50beaf462338b301a8fd4b8"}, @@ -2006,6 +2301,8 @@ version = "23.0.0" description = "WSGI HTTP Server for UNIX" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "platform_system != \"Windows\" and (extra == \"mlflow\" or extra == \"proxy\") and python_version >= \"3.10\" or extra == \"proxy\"" files = [ {file = "gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d"}, {file = "gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec"}, @@ -2027,6 +2324,7 @@ version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, @@ -2038,6 +2336,7 @@ version = "4.1.0" description = "HTTP/2 State-Machine based protocol implementation" optional = false python-versions = ">=3.6.1" +groups = ["proxy-dev"] files = [ {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, @@ -2053,6 +2352,8 @@ version = "1.2.0" description = "Fast transfer of large files with the Hugging Face Hub." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"arm64\" or platform_machine == \"aarch64\"" files = [ {file = "hf_xet-1.2.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:ceeefcd1b7aed4956ae8499e2199607765fbd1c60510752003b6cc0b8413b649"}, {file = "hf_xet-1.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b70218dd548e9840224df5638fdc94bd033552963cfa97f9170829381179c813"}, @@ -2087,6 +2388,7 @@ version = "4.0.0" description = "Pure-Python HPACK header compression" optional = false python-versions = ">=3.6.1" +groups = ["proxy-dev"] files = [ {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, @@ -2098,6 +2400,7 @@ version = "1.0.9" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, @@ -2119,6 +2422,7 @@ version = "0.28.1" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, @@ -2131,7 +2435,7 @@ httpcore = "==1.*" idna = "*" [package.extras] -brotli = ["brotli", "brotlicffi"] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -2143,6 +2447,8 @@ version = "0.4.3" description = "Consume Server-Sent Event (SSE) messages with HTTPX." optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc"}, {file = "httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d"}, @@ -2154,6 +2460,8 @@ version = "2.5.4" description = "huey, a little task queue" optional = true python-versions = "*" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "huey-2.5.4-py3-none-any.whl", hash = "sha256:0eac1fb2711f6366a1db003629354a0cea470a3db720d5bab0d140c28e993f9c"}, {file = "huey-2.5.4.tar.gz", hash = "sha256:4b7fb217b640fbb46efc4f4681b446b40726593522f093e8ef27c4a8fcb6cfbb"}, @@ -2169,6 +2477,7 @@ version = "0.36.0" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" +groups = ["main"] files = [ {file = "huggingface_hub-0.36.0-py3-none-any.whl", hash = "sha256:7bcc9ad17d5b3f07b57c78e79d527102d08313caa278a641993acddcb894548d"}, {file = "huggingface_hub-0.36.0.tar.gz", hash = "sha256:47b3f0e2539c39bf5cde015d63b72ec49baff67b6931c3d97f3f84532e2b8d25"}, @@ -2185,16 +2494,16 @@ tqdm = ">=4.42.1" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "authlib (>=1.3.2)", "fastapi", "gradio (>=4.0.0)", "httpx", "itsdangerous", "jedi", "libcst (>=1.4.0)", "mypy (==1.15.0)", "mypy (>=1.14.1,<1.15.0)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "ty", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "authlib (>=1.3.2)", "fastapi", "gradio (>=4.0.0)", "httpx", "itsdangerous", "jedi", "libcst (>=1.4.0)", "mypy (==1.15.0) ; python_version >= \"3.9\"", "mypy (>=1.14.1,<1.15.0) ; python_version == \"3.8\"", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "ty", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "authlib (>=1.3.2)", "fastapi", "gradio (>=4.0.0)", "httpx", "itsdangerous", "jedi", "libcst (>=1.4.0)", "mypy (==1.15.0)", "mypy (>=1.14.1,<1.15.0)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "ty", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "authlib (>=1.3.2)", "fastapi", "gradio (>=4.0.0)", "httpx", "itsdangerous", "jedi", "libcst (>=1.4.0)", "mypy (==1.15.0) ; python_version >= \"3.9\"", "mypy (>=1.14.1,<1.15.0) ; python_version == \"3.8\"", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "ty", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] hf-transfer = ["hf-transfer (>=0.1.4)"] hf-xet = ["hf-xet (>=1.1.2,<2.0.0)"] inference = ["aiohttp"] mcp = ["aiohttp", "mcp (>=1.8.0)", "typer"] oauth = ["authlib (>=1.3.2)", "fastapi", "httpx", "itsdangerous"] -quality = ["libcst (>=1.4.0)", "mypy (==1.15.0)", "mypy (>=1.14.1,<1.15.0)", "ruff (>=0.9.0)", "ty"] +quality = ["libcst (>=1.4.0)", "mypy (==1.15.0) ; python_version >= \"3.9\"", "mypy (>=1.14.1,<1.15.0) ; python_version == \"3.8\"", "ruff (>=0.9.0)", "ty"] tensorflow = ["graphviz", "pydot", "tensorflow"] tensorflow-testing = ["keras (<3.0)", "tensorflow"] testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "authlib (>=1.3.2)", "fastapi", "gradio (>=4.0.0)", "httpx", "itsdangerous", "jedi", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] @@ -2207,6 +2516,8 @@ version = "10.0" description = "Human friendly output for text interfaces using Python" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, @@ -2221,6 +2532,7 @@ version = "0.15.0" description = "A ASGI Server based on Hyper libraries and inspired by Gunicorn" optional = false python-versions = ">=3.7" +groups = ["proxy-dev"] files = [ {file = "hypercorn-0.15.0-py3-none-any.whl", hash = "sha256:5008944999612fd188d7a1ca02e89d20065642b89503020ac392dfed11840730"}, {file = "hypercorn-0.15.0.tar.gz", hash = "sha256:d517f68d5dc7afa9a9d50ecefb0f769f466ebe8c1c18d2c2f447a24e763c9a63"}, @@ -2238,7 +2550,7 @@ wsproto = ">=0.14.0" docs = ["pydata_sphinx_theme", "sphinxcontrib_mermaid"] h3 = ["aioquic (>=0.9.0,<1.0)"] trio = ["exceptiongroup (>=1.1.0)", "trio (>=0.22.0)"] -uvloop = ["uvloop"] +uvloop = ["uvloop ; platform_system != \"Windows\""] [[package]] name = "hyperframe" @@ -2246,6 +2558,7 @@ version = "6.0.1" description = "HTTP/2 framing layer for Python" optional = false python-versions = ">=3.6.1" +groups = ["proxy-dev"] files = [ {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, @@ -2257,6 +2570,7 @@ version = "3.11" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, @@ -2271,6 +2585,8 @@ version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, @@ -2282,6 +2598,7 @@ version = "6.11.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"}, {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"}, @@ -2293,7 +2610,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +testing = ["flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "importlib-resources" @@ -2301,6 +2618,8 @@ version = "6.4.5" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version < \"3.9\"" files = [ {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"}, {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"}, @@ -2310,7 +2629,7 @@ files = [ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] @@ -2323,6 +2642,7 @@ version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, @@ -2334,6 +2654,8 @@ version = "0.7.2" description = "An ISO 8601 date/time/duration parser and formatter" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\" or extra == \"proxy\"" files = [ {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, @@ -2345,6 +2667,8 @@ version = "2.2.0" description = "Safely pass data to untrusted environments and back." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, @@ -2356,6 +2680,7 @@ version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["main", "proxy-dev"] files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, @@ -2373,6 +2698,7 @@ version = "0.9.1" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jiter-0.9.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c0163baa7ee85860fdc14cc39263014500df901eeffdf94c1eab9a2d713b2a9d"}, {file = "jiter-0.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:514d4dd845e0af4da15112502e6fcb952f0721f27f17e530454e379472b90c14"}, @@ -2458,6 +2784,8 @@ version = "1.0.1" description = "JSON Matching Expressions" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, @@ -2469,6 +2797,8 @@ version = "1.5.2" description = "Lightweight pipelining with Python functions" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241"}, {file = "joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55"}, @@ -2480,6 +2810,7 @@ version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, @@ -2503,6 +2834,7 @@ version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, @@ -2518,6 +2850,8 @@ version = "1.4.9" description = "A fast implementation of the Cassowary constraint solver" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b4b4d74bda2b8ebf4da5bd42af11d02d04428b2c32846e4c2c93219df8a7987b"}, {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fb3b8132019ea572f4611d770991000d7f58127560c4889729248eb5852a102f"}, @@ -2628,6 +2962,7 @@ version = "2.54.1" description = "A client library for accessing langfuse" optional = false python-versions = "<4.0,>=3.8.1" +groups = ["dev"] files = [ {file = "langfuse-2.54.1-py3-none-any.whl", hash = "sha256:1f1261cf763886758c70e192133340ff296169cc0930cde725eee52d467eb661"}, {file = "langfuse-2.54.1.tar.gz", hash = "sha256:7efc70799740ffa0ac7e04066e0596fb6433e8e501fc850c6a4e7967de6de8a7"}, @@ -2653,6 +2988,8 @@ version = "0.1.20" description = "Package for LiteLLM Enterprise features" optional = true python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "litellm_enterprise-0.1.20-py3-none-any.whl", hash = "sha256:744a79956a8cd7748ef4c3f40d5a564c61519834e706beafbc0b931162773ae8"}, {file = "litellm_enterprise-0.1.20.tar.gz", hash = "sha256:f6b8dd75b53bd835c68caf6402a8bae744a150db7bb6b0e617178c6056ac6c01"}, @@ -2660,13 +2997,15 @@ files = [ [[package]] name = "litellm-proxy-extras" -version = "0.4.3" +version = "0.4.4" description = "Additional files for the LiteLLM Proxy. Reduces the size of the main litellm package." optional = true python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ - {file = "litellm_proxy_extras-0.4.3-py3-none-any.whl", hash = "sha256:e7ab09aa78d04d02dc48975620defa36784e1a0baa6d04a078b98b5717fcae24"}, - {file = "litellm_proxy_extras-0.4.3.tar.gz", hash = "sha256:420400d0db186319695526f6765d3d481206fe025b70bc74a1ce895a7d720bee"}, + {file = "litellm_proxy_extras-0.4.4-py3-none-any.whl", hash = "sha256:73584acaf77de9be448a7ace38dcec92ea2da7dd9e4bb37f455e5c5fdf8eb1ab"}, + {file = "litellm_proxy_extras-0.4.4.tar.gz", hash = "sha256:2c1b02d18ddf93a1b9f3a3c13d30952925ee319bfba59c8c2ca12f9b78bf93f5"}, ] [[package]] @@ -2675,6 +3014,8 @@ version = "1.3.10" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "mako-1.3.10-py3-none-any.whl", hash = "sha256:baef24a52fc4fc514a0887ac600f9f1cff3d82c61d4d700a1fa84d597b88db59"}, {file = "mako-1.3.10.tar.gz", hash = "sha256:99579a6f39583fa7e5630a28c3c1f440e4e97a414b80372649c0ce338da2ea28"}, @@ -2694,6 +3035,8 @@ version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -2718,6 +3061,7 @@ version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" +groups = ["main", "proxy-dev"] files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, @@ -2787,6 +3131,8 @@ version = "3.10.7" description = "Python plotting package" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "matplotlib-3.10.7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7ac81eee3b7c266dd92cee1cd658407b16c57eed08c7421fa354ed68234de380"}, {file = "matplotlib-3.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:667ecd5d8d37813a845053d8f5bf110b534c3c9f30e69ebd25d4701385935a6d"}, @@ -2865,6 +3211,7 @@ version = "0.7.0" description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -2876,6 +3223,8 @@ version = "1.12.4" description = "Model Context Protocol SDK" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "mcp-1.12.4-py3-none-any.whl", hash = "sha256:7aa884648969fab8e78b89399d59a683202972e12e6bc9a1c88ce7eda7743789"}, {file = "mcp-1.12.4.tar.gz", hash = "sha256:0765585e9a3a5916a3c3ab8659330e493adc7bd8b2ca6120c2d7a0c43e034ca5"}, @@ -2905,6 +3254,8 @@ version = "0.1.2" description = "Markdown URL utilities" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -2916,6 +3267,8 @@ version = "0.4.1" description = "" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "ml_dtypes-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1fe8b5b5e70cd67211db94b05cfd58dace592f24489b038dc6f9fe347d2e07d5"}, {file = "ml_dtypes-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c09a6d11d8475c2a9fd2bc0695628aec105f97cab3b3a3fb7c9660348ff7d24"}, @@ -2938,10 +3291,10 @@ files = [ [package.dependencies] numpy = [ - {version = ">1.20", markers = "python_version < \"3.10\""}, + {version = ">=1.23.3", markers = "python_version >= \"3.11\""}, + {version = ">1.20"}, + {version = ">=1.21.2", markers = "python_version >= \"3.10\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, - {version = ">=1.23.3", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, - {version = ">=1.21.2", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] [package.extras] @@ -2953,6 +3306,8 @@ version = "3.6.0" description = "MLflow is an open source platform for the complete machine learning lifecycle" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "mlflow-3.6.0-py3-none-any.whl", hash = "sha256:04d1691facd412be8e61b963fad859286cfeb2dbcafaea294e6aa0b83a15fc04"}, {file = "mlflow-3.6.0.tar.gz", hash = "sha256:d945d259b5c6b551a9f26846db8979fd84c78114a027b77ada3298f821a9b0e1"}, @@ -2997,6 +3352,8 @@ version = "3.6.0" description = "MLflow is an open source platform for the complete machine learning lifecycle" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "mlflow_skinny-3.6.0-py3-none-any.whl", hash = "sha256:c83b34fce592acb2cc6bddcb507587a6d9ef3f590d9e7a8658c85e0980596d78"}, {file = "mlflow_skinny-3.6.0.tar.gz", hash = "sha256:cc04706b5b6faace9faf95302a6e04119485e1bfe98ddc9b85b81984e80944b6"}, @@ -3042,6 +3399,8 @@ version = "3.6.0" description = "MLflow Tracing SDK is an open-source, lightweight Python package that only includes the minimum set of dependencies and functionality to instrument your code/models/agents with MLflow Tracing." optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "mlflow_tracing-3.6.0-py3-none-any.whl", hash = "sha256:a68ff03ba5129c67dc98e6871e0d5ef512dd3ee66d01e1c1a0c946c08a6d4755"}, {file = "mlflow_tracing-3.6.0.tar.gz", hash = "sha256:ccff80b3aad6caa18233c98ba69922a91a6f914e0a13d12e1977af7523523d4c"}, @@ -3063,6 +3422,7 @@ version = "1.34.0" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "msal-1.34.0-py3-none-any.whl", hash = "sha256:f669b1644e4950115da7a176441b0e13ec2975c29528d8b9e81316023676d6e1"}, {file = "msal-1.34.0.tar.gz", hash = "sha256:76ba83b716ea5a6d75b0279c0ac353a0e05b820ca1f6682c0eb7f45190c43c2f"}, @@ -3074,7 +3434,7 @@ PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} requests = ">=2.0.0,<3" [package.extras] -broker = ["pymsalruntime (>=0.14,<0.19)", "pymsalruntime (>=0.17,<0.19)", "pymsalruntime (>=0.18,<0.19)"] +broker = ["pymsalruntime (>=0.14,<0.19) ; python_version >= \"3.6\" and platform_system == \"Windows\"", "pymsalruntime (>=0.17,<0.19) ; python_version >= \"3.8\" and platform_system == \"Darwin\"", "pymsalruntime (>=0.18,<0.19) ; python_version >= \"3.8\" and platform_system == \"Linux\""] [[package]] name = "msal-extensions" @@ -3082,6 +3442,7 @@ version = "1.3.0" description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." optional = false python-versions = ">=3.7" +groups = ["main", "proxy-dev"] files = [ {file = "msal_extensions-1.3.0-py3-none-any.whl", hash = "sha256:105328ddcbdd342016c9949d8f89e3917554740c8ab26669c0fa0e069e730a0e"}, {file = "msal_extensions-1.3.0.tar.gz", hash = "sha256:96918996642b38c78cd59b55efa0f06fd1373c90e0949be8615697c048fba62c"}, @@ -3099,6 +3460,7 @@ version = "6.1.0" description = "multidict implementation" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -3203,6 +3565,7 @@ version = "1.14.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, @@ -3262,6 +3625,7 @@ version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, @@ -3273,6 +3637,7 @@ version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "proxy-dev"] files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -3284,6 +3649,8 @@ version = "1.26.4" description = "Fundamental package for array computing in Python" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and (python_version >= \"3.10\" or extra == \"extra-proxy\" or extra == \"semantic-router\") and (python_version < \"3.12\" or extra == \"semantic-router\" or extra == \"mlflow\" or extra == \"extra-proxy\") and (python_version < \"3.14\" or extra == \"semantic-router\" or extra == \"mlflow\") and (extra == \"extra-proxy\" or extra == \"semantic-router\" or extra == \"mlflow\")" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -3329,6 +3696,8 @@ version = "1.7.0" description = "Sphinx extension to support docstrings in Numpy format" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "numpydoc-1.7.0-py3-none-any.whl", hash = "sha256:5a56419d931310d79a06cfc2a126d1558700feeb9b4f3d8dcae1a8134be829c9"}, {file = "numpydoc-1.7.0.tar.gz", hash = "sha256:866e5ae5b6509dcf873fc6381120f5c31acf13b135636c1a81d68c166a95f921"}, @@ -3340,7 +3709,7 @@ tabulate = ">=0.8.10" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} [package.extras] -developer = ["pre-commit (>=3.3)", "tomli"] +developer = ["pre-commit (>=3.3)", "tomli ; python_version < \"3.11\""] doc = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pydata-sphinx-theme (>=0.13.3)", "sphinx (>=7)"] test = ["matplotlib", "pytest", "pytest-cov"] @@ -3350,6 +3719,8 @@ version = "3.3.1" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1"}, {file = "oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9"}, @@ -3366,6 +3737,7 @@ version = "1.109.1" description = "The official Python library for the openai API" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "openai-1.109.1-py3-none-any.whl", hash = "sha256:6bcaf57086cf59159b8e27447e4e7dd019db5d29a438072fbd49c290c7e65315"}, {file = "openai-1.109.1.tar.gz", hash = "sha256:d173ed8dbca665892a6db099b4a2dfac624f94d20a93f46eb0b56aae940ed869"}, @@ -3393,10 +3765,12 @@ version = "1.25.0" description = "OpenTelemetry Python API" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "opentelemetry_api-1.25.0-py3-none-any.whl", hash = "sha256:757fa1aa020a0f8fa139f8959e53dec2051cc26b832e76fa839a6d76ecefd737"}, {file = "opentelemetry_api-1.25.0.tar.gz", hash = "sha256:77c4985f62f2614e42ce77ee4c9da5fa5f0bc1e1821085e9a47533a9323ae869"}, ] +markers = {main = "python_version >= \"3.10\""} [package.dependencies] deprecated = ">=1.2.6" @@ -3408,6 +3782,7 @@ version = "1.25.0" description = "OpenTelemetry Collector Exporters" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_exporter_otlp-1.25.0-py3-none-any.whl", hash = "sha256:d67a831757014a3bc3174e4cd629ae1493b7ba8d189e8a007003cacb9f1a6b60"}, {file = "opentelemetry_exporter_otlp-1.25.0.tar.gz", hash = "sha256:ce03199c1680a845f82e12c0a6a8f61036048c07ec7a0bd943142aca8fa6ced0"}, @@ -3423,6 +3798,7 @@ version = "1.25.0" description = "OpenTelemetry Protobuf encoding" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_exporter_otlp_proto_common-1.25.0-py3-none-any.whl", hash = "sha256:15637b7d580c2675f70246563363775b4e6de947871e01d0f4e3881d1848d693"}, {file = "opentelemetry_exporter_otlp_proto_common-1.25.0.tar.gz", hash = "sha256:c93f4e30da4eee02bacd1e004eb82ce4da143a2f8e15b987a9f603e0a85407d3"}, @@ -3437,6 +3813,7 @@ version = "1.25.0" description = "OpenTelemetry Collector Protobuf over gRPC Exporter" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_exporter_otlp_proto_grpc-1.25.0-py3-none-any.whl", hash = "sha256:3131028f0c0a155a64c430ca600fd658e8e37043cb13209f0109db5c1a3e4eb4"}, {file = "opentelemetry_exporter_otlp_proto_grpc-1.25.0.tar.gz", hash = "sha256:c0b1661415acec5af87625587efa1ccab68b873745ca0ee96b69bb1042087eac"}, @@ -3457,6 +3834,7 @@ version = "1.25.0" description = "OpenTelemetry Collector Protobuf over HTTP Exporter" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_exporter_otlp_proto_http-1.25.0-py3-none-any.whl", hash = "sha256:2eca686ee11b27acd28198b3ea5e5863a53d1266b91cda47c839d95d5e0541a6"}, {file = "opentelemetry_exporter_otlp_proto_http-1.25.0.tar.gz", hash = "sha256:9f8723859e37c75183ea7afa73a3542f01d0fd274a5b97487ea24cb683d7d684"}, @@ -3477,10 +3855,12 @@ version = "1.25.0" description = "OpenTelemetry Python Proto" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "opentelemetry_proto-1.25.0-py3-none-any.whl", hash = "sha256:f07e3341c78d835d9b86665903b199893befa5e98866f63d22b00d0b7ca4972f"}, {file = "opentelemetry_proto-1.25.0.tar.gz", hash = "sha256:35b6ef9dc4a9f7853ecc5006738ad40443701e52c26099e197895cbda8b815a3"}, ] +markers = {main = "python_version >= \"3.10\" and extra == \"mlflow\""} [package.dependencies] protobuf = ">=3.19,<5.0" @@ -3491,10 +3871,12 @@ version = "1.25.0" description = "OpenTelemetry Python SDK" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "opentelemetry_sdk-1.25.0-py3-none-any.whl", hash = "sha256:d97ff7ec4b351692e9d5a15af570c693b8715ad78b8aafbec5c7100fe966b4c9"}, {file = "opentelemetry_sdk-1.25.0.tar.gz", hash = "sha256:ce7fc319c57707ef5bf8b74fb9f8ebdb8bfafbe11898410e0d2a761d08a98ec7"}, ] +markers = {main = "python_version >= \"3.10\""} [package.dependencies] opentelemetry-api = "1.25.0" @@ -3507,10 +3889,12 @@ version = "0.46b0" description = "OpenTelemetry Semantic Conventions" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "opentelemetry_semantic_conventions-0.46b0-py3-none-any.whl", hash = "sha256:6daef4ef9fa51d51855d9f8e0ccd3a1bd59e0e545abe99ac6203804e36ab3e07"}, {file = "opentelemetry_semantic_conventions-0.46b0.tar.gz", hash = "sha256:fbc982ecbb6a6e90869b15c1673be90bd18c8a56ff1cffc0864e38e2edffaefa"}, ] +markers = {main = "python_version >= \"3.10\""} [package.dependencies] opentelemetry-api = "1.25.0" @@ -3521,6 +3905,8 @@ version = "3.10.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"}, {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"}, @@ -3609,6 +3995,7 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -3620,6 +4007,8 @@ version = "2.3.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, @@ -3680,9 +4069,9 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, {version = ">=1.22.4", markers = "python_version < \"3.11\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -3719,6 +4108,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -3730,6 +4120,8 @@ version = "12.0.0" description = "Python Imaging Library (fork)" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "pillow-12.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:3adfb466bbc544b926d50fe8f4a4e6abd8c6bffd28a26177594e6e9b2b76572b"}, {file = "pillow-12.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1ac11e8ea4f611c3c0147424eae514028b5e9077dd99ab91e1bd7bc33ff145e1"}, @@ -3838,6 +4230,8 @@ version = "1.3.10" description = "Resolve a name to an object." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version < \"3.9\"" files = [ {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, @@ -3849,6 +4243,7 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -3865,6 +4260,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -3880,6 +4276,8 @@ version = "1.35.1" description = "Blazingly fast DataFrame library" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "polars-1.35.1-py3-none-any.whl", hash = "sha256:c29a933f28aa330d96a633adbd79aa5e6a6247a802a720eead9933f4613bdbf4"}, {file = "polars-1.35.1.tar.gz", hash = "sha256:06548e6d554580151d6ca7452d74bceeec4640b5b9261836889b8e68cfd7a62e"}, @@ -3913,7 +4311,7 @@ rt64 = ["polars-runtime-64 (==1.35.1)"] rtcompat = ["polars-runtime-compat (==1.35.1)"] sqlalchemy = ["polars[pandas]", "sqlalchemy"] style = ["great-tables (>=0.8.0)"] -timezone = ["tzdata"] +timezone = ["tzdata ; platform_system == \"Windows\""] xlsx2csv = ["xlsx2csv (>=0.8.0)"] xlsxwriter = ["xlsxwriter"] @@ -3923,6 +4321,8 @@ version = "1.35.1" description = "Blazingly fast DataFrame library" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "polars_runtime_32-1.35.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6f051a42f6ae2f26e3bc2cf1f170f2120602976e2a3ffb6cfba742eecc7cc620"}, {file = "polars_runtime_32-1.35.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c2232f9cf05ba59efc72d940b86c033d41fd2d70bf2742e8115ed7112a766aa9"}, @@ -3939,6 +4339,7 @@ version = "2.0.0" description = "A pure-Python implementation of the HTTP/2 priority tree" optional = false python-versions = ">=3.6.1" +groups = ["proxy-dev"] files = [ {file = "priority-2.0.0-py3-none-any.whl", hash = "sha256:6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa"}, {file = "priority-2.0.0.tar.gz", hash = "sha256:c965d54f1b8d0d0b19479db3924c7c36cf672dbf2aec92d43fbdaf4492ba18c0"}, @@ -3950,6 +4351,7 @@ version = "0.11.0" description = "Prisma Client Python is an auto-generated and fully type-safe database client" optional = false python-versions = ">=3.7.0" +groups = ["main", "proxy-dev"] files = [ {file = "prisma-0.11.0-py3-none-any.whl", hash = "sha256:22bb869e59a2968b99f3483bb417717273ffbc569fd1e9ceed95e5614cbaf53a"}, {file = "prisma-0.11.0.tar.gz", hash = "sha256:3f2f2fd2361e1ec5ff655f2a04c7860c2f2a5bc4c91f78ca9c5c6349735bf693"}, @@ -3975,6 +4377,7 @@ version = "0.20.0" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" +groups = ["proxy-dev"] files = [ {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, @@ -3989,6 +4392,7 @@ version = "0.2.0" description = "Accelerated property cache" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58"}, {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b"}, @@ -4096,6 +4500,8 @@ version = "1.26.1" description = "Beautiful, Pythonic protocol buffers" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "proto_plus-1.26.1-py3-none-any.whl", hash = "sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66"}, {file = "proto_plus-1.26.1.tar.gz", hash = "sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012"}, @@ -4113,6 +4519,7 @@ version = "4.25.8" description = "" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "protobuf-4.25.8-cp310-abi3-win32.whl", hash = "sha256:504435d831565f7cfac9f0714440028907f1975e4bed228e58e72ecfff58a1e0"}, {file = "protobuf-4.25.8-cp310-abi3-win_amd64.whl", hash = "sha256:bd551eb1fe1d7e92c1af1d75bdfa572eff1ab0e5bf1736716814cdccdb2360f9"}, @@ -4126,6 +4533,7 @@ files = [ {file = "protobuf-4.25.8-py3-none-any.whl", hash = "sha256:15a0af558aa3b13efef102ae6e4f3efac06f1eea11afb3a57db2901447d9fb59"}, {file = "protobuf-4.25.8.tar.gz", hash = "sha256:6135cf8affe1fc6f76cced2641e4ea8d3e59518d1f24ae41ba97bcad82d397cd"}, ] +markers = {main = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\""} [[package]] name = "pyarrow" @@ -4133,6 +4541,8 @@ version = "22.0.0" description = "Python library for Apache Arrow" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "pyarrow-22.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:77718810bd3066158db1e95a63c160ad7ce08c6b0710bc656055033e39cdad88"}, {file = "pyarrow-22.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:44d2d26cda26d18f7af7db71453b7b783788322d756e81730acb98f24eb90ace"}, @@ -4192,6 +4602,8 @@ version = "0.6.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\"" files = [ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, @@ -4203,6 +4615,8 @@ version = "0.4.2" description = "A collection of ASN.1-based protocols modules" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\"" files = [ {file = "pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a"}, {file = "pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6"}, @@ -4217,6 +4631,7 @@ version = "2.11.1" description = "Python style guide checker" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, @@ -4228,10 +4643,12 @@ version = "2.23" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, ] +markers = {main = "(platform_python_implementation != \"PyPy\" or extra == \"proxy\") and (python_version < \"3.14\" or implementation_name != \"PyPy\")", dev = "platform_python_implementation != \"PyPy\" and (python_version < \"3.14\" or implementation_name != \"PyPy\")", proxy-dev = "platform_python_implementation != \"PyPy\" and (python_version < \"3.14\" or implementation_name != \"PyPy\")"} [[package]] name = "pydantic" @@ -4239,6 +4656,7 @@ version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, @@ -4252,7 +4670,7 @@ typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] [[package]] name = "pydantic-core" @@ -4260,6 +4678,7 @@ version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, @@ -4372,6 +4791,8 @@ version = "2.11.0" description = "Settings management using Pydantic" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "pydantic_settings-2.11.0-py3-none-any.whl", hash = "sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c"}, {file = "pydantic_settings-2.11.0.tar.gz", hash = "sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180"}, @@ -4395,6 +4816,7 @@ version = "3.1.0" description = "passive checker of Python programs" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, @@ -4406,6 +4828,8 @@ version = "2.19.2" description = "Pygments is a syntax highlighting package written in Python." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\" or extra == \"proxy\"" files = [ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, @@ -4420,6 +4844,7 @@ version = "2.9.0" description = "JSON Web Token implementation in Python" optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, @@ -4434,38 +4859,14 @@ dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pyte docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] -[[package]] -name = "pynacl" -version = "1.5.0" -description = "Python binding to the Networking and Cryptography (NaCl) library" -optional = true -python-versions = ">=3.6" -files = [ - {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, - {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, - {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, - {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, - {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, - {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, -] - -[package.dependencies] -cffi = ">=1.4.1" - -[package.extras] -docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] -tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] - [[package]] name = "pynacl" version = "1.6.0" description = "Python binding to the Networking and Cryptography (NaCl) library" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "pynacl-1.6.0-cp314-cp314t-macosx_10_10_universal2.whl", hash = "sha256:f46386c24a65383a9081d68e9c2de909b1834ec74ff3013271f1bca9c2d233eb"}, {file = "pynacl-1.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:dea103a1afcbc333bc0e992e64233d360d393d1e63d0bc88554f572365664348"}, @@ -4497,7 +4898,10 @@ files = [ ] [package.dependencies] -cffi = {version = ">=1.4.1", markers = "platform_python_implementation != \"PyPy\" and python_version < \"3.14\""} +cffi = [ + {version = ">=1.4.1", markers = "platform_python_implementation != \"PyPy\" and python_version < \"3.14\""}, + {version = ">=2.0.0", markers = "platform_python_implementation != \"PyPy\" and python_version >= \"3.14\""}, +] [package.extras] docs = ["sphinx (<7)", "sphinx_rtd_theme"] @@ -4509,6 +4913,8 @@ version = "3.2.5" description = "pyparsing - Classes and methods to define and execute parsing grammars" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e"}, {file = "pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6"}, @@ -4523,6 +4929,8 @@ version = "3.5.4" description = "A python implementation of GNU readline." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.9\" and sys_platform == \"win32\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"}, {file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"}, @@ -4537,6 +4945,7 @@ version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -4559,6 +4968,7 @@ version = "0.21.2" description = "Pytest support for asyncio" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pytest_asyncio-0.21.2-py3-none-any.whl", hash = "sha256:ab664c88bb7998f711d8039cacd4884da6430886ae8bbd4eded552ed2004f16b"}, {file = "pytest_asyncio-0.21.2.tar.gz", hash = "sha256:d67738fc232b94b326b9d060750beb16e0074210b98dd8b58a5239fa2a154f45"}, @@ -4577,6 +4987,7 @@ version = "3.14.1" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest_mock-3.14.1-py3-none-any.whl", hash = "sha256:178aefcd11307d874b4cd3100344e7e2d888d9791a6a1d9bfe90fbc1b74fd1d0"}, {file = "pytest_mock-3.14.1.tar.gz", hash = "sha256:159e9edac4c451ce77a5cdb9fc5d1100708d2dd4ba3c3df572f14097351af80e"}, @@ -4594,6 +5005,8 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -4608,6 +5021,7 @@ version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, @@ -4622,6 +5036,8 @@ version = "0.0.18" description = "A streaming multipart parser for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "python_multipart-0.0.18-py3-none-any.whl", hash = "sha256:efe91480f485f6a361427a541db4796f9e1591afc0fb8e7a4ba06bfbc6708996"}, {file = "python_multipart-0.0.18.tar.gz", hash = "sha256:7a68db60c8bfb82e460637fa4750727b45af1d5e2ed215593f917f64694d34fe"}, @@ -4633,6 +5049,8 @@ version = "3.1.0" description = "Universally unique lexicographically sortable identifier" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "python_ulid-3.1.0-py3-none-any.whl", hash = "sha256:e2cdc979c8c877029b4b7a38a6fba3bc4578e4f109a308419ff4d3ccf0a46619"}, {file = "python_ulid-3.1.0.tar.gz", hash = "sha256:ff0410a598bc5f6b01b602851a3296ede6f91389f913a5d5f8c496003836f636"}, @@ -4647,6 +5065,8 @@ version = "2025.2" description = "World timezone definitions, modern and historical" optional = true python-versions = "*" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\" or python_version < \"3.9\" and extra == \"utils\"" files = [ {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, @@ -4658,6 +5078,8 @@ version = "311" description = "Python for Window Extensions" optional = true python-versions = "*" +groups = ["main"] +markers = "python_version >= \"3.10\" and sys_platform == \"win32\" and (extra == \"proxy\" or extra == \"mlflow\")" files = [ {file = "pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3"}, {file = "pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b"}, @@ -4687,6 +5109,7 @@ version = "6.0.3" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, @@ -4769,6 +5192,8 @@ version = "5.3.1" description = "Python client for Redis database and key-value store" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.9\" and (extra == \"extra-proxy\" or extra == \"proxy\") and python_version < \"3.14\" or extra == \"proxy\"" files = [ {file = "redis-5.3.1-py3-none-any.whl", hash = "sha256:dc1909bd24669cc31b5f67a039700b16ec30571096c5f1f0d9d2324bff31af97"}, {file = "redis-5.3.1.tar.gz", hash = "sha256:ca49577a531ea64039b5a36db3d6cd1a0c7a60c34124d46924a45b956e8cf14c"}, @@ -4788,6 +5213,8 @@ version = "0.4.1" description = "Python client library and CLI for using Redis as a vector database" optional = true python-versions = "<3.14,>=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "redisvl-0.4.1-py3-none-any.whl", hash = "sha256:6db5d5bc95b1fe8032a1cdae74ce1c65bc7fe9054e5429b5d34d5a91d28bae5f"}, {file = "redisvl-0.4.1.tar.gz", hash = "sha256:fd6a36426ba94792c0efca20915c31232d4ee3cc58eb23794a62c142696401e6"}, @@ -4812,7 +5239,7 @@ bedrock = ["boto3[bedrock] (>=1.36.0,<2.0.0)"] cohere = ["cohere (>=4.44)"] mistralai = ["mistralai (>=1.0.0)"] openai = ["openai (>=1.13.0,<2.0.0)"] -sentence-transformers = ["scipy (<1.15)", "scipy (>=1.15,<2.0)", "sentence-transformers (>=3.4.0,<4.0.0)"] +sentence-transformers = ["scipy (<1.15) ; python_version < \"3.10\"", "scipy (>=1.15,<2.0) ; python_version >= \"3.10\"", "sentence-transformers (>=3.4.0,<4.0.0)"] vertexai = ["google-cloud-aiplatform (>=1.26,<2.0)", "protobuf (>=5.29.1,<6.0.0)"] voyageai = ["voyageai (>=0.2.2)"] @@ -4822,6 +5249,7 @@ version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, @@ -4837,6 +5265,7 @@ version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -4940,6 +5369,7 @@ version = "2.31.0" description = "Python HTTP for Humans." optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, @@ -4961,6 +5391,7 @@ version = "1.12.1" description = "Mock out responses from the requests package" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "requests-mock-1.12.1.tar.gz", hash = "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401"}, {file = "requests_mock-1.12.1-py2.py3-none-any.whl", hash = "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563"}, @@ -4978,6 +5409,8 @@ version = "0.8.0" description = "Resend Python SDK" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "resend-0.8.0-py2.py3-none-any.whl", hash = "sha256:adc1515dadf4f4fc6b90db55a237f0f37fc56fd74287a986519a8a187fdb661d"}, {file = "resend-0.8.0.tar.gz", hash = "sha256:94142394701724dbcfcd8f760f675c662a1025013e741dd7cc773ca885526257"}, @@ -4992,6 +5425,7 @@ version = "0.25.8" description = "A utility library for mocking out the `requests` Python library." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "responses-0.25.8-py3-none-any.whl", hash = "sha256:0c710af92def29c8352ceadff0c3fe340ace27cf5af1bbe46fb71275bcd2831c"}, {file = "responses-0.25.8.tar.gz", hash = "sha256:9374d047a575c8f781b94454db5cab590b6029505f488d12899ddb10a4af1cf4"}, @@ -5003,7 +5437,7 @@ requests = ">=2.30.0,<3.0" urllib3 = ">=1.25.10,<3.0" [package.extras] -tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli", "tomli-w", "types-PyYAML", "types-requests"] +tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli ; python_version < \"3.11\"", "tomli-w", "types-PyYAML", "types-requests"] [[package]] name = "respx" @@ -5011,6 +5445,7 @@ version = "0.22.0" description = "A utility for mocking out the Python HTTPX and HTTP Core libraries." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "respx-0.22.0-py2.py3-none-any.whl", hash = "sha256:631128d4c9aba15e56903fb5f66fb1eff412ce28dd387ca3a81339e52dbd3ad0"}, {file = "respx-0.22.0.tar.gz", hash = "sha256:3c8924caa2a50bd71aefc07aa812f2466ff489f1848c96e954a5362d17095d91"}, @@ -5025,6 +5460,8 @@ version = "13.7.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = true python-versions = ">=3.7.0" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, @@ -5044,6 +5481,7 @@ version = "0.20.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "rpds_py-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a649dfd735fff086e8a9d0503a9f0c7d01b7912a333c7ae77e1515c08c146dad"}, {file = "rpds_py-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f16bc1334853e91ddaaa1217045dd7be166170beec337576818461268a3de67f"}, @@ -5156,6 +5594,8 @@ version = "2.3.3" description = "RQ is a simple, lightweight, library for creating background jobs, and processing them." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "rq-2.3.3-py3-none-any.whl", hash = "sha256:2202c4409c4c527ac4bee409867d6c02515dd110030499eb0de54c7374aee0ce"}, {file = "rq-2.3.3.tar.gz", hash = "sha256:20c41c977b6f27c852a41bd855893717402bae7b8d9607dca21fe9dd55453e22"}, @@ -5171,6 +5611,8 @@ version = "4.9.1" description = "Pure-Python RSA implementation" optional = true python-versions = "<4,>=3.6" +groups = ["main"] +markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"extra-proxy\") or extra == \"extra-proxy\"" files = [ {file = "rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762"}, {file = "rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75"}, @@ -5185,6 +5627,7 @@ version = "0.1.15" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5fe8d54df166ecc24106db7dd6a68d44852d14eb0729ea4672bb4d96c320b7df"}, {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6f0bfbb53c4b4de117ac4d6ddfd33aa5fc31beeaa21d23c45c6dd249faf9126f"}, @@ -5211,6 +5654,8 @@ version = "0.11.3" description = "An Amazon S3 Transfer Manager" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "s3transfer-0.11.3-py3-none-any.whl", hash = "sha256:ca855bdeb885174b5ffa95b9913622459d4ad8e331fc98eb01e6d5eb6a30655d"}, {file = "s3transfer-0.11.3.tar.gz", hash = "sha256:edae4977e3a122445660c7c114bba949f9d191bae3b34a096f18a1c8c354527a"}, @@ -5228,6 +5673,8 @@ version = "1.7.2" description = "A set of python modules for machine learning and data mining" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "scikit_learn-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b33579c10a3081d076ab403df4a4190da4f4432d443521674637677dc91e61f"}, {file = "scikit_learn-1.7.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:36749fb62b3d961b1ce4fedf08fa57a1986cd409eff2d783bca5d4b9b5fce51c"}, @@ -5283,6 +5730,8 @@ version = "1.15.3" description = "Fundamental algorithms for scientific computing in Python" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c"}, {file = "scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253"}, @@ -5338,7 +5787,7 @@ numpy = ">=1.23.5,<2.5" [package.extras] dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] -test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "semantic-router" @@ -5346,6 +5795,8 @@ version = "0.0.20" description = "Super fast semantic router for AI decision making" optional = true python-versions = ">=3.9,<4.0" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"semantic-router\"" files = [ {file = "semantic_router-0.0.20-py3-none-any.whl", hash = "sha256:7a713401564fb6cf22b566046ad32a4224e4f357be8de6583ca3b9ee328c8f95"}, {file = "semantic_router-0.0.20.tar.gz", hash = "sha256:26119a4628ca72b2fa9eacd446ea763b6f1925a661a34e26945433d2601efac7"}, @@ -5361,7 +5812,7 @@ pydantic = ">=2.5.3,<3.0.0" pyyaml = ">=6.0.1,<7.0.0" [package.extras] -fastembed = ["fastembed (>=0.1.3,<0.2.0)"] +fastembed = ["fastembed (>=0.1.3,<0.2.0) ; python_version < \"3.12\""] hybrid = ["pinecone-text (>=0.7.1,<0.8.0)"] local = ["llama-cpp-python (>=0.2.28,<0.3.0)", "torch (>=2.1.0,<3.0.0)", "transformers (>=4.36.2,<5.0.0)"] @@ -5371,6 +5822,7 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "proxy-dev"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -5382,6 +5834,8 @@ version = "5.0.2" description = "A pure Python implementation of a sliding window memory map manager" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"}, {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"}, @@ -5393,6 +5847,7 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -5404,6 +5859,8 @@ version = "3.0.1" description = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms." optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064"}, {file = "snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"}, @@ -5415,6 +5872,8 @@ version = "0.12.1" description = "An audio library based on libsndfile, CFFI and NumPy" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "soundfile-0.12.1-py2.py3-none-any.whl", hash = "sha256:828a79c2e75abab5359f780c81dccd4953c45a2c4cd4f05ba3e233ddf984b882"}, {file = "soundfile-0.12.1-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:d922be1563ce17a69582a352a86f28ed8c9f6a8bc951df63476ffc310c064bfa"}, @@ -5438,6 +5897,8 @@ version = "7.1.2" description = "Python documentation generator" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinx-7.1.2-py3-none-any.whl", hash = "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"}, {file = "sphinx-7.1.2.tar.gz", hash = "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f"}, @@ -5473,6 +5934,8 @@ version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, @@ -5488,6 +5951,8 @@ version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, @@ -5503,6 +5968,8 @@ version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, @@ -5518,6 +5985,8 @@ version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, @@ -5532,6 +6001,8 @@ version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, @@ -5547,6 +6018,8 @@ version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, @@ -5562,6 +6035,8 @@ version = "2.0.44" description = "Database Abstraction Library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "SQLAlchemy-2.0.44-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:471733aabb2e4848d609141a9e9d56a427c0a038f4abf65dd19d7a21fd563632"}, {file = "SQLAlchemy-2.0.44-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48bf7d383a35e668b984c805470518b635d48b95a3c57cb03f37eaa3551b5f9f"}, @@ -5657,6 +6132,8 @@ version = "0.5.3" description = "A non-validating SQL parser." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "sqlparse-0.5.3-py3-none-any.whl", hash = "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca"}, {file = "sqlparse-0.5.3.tar.gz", hash = "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272"}, @@ -5672,6 +6149,8 @@ version = "2.1.3" description = "SSE plugin for Starlette" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "sse_starlette-2.1.3-py3-none-any.whl", hash = "sha256:8ec846438b4665b9e8c560fcdea6bc8081a3abf7942faa95e5a744999d219772"}, {file = "sse_starlette-2.1.3.tar.gz", hash = "sha256:9cd27eb35319e1414e3d2558ee7414487f9529ce3b3cf9b21434fd110e017169"}, @@ -5691,14 +6170,15 @@ version = "0.44.0" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "starlette-0.44.0-py3-none-any.whl", hash = "sha256:19edeb75844c16dcd4f9dd72f22f9108c1539f3fc9c4c88885654fef64f85aea"}, {file = "starlette-0.44.0.tar.gz", hash = "sha256:e35166950a3ccccc701962fe0711db0bc14f2ecd37c6f9fe5e3eae0cbaea8715"}, ] +markers = {main = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\""} [package.dependencies] anyio = ">=3.4.0,<5" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} [package.extras] full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] @@ -5709,6 +6189,8 @@ version = "0.9.0" description = "Pretty-print tabular data" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version >= \"3.9\" and (extra == \"extra-proxy\" or extra == \"utils\") and python_version < \"3.14\" or extra == \"utils\"" files = [ {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, @@ -5723,6 +6205,8 @@ version = "0.2.2" description = "backport of asyncio.TaskGroup, asyncio.Runner and asyncio.timeout" optional = false python-versions = "*" +groups = ["proxy-dev"] +markers = "python_version <= \"3.10\"" files = [ {file = "taskgroup-0.2.2-py2.py3-none-any.whl", hash = "sha256:e2c53121609f4ae97303e9ea1524304b4de6faf9eb2c9280c7f87976479a52fb"}, {file = "taskgroup-0.2.2.tar.gz", hash = "sha256:078483ac3e78f2e3f973e2edbf6941374fbea81b9c5d0a96f51d297717f4752d"}, @@ -5738,6 +6222,8 @@ version = "9.1.2" description = "Retry code until it succeeds" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, @@ -5753,6 +6239,8 @@ version = "3.6.0" description = "threadpoolctl" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"}, {file = "threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e"}, @@ -5764,6 +6252,7 @@ version = "0.7.0" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "tiktoken-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485f3cc6aba7c6b6ce388ba634fbba656d9ee27f766216f45146beb4ac18b25f"}, {file = "tiktoken-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e54be9a2cd2f6d6ffa3517b064983fb695c9a9d8aa7d574d1ef3c3f931a99225"}, @@ -5816,6 +6305,7 @@ version = "0.21.0" description = "" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "tokenizers-0.21.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:3c4c93eae637e7d2aaae3d376f06085164e1660f89304c0ab2b1d08a406636b2"}, {file = "tokenizers-0.21.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f53ea537c925422a2e0e92a24cce96f6bc5046bbef24a1652a5edc8ba975f62e"}, @@ -5848,6 +6338,8 @@ version = "2.3.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] +markers = "python_version <= \"3.10\"" files = [ {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, {file = "tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba"}, @@ -5899,6 +6391,7 @@ version = "0.13.3" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0"}, {file = "tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1"}, @@ -5910,6 +6403,7 @@ version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -5931,6 +6425,7 @@ version = "1.16.0.20241221" description = "Typing stubs for cffi" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_cffi-1.16.0.20241221-py3-none-any.whl", hash = "sha256:e5b76b4211d7a9185f6ab8d06a106d56c7eb80af7cdb8bfcb4186ade10fb112f"}, {file = "types_cffi-1.16.0.20241221.tar.gz", hash = "sha256:1c96649618f4b6145f58231acb976e0b448be6b847f7ab733dabe62dfbff6591"}, @@ -5945,6 +6440,7 @@ version = "24.1.0.20240722" description = "Typing stubs for pyOpenSSL" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-pyOpenSSL-24.1.0.20240722.tar.gz", hash = "sha256:47913b4678a01d879f503a12044468221ed8576263c1540dcb0484ca21b08c39"}, {file = "types_pyOpenSSL-24.1.0.20240722-py3-none-any.whl", hash = "sha256:6a7a5d2ec042537934cfb4c9d4deb0e16c4c6250b09358df1f083682fe6fda54"}, @@ -5960,6 +6456,7 @@ version = "6.0.12.20241230" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6"}, {file = "types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c"}, @@ -5971,6 +6468,7 @@ version = "4.6.0.20241004" description = "Typing stubs for redis" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-redis-4.6.0.20241004.tar.gz", hash = "sha256:5f17d2b3f9091ab75384153bfa276619ffa1cf6a38da60e10d5e6749cc5b902e"}, {file = "types_redis-4.6.0.20241004-py3-none-any.whl", hash = "sha256:ef5da68cb827e5f606c8f9c0b49eeee4c2669d6d97122f301d3a55dc6a63f6ed"}, @@ -5986,6 +6484,8 @@ version = "2.31.0.6" description = "Typing stubs for requests" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version < \"3.10\"" files = [ {file = "types-requests-2.31.0.6.tar.gz", hash = "sha256:cd74ce3b53c461f1228a9b783929ac73a666658f223e28ed29753771477b3bd0"}, {file = "types_requests-2.31.0.6-py3-none-any.whl", hash = "sha256:a2db9cb228a81da8348b49ad6db3f5519452dd20a9c1e1a868c83c5fe88fd1a9"}, @@ -6000,6 +6500,8 @@ version = "2.32.0.20241016" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version >= \"3.10\"" files = [ {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, @@ -6014,6 +6516,7 @@ version = "75.8.0.20250110" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_setuptools-75.8.0.20250110-py3-none-any.whl", hash = "sha256:a9f12980bbf9bcdc23ecd80755789085bad6bfce4060c2275bc2b4ca9f2bc480"}, {file = "types_setuptools-75.8.0.20250110.tar.gz", hash = "sha256:96f7ec8bbd6e0a54ea180d66ad68ad7a1d7954e7281a710ea2de75e355545271"}, @@ -6025,6 +6528,8 @@ version = "1.26.25.14" description = "Typing stubs for urllib3" optional = false python-versions = "*" +groups = ["dev"] +markers = "python_version < \"3.10\"" files = [ {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, @@ -6036,6 +6541,7 @@ version = "4.13.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, @@ -6047,6 +6553,8 @@ version = "0.4.2" description = "Runtime typing introspection tools" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, @@ -6061,6 +6569,8 @@ version = "2025.2" description = "Provider of IANA time zone data" optional = true python-versions = ">=2" +groups = ["main"] +markers = "python_version >= \"3.10\" and platform_system == \"Windows\" and (extra == \"proxy\" or extra == \"mlflow\") or python_version >= \"3.10\" and extra == \"mlflow\" or platform_system == \"Windows\" and extra == \"proxy\"" files = [ {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, @@ -6072,6 +6582,8 @@ version = "5.2" description = "tzinfo object for the local timezone" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"}, {file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"}, @@ -6090,14 +6602,16 @@ version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main", "dev", "proxy-dev"] +markers = "python_version < \"3.10\"" files = [ {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, ] [package.extras] -brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -6106,13 +6620,15 @@ version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] +markers = "python_version >= \"3.10\"" files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -6123,6 +6639,8 @@ version = "0.29.0" description = "The lightning-fast ASGI server." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and (extra == \"mlflow\" or extra == \"proxy\") or extra == \"proxy\"" files = [ {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, @@ -6134,7 +6652,7 @@ h11 = ">=0.8" typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] +standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] [[package]] name = "uvloop" @@ -6142,6 +6660,8 @@ version = "0.21.0" description = "Fast implementation of asyncio event loop on top of libuv" optional = true python-versions = ">=3.8.0" +groups = ["main"] +markers = "sys_platform != \"win32\" and extra == \"proxy\"" files = [ {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"}, {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"}, @@ -6193,6 +6713,8 @@ version = "3.0.2" description = "Waitress WSGI server" optional = true python-versions = ">=3.9.0" +groups = ["main"] +markers = "python_version >= \"3.10\" and platform_system == \"Windows\" and extra == \"mlflow\"" files = [ {file = "waitress-3.0.2-py3-none-any.whl", hash = "sha256:c56d67fd6e87c2ee598b76abdd4e96cfad1f24cacdea5078d382b1f9d7b5ed2e"}, {file = "waitress-3.0.2.tar.gz", hash = "sha256:682aaaf2af0c44ada4abfb70ded36393f0e307f4ab9456a215ce0020baefc31f"}, @@ -6208,6 +6730,8 @@ version = "13.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, @@ -6303,6 +6827,8 @@ version = "3.1.3" description = "The comprehensive WSGI web application library." optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"mlflow\"" files = [ {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, @@ -6320,6 +6846,7 @@ version = "1.17.3" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "wrapt-1.17.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04"}, {file = "wrapt-1.17.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2"}, @@ -6403,6 +6930,7 @@ files = [ {file = "wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22"}, {file = "wrapt-1.17.3.tar.gz", hash = "sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0"}, ] +markers = {main = "python_version >= \"3.10\""} [[package]] name = "wsproto" @@ -6410,6 +6938,7 @@ version = "1.2.0" description = "WebSockets state-machine based protocol implementation" optional = false python-versions = ">=3.7.0" +groups = ["proxy-dev"] files = [ {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, @@ -6424,6 +6953,7 @@ version = "1.15.2" description = "Yet another URL library" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "yarl-1.15.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e4ee8b8639070ff246ad3649294336b06db37a94bdea0d09ea491603e0be73b8"}, {file = "yarl-1.15.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7cf963a357c5f00cb55b1955df8bbe68d2f2f65de065160a1c26b85a1e44172"}, @@ -6536,17 +7066,18 @@ version = "3.20.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [extras] @@ -6558,6 +7089,6 @@ semantic-router = ["semantic-router"] utils = ["numpydoc"] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = ">=3.8.1,<4.0, !=3.9.7" -content-hash = "9aa69423e29fd687063c54a6afa789fd19f3828cddcd94cbf4ee5bda17d13b32" +content-hash = "39b2e6a0a4c7711806e649e70c7ee5544d0a00e2be19010a4b2581734004db17" diff --git a/pyproject.toml b/pyproject.toml index ca2fb7af8b..025d114a95 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,7 +59,7 @@ websockets = {version = "^13.1.0", optional = true} boto3 = {version = "1.36.0", optional = true} redisvl = {version = "^0.4.1", optional = true, markers = "python_version >= '3.9' and python_version < '3.14'"} mcp = {version = "^1.10.0", optional = true, python = ">=3.10"} -litellm-proxy-extras = {version = "0.4.3", optional = true} +litellm-proxy-extras = {version = "0.4.4", optional = true} rich = {version = "13.7.1", optional = true} litellm-enterprise = {version = "0.1.20", optional = true} diskcache = {version = "^5.6.1", optional = true} diff --git a/requirements.txt b/requirements.txt index cf2ce85e52..44580e8697 100644 --- a/requirements.txt +++ b/requirements.txt @@ -43,7 +43,7 @@ sentry_sdk==2.21.0 # for sentry error handling detect-secrets==1.5.0 # Enterprise - secret detection / masking in LLM requests cryptography==44.0.1 tzdata==2025.1 # IANA time zone database -litellm-proxy-extras==0.4.3 # for proxy extras - e.g. prisma migrations +litellm-proxy-extras==0.4.4 # for proxy extras - e.g. prisma migrations ### LITELLM PACKAGE DEPENDENCIES python-dotenv==1.0.1 # for env tiktoken==0.8.0 # for calculating usage From 8a43fbe8f7bdba1ff2151a9e490c32c75cab6267 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 14 Nov 2025 17:41:06 -0800 Subject: [PATCH 39/42] Revert "[Feat] VertexAI - Add BGE Embeddings support (#16033)" (#16677) This reverts commit 713348828213493407dde134c0f93bfc4fecea67. --- docs/my-website/docs/providers/vertex.md | 556 +++++++++++++++-- .../docs/providers/vertex_embedding.md | 587 ------------------ docs/my-website/sidebars.js | 1 - litellm/llms/vertex_ai/batches/handler.py | 8 - litellm/llms/vertex_ai/common_utils.py | 95 +-- .../vertex_ai_context_caching.py | 4 - .../llms/vertex_ai/vertex_embeddings/bge.py | 182 ------ .../vertex_embeddings/transformation.py | 21 +- .../llms/vertex_ai/vertex_embeddings/types.py | 8 +- .../vertex_ai/vertex_gemma_models/main.py | 5 +- litellm/llms/vertex_ai/vertex_llm_base.py | 52 +- .../vertex_ai/vertex_model_garden/main.py | 8 +- .../llms/vertex_ai/test_bge_embedding.py | 251 -------- .../test_bge_response_transformation.py | 111 ---- .../test_vertex_ai_psc_endpoint_support.py | 258 -------- 15 files changed, 526 insertions(+), 1621 deletions(-) delete mode 100644 docs/my-website/docs/providers/vertex_embedding.md delete mode 100644 litellm/llms/vertex_ai/vertex_embeddings/bge.py delete mode 100644 tests/test_litellm/llms/vertex_ai/test_bge_embedding.py delete mode 100644 tests/test_litellm/llms/vertex_ai/test_bge_response_transformation.py delete mode 100644 tests/test_litellm/llms/vertex_ai/test_vertex_ai_psc_endpoint_support.py diff --git a/docs/my-website/docs/providers/vertex.md b/docs/my-website/docs/providers/vertex.md index 4d7e85f388..874b637e4d 100644 --- a/docs/my-website/docs/providers/vertex.md +++ b/docs/my-website/docs/providers/vertex.md @@ -1604,53 +1604,6 @@ litellm.vertex_location = "us-central1 # Your Location | gemini-2.5-flash-preview-09-2025 | `completion('gemini-2.5-flash-preview-09-2025', messages)`, `completion('vertex_ai/gemini-2.5-flash-preview-09-2025', messages)` | | gemini-2.5-flash-lite-preview-09-2025 | `completion('gemini-2.5-flash-lite-preview-09-2025', messages)`, `completion('vertex_ai/gemini-2.5-flash-lite-preview-09-2025', messages)` | -## Private Service Connect (PSC) Endpoints - -LiteLLM supports Vertex AI models deployed to Private Service Connect (PSC) endpoints, allowing you to use custom `api_base` URLs for private deployments. - -### Usage - -```python -from litellm import completion - -# Use PSC endpoint with custom api_base -response = completion( - model="vertex_ai/1234567890", # Numeric endpoint ID - messages=[{"role": "user", "content": "Hello!"}], - api_base="http://10.96.32.8", # Your PSC endpoint - vertex_project="my-project-id", - vertex_location="us-central1" -) -``` - -**Key Features:** -- Supports both numeric endpoint IDs and custom model names -- Works with both completion and embedding endpoints -- Automatically constructs full PSC URL: `{api_base}/v1/projects/{project}/locations/{location}/endpoints/{model}:{endpoint}` -- Compatible with streaming requests - -### Configuration - -Add PSC endpoints to your `config.yaml`: - -```yaml -model_list: - - model_name: psc-gemini - litellm_params: - model: vertex_ai/1234567890 # Numeric endpoint ID - api_base: "http://10.96.32.8" # Your PSC endpoint - vertex_project: "my-project-id" - vertex_location: "us-central1" - vertex_credentials: "/path/to/service_account.json" - - model_name: psc-embedding - litellm_params: - model: vertex_ai/text-embedding-004 - api_base: "http://10.96.32.8" # Your PSC endpoint - vertex_project: "my-project-id" - vertex_location: "us-central1" - vertex_credentials: "/path/to/service_account.json" -``` - ## Fine-tuned Models You can call fine-tuned Vertex AI Gemini models through LiteLLM @@ -2089,6 +2042,515 @@ curl http://0.0.0.0:4000/v1/chat/completions \ | code-gecko@latest| `completion('code-gecko@latest', messages)` | +## **Embedding Models** + +#### Usage - Embedding + + + + +```python +import litellm +from litellm import embedding +litellm.vertex_project = "hardy-device-38811" # Your Project ID +litellm.vertex_location = "us-central1" # proj location + +response = embedding( + model="vertex_ai/textembedding-gecko", + input=["good morning from litellm"], +) +print(response) +``` + + + + + +1. Add model to config.yaml +```yaml +model_list: + - model_name: snowflake-arctic-embed-m-long-1731622468876 + litellm_params: + model: vertex_ai/ + vertex_project: "adroit-crow-413218" + vertex_location: "us-central1" + vertex_credentials: adroit-crow-413218-a956eef1a2a8.json + +litellm_settings: + drop_params: True +``` + +2. Start Proxy + +``` +$ litellm --config /path/to/config.yaml +``` + +3. Make Request using OpenAI Python SDK, Langchain Python SDK + +```python +import openai + +client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") + +response = client.embeddings.create( + model="snowflake-arctic-embed-m-long-1731622468876", + input = ["good morning from litellm", "this is another item"], +) + +print(response) +``` + + + + + +#### Supported Embedding Models +All models listed [here](https://github.com/BerriAI/litellm/blob/57f37f743886a0249f630a6792d49dffc2c5d9b7/model_prices_and_context_window.json#L835) are supported + +| Model Name | Function Call | +|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| text-embedding-004 | `embedding(model="vertex_ai/text-embedding-004", input)` | +| text-multilingual-embedding-002 | `embedding(model="vertex_ai/text-multilingual-embedding-002", input)` | +| textembedding-gecko | `embedding(model="vertex_ai/textembedding-gecko", input)` | +| textembedding-gecko-multilingual | `embedding(model="vertex_ai/textembedding-gecko-multilingual", input)` | +| textembedding-gecko-multilingual@001 | `embedding(model="vertex_ai/textembedding-gecko-multilingual@001", input)` | +| textembedding-gecko@001 | `embedding(model="vertex_ai/textembedding-gecko@001", input)` | +| textembedding-gecko@003 | `embedding(model="vertex_ai/textembedding-gecko@003", input)` | +| text-embedding-preview-0409 | `embedding(model="vertex_ai/text-embedding-preview-0409", input)` | +| text-multilingual-embedding-preview-0409 | `embedding(model="vertex_ai/text-multilingual-embedding-preview-0409", input)` | +| Fine-tuned OR Custom Embedding models | `embedding(model="vertex_ai/", input)` | + +### Supported OpenAI (Unified) Params + +| [param](../embedding/supported_embedding.md#input-params-for-litellmembedding) | type | [vertex equivalent](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api) | +|-------|-------------|--------------------| +| `input` | **string or List[string]** | `instances` | +| `dimensions` | **int** | `output_dimensionality` | +| `input_type` | **Literal["RETRIEVAL_QUERY","RETRIEVAL_DOCUMENT", "SEMANTIC_SIMILARITY", "CLASSIFICATION", "CLUSTERING", "QUESTION_ANSWERING", "FACT_VERIFICATION"]** | `task_type` | + +#### Usage with OpenAI (Unified) Params + + + + + +```python +response = litellm.embedding( + model="vertex_ai/text-embedding-004", + input=["good morning from litellm", "gm"] + input_type = "RETRIEVAL_DOCUMENT", + dimensions=1, +) +``` + + + + +```python +import openai + +client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") + +response = client.embeddings.create( + model="text-embedding-004", + input = ["good morning from litellm", "gm"], + dimensions=1, + extra_body = { + "input_type": "RETRIEVAL_QUERY", + } +) + +print(response) +``` + + + + +### Supported Vertex Specific Params + +| param | type | +|-------|-------------| +| `auto_truncate` | **bool** | +| `task_type` | **Literal["RETRIEVAL_QUERY","RETRIEVAL_DOCUMENT", "SEMANTIC_SIMILARITY", "CLASSIFICATION", "CLUSTERING", "QUESTION_ANSWERING", "FACT_VERIFICATION"]** | +| `title` | **str** | + +#### Usage with Vertex Specific Params (Use `task_type` and `title`) + +You can pass any vertex specific params to the embedding model. Just pass them to the embedding function like this: + +[Relevant Vertex AI doc with all embedding params](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api#request_body) + + + + +```python +response = litellm.embedding( + model="vertex_ai/text-embedding-004", + input=["good morning from litellm", "gm"] + task_type = "RETRIEVAL_DOCUMENT", + title = "test", + dimensions=1, + auto_truncate=True, +) +``` + + + + +```python +import openai + +client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") + +response = client.embeddings.create( + model="text-embedding-004", + input = ["good morning from litellm", "gm"], + dimensions=1, + extra_body = { + "task_type": "RETRIEVAL_QUERY", + "auto_truncate": True, + "title": "test", + } +) + +print(response) +``` + + + +## **Multi-Modal Embeddings** + + +Known Limitations: +- Only supports 1 image / video / image per request +- Only supports GCS or base64 encoded images / videos + +### Usage + + + + +Using GCS Images + +```python +response = await litellm.aembedding( + model="vertex_ai/multimodalembedding@001", + input="gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png" # will be sent as a gcs image +) +``` + +Using base 64 encoded images + +```python +response = await litellm.aembedding( + model="vertex_ai/multimodalembedding@001", + input="data:image/jpeg;base64,..." # will be sent as a base64 encoded image +) +``` + + + + +1. Add model to config.yaml +```yaml +model_list: + - model_name: multimodalembedding@001 + litellm_params: + model: vertex_ai/multimodalembedding@001 + vertex_project: "adroit-crow-413218" + vertex_location: "us-central1" + vertex_credentials: adroit-crow-413218-a956eef1a2a8.json + +litellm_settings: + drop_params: True +``` + +2. Start Proxy + +``` +$ litellm --config /path/to/config.yaml +``` + +3. Make Request use OpenAI Python SDK, Langchain Python SDK + + + + + + +Requests with GCS Image / Video URI + +```python +import openai + +client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") + +# # request sent to model set on litellm proxy, `litellm --model` +response = client.embeddings.create( + model="multimodalembedding@001", + input = "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png", +) + +print(response) +``` + +Requests with base64 encoded images + +```python +import openai + +client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") + +# # request sent to model set on litellm proxy, `litellm --model` +response = client.embeddings.create( + model="multimodalembedding@001", + input = "data:image/jpeg;base64,...", +) + +print(response) +``` + + + + + +Requests with GCS Image / Video URI +```python +from langchain_openai import OpenAIEmbeddings + +embeddings_models = "multimodalembedding@001" + +embeddings = OpenAIEmbeddings( + model="multimodalembedding@001", + base_url="http://0.0.0.0:4000", + api_key="sk-1234", # type: ignore +) + + +query_result = embeddings.embed_query( + "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png" +) +print(query_result) + +``` + +Requests with base64 encoded images + +```python +from langchain_openai import OpenAIEmbeddings + +embeddings_models = "multimodalembedding@001" + +embeddings = OpenAIEmbeddings( + model="multimodalembedding@001", + base_url="http://0.0.0.0:4000", + api_key="sk-1234", # type: ignore +) + + +query_result = embeddings.embed_query( + "data:image/jpeg;base64,..." +) +print(query_result) + +``` + + + + + + + + + +1. Add model to config.yaml +```yaml +default_vertex_config: + vertex_project: "adroit-crow-413218" + vertex_location: "us-central1" + vertex_credentials: adroit-crow-413218-a956eef1a2a8.json +``` + +2. Start Proxy + +``` +$ litellm --config /path/to/config.yaml +``` + +3. Make Request use OpenAI Python SDK + +```python +import vertexai + +from vertexai.vision_models import Image, MultiModalEmbeddingModel, Video +from vertexai.vision_models import VideoSegmentConfig +from google.auth.credentials import Credentials + + +LITELLM_PROXY_API_KEY = "sk-1234" +LITELLM_PROXY_BASE = "http://0.0.0.0:4000/vertex-ai" + +import datetime + +class CredentialsWrapper(Credentials): + def __init__(self, token=None): + super().__init__() + self.token = token + self.expiry = None # or set to a future date if needed + + def refresh(self, request): + pass + + def apply(self, headers, token=None): + headers['Authorization'] = f'Bearer {self.token}' + + @property + def expired(self): + return False # Always consider the token as non-expired + + @property + def valid(self): + return True # Always consider the credentials as valid + +credentials = CredentialsWrapper(token=LITELLM_PROXY_API_KEY) + +vertexai.init( + project="adroit-crow-413218", + location="us-central1", + api_endpoint=LITELLM_PROXY_BASE, + credentials = credentials, + api_transport="rest", + +) + +model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding") +image = Image.load_from_file( + "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png" +) + +embeddings = model.get_embeddings( + image=image, + contextual_text="Colosseum", + dimension=1408, +) +print(f"Image Embedding: {embeddings.image_embedding}") +print(f"Text Embedding: {embeddings.text_embedding}") +``` + + + + + +### Text + Image + Video Embeddings + + + + +Text + Image + +```python +response = await litellm.aembedding( + model="vertex_ai/multimodalembedding@001", + input=["hey", "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png"] # will be sent as a gcs image +) +``` + +Text + Video + +```python +response = await litellm.aembedding( + model="vertex_ai/multimodalembedding@001", + input=["hey", "gs://my-bucket/embeddings/supermarket-video.mp4"] # will be sent as a gcs image +) +``` + +Image + Video + +```python +response = await litellm.aembedding( + model="vertex_ai/multimodalembedding@001", + input=["gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png", "gs://my-bucket/embeddings/supermarket-video.mp4"] # will be sent as a gcs image +) +``` + + + + + +1. Add model to config.yaml +```yaml +model_list: + - model_name: multimodalembedding@001 + litellm_params: + model: vertex_ai/multimodalembedding@001 + vertex_project: "adroit-crow-413218" + vertex_location: "us-central1" + vertex_credentials: adroit-crow-413218-a956eef1a2a8.json + +litellm_settings: + drop_params: True +``` + +2. Start Proxy + +``` +$ litellm --config /path/to/config.yaml +``` + +3. Make Request use OpenAI Python SDK, Langchain Python SDK + + +Text + Image + +```python +import openai + +client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") + +# # request sent to model set on litellm proxy, `litellm --model` +response = client.embeddings.create( + model="multimodalembedding@001", + input = ["hey", "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png"], +) + +print(response) +``` + +Text + Video +```python +import openai + +client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") + +# # request sent to model set on litellm proxy, `litellm --model` +response = client.embeddings.create( + model="multimodalembedding@001", + input = ["hey", "gs://my-bucket/embeddings/supermarket-video.mp4"], +) + +print(response) +``` + +Image + Video +```python +import openai + +client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") + +# # request sent to model set on litellm proxy, `litellm --model` +response = client.embeddings.create( + model="multimodalembedding@001", + input = ["gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png", "gs://my-bucket/embeddings/supermarket-video.mp4"], +) + +print(response) +``` + + + + + ## **Gemini TTS (Text-to-Speech) Audio Output** :::info diff --git a/docs/my-website/docs/providers/vertex_embedding.md b/docs/my-website/docs/providers/vertex_embedding.md deleted file mode 100644 index 5656ade337..0000000000 --- a/docs/my-website/docs/providers/vertex_embedding.md +++ /dev/null @@ -1,587 +0,0 @@ -import Image from '@theme/IdealImage'; -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Vertex AI Embedding - -## Usage - Embedding - - - - -```python -import litellm -from litellm import embedding -litellm.vertex_project = "hardy-device-38811" # Your Project ID -litellm.vertex_location = "us-central1" # proj location - -response = embedding( - model="vertex_ai/textembedding-gecko", - input=["good morning from litellm"], -) -print(response) -``` - - - - - -1. Add model to config.yaml -```yaml -model_list: - - model_name: snowflake-arctic-embed-m-long-1731622468876 - litellm_params: - model: vertex_ai/ - vertex_project: "adroit-crow-413218" - vertex_location: "us-central1" - vertex_credentials: adroit-crow-413218-a956eef1a2a8.json - -litellm_settings: - drop_params: True -``` - -2. Start Proxy - -``` -$ litellm --config /path/to/config.yaml -``` - -3. Make Request using OpenAI Python SDK, Langchain Python SDK - -```python -import openai - -client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") - -response = client.embeddings.create( - model="snowflake-arctic-embed-m-long-1731622468876", - input = ["good morning from litellm", "this is another item"], -) - -print(response) -``` - - - - - -#### Supported Embedding Models -All models listed [here](https://github.com/BerriAI/litellm/blob/57f37f743886a0249f630a6792d49dffc2c5d9b7/model_prices_and_context_window.json#L835) are supported - -| Model Name | Function Call | -|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| text-embedding-004 | `embedding(model="vertex_ai/text-embedding-004", input)` | -| text-multilingual-embedding-002 | `embedding(model="vertex_ai/text-multilingual-embedding-002", input)` | -| textembedding-gecko | `embedding(model="vertex_ai/textembedding-gecko", input)` | -| textembedding-gecko-multilingual | `embedding(model="vertex_ai/textembedding-gecko-multilingual", input)` | -| textembedding-gecko-multilingual@001 | `embedding(model="vertex_ai/textembedding-gecko-multilingual@001", input)` | -| textembedding-gecko@001 | `embedding(model="vertex_ai/textembedding-gecko@001", input)` | -| textembedding-gecko@003 | `embedding(model="vertex_ai/textembedding-gecko@003", input)` | -| text-embedding-preview-0409 | `embedding(model="vertex_ai/text-embedding-preview-0409", input)` | -| text-multilingual-embedding-preview-0409 | `embedding(model="vertex_ai/text-multilingual-embedding-preview-0409", input)` | -| Fine-tuned OR Custom Embedding models | `embedding(model="vertex_ai/", input)` | - -### Supported OpenAI (Unified) Params - -| [param](../embedding/supported_embedding.md#input-params-for-litellmembedding) | type | [vertex equivalent](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api) | -|-------|-------------|--------------------| -| `input` | **string or List[string]** | `instances` | -| `dimensions` | **int** | `output_dimensionality` | -| `input_type` | **Literal["RETRIEVAL_QUERY","RETRIEVAL_DOCUMENT", "SEMANTIC_SIMILARITY", "CLASSIFICATION", "CLUSTERING", "QUESTION_ANSWERING", "FACT_VERIFICATION"]** | `task_type` | - -#### Usage with OpenAI (Unified) Params - - - - - -```python -response = litellm.embedding( - model="vertex_ai/text-embedding-004", - input=["good morning from litellm", "gm"] - input_type = "RETRIEVAL_DOCUMENT", - dimensions=1, -) -``` - - - - -```python -import openai - -client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") - -response = client.embeddings.create( - model="text-embedding-004", - input = ["good morning from litellm", "gm"], - dimensions=1, - extra_body = { - "input_type": "RETRIEVAL_QUERY", - } -) - -print(response) -``` - - - - -### Supported Vertex Specific Params - -| param | type | -|-------|-------------| -| `auto_truncate` | **bool** | -| `task_type` | **Literal["RETRIEVAL_QUERY","RETRIEVAL_DOCUMENT", "SEMANTIC_SIMILARITY", "CLASSIFICATION", "CLUSTERING", "QUESTION_ANSWERING", "FACT_VERIFICATION"]** | -| `title` | **str** | - -#### Usage with Vertex Specific Params (Use `task_type` and `title`) - -You can pass any vertex specific params to the embedding model. Just pass them to the embedding function like this: - -[Relevant Vertex AI doc with all embedding params](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api#request_body) - - - - -```python -response = litellm.embedding( - model="vertex_ai/text-embedding-004", - input=["good morning from litellm", "gm"] - task_type = "RETRIEVAL_DOCUMENT", - title = "test", - dimensions=1, - auto_truncate=True, -) -``` - - - - -```python -import openai - -client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") - -response = client.embeddings.create( - model="text-embedding-004", - input = ["good morning from litellm", "gm"], - dimensions=1, - extra_body = { - "task_type": "RETRIEVAL_QUERY", - "auto_truncate": True, - "title": "test", - } -) - -print(response) -``` - - - -## **BGE Embeddings** - -Use BGE (Baidu General Embedding) models deployed on Vertex AI. - -### Usage - - - - -```python showLineNumbers title="Using BGE on Vertex AI" -import litellm - -response = litellm.embedding( - model="vertex_ai/bge/", - input=["Hello", "World"], - vertex_project="your-project-id", - vertex_location="your-location" -) - -print(response) -``` - - - - - -1. Add model to config.yaml -```yaml showLineNumbers title="config.yaml" -model_list: - - model_name: bge-embedding - litellm_params: - model: vertex_ai/bge/ - vertex_project: "your-project-id" - vertex_location: "us-central1" - vertex_credentials: your-credentials.json - -litellm_settings: - drop_params: True -``` - -2. Start Proxy - -```bash -$ litellm --config /path/to/config.yaml -``` - -3. Make Request using OpenAI Python SDK - -```python showLineNumbers title="Making requests to BGE" -import openai - -client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") - -response = client.embeddings.create( - model="bge-embedding", - input=["good morning from litellm", "this is another item"] -) - -print(response) -``` - -Using a Private Service Connect (PSC) endpoint - -```yaml showLineNumbers title="config.yaml (PSC)" -model_list: - - model_name: bge-small-en-v1.5 - litellm_params: - model: vertex_ai/bge/1234567890 - api_base: http://10.96.32.8 # Your PSC IP - vertex_project: my-project-id #optional - vertex_location: us-central1 #optional -``` - - - - -## **Multi-Modal Embeddings** - - -Known Limitations: -- Only supports 1 image / video / image per request -- Only supports GCS or base64 encoded images / videos - -### Usage - - - - -Using GCS Images - -```python -response = await litellm.aembedding( - model="vertex_ai/multimodalembedding@001", - input="gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png" # will be sent as a gcs image -) -``` - -Using base 64 encoded images - -```python -response = await litellm.aembedding( - model="vertex_ai/multimodalembedding@001", - input="data:image/jpeg;base64,..." # will be sent as a base64 encoded image -) -``` - - - - -1. Add model to config.yaml -```yaml -model_list: - - model_name: multimodalembedding@001 - litellm_params: - model: vertex_ai/multimodalembedding@001 - vertex_project: "adroit-crow-413218" - vertex_location: "us-central1" - vertex_credentials: adroit-crow-413218-a956eef1a2a8.json - -litellm_settings: - drop_params: True -``` - -2. Start Proxy - -``` -$ litellm --config /path/to/config.yaml -``` - -3. Make Request use OpenAI Python SDK, Langchain Python SDK - - - - - - -Requests with GCS Image / Video URI - -```python -import openai - -client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") - -# # request sent to model set on litellm proxy, `litellm --model` -response = client.embeddings.create( - model="multimodalembedding@001", - input = "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png", -) - -print(response) -``` - -Requests with base64 encoded images - -```python -import openai - -client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") - -# # request sent to model set on litellm proxy, `litellm --model` -response = client.embeddings.create( - model="multimodalembedding@001", - input = "data:image/jpeg;base64,...", -) - -print(response) -``` - - - - - -Requests with GCS Image / Video URI -```python -from langchain_openai import OpenAIEmbeddings - -embeddings_models = "multimodalembedding@001" - -embeddings = OpenAIEmbeddings( - model="multimodalembedding@001", - base_url="http://0.0.0.0:4000", - api_key="sk-1234", # type: ignore -) - - -query_result = embeddings.embed_query( - "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png" -) -print(query_result) - -``` - -Requests with base64 encoded images - -```python -from langchain_openai import OpenAIEmbeddings - -embeddings_models = "multimodalembedding@001" - -embeddings = OpenAIEmbeddings( - model="multimodalembedding@001", - base_url="http://0.0.0.0:4000", - api_key="sk-1234", # type: ignore -) - - -query_result = embeddings.embed_query( - "data:image/jpeg;base64,..." -) -print(query_result) - -``` - - - - - - - - - -1. Add model to config.yaml -```yaml -default_vertex_config: - vertex_project: "adroit-crow-413218" - vertex_location: "us-central1" - vertex_credentials: adroit-crow-413218-a956eef1a2a8.json -``` - -2. Start Proxy - -``` -$ litellm --config /path/to/config.yaml -``` - -3. Make Request use OpenAI Python SDK - -```python -import vertexai - -from vertexai.vision_models import Image, MultiModalEmbeddingModel, Video -from vertexai.vision_models import VideoSegmentConfig -from google.auth.credentials import Credentials - - -LITELLM_PROXY_API_KEY = "sk-1234" -LITELLM_PROXY_BASE = "http://0.0.0.0:4000/vertex-ai" - -import datetime - -class CredentialsWrapper(Credentials): - def __init__(self, token=None): - super().__init__() - self.token = token - self.expiry = None # or set to a future date if needed - - def refresh(self, request): - pass - - def apply(self, headers, token=None): - headers['Authorization'] = f'Bearer {self.token}' - - @property - def expired(self): - return False # Always consider the token as non-expired - - @property - def valid(self): - return True # Always consider the credentials as valid - -credentials = CredentialsWrapper(token=LITELLM_PROXY_API_KEY) - -vertexai.init( - project="adroit-crow-413218", - location="us-central1", - api_endpoint=LITELLM_PROXY_BASE, - credentials = credentials, - api_transport="rest", - -) - -model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding") -image = Image.load_from_file( - "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png" -) - -embeddings = model.get_embeddings( - image=image, - contextual_text="Colosseum", - dimension=1408, -) -print(f"Image Embedding: {embeddings.image_embedding}") -print(f"Text Embedding: {embeddings.text_embedding}") -``` - - - - - -### Text + Image + Video Embeddings - - - - -Text + Image - -```python -response = await litellm.aembedding( - model="vertex_ai/multimodalembedding@001", - input=["hey", "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png"] # will be sent as a gcs image -) -``` - -Text + Video - -```python -response = await litellm.aembedding( - model="vertex_ai/multimodalembedding@001", - input=["hey", "gs://my-bucket/embeddings/supermarket-video.mp4"] # will be sent as a gcs image -) -``` - -Image + Video - -```python -response = await litellm.aembedding( - model="vertex_ai/multimodalembedding@001", - input=["gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png", "gs://my-bucket/embeddings/supermarket-video.mp4"] # will be sent as a gcs image -) -``` - - - - - -1. Add model to config.yaml -```yaml -model_list: - - model_name: multimodalembedding@001 - litellm_params: - model: vertex_ai/multimodalembedding@001 - vertex_project: "adroit-crow-413218" - vertex_location: "us-central1" - vertex_credentials: adroit-crow-413218-a956eef1a2a8.json - -litellm_settings: - drop_params: True -``` - -2. Start Proxy - -``` -$ litellm --config /path/to/config.yaml -``` - -3. Make Request use OpenAI Python SDK, Langchain Python SDK - - -Text + Image - -```python -import openai - -client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") - -# # request sent to model set on litellm proxy, `litellm --model` -response = client.embeddings.create( - model="multimodalembedding@001", - input = ["hey", "gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png"], -) - -print(response) -``` - -Text + Video -```python -import openai - -client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") - -# # request sent to model set on litellm proxy, `litellm --model` -response = client.embeddings.create( - model="multimodalembedding@001", - input = ["hey", "gs://my-bucket/embeddings/supermarket-video.mp4"], -) - -print(response) -``` - -Image + Video -```python -import openai - -client = openai.OpenAI(api_key="sk-1234", base_url="http://0.0.0.0:4000") - -# # request sent to model set on litellm proxy, `litellm --model` -response = client.embeddings.create( - model="multimodalembedding@001", - input = ["gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png", "gs://my-bucket/embeddings/supermarket-video.mp4"], -) - -print(response) -``` - - - \ No newline at end of file diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index 19d7faf796..99472981f0 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -497,7 +497,6 @@ const sidebars = { "providers/vertex_ai/videos", "providers/vertex_partner", "providers/vertex_self_deployed", - "providers/vertex_embedding", "providers/vertex_image", "providers/vertex_batch", "providers/vertex_ocr", diff --git a/litellm/llms/vertex_ai/batches/handler.py b/litellm/llms/vertex_ai/batches/handler.py index b40f0a72a5..7932881f48 100644 --- a/litellm/llms/vertex_ai/batches/handler.py +++ b/litellm/llms/vertex_ai/batches/handler.py @@ -61,10 +61,6 @@ class VertexAIBatchPrediction(VertexLLM): stream=None, auth_header=None, url=default_api_base, - model=None, - vertex_project=vertex_project or project_id, - vertex_location=vertex_location or "us-central1", - vertex_api_version="v1", ) headers = { @@ -170,10 +166,6 @@ class VertexAIBatchPrediction(VertexLLM): stream=None, auth_header=None, url=default_api_base, - model=None, - vertex_project=vertex_project or project_id, - vertex_location=vertex_location or "us-central1", - vertex_api_version="v1", ) headers = { diff --git a/litellm/llms/vertex_ai/common_utils.py b/litellm/llms/vertex_ai/common_utils.py index 02b0f79280..2c53457736 100644 --- a/litellm/llms/vertex_ai/common_utils.py +++ b/litellm/llms/vertex_ai/common_utils.py @@ -31,11 +31,9 @@ class VertexAIModelRoute(str, Enum): PARTNER_MODELS = "partner_models" GEMINI = "gemini" GEMMA = "gemma" - BGE = "bge" MODEL_GARDEN = "model_garden" NON_GEMINI = "non_gemini" -VERTEX_AI_MODEL_ROUTES = [f"{route.value}/" for route in VertexAIModelRoute] def get_vertex_ai_model_route( model: str, litellm_params: Optional[dict] = None @@ -62,9 +60,6 @@ def get_vertex_ai_model_route( >>> get_vertex_ai_model_route("openai/gpt-oss-120b") VertexAIModelRoute.MODEL_GARDEN - - >>> get_vertex_ai_model_route("1234567890", {"api_base": "http://10.96.32.8"}) - VertexAIModelRoute.GEMINI # Numeric endpoints with api_base use HTTP path """ from litellm.llms.vertex_ai.vertex_ai_partner_models.main import ( VertexAIPartnerModels, @@ -74,20 +69,11 @@ def get_vertex_ai_model_route( if litellm_params and litellm_params.get("base_model") is not None: if "gemini" in litellm_params["base_model"]: return VertexAIModelRoute.GEMINI - - # Check if numeric endpoint ID with custom api_base (PSC endpoint) - # Route to GEMINI (HTTP path) to support PSC endpoints properly - if model.isdigit() and litellm_params and litellm_params.get("api_base"): - return VertexAIModelRoute.GEMINI - + # Check for partner models (llama, mistral, claude, etc.) if VertexAIPartnerModels.is_vertex_partner_model(model=model): return VertexAIModelRoute.PARTNER_MODELS - - # Check for BGE models - if "bge/" in model or "bge" in model.lower(): - return VertexAIModelRoute.BGE - + # Check for gemma models if "gemma/" in model: return VertexAIModelRoute.GEMMA @@ -150,71 +136,6 @@ all_gemini_url_modes = Literal[ ] -def get_vertex_base_model_name(model: str) -> str: - """ - Strip routing prefixes from model name for PSC/endpoint URL construction. - - Patterns like "bge/", "gemma/", "openai/" are used for internal routing but - should not appear in the actual endpoint URL. Routing prefixes are derived - from VertexAIModelRoute enum values. - - Args: - model: The model name with potential prefix (e.g., "bge/123456", "gemma/gemma-3-12b-it") - - Returns: - str: The model name without routing prefix (e.g., "123456", "gemma-3-12b-it") - - Examples: - >>> get_vertex_base_model_name("bge/378943383978115072") - "378943383978115072" - - >>> get_vertex_base_model_name("gemma/gemma-3-12b-it") - "gemma-3-12b-it" - - >>> get_vertex_base_model_name("openai/gpt-oss-120b") - "gpt-oss-120b" - - >>> get_vertex_base_model_name("1234567890") - "1234567890" - """ - # Derive routing prefixes from VertexAIModelRoute enum - # Map specific routes to their prefixes (some routes like PARTNER_MODELS, GEMINI don't have prefixes) - - - for route in VERTEX_AI_MODEL_ROUTES: - if model.startswith(route): - return model.replace(route, "", 1) - - return model - - -def _get_embedding_url( - model: str, - vertex_project: Optional[str], - vertex_location: Optional[str], - vertex_api_version: Literal["v1", "v1beta1"], -) -> Tuple[str, str]: - """ - Get URL for embedding models. - - Handles special patterns: - - bge/endpoint_id -> strips to endpoint_id for endpoints/ routing - - numeric model -> routes to endpoints/ - - regular model -> routes to publishers/google/models/ - """ - endpoint = "predict" - - # Strip routing prefixes (bge/, gemma/, etc.) for endpoint URL construction - model = get_vertex_base_model_name(model=model) - - url = f"https://{vertex_location}-aiplatform.googleapis.com/v1/projects/{vertex_project}/locations/{vertex_location}/publishers/google/models/{model}:{endpoint}" - if model.isdigit(): - # https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/endpoints/$ENDPOINT_ID:predict - url = f"https://{vertex_location}-aiplatform.googleapis.com/{vertex_api_version}/projects/{vertex_project}/locations/{vertex_location}/endpoints/{model}:{endpoint}" - - return url, endpoint - - def _get_vertex_url( mode: all_gemini_url_modes, model: str, @@ -227,7 +148,6 @@ def _get_vertex_url( endpoint: Optional[str] = None model = litellm.VertexGeminiConfig.get_model_for_vertex_ai_url(model=model) - if mode == "chat": ### SET RUNTIME ENDPOINT ### endpoint = "generateContent" @@ -252,12 +172,11 @@ def _get_vertex_url( if stream is True: url += "?alt=sse" elif mode == "embedding": - return _get_embedding_url( - model=model, - vertex_project=vertex_project, - vertex_location=vertex_location, - vertex_api_version=vertex_api_version, - ) + endpoint = "predict" + url = f"https://{vertex_location}-aiplatform.googleapis.com/v1/projects/{vertex_project}/locations/{vertex_location}/publishers/google/models/{model}:{endpoint}" + if model.isdigit(): + # https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/endpoints/$ENDPOINT_ID:predict + url = f"https://{vertex_location}-aiplatform.googleapis.com/{vertex_api_version}/projects/{vertex_project}/locations/{vertex_location}/endpoints/{model}:{endpoint}" elif mode == "image_generation": endpoint = "predict" url = f"https://{vertex_location}-aiplatform.googleapis.com/v1/projects/{vertex_project}/locations/{vertex_location}/publishers/google/models/{model}:{endpoint}" diff --git a/litellm/llms/vertex_ai/context_caching/vertex_ai_context_caching.py b/litellm/llms/vertex_ai/context_caching/vertex_ai_context_caching.py index dabc620a6d..70b068b5a4 100644 --- a/litellm/llms/vertex_ai/context_caching/vertex_ai_context_caching.py +++ b/litellm/llms/vertex_ai/context_caching/vertex_ai_context_caching.py @@ -79,10 +79,6 @@ class ContextCachingEndpoints(VertexBase): stream=None, auth_header=auth_header, url=url, - model=None, - vertex_project=vertex_project, - vertex_location=vertex_location, - vertex_api_version="v1beta1" if custom_llm_provider == "vertex_ai_beta" else "v1", ) def check_cache( diff --git a/litellm/llms/vertex_ai/vertex_embeddings/bge.py b/litellm/llms/vertex_ai/vertex_embeddings/bge.py deleted file mode 100644 index 2eff0ba96d..0000000000 --- a/litellm/llms/vertex_ai/vertex_embeddings/bge.py +++ /dev/null @@ -1,182 +0,0 @@ -""" -Vertex AI BGE (BAAI General Embedding) Configuration - -BGE models deployed on Vertex AI require different input/output format: -- Request: Use "prompt" instead of "content" as the input field -- Response: Embeddings are returned directly as arrays, not wrapped in objects - -Model name handling: -- Model names like "bge/endpoint_id" are automatically transformed in common_utils._get_vertex_url() -- This module focuses on request/response transformation only -""" - -from typing import List, Optional, Union - -from litellm.types.utils import EmbeddingResponse, Usage - -from .types import ( - EmbeddingParameters, - TaskType, - TextEmbeddingBGEInput, - VertexEmbeddingRequest, -) - - -class VertexBGEConfig: - """ - Configuration and transformation logic for BGE models on Vertex AI. - - BGE (BAAI General Embedding) models use a different request format - where the input field is named "prompt" instead of "content". - - Supported model patterns (after provider split in main.py): - - "bge-small-en-v1.5" (model name) - - "bge/204379420394258432" (endpoint ID pattern) - - Note: Model name transformation (bge/ -> numeric ID) is handled automatically - in common_utils._get_vertex_url(). This class focuses on request/response format only. - """ - - @staticmethod - def is_bge_model(model: str) -> bool: - """ - Check if the model is a BGE (BAAI General Embedding) model. - - After provider split in main.py, supports: - - "bge-small-en-v1.5" (model name) - - "bge/204379420394258432" (endpoint ID pattern) - - Args: - model: The model name after provider split - - Returns: - bool: True if the model is a BGE model - """ - model_lower = model.lower() - # Check for "bge/" prefix (endpoint pattern) or "bge" in model name - return model_lower.startswith("bge/") or "bge" in model_lower - - @staticmethod - def transform_request( - input: Union[list, str], optional_params: dict, model: str - ) -> VertexEmbeddingRequest: - """ - Transforms an OpenAI request to a Vertex BGE embedding request. - - BGE models use "prompt" instead of "content" as the input field. - - Args: - input: The input text(s) to embed - optional_params: Optional parameters for the request - model: The model name - - Returns: - VertexEmbeddingRequest: The transformed request - """ - vertex_request: VertexEmbeddingRequest = VertexEmbeddingRequest() - vertex_text_embedding_input_list: List[TextEmbeddingBGEInput] = [] - task_type: Optional[TaskType] = optional_params.get("task_type") - title = optional_params.get("title") - - if isinstance(input, str): - input = [input] - - for text in input: - embedding_input = VertexBGEConfig._create_embedding_input( - prompt=text, task_type=task_type, title=title - ) - vertex_text_embedding_input_list.append(embedding_input) - - vertex_request["instances"] = vertex_text_embedding_input_list - vertex_request["parameters"] = EmbeddingParameters(**optional_params) - - return vertex_request - - @staticmethod - def _create_embedding_input( - prompt: str, - task_type: Optional[TaskType] = None, - title: Optional[str] = None, - ) -> TextEmbeddingBGEInput: - """ - Creates a TextEmbeddingBGEInput object for BGE models. - - BGE models use "prompt" instead of "content" as the input field. - - Args: - prompt: The prompt to be embedded - task_type: The type of task to be performed - title: The title of the document to be embedded - - Returns: - TextEmbeddingBGEInput: A TextEmbeddingBGEInput object - """ - text_embedding_input = TextEmbeddingBGEInput(prompt=prompt) - if task_type is not None: - text_embedding_input["task_type"] = task_type - if title is not None: - text_embedding_input["title"] = title - return text_embedding_input - - @staticmethod - def transform_response( - response: dict, model: str, model_response: EmbeddingResponse - ) -> EmbeddingResponse: - """ - Transforms a Vertex BGE embedding response to OpenAI format. - - BGE models return embeddings directly as arrays in predictions: - { - "predictions": [ - [0.002, 0.021, ...], - [0.003, 0.022, ...] - ] - } - - Args: - response: The raw response from Vertex AI - model: The model name - model_response: The EmbeddingResponse object to populate - - Returns: - EmbeddingResponse: The transformed response in OpenAI format - - Raises: - KeyError: If response doesn't contain 'predictions' - ValueError: If predictions is not a list or contains invalid data - """ - if "predictions" not in response: - raise KeyError("Response missing 'predictions' field") - - _predictions = response["predictions"] - - if not isinstance(_predictions, list): - raise ValueError(f"Expected 'predictions' to be a list, got {type(_predictions)}") - - embedding_response = [] - # BGE models don't return token counts, so we estimate or set to 0 - input_tokens = 0 - - for idx, embedding_values in enumerate(_predictions): - if not isinstance(embedding_values, list): - raise ValueError( - f"Expected embedding at index {idx} to be a list, got {type(embedding_values)}" - ) - - embedding_response.append( - { - "object": "embedding", - "index": idx, - "embedding": embedding_values, - } - ) - - model_response.object = "list" - model_response.data = embedding_response - model_response.model = model - usage = Usage( - prompt_tokens=input_tokens, completion_tokens=0, total_tokens=input_tokens - ) - setattr(model_response, "usage", usage) - return model_response - diff --git a/litellm/llms/vertex_ai/vertex_embeddings/transformation.py b/litellm/llms/vertex_ai/vertex_embeddings/transformation.py index 5a3a4a7188..97af558041 100644 --- a/litellm/llms/vertex_ai/vertex_embeddings/transformation.py +++ b/litellm/llms/vertex_ai/vertex_embeddings/transformation.py @@ -105,16 +105,10 @@ class VertexAITextEmbeddingConfig(BaseModel): """ Transforms an openai request to a vertex embedding request. """ - # Import here to avoid circular import issues with litellm.__init__ - from litellm.llms.vertex_ai.vertex_embeddings.bge import VertexBGEConfig if model.isdigit(): return self._transform_openai_request_to_fine_tuned_embedding_request( input, optional_params, model ) - if VertexBGEConfig.is_bge_model(model): - return VertexBGEConfig.transform_request( - input=input, optional_params=optional_params, model=model - ) vertex_request: VertexEmbeddingRequest = VertexEmbeddingRequest() vertex_text_embedding_input_list: List[TextEmbeddingInput] = [] @@ -173,9 +167,6 @@ class VertexAITextEmbeddingConfig(BaseModel): vertex_request["parameters"] = TextEmbeddingFineTunedParameters( **optional_params ) - # Remove 'shared_session' from parameters if present - if vertex_request["parameters"] is not None and "shared_session" in vertex_request["parameters"]: - del vertex_request["parameters"]["shared_session"] # type: ignore[typeddict-item] return vertex_request @@ -192,8 +183,8 @@ class VertexAITextEmbeddingConfig(BaseModel): Args: content (str): The content to be embedded. - task_type (Optional[TaskType]): The type of task to be performed. - title (Optional[str]): The title of the document to be embedded. + task_type (Optional[TaskType]): The type of task to be performed". + title (Optional[str]): The title of the document to be embedded Returns: TextEmbeddingInput: A TextEmbeddingInput object. @@ -215,14 +206,6 @@ class VertexAITextEmbeddingConfig(BaseModel): return self._transform_vertex_response_to_openai_for_fine_tuned_models( response, model, model_response ) - - # Import here to avoid circular import issues with litellm.__init__ - from litellm.llms.vertex_ai.vertex_embeddings.bge import VertexBGEConfig - - if VertexBGEConfig.is_bge_model(model): - return VertexBGEConfig.transform_response( - response=response, model=model, model_response=model_response - ) _predictions = response["predictions"] diff --git a/litellm/llms/vertex_ai/vertex_embeddings/types.py b/litellm/llms/vertex_ai/vertex_embeddings/types.py index fa9794d79a..7f85ea46f3 100644 --- a/litellm/llms/vertex_ai/vertex_embeddings/types.py +++ b/litellm/llms/vertex_ai/vertex_embeddings/types.py @@ -25,12 +25,6 @@ class TextEmbeddingInput(TypedDict, total=False): title: Optional[str] -class TextEmbeddingBGEInput(TypedDict, total=False): - prompt: str - task_type: Optional[TaskType] - title: Optional[str] - - # Fine-tuned models require a different input format # Ref: https://console.cloud.google.com/vertex-ai/model-garden?hl=en&project=adroit-crow-413218&pageState=(%22galleryStateKey%22:(%22f%22:(%22g%22:%5B%5D,%22o%22:%5B%5D),%22s%22:%22%22)) class TextEmbeddingFineTunedInput(TypedDict, total=False): @@ -50,7 +44,7 @@ class EmbeddingParameters(TypedDict, total=False): class VertexEmbeddingRequest(TypedDict, total=False): - instances: Union[List[TextEmbeddingInput], List[TextEmbeddingBGEInput], List[TextEmbeddingFineTunedInput]] + instances: Union[List[TextEmbeddingInput], List[TextEmbeddingFineTunedInput]] parameters: Optional[Union[EmbeddingParameters, TextEmbeddingFineTunedParameters]] diff --git a/litellm/llms/vertex_ai/vertex_gemma_models/main.py b/litellm/llms/vertex_ai/vertex_gemma_models/main.py index 41bd6b5431..8203b285eb 100644 --- a/litellm/llms/vertex_ai/vertex_gemma_models/main.py +++ b/litellm/llms/vertex_ai/vertex_gemma_models/main.py @@ -25,7 +25,7 @@ import httpx # type: ignore from litellm.utils import ModelResponse -from ..common_utils import VertexAIError, get_vertex_base_model_name +from ..common_utils import VertexAIError from ..vertex_llm_base import VertexBase @@ -82,8 +82,7 @@ class VertexAIGemmaModels(VertexBase): message="""Upgrade vertex ai. Run `pip install "google-cloud-aiplatform>=1.38"`""", ) try: - - model = get_vertex_base_model_name(model=model) + model = model.replace("gemma/", "") vertex_httpx_logic = VertexLLM() access_token, project_id = vertex_httpx_logic._ensure_access_token( diff --git a/litellm/llms/vertex_ai/vertex_llm_base.py b/litellm/llms/vertex_ai/vertex_llm_base.py index ce50bf311e..9ddbc461a7 100644 --- a/litellm/llms/vertex_ai/vertex_llm_base.py +++ b/litellm/llms/vertex_ai/vertex_llm_base.py @@ -19,7 +19,6 @@ from .common_utils import ( _get_gemini_url, _get_vertex_url, all_gemini_url_modes, - get_vertex_base_model_name, is_global_only_vertex_model, ) @@ -242,9 +241,6 @@ class VertexBase: auth_header=None, url=default_api_base, model=model, - vertex_project=vertex_project or project_id, - vertex_location=vertex_location or "us-central1", - vertex_api_version="v1", # Partner models typically use v1 ) return api_base @@ -293,18 +289,9 @@ class VertexBase: auth_header: Optional[str], url: str, model: Optional[str] = None, - vertex_project: Optional[str] = None, - vertex_location: Optional[str] = None, - vertex_api_version: Optional[Literal["v1", "v1beta1"]] = None, ) -> Tuple[Optional[str], str]: """ for cloudflare ai gateway - https://github.com/BerriAI/litellm/issues/4317 - - Handles custom api_base for: - 1. Gemini (Google AI Studio) - constructs /models/{model}:{endpoint} - 2. Vertex AI with standard proxies - constructs {api_base}:{endpoint} - 3. Vertex AI with PSC endpoints - constructs full path structure - {api_base}/v1/projects/{project}/locations/{location}/endpoints/{model}:{endpoint} ## Returns - (auth_header, url) - Tuple[Optional[str], str] @@ -324,37 +311,8 @@ class VertexBase: if gemini_api_key is not None: auth_header = {"x-goog-api-key": gemini_api_key} # type: ignore[assignment] else: - # For Vertex AI - # Check if this is a PSC endpoint or custom deployment - # PSC/custom endpoints need the full path structure - if vertex_project and vertex_location and model: - # Strip routing prefixes (bge/, gemma/, etc.) for endpoint URL construction - model_for_url = get_vertex_base_model_name(model=model) - - # Check if model is numeric (endpoint ID) or if api_base doesn't contain googleapis.com - # These are indicators of PSC/custom endpoints - is_psc_or_custom = ( - "googleapis.com" not in api_base.lower() or model_for_url.isdigit() - ) - - if is_psc_or_custom: - # Construct full PSC/custom endpoint URL - # Format: {api_base}/v1/projects/{project}/locations/{location}/endpoints/{model}:{endpoint} - version = vertex_api_version or "v1" - url = "{}/{}/projects/{}/locations/{}/endpoints/{}:{}".format( - api_base.rstrip("/"), - version, - vertex_project, - vertex_location, - model_for_url, - endpoint, - ) - else: - # Standard proxy - just append endpoint - url = "{}:{}".format(api_base, endpoint) - else: - # Fallback to simple format if we don't have all parameters - url = "{}:{}".format(api_base, endpoint) + url = "{}:{}".format(api_base, endpoint) + if stream is True: url = url + "?alt=sse" return auth_header, url @@ -381,7 +339,6 @@ class VertexBase: Returns token, url """ - version: Optional[Literal["v1beta1", "v1"]] = None if custom_llm_provider == "gemini": url, endpoint = _get_gemini_url( mode=mode, @@ -397,7 +354,7 @@ class VertexBase: ) ### SET RUNTIME ENDPOINT ### - version = ( + version: Literal["v1beta1", "v1"] = ( "v1beta1" if should_use_v1beta1_features is True else "v1" ) url, endpoint = _get_vertex_url( @@ -418,9 +375,6 @@ class VertexBase: stream=stream, url=url, model=model, - vertex_project=vertex_project, - vertex_location=vertex_location, - vertex_api_version=version, ) def _handle_reauthentication( diff --git a/litellm/llms/vertex_ai/vertex_model_garden/main.py b/litellm/llms/vertex_ai/vertex_model_garden/main.py index fe7d0862e0..1c57096734 100644 --- a/litellm/llms/vertex_ai/vertex_model_garden/main.py +++ b/litellm/llms/vertex_ai/vertex_model_garden/main.py @@ -22,7 +22,7 @@ import httpx # type: ignore from litellm.utils import ModelResponse -from ..common_utils import VertexAIError, get_vertex_base_model_name +from ..common_utils import VertexAIError from ..vertex_llm_base import VertexBase @@ -89,7 +89,7 @@ class VertexAIModelGardenModels(VertexBase): message="""Upgrade vertex ai. Run `pip install "google-cloud-aiplatform>=1.38"`""", ) try: - model = get_vertex_base_model_name(model=model) + model = model.replace("openai/", "") vertex_httpx_logic = VertexLLM() access_token, project_id = vertex_httpx_logic._ensure_access_token( @@ -123,10 +123,6 @@ class VertexAIModelGardenModels(VertexBase): stream=stream, auth_header=None, url=default_api_base, - model=model, - vertex_project=vertex_project or project_id, - vertex_location=vertex_location or "us-central1", - vertex_api_version="v1beta1", ) model = "" return openai_like_chat_completions.completion( diff --git a/tests/test_litellm/llms/vertex_ai/test_bge_embedding.py b/tests/test_litellm/llms/vertex_ai/test_bge_embedding.py deleted file mode 100644 index 156ab95184..0000000000 --- a/tests/test_litellm/llms/vertex_ai/test_bge_embedding.py +++ /dev/null @@ -1,251 +0,0 @@ -""" -Test BGE embeddings with Vertex AI using custom api_base. - -This test ensures that BGE embeddings work correctly with Vertex AI -and that the request body is properly formatted. -""" - -import json -import os -import sys -from unittest.mock import MagicMock, patch - -sys.path.insert( - 0, os.path.abspath("../../../..") -) - -import pytest - -import litellm -from litellm.llms.custom_httpx.http_handler import HTTPHandler - - -def test_vertex_ai_bge_embedding_with_custom_api_base(): - """ - Test Vertex AI BGE embeddings with custom api_base. - - This test verifies that when using a BGE model with Vertex AI and - a custom api_base, the request is properly formatted and sent to - the correct endpoint. - """ - client = HTTPHandler() - - def mock_auth_token(*args, **kwargs): - return "fake-token", "fake-project" - - with patch.object(client, "post") as mock_post, patch( - "litellm.llms.vertex_ai.vertex_embeddings.embedding_handler.VertexEmbedding._ensure_access_token", - side_effect=mock_auth_token - ): - mock_response = MagicMock() - mock_response.status_code = 200 - # BGE models return embeddings directly as arrays, not wrapped in objects - mock_response.json.return_value = { - "predictions": [ - [0.1, 0.2, 0.3, 0.4, 0.5], - [0.6, 0.7, 0.8, 0.9, 1.0] - ], - "deployedModelId": "849506872875548672", - "model": "projects/1060139831167/locations/us-central1/models/baai_bge-small-en-v1.5", - "modelDisplayName": "baai_bge-small-en-v1.5", - "modelVersionId": "1" - } - mock_post.return_value = mock_response - - response = litellm.embedding( - model="vertex_ai/bge-small-en-v1.5", - input=["Hello", "World"], - api_base="http://10.96.32.8", - client=client - ) - - mock_post.assert_called_once() - - call_args = mock_post.call_args - kwargs = call_args.kwargs if hasattr(call_args, 'kwargs') else call_args[1] - - if "url" in kwargs: - api_url_called = kwargs["url"] - elif len(call_args[0]) > 0: - api_url_called = call_args[0][0] - else: - api_url_called = "Unknown" - - # Vertex AI may use 'json' or 'data' parameter - if "json" in kwargs: - request_data = kwargs["json"] - elif "data" in kwargs: - request_data = json.loads(kwargs["data"]) - else: - request_data = {} - - print("\n" + "="*50) - print("Mock Request Body Received:") - print("="*50) - print(json.dumps(request_data, indent=2)) - print("="*50) - print(f"API Base: {api_url_called}") - print("="*50 + "\n") - - assert "instances" in request_data - assert len(request_data["instances"]) == 2 - # BGE models should use "prompt" instead of "content" - assert "prompt" in request_data["instances"][0] - assert request_data["instances"][0]["prompt"] == "Hello" - assert "prompt" in request_data["instances"][1] - assert request_data["instances"][1]["prompt"] == "World" - - assert isinstance(response.data, list) - assert len(response.data) == 2 - assert "embedding" in response.data[0] - - -def test_vertex_ai_bge_with_endpoint_id_pattern(): - """ - Test BGE with vertex_ai/bge/endpoint_id pattern. - - This test verifies that the pattern vertex_ai/bge/204379420394258432 - correctly triggers BGE transformations and routes to the endpoint. - """ - client = HTTPHandler() - - def mock_auth_token(*args, **kwargs): - return "fake-token", "fake-project" - - with patch.object(client, "post") as mock_post, patch( - "litellm.llms.vertex_ai.vertex_embeddings.embedding_handler.VertexEmbedding._ensure_access_token", - side_effect=mock_auth_token - ): - mock_response = MagicMock() - mock_response.status_code = 200 - mock_response.json.return_value = { - "predictions": [ - [0.1, 0.2, 0.3, 0.4, 0.5], - [0.6, 0.7, 0.8, 0.9, 1.0] - ], - "deployedModelId": "204379420394258432", - "model": "projects/1060139831167/locations/europe-west4/models/baai_bge-base-en", - "modelDisplayName": "baai_bge-base-en", - "modelVersionId": "1" - } - mock_post.return_value = mock_response - - response = litellm.embedding( - model="vertex_ai/bge/204379420394258432", - input=["Hello", "World"], - vertex_project="1060139831167", - vertex_location="europe-west4", - client=client - ) - - mock_post.assert_called_once() - - call_args = mock_post.call_args - kwargs = call_args.kwargs if hasattr(call_args, 'kwargs') else call_args[1] - - if "url" in kwargs: - api_url_called = kwargs["url"] - elif len(call_args[0]) > 0: - api_url_called = call_args[0][0] - else: - api_url_called = "Unknown" - - # Vertex AI may use 'json' or 'data' parameter - if "json" in kwargs: - request_data = kwargs["json"] - elif "data" in kwargs: - request_data = json.loads(kwargs["data"]) - else: - request_data = {} - - print("\n" + "="*50) - print("BGE Endpoint Pattern Test:") - print("="*50) - print(f"Model: vertex_ai/bge/204379420394258432") - print(f"API URL: {api_url_called}") - print("Request Body:") - print(json.dumps(request_data, indent=2)) - print("="*50 + "\n") - - # Verify URL contains the endpoint ID and uses endpoints/ path - assert "204379420394258432" in api_url_called, f"Endpoint ID not in URL: {api_url_called}" - assert "endpoints" in api_url_called, f"Expected 'endpoints' in URL, got: {api_url_called}" - - # Verify BGE-specific request format (uses "prompt" not "content") - assert "instances" in request_data - assert "prompt" in request_data["instances"][0] - assert request_data["instances"][0]["prompt"] == "Hello" - - # Verify response - assert isinstance(response.data, list) - assert len(response.data) == 2 - - -def test_vertex_ai_bge_psc_endpoint_url_construction(): - """ - Test that BGE models with PSC endpoints construct correct URL without bge/ prefix. - - Verifies that vertex_ai/bge/378943383978115072 with api_base http://10.128.16.2 - constructs URL: http://10.128.16.2/v1/projects/{project}/locations/{location}/endpoints/378943383978115072:predict - - The bge/ prefix should be stripped from the endpoint URL. - """ - client = HTTPHandler() - - def mock_auth_token(*args, **kwargs): - return "fake-token", "gen-lang-client-0682925754" - - with patch.object(client, "post") as mock_post, patch( - "litellm.llms.vertex_ai.vertex_embeddings.embedding_handler.VertexEmbedding._ensure_access_token", - side_effect=mock_auth_token - ): - mock_response = MagicMock() - mock_response.status_code = 200 - mock_response.json.return_value = { - "predictions": [ - [0.1, 0.2, 0.3, 0.4, 0.5] - ] - } - mock_post.return_value = mock_response - - response = litellm.embedding( - model="vertex_ai/bge/378943383978115072", - input=["The food was delicious and the waiter.."], - api_base="http://10.128.16.2", - vertex_project="gen-lang-client-0682925754", - vertex_location="us-central1", - client=client - ) - - mock_post.assert_called_once() - - call_args = mock_post.call_args - kwargs = call_args.kwargs if hasattr(call_args, 'kwargs') else call_args[1] - - if "url" in kwargs: - api_url_called = kwargs["url"] - elif len(call_args[0]) > 0: - api_url_called = call_args[0][0] - else: - api_url_called = "Unknown" - - print("\n" + "="*50) - print("PSC Endpoint URL Construction Test:") - print("="*50) - print(f"Model: vertex_ai/bge/378943383978115072") - print(f"API Base: http://10.128.16.2") - print(f"Constructed URL: {api_url_called}") - print("="*50 + "\n") - - # Verify the URL is constructed correctly - expected_url = "http://10.128.16.2/v1/projects/gen-lang-client-0682925754/locations/us-central1/endpoints/378943383978115072:predict" - assert api_url_called == expected_url, f"Expected URL: {expected_url}, Got: {api_url_called}" - - # Verify bge/ prefix is NOT in the URL - assert "bge/" not in api_url_called, f"URL should not contain 'bge/' prefix: {api_url_called}" - - # Verify response works - assert isinstance(response.data, list) - assert len(response.data) == 1 - - diff --git a/tests/test_litellm/llms/vertex_ai/test_bge_response_transformation.py b/tests/test_litellm/llms/vertex_ai/test_bge_response_transformation.py deleted file mode 100644 index 20150501ad..0000000000 --- a/tests/test_litellm/llms/vertex_ai/test_bge_response_transformation.py +++ /dev/null @@ -1,111 +0,0 @@ -""" -Test BGE response transformation validation. - -This test verifies that the BGE response transformer properly validates -and handles different response formats. -""" - -import os -import sys - -sys.path.insert( - 0, os.path.abspath("../../../..") -) - -import pytest - -from litellm.llms.vertex_ai.vertex_embeddings.bge import VertexBGEConfig -from litellm.types.utils import EmbeddingResponse - - -def test_is_bge_model_detection(): - """ - Test BGE model detection for post-provider-split patterns. - - After main.py splits the provider, model strings are passed without the provider prefix. - Model name transformation (bge/ -> numeric ID) is handled in common_utils._get_vertex_url(). - """ - # Should detect BGE models (after provider split) - assert VertexBGEConfig.is_bge_model("bge-small-en-v1.5") is True - assert VertexBGEConfig.is_bge_model("bge/204379420394258432") is True - assert VertexBGEConfig.is_bge_model("BGE-large-en-v1.5") is True # case insensitive - - # Should not detect non-BGE models - assert VertexBGEConfig.is_bge_model("textembedding-gecko") is False - assert VertexBGEConfig.is_bge_model("gemma") is False - assert VertexBGEConfig.is_bge_model("123456789") is False - - -def test_bge_response_transformation_success(): - """ - Test successful BGE response transformation. - - Verifies that a valid BGE response is properly transformed - to OpenAI format. - """ - response = { - "predictions": [ - [0.1, 0.2, 0.3], - [0.4, 0.5, 0.6] - ], - "deployedModelId": "123456", - "model": "projects/test/models/bge-base" - } - - model_response = EmbeddingResponse() - result = VertexBGEConfig.transform_response( - response=response, - model="bge-small-en-v1.5", - model_response=model_response - ) - - assert result.object == "list" - assert len(result.data) == 2 - assert result.data[0]["embedding"] == [0.1, 0.2, 0.3] - assert result.data[1]["embedding"] == [0.4, 0.5, 0.6] - assert result.data[0]["index"] == 0 - assert result.data[1]["index"] == 1 - assert result.model == "bge-small-en-v1.5" - - -def test_bge_response_missing_predictions(): - """ - Test BGE response transformation with missing predictions field. - - Verifies that a KeyError is raised when the response doesn't - contain the required 'predictions' field. - """ - response = { - "deployedModelId": "123456", - "model": "projects/test/models/bge-base" - } - - model_response = EmbeddingResponse() - - with pytest.raises(KeyError, match="Response missing 'predictions' field"): - VertexBGEConfig.transform_response( - response=response, - model="bge-small-en-v1.5", - model_response=model_response - ) - - -def test_bge_response_invalid_predictions_type(): - """ - Test BGE response transformation with invalid predictions type. - - Verifies that a ValueError is raised when predictions is not a list. - """ - response = { - "predictions": "not-a-list" - } - - model_response = EmbeddingResponse() - - with pytest.raises(ValueError, match="Expected 'predictions' to be a list"): - VertexBGEConfig.transform_response( - response=response, - model="bge-small-en-v1.5", - model_response=model_response - ) - diff --git a/tests/test_litellm/llms/vertex_ai/test_vertex_ai_psc_endpoint_support.py b/tests/test_litellm/llms/vertex_ai/test_vertex_ai_psc_endpoint_support.py deleted file mode 100644 index 46f365094c..0000000000 --- a/tests/test_litellm/llms/vertex_ai/test_vertex_ai_psc_endpoint_support.py +++ /dev/null @@ -1,258 +0,0 @@ -""" -Unit tests for Vertex AI Private Service Connect (PSC) endpoint support - -Tests that LiteLLM properly constructs URLs when using custom api_base -for PSC endpoints. -""" - -import pytest -import sys -import os - -# Add the litellm package to the path -sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../..")) - -from litellm.llms.vertex_ai.vertex_llm_base import VertexBase - - -class TestVertexAIPSCEndpointSupport: - """Test cases for PSC endpoint URL construction""" - - def test_psc_endpoint_url_construction_basic(self): - """Test basic PSC endpoint URL construction for predict endpoint""" - vertex_base = VertexBase() - psc_api_base = "http://10.96.32.8" - endpoint_id = "1234567890" - project_id = "test-project" - location = "us-central1" - - auth_header, url = vertex_base._check_custom_proxy( - api_base=psc_api_base, - custom_llm_provider="vertex_ai", - gemini_api_key=None, - endpoint="predict", - stream=False, - auth_header="test-token", - url="", # This will be replaced - model=endpoint_id, - vertex_project=project_id, - vertex_location=location, - vertex_api_version="v1", - ) - - expected_url = f"{psc_api_base}/v1/projects/{project_id}/locations/{location}/endpoints/{endpoint_id}:predict" - assert ( - url == expected_url - ), f"Expected {expected_url}, but got {url}" - - def test_psc_endpoint_url_construction_with_streaming(self): - """Test PSC endpoint URL construction with streaming enabled""" - vertex_base = VertexBase() - psc_api_base = "http://10.96.32.8" - endpoint_id = "1234567890" - project_id = "test-project" - location = "us-central1" - - auth_header, url = vertex_base._check_custom_proxy( - api_base=psc_api_base, - custom_llm_provider="vertex_ai", - gemini_api_key=None, - endpoint="streamGenerateContent", - stream=True, - auth_header="test-token", - url="", - model=endpoint_id, - vertex_project=project_id, - vertex_location=location, - vertex_api_version="v1", - ) - - expected_url = f"{psc_api_base}/v1/projects/{project_id}/locations/{location}/endpoints/{endpoint_id}:streamGenerateContent?alt=sse" - assert ( - url == expected_url - ), f"Expected {expected_url}, but got {url}" - - def test_psc_endpoint_url_construction_v1beta1(self): - """Test PSC endpoint URL construction with v1beta1 API version""" - vertex_base = VertexBase() - psc_api_base = "http://10.96.32.8" - endpoint_id = "1234567890" - project_id = "test-project" - location = "us-central1" - - auth_header, url = vertex_base._check_custom_proxy( - api_base=psc_api_base, - custom_llm_provider="vertex_ai", - gemini_api_key=None, - endpoint="predict", - stream=False, - auth_header="test-token", - url="", - model=endpoint_id, - vertex_project=project_id, - vertex_location=location, - vertex_api_version="v1beta1", - ) - - expected_url = f"{psc_api_base}/v1beta1/projects/{project_id}/locations/{location}/endpoints/{endpoint_id}:predict" - assert ( - url == expected_url - ), f"Expected {expected_url}, but got {url}" - - def test_psc_endpoint_url_with_https(self): - """Test PSC endpoint URL construction with HTTPS""" - vertex_base = VertexBase() - psc_api_base = "https://10.96.32.8" - endpoint_id = "1234567890" - project_id = "test-project" - location = "us-central1" - - auth_header, url = vertex_base._check_custom_proxy( - api_base=psc_api_base, - custom_llm_provider="vertex_ai", - gemini_api_key=None, - endpoint="predict", - stream=False, - auth_header="test-token", - url="", - model=endpoint_id, - vertex_project=project_id, - vertex_location=location, - vertex_api_version="v1", - ) - - expected_url = f"{psc_api_base}/v1/projects/{project_id}/locations/{location}/endpoints/{endpoint_id}:predict" - assert ( - url == expected_url - ), f"Expected {expected_url}, but got {url}" - - def test_psc_endpoint_with_trailing_slash(self): - """Test that trailing slashes in api_base are handled correctly""" - vertex_base = VertexBase() - psc_api_base = "http://10.96.32.8/" - endpoint_id = "1234567890" - project_id = "test-project" - location = "us-central1" - - auth_header, url = vertex_base._check_custom_proxy( - api_base=psc_api_base, - custom_llm_provider="vertex_ai", - gemini_api_key=None, - endpoint="predict", - stream=False, - auth_header="test-token", - url="", - model=endpoint_id, - vertex_project=project_id, - vertex_location=location, - vertex_api_version="v1", - ) - - # rstrip('/') should remove the trailing slash - expected_url = f"{psc_api_base.rstrip('/')}/v1/projects/{project_id}/locations/{location}/endpoints/{endpoint_id}:predict" - assert ( - url == expected_url - ), f"Expected {expected_url}, but got {url}" - - def test_standard_proxy_with_googleapis(self): - """Test that standard proxies with googleapis.com in URL use simple format""" - vertex_base = VertexBase() - proxy_api_base = "https://my-proxy.googleapis.com" - endpoint_id = "gemini-pro" # Not numeric - project_id = "test-project" - location = "us-central1" - - auth_header, url = vertex_base._check_custom_proxy( - api_base=proxy_api_base, - custom_llm_provider="vertex_ai", - gemini_api_key=None, - endpoint="generateContent", - stream=False, - auth_header="test-token", - url="", - model=endpoint_id, - vertex_project=project_id, - vertex_location=location, - vertex_api_version="v1", - ) - - # Should use simple format: api_base:endpoint - expected_url = f"{proxy_api_base}:generateContent" - assert ( - url == expected_url - ), f"Expected {expected_url}, but got {url}" - - def test_custom_proxy_with_numeric_model(self): - """Test that numeric model IDs trigger PSC-style URL construction""" - vertex_base = VertexBase() - proxy_api_base = "https://my-custom-proxy.example.com" - endpoint_id = "9876543210" # Numeric endpoint ID - project_id = "test-project" - location = "us-central1" - - auth_header, url = vertex_base._check_custom_proxy( - api_base=proxy_api_base, - custom_llm_provider="vertex_ai", - gemini_api_key=None, - endpoint="predict", - stream=False, - auth_header="test-token", - url="", - model=endpoint_id, - vertex_project=project_id, - vertex_location=location, - vertex_api_version="v1", - ) - - # Numeric model should trigger full path construction - expected_url = f"{proxy_api_base}/v1/projects/{project_id}/locations/{location}/endpoints/{endpoint_id}:predict" - assert ( - url == expected_url - ), f"Expected {expected_url}, but got {url}" - - def test_no_api_base_returns_original_url(self): - """Test that when api_base is None, the original URL is returned""" - vertex_base = VertexBase() - original_url = "https://us-central1-aiplatform.googleapis.com/v1/projects/test/locations/us-central1/publishers/google/models/gemini-pro:generateContent" - - auth_header, url = vertex_base._check_custom_proxy( - api_base=None, - custom_llm_provider="vertex_ai", - gemini_api_key=None, - endpoint="generateContent", - stream=False, - auth_header="test-token", - url=original_url, - model="gemini-pro", - vertex_project="test-project", - vertex_location="us-central1", - vertex_api_version="v1", - ) - - # When api_base is None, original URL should be returned unchanged - assert url == original_url, f"Expected {original_url}, but got {url}" - - def test_auth_header_preserved(self): - """Test that auth_header is properly preserved""" - vertex_base = VertexBase() - psc_api_base = "http://10.96.32.8" - test_auth_header = "Bearer test-token-12345" - - auth_header, url = vertex_base._check_custom_proxy( - api_base=psc_api_base, - custom_llm_provider="vertex_ai", - gemini_api_key=None, - endpoint="predict", - stream=False, - auth_header=test_auth_header, - url="", - model="1234567890", - vertex_project="test-project", - vertex_location="us-central1", - vertex_api_version="v1", - ) - - assert ( - auth_header == test_auth_header - ), f"Auth header should be preserved, got {auth_header}" - From 936bed056b254c0c0c6a1ebdc364139cc8f5a247 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 14 Nov 2025 17:43:00 -0800 Subject: [PATCH 40/42] security fix --- docs/my-website/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/my-website/package.json b/docs/my-website/package.json index 955e63c2d8..d73633817b 100644 --- a/docs/my-website/package.json +++ b/docs/my-website/package.json @@ -50,6 +50,7 @@ "overrides": { "webpack-dev-server": ">=5.2.1", "form-data": ">=4.0.4", - "mermaid": ">=11.10.0" + "mermaid": ">=11.10.0", + "js-yaml": ">=4.1.1" } } From 7faff1a7c0cc89502ecd97a4cb55636e6670fd10 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 14 Nov 2025 17:43:43 -0800 Subject: [PATCH 41/42] pkg lock --- docs/my-website/package-lock.json | 44 +++---------------------------- 1 file changed, 4 insertions(+), 40 deletions(-) diff --git a/docs/my-website/package-lock.json b/docs/my-website/package-lock.json index b71a15cc8e..cc20e0d830 100644 --- a/docs/my-website/package-lock.json +++ b/docs/my-website/package-lock.json @@ -10296,18 +10296,6 @@ "node": ">=8.0.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -11092,26 +11080,6 @@ "node": ">=6.0" } }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/hachure-fill": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", @@ -12148,9 +12116,10 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -19035,11 +19004,6 @@ "node": ">= 6" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, "node_modules/srcset": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", From 6063a751550deaf84f657773c6870eae35f133b0 Mon Sep 17 00:00:00 2001 From: yuneng-jiang Date: Fri, 14 Nov 2025 17:48:44 -0800 Subject: [PATCH 42/42] Remove Description Field from LLM Credentials (#16608) --- .../components/model_add/credentials.test.tsx | 50 +++++++++++++++++++ .../src/components/model_add/credentials.tsx | 2 - 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 ui/litellm-dashboard/src/components/model_add/credentials.test.tsx diff --git a/ui/litellm-dashboard/src/components/model_add/credentials.test.tsx b/ui/litellm-dashboard/src/components/model_add/credentials.test.tsx new file mode 100644 index 0000000000..8e356baa12 --- /dev/null +++ b/ui/litellm-dashboard/src/components/model_add/credentials.test.tsx @@ -0,0 +1,50 @@ +import { CredentialItem } from "@/components/networking"; +import { render, waitFor } from "@testing-library/react"; +import { UploadProps } from "antd/es/upload"; +import { describe, expect, it, vi } from "vitest"; +import CredentialsPanel from "./credentials"; + +const DEFAULT_UPLOAD_PROPS = {} as UploadProps; + +describe("CredentialsPanel", () => { + it("renders without crashing and fetches credentials when token exists", async () => { + const fetchCredentials = vi.fn(() => Promise.resolve()); + + const { getByRole, getByText } = render( + , + ); + + await waitFor(() => { + expect(getByRole("button", { name: /add credential/i })).toBeInTheDocument(); + expect(getByText("Credential Name")).toBeInTheDocument(); + expect(getByText("Provider")).toBeInTheDocument(); + }); + }); + + it("displays provided credentials and still calls the fetch helper", async () => { + const fetchCredentials = vi.fn(() => Promise.resolve()); + const credentials: CredentialItem[] = [ + { + credential_name: "openai-key", + credential_values: {}, + credential_info: { custom_llm_provider: "openai" }, + }, + ]; + + const { getByText } = render( + , + ); + + await waitFor(() => expect(getByText("openai-key")).toBeInTheDocument()); + }); +}); diff --git a/ui/litellm-dashboard/src/components/model_add/credentials.tsx b/ui/litellm-dashboard/src/components/model_add/credentials.tsx index 1368796a67..e36a759294 100644 --- a/ui/litellm-dashboard/src/components/model_add/credentials.tsx +++ b/ui/litellm-dashboard/src/components/model_add/credentials.tsx @@ -143,7 +143,6 @@ const CredentialsPanel: React.FC = ({ Credential Name Provider - Description @@ -160,7 +159,6 @@ const CredentialsPanel: React.FC = ({ {renderProviderBadge((credential.credential_info?.custom_llm_provider as string) || "-")} - {credential.credential_info?.description || "-"}

uE^RgiwcN3rMLTXBlHD5^loSl zDu-Ratk`bR<(e(d)RLW_)R9!I8!+M7(=ce!Wl3{sPOqyeU3*;8_B8c4)x`UV&=tP7 za0i`#Stv++zr1<5&dYDi9n_{MOMaLJ+TqmuIxF*HQMOAhMxEkRRSEQ{5i-yVM&=jx z3Y!_TTo(nG8Qd@``@CnYnqEZE5u2T*vJ+;mDXoHUs-?Cv5?2$IZ*VLRB9V+=G-p(+ z=^u(%TByM(Q`3~}B^i~?6G&phraNIg!`ssU6i29qIRRM~X|AxR#SjWq&P!c? zNqH`!wDOh-zfwu;%;~B`hlz}|$SQV{ZspFbpMC*K0f#7E5p4F_4%@}V}tu$mv#s^Kink&-NXBmGvhJs$*C)3U&$ z?vr73nupc2lcD&bJP?TE>MM2nOPb~~ZMfEwIXAoxmnvSXUL9XgDvq=FR4tcVnV);|#cV6wLe`y}LYN0%zWJMrx22Nm`$1xxcX z6%IVZ^bR8P?$5Q$^1^Mq$9<*;$`?I}N)QeRM=9R}?w#=n1CMRJv^b}n*Vh;G`M`zB zV#Ka0%GmcgTU<2I>T)MOT#Rh%vY2l!FN;G&Ari$35a`MXe;362b9>%XbJ2#}p!@Pp)N(WX!* zqS6H|<*Fp_0Ta$9ergbtneW6iiSxDqkt8~7KnP$*SzBE!>5St-g>VMG3FhrXQppmB zxm0#K_`SWkb&(9YD}kFbEF3eV5A+`fSws26Hkd!~n^}v(7hh)v`}X+~vKGs`)a3+X zxVaf7>{a=auYbPF&b|v9#Aya>fG?nI<#VW`+sWFPSGVd8`eg?5rnVGN%clc!AmCmS z;XdT**V~Kta}apDv#8HQ$5{YV`#B}#;7eQ?Ct*Q+(#*Rb!Dr2XL`;vAUL<~pd-INT z9&0!iM_oflKM64tSUB{|wbIkICYW(CiF0jeJHo#>jybq;HK8(Hk(2bPuCeWzPDXb+ z4aeM+X3T z!yCgK3-cN&meHunrU$W^cQrTz3MdLVS%N%)8(FvN*SeUFmo_0+eCIj!gx%(-&lFcn zD>itt(YHiKmX_sn4>vut=bh@#yYYfVtZGo`ox@>HeSnEQ_(y4{5u4cBq-YeE~ju1=36g5 zKi-moNvmX2Yjt>f`${SjHe4^=Ru{%Y2GOxyW|DKESlB|bXEN)_=-Ep<&$UJDy%eo{ z7tZiZpUtsa=&a?q5^BG*g>7G#H3*1O`Y>hBIcEWLawRFFBWk)=wq!I~2QPbd{$X)L zX?*2^-1K`1PY!A;;se^6_}F{SKU^N2``lF~Z#>`S`<)h63n1hPOU`=y8`NMT>=J80 zuQHlonCFfJvDjk$Vz)4iQPa5U^ZU@I5T&(Yb`Q7N_xrFzHx@(&i+JABz_wi2{Nr2C^!IS>?Q3xJWQ;!=k|z5jmSVe7pgLF@~hzkXNa!JpeI5fIiAI zDP;WWNd~>I9mS{u;e}k(5;)rC2wPq%I>f>L!Z@E&4}3H1-vHHialIq_B@i6}ES2 zlPKqL%`LZ>6piav2dU&iyXC2VgtOiK^2IFIEXAS$Uq{BoE7q*>Sh(H6{3*rRyZRlT zBstPod!>s37IV>Y9f-u4(B_N8IB(XNsF{1f7k3t})bm7iEcX&8axgw31UYh(Z;Nd6 z<7Q$h2ptG3`ChxfIa8}^TU#lW5)o4?9qVWNZZQ6BeWcu5hGtwVcHw&q16)vsMmEMv z%c`o(XTGueHa%gSLVHfoBrkOv#{#y9R-BiM3&jLH;}Muvy)=vBE5J^&Uy7`XSe?gF zbq~}IrGn0)rPSJSRR2nYjSB2 zJwRd!_LPE?)fneT&+FEHFwvmd&oT$dhq(YnfkbX=I+<-pou^oPUIFQ_S4a8z2m~~& zux3Ynh$Ii2xiz%%CSwO6hb1YSPCcb*q@utgFB!6Rn8zk?Omtkt83 z>@iz*7Fm22VZ!RJrF9@4%~5RlEs{lj+yhAZl8URpL07r+Ms5n)TlRtNPSok;?l0)4 zm5eL)kFRuPnyhn;jB(c|bSzD`(6Mld8fbk`z9}f_(q{~k%AiPDmYcIECjTef*m!xL zROXIZ&~Oh>Da&yHJmcy(k!8WVcq6&$dI}vKAHCH9$_8=gJ-35+N9RK=7XI>>covsT zcT3Y87NcpIrjH(Q^=3UEseBt-K7}Z(gk9H+tOH5PRWj_P<{;}m(GKO1!2N3tEzO89 zma=sZd^$n06XP&4>5BA2R1onQj*%znoxWrq8z~2XcD24vZeTXNXWDPNyl7hllmr$I z1c~!*`h01=!vtrL&B_q9DeO~UAZZdIFZASTezJTK;Oy}5nv`JGcV9?@RLWh%?$Be| zZ~h9tT{b487Z9=%``h)E z%5VEMp-9G61qFr0FAVQMZXr2{gQqhGx1*c@u*GR!QKn~xzi17!qf*F=^#~eTmYtCX z_h@(U&iv*2LfPJYRTu-&HWd%Nf!8Y`(lg&ZQ_a+tv*(y$2kxxpR9dBgco-6Y`mlPq zd;$jcKr;b`xPnQ{Om3wxjmvWH08E*T`)HCL&UkTO@JD>BH`~SWRM6kz`+P7R&^^=z z1w{Cz%C^WA<-gAYXbX#9iImD+Ppp&fiN|P9GaA#rc()_?Oxud)5O!oY8ZXQBLe-l~$0U}PKD;XpIK3@UtO$z5;W}%Db!Opg> zUD}!doTcaEa#BIs_bMw7;B{>;DRh22FLq;TAaPH22md(t6_WdF`h-cKZnnll$MKjV~q->^|o&S~BWDon?E9;tI zd~{VvYqadSp5g#01NceeqnVpQ2cQx_SNC%FiU2croo4GPVg(>NeXoT-ZI=m{Sj)bj zHlJuOT=L~F_JI#FBDwvbPE%-H>@kLUbgj!>7TaR~M0RPi*J$d^NI3i1^@0tAn!N99 zM2DH#{AiAWP}$q&0H4+8ye8oc!WB`)38PwcpjUQiM^a&YG|_ZM^QMu-YNJuthlgfG z(W{ma-w9EIpMXhWc!NfxG!CXC#$^}Hfy*sKv&{p1-X<~Ll?)ww4g@MH4+>c|p7VQu z<~IHTvAn{Da>DCND~E#@U|j1iK-==(f}4`n6hPvaR{yaZgTiZ}nGVVuM|4qxPVfp^ zfe2|){zGZfviD@qg)I_*qN6qDkiGWeVDVH=D$++%WuFhf^)?x)CNDjtETOmD&s*z; z+Mw^nUUH#CpI^GTH4_ve_ULgQpQ63Iz-Vy=Q|PIxFy}NF$aEg*=gNzj)l*_6MiQ>q zNzZeRK#|ayg}~x7eFvUFTzx*w^R7mCknL!`>NhckRRB8oqf{5o z#-$j>igKz#gJP8eSej&~fb^lwH1zv~@oCa}5Gbs4d&C zB0VZ^?=A2?XHQHVx?PsQ74lKo!5-uuodVb_-k1>)>YRwMs^UQI@HOUm6?V?x(Q}_GIFsz|FHg z}NP-T2iy$tdJlwvW~*2|^K1vHk~1=PtCjw8&Fg|G97DKWTdy57?DyJpQGI{fdezdr2uE`UtrOEJ5xsMZ>x< zdqtxn@0!^&6t}v|qF4h6&XZ$_k}S!QR(FDS^M>(YVMjDY)fAT*-+eiue;}Qz8&mM$ zLnKF%^K&Z5%B3fT8O~E3jQY}U26+jZ7Q7HNFDVFC;ynSHHci^aFE_uKPZGO4z{(#* zihn>`-V8ROswx6SM9T~mxmuzv7|0{ai)qi7q~Z<2p!7%daTvGC(Fso)k>mPoe#8fr z?ecMjvF^`Dr+HI2({@l^Fp<9Xd~%6GcPpufojtX|*bl;ufvtJ&fm40O60cIkoeu4v z0)EqU3#~_haO~b2k)GjEg0SP7GwYCGbu-9nz05h~iOv|N&oIi##yn$MrGVyu#YBQ3 zOJJm1a18B%YhB&RZ1+8hk&)pXNo2P4*T=(yPK?4^#6Vn<;}3=3*6=tp4=qsE)P`yt z-4y|TK0v1(;SH?%@@Jeq2LO3m3}psb}GoJFVywv(=~w5kAS092W-|Wr-8EKiUfi@Clyo}rX88{!!pXH`f}|~^L{vF zeIlS&)3QykqUo`=m3B`JL13{jIp^NMy^>K1+Z1{vjwCT@3`DRl?xOR+DwYK=dtfkwAD(F|?GNOluiy zio-62oO4A^^A2%YZ)$odltCT@j+jy5dOyL!sJCSDb?;RxHRSZpaSPS$EXJ=uk(V_> z;K@+J;M!$~1@!rvTX$7ig$CXhfvs37To8`&fJg@he2DaiMCNQ(>pVau&-h> zD>D-yItOZ$u}Ev(?^>4oICX$FnC{(|48pgt0Iqx+mR2|h_XT8JC>=T88 z4yiB$3T6LC{*hSb&?GtUhhbuGx3bwbw+%p?Kx6DN$0`-j;iI~%ec>26R9}^m#Wxc3 z)V$4Qz5#IzaF-Az#{T&u+qRF%Z1lJVnSiD!iG<=wK{k!V{I0zs7G@ad$w}a-Dj;^0 z7}HHiB{nk~Z@N;$` zA_A4S2T23V+S#rZtK;l=x3O5GuE-lHCmx>ehqPR0MYid?&#$8vKea9-%aR>`DFb2&= z2vV%&YAiePW3^0MQB3Qro6^poUZqr^3GGK_Tio-a6?s2!V+tvws|5#g7K8|gM&KEI z!%P9UL`^O8v%yGaxufw+%U^j;_Ie_f~@bJz6NSMm6vk;9q|Wl1uA8QqNRbNQ)Tpa<~w|adP0i~U+KluD~f?-|TfPQa$&ZlSk&VpMy zACO?18vMkZ12D#{t&#Iq*rtXac&oRAoaZZG5wcXF6+Z5L6QDs(&hg7TC|UoYGoJ1l zZaT<%DcTlP=NHRqZF!w|9Hj{_#SKy`1D|JcBzf+i-Wv%TiegyjvCHI7g}}3?wG^ON zwE|WX7Zbt1rgvQ&l=T1JBdrd#t=5~oyt}dPl=W|&M>)Mhj_e;at`Y6ZHosWIICn~Q z6NNHOt;jUa{p%nA@nax9_E&LJMh3yof>=X!d&SIckr;?yu)4eCbQA7UGVwg`YUfM# z#t%~w9WvZop%V9`eRg{s$ojBV_o&1i>d|9H*@8KNiy8VoUe!B~Q$&!fO%NHksCoEp zsO8#c_Omn3rOMNTZBjw0RCB+O6ZbGJthqkQTlUso**bVy&=uaGL*#qsZt?|RWC@ym z%1Qom@^G#4Vyb@VUZIyNJ7AYVDQVy|bsE&i@Sfdvah>+Zjf6y>x(2{(>V5BGAPR60 zBMx@{NKwDnMTEAT!?aUO*fAAhsBTQ|e&cQnlDmqtSQ}!pXjtZSW(dT3BAmUqneiI% z%qRIC*MOnd>vnVAGdG2U9_#P3Qe(m}dQDQV=cg;gs8a97=&@ zE+6zGPln4^0)od^Z$`NSQ%f#W0x=r<s@Iz$+E1Ck&!nR#7A_{EC*i!6z>@y zDED(j_eh&wQA=)m!>SnhBqZoOF9SE0Z8@4x2M=d)`k>8lRzKs|@<`l=+grBpjCu6h z>aOH~f81-Ed8nHy@)nu2jD3BvJWV#Oe?d+oyFD#TjC+6ju?pCQE0|{$W@)2IVfLV< zuP`DW*Lf6q)xXe5l)QgxSdLFdFVVi*H z=rSA7B28c#wDFDkCQTC;dvubV58(QjygQSd`s^%v<W$VsUFT;H5y(MIGuD zhREnmH%g}~N|U8r2h60X_B>S3z}eIyHE0Gv`ofkSERr9px2t=wv+Qtdk-)~p9y59f zm8)I=p{P|eOqI>Ivd;l_6U+r--BT^uE^5<=&-GVQNtIZ4Bu;KHeKRfWpe7QkGw%!H zA599{W9Bm!3%Y&xvS{Xl2AUoVJd`jZPK&D1u(1T?Ld?xPpnYb-oGe^SQM*@8EGvgc9ZYq83$rS>~*LmwIhn$w;gu#;f7e z;7qX8d0bku@5}6If#mCd`P!8~pJvnOYH}{>HzXx1+MAb6oOXSwXtEu)R=>jPF$?t& zAzI4jlcqCmDufhN)Gyi~e1a`p(!~sSafqAX^S`cTx9KOBJ z!Wbt(5GSwTjVetEjfk#}`%(kO)a>J3A6F7y-e3Km0J@z835~$mEZ+t)nZH{O;U&s9 z8CVWQwJg9~HLKo3u+-MudvVJq7B|S~HuH*dqv!x;!qq`1h(DU^1}L#y;TmQ>lI{oE zq!72Lpsnlbop)E9`}E6U;+mXsAQNFZ9u*m~Acxw;2Dvr-br$BRiUWY(43`?wWH=ybOl|wET))CK)aZK3&yyYD=R%d#TJ_Ym=5DuKtnuKxRUiM1br3 zfjEEkP}HZ(*H3nLig=To?(S>oc$CV~Dx|As{bN)oHyf$KV;3c72 zxqw#0F?YQyTH(1i1H|!fv_A!7i!Nm;C-Mt&{0%Pl?JM4m&_^+ zGs5lxrcn<6oOI;e^NyA^XEkIsP2RAQ^`>IISIVVvTz4QMUxH!82)SrPs3p^G2{Y6} zgC+?@h-%7C*$qXPS05=8V@C!llY@F;JSud~9I({-k3{qgDrnz24+CoRW8(>~!hpVc zv2046Cp%iqKkjL*VNx>N!ZK%pUx7SY4X+|~6@#t1UC@a=LN3F<%)pbO1jQ}faJius zcK*#=<1w9TmJ0HuD^?j4Gp)i465N91SqV_zn8erhX6LuOKEmXRiRTGd>(%ISZ>SWK zV>P463X>jA zl@R=c+}gAj*YV2L(L|ofN>cx{FsKt8g@}rzxVN;%my)5{LJtL`qmBkzY4+nQAhyj| z95?;jt%if$&L7FX@LO)RyIBd4YqD(+@6SkqF+%O23VG>DDR7vww279evLsP}m;3GR ze0xlG!Xh}gz=EJZqu#^b0s{C{E^fw&WylykVb`u$?*SZa0mYtS!jXoL#U_%1^Cd1! z2+*9E3#^S6YXwvc#8Md+gB~f?$%RF2a@PHhxT;79ssoo04wxk@Mm|B3^-H8@tqiO9(F9iX{1SJEp{=XGxXe7*5zph9 z__|lNvHUIjSTX2nlpE9{Pgv53A1_+H*aZJx{2uxW2HU0Orc5{9pn!7ciey~sHbYz8 zVhZ@8W(Pv$G0^346r-?g<}-xaj>nbzEq8ISZ1n=t@o;-JFRGf;OKbV;Sc+BECm2^IC7Rd9jQJ6TaM z0f2@b(448=y3fo24cb8z4WU-Z?4DK-wP{!Hk=3b1Z@Sfi>~$`>kY>zR@L6tfRgcmB z3I^AWDq~T1hg>Wa)8t-Cu2^kxec1dF8jl!K%fMa2tw6mmh`{z7p^L9$asnnD7d`D? zsSnEL8D>{fh_X}Cd;zke3U5~Bw~E`4|2}v(k|Z-&7#8sx zc?H86u3>r@gQl{YP z4@RSDtctr#p_IffpF^tB&ru*+%NB-(yTDbeh1y)IY1(oY1kkLP-BxCXqbWsC7nPia zfT8fN9m3%H7nA~;R*1*azkOVPUB?bZT6DnM6S18@wHq7Dp3(S(rasZqiQ1h)>wp zvY}~@U(%h>uh`!Zt%w2j@>Z1|DE2fzR|C7DX&#^PX=!1htg3WT#`X)Lzsn`f(`>%z z!?@JAkBCN(mV!HQuC2~H+b9Ow_@=(`FJFy%?)ZfJOZ8Por7XP9|HcwmRnaJsTphP4 z5fVP`flm~}T>@?exIV%4ki8CSW(5qkP8Kf}CwVGiS4G|=_L99^sL$FJi#&1Uz9yU( zrNPdDx`g(eD)KxuH0MOg$R<1hby%rD4@G-z${0oWp?JT={$7J#h3@%PVd`6tJbS%P zmqBk*;K48C3QQqJ2B-8Wa6~HbX>u>=dja;J=>W>pge##Bn`3Di;s)ZR@ZS65-EtmZ zKBTY*x`QdIl366gg+y9`+)sjmYnZnC5&AS0G`3i&NaBiagzT;U;0;=i2|SZf^1j4U z3wpC-Xax(N+@%ccZ!T|kz{_2qv6}S8>sy_q_pe9vXw96Wp$Cmt7nB4Rp4{GlEqE70 z$7M%*P{%DyT6s1F6{VI&qK9sF>CykC88Bf<&{s@Tg0VKp1i)Xs6B<6~ql6o&i-;>g zdsZ}+W|hrN$)0k_eX}tsJwFY$Al)#9>(u0u?`r&I#h-Lk7 zC-&9|2RZ6!USO*XW;9T)h_QAxu??sTa(Ui-$+*a#=qIv#wnuz&t-Vx! zLaGUHNgW_u)F;V*qP)f>X{bDL+>Jl~J5emxhX`fK7JlYKeEW&{v+~Of9t5i@aEvqgl|> z&njs7c~9_Spvk(|*rNN=Oogf8OBS^cX2CUhxUh`kad`u{dQbDRbHzD*V(+*NFny8b zb}Fq6?~1jw^=`ETmc+!_)OXIj+Vsz_5S&F3wF2{T(aWDd`sXEo-V?FHdxIC7mGrhl z>4SK>R0=Ji*aK4wylg!9$E}}GioYLgv34HJ?#2EcrEg?HsP(2YXhSg0wK>H|^XAK6 zp?H~;O+r_=aqtPmqtus_LO<<9 z>aw!xVUK1IEevQ?scF-9z*{KT;8qm!-HFZIM_}(X9a^0abS9*&MnJ@$-&AoLL`ILw zI`dxRceVhm#G-3nR!+N9BjG#tI6%&uQ9kGQ=4I;D*XC2g)ZJ8&!uBtdDx8bFNCTXB z++P2Wt!e>Oe`Lkhpn~~{@MTb$lDIOyibIQl#tc3jL_GtBA{O%0z$UQ<(GX<`^*AVp zvx#3$r28!0zf}HR{0x?W`kI+6Tfe6HH|lHZTUorI(JTm}=Ah11XfzEZ;xT~Ki2+j< zrDH>HZ;gQ|BMI6OAy*$AlftVP;-y?IKzZz*a+sKGTFEJ>s5t^1&9U;>_36gL9wLnHoJ;Y>Z3tPiSY!Gl>=v#^Opw8HO z+oVlnTjOkARS5r+SEj3Aa@K%Q^V)F@n`vU9~nRx4^6H@ z)CM#c08ObX=_g9h3N9J8e^UVEG!W$LF=98a4(sNOyR8h(cfEEpVSM{$bv!`_w6>c7 zIxQXyU@=x}($!{w$r@!Smgw;y#7(%!07UQnU*e|*}OTiNRT)}G2LoaLAA>GCiC&NnRqI(Nyn z_T61pFxNM0TNi!r3^WSdlYBp=bKC*aYq$gIYm%JT!W9`Xvr2Yuoz5Tp5@o2EzZhTn zt*D?5Zc?qSPk0%%aU~<}x`KiOk1c7kJTd|`w6(rg4n%v7E}K58?oMW$gw}jRnZfZN zuI;~Xfx0=@{){w${8FagoHA#nF6t*J_6HNr#9^V=-X`z?z|u~TAPi1`!D9ONaE^pD zNI+J*xAKSE^uGiysOr(aFS;)XWe4XEU{y9^@l`U1MZvH#`;Cw7?dPP-?B~CAso1J< zRW?j6%aA7L60#DhG)aEP|7sQuiVX>d1hQ2Au{UDo1+F~cQLt<kPLy)EC`!@6xpInerP6^U zS4j?&LlmQ>5w>YpCuPW$95Pn9qJxNK&gLpC##T8D!(>>@$YEm}_I)T#%WbnTu5A$XRNhGgW>d1?*#uy|WG2^-;sH~Vgn;-Z+Lx-QKe?$eO8 zx&$_baB`xljy%qnFdVsJpv2r>gbE?iSuVcF`0}t&e>QLSq|sRb5cR^AeukTdUVLY` zMxcGqk=W^N4b<5LC7dpwh?4Y8CBu~?5o}su{0$%u>;&7NjlkBdI{*{$0@1?d{t`=4 zr_4HPW@M`iAQqP>iH^u_dvz8=`8PGe{)nNTz+N%Tc+Ie2c3$1KvW&hW*fUcb1W~d-Ez7!iQWC=h zoXcNCV48*M?g$=fo^JcrXw62;pJEb0Rg04?*@PjHWsHyOu=h!bHFuFwqWxso^+yr( zp9Sn2W&d}GqQBnv)2~PN&TUaIiUvW!1dGhEz<;w|s-Bnybo7)6$2@;dH9M#vT=GiQ zN?UrLChuEZ`hP$CU$RBD+Sb%P_f2!Vq+1K7+;@Q;l9w}tA1hwIeAxs#{I~pDGZwz# zS8DIP$Lx~K;YV9PS^X0GjmTBbz~(9bW+lZQhPL*-c={{9 z>wF3QI-@wHhe>u4u40muzJO^3i^+W%+N3IZ())2ZJ9P4W@w4BB%?Jqwe4s1e6}-#% zm!$rCMxifRM!#=MMj_+-QOWF@WPl^SQ_@1oAS7y7oV*+(nGamAP1`AX2Y96{bf6?c zvZ^@4|N8kIFT$Ke5L9J?=ykpuoy&-v)sMRWjW0OKIBkpBPf|dYtg?Hw%u|9|5#Pa` z0=x-=fdhMqQSHpj{8Syvj%u-y2wh)*?7C}7pQr*)M^FI+%zCIzA_?MQ_?Vn6X5XZ; z#%;Y~EL?eF@8U5*C%)Nh%TeNv3fOxu5U=;VMuDWR{9LqT4!R6jQo1)5*wVJCfrk5> zA+B<=@ut=B>3|dS@&gfjH>;8pHoYR{-ma*Ki2}Va2n0-F2=`fng1-{RF7uo!cczR~ z-t&7{5^xqsRJt;K)1RHzUsJD2+ecx$!}FD{B(3fNf)#O;@ueqg9GPRy0sSe=gx&|V zZrIrH@N;|7>iA=#_~!B8w}!IbSazGws6@>~lE`I2V;H!dMM@TR7lydBV%b^0mhhuv z0R+ATvqP)C(3dJ=tldH68Nv={O85zEt|Rb00WMI+BEJo=@~aGn=)CVomCpB>udx94xjkSq z^IKk(s~kvrDqs2@NdjV(E2X))>}7bA#Oh#@Hb^}B ztJmY>KLl#IbxXgLLLY_;TE+Ddef&kc(W zzkmvfuq@Ll`=X>wQvS=Z68T$~F_silK_TT=>TSM+j z{B`3Wz_P$%B^qZZqom{TtSWQQg_G7!xY-sl^8*0v=7sIU+u41R^d)i582-Ml8RVgT zkBxsnj)&kl3a+)})&5bR`)}X%*9GFx(MLhQ?mVfmctR9aSAWYTFES$cbe+)s(}R4E zdG~jWB=jyy`2U6V#71E9C)Rk+$;z#QKH7GX&*!fptqYZ+Hu>#a%^fksao(Pn6P6&1 zKJ4AEIua)dW&b)W|HT(8ZkI9ElUcNk{PSmEjJJWcEC+k>7 zS1*S8`eYD181LO^`8&?M^pDk2eD}j*KIC7$S=B}29$T+``2*@g>eH1npZ%wA^mdRG zj$B$E@BWL&_dkk(jB(!Lh2o!|`kxoNE1SWo0w6SCp>K2z_V)IMz2XRuNu_S)1eIY0V9JrQ_4Dr-ZeRDpDyBX6nGBFhfwTh%~W!2a*&k0O<F zNo>;2U_?LpnaWWzbGmGtCUlxC{{tQHzaPuL_doBHRjCj%wJJH2K9BG*=gqh#MguBT zUjP|-d^a*{31;f#quoZ?Q^HD(ydM`|Isu^q>+J93l^!w%aZ$YlL)h4Co8k-^HVrERKGxrn9P-HF=;&y2L+t9`v(LipbRX6;%|N8Ib{>vZ#A7C1Tys|Xo@^?};(f;8g~+|BpYfQCt7T z@;dCo-QPucTQQH%PY7Cmeeoa;l8@B?z~7c7JmLhTsBdn4+Ew%#%CrBNfj@=G4=ZK~ zLG1!lXz<||I_R?8Zf&ci_ip?Yx9NX6N^xpcwBW&jrGhNJ5)t?7;UxdZ!yyfdH;7o` zxkqvh`>y>B3!viTFM&bBb$XSWt46_?aTDG+ZfSkXmkFOfa?UyTv0L4*ZytJApSOyJ zJy&9^-I?5_Y|Kjf{!Ji8XNTJ!&Tl*0IlZHEMPsg3h@GtS2hRKX9T+mi4BRoNjnDN@ z_V)E7|5&8@-`Qalg>j^E?RKh z{d0Vf3M=vacJ|cNlp7NDzkk{P9^7GuSFS>YTzVFEuO(&+gL`c%9DPVBP+M#BA@yzG z!R9|;t_t2eMP?%GQlRDHOn*4UFXsEg5^4%I&Vt>zOY`k2;s&_2?7+LX0za&$CUz!lxR{H5xQRPU~+IYV8Y z5}-@r_{Ko^PS%g7TWdE@d-b=+9kdW)qp?^Ya+HO?z(lf1}0h~aOTmo&@;_;Bex zU=&rE4*9e8{>|U~yFR++%CgDsKFM%PmO2u^R^?PUCxPR6WRJPOiEXk$;-06sDmIvm zfwj>&2$=Yj6tc6bbPhjzn-Fl1PX6w^`Gv9ah@?{hAgOR6;tn4hVYAFMEV7q*&ys@SC@X>2E z6LPgH&sTroYO5VOOco{yxD4h3*n}?*A~?keTPU@vw!JL9A#T5c&{9*?@C}e#zs2yWA zuCM|C`O0p6TXxhpG&JaqNhYu>dp{TD{7=!yzopHlism*p(5z+HFw8{!?w{eNC*Iy& zZM1r`ZQrwHTWifn$e~lR00&5=P=M?mueGKTIpz#1DIeO22HmJm=)xeB>IGmWJ9iaS znnZ)!AOirB-~IL3Z2W3z0tpOEc8eOAwKqEt_TX?R$u6r-ZS3x!CmO=8J5Ch@(cmzV zzc_y|pFRGAlZ*IyZRdIt7y@cvc{sMP_pszbu~AR0U$ET(|0W!))O0S_M84LO+!A02 zMOVG%&QHim;icr7`t|xcJ3B|gh7g5t4J;YBWv$i_iDSF7B_`(#;F~Jv{#uo#GOw1I zY_9Eq%9+LQCR+oOCyhhnvhv;uU(@7c0fIfndy3i154ZrW^4^XC z=5dg6sZygCOfi>@f?c8j*L;ukOdM|2hFb`!RB$E6Tm)2#XeCw&5cfxezOP%WNTSL$ zL%`_wGrI6Nw1pzbc|q#o`@qz5G(k0 zHq&;$_&AKi`iEJe+C*TpKQ1dZhdR3_QYik!?&8qufLgOfh!vHpm*`$>X6Ri;o(t$9@LX` z>w+}HSeW&tG2(^EN+#H=O1WbMPSGN+Ruz2bXhlJhmAYG2dbg`pI~Yo}RRI>gJa8D? zjrdXifD9J-ThP&4h54wBXBiXzq$X7rLvqZteaxO{FtmRjI{Q}TydmJ`C_qsk9UWTm$)23#z@fDawrNvuWeipz;eyOpfx?^h|!kpZU7Ep zB%06^PxuSK6){IoVrx%I5hwze1q>g!M`L#d$RkE2j=2a4a460vX|O=^c9-~eccg() z>dSFLwLyk(ZyTLuR>kDaWz_qF`*g^=v^LjIK%)2Q+V)+O-Lm75Ut*jJTLOFm&C14# zBnp(iodu4ba8=FP!Xnb+`yac%>Eb_J=3k0~Fup3Wgs6!-CJO=GZuM?ev%P?`;XuU) zEvgS=*D?tN!k}uy)|6F}(GH9ku!~i)GI>-!*UGI4Ng=~ZATO(yEVx>tY%f0Q(bcO!|$DkQfkH1`5vWPcg#;e@rm z{qE?=CTQeXL2y9AEfa(i21-5$n1^H6&if#zdD6`Dkaa#JE3&|zB;|&x^P&A% z1;}h4d>z(`p6Z|WfG#q{o|)7eNbBz^i33`cmI5qVOO)4>ZAS7Kq;aFl)5kye4we_D zBBsoWBVH9$jZ8%1=eH0|s-GE(YF7duR}ui6FcLSrrHkOC^Y$6u6@}-t`SU47ArXtd z4;08*_>Oz*!6J{6(>;dc+Qx^F{gocb-Oh*RobsktdGht?vBYOIq8`Bsh36qUTML3v zO&JqIh!zdRD$lV9?k;jNozuSQg*6My zt5;>7Skn$hLc4%(a}WvcWYs*C5&XQx`M0MIiO_-i{#IU@zqrG{?DnK(R}r+`tjC_| z2(e)5_)?73pl*K_gHoO-^e--)UaM)rXCa^?RDz?B_fB zhkczY(yq4{{M3A;?=oPS!OTanD2+KHUrYI^(t&Px%FUG&=yWmcXK5B5zFWB`lM!b$ zLO_0Z`#gv<SdG5h{quxi>nhVHbI#I;%BsC0+v`wg?EykH=!*; zJW0V&x{YY>gR&5p3TdXg6=ghW*{?XH7uK{U|8!K59{zx*D>D^E;pCt_ITQ;|kec=> z0$*f)BR5b1bfa}nR9n>}s%zFL+fr_t5KVed*=a9~R=n_(=BiHf?=e=1se}H}Aua5p ziHhJ|v{eZfRL>vMGL~T8t-Ytnx|H=a6AWB$zGoO%arktS{8pdmo=s3lZ4RoH7m4@X zonHju6g5@59b!^|ytsvPp$YMvoC$=@%;GKHB@dZFL8)VSF9O*~f{0RJZYdLaFXH(5 zyg?kpD|Ld5aM5Gr5#lUL?vT#_!EyyT$U77<{LrQJzsWZ3hu*ltiD#)9<87 zqOgIL!}&`4_q-w`3Oj{sZ`yRr(>;fHnIcAsga2lQ$!dsyCth+{jsm<1RhW zDotrl2PYG${Ce2R^O;AxX?SrrvvtNeJYZt2mQfziqjyp6@ior!198mFIxg=ItevpU z;Fk<9WYqIK@itihxw3+C15y6Y-T9|r&aTw9R(6pPF$Fa}4NT)=1x6#G#+2PWndhEj z?COykmO_8o`mjs%0$P0DjsE8NbOUOT=Z~UTpD7!+W6*z^t2=V7 zCIsknNBm1SdF)Xw==-gPfiq`>{EH6@o>zM&JIzRbKmy+LD-C0g8yrJA^C^Wd8>1FZ zp@`3e)XAnns!}wtIm^OPS-~h-0$KdssBqM+HYH%_au#vIlo#}ZCa6epoZ8zKk!d5E zv4&EkpKU9!LlyD&E(10==WBB9;cGR4%NkSDO7o%j?A5PQYA(mP5j9NDlzfF)SX>xH z2hz?P`K?@RS^m|phG)81to&=S*K8qZyVV8O?qP4)@H{ zCkf!EKHydfFhd&d$Bi38%Et9{%kFHtP8AEZ0s-?UW za?8XATNTc}8%GG!LR(bn@r+X<;uQbfdC6tf zST}HR#x@%Zfn`v`Og`P6AHmaHbAPFt+am$8NW<;w+eJr|HP4pentx!jcF;_sAgpM} zmMylAG$kPxd=JRlQsoBXT3dfPaOKWEemgOSf!;e@4u>(qdWDe#v%#V6L#0vGM3%x+ zX5qN_L{>KHub1t<*{ZZBwpmjTeMV8W-7^aeYDqq`oS#!wqUM@)A&z6}+ckaR?gc#0 zB|aK|zFp_ic3_h=8t=aWl^;F`0UabEU>Ute50Yjp*lpDDM0wGJmP;_%>$lTPEScfS zHZrD;ecL55!(DRlec1$eEfCVB{Q6`^evS}%mq9Ga)D;!$@6OLz@SO_1>mo%H9ed2X zM^Ie-1Xe*UM`sWV)ai6c1$B3OY5AC4jEroK?j@6|dk4P_6|YD(L=5t-YAdTP-o%40 z`UcG8s86KzgIQolmtYKJay>0Mpsw&{*<{^$2!7mO+r^V~tot0}sn}n^r^gDMcYF>z zYbuYE%FRgOSz0)`cy#9fTTRD*+1kUf6ay`96JPd}cor0(VeGPC(qMY!qyx*}*VHqj z1)f^>=_$8^KJN3>5M#H&+@dwU6O`9v`5Qxhwc#(>n2p&o0S`f!lxd;@WW+ECyxrob|&(?IZsvf`>r0bu zRB4zLrmY&4;*Kv+UABK@_416@%3T7%gu{5%1bY2RZ*_Ad)T@;PVo-Agz~p%n4fIr-q|HL#WmN7loUARcjk1P&WF z%ZzD(!&sjr4NTaw<6Ysc-&&dFAeKN4B4*ODf3-99Pf1mR<0Gq#GhUh**XP%1UBb!a zlFMKfI=0?;8Nu7Vc-o9wy;cx;Q^i;bOq_#u!>b2#JQ6uUNGc&eSe;!S`9=z2-^f0s zmhh_LV01S#v}g2KE{yaAnpL%nrZ?nq`%L(RMeRI8X{n5+JPvtfSTZUhD^z};n!laG zsiqriN~7MF%w-1CYbS-5!UJ`IRG%@tR9+po3H&m5z#y0E5weRrhjmzuc|kCGP{naR zrGq0NROQnaIE@<2*3gznj-dUO%Zyan{!xr)rc2PnlIPXf=aplhNLCdpbkF+m;ff2$ zL32so(D9(AAz#Pz+Z+#a>pjCnpx2tbOW#)UC7Spz?Z*GX6paeo$nOg)A>k?_P!a<@ z?8GoexMN=_NJF1BtsyET71kCG_nO@yHN97qjtXzF@&)`uW=;8&AEUV! zb*28k|BPCe#z(r96BVE{Kd-CUC%;=s%jh)be&P2z2H;aPuGAM~t~sT7Vp9V{5=_PPioJ zHa7)fY6ABT16YxuWs^7IEq?1Wu(VYA<>tvK*oU|^Wg&d7C4}7OPtEWrnl&?j!n2YW zfB3eK6fnYWcWUQPcrGJ_(S#59T7)g@FQ?!I$ESk?9k`(Kf`Z#Gb?nFyCQ# z>61A5{5LvbAV({mjABH_FFw_mL_I3oX)99b@9cdJ0x})!`>t3%zMH%R;|XdYEl3En zZQcE>2zR_=J(!0 z#fsJeso}L6Ukoz6(L{anX$f*IRXUx1t%)&LNDElPksBfW{70ew>Pe94>RNY8#zvgA zpnFOj_ZK!;2`1h1J-y7n?|HJB)sT;B&X|IoZHL1w6X8;@-upp~0kv>YtxC@~zI3eU zbZYfW{sRQ6`To=npsYr30MT}F-=_N1n%;bARFYbYoUY9SS9S!0>})hK zOEPR2j0+=5c(RzN?Au>q(6aqVXx8w{fIQkl+wW9A$^=w%anoCDy%S{w{bt0i3aGl` zW-CFFM^`c(1tDU?dTSx+e@K6f~dK3#rIFRXccX)nr3 zo~s9WFh(0d+4~kK&-!{erMD&lDacysTX(Oo3Z?1Y5so zzI(5d@wG8D{na_kkzx|uAElJ-SnolkSF_H~*Z3B^X`MlD_)s zoutLH29%7cpc`3+RHLa(Bj%;(A}qn|SW#P6VdX+MT_6VVx~RF|k~a?n(48NIoCU;u zaMOYYmN@QAn(|x1psGv_Pz3&Ap6w}x+ZRviwVLE*lX^f)Q=TiFRW{sw)+%;L(xihj=|QsV+Yy3ZPl%d&v0tatr+Me z>M_PlsH21F8uTkxea z*X7L_rmDp^CDo&6fWOx-yJICK!<(0a-MZ_4aBXQB+t-UTq^mQg8cO+Y=fiDGMaUKH zi=9{WzAFR2rB4fVG+ywm_rQ;Hf?jzxGhC58E8qBtJa`)#xXwTzN02YW2ahZ>@VK{!YtefH(1+-E1LxXv20{ zwETbv`vN~)LZ|meSjRx&4{rlEV7C&ts_Kzc)2|X1{GDhIol8+}*^*QtZ{2$bU$7Q& zYN~exoRRxIPcnWgz{)oot(GdyZvCjsBS>P&%QLsmvOD_m0Ax8UHB#QexzF$Jk8!^v zNc{a{7X72|(z4?U5kcXH9zCe3JY|@9dWGMuJOR=J>l+`mt^aQ0<9-@qM6sT4#hLA1 ze4%a$$XFjzJ9)-4{$Zm*JrtjjPp0j&T?@MtH^gkNA{2~ zt)f{&Yq_~&5s-^1Y2b}(z{0Of<1g*aC1(3L$msg6IHb4u$Nv`-d3>$pvQ}pGBf`!Gu?{&H@l>N!ny^7>~yD0Ij->B$^Xk>9N7+We|iMyidBl}OP z{TF%lXJRlt^0={(i=aw%DNiQdIS7JJ{Kb280(Lh=)HvbGqs=~SjM8+RZZ*)^y722Plrhc2E!eMmZ2S_8y^OBbKWXm&-C6#h^Caw%zAFyD z#on|{l$nYv%Nm9scR{Rw@8CTZ2}wv$TGfi$3Fp@(iC(eQMPV;k2x+X15O|pgI=R~= z&3C5=e-syeb%+IdU$I>A*rtS_AEFNgElqXcRA~~R#!tqiu zR>M@w9v3})Z__i@@gsVUI)0;H~I%?7sZE``;CKQ!#F<6!}vbU`?dd^L45Kb#t>{f%W5;Y3FGyc>KJbudOF9!vW`6R_{b5E9{V4}=FGALPziL5E!&N&a zsk+{OrpkB)ZWAkqo4y1yzrycOz5sbvJ}2jg88n_RY->TFXxu0VE*nx(F5uRebZ z5L3-QT&|CYv!6Y$!^1V*-E2yH86?mE{SycNlD>mplEb`4Pb-VrpG!#}(*L^3Iv8{R zU2j&;;$4Esyb{y-1vjiubr8;=SLsXjtP5S z(Px^}VyOGtP=0eq7cXfb>Y9_`3F;^8D=pvJb&^MVUcHJZGzp&5ECS|RDHk?rWt9st zwK12qM6XxNRIDo{y}Z*b#l+a}2VUd6(wu^9O=J$y<-zLG@x!9W@_7{O^Z^kPBJTUJ zq`ngWz7HYiR=LJs(|5sbtrT;7isq*=b{6ET+eIBi?AMl*xmpYMhN=7@sPTafmok*MuD&?A?9Y<5I0+@LFCEaEY9!Fy4Fb$D4S-7HEPK-wtQDjF zV>pt5wzGa5V4xheB_FIHjj!Ht4FOqao{aS>OVqRJdb~@T^Soxe4`Y>^=3n8=;v%+- zzSzxp`}DFt#4@DKV?=J%&U@m^tID6%$zeUTlwdfpq`{1d9w=NP z&35@WONWtP;eqpqkmRgs=1!M%_v^e?2fe#+*2VVumBA06Zzt=EFCoF@r1KSZr{^X* zrlzb~u~0BWI@1&!DHY`kGLcjxiuH}xE!z|jQ0qs{hEx;sPjI3I%_1T*ss-*z|A?>Y zlg#)Y5BY6}eC0&FdI^n26EkLAwl98q4Jfc=ss4uB8p6oemm0za;)W{ocSvHI zE^RM6nTKi*D1${)?+=y>itxYuoos#C{?rTTMou2%2ms3uMThAsWk|CR{QHS#uUDO2 z6&7h)Q3*L3ospFQM7<^Q^p?!#tR0GtoF~HPl-ZlePQ$@q8|d^dl7jNggth3p&FuA1 z!^Vub0@`8Ogl*bq#&%PZzOIxEgf7};e$l$emL-fDUHQc`(I4*)!DXlfq|ub82Five z^TIsX7GH9nwil;@d4s|_0dwZFLu)vi*Se(`V{jV@O z7~veW*NkWLM(E2JH>HjDk4~}(O}mD6(jav96W1%u7Z+OuW*bXRy{_v+6+mzFUv>qW zGkUbW(q(-tG)l0efF@a{5;p_uZboqa57^Lr8Tfe%s)1qs!Ts2|I)|k)XG$6fo9pz+B1;y~rb>FFI1y{khP=(#$H$&46YJ^DZNDka;-ilCJ+`n2 z=g?=pJZe-l-l!Ik!Wy0Q=?08Zp+{27ILVzcj0uaxUuptDheNeFTk-vxWsS0GgNTf6 zti&ToHdOd2)yqA3{EgbL3Q~yiAELGs6JbErBd4>i$R3EYX`$`UG1`1%6 zfeaSW3AuD8+ta|hNCWmrTS1Syo$NMvFfEa0V3^O+3&UMV2+fM|@-VRR_k6Q@{yA&7 ze1XWS$j=oo1qTnmrqGr`T=y)da7gp^cA7F%kV={x6oZ}p=$JQcJHMBrqVqfdF0Ge= zn_5t}8=8t{nk*ML9}oW6cNLtWd2fJCN@m1-U1feuPu2{=ZQO=IsBZdo z{T(BdmXm&NQL_&Ukb_LaMoy=j#p~>L77cWweaD z#M174EYH_cBw0IxQbhaCRtFADSI}P ze$V#&R?6l5j}t9hr$^5wM7jJ7rtlW&O)-;>Ic?X2#}`8bnx{Y#Cv>5UpQCPU1TY^7LsAsdRsQ zPGrUir4Zgjgj!RrF~u_JtGr?M8|AQvAI&`lQ_36rUzD*Few_R54sl8XJF&pr1VPTK zpbUc{QV7iNwCC(n47kVAoAgb zo`B`gz9~zDL?%R81lHM%L>3)$K@n$8ttmbZop=~v3q0)iwIOA#<^?Z0v%CeX<2)VdIW*CzY9rvhvwO`1=`V zp^&+;2$CojFP>wQUe8_^U*02>PK)Xd6z?b^~c7s?mUFhx!F*w(s`O5 zAPQ6Q#goqLZVZh6oQodG^%9ifMP=f16ZYbkxM;lmN-*rXX}SGwVg6oj)T ze*5mnhuR0{i{2fKep4qH-cDflPu_8|Hc-zPAy~61CLBWW3mRXK!KW;^g;*Mp%^p-d zEV*FK1A9M@#mCA6e>kJ1w0F8{^zY{%+~q2f|4wCpFZNs{>4hH01b!&x<7qSjqI41G zrFRM8TyIDyOY9?e`#<-qAKA7^4VvKv+L@WuEBfr^vT)OEaj9a1R$!9<6A{LJoiSpc=E>dW?`S zk#=H{f#`g+PUU-1kse*2!%95X%{H9Sqe*n`Hn?pqW^)r5KV8ljUNNfV|EA8&Cekw{awDpdqd|B95e;?@7mdGI@MLfn z#^k3B?%ftf<2!DsuiP`gzw_$bILseMU0z*HLxGi-VtcX1egElZPEHXHz#$k;nHV2x zO=YUO5XmTHzk+isd3LrQg>~Nwk1`jx*vz+tlECHLVp=YQ_dKTfSu}crm;US;Hb4n= z>Fr|Y9wc-8ZAsG18r$xVG?q2wMv@l=2CL{;5IO@r#Bxh?B_tx8L&wW`i30L3PF z5@ge|Dj${cqv9`P*}I!1Cu=|nrtNNv#DCl6489opf(AbdVCfFWepL4lRoV;a563vN zVf*r*Lp`BPcJ;%NjIQjMgy#jm4xOjLuD)J&)$yyx4gJ{{&fM6!c#Bvm?5_!3>K zXU_L9=ZBpZ2At5N)6>(0I8&*QdY?+{4OK|R+ERePAzlFGYKE8tU{*9qgfpA(Ll4Nr z9Y(HgFz)Y$d)TMn(Kkst&`Q>2X!cl-sM8SuM!e)^u-`?jLCUul?T{aJcr<)F zB4Fji(qdaC?R<-%JmICNpu*`MSZ{3)NSEI+327Y7@NaFKZ@jU=LPunuPVY3N1XDys zSfT@VBG{pP_JA6~`4IDET#Ar=<(t?GS(+bM zZ=}kfjx3co3Kw@!X*80E2e5UR3%%p>y-dB+lvj0KiIvVL#*-&jV`s?JT2< zIyJG7i5-+c+IKJgQPaB^Bb-3m0(>L>jINDEK#H5DKZvww)ov*;P~j@5C?L~kc(dhI z!{`>cT{Hbnf^ZE8xE{Sz^jyB~i>Nc$5=w_7#E6-O^!cJDp&sXeiks#g|iS`&_uA|>lSX-((HP%H_C;G8H@bqd1N!*OODw_SK9peWN%at&hylmc+$*1mOKwYo~@4*VQ9d#FF|utAdl)|yx+otpQxDsassDkdKf>g30k z&lwot0~1BTyC`{yMaP4kd&z0Deu6J!A8jaT*a*SNnqDr_a82cvmZN&+i6G<^Wff#G z=f9VMzh(yDWKcF4Fm}+s>amis>ULVK5{%=!Fk5e!ww(hoX5fBmyhzUkimXa!%6vbh zx^t7fVZYLhGaek*LRp-!G!gP~lYc82=PYh|u*)@Tz7s#+88Zj2EM1rex1`T8^+vqB zkf=2WK&Jj(Ig87GDL>P78CA>(@y!;o-{i2K{ob5BHu|X)UIh+$>)Q19{ULBoUi$WI zhpUCp(A_plzJ5>cSbjdJ<8!8M(^RdlFqxSbXF{$+Ap0RSFLs*$yE>aE1`sz$x#$a? zhtw>#Dt|$K1*{euWo^I#yEX|0^x^30DD;fFoOv*5X_u{?5N*n!(!-HGp*^VP^gFsE zLYyuoI8pR>d1Dn}g{N31j}KZH2nS0-5^tzX+!21c&rRB{4N3aCW$13`8~>lNc{H@M zCQDPdV>U@ski_;v@!DdhhXF3;0|_RTc%V)NIyVi(abaSMbG@#zp@E@+uwJ9AxBpXs zWKteGFMmgx-U!wSNb@WFk*$wPN#^Xx=%m^Hc~He12O2ASHN%V%M@s-B6(kou&q%`Q z=r~CF*DXqC{CT+Ud@MktLrgXGPPnJLD8Hw$5{ z?`R|Zk@&XpcqqtChXYBVvQt8~nuv!Q4dQ^i#N}4f3f&IjgJ}mgIHz)*&qt>KaJV9C zvVHV)^8rHn5!P$dTMb<+0EckpSp3qnal72#4%DicgZ0cr?i9qPw+-|SbTDl@#? z=hj0zZFnf+-nM|~6bUA!p4rA!Rz@QjOns9jRF;YSQhm_XQ%(bCJ9o12hTI^c>SNKX zN-Ek}1;5?3m~1#dSBH-=?^kf$S`usH;H*M-u19$RFTuKh$LR7xFr`?NCwvC&rTbG| z>7mj137913xux&noy;etxpvn z^2FK1iyZE)MNH_E1A3ka?>O=AG?wOra${uG1yU3)T4wn+U^RcVre=3H`IEkUw{;;6 zxD-=A@vPlXx^}U|V4A}*SD&x__j!?-z65A*fSOw7q-A4iqN>U6masU^te*@vFwv>i zUi^Oj2LC)wmXD_M5KfK$Cz%_d^}$17Rfycg3kEzt^_ zH*ej1?}nG%g9N!1TOP%lYsa#j4lZA5iSld^G_>5(n@G}6v6ZlDXcNuU zV8ULT-)&jJgEC5QEx9ee*I{r#|B2>)Rb}F96t<^J=S4YV?nhqbu{ZAaF=Df!?0HdR zyO$+C;aF!bM}M!u1J`5RV;*w0OJo$UEs@n)vQ*liuPfHYR=jzIS~w}n;S8Hk#tQ;{ zAzh01VtI;1azC!3RdgAQ$uZ38KPtq~>}}e+m3N+Fn+k7^`cO^bOrnM;M|jglU$$%g zQd#4!R+g69THuL~$sG;exOXmeE{(BMIPq>1EA}3hZ0?yT@DbEjF4OneA9;cEWjyj~ zuZ4LQZT)=gxJ|M_CehSQgAr-%!=@>EJZUayyZQd%nZz=m@ItQ_tHpuGI>}K_`JYpX z%^P&%DXRY|>H+^o^JV+1gIs9P3%J*b#6nT-0$gksuM%Fk=@r*Ue@r%7e{6N=iogo-`xzX)1 zaz3NmCr24L**QB68>#>uHkOpQ!Dep4UW7LL$X;9v!9nKaH|~Ni0L;_%HAvaFQ86Bt0{B1?IHY zHLXLtYkAufpWX&xrkL~&ClhxgL?L!0V;dN&jWKHWCm`WRKPr^<8CpVz6 zKBYX|sjU6OJ4St*Ir+np@2EjHk2cx6zpoE_+U`O+%FSSqp0b`!sQm}&#bjpMc4xry z!}jd;db;p*)YrOe8fUCI6X|Ph7*83Z;vn#>`lzR0nKBx zv&T(6X$6BKc-EXp7@yLdZ85X8-Qf6=AF-ZuOT#LQJ_o1F+nKBbqZ_d4K z->*DD-h#B#dbeQAZr|q9r7O%zR25jz?C(ev40i05SzC44yt}2>4|wDMgdYE42|7CE zYpdFZEbU!br$(TSkoIgxn%dOIC~Gdc16D0O9*X6%*UcbH5>|*a>ItWsHt;(vgEC6R z?g=Qn!ZX)vjynOWG8fjKMqZo!9H;sA@^^dM3(m}?+)W)*5!E7b`-ZH;n-gK`F|ltU z^~wdY{d;L_-{5?AZ0N32SMH)JH!XzUDa{xe(mr3^%qYVfehwAwf7*e(=$_w`z&|!) zxHn|9>}Z|;#{Z-OZmSR>qH0Dr#=qN+%3y_Q^&s$+*Ds5ln3>lsx4Tp7<)_v z)7o$nfXvFz+Uwm=n4CX}nIa0%WoSP9j?K=bckP{T#a(0{H6l-QM-9T1t=PhMAI8Jg$qE5;_flj|Jg;I6`m#lWs!yd8w|5$vBqct`za0a~ znQ5d|XreD{I;R3#-g(P$4m17mW!T;JpwCL-4__Fr)z@Nrn2Ub= zk6EG*V35M|)5c6E_h#+MyQYK5RI@$&hvUWdnSFs9caQP9>i5bTzt!nC-Lobm_H(Jg zBJmv)mD)=DAUsXsikq1q5jOm;-piu&qrqIy=kxr1Cf{L9MKH>cr__j3BAdEz4pT4A=a(<>>;*w_?Smv{;h!~GuNfYx&)C)h`%2EKz^zj8 ziB}^v)BWngRzK*_4po})F{pp)a}(8N+HS~)-dLIaha_NYC| ziqa_5|JC_D)70Rc3b(zpUz`$@dMGdt`h#wL^G3t|Py7F4f($kXAK2POoK%1JYvDvA zZ)HVb+#m>4BKOUpplz_c+=X+Ru<|U;+wqJq7GKEVh0SU>c?a z%dMQEs~KT%Un=bETf?sZ$J%>FHKA?o!pDkiR1_7EYDcBXrin;Ng_j~Uc-`{)nH^TwRT5CS@DRb%% zw?a6%aZG)1a!ebf>3{S~ls7oF_EXI-c|D=VEW<28ts2R6MwSLosbLstwZ6~}4>(TU z);^<_5)^wji!9J-h0t0%+G#O1HgsOvX}PC{cPGQ$$)9tvuX0ZLxz&En;O#g~n$c|d zsScx!Pj@TN?B4F@-xUF_>nWymY5o>*F2Ixc8>-@Q7V29oTj50VY~^G)gsuABO!+hD z_y62S52I6S3&O5(GS;#YJ$_|gfI&ohDe<(aM{%y2E!g`;Jvaa7(#1?(NZdMo_-2$( z#_NmKS!2Nx6;!T@(Y5%i*|CF=3#73W@_qHgJm=Qy^uu{F3D#$AN_3kB6=&yHTV*WR zBMQ)XMAcE5SrOM($e6v~Qb-=XcNNv)x>8p}bY8)1{kfO*Kd)Z$e+c%hnh1!ic6E_T zVnxEM<`*RC{bM*dLDp9sHtEg+SeKI%7dTFI2!Kd;FDn3qZE0GJ-k{j`xmPfwj@2-| zw#(dp3;X4bg=A>gECpRt_}wb8H!bNuuSI)f-al~<`zQ3?T&E_XT&0Ber_IwdYm56Md?a>I zj$01RVl(#;Ti=4+!JVx+Qt)n~BK$`2QSe&g@2dypZtX%!SKZ+oyDf>NL^C%>l%zwO zv~Qi+>S!2G@s3?AKrCIQ3$UYV^E|#$D;9>>;}>SzEViCslC7ay{GLa|wyM*=OS}s` zDVy1L=bL@eBA7+*tm;1UKj|D_+|MV*{mM|zb2NImS@ zzS8RH?>SR>tZ5f$NA?Ov9~U?L3e~1`o+2o!KiO(aFy~YtQ|3GLRyVxP`b~9ExRF2H z5#^udhsM%+ohufrE8fOc$a+qWXd~SuF`gU zh{a`(3T{f|9|UZTVz27_$0mp_ZWDC{mL8BL2-9ogHZ6nA9I-Psa!oHxG*!a-XkiP6 z?IpJD$V1*0S*V0+AB7Gtql8ICVa*jPs1ND3u0IeC41h=tvcgA7Zvk-rcz3UwCb)GI zvz^z$txH{xlkVQiJyIbXmpoQL8K6CM;3ay;YBQ7GJ9wiCOfY}8X}t02^zK8G*f`DV z8EJ;wTwe)MfEj69p(d?p-)8k_+y|H6kw8^dHF|^#hwiob0A30CnB?g*N1%O0S9B_v z9on+OiVFjEOCc9!s*MjVchul`M`ICN?M!=coFR0inzbNy1Tv)Mcd%Sn4mWSm)`PnZ zr5U(ODlg<5vaL-tt!Sp!9HOO@2=`aCT}zv7vn5jA{K0RnRPWPI>;8`u*dlh)Mgq-Q zAhX@ot9+3AxtGzZXbpHVg*AKxylTdDEoel|E31-hTV7== zXH&t{pK}m=l>nQL_QbWJz*e)HN)72Q;au^s1m|r0`pW%(vrr5fe8X@Kv zY|5-FCelc@avl}Tp{a5+sh&UC{tlhFPf~F4CiV|qj;NCCJnS!mesaepM zg4oZVg@z6)Pse{+c(*@yPUtA9#y5$13y1u%zjGgd$c%uk=-)w`iwI?>J}d6dnj)jj zM6&qfm&DIcRz9XojBdE^eWUiH`6MAyA7}agUo18DLef@+T$h~iBU|&V6O{(U0k6N#4CR(S)e6b!Wp`LrRSaRuz=sqx z2IpnJ5T`yb&MRpPX)_=q;~uf?{f<+b^3@yanctu^R~N# zj5B*l&Z273vN?z*)(p1E?c1~eVBMXQo)0EJHJDfTTGx0AFsI;*$w%;{(aRX1 z`AF2XF90&?+fctT^| z_=vard0dFc=IQ@G9{Rr}g`cR)TyYsJG!lez)=vbl)f1Njk6SnREDgv9DrcRm!8(GpYl_qz`>IpZ%wfqyjf17REOYC3oLfea4VjeRt@l*_is7f>x-Y>T)2D0p{SwQq+2-3xi=)! z36l}B@gwwMpUh#2tLyihV=~L?7t#{8IYcPdKm*q85sk(@V0VILYx1WfPVY+a72=5& zFk4M}>n!lv3i2&xUY3n2G>9_^6+d@9%ioaP(-BmaSJx4w!@ea4Xax6?_N!x@CgQK_ zt!2Ns0_|}cwMW&*I2Px*gHTD`5_@Wek-#g*vu|y(JZrx0eSJgx+*_VkFC#t8WvBU9 zSM~5_6TQ0`>A}*of2{8jyFDEvTPAwMUKH3@r`EyaxH_uEn4sb-96A*wl^uIp=HfLy z`oIo6`){w%V4I(R6WC3Jd%*Y)ej6?9>rCP;nxFPVJ+!n;rwF-Lj$8V^by3F)H@=Yw zc1b|*6A)f0cZ?<7fDwN_;U^6B)ZW)du?7nePZI^oS1WOlH)V}$4FZFbd1IE#um^RA`vC`1(8;3Y$tddMvpy|Hs*mu}t>Ez^@G4ur{FkLU`pRvDYgCST^ zqW8Q~)BE&WIzla#ww7wbxw5(zI`LYkXsh00@$7TPTgNBnhqE zAMOaLnh~G7R>|T$iDiyJhjI_`Mr6R*_8h2=a!(I|l84q+qjW5*+A=K|@9%IebDkXb*M``WU zHCn%}v}$njYk!Fy2Y?Z8o6JLeUF^@*-8pI5b;d&oVdVFKXIU(wjx_5&;gPYH?_CgD zjcl8sbV`S|L>)c*amn0om}-;H+^><(JS=&wYJBH{$`L?~D;cDwFn5e>11Dta1`+IW zf|Syeum7xdf0Q48frpvGhF2w*N7q@)<tO~LxTssaay%jt-k6LFIrDXYWl6rRg2gJ%*1&jsOi>&tHq=d z*(6=U8$n22dDi^9oj=Nk^GYz}6XRL3wciU6uGz1D?rHWc){B_wuaM~eyZ#V+z!=)x zNS8u<-NhIC*0A8xqx>GuHUrD+m`i|S)QGtru%xLsEQTe{FXrTw-?%$poS16Y?u(fV zI23jf34#!9KiO) z7D2_ zlIMOJJD8v0<=uYCsXW4MOke8I{CBZGg5O?EM*O2NZ~KLeVPgn-Upu(Cy6WCbS1ZLyZ?E&&UJu2T^(EKcFt&EY-q9B2bM{F80&3;H2GR2Q zbaeHTUH_yNpb#uMey5O@2qBX?W9@y!yDDGVk4r78UFe@~zA1a;KNl`yGh&{z2lZ%z z+bn!r`=I!_%U5Q=YC4QzGRM>vQHdrmKT9r4GPYf1w7=wTFbjDD4hdTH$%eaxvvlub z1BP-rc+tnte|bz`Pri=U=poxKKi0o8jZCY(cxUB3rF;A`ffpZwWlxgJ z-izuGz=}P;o^d&wrT|hPxPGl+{Kq6*bHk1!eil6{*j80lO+WXQf&(VJFSidjMee)p zLZ1pIA1=qRNY+B17cVs@;=yXgZKqy##%=1)G%}K&Jkm}SyteqMpJe(RTP>66^GmDC zm714q!@7wpeUNyibuUE{on4RpmzDF9DC`<<%;%o&nN1mKOE1>w=}$rjC6L6SMwEjLE^i_>{ZN~NIY$`w?R{_B(e z@sgVKgUv{GfW+;E;x#asj2yc09<}Ljg1b}CHM3$V0$}>C%_v`gaCU-IS;NcF@V2?% zLtad^+fM8wHs)wFp485YkzK$hS2nZIGYu+L=k;)228+_*)kjzQl54*Pia9Cv$_ zusz=zrt?3u09IX?5+z~XRg_&3lIB6KP+a`Pp`K_@zGBJa9< z>@U27h!&Ox&ece!J#S;@r*VtH5|zHsma##&kNPXbZdOFG>M>kb&tLrZPvxqGOB=?M z%#doTQB3CnnrOlDQeBF5kBBR>{gR_Jpu7Zl_U;Dl@-@;_!&CQpd`0|9FWjwn%hP(& z#A+Y%?CDC-e(wG8|IBIWgHu5JQGZ`r`aRPV{GrEp4NrQ#Tf?qLJ& z?-mstVwP$$f4|oxfMvD3Q4rjPBQwSImERce3k3NuVyMLJ8E0Ff?QS!fA@-&g&e2a~leB}Y$gzPd5%LNJPF|B^m zvA`x{dEaZBSKWuvwyIvUZ6ce8xq8+Da5aa--<*Y5-VQ-Q=AqYd{SOBPtjXNOzLtIYg}==yIKhO|>P2~QpRlYNDn z0vN!+=>J>?BGeOLL1YGI;w+ktojy__rJxUQ-9Z8AS;Mj$)d8LR=b2{({8g$@!&OA2 zQ&!*t58ZfI^;q3cb-XzlLrBaaW7^KyXs{M@J%`ojsHNby7(aK{JC8M<6fPj5Af{yB zrdU1g@1KvxDkJUd1~GGz@}S1)sG~K^Aw&?vrJ5ktETBbo?H3uJ z7aC`x`!F}WAqG*=VbSAFFLWmOjff8$?Y9q&h8wrV@7x%*9YUxG?#(Ws*iQ^LojL3- zdjt%X9QrG`V&C4ezg}??OaN+U-o97MByCj;Sp}<}H~Re!r$q2{Wvb1WZ2cjX@vG5| z>75q5xZxJ2uZT`2V5y)M4S&O3r}m6Ua~E}Wx4W^N?jzBs-G<%`ixe9@fE(d=^Wo9O zp^QcX{O`6a04r}VBm?N|1s3COA*Ing&wBWN9Nf8Nf3x`N6QgSny&?unbN& zalO532R^<(=eOPxEtBQ^AndGfKgQ;uPR>CADD#Ig#CI_}5);sV!nDV##w}Ixi>Y45 z?ALTp4D+S0E}H((oyR8drkGD(|7V`1H=UCkvW#ro|1krcy1AVyguPV$94uGu+bb4v z@Z=ZbZ4qmq_=E6NY(k&U%P70MS7&?y-EwhP0&$Aj=WkS97q#bd#}$6Qj69Fui%TV2 zyLmf7>GL~CPeACrs6W_4Y!+}z)}b?A>p|vOSR~qyi!Vpe>W{RV<-F`w9Zu=26f#Ls z^O&fMtsDwQ5H$()5ABcgbvu0uyRi0g>s!J37aM6E<{BH{&knEF6SHK0yPghjg~|8z zn^u=-{uF|m`%>CPuyPcnmr#64o|E}mTPTw2Q9my%pt~ZQ_!m<8>3m^sd=T=QZqZt) z%jqP)AgIy9^d!$v_PDV3)yH^TNrFqo^$=iX+ed~I;|5T2EdE%2dsHFOXiBIk-@@r>c zee=+yofhFL|L5zMyx#o~3V1P5vN#$C>-4R2@#p_)b|W9NsAW|^RK5B7gfV9)`Q$3J zi;`OW!C$1E`FZb^!~HJ=@qN|R)xz6_ib5r+)H46(<&$u697qe%yyfd=Z^tG4I>|AN zyI=jETYSxI)L%-moW^obul%Xbd*8L4Aa`*~I$vr(>zAvTHh0Q`;0Ug1g*&zJv9{-Z z9Ll<>as0R6u(dzeAj+=9tfGamT`9CXa3)up>s&qcVAFLL7dsf!of-Ojfawwsi^B*2%NkI`D z{ZSL&#h=-k?N=U`S=Fz3gVf@iAcWw>WIe=`&9JArEiN?LBJR{!``aKL@ zrQ``6PD!|`6u+fpH0%I;WAWSprjLXd=(az1*Vf6a|)+XWc_&F)W z)(jRwuS8{*Y1sNOZg0djyucKJ2V1um1PmVMh>3&8#2?Gq955CfvKR&}TFLtWZ5mP$ zQ^y17`I=t9lb`?W+S37Ox%Bkm67zv}$d}?@&*;7dnSNvYtu4sqGZv=SB!Zk$PxUC{qSH=GU!piVT41zE36Si9_#;XmE$Wcdw1~$4Ujv(blAR<8ZVy;3Y?Ex-p}t< zvNTYDGh^$0eKNUE#OlferO5A{*N5~D%pQv7k4>}{nIC*)e?kTVm}ARx5`W+JZAKZc z)Vtu(V*LBfPCaob3t9>Ouw>nJnIAD2QJ%GWC)&>KIUh(+1b&=tRzI=Hx(-JpJRMt?3qK09`Fw;VhnxD5abaIY& zpNIT1re?ypB~t-h+OQxjOL8+rzT{;gsiEGRSTNwfFnYsD)?L8U(n-cQb0^XYlSVeM{Y24JCYS!WXE)9)z^KvI@#4RU!@)bQ9 z{`}1kTR*(SG#S-1MA0s<$sN|@nl2W(TtyVh%;jRYm$9r-Q@!gQXO7{~%aMZ8m{Br@ z1w$})suIi7ku+Geq(0~0?=<1;B}RS@IdJ z?{U9i8fEz4>xO5p@v*dqJntwr8y7?c)5}~E>U6F0;E$Ub&1CoTjL0AU)tKQW?}Z)> zE8_RHuUP9>CyVa^eTx}=#rW}i0*7Tb4W z27|=P^E%z-Q6C|S6mbB%D^#Df3hniS?Pf~1hG6S);uVt%#f<3cg{ev<%9-SlcqYQK zyH?4mjqeZn9mmvOjr}(iX5}~f%>Qo2ll;B1HAl}bPSksol^i-Un9(5k(g1jqP$Q8s z_)UVy{P5jVPg3?ClUuw`+Zpbod@kil#eb0EJ&)kef4ni;QtFgD- zvh$4o+sy2gEOwh#Zo0G^A#*5%f~X-GkOOhSXuu1lO#XmRzv6S$JLsU;8%)qZD_-B; znoA(<=ANMy(*fgECPWd9>IehnEYcMm1BZnuR^I88e zRmG?-yL5EFEgIK#2vAS|ww+=5lBeL=7i>7=gl+ogy|<*ANa$i4t19Qj_I)eE zy)AoE-)u8Safk(FwoSI;B32@dowIUbguvQcf~Up!j`02ER*)j!xuevd*ClB2t5(L2*b6bn&FI)^o$hFuf3 z7(L5F+%;*-;7-+LW?wVfttz;fv5aRldMX`duX;1*lcoP1A|ztlQ-7#an=q-moL)1I zHm=ALjMOW~+{Wsr{-e8QsiK2rE21IAE<@e0WfVYFR+T9GXT(9oz;fG_jAD)EPo6xl z=%*6}p1knNzH6=@G2B->ERCH-cgW^J$H8d3FdQ=IZ~||$01CHIGe63P<27#hzD1n< zLLL)f08}XEMan6wzXw9E|IRwuDB)|6uHVX)pF2$^1TvCgd_|-I<@Qg0) zVfU}vfxIAOpr4T1VS3-F<3)k1jY31~S_?o9P_N9YLfwg6K zfd=l5+@EQLHP7xM;4Edb!;@jPfQ+7h5p5c)0l1$a6d=bl;~}iYvS0S!*CJK{)$QQR zMyzCO3uU!ABBS?G3DFK(se!K zKs~neW}ud=?!<}VX+Q-bT~-R)C3Ia>Au&n>ONsN0O+NBXdzAGO6Mpeyw_5jeK*2Bj zL=)JoGrZ$46#OPGODnQi>puR>K98UTNzI{_|CpatR~TqsEPFL~4T?NbVp5XlV*I%D z+HBO>3{?B+9*6igv5@?dMf0>;hKeWKBDS?fqOUlc9jm%ScCAXdMxggeIu>~dVRHwi z&Qdj#!Y7>ZkT;l6@553D-!4$MB9jLmA>3HCJAR%L*4- z)H#Un5{Rpn9R~dDjpjE_L=m5b!+=)Ve+3VZmS*(d7%ks`5=P=1d->r zBvo76yC$7Jf4ZF{%4Axae9I9~^`G$S{Jux<`uen8Yed}JBX>liFUKYsay8}BFCvVC zE@H@aj?aGmtGBSqo`(=_;Z03U0i3CqEVnp6!v|GFzA!U6D;oq=Gn=@%2dn-FhBD18 zwm5q;c7VOPr0mibbyV`4-!EHjp;QYZ2@nBst<(RvRKb0{{{V3O}Vp^v`p z__*B0nzu&8w7aA-;TicZMvynCX6ldGuFwxGb3F`~k`@B<#RD~f=xu1Kb)&i<%N+Hc zlIoO2>0TuWcvmE#+W*RI$B|WF*iHnF@lf)d*SpwSt}UDf!@lVoC$AfzJs0nZpjXd^ zBA*8Il0Q1c57%m#l@1rTwGv<0ARZ$y3Ztomj?z|YmDOaXS#kQ5hm{Lt2wDA{WAE3a z^9jG>gmoz#Ej%Rjop-Sj#cTa3wA3NRgj3l8yw5*yD)uh)mt&!|6LGX&j z+molpSgQW}4~qVT8QMngbyK!2L-nn6Q_UX`-YX8W?^$~S zo+EIK+9+ZhLV>O{k}<+6g};J==TS)mMw+YELPrAEbC3$G;*WClC;QF&A&}a+Adh@B z4y#QWD(sC>;AtlJaZO11uPePrBB&+im2T-t&5Wt>()RrOV_b$QEtyT}Am!n_& zRxMCJ>ODk?;~SagVXe5~`tr5@+(`3Vl**-lo39z1n>{Pk65uL#+!g%eda$lrySTW7 zNUO*S2+OUj&xAM@8=2CAt8H2?tvTI}o#>!;Eu4#*kyvfKh2MP+kKVrHO0$tO(bRWO z!r;n;UMlfWBT6mgt;MHt6A{Izh!Q_hOZFeB zcXTolCt#>+=PN$E$2;C87gJ*xBXS&xA-%nAPJQ}oT5Hm;MSTtWyz|iTCgSeqH;5_W zlF^(FtoqbI4>9hfatBt>yuX2=B944>l@F@UuG@#u%#S61F&G~3Qi9~I{Gy5KHhsYI%<9`hsw|yqFDKTMp|>8m&DGff&%EJ^ zIPeCF`}ODh?U?07+$#bCq2nVEw^sGBCie=&rST~19&A0)V18hNeN^xdVNbDBS6=@9 z9^Y_};L#p)LYxpVcgVJ?_S752Ds~I|pFrvY4a?c+=Ic#Sn)Bf|_Zhs+rgs)z2Rx{_ zjB!@eEbub)t;NMjX*D#iBp0*JG*}88+B0(?x&$MX!5Pq++s>!$5dl^pc5Z4UCq0qNAr114E; zFZIhNnA_#rju4VrOzG}qh-5ZWz52w@fBbxD=zQCBH+59X#kH)NK1M;icEn2tlTJEi zRPgj9(ttMQ8A$C_FIH&Y{FN;fbFzeXxj8}D?0Z)IKBY4sF#-g6e<_M}3N9bW*VVQo zCZ?vHRFcAjn4V#6kuONk7TlOpPr+l{>0`O~jZ_B;jQz_dKa8ix6nVg48@+PnY{%o* zj;)R?q>nZQdUGfJ-QCps&eLgB`K{|8<;?%q)o`gt>pR5~7nM7LXPP(&d?-7HU_2+M zr&YdA8C`KuKqT-L^~Ov&go-bWJt8=7H&WQ72{1!VVi}9OmTyD#2I=@^_^3qA6<sjN8gX(jDfD>P=k~q38!rPw zH2>7JC;3VrN1rZpbLMU6UrkcLP2R|H?BE{CH8@Z;#C!CQX{YBR(bpg668`D8Ed`w7?qXh-byC zp#CWKS|j;L^wpKKygZ>8(Sm9V{&N9ZwjoPX$y{YD5fzFU+c7Vc0|L^f)H42lGsdxzDt@dN zW=BafwOR5=+Ixy~uV=I#?|uFETb&N)j1%*Al)XH`PI!4>dSmYob7l5Rp2m)NG8xL_ zP7P}~Y4da049{|gJ+#xT(y{kKGt`E9ay)d^)mGg98(?zIR7CfIc`}W`Kn7K-e1D+z zBRPbqiNN)AzCM72^(u{^8{vr~?LWcjRI*OR2524qzJyuOe=6HjBB7jbyN|(ub}{-7 z6kK@S9Wu=FlxAm@v$j^jH9`R43(-Y!G(RwZ*R=&_tonn-JfB=q?=wh##5$-&XJ$C0 z6*vTH(SC$tEy@(>3B=?Mw0aJxKH>lH0`8ysDa?PI^{xCI?!RWOO)#(V)%WrOH5+6= zKkzu`Ee!Z3SpUVn8LwJvgBy-|g!WyD(7(jfUXCX+tJD{LR-+8mPNf!V4^xj2NK=khMS%U8m?p(tWUOh13kc*f$%fsb_JOAGF z_A)k_M5A};lu94o_jHCd*s;aRCbhZQyOQaf#n5(Zp^wBu(Rn5 zDDaNuaA!T7s%XoHd_5YL@?X8#e`teRO0b+gFa4pgZ7QfW2ZkYP_vw0wh zbKKBIQ0`_{knR`%MSxr_>z;gjZIkAgC0u4!CN{gDX=6d~_8ico@x^*8iGj58%MJCb({ zHKWaw4tSvcMe|C>c6H_FU;o*KaD0#vig}y~fvArt3ScwK&RaJl6YpR ze_-Z5d(Nt>aVQ&-i{<{;(i5!5nOzpT!X)O#UnAM>_#AHTOt(z#4CZ7pnhH?29?B^Q zIk}cs9-0JJHpN=(90a^a+wK$%wYw(m?wG5%)hs)s&mA>2mrQ;!H#P4LOSXD5nLbv| zsECC$5KI6&=zgBty(GPOVPEUX-I|wn@$Rw{bU5p}Q0|-lU!6#9uDm~VLq7Sq-yiao z{>dCygG8aByHwm55;S_ixG#E091GocF-;Ms|+7D`JguNRvS)Cc2>Bd>iW;ftO0 z2U|5tKdiU8L|?fsw=3TJGG%$JdRa|-@9ksV@`HneTfY!8{D;h}o@@cv-=Hz=d8XHt zQm4d#x%PqFRt_M9s@GfpgMYPQ(0;O|#JTbLK)yT}Q})aD1Vc^$a`)3yGN5U47NeQ>~X%D#SUOSsJLs5G%0yxo!c-26woc?Mlh24 z_{UmeS6`F-1-ow%;b`G!clQaZ&=@&dgaM%Q@6pO-ILzYyaUT;>i;75n6^hAR8}D0z^ZJY9Hiu~dzL=FYazLkM z{KtTM7q;(<1Za9ijI1xDdrHaeihHz)*%Yaa+bR2cr&lN~0*XDumFrZC;)ctLi!XpG z>lehKbPA$Wok67Z^^(c>JT8Mgt~MKHTfbanOR{y-@+3C@;@D48D?TP9 zkt0jTRmdC*jpZVEwwDHTtlTU<+`eYe>XMXvwW8Ob!g64XszRgNEGW<%UF(NX%kEX5 zK!hNkI_N){fA?Se8JMZ{v(v9_(85Y)fgLBEI1h6~-y~d}jmkZLu;1vlXsasO!d6(( zrfKu6G&4$(lK{&s>)y;<7OC|M;q|`W{lGN|mvG!aOrcA9tk#p@2S%Rprn@<#;oGGO z4};$Rry~-wnH?>b@F26eVROVGfm_t39s!#zxEg4;Cz5bMI$C3pfGa*Gw_ZmFM`pV+ zAa>BI;IvM}N-*Gk$*#nZ#JcbH(PCRG3j5{;d!3w;?`t<3PBwK4?@}V(6gqWP+y2z* z4sV#4=3lA^fS5(VkhxQDl3B|sLyNuk(Im0xBTW}i9~BU(dcSz1ptu|pRK8>DmEgB; z`lKQ7V9VU%-!s_S2pEhRvN_>$ZsF%`+C};Lq5n=6F4v#_iWW(SapSKpuz+^A!DKWM zwYoPwHV5kT*+XDg0=A;=)v&yo-O)qTOP9MSz}ay>=mFTK3q?}KXmtEt5WWu{`cJGwlfjWTdFaOjb`*de~dTg!hW>Eee26pG)#=S z?1NYjbmy=p-WS8{^)%WBPs&rJ*f=^c-}v)nf(Y~>MsP})@|b~}eWMn)cTp?zB72Vs zv8~pOVdHvv?jbH;H$ke^!BAVA{hWIRCXm{*V>}4W=H8J4jX>wtIF#H(z2iJpjk$Zu zp-9x?)Vvw~t zbD3lr)xo^&g;nEab!c0s*BXATY1}jM)_qI3@{*cum*P;a{0W(rv|{&FZknv;Y}Kh( zF|c%tD=S(f?CJ*ET2B3BUME)DS=I)T+pBObea9X|^0PT^jc>kuk_#H^5Xqcw* zoCXZtbBC>ySe8=o&Hj@zAV_g5+R*HHiwIBt%TJ>Ubr`AEu~!WF*VDZFkZZ}qmDk&I zY(7t?xt67#`4+icV3gT#gWVDGu^{X}k9UT<9Ww?nLF1R|3pZuUe1q-LQD2NUv23jB z`9P3(@!;L2Q{E=n$JF#G)==&Cv?-Q_7dR$k)I%*yI?}NLLN`uhMFm;cbn7jwzG)xz zHj!7Wm;nZ0`0ZJKf4y7wNgdTOmboGF`u1LYNQuqIr6Lmdu^4db&vzFzGz8_fi9fz; zb#|lgr7{_KRhQ#-I5zrHzDpu<6x|K0buRA(@_Dcgw`4KUqyIsJ^R$HgemhO9y4Pdh zT6sW(_k{~fQdU6q-AohR(%Q&$CoA8^lV>-U0gWHMBi?AxDmN+;;5|8l4knC2&G%Y! z_7l}vnU7W-wQ}W>L7^>AOzEuM3~{>T1SPmlUD)vv+14-Rr`vR?{elL0W}x;d)m#$F zNM-D}K5|29Gzh?^DooPKYzFE_fDHtRGJU)=UGv!v$4LSuzCAdpmu=ZJ6CrMcrH{Gx z{>1%!eUxrpvD zbNe*cG;mU8kQvQ_Rs;tmAF{-L7ugmGay*wq>af6k2pLkXo20P7!KB49%! zfz8}qOxr111$ga>lk_ukLqyWvzX$U_;Uz(_=jsR7M@xt1OT&lU4?(=Oj zc@R#<+3&)9kU}UAGQziWVF@5b$NE4Dz~`ZbcYQ{+tJ7h=Hhdt$Ranm2A%1KN0IfIZ zZzUjUQf!eieF7$6d=;h7kwZ_LIlu(wbC=|jTL-gpNZs6HCY?pBShoMl2&E9P2v4Ay zjm>RWhIafyfvL%J7E!Y>m~wjgH50s7#+)2p7uNf$!VQ~D@|Om(+utxiP(rfCcFI~umR7LT zzX&`a4y!nz$D*=-!+AL*rv>F}o%Zb&>_VxMpx2}qFszL5*t!iQ(!tMU@)7L-OhDbt z#IB4qfOedzs2401hnD#@pn;c5b4?EoDQK6LdX!motqS}Noq{0KH4PFhzIb-+ot2e2 zd+Zt-AuWH8VjBJR;D^H2NPPLbsP8>c9uue42q2@;>=Dbhk~_P_#YGft+=9I=i%H}b zr$Fo1hj{}4-fj!Gy`46=Fm(l3aH@0f#Gz^4A8*__5VO@ttLOHne7g=K4(j;Y;#r=^v7Grm6v(;V>QWkGqF7Z zPSciGgB}0S#rkyqz}8f%Vlvx)YcIcC38)~tx`kwc-R4sZ+$vt?UKx*A`97w=s|nGd$LN_dzX@6c;f3bT=g zF&<)T(Tbzvgx3PX`%=oT>EP`p(_yl-O6Rcfy)pB1%@Y3gF4gFLM|!%6jN9BLp_D>U z)!q%mpA&NSDD-tMdzyf$y&^09ytN|28x$R1uQ*_&vCKS#t{X9C4o~&2n*%aBWQiEk0KA;6V#8YCg ztGN> zJqoo|;5=KS(W>ABr?* z(Tg`%gFWid)Xm1(>zN6-MW=HmqPj+v=(SCK~G#EwYM-dFMyqIYG z`xo#K+hkwOa&^{v`9eI@j3fOmT)(6f(jVbo(s^|VjPLm_(=lJeyt<}ogiweZ_-WxX z{in2$m5A#fq76Q~9$lZ*w6#K&k_>+1(U?zbNVeB5LNXPes@1qzK9sW?bA%l1 zgNa@1UiU1txcfDk01upExVX=a&}rd53@RP-mdtHl(Ar?ISC&I0hPC!I)6Xu!Ck372tK@Er4bo#_mnR1H7 zeTC_j|9O>Kw`B!Ep0qgL>I6=}OF~95OcICto*{p3T9x>u&xVT063C+09(f(U%MtDO zh?a(%-kPet?`4x%&J1u9hU7Bhoo2XhL^D?+*raotx6LKk)RyI=Nq{ZC@R4$KL2-iJq&vIWDRU|?b^xL2Q;aud z>o%JcM)MA| zB{)`X>#QO;-=@q3#fi~=PFkJuUBRY-f_}%L^zc72TjM_eE`i-!zqagQwpSVRKDIgJ zPo!=l#%xW1h56}WiJM0b!@o^{gBMNkcYzzrg#e=yq2Ak9&K9&v3N}cZTh1CP#EQ63 zM}bb#E!t=hCOagFmDJTq384@~Nbs`n!|aAMq#`9fJ$2rFLnCNPsb|dZsLV@$Ipool zY{k`Ji07QyjP!Mhfp*u5WbT>#VTs}3I}=Y9N9dHG>{-zY6qPnov&Jqt+Nsp@lj73g zx7tu^fqZ5*oxK2}*b<>T*7Bdzv5zR8<8BF^b4xmGZo&0WzcMsPy zC4VHdxI6hH_Tv&W%H|ejj`8lu9V}>S$ftD#p7xk#mbvWOkGwg^E+pJ9I>(4`YySB0 z$)Z(^)?8F7gtxkZ1r|jqEozT)vT?>$%CxRj;L|Ysh{bSA0kyD%@x@|G{2E9yGdDO) zs^HFom5{=YJtn9Zm3WFg2}L2!`5)TEhzy5ec0M3ezLewn*Lc0-hF z*DuW7i4R0^q_PsO4`{iWF4iw_sW@CklWlfJOF_2k_y-F`b)!7LxN1S{kW2UcfCclj z@xHyY4kcgr4XEAul!vl=G-pb(ErVZ#CIw04%_fO=vTv0*3#>~1ulBAhpsB1|V+_9_ zIusQU6tImV(ngv{v!Z~a6hR=6!BHZSCOsiQbQl>Bm?A}K3L*xCfOJBM0>P0kB}fTO z0zpCv5JE{vxCie=oq788aNpo551ez>Uh7-mUVEK=zKv{qrZwEG-Ko;AO&TU`% z>riEGz}KJthU06dSRxi`ba0P!8tN%yLsq4gO;%N|?p5Dh2C5S_O%2+VoL$X$m9+_H zNBl7j;NAah{Z-qii(`;woNagdCt&MombcZZ!IS-G<1H#8bEFbg2!^=B9$ z)|VIK)t$l0mvbwZ3(j|RPb4YQ$=wTeRL%Md@7sJg^%A;{{Msqm5Dsq`I0#GEwe(HS zVs5tE;#|d$=-iq$Ou;_5`KL*r^{pIU&|GKMQHEWNR93FFuVJcj6+XjE?^?c{2x9gU zEVtasx4_jk8}~pCF36`ob|5z%Wyn=r(3WxXVgwt$I`W!r-xG&d0uLvB>io4Z z{EJyID~z8==q-y2EyUQrdi$JWzAUnhPL5!=k61S5S~b!m z+PirGzJqW}HM#k2ru81T92a6wgqn_AH*%$YpTpjgSZegvs z3*R|+lqxW_I86nnz2O!g%)IZy#hZdBM}NL>%FU7|8Ytn0PJfrs2HKfmRsE94P`cWKNA%F5!Oy}k#VG#Dmb0G66TC`VRh zJJ7$8a--lcRXY$!De0{#Vf436>A&GeK5BP0miR1n-zydr)|mSvNaWdRgiv81WSTYt z7|;6kPlYvVoUTg!v{Ion{=cz!k^>1_74nqC^CGrfCo8ntwYV&x@j%4U#VbRV0zck&(AW*?%36ZBx~D z|2Ye&FVfrqyA(T%y9_dB;FZGAw>v};uO&-Q!s8E!8QuXzk70AfU0c?q()e8G9x_n~ z8POR~We_1yg-c1Hoj)BS{0G~Gio4LCna_{qgkcItEmeR4)#((q#PrY0KV5QI*nzCk z0@OU!2W$x>PF+=O@$jV0%|4TfUK6=kdX)Yeh8=MPD+Wir2=QLjw2@m;ZG7jI?``dB zlUq4oki#Ugx0sx;}wRst^}L08A76WLySnH+EHvY!FMjnT1hbc4pO4 zBAn+^{Mqu)owdT8B@1$VsxIAX*%4{kXppQr?BuE+B}D@iv4Glpnvy3jpwU&{O;?ThNi>knDk^;ET{q-6UHID45im8>GLNBfnO zjgS%C9x|PtqIfxTRSV#Q*1$klg!o!o3Lr91N$kylV)MLzSb^7ngvLD~SK^5yEod7g8+8>aeRNu$#I}%O=Trx*ZS`RPA3|k@-%c zpF>X}le5d_vNbMV2;1~RqpIefd0|-bEkuq47tq30*{)=0gTpLnb>YjF_Fcpk;{xL% zT2M+7&u4$YC_N)x5$nDwTpRPWHz*`iU+mX46gvD!UTlCB!&yAkMqQxtY!@y>qJ;JW z+HpB-vqWSn2{=qawaC1FS~{|+9@V4u6H{|}LqqQn_vVYGQU^js3^!xx9UGv=Y@fcq z>BIfi4>0yEc&jx%ePJbqv-dwbUajG%d-2!DZEvtG0A z)b!5NnonMbx_>`t#BY*3lHS*av^zZTUdOmTgX4ks7+|)AFsdn$@?};@<}|W8dcK9E ztgo`e1I-%`D)y>4_{|3ze>{g2vF{T1m8c7iEHke-iBfGA%bYcgTD}P=P0wNOpNGY8 zd*=|#(jk5h_hX8!lEO>K#myx)FkOK<5R zjal_|@H*I5Nu|Ml4!CLYkz42@enDW=w;%Mp;upO$kLU01%B33~H_%k^#lV9rtG6C+7gimyEe3duT9?yIAZuS08T2<_l6AG#7f&OrtI@n7Of4w5Fhu%zuS7D&3}sX~#^~#HUD9KV?Mb%BFjZs; zUOF$B$sMcY4se4*`cZxJePd$OKiR;tnsZYm(zwp7z=-;NfL?pJ@1 zcXKc=Dg(|8w2x7W4Us)K&wIZ}Cz0{#M4S3Pi){*1nMOhH&&vAKjN5DWojh#{&K9G= z3L+{+yLrkz{ZA!t}kznr%fd)&4tM(&GDqZ!|t|it0`TtLX_}Unmi`%wLkaqTW zBw4tiEqSnmMvq?-IZxR0-(kCuu)_nLIxh9{yW<(D<#GgfCckIJ7cbRwtrGuSHp{j1 zYU!}J-Do*t{qEcmFqRA!5G~~^E+HK?sigP)N!@6S#k?iil0ZW&hkLKERtD{KMdci$ zVxCGc3?-5UG!J0~uq}}3>$@h3{hK!3xaA#a4iXb^A1vF!J?Yhj&PTe0LW@xnaNL zuZ{Y@Kx5>FWmmW*;rbhj{I&c&D!5P~4M|(WK0aknD>BD)q*8`CzTil^J(G)})|bz@ zH{&w>wjP^iS^(O>vwJ|zuR}t8!&p&e#{GhlV`XXPg~z%ExP8|hI)aKR($zo*rI%!0 z$&A&ujv3nltvX!0{SN_bF%b6MZimqgn_Ql{dV(E0@hX8B;5r6cvP&H=4`w^xdLk_LK`AfzAzt)ZH`gM@K+d_%zw#$g zbCrkH$b#^cna{JiP$_IcSJhrGCKn*N%LdBk0S*3U(}mir?~jVU(m6`!YUv#3kC(pbM+bF?PjsU8Hn$bqP||%FPL~F=;YXeb ziAmclR1Kv!<@gP4x;fN*!Vsj(y`WvJT(4i)2y5e(w{lT<;2_DnLNA;o_!Pxf&n z@(!kJ5`}h6DiwEa_qJt?(@BI9mtB(vF6?azATZ9940v~UFLiwE;j!eMtoG(Inaufx zg!WF|y%!5JXlME=fl*hM_u&ssS*sVfLWTNHDO4?`>)W%p$-nUGdaVO$)I?dqE>@No zeU`BVd>dBzXdnOr)fIW+^gW-V+=>)^&}@I0a>(l}?i$bMMNzGxJdxAMi&^1Y7k_HXxTrv`5n4%%uJX#vF7QXzPMnzD7q zCbtKFY`^zaPx<#hUowX4JIT15G<7+I@hkGdP{kEmuflmV)AR0F3i`1R|1u4hGsalx zP*L6KAGKq-kJbD7uR}BMt^m>B28Y^k|LO@ja+y%?VAXKw+`x`vGQH+?Tg` zmLgI#6Cc6t(82XPxmMv8@<*ttS?0VxaJ9bJhkar$C+zix()^+=rc-5H2sI{6-m=>B z80J!$FT-Y)p%kXhD+K?X#_J&KgF=u1)&SCcXU;1=mN+K(j4UD`guOg>GDp{>PI*UW z9D0y#DE=GZlGL_5!E=J+mx8)BhEctPAg{n|8NJ`5rAe1k_vMM63M~3g!~h*UdY! z(tY~cXmyk$Fqc~Wo@k5uwsJOTmREbbQQNiivhL)EX=kVS+@n-EH)9+P(a*6FOHf*w zQo$wsr^|^qv7@u+Hm0hmy`?<2zE@i9=c#o^rD>>!z-Y78_p*U0@wC$KnR-b_(c>yg93Viw4AUT)RM z&Yc&)J>il)9G46~7(B5=Wga2E>Mhb2jZ5dAgRsukJr7$e+lfDi8a*Q-&>7bHMXZkK zY8a(!v3SvvX`G{EjUW3*h`u(|*i4ZlcQ5Ao!ird((ee%5hs}q2k;d6Bc*ptULXEp` zo16#dpU?IvD5@P`mYx`N!M4qrWusE!Mn*b$BdJ$dX2TvBo*T<;LP;J>tUY1yGCArM zaa2o*H9vFsul}EM=*jjm!5c*yHfy7E}UgEw!mN=t{9qpNNO}8hrXM@lp zohUw0J6%b9FO~NIdzlLp_zc|LR z8;KmAjMbhQDfY)5^*7*vns%WSmApRaW1Hk0R&lex&!RD&`5|c5LqSdZ%^pE8LH!IL zU{!Dnt4PR<2G;n}7*Tc>-iBhEL0L?X?wPQsU+ujNib4m=APwG`bM=j=mI52TW8gAz zdFsY2$Kb)_6%TBg|ArY*Medgwx}c(l3886XMIh zWAwS-A#_zH-EU)w`-JwtfRJR__Lc0$8KPxtP)9SpjcO zK01rWmSIeGf_;f4wi@E6g3o4^{e?8d0~m5aj0$HcoQ^FJ;NH!fGsg3FaJTw)Z0#f1nTR+tLGW-{wCTbLiT=w4Q4A)pEkBPVQz2j}mX zhW)frmaO|J#Sb3XMW$))Ctrd6@!_Bv+f?}|HU{GHKGEahNPXR8z@H(;K{znc#2&#O z$d12Q1f>Ay`v!LP9Hd_Pe_1;T7m5dr$zjGSddCl61xu_;ig`w+LHg8GlsgIp&8@J)8Ns-;wn^FhH5l@wZ)^)bF<*GC ztlgrlwiT946?!T--e1^+y4T_&?+*qK0N11($kRjW*16PV>fl0)1nE7(wIC~mRkjdQ z@H`FIeRtIfvQebFpNX^)b5 zjR9`U5j`+7-Bio#P@`W$F@Ip6HWWbVE*I)=f#sRi;7qEh^_ds&koN9jTr|-WVsNxZ`PVz&=*89W2=$$XmtDx%d;n;SPbN8` zKo5J>o)96kkP6l>0@!qj!71aqS+F!XC5Ii>x74(RToKCoRw&uiFWQjtBcu{1iP~oP()_x)<)AA!5^;54Lx=7P8b zbw8{&Q0RVrt>%6`D>&*yg;^xA7a9~dP)wzR+&waN9=_<)4!q(ZNhQ>)UIw$c`$u3s zBoZhZSG^Ay4VHwq@I5xGuIAS_@~FE)Uf<)h2P70OU4pB8+@lBbhO3vy3qETAHli90 zMnS5MQ%V_hvww`^Yt7YB%}bJZ-M<0iu{~ix=cYHtY^V`7OZE%dKRo_!Fm>~XTf?FtY^V`7OZE%dKRo_!Fm?__gNrjH?1iku+jMZ s=@VA#$XQ3ue~+AXwEPP#cZHWkX}BSU*xMS>0>Iz-GZ# Date: Fri, 14 Nov 2025 17:22:21 -0800 Subject: [PATCH 32/42] docs fix spend tracking (#16675) --- .../docs/proxy/sync_models_github.md | 19 ++++++++++++++++--- docs/my-website/sidebars.js | 1 + 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/my-website/docs/proxy/sync_models_github.md b/docs/my-website/docs/proxy/sync_models_github.md index d2f410e549..f390ed0cb9 100644 --- a/docs/my-website/docs/proxy/sync_models_github.md +++ b/docs/my-website/docs/proxy/sync_models_github.md @@ -1,8 +1,21 @@ -# Syncing Models to GitHub model_context_window +# Auto Sync New Models (Day-0 Launches) -Sync model pricing data from GitHub's `model_prices_and_context_window.json` file outside of the LiteLLM UI. +Automatically keep your model pricing and context window data up to date without restarting your service. **This allows you to add day-0 support for new models without restarting your service.** -> **📹 Video Tutorial**: [Watch how to sync models via the Admin UI](https://www.loom.com/share/ba41acc1882d41b284bbddbb0e9c27ce?sid=bdae351e-2026-4e39-932b-fcb185ff612c) +## Overview + +When providers like OpenAI or Anthropic release new models (e.g., GPT-5, Claude 4), you typically need to restart your LiteLLM service to get the latest pricing and context window data. + +With auto-sync, LiteLLM automatically pulls the latest model data from GitHub's [`model_prices_and_context_window.json`](https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json) without requiring a restart. This means: + +- **Zero downtime** when new models are released +- **Always accurate pricing** for cost tracking and budgets +- **Automatic updates** - set it once and forget it + + + +
+
## Quick Start diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index 20f4b982d0..19d7faf796 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -285,6 +285,7 @@ const sidebars = { items: [ "proxy/cost_tracking", "proxy/custom_pricing", + "proxy/sync_models_github", "proxy/billing", ], }, From 74763f6cfc0033b2c810c456c01188e6e65cf4f6 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 14 Nov 2025 17:27:32 -0800 Subject: [PATCH 33/42] fix _map_reasoning_effort --- .../litellm_responses_transformation/transformation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/completion_extras/litellm_responses_transformation/transformation.py b/litellm/completion_extras/litellm_responses_transformation/transformation.py index a64661da33..8c3ebd5103 100644 --- a/litellm/completion_extras/litellm_responses_transformation/transformation.py +++ b/litellm/completion_extras/litellm_responses_transformation/transformation.py @@ -545,7 +545,7 @@ class LiteLLMResponsesTransformationHandler(CompletionTransformationBridge): # If string is passed, map without summary (default) if reasoning_effort == "none": - return Reasoning(effort="none") + return Reasoning(effort="none") # type: ignore elif reasoning_effort == "high": return Reasoning(effort="high") elif reasoning_effort == "medium": From c18f411a5eb17e2c526beccec1e4a5ee07ab0e6e Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 14 Nov 2025 17:28:15 -0800 Subject: [PATCH 34/42] test_encrypt_response_id_success --- .../test_responses_id_security.py | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/tests/test_litellm/test_responses_id_security.py b/tests/test_litellm/test_responses_id_security.py index 16e57f73cf..e72a09ee0d 100644 --- a/tests/test_litellm/test_responses_id_security.py +++ b/tests/test_litellm/test_responses_id_security.py @@ -115,14 +115,17 @@ class TestEncryptResponseId: "litellm.proxy.hooks.responses_id_security.encrypt_value_helper" ) as mock_encrypt: mock_encrypt.return_value = "encrypted_base64_value" + + with patch.object( + responses_id_security, "_get_signing_key", return_value="test-key" + ): + result = responses_id_security._encrypt_response_id( + mock_response, mock_user_api_key_dict + ) - result = responses_id_security._encrypt_response_id( - mock_response, mock_user_api_key_dict - ) - - assert result.id == "resp_encrypted_base64_value" - assert result.id.startswith("resp_") - mock_encrypt.assert_called_once() + assert result.id == "resp_encrypted_base64_value" + assert result.id.startswith("resp_") + mock_encrypt.assert_called_once() def test_encrypt_response_id_maintains_prefix( self, responses_id_security, mock_user_api_key_dict @@ -136,12 +139,15 @@ class TestEncryptResponseId: "litellm.proxy.hooks.responses_id_security.encrypt_value_helper" ) as mock_encrypt: mock_encrypt.return_value = "encrypted_value_456" + + with patch.object( + responses_id_security, "_get_signing_key", return_value="test-key" + ): + result = responses_id_security._encrypt_response_id( + mock_response, mock_user_api_key_dict + ) - result = responses_id_security._encrypt_response_id( - mock_response, mock_user_api_key_dict - ) - - assert result.id.startswith("resp_") + assert result.id.startswith("resp_") class TestCheckUserAccessToResponseId: From 8fdb12a44b7faba2ed53f6dcac1f919df5c3b0b6 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 14 Nov 2025 17:31:34 -0800 Subject: [PATCH 35/42] fix bedrock agentocre --- .../bedrock/chat/agentcore/sse_iterator.py | 142 +++++++++++++++++- 1 file changed, 136 insertions(+), 6 deletions(-) diff --git a/litellm/llms/bedrock/chat/agentcore/sse_iterator.py b/litellm/llms/bedrock/chat/agentcore/sse_iterator.py index 35407337fd..e0da4fcd44 100644 --- a/litellm/llms/bedrock/chat/agentcore/sse_iterator.py +++ b/litellm/llms/bedrock/chat/agentcore/sse_iterator.py @@ -19,21 +19,151 @@ if TYPE_CHECKING: class AgentCoreSSEStreamIterator: - """Async iterator for AgentCore SSE streaming responses.""" + """Iterator for AgentCore SSE streaming responses. Supports both sync and async iteration.""" def __init__(self, response: httpx.Response, model: str): self.response = response self.model = model self.finished = False - self.line_iterator = self.response.aiter_lines() + self.line_iterator = None + self.async_line_iterator = None - def __aiter__(self): + def __iter__(self): + """Initialize sync iteration.""" + self.line_iterator = self.response.iter_lines() return self - async def __anext__(self) -> ModelResponse: - """Parse SSE events and yield ModelResponse chunks.""" + def __aiter__(self): + """Initialize async iteration.""" + self.async_line_iterator = self.response.aiter_lines() + return self + + def __next__(self) -> ModelResponse: + """Sync iteration - parse SSE events and yield ModelResponse chunks.""" try: - async for line in self.line_iterator: + if self.line_iterator is None: + raise StopIteration + for line in self.line_iterator: + line = line.strip() + + if not line or not line.startswith('data:'): + continue + + # Extract JSON from SSE line + json_str = line[5:].strip() + if not json_str: + continue + + try: + data = json.loads(json_str) + + # Skip non-dict data + if not isinstance(data, dict): + continue + + # Process content delta events + if "event" in data and isinstance(data["event"], dict): + event_payload = data["event"] + content_block_delta = event_payload.get("contentBlockDelta") + + if content_block_delta: + delta = content_block_delta.get("delta", {}) + text = delta.get("text", "") + + if text: + # Yield chunk with text + chunk = ModelResponse( + id=f"chatcmpl-{uuid.uuid4()}", + created=0, + model=self.model, + object="chat.completion.chunk", + ) + + chunk.choices = [ + StreamingChoices( + finish_reason=None, + index=0, + delta=Delta(content=text, role="assistant"), + ) + ] + + return chunk + + # Check for metadata/usage + metadata = event_payload.get("metadata") + if metadata and "usage" in metadata: + # This is the final chunk with usage + chunk = ModelResponse( + id=f"chatcmpl-{uuid.uuid4()}", + created=0, + model=self.model, + object="chat.completion.chunk", + ) + + chunk.choices = [ + StreamingChoices( + finish_reason="stop", + index=0, + delta=Delta(), + ) + ] + + usage_data: AgentCoreUsage = metadata["usage"] # type: ignore + setattr(chunk, "usage", Usage( + prompt_tokens=usage_data.get("inputTokens", 0), + completion_tokens=usage_data.get("outputTokens", 0), + total_tokens=usage_data.get("totalTokens", 0), + )) + + self.finished = True + return chunk + + # Check for final message (alternative finish signal) + if "message" in data and isinstance(data["message"], dict): + if not self.finished: + chunk = ModelResponse( + id=f"chatcmpl-{uuid.uuid4()}", + created=0, + model=self.model, + object="chat.completion.chunk", + ) + + chunk.choices = [ + StreamingChoices( + finish_reason="stop", + index=0, + delta=Delta(), + ) + ] + + self.finished = True + return chunk + + except json.JSONDecodeError: + verbose_logger.debug(f"Skipping non-JSON SSE line: {line[:100]}") + continue + + # Stream ended naturally + raise StopIteration + + except StopIteration: + raise + except httpx.StreamConsumed: + # This is expected when the stream has been fully consumed + raise StopIteration + except httpx.StreamClosed: + # This is expected when the stream is closed + raise StopIteration + except Exception as e: + verbose_logger.error(f"Error in AgentCore SSE stream: {str(e)}") + raise StopIteration + + async def __anext__(self) -> ModelResponse: + """Async iteration - parse SSE events and yield ModelResponse chunks.""" + try: + if self.async_line_iterator is None: + raise StopAsyncIteration + async for line in self.async_line_iterator: line = line.strip() if not line or not line.startswith('data:'): From 87b778018215f4e8cf5c21e866bf75ac880f7ffc Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 14 Nov 2025 17:35:54 -0800 Subject: [PATCH 36/42] fix LiteLLM_DailyTagSpend add request_id --- .../migration.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 litellm-proxy-extras/litellm_proxy_extras/migrations/20251114173537_add_request_id_to_daily_tag_spend/migration.sql diff --git a/litellm-proxy-extras/litellm_proxy_extras/migrations/20251114173537_add_request_id_to_daily_tag_spend/migration.sql b/litellm-proxy-extras/litellm_proxy_extras/migrations/20251114173537_add_request_id_to_daily_tag_spend/migration.sql new file mode 100644 index 0000000000..6871e27a28 --- /dev/null +++ b/litellm-proxy-extras/litellm_proxy_extras/migrations/20251114173537_add_request_id_to_daily_tag_spend/migration.sql @@ -0,0 +1,3 @@ +-- AlterTable +ALTER TABLE "LiteLLM_DailyTagSpend" ADD COLUMN "request_id" TEXT; + From 6b532b31a697be9c7810ebe73cc98c6c8c58b0ef Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 14 Nov 2025 17:38:46 -0800 Subject: [PATCH 37/42] =?UTF-8?q?bump:=20version=201.79.3=20=E2=86=92=201.?= =?UTF-8?q?79.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ebfa3345fa..ca2fb7af8b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "1.79.3" +version = "1.79.4" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT" @@ -159,7 +159,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.79.3" +version = "1.79.4" version_files = [ "pyproject.toml:^version" ] From f8c022c8f5af5ea8a7a3efadc14e658e595264b9 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 14 Nov 2025 17:39:54 -0800 Subject: [PATCH 38/42] bump new schema --- ...itellm_proxy_extras-0.4.4-py3-none-any.whl | Bin 0 -> 35933 bytes .../dist/litellm_proxy_extras-0.4.4.tar.gz | Bin 0 -> 17020 bytes litellm-proxy-extras/pyproject.toml | 4 +- poetry.lock | 751 +++++++++++++++--- pyproject.toml | 2 +- requirements.txt | 2 +- 6 files changed, 645 insertions(+), 114 deletions(-) create mode 100644 litellm-proxy-extras/dist/litellm_proxy_extras-0.4.4-py3-none-any.whl create mode 100644 litellm-proxy-extras/dist/litellm_proxy_extras-0.4.4.tar.gz diff --git a/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.4-py3-none-any.whl b/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.4-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..ef931a15b7b8e1f64efa58c2d21b705c0e2e2a3f GIT binary patch literal 35933 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

)YE-UXyc*x_feJd9TrS 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 literal 0 HcmV?d00001 diff --git a/docs/my-website/img/add_model_key.png b/docs/my-website/img/add_model_key.png new file mode 100644 index 0000000000000000000000000000000000000000..9376d324ff948afe93bf033bdb3019f31d1fea0d GIT binary patch literal 526523 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