From d63e9688c18f084cf7675d2cb4607e957cb931ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 01:38:09 +0000 Subject: [PATCH 1/2] Update chromadb requirement from <1.4,>=0.5 to >=0.5,<1.6 in /python Updates the requirements on [chromadb](https://github.com/chroma-core/chroma) to permit the latest version. - [Release notes](https://github.com/chroma-core/chroma/releases) - [Changelog](https://github.com/chroma-core/chroma/blob/main/RELEASE_PROCESS.md) - [Commits](https://github.com/chroma-core/chroma/compare/0.5.0...1.5.8) --- updated-dependencies: - dependency-name: chromadb dependency-version: 1.5.8 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index c3044451cb76..2b98c1eac26d 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -77,7 +77,7 @@ azure = [ "azure-cosmos ~= 4.7" ] chroma = [ - "chromadb >= 0.5,< 1.4" + "chromadb >= 0.5,< 1.6" ] copilotstudio = [ "microsoft-agents-copilotstudio-client >= 0.3.1", From 0b24a7f72ae8112a12d8b1c626cc5bc64cc634ad Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 17 Jun 2026 05:32:38 +0000 Subject: [PATCH 2/2] Fix CI failures: update azure-search-documents compatibility and chromadb lock --- .../connectors/azure_ai_search.py | 101 ++++++++++++++---- .../connectors/memory/test_azure_ai_search.py | 57 ++++++++-- python/uv.lock | 49 +++------ 3 files changed, 142 insertions(+), 65 deletions(-) diff --git a/python/semantic_kernel/connectors/azure_ai_search.py b/python/semantic_kernel/connectors/azure_ai_search.py index 8a469b6aa2b2..f01bef97a96f 100644 --- a/python/semantic_kernel/connectors/azure_ai_search.py +++ b/python/semantic_kernel/connectors/azure_ai_search.py @@ -7,7 +7,7 @@ from collections.abc import Sequence from typing import Any, ClassVar, Final, Generic, TypeVar -from azure.core.credentials import AzureKeyCredential, TokenCredential +from azure.core.credentials import AzureKeyCredential from azure.core.credentials_async import AsyncTokenCredential from azure.search.documents.aio import SearchClient from azure.search.documents.indexes.aio import SearchIndexClient @@ -149,23 +149,47 @@ class AzureAISearchSettings(KernelBaseSettings): def _get_search_client( - search_index_client: SearchIndexClient, collection_name: str | None, **kwargs: Any + endpoint: str, + collection_name: str | None, + credential: "AzureKeyCredential | AsyncTokenCredential", + **kwargs: Any, ) -> SearchClient: """Create a search client for a collection.""" if not collection_name: raise VectorStoreInitializationException("Collection name is required to create a search client.") try: - return SearchClient(search_index_client._endpoint, collection_name, search_index_client._credential, **kwargs) + return SearchClient(endpoint, collection_name, credential, **kwargs) except ValueError as exc: raise VectorStoreInitializationException( f"Failed to create Azure Cognitive Search client for collection {collection_name}." ) from exc +def _resolve_credential( + azure_ai_search_settings: AzureAISearchSettings, + azure_credential: AzureKeyCredential | None = None, + token_credential: "AsyncTokenCredential | None" = None, +) -> "AzureKeyCredential | AsyncTokenCredential": + """Resolve the credential to use for Azure AI Search. + + Args: + azure_ai_search_settings: Azure AI Search settings. + azure_credential: Optional Azure credentials (default: {None}). + token_credential: Optional Token credential (default: {None}). + """ + if azure_credential: + return azure_credential + if token_credential: + return token_credential + if azure_ai_search_settings.api_key: + return AzureKeyCredential(azure_ai_search_settings.api_key.get_secret_value()) + raise ServiceInitializationError("Error: missing Azure AI Search client credentials.") + + def _get_search_index_client( azure_ai_search_settings: AzureAISearchSettings, azure_credential: AzureKeyCredential | None = None, - token_credential: "AsyncTokenCredential | TokenCredential | None" = None, + token_credential: "AsyncTokenCredential | None" = None, ) -> SearchIndexClient: """Return a client for Azure AI Search. @@ -174,20 +198,11 @@ def _get_search_index_client( azure_credential: Optional Azure credentials (default: {None}). token_credential: Optional Token credential (default: {None}). """ - # Credentials - credential: "AzureKeyCredential | AsyncTokenCredential | TokenCredential | None" = None - if azure_credential: - credential = azure_credential - elif token_credential: - credential = token_credential - elif azure_ai_search_settings.api_key: - credential = AzureKeyCredential(azure_ai_search_settings.api_key.get_secret_value()) - else: - raise ServiceInitializationError("Error: missing Azure AI Search client credentials.") + credential = _resolve_credential(azure_ai_search_settings, azure_credential, token_credential) return SearchIndexClient( endpoint=str(azure_ai_search_settings.endpoint), - credential=credential, # type: ignore + credential=credential, headers=prepend_semantic_kernel_to_user_agent({}) if APP_INFO else None, ) @@ -286,6 +301,8 @@ class AzureAISearchCollection( search_client: SearchClient search_index_client: SearchIndexClient + search_endpoint: str | None = None + search_credential: Any = None supported_key_types: ClassVar[set[str] | None] = {"str"} supported_vector_types: ClassVar[set[str] | None] = {"float", "int"} supported_search_types: ClassVar[set[SearchType]] = {SearchType.VECTOR, SearchType.KEYWORD_HYBRID} @@ -299,6 +316,7 @@ def __init__( search_index_client: SearchIndexClient | None = None, search_client: SearchClient | None = None, embedding_generator: "EmbeddingGeneratorBase | None" = None, + search_credential: "AzureKeyCredential | AsyncTokenCredential | None" = None, **kwargs: Any, ) -> None: """Initializes a new instance of the AzureAISearchCollection class. @@ -319,13 +337,16 @@ def __init__( used for creating and deleting indexes. search_client: The search client for interacting with Azure AI Search, used for record operations. + search_credential: The credential used to authenticate with Azure AI Search. + If not provided, it will be resolved from azure_credentials, token_credentials, + or api_key in kwargs/environment. embedding_generator: The embedding generator, optional. **kwargs: Additional keyword arguments, including: The same keyword arguments used for AzureAISearchVectorStore: - search_endpoint: str | None = None, + search_endpoint: The endpoint of the Azure AI Search service, optional. api_key: str | None = None, azure_credentials: AzureKeyCredential | None = None, - token_credentials: AsyncTokenCredential | TokenCredential | None = None, + token_credentials: AsyncTokenCredential | None = None, env_file_path: str | None = None, env_file_encoding: str | None = None @@ -343,6 +364,8 @@ def __init__( collection_name=collection_name, search_client=search_client, search_index_client=search_index_client, + search_endpoint=kwargs.get("search_endpoint"), + search_credential=search_credential, managed_search_index_client=False, managed_client=False, embedding_generator=embedding_generator, @@ -360,14 +383,24 @@ def __init__( ) except ValidationError as exc: raise VectorStoreInitializationException("Failed to create Azure Cognitive Search settings.") from exc + endpoint = str(azure_ai_search_settings.endpoint) + credential = search_credential or _resolve_credential( + azure_ai_search_settings, + azure_credential=kwargs.get("azure_credentials"), + token_credential=kwargs.get("token_credentials"), + ) super().__init__( record_type=record_type, definition=definition, collection_name=azure_ai_search_settings.index_name, search_client=_get_search_client( - search_index_client=search_index_client, collection_name=azure_ai_search_settings.index_name + endpoint=endpoint, + collection_name=azure_ai_search_settings.index_name, + credential=credential, ), search_index_client=search_index_client, + search_endpoint=endpoint, + search_credential=credential, managed_search_index_client=False, embedding_generator=embedding_generator, ) @@ -383,6 +416,12 @@ def __init__( ) except ValidationError as exc: raise VectorStoreInitializationException("Failed to create Azure Cognitive Search settings.") from exc + endpoint = str(azure_ai_search_settings.endpoint) + credential = search_credential or _resolve_credential( + azure_ai_search_settings, + azure_credential=kwargs.get("azure_credentials"), + token_credential=kwargs.get("token_credentials"), + ) search_index_client = _get_search_index_client( azure_ai_search_settings=azure_ai_search_settings, azure_credential=kwargs.get("azure_credentials"), @@ -393,10 +432,13 @@ def __init__( definition=definition, collection_name=azure_ai_search_settings.index_name, search_client=_get_search_client( - search_index_client=search_index_client, - collection_name=azure_ai_search_settings.index_name, # type: ignore + endpoint=endpoint, + collection_name=azure_ai_search_settings.index_name, + credential=credential, ), search_index_client=search_index_client, + search_endpoint=endpoint, + search_credential=credential, embedding_generator=embedding_generator, ) @@ -711,13 +753,15 @@ class AzureAISearchStore(VectorStore): """Azure AI Search store implementation.""" search_index_client: SearchIndexClient + search_endpoint: str | None = None + search_credential: Any = None def __init__( self, search_endpoint: str | None = None, api_key: str | None = None, azure_credentials: "AzureKeyCredential | None" = None, - token_credentials: "AsyncTokenCredential | TokenCredential | None" = None, + token_credentials: "AsyncTokenCredential | None" = None, search_index_client: SearchIndexClient | None = None, embedding_generator: "EmbeddingGeneratorBase | None" = None, env_file_path: str | None = None, @@ -725,6 +769,8 @@ def __init__( ) -> None: """Initializes a new instance of the AzureAISearchStore class.""" managed_client: bool = False + endpoint: str | None = None + credential: AzureKeyCredential | AsyncTokenCredential | None = None if not search_index_client: try: azure_ai_search_settings = AzureAISearchSettings( @@ -735,15 +781,26 @@ def __init__( ) except ValidationError as exc: raise VectorStoreInitializationException("Failed to create Azure AI Search settings.") from exc + endpoint = str(azure_ai_search_settings.endpoint) + credential = _resolve_credential( + azure_ai_search_settings, + azure_credential=azure_credentials, + token_credential=token_credentials, + ) search_index_client = _get_search_index_client( azure_ai_search_settings=azure_ai_search_settings, azure_credential=azure_credentials, token_credential=token_credentials, ) managed_client = True + else: + endpoint = search_endpoint + credential = azure_credentials or token_credentials or (AzureKeyCredential(api_key) if api_key else None) super().__init__( search_index_client=search_index_client, + search_endpoint=endpoint, + search_credential=credential, managed_client=managed_client, embedding_generator=embedding_generator, ) @@ -777,6 +834,8 @@ def get_collection( search_index_client=self.search_index_client, search_client=search_client, embedding_generator=embedding_generator or self.embedding_generator, + search_credential=self.search_credential, + search_endpoint=self.search_endpoint, **kwargs, ) diff --git a/python/tests/unit/connectors/memory/test_azure_ai_search.py b/python/tests/unit/connectors/memory/test_azure_ai_search.py index 82615ca6c426..d5a8ba2111e0 100644 --- a/python/tests/unit/connectors/memory/test_azure_ai_search.py +++ b/python/tests/unit/connectors/memory/test_azure_ai_search.py @@ -16,6 +16,7 @@ AzureAISearchStore, _definition_to_azure_ai_search_index, _get_search_index_client, + _resolve_credential, ) from semantic_kernel.exceptions import ( ServiceInitializationError, @@ -171,8 +172,6 @@ def test_init_with_search_index_client(azure_ai_search_unit_test_env, definition @mark.parametrize("exclude_list", [["AZURE_AI_SEARCH_INDEX_NAME"]], indirect=True) def test_init_with_search_index_client_fail(azure_ai_search_unit_test_env, definition): search_index_client = MagicMock(spec=SearchIndexClient) - search_index_client._endpoint = "test-endpoint" - search_index_client._credential = "test-credential" with raises(VectorStoreInitializationException): AzureAISearchCollection( record_type=dict, @@ -234,6 +233,7 @@ async def test_ensure_collection_deleted(collection, mock_ensure_collection_dele await collection.ensure_collection_deleted() +@mark.parametrize("distance_function", [("cosine_distance")]) async def test_create_index_from_index(collection, mock_ensure_collection_exists): from azure.search.documents.indexes.models import SearchIndex @@ -241,6 +241,7 @@ async def test_create_index_from_index(collection, mock_ensure_collection_exists await collection.ensure_collection_exists(index=index) +@mark.parametrize("distance_function", [("cosine_distance")]) async def test_create_index_from_definition(collection, mock_ensure_collection_exists): from azure.search.documents.indexes.models import SearchIndex @@ -301,32 +302,74 @@ def test_get_collection(vector_store, definition): assert collection.collection_name == "test" assert collection.search_index_client == vector_store.search_index_client assert collection.search_client is not None - assert collection.search_client._endpoint == vector_store.search_index_client._endpoint + assert collection.search_endpoint == vector_store.search_endpoint + assert collection.search_credential == vector_store.search_credential + + +def test_get_collection_with_provided_search_index_client(azure_ai_search_unit_test_env, definition): + """Test that get_collection works when AzureAISearchStore is created with a pre-built search_index_client. + + When search_index_client is provided directly, search_endpoint and search_credential + are not resolved at store creation time. get_collection() should still succeed + by falling back to environment variables for endpoint/credential resolution. + """ + search_index_client = MagicMock(spec=SearchIndexClient) + store = AzureAISearchStore(search_index_client=search_index_client) + assert store.search_endpoint is None + assert store.search_credential is None + + collection = store.get_collection( + collection_name="test", + record_type=dict, + definition=definition, + ) + assert collection is not None + assert collection.collection_name == "test" + assert collection.search_index_client == search_index_client + assert collection.search_client is not None @mark.parametrize("exclude_list", [["AZURE_AI_SEARCH_API_KEY"]], indirect=True) def test_get_search_index_client(azure_ai_search_unit_test_env): - from azure.core.credentials import AzureKeyCredential, TokenCredential + from azure.core.credentials import AzureKeyCredential + from azure.core.credentials_async import AsyncTokenCredential settings = AzureAISearchSettings(**azure_ai_search_unit_test_env, env_file_path="test.env") azure_credential = MagicMock(spec=AzureKeyCredential) client = _get_search_index_client(settings, azure_credential=azure_credential) assert client is not None - assert client._credential == azure_credential - token_credential = MagicMock(spec=TokenCredential) + token_credential = MagicMock(spec=AsyncTokenCredential) client2 = _get_search_index_client( settings, token_credential=token_credential, ) assert client2 is not None - assert client2._credential == token_credential with raises(ServiceInitializationError): _get_search_index_client(settings) +@mark.parametrize("exclude_list", [["AZURE_AI_SEARCH_API_KEY"]], indirect=True) +def test_resolve_credential(azure_ai_search_unit_test_env): + from azure.core.credentials import AzureKeyCredential + from azure.core.credentials_async import AsyncTokenCredential + + settings = AzureAISearchSettings(**azure_ai_search_unit_test_env, env_file_path="test.env") + + azure_credential = MagicMock(spec=AzureKeyCredential) + resolved = _resolve_credential(settings, azure_credential=azure_credential) + assert resolved == azure_credential + + token_credential = MagicMock(spec=AsyncTokenCredential) + resolved = _resolve_credential(settings, token_credential=token_credential) + assert resolved == token_credential + + with raises(ServiceInitializationError): + _resolve_credential(settings) + + @mark.parametrize("include_vectors", [True, False]) async def test_search_vectorized_search(collection, mock_search, include_vectors): results = await collection.search(vector=[0.1, 0.2, 0.3], include_vectors=include_vectors) diff --git a/python/uv.lock b/python/uv.lock index 430794738a60..1c928c01a912 100644 --- a/python/uv.lock +++ b/python/uv.lock @@ -545,15 +545,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d8/3a/6ef2047a072e54e1142718d433d50e9514c999a58f51abfff7902f3a72f8/azure_storage_blob-12.28.0-py3-none-any.whl", hash = "sha256:00fb1db28bf6a7b7ecaa48e3b1d5c83bfadacc5a678b77826081304bd87d6461", size = 431499, upload-time = "2026-01-06T23:48:58.995Z" }, ] -[[package]] -name = "backoff" -version = "2.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/47/d7/5bbeb12c44d7c4f2fb5b56abce497eb5ed9f34d85701de869acedd602619/backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", size = 17001, upload-time = "2022-10-05T19:19:32.061Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/73/b6e24bd22e6720ca8ee9a85a0c4a2971af8497d8f3193fa05390cbd46e09/backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8", size = 15148, upload-time = "2022-10-05T19:19:30.546Z" }, -] - [[package]] name = "bcrypt" version = "5.0.0" @@ -941,7 +932,7 @@ wheels = [ [[package]] name = "chromadb" -version = "1.0.21" +version = "1.5.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "bcrypt", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, @@ -960,9 +951,9 @@ dependencies = [ { name = "opentelemetry-sdk", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "orjson", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "overrides", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "posthog", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "pybase64", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "pydantic", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "pydantic-settings", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "pypika", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "rich", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, @@ -973,13 +964,13 @@ dependencies = [ { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "uvicorn", extra = ["standard"], marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/65/d7/98fdccb25ae3642213ebd29ca2060387cc6abd1f3f0e96b24a36796aa4ba/chromadb-1.0.21.tar.gz", hash = "sha256:583f12f8005f5d197e3207c3b845bce79b8ea6b57781aea505e12b08d26fd508", size = 1301769, upload-time = "2025-09-11T22:34:14.632Z" } +sdist = { url = "https://files.pythonhosted.org/packages/92/d1/5e33b26985f0c7046a0be1cee2158ada1748ee700d2545057fde1468d74d/chromadb-1.5.9.tar.gz", hash = "sha256:5c20e62a455c28bacac927f26116a73fd8e1799e0d908be8e8a4f02197a54731", size = 2595635, upload-time = "2026-05-05T05:54:51.713Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/87/554ec13e21150a548071dbaa9f13867946b56a8603ae045e79c7abf38034/chromadb-1.0.21-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:de6df7ba7a08cc8e76caa1509fd7b4317fc34f5842b4077e35985bf9625c9bab", size = 19173157, upload-time = "2025-09-11T22:34:11.973Z" }, - { url = "https://files.pythonhosted.org/packages/8d/dc/b01512adc298874613728176782772692f78b16fdb8cb59ae7d9bedbedbf/chromadb-1.0.21-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:b1a328a76ba1b1b199473db108ec7a22e048888d8d695f39aa503210082e80af", size = 18258590, upload-time = "2025-09-11T22:34:09.384Z" }, - { url = "https://files.pythonhosted.org/packages/58/93/a95266dd4d81f1015bf5259c647bcf1a7430b3fba58d4f8b6a5a11d3e399/chromadb-1.0.21-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7817cddbd52296c3c71031e330c2dbcd5c5b4f4430895c19ccea1dfa814f9787", size = 18835250, upload-time = "2025-09-11T22:34:03.7Z" }, - { url = "https://files.pythonhosted.org/packages/4a/57/3630d9d90d2b6988be01565386dce0c3a7e4d4eed2d276f849a0be792369/chromadb-1.0.21-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6b1420248865b5d3b6d0aac50e2d014c0b849959b6952ddd140cac13bb84c9f", size = 19838029, upload-time = "2025-09-11T22:34:06.818Z" }, - { url = "https://files.pythonhosted.org/packages/86/6f/2ea981d3cfae2b0388ec1e311bdfecf3cdc1d45f803305fb1d7ad0d0d9a0/chromadb-1.0.21-cp39-abi3-win_amd64.whl", hash = "sha256:3e44fcea9b5ce4e653cd32b0673fe5ecb99f9f737c0cf97414b1d096794a19f9", size = 19809949, upload-time = "2025-09-11T22:34:16.333Z" }, + { url = "https://files.pythonhosted.org/packages/dd/5b/3cced915244f43ed14b53fe9f63a37f05f865064f4e4fe7d9448d3f2a352/chromadb-1.5.9-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:60701011b5e6409647fa40d12c7c5a66b2b0bfcf33a52db2ad53a30a2abc4957", size = 22564540, upload-time = "2026-05-05T05:54:48.906Z" }, + { url = "https://files.pythonhosted.org/packages/34/4c/adcef1f4e82a2ef69ccd3711d55fc289193d54c4c0ff7a0292a3631db46f/chromadb-1.5.9-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:814b9c95617377f6501e5757d63dfddb554a283a7739c87b9fa573850174e6f3", size = 21699698, upload-time = "2026-05-05T05:54:45.078Z" }, + { url = "https://files.pythonhosted.org/packages/38/4e/937bc4d2e6f8ab9664ec79931fbbd69efff47e513ec2924b071e4b0ff774/chromadb-1.5.9-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9192d111bd662241625867962333d99369a00769a50f8b2f58cb388731274d7e", size = 22680924, upload-time = "2026-05-05T05:54:36.25Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ec/0c42039e80b9acc534f67b73b7a42471948042859b3a64867b50a4a77fa3/chromadb-1.5.9-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc09b3df76e5a5cb386aed2715a2eea152e3949f9e1ba93c7119505377749929", size = 23316203, upload-time = "2026-05-05T05:54:41.157Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ce/0f7be6e5d0feafa2cda54b12e6542afeea7dea89d2d411e14da90f8abb96/chromadb-1.5.9-cp39-abi3-win_amd64.whl", hash = "sha256:4fd0b560e56761b7f3cb4d5c6205fd5f20814484b4a3e4e9af9038c2b428fc6c", size = 23542454, upload-time = "2026-05-05T05:54:54.942Z" }, ] [[package]] @@ -4360,22 +4351,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9b/fb/a70a4214956182e0d7a9099ab17d50bfcba1056188e9b14f35b9e2b62a0d/portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf", size = 18423, upload-time = "2024-07-13T23:15:32.602Z" }, ] -[[package]] -name = "posthog" -version = "5.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "backoff", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "distro", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "python-dateutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "six", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/48/20/60ae67bb9d82f00427946218d49e2e7e80fb41c15dc5019482289ec9ce8d/posthog-5.4.0.tar.gz", hash = "sha256:701669261b8d07cdde0276e5bc096b87f9e200e3b9589c5ebff14df658c5893c", size = 88076, upload-time = "2025-06-20T23:19:23.485Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/98/e480cab9a08d1c09b1c59a93dade92c1bb7544826684ff2acbfd10fcfbd4/posthog-5.4.0-py3-none-any.whl", hash = "sha256:284dfa302f64353484420b52d4ad81ff5c2c2d1d607c4e2db602ac72761831bd", size = 105364, upload-time = "2025-06-20T23:19:22.001Z" }, -] - [[package]] name = "prance" version = "25.4.8.0" @@ -6481,13 +6456,13 @@ requires-dist = [ { name = "azure-cosmos", marker = "extra == 'azure'", specifier = "~=4.7" }, { name = "azure-identity", specifier = ">=1.13" }, { name = "azure-search-documents", marker = "extra == 'azure'", specifier = ">=11.6.0b4" }, - { name = "boto3", marker = "extra == 'aws'", specifier = ">=1.36.4,<1.41.0" }, - { name = "chromadb", marker = "extra == 'chroma'", specifier = ">=0.5,<1.4" }, + { name = "boto3", marker = "extra == 'aws'", specifier = ">=1.36.4,<1.43.0" }, + { name = "chromadb", marker = "extra == 'chroma'", specifier = ">=0.5,<1.6" }, { name = "cloudevents", specifier = "~=1.0" }, { name = "defusedxml", specifier = "~=0.7" }, { name = "faiss-cpu", marker = "extra == 'faiss'", specifier = ">=1.10.0" }, { name = "google-cloud-aiplatform", marker = "extra == 'google'", specifier = ">=1.114,<1.134" }, - { name = "google-genai", marker = "extra == 'google'", specifier = "~=1.51.0" }, + { name = "google-genai", marker = "extra == 'google'", specifier = ">=1.51,<1.75" }, { name = "ipykernel", marker = "extra == 'notebooks'", specifier = ">=6.29,<8.0" }, { name = "jinja2", specifier = "~=3.1" }, { name = "mcp", specifier = ">=1.26.0" }, @@ -6515,7 +6490,7 @@ requires-dist = [ { name = "psycopg", extras = ["binary", "pool"], marker = "extra == 'postgres'", specifier = "~=3.2" }, { name = "pyarrow", marker = "extra == 'usearch'", specifier = ">=12.0,<22.0" }, { name = "pybars4", specifier = "~=0.9" }, - { name = "pydantic", specifier = ">=2.0,!=2.10.0,!=2.10.1,!=2.10.2,!=2.10.3,<2.13" }, + { name = "pydantic", specifier = ">=2.0,!=2.10.0,!=2.10.1,!=2.10.2,!=2.10.3,<2.14" }, { name = "pydantic-settings", specifier = "~=2.0" }, { name = "pymilvus", marker = "extra == 'milvus'", specifier = ">=2.3,<2.7" }, { name = "pymongo", marker = "extra == 'mongo'", specifier = ">=4.8.0,<4.16" },