From 6637beb24746fb43cd6bcfe1c30f187d178ea8a2 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Sat, 1 Nov 2025 13:45:32 -0700 Subject: [PATCH] fix: minor fixes + dep updates --- ...itellm_proxy_extras-0.4.1-py3-none-any.whl | Bin 0 -> 34677 bytes .../dist/litellm_proxy_extras-0.4.1.tar.gz | Bin 0 -> 17432 bytes .../migration.sql | 6 +++--- .../litellm_proxy_extras/schema.prisma | 11 ++++++++++ litellm-proxy-extras/pyproject.toml | 4 ++-- .../search_api/transformation.py | 6 ++++-- litellm/proxy/_new_secret_config.yaml | 19 +++++------------- .../llm_passthrough_endpoints.py | 2 +- .../pass_through_endpoints.py | 3 ++- poetry.lock | 8 ++++---- pyproject.toml | 2 +- requirements.txt | 2 +- schema.prisma | 2 +- 13 files changed, 35 insertions(+), 30 deletions(-) create mode 100644 litellm-proxy-extras/dist/litellm_proxy_extras-0.4.1-py3-none-any.whl create mode 100644 litellm-proxy-extras/dist/litellm_proxy_extras-0.4.1.tar.gz rename litellm-proxy-extras/litellm_proxy_extras/migrations/{20251101123718_add_vector_store_index_table => 20251101131415_add_managed_vector_store_index_table}/migration.sql (53%) diff --git a/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.1-py3-none-any.whl b/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.1-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..2da8f74acd64194d3a1910d74e8375f673701f06 GIT binary patch literal 34677 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≀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 literal 0 HcmV?d00001 diff --git a/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.1.tar.gz b/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..6e2e47fa7bed374de6180c31c033980d52e45741 GIT binary patch literal 17432 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 literal 0 HcmV?d00001 diff --git a/litellm-proxy-extras/litellm_proxy_extras/migrations/20251101123718_add_vector_store_index_table/migration.sql b/litellm-proxy-extras/litellm_proxy_extras/migrations/20251101131415_add_managed_vector_store_index_table/migration.sql similarity index 53% rename from litellm-proxy-extras/litellm_proxy_extras/migrations/20251101123718_add_vector_store_index_table/migration.sql rename to litellm-proxy-extras/litellm_proxy_extras/migrations/20251101131415_add_managed_vector_store_index_table/migration.sql index 8b9048002e..af13500d1c 100644 --- a/litellm-proxy-extras/litellm_proxy_extras/migrations/20251101123718_add_vector_store_index_table/migration.sql +++ b/litellm-proxy-extras/litellm_proxy_extras/migrations/20251101131415_add_managed_vector_store_index_table/migration.sql @@ -1,5 +1,5 @@ -- CreateTable -CREATE TABLE "LiteLLM_IndexTable" ( +CREATE TABLE "LiteLLM_ManagedVectorStoreIndexTable" ( "id" TEXT NOT NULL, "index_name" TEXT NOT NULL, "litellm_params" JSONB NOT NULL, @@ -9,9 +9,9 @@ CREATE TABLE "LiteLLM_IndexTable" ( "updated_at" TIMESTAMP(3) NOT NULL, "updated_by" TEXT, - CONSTRAINT "LiteLLM_IndexTable_pkey" PRIMARY KEY ("id") + CONSTRAINT "LiteLLM_ManagedVectorStoreIndexTable_pkey" PRIMARY KEY ("id") ); -- CreateIndex -CREATE UNIQUE INDEX "LiteLLM_IndexTable_index_name_key" ON "LiteLLM_IndexTable"("index_name"); +CREATE UNIQUE INDEX "LiteLLM_ManagedVectorStoreIndexTable_index_name_key" ON "LiteLLM_ManagedVectorStoreIndexTable"("index_name"); diff --git a/litellm-proxy-extras/litellm_proxy_extras/schema.prisma b/litellm-proxy-extras/litellm_proxy_extras/schema.prisma index ac1acee908..605a312db4 100644 --- a/litellm-proxy-extras/litellm_proxy_extras/schema.prisma +++ b/litellm-proxy-extras/litellm_proxy_extras/schema.prisma @@ -590,6 +590,17 @@ model LiteLLM_SSOConfig { updated_at DateTime @updatedAt } +model LiteLLM_ManagedVectorStoreIndexTable { + id String @id @default(uuid()) + index_name String @unique + litellm_params Json + index_info Json? + created_at DateTime @default(now()) + created_by String? + updated_at DateTime @updatedAt + updated_by String? +} + // Cache configuration table model LiteLLM_CacheConfig { id String @id @default("cache_config") diff --git a/litellm-proxy-extras/pyproject.toml b/litellm-proxy-extras/pyproject.toml index d49db2a9a8..0707775939 100644 --- a/litellm-proxy-extras/pyproject.toml +++ b/litellm-proxy-extras/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm-proxy-extras" -version = "0.3.0" +version = "0.4.1" description = "Additional files for the LiteLLM Proxy. Reduces the size of the main litellm package." authors = ["BerriAI"] readme = "README.md" @@ -22,7 +22,7 @@ requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "0.3.0" +version = "0.4.1" version_files = [ "pyproject.toml:version", "../requirements.txt:litellm-proxy-extras==", diff --git a/litellm/llms/vertex_ai/vector_stores/search_api/transformation.py b/litellm/llms/vertex_ai/vector_stores/search_api/transformation.py index 8fa65002d5..179bd7aeff 100644 --- a/litellm/llms/vertex_ai/vector_stores/search_api/transformation.py +++ b/litellm/llms/vertex_ai/vector_stores/search_api/transformation.py @@ -83,10 +83,12 @@ class VertexSearchAPIVectorStoreConfig(BaseVectorStoreConfig, VertexBase): """ vertex_location = self.get_vertex_ai_location(litellm_params) vertex_project = self.get_vertex_ai_project(litellm_params) - engine_id = litellm_params.get("vertex_app_id") collection_id = ( litellm_params.get("vertex_collection_id") or "default_collection" ) + datastore_id = litellm_params.get("vector_store_id") + if not datastore_id: + raise ValueError("vector_store_id is required") if api_base: return api_base.rstrip("/") @@ -94,7 +96,7 @@ class VertexSearchAPIVectorStoreConfig(BaseVectorStoreConfig, VertexBase): return ( f"https://discoveryengine.googleapis.com/v1/" f"projects/{vertex_project}/locations/{vertex_location}/" - f"collections/{collection_id}/engines/{engine_id}/servingConfigs/default_config" + f"collections/{collection_id}/dataStores/{datastore_id}/servingConfigs/default_config" ) def transform_search_vector_store_request( diff --git a/litellm/proxy/_new_secret_config.yaml b/litellm/proxy/_new_secret_config.yaml index aa442144a8..1f57cd9f15 100644 --- a/litellm/proxy/_new_secret_config.yaml +++ b/litellm/proxy/_new_secret_config.yaml @@ -7,18 +7,9 @@ model_list: model: openai/text-embedding-3-large vector_store_registry: - - vector_store_name: "milvus-knowledgebase" + - vector_store_name: "vertex-ai-litellm-website-knowledgebase" litellm_params: - vector_store_id: "my-collection-name" - custom_llm_provider: "milvus" - api_key: os.environ/MILVUS_API_KEY - api_base: https://your-milvus-instance.milvus.io - litellm_embedding_model: "azure/text-embedding-3-large" - litellm_embedding_config: - api_base: https://your-endpoint.cognitiveservices.azure.com/ - api_key: os.environ/AZURE_API_KEY - api_version: "2025-09-01" - milvus_text_field: "book_intro" - # Optional Milvus parameters - annsField: "book_intro_vector" - limit: 10 \ No newline at end of file + vector_store_id: "litellm-docs_1761094140318" + custom_llm_provider: "vertex_ai/search_api" + vertex_project: "test-vector-store-db" + vertex_location: "global" \ No newline at end of file diff --git a/litellm/proxy/pass_through_endpoints/llm_passthrough_endpoints.py b/litellm/proxy/pass_through_endpoints/llm_passthrough_endpoints.py index 5d1c2febad..cd8f6c3800 100644 --- a/litellm/proxy/pass_through_endpoints/llm_passthrough_endpoints.py +++ b/litellm/proxy/pass_through_endpoints/llm_passthrough_endpoints.py @@ -1504,6 +1504,7 @@ async def _base_vertex_proxy_route( endpoint=endpoint, target=target, custom_headers=headers, + is_streaming_request=is_streaming_request, ) # dynamically construct pass-through endpoint based on incoming path try: @@ -1511,7 +1512,6 @@ async def _base_vertex_proxy_route( request, fastapi_response, user_api_key_dict, - stream=is_streaming_request, # type: ignore ) except ProxyException as e: if headers_passed_through: diff --git a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py index 39187edb52..b66bc6eac2 100644 --- a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py +++ b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py @@ -995,6 +995,7 @@ def create_pass_through_route( include_subpath: Optional[bool] = False, cost_per_request: Optional[float] = None, custom_llm_provider: Optional[str] = None, + is_streaming_request: Optional[bool] = False, ): # check if target is an adapter.py or a url from litellm._uuid import uuid @@ -1115,7 +1116,7 @@ def create_pass_through_route( forward_headers=cast(Optional[bool], param_forward_headers), merge_query_params=cast(Optional[bool], param_merge_query_params), query_params=final_query_params, - stream=stream, + stream=is_streaming_request or stream, custom_body=final_custom_body, cost_per_request=cast(Optional[float], param_cost_per_request), custom_llm_provider=custom_llm_provider, diff --git a/poetry.lock b/poetry.lock index c252b00763..ab34c86351 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2645,13 +2645,13 @@ files = [ [[package]] name = "litellm-proxy-extras" -version = "0.3.0" +version = "0.4.1" 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" files = [ - {file = "litellm_proxy_extras-0.3.0-py3-none-any.whl", hash = "sha256:5c366ecb15e9209908cd6142c2d2fc3d0e95b5e3115c9601cc192acc2d444821"}, - {file = "litellm_proxy_extras-0.3.0.tar.gz", hash = "sha256:d72993f88e8b553238081f7b1704c49d856bd58c7737838903614b15de479a8d"}, + {file = "litellm_proxy_extras-0.4.1-py3-none-any.whl", hash = "sha256:9f9b29c9824fe153a5cce5001211884fab858a47185bc7fcda39e5fca07c7b9b"}, + {file = "litellm_proxy_extras-0.4.1.tar.gz", hash = "sha256:5d055352e0592d062604fdd4067294e52b0692575cef140c09b11b3cc633169a"}, ] [[package]] @@ -6519,4 +6519,4 @@ utils = ["numpydoc"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0, !=3.9.7" -content-hash = "2fd4bde64ab8eab79338d2abc977197a22479ae6ef8510434d28cc49bb1213ab" +content-hash = "4aab4263275116fad0eaefa44fb10d8a9934525bf506bd35db39ca9310822691" diff --git a/pyproject.toml b/pyproject.toml index fd7e9f46d1..6b219307ec 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.3.0", optional = true} +litellm-proxy-extras = {version = "0.4.1", 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 f2e31d45ab..ce1c41ce26 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.3.0 # for proxy extras - e.g. prisma migrations +litellm-proxy-extras==0.4.1 # for proxy extras - e.g. prisma migrations ### LITELLM PACKAGE DEPENDENCIES python-dotenv==1.0.1 # for env tiktoken==0.8.0 # for calculating usage diff --git a/schema.prisma b/schema.prisma index a142b388b2..605a312db4 100644 --- a/schema.prisma +++ b/schema.prisma @@ -590,7 +590,7 @@ model LiteLLM_SSOConfig { updated_at DateTime @updatedAt } -model LiteLLM_IndexTable { +model LiteLLM_ManagedVectorStoreIndexTable { id String @id @default(uuid()) index_name String @unique litellm_params Json