diff --git a/docs/api/embeddings.md b/docs/api/embeddings.md index 6540c9f642..f9e6ccd439 100644 --- a/docs/api/embeddings.md +++ b/docs/api/embeddings.md @@ -14,6 +14,8 @@ ::: pydantic_ai.embeddings.google +::: pydantic_ai.embeddings.voyageai + ::: pydantic_ai.embeddings.sentence_transformers ::: pydantic_ai.embeddings.test diff --git a/docs/api/providers.md b/docs/api/providers.md index 97a12f4cb0..c405f0868a 100644 --- a/docs/api/providers.md +++ b/docs/api/providers.md @@ -20,6 +20,8 @@ ::: pydantic_ai.providers.cohere +::: pydantic_ai.providers.voyageai.VoyageAIProvider + ::: pydantic_ai.providers.cerebras.CerebrasProvider ::: pydantic_ai.providers.mistral.MistralProvider diff --git a/docs/embeddings.md b/docs/embeddings.md index aef6e7af05..05107d1fbf 100644 --- a/docs/embeddings.md +++ b/docs/embeddings.md @@ -342,6 +342,61 @@ embedder = Embedder( ) ``` +### VoyageAI + +[`VoyageAIEmbeddingModel`][pydantic_ai.embeddings.voyageai.VoyageAIEmbeddingModel] provides access to VoyageAI's embedding models, which are optimized for retrieval with specialized models for code, finance, and legal domains. + +#### Install + +To use VoyageAI embedding models, you need to install `pydantic-ai-slim` with the `voyageai` optional group: + +```bash +pip/uv-add "pydantic-ai-slim[voyageai]" +``` + +#### Configuration + +To use `VoyageAIEmbeddingModel`, go to [dash.voyageai.com](https://dash.voyageai.com/) to generate an API key. Once you have the API key, you can set it as an environment variable: + +```bash +export VOYAGE_API_KEY='your-api-key' +``` + +You can then use the model: + +```python {title="voyageai_embeddings.py"} +from pydantic_ai import Embedder + +embedder = Embedder('voyageai:voyage-3.5') + + +async def main(): + result = await embedder.embed_query('Hello world') + print(len(result.embeddings[0])) + #> 1024 +``` + +_(This example is complete, it can be run "as is" — you'll need to add `asyncio.run(main())` to run `main`)_ + +See the [VoyageAI Embeddings documentation](https://docs.voyageai.com/docs/embeddings) for available models. + +#### VoyageAI-Specific Settings + +VoyageAI models support additional settings via [`VoyageAIEmbeddingSettings`][pydantic_ai.embeddings.voyageai.VoyageAIEmbeddingSettings]: + +```python {title="voyageai_settings.py"} +from pydantic_ai import Embedder +from pydantic_ai.embeddings.voyageai import VoyageAIEmbeddingSettings + +embedder = Embedder( + 'voyageai:voyage-3.5', + settings=VoyageAIEmbeddingSettings( + dimensions=512, # Reduce output dimensions + voyageai_input_type='document', # Override input type for all requests + ), +) +``` + ### Sentence Transformers (Local) [`SentenceTransformerEmbeddingModel`][pydantic_ai.embeddings.sentence_transformers.SentenceTransformerEmbeddingModel] runs embeddings locally using the [sentence-transformers](https://www.sbert.net/) library. This is ideal for: @@ -418,7 +473,10 @@ embedder = Embedder(model) ## Settings -[`EmbeddingSettings`][pydantic_ai.embeddings.EmbeddingSettings] provides common configuration options that work across providers. +[`EmbeddingSettings`][pydantic_ai.embeddings.EmbeddingSettings] provides common configuration options that work across providers: + +- `dimensions`: Reduce the output embedding dimensions (supported by OpenAI, Google, Cohere, VoyageAI) +- `truncate`: When `True`, truncate input text that exceeds the model's context length instead of raising an error (supported by Cohere, VoyageAI) Settings can be specified at the embedder level (applied to all calls) or per-call: diff --git a/pydantic_ai_slim/pydantic_ai/embeddings/__init__.py b/pydantic_ai_slim/pydantic_ai/embeddings/__init__.py index 039872bd5d..9df3a97680 100644 --- a/pydantic_ai_slim/pydantic_ai/embeddings/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/embeddings/__init__.py @@ -48,6 +48,16 @@ 'cohere:embed-english-light-v3.0', 'cohere:embed-multilingual-v3.0', 'cohere:embed-multilingual-light-v3.0', + 'voyageai:voyage-4-large', + 'voyageai:voyage-4', + 'voyageai:voyage-4-lite', + 'voyageai:voyage-3-large', + 'voyageai:voyage-3.5', + 'voyageai:voyage-3.5-lite', + 'voyageai:voyage-code-3', + 'voyageai:voyage-finance-2', + 'voyageai:voyage-law-2', + 'voyageai:voyage-code-2', ], ) """Known model names that can be used with the `model` parameter of [`Embedder`][pydantic_ai.embeddings.Embedder]. @@ -104,6 +114,10 @@ def infer_embedding_model( from .sentence_transformers import SentenceTransformerEmbeddingModel return SentenceTransformerEmbeddingModel(model_name) + elif model_kind == 'voyageai': + from .voyageai import VoyageAIEmbeddingModel + + return VoyageAIEmbeddingModel(model_name, provider=provider) else: raise UserError(f'Unknown embeddings model: {model}') # pragma: no cover diff --git a/pydantic_ai_slim/pydantic_ai/embeddings/cohere.py b/pydantic_ai_slim/pydantic_ai/embeddings/cohere.py index ae1e1ae31e..40219d0e4f 100644 --- a/pydantic_ai_slim/pydantic_ai/embeddings/cohere.py +++ b/pydantic_ai_slim/pydantic_ai/embeddings/cohere.py @@ -76,6 +76,8 @@ class CohereEmbeddingSettings(EmbeddingSettings, total=False): - `'NONE'` (default): Raise an error if input exceeds max tokens. - `'END'`: Truncate the end of the input text. - `'START'`: Truncate the start of the input text. + + Note: This setting overrides the standard `truncate` boolean setting when specified. """ @@ -159,6 +161,14 @@ async def embed( if extra_body := settings.get('extra_body'): # pragma: no cover request_options['additional_body_parameters'] = cast(dict[str, Any], extra_body) + # Determine truncation strategy: cohere_truncate takes precedence over truncate + if 'cohere_truncate' in settings: + truncate = settings['cohere_truncate'] + elif settings.get('truncate'): + truncate = 'END' + else: + truncate = 'NONE' + try: response = await self._client.embed( model=self.model_name, @@ -166,7 +176,7 @@ async def embed( output_dimension=settings.get('dimensions'), input_type=cohere_input_type, max_tokens=settings.get('cohere_max_tokens'), - truncate=settings.get('cohere_truncate', 'NONE'), + truncate=truncate, request_options=request_options, ) except ApiError as e: diff --git a/pydantic_ai_slim/pydantic_ai/embeddings/settings.py b/pydantic_ai_slim/pydantic_ai/embeddings/settings.py index 20d2cdc36e..cc8d00b825 100644 --- a/pydantic_ai_slim/pydantic_ai/embeddings/settings.py +++ b/pydantic_ai_slim/pydantic_ai/embeddings/settings.py @@ -23,6 +23,27 @@ class EmbeddingSettings(TypedDict, total=False): * Cohere * Google * Sentence Transformers + * VoyageAI + """ + + truncate: bool + """Whether to truncate inputs that exceed the model's context length. + + Defaults to `False`. If `True`, inputs that are too long will be truncated. + If `False`, an error will be raised for inputs that exceed the context length. + + For more control over truncation, you can use + [`max_input_tokens()`][pydantic_ai.embeddings.Embedder.max_input_tokens] and + [`count_tokens()`][pydantic_ai.embeddings.Embedder.count_tokens] to implement + your own truncation logic. + + Provider-specific truncation settings (e.g., `cohere_truncate`) take precedence + if specified. + + Supported by: + + * Cohere + * VoyageAI """ extra_headers: dict[str, str] diff --git a/pydantic_ai_slim/pydantic_ai/embeddings/voyageai.py b/pydantic_ai_slim/pydantic_ai/embeddings/voyageai.py new file mode 100644 index 0000000000..08ce7b2b6c --- /dev/null +++ b/pydantic_ai_slim/pydantic_ai/embeddings/voyageai.py @@ -0,0 +1,188 @@ +from __future__ import annotations + +from collections.abc import Sequence +from dataclasses import dataclass, field +from typing import Literal, cast + +from pydantic_ai.exceptions import ModelAPIError +from pydantic_ai.providers import Provider, infer_provider +from pydantic_ai.usage import RequestUsage + +from .base import EmbeddingModel, EmbedInputType +from .result import EmbeddingResult +from .settings import EmbeddingSettings + +try: + from voyageai.client_async import AsyncClient + from voyageai.error import VoyageError +except ImportError as _import_error: + raise ImportError( + 'Please install `voyageai` to use the VoyageAI embeddings model, ' + 'you can use the `voyageai` optional group — `pip install "pydantic-ai-slim[voyageai]"`' + ) from _import_error + +LatestVoyageAIEmbeddingModelNames = Literal[ + 'voyage-4-large', + 'voyage-4', + 'voyage-4-lite', + 'voyage-3-large', + 'voyage-3.5', + 'voyage-3.5-lite', + 'voyage-code-3', + 'voyage-finance-2', + 'voyage-law-2', + 'voyage-code-2', +] +"""Latest VoyageAI embedding models. + +See [VoyageAI Embeddings](https://docs.voyageai.com/docs/embeddings) +for available models and their capabilities. +""" + +VoyageAIEmbeddingModelName = str | LatestVoyageAIEmbeddingModelNames +"""Possible VoyageAI embedding model names.""" + +VoyageAIEmbedInputType = Literal['query', 'document', 'none'] +"""VoyageAI embedding input types. + +- `'query'`: For search queries; prepends retrieval-optimized prefix. +- `'document'`: For documents; prepends document retrieval prefix. +- `'none'`: Direct embedding without any prefix. +""" + + +class VoyageAIEmbeddingSettings(EmbeddingSettings, total=False): + """Settings used for a VoyageAI embedding model request. + + All fields from [`EmbeddingSettings`][pydantic_ai.embeddings.EmbeddingSettings] are supported, + plus VoyageAI-specific settings prefixed with `voyageai_`. + """ + + # ALL FIELDS MUST BE `voyageai_` PREFIXED SO YOU CAN MERGE THEM WITH OTHER MODELS. + + voyageai_input_type: VoyageAIEmbedInputType + """The VoyageAI-specific input type for the embedding. + + Overrides the standard `input_type` argument. Options include: + `'query'`, `'document'`, or `'none'` for direct embedding without prefix. + """ + + +_MAX_INPUT_TOKENS: dict[VoyageAIEmbeddingModelName, int] = { + 'voyage-4-large': 32000, + 'voyage-4': 32000, + 'voyage-4-lite': 32000, + 'voyage-3-large': 32000, + 'voyage-3.5': 32000, + 'voyage-3.5-lite': 32000, + 'voyage-code-3': 32000, + 'voyage-finance-2': 32000, + 'voyage-law-2': 16000, + 'voyage-code-2': 16000, +} + + +@dataclass(init=False) +class VoyageAIEmbeddingModel(EmbeddingModel): + """VoyageAI embedding model implementation. + + VoyageAI provides state-of-the-art embedding models optimized for + retrieval, with specialized models for code, finance, and legal domains. + + Example: + ```python + from pydantic_ai.embeddings.voyageai import VoyageAIEmbeddingModel + + model = VoyageAIEmbeddingModel('voyage-3.5') + ``` + """ + + _model_name: VoyageAIEmbeddingModelName = field(repr=False) + _provider: Provider[AsyncClient] = field(repr=False) + + def __init__( + self, + model_name: VoyageAIEmbeddingModelName, + *, + provider: Literal['voyageai'] | Provider[AsyncClient] = 'voyageai', + settings: EmbeddingSettings | None = None, + ): + """Initialize a VoyageAI embedding model. + + Args: + model_name: The name of the VoyageAI model to use. + See [VoyageAI models](https://docs.voyageai.com/docs/embeddings) + for available options. + provider: The provider to use for authentication and API access. Can be: + + - `'voyageai'` (default): Uses the standard VoyageAI API + - A [`VoyageAIProvider`][pydantic_ai.providers.voyageai.VoyageAIProvider] instance + for custom configuration + settings: Model-specific [`EmbeddingSettings`][pydantic_ai.embeddings.EmbeddingSettings] + to use as defaults for this model. + """ + self._model_name = model_name + + if isinstance(provider, str): + provider = infer_provider(provider) + self._provider = provider + + super().__init__(settings=settings) + + @property + def base_url(self) -> str: + """The base URL for the provider API.""" + return self._provider.base_url + + @property + def model_name(self) -> VoyageAIEmbeddingModelName: + """The embedding model name.""" + return self._model_name + + @property + def system(self) -> str: + """The embedding model provider.""" + return self._provider.name + + async def embed( + self, + inputs: str | Sequence[str], + *, + input_type: EmbedInputType, + settings: EmbeddingSettings | None = None, + ) -> EmbeddingResult: + inputs, settings = self.prepare_embed(inputs, settings) + settings = cast(VoyageAIEmbeddingSettings, settings) + + voyageai_input_type: VoyageAIEmbedInputType = settings.get( + 'voyageai_input_type', 'document' if input_type == 'document' else 'query' + ) + # Convert 'none' string to None for the API + api_input_type = None if voyageai_input_type == 'none' else voyageai_input_type + + try: + response = await self._provider.client.embed( + texts=list(inputs), + model=self.model_name, + input_type=api_input_type, + truncation=settings.get('truncate', False), + output_dimension=settings.get('dimensions'), + ) + except VoyageError as e: + raise ModelAPIError(model_name=self.model_name, message=str(e)) from e + + return EmbeddingResult( + embeddings=response.embeddings, + inputs=inputs, + input_type=input_type, + usage=_map_usage(response.total_tokens), + model_name=self.model_name, + provider_name=self.system, + ) + + async def max_input_tokens(self) -> int | None: + return _MAX_INPUT_TOKENS.get(self.model_name) + + +def _map_usage(total_tokens: int) -> RequestUsage: + return RequestUsage(input_tokens=total_tokens) diff --git a/pydantic_ai_slim/pydantic_ai/providers/__init__.py b/pydantic_ai_slim/pydantic_ai/providers/__init__.py index 0bf498b5b2..e37c42a33f 100644 --- a/pydantic_ai_slim/pydantic_ai/providers/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/providers/__init__.py @@ -161,6 +161,10 @@ def infer_provider_class(provider: str) -> type[Provider[Any]]: # noqa: C901 from .sentence_transformers import SentenceTransformersProvider return SentenceTransformersProvider + elif provider == 'voyageai': + from .voyageai import VoyageAIProvider + + return VoyageAIProvider else: # pragma: no cover raise ValueError(f'Unknown provider: {provider}') diff --git a/pydantic_ai_slim/pydantic_ai/providers/voyageai.py b/pydantic_ai_slim/pydantic_ai/providers/voyageai.py new file mode 100644 index 0000000000..25db3c300d --- /dev/null +++ b/pydantic_ai_slim/pydantic_ai/providers/voyageai.py @@ -0,0 +1,65 @@ +from __future__ import annotations as _annotations + +import os +from typing import overload + +from pydantic_ai.exceptions import UserError +from pydantic_ai.providers import Provider + +try: + from voyageai.client_async import AsyncClient +except ImportError as _import_error: # pragma: no cover + raise ImportError( + 'Please install the `voyageai` package to use the VoyageAI provider, ' + 'you can use the `voyageai` optional group — `pip install "pydantic-ai-slim[voyageai]"`' + ) from _import_error + + +class VoyageAIProvider(Provider[AsyncClient]): + """Provider for VoyageAI API.""" + + @property + def name(self) -> str: + return 'voyageai' + + @property + def base_url(self) -> str: + return self._client._params.get('base_url') or 'https://api.voyageai.com/v1' # type: ignore + + @property + def client(self) -> AsyncClient: + return self._client + + @overload + def __init__(self, *, voyageai_client: AsyncClient) -> None: ... + + @overload + def __init__(self, *, api_key: str | None = None) -> None: ... + + def __init__( + self, + *, + api_key: str | None = None, + voyageai_client: AsyncClient | None = None, + ) -> None: + """Create a new VoyageAI provider. + + Args: + api_key: The API key to use for authentication, if not provided, the `VOYAGE_API_KEY` environment variable + will be used if available. + voyageai_client: An existing + [AsyncClient](https://github.com/voyage-ai/voyageai-python) + client to use. If provided, `api_key` must be `None`. + """ + if voyageai_client is not None: + assert api_key is None, 'Cannot provide both `voyageai_client` and `api_key`' + self._client = voyageai_client + else: + api_key = api_key or os.getenv('VOYAGE_API_KEY') + if not api_key: + raise UserError( + 'Set the `VOYAGE_API_KEY` environment variable or pass it via `VoyageAIProvider(api_key=...)` ' + 'to use the VoyageAI provider.' + ) + + self._client = AsyncClient(api_key=api_key) diff --git a/pydantic_ai_slim/pyproject.toml b/pydantic_ai_slim/pyproject.toml index 63637268d5..76243511b0 100644 --- a/pydantic_ai_slim/pyproject.toml +++ b/pydantic_ai_slim/pyproject.toml @@ -78,6 +78,7 @@ mistral = ["mistralai>=1.9.11"] bedrock = ["boto3>=1.42.14"] huggingface = ["huggingface-hub[inference]>=0.33.5,<1.0.0"] sentence-transformers = ["sentence-transformers>=5.2.0"] +voyageai = ["voyageai>=0.3.2"] outlines-transformers = [ "outlines[transformers]>=1.0.0,<1.3.0; (sys_platform != 'darwin' or platform_machine != 'x86_64')", "transformers>=4.0.0", diff --git a/pyproject.toml b/pyproject.toml index 9cd497895d..6ab418bd8d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,6 +60,7 @@ outlines-mlxlm = ["pydantic-ai-slim[outlines-mlxlm]=={{ version }}; platform_sys outlines-sglang = ["pydantic-ai-slim[outlines-sglang]=={{ version }}"] outlines-vllm-offline = ["pydantic-ai-slim[outlines-vllm-offline]=={{ version }}"] sentence-transformers = ["pydantic-ai-slim[sentence-transformers]=={{ version }}"] +voyageai = ["pydantic-ai-slim[voyageai]=={{ version }}"] [project.urls] Homepage = "https://ai.pydantic.dev" @@ -223,6 +224,7 @@ executionEnvironments = [ exclude = [ "examples/pydantic_ai_examples/weather_agent_gradio.py", "pydantic_ai_slim/pydantic_ai/ext/aci.py", # aci-sdk is too niche to be added as an (optional) dependency + "pydantic_ai_slim/pydantic_ai/embeddings/voyageai.py", # voyageai package has no type stubs ] [tool.mypy] diff --git a/tests/cassettes/test_embeddings/TestCohere.test_query_with_cohere_truncate.yaml b/tests/cassettes/test_embeddings/TestCohere.test_query_with_cohere_truncate.yaml new file mode 100644 index 0000000000..47abb9847e --- /dev/null +++ b/tests/cassettes/test_embeddings/TestCohere.test_query_with_cohere_truncate.yaml @@ -0,0 +1,1602 @@ +interactions: +- request: + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate, br, zstd + connection: + - keep-alive + content-length: + - '135' + content-type: + - application/json + host: + - api.cohere.com + method: POST + parsed_body: + input_type: search_query + max_tokens: null + model: embed-v4.0 + output_dimension: null + texts: + - Hello, world! + truncate: END + uri: https://api.cohere.com/v2/embed + response: + headers: + access-control-expose-headers: + - X-Debug-Trace-ID + alt-svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-length: + - '19488' + content-type: + - application/json + expires: + - Thu, 01 Jan 1970 00:00:00 GMT + num_chars: + - '13' + num_tokens: + - '4' + pragma: + - no-cache + transfer-encoding: + - chunked + vary: + - Origin,Accept-Encoding + parsed_body: + embeddings: + float: + - - -0.017963495 + - 0.007474743 + - -0.0016501701 + - 0.050635356 + - -0.008439225 + - 0.009584549 + - -0.017842935 + - 0.0060280184 + - -0.010368192 + - 0.014406964 + - -0.03279242 + - 0.054252166 + - -0.044125095 + - -0.018566296 + - 0.06654932 + - -0.02290647 + - 0.024714876 + - 0.0010699732 + - 0.0016275649 + - 0.018686859 + - -0.0024262774 + - 0.0020796664 + - -0.026402721 + - -7.346648e-05 + - -0.044125095 + - -0.010609312 + - 0.027970007 + - 0.0008476901 + - -0.00046905517 + - 0.021821426 + - -0.02254479 + - 0.033998024 + - -0.04991199 + - 0.014828925 + - -0.034962505 + - 0.011694356 + - 0.01639621 + - 0.0050936756 + - 0.02278591 + - 0.011091554 + - 0.008137825 + - 0.011332675 + - 0.015250886 + - 0.015552287 + - 0.06703156 + - 0.014527525 + - 0.0048826947 + - 0.019410219 + - -0.06654932 + - -0.0022605069 + - 0.0032099197 + - 0.030501772 + - -0.019048538 + - 0.0066006803 + - 0.05304656 + - -0.0050936756 + - 0.025317678 + - 0.014527525 + - 0.018807419 + - -0.013020519 + - -0.062209148 + - -0.001974176 + - -0.02254479 + - 0.0057266173 + - 0.01663733 + - 0.011513515 + - -0.0066911 + - 0.019651338 + - 0.015793407 + - 0.004822415 + - -0.01675789 + - 0.03279242 + - 0.035444748 + - 0.018445736 + - 0.012477998 + - 0.005244376 + - -0.020977505 + - -0.02290647 + - -0.014587805 + - 0.004822415 + - -0.018566296 + - 0.008861187 + - 0.012297157 + - -0.038338196 + - -0.056904495 + - -0.011151833 + - 0.0267644 + - -0.018807419 + - -0.0261616 + - -0.025317678 + - -0.0056964774 + - 0.06944277 + - -0.020615824 + - -0.025438238 + - 0.030863455 + - 0.036650352 + - -0.01928966 + - -0.000987088 + - -0.052082077 + - 0.021821426 + - 0.007565163 + - -0.024714876 + - 0.007354182 + - 0.01615509 + - -0.03713259 + - 0.004249753 + - 0.0030893595 + - 0.052564323 + - -0.009222868 + - -0.005545777 + - -0.012899959 + - -0.04605406 + - -0.040749405 + - -0.09789502 + - -0.00070075714 + - -0.034721386 + - 0.047259666 + - 0.0021399464 + - 0.0019289659 + - 0.028693367 + - -0.04846527 + - 0.02025414 + - -0.011573795 + - -0.054493286 + - -0.012236877 + - 0.05907458 + - -0.004460734 + - -0.01687845 + - -0.007444603 + - -0.06269139 + - 0.030501772 + - 0.0007082922 + - -0.02664384 + - 0.02652328 + - -0.009825669 + - -0.009885951 + - 0.0041593327 + - 0.044366214 + - 0.026041038 + - -0.014165843 + - 0.008499506 + - -0.01012707 + - 0.025920479 + - 0.00042949631 + - -0.015431727 + - 0.0046717147 + - 0.028572807 + - 0.013141081 + - -0.008559786 + - 0.010850433 + - -0.017842935 + - 0.07571191 + - 0.008559786 + - -0.02266535 + - -0.0337569 + - 0.0121765975 + - 0.0048525548 + - -0.024594314 + - -0.028331686 + - 4.2384505e-05 + - 0.011995756 + - -0.017119572 + - 0.057386734 + - 0.053769924 + - 0.01663733 + - 0.0007045247 + - -0.0043100333 + - -0.012116318 + - -0.049429752 + - -0.0034359705 + - 0.008017264 + - 0.011151833 + - 0.063655876 + - -0.009102308 + - -0.023388712 + - -0.014226124 + - -0.008017264 + - 0.0038428619 + - -0.022424228 + - 0.043883976 + - -0.06703156 + - 0.016999012 + - 0.018686859 + - -0.014346683 + - -0.0337569 + - 0.010790153 + - -0.0100667905 + - 0.0012056037 + - -0.064138114 + - 0.005606057 + - -0.03351578 + - 0.04991199 + - -0.0040387725 + - -0.007203482 + - 0.0077761435 + - 0.0024112074 + - -0.039784923 + - -0.02025414 + - -0.044366214 + - -0.008198105 + - 0.013201361 + - 0.030622335 + - -0.009042027 + - -0.005545777 + - -0.0063294196 + - -0.028331686 + - -0.020615824 + - -0.017842935 + - -0.037373718 + - 0.026041038 + - 0.028813928 + - 0.01928966 + - 0.021821426 + - -0.03327466 + - -0.0057266173 + - -0.010609312 + - -0.0054252166 + - -0.0049429755 + - 0.001311094 + - -0.005545777 + - 0.0118149165 + - -0.01332192 + - -0.0031948497 + - -0.009042027 + - -0.028813928 + - -0.0121765975 + - 0.014045283 + - 0.013563042 + - -0.0118149165 + - -0.01687845 + - -0.0064198393 + - -0.052564323 + - -0.043883976 + - 0.014768645 + - 0.0017481254 + - 0.0075048828 + - 0.021941988 + - -0.01675789 + - -0.034480266 + - 0.038338196 + - -0.020736383 + - -0.033033542 + - 0.031586815 + - -0.026402721 + - 0.013563042 + - -0.023629833 + - 0.06799605 + - -0.011332675 + - -0.0267644 + - -0.0048525548 + - -0.0021700866 + - 0.012297157 + - -0.019169098 + - 0.0056663374 + - 0.011453235 + - 0.0064499797 + - -0.020495262 + - -0.0021399464 + - 0.03713259 + - 0.0049429755 + - -0.008137825 + - 0.014165843 + - -0.023388712 + - -0.030863455 + - 0.043642852 + - 0.010247631 + - -0.018927978 + - 0.043401733 + - -0.0038428619 + - -0.008198105 + - 0.012116318 + - 0.025438238 + - 0.028572807 + - 0.024473755 + - 0.021459747 + - 0.04195501 + - 0.006751381 + - -0.03231018 + - 0.032069057 + - 0.030019531 + - -0.010729874 + - -0.024112074 + - 0.024232635 + - 0.024955995 + - 0.057386734 + - 0.037614837 + - 0.000493544 + - -0.03616811 + - -0.002230367 + - -0.04605406 + - -0.021098064 + - 0.008258386 + - -0.041472767 + - 0.01928966 + - -0.015250886 + - -0.016516771 + - 0.00017989868 + - 0.013141081 + - 0.030019531 + - 0.0004389151 + - 0.034239143 + - 0.0028180988 + - 0.05497553 + - -0.028572807 + - 0.018566296 + - 0.054011047 + - -0.019892462 + - 0.03568587 + - -0.0453307 + - -0.011332675 + - 0.008198105 + - -0.010790153 + - -0.027367204 + - 0.023629833 + - 0.01928966 + - 0.019651338 + - -0.0075048828 + - 0.0063896994 + - 0.019651338 + - -0.012116318 + - -0.019651338 + - -0.013020519 + - 0.011091554 + - -0.009946231 + - 0.0031044295 + - -0.0070226416 + - -0.031827938 + - 0.0028633086 + - 0.0029085188 + - -0.0337569 + - -0.010187351 + - -0.020615824 + - -0.015552287 + - 0.015070046 + - -0.041472767 + - 0.025076555 + - -0.0072939023 + - -0.0325513 + - 0.005274516 + - 0.034721386 + - 0.0012583488 + - -0.028090566 + - -0.030260652 + - 0.0056964774 + - -0.011091554 + - -0.026884962 + - -0.017119572 + - -0.012598559 + - 0.031827938 + - 0.024112074 + - 0.00023452759 + - -0.03520363 + - 0.0008363875 + - -0.01627565 + - 0.012538278 + - 0.055216648 + - 0.011935476 + - -0.026402721 + - -0.019410219 + - 0.0047621345 + - 0.021700867 + - -0.009584549 + - -0.023509271 + - -0.0070226416 + - -0.008499506 + - 0.030501772 + - -0.02326815 + - 0.012899959 + - 0.011573795 + - 0.0013939792 + - -0.0025619077 + - 0.019410219 + - 0.0050936756 + - 0.0032099197 + - -0.020736383 + - 0.026041038 + - 0.030140093 + - -0.008559786 + - 0.01675789 + - -0.0008024799 + - -0.021821426 + - 0.025558798 + - -0.008981748 + - 0.020133581 + - -0.008439225 + - 0.04508958 + - 0.021700867 + - -0.03568587 + - -0.06462036 + - 0.0325513 + - 0.015672848 + - 0.0023961372 + - 0.0053950767 + - -0.034239143 + - -0.027005523 + - -0.017360693 + - -0.009102308 + - -0.0008853652 + - 0.06172691 + - -0.014527525 + - -0.020374702 + - -0.038338196 + - 0.005304656 + - -0.007836424 + - 0.020133581 + - -0.02290647 + - -0.009584549 + - 0.000501079 + - -0.009162588 + - -0.015913969 + - 0.04918863 + - -0.03616811 + - -0.040026043 + - 0.0337569 + - 0.018807419 + - -0.014708364 + - -0.00037863493 + - -0.035444748 + - -0.005485497 + - -0.008800907 + - 0.017722374 + - -0.037614837 + - -0.011453235 + - 0.0049429755 + - 0.00331541 + - -0.010609312 + - -0.024594314 + - -0.03592699 + - 0.02254479 + - 0.020133581 + - -0.060280185 + - 0.014889206 + - -0.04918863 + - -0.027849443 + - 0.021821426 + - 0.028452247 + - -0.040026043 + - -0.023509271 + - -0.008740626 + - -0.0535288 + - -0.0054252166 + - -0.030501772 + - -0.009825669 + - 0.015311168 + - -0.039302677 + - 0.003948352 + - 0.00015540986 + - -0.01326164 + - -0.023388712 + - -0.0060882987 + - -0.023629833 + - 0.068478286 + - 0.02917561 + - -0.03616811 + - 0.023991512 + - 0.010368192 + - 0.008620067 + - -0.019048538 + - 0.02326815 + - -0.011453235 + - 0.011272395 + - -0.007836424 + - 0.02025414 + - 0.030260652 + - -0.034480266 + - -0.015793407 + - 0.03351578 + - 0.011875196 + - 0.012658839 + - -0.0032702 + - 0.02314759 + - -0.022183107 + - 0.017842935 + - -0.06799605 + - -0.021218624 + - -0.013502762 + - -0.0009192728 + - 0.00010831595 + - -0.006932221 + - -0.033033542 + - 0.051599838 + - 0.070889495 + - 0.039543804 + - 0.039061558 + - 0.003616811 + - 0.017601814 + - 0.004641574 + - -0.040990524 + - 0.029778412 + - -0.0337569 + - -0.044607334 + - 0.005877318 + - -0.011091554 + - -0.008800907 + - 0.008921468 + - 0.06172691 + - -0.0063896994 + - -0.010970994 + - 0.0057567577 + - -0.030501772 + - 0.009042027 + - -0.020977505 + - 0.015311168 + - 0.037614837 + - -0.02664384 + - 0.0064198393 + - -0.012477998 + - 0.01663733 + - -0.01326164 + - -0.005997878 + - -0.0020193863 + - -0.02326815 + - 0.08149881 + - 0.012899959 + - -0.015672848 + - 0.021218624 + - 0.008499506 + - 0.019530779 + - 0.019169098 + - 0.00964483 + - 0.034962505 + - -0.012116318 + - -0.020374702 + - 0.0073240423 + - -0.008439225 + - 0.01627565 + - -0.024112074 + - -0.013563042 + - 0.006751381 + - -0.014286404 + - 0.018686859 + - -0.03351578 + - -0.039784923 + - 0.015250886 + - -0.03279242 + - -0.021700867 + - -0.021580307 + - -0.018927978 + - -0.042919494 + - -0.047018543 + - 0.0012206737 + - 0.04219613 + - -0.020977505 + - -0.021941988 + - 0.10271743 + - -0.0017481254 + - 0.020013021 + - -0.05328768 + - -0.0064198393 + - -0.023991512 + - 0.008499506 + - -0.002968799 + - 0.014165843 + - 0.014527525 + - -0.023870952 + - 0.0044004535 + - -0.030381212 + - -0.01012707 + - -0.04219613 + - 0.11332674 + - -0.015311168 + - 0.014889206 + - 0.04171389 + - -0.02917561 + - -0.009102308 + - -4.968406e-05 + - 0.010910713 + - -0.027608324 + - 0.022062548 + - -0.021218624 + - -0.020977505 + - -0.0048525548 + - 0.030501772 + - 0.02266535 + - -0.030863455 + - 0.006208859 + - -0.056422252 + - -0.015552287 + - 0.027005523 + - -0.037614837 + - 0.013442481 + - 0.03520363 + - 0.00033907604 + - -0.028693367 + - -0.008740626 + - -0.024714876 + - -0.023629833 + - -0.00166524 + - -0.044366214 + - -0.005877318 + - -0.016034529 + - 0.00663082 + - 0.0077158636 + - 0.030863455 + - 0.023509271 + - 0.031827938 + - -0.017963495 + - -0.013623321 + - 0.002004316 + - -0.013683602 + - -0.025799919 + - -0.030140093 + - 0.0027126083 + - 0.007956984 + - 0.0020344562 + - -0.0040689125 + - -0.01675789 + - 0.008740626 + - 0.03857932 + - 0.03713259 + - 0.021098064 + - -0.03592699 + - 0.020374702 + - 0.0067212405 + - -0.039302677 + - 0.051358715 + - -0.03713259 + - 0.008439225 + - 0.008861187 + - 0.007836424 + - -0.0073843226 + - 0.0028180988 + - 0.0017858004 + - 0.023629833 + - -0.008439225 + - -0.018927978 + - 0.037614837 + - 0.007535023 + - 0.03568587 + - -0.0006329419 + - -0.03592699 + - 0.011694356 + - 0.008680346 + - 0.023388712 + - -0.013985003 + - 0.021218624 + - -0.0047621345 + - 0.03231018 + - 0.0150097655 + - 0.035444748 + - 0.040990524 + - -0.0030290794 + - -0.00095318037 + - 0.008499506 + - -0.005847178 + - 0.010669592 + - -0.0020344562 + - 0.004551154 + - 0.005485497 + - 0.014889206 + - 0.044125095 + - 0.04050828 + - -0.044125095 + - -0.015552287 + - -0.040990524 + - -0.01928966 + - -0.005937598 + - 0.023388712 + - 0.01639621 + - -0.006178719 + - -0.01627565 + - 0.014467244 + - 0.010006511 + - -0.022303667 + - 0.027608324 + - -0.013623321 + - -0.008499506 + - -0.057386734 + - 0.0021248765 + - -0.014467244 + - 0.02664384 + - 0.009524269 + - 0.004611434 + - 0.017240133 + - -0.0150097655 + - -0.012779399 + - -0.01627565 + - 0.022424228 + - 0.015190606 + - 0.020374702 + - 0.02917561 + - 0.020615824 + - 0.017963495 + - -0.023750393 + - -0.06172691 + - -0.017722374 + - -0.0077158636 + - -0.033033542 + - -0.0056361975 + - 0.036409233 + - 0.008198105 + - -0.012056037 + - 0.016516771 + - -0.015672848 + - 0.018686859 + - -0.019530779 + - 0.0019289659 + - -0.02664384 + - 0.017842935 + - -0.023991512 + - -0.008740626 + - 0.039784923 + - -0.022303667 + - -0.0037524414 + - 0.005274516 + - 0.051840957 + - 0.036650352 + - -0.0076857237 + - -0.018325176 + - -0.0325513 + - 0.0054252166 + - -0.023388712 + - -0.012839679 + - 0.0059074583 + - -0.016999012 + - -0.017601814 + - -0.002622188 + - -0.0049128346 + - -0.0146480845 + - 0.018084055 + - 0.03327466 + - 0.03568587 + - 0.0015446797 + - 0.0024413473 + - -0.034962505 + - 0.025076555 + - -0.011212114 + - -0.007444603 + - 0.011995756 + - 0.0133822 + - 0.039061558 + - 0.007535023 + - -0.03351578 + - -0.039061558 + - -0.011091554 + - -0.040990524 + - -0.0047621345 + - 0.02905505 + - -0.0146480845 + - 0.037614837 + - 0.0261616 + - -0.066067085 + - -0.02953729 + - -0.011935476 + - 0.0593157 + - 0.00023452759 + - 0.008861187 + - 0.0043100333 + - 0.023388712 + - -0.008680346 + - 0.005997878 + - -0.035444748 + - 0.0040990524 + - -0.017722374 + - 0.011754636 + - 0.036650352 + - 0.041231647 + - -0.018927978 + - -0.02953729 + - 0.014045283 + - 0.009283148 + - 0.053769924 + - 0.009222868 + - 0.013563042 + - -0.013201361 + - 0.0022002268 + - 0.028934488 + - 0.004370313 + - 0.0036469512 + - -0.023509271 + - -0.007444603 + - 0.00048224148 + - 0.037373718 + - 0.013683602 + - 0.010729874 + - 0.034962505 + - -0.02905505 + - -0.0050936756 + - -0.029296169 + - 0.005847178 + - 0.010187351 + - -0.01627565 + - 6.969897e-05 + - 0.026282161 + - -0.0325513 + - 0.011634075 + - 0.011392955 + - -0.0061184387 + - -0.008258386 + - -0.025076555 + - 0.004129193 + - -0.023991512 + - -0.001989246 + - -0.021098064 + - 0.014828925 + - -0.023870952 + - -0.03568587 + - 0.086803466 + - 0.026282161 + - 0.027728884 + - 0.030622335 + - 0.015793407 + - 0.021339184 + - 0.01627565 + - -0.0044004535 + - 0.00053875416 + - 0.013020519 + - -0.023991512 + - 0.012236877 + - 0.009403709 + - 0.021098064 + - -0.038097076 + - -0.033033542 + - 0.0018159406 + - 0.06269139 + - 0.012899959 + - 0.07040726 + - -0.017842935 + - -0.017601814 + - -0.011935476 + - 0.033033542 + - -0.0050333953 + - -0.033033542 + - 0.02266535 + - 0.0061184387 + - 0.013623321 + - -0.025197119 + - 0.018204616 + - 0.003571601 + - -0.0038428619 + - 0.055457767 + - 0.0026975384 + - 0.0337569 + - -0.0040689125 + - 0.00028256336 + - 0.08149881 + - 0.019169098 + - -0.043642852 + - -0.023629833 + - 0.014045283 + - 0.006208859 + - -0.015793407 + - -0.00042949631 + - -0.014949486 + - 0.025558798 + - 0.022303667 + - 0.020977505 + - 0.010368192 + - 0.007836424 + - 0.04629518 + - 0.025558798 + - -0.010006511 + - -0.0012282087 + - 0.012538278 + - 0.04557182 + - -0.008017264 + - 0.009524269 + - -0.029296169 + - 0.0021550166 + - -0.0453307 + - 0.017240133 + - -0.0118149165 + - 0.053769924 + - -0.019410219 + - -0.012477998 + - 0.004641574 + - 0.031104574 + - 0.022062548 + - -0.0071733417 + - 0.016034529 + - 0.043642852 + - 0.027728884 + - 0.0014693295 + - -0.010609312 + - 0.021821426 + - 0.015130326 + - -0.013141081 + - 0.019169098 + - 0.043642852 + - 0.020977505 + - -0.027126083 + - -0.028331686 + - -0.040990524 + - -0.021098064 + - 0.008981748 + - 0.013924722 + - 0.09114364 + - -0.015672848 + - -0.0325513 + - -0.0031948497 + - -0.012236877 + - -0.008680346 + - -0.0675138 + - -0.03568587 + - -0.016034529 + - 0.078123115 + - 0.0025016277 + - -0.01615509 + - -0.04050828 + - 0.015431727 + - 0.0065102596 + - 0.039543804 + - 0.0038579318 + - 0.016516771 + - -0.026282161 + - 0.006962361 + - -0.0018988258 + - -0.018566296 + - -0.031104574 + - -0.0013563042 + - -0.012538278 + - -0.003948352 + - -0.014165843 + - 0.02917561 + - -0.040990524 + - -0.025076555 + - -0.023991512 + - 0.0043100333 + - 0.0097051095 + - -0.043160614 + - -0.057386734 + - -0.022303667 + - -0.014346683 + - -0.022303667 + - 0.020013021 + - 0.040749405 + - 0.017963495 + - -0.007836424 + - -0.06799605 + - 0.012236877 + - 0.009524269 + - 0.012297157 + - -0.018807419 + - 0.01675789 + - 0.017601814 + - -0.041472767 + - -0.01627565 + - 0.011272395 + - 0.020013021 + - 0.006871941 + - 0.0093434295 + - 0.024353195 + - -0.027246643 + - 0.01675789 + - 0.044848457 + - 0.027728884 + - -0.0047922744 + - -0.013683602 + - -0.0064198393 + - 0.022424228 + - 0.0070527815 + - 0.03520363 + - 0.015913969 + - -0.0015446797 + - 0.0061485786 + - 0.031345695 + - 0.01663733 + - 0.0030742893 + - -0.02278591 + - -0.017360693 + - 0.019410219 + - 0.057145614 + - 0.02290647 + - 0.030019531 + - 0.009403709 + - -0.042678367 + - -0.014708364 + - -0.002320787 + - -0.027487764 + - -0.0018084055 + - 0.018084055 + - 0.0014165844 + - -0.0031797797 + - 0.009463989 + - -0.037614837 + - -0.0097051095 + - 0.025317678 + - 0.007474743 + - -0.014768645 + - -0.027970007 + - -0.007896704 + - -0.005515637 + - 0.039061558 + - 0.01012707 + - -0.0045210137 + - 0.008620067 + - 0.02302703 + - -0.036650352 + - 0.0060882987 + - 0.026282161 + - -0.003948352 + - -0.004490874 + - 0.04050828 + - -0.009765389 + - -0.024473755 + - 0.02652328 + - 0.0032099197 + - 0.02314759 + - -0.021580307 + - 0.020736383 + - -0.018325176 + - -0.038097076 + - -0.00013374665 + - -0.03351578 + - 0.001989246 + - -0.0038579318 + - 0.006841801 + - -0.028813928 + - 0.005364937 + - -0.007625443 + - 0.014527525 + - -0.022183107 + - -0.018566296 + - 0.024714876 + - 0.013743882 + - 0.030381212 + - -0.025076555 + - -0.0015446797 + - -0.010549032 + - 0.016999012 + - 0.0047621345 + - 0.017240133 + - -0.00027314457 + - 0.015371447 + - 0.036650352 + - 0.0021550166 + - 0.01627565 + - -0.023870952 + - -0.020615824 + - 0.02905505 + - 0.020133581 + - -0.022183107 + - -0.015913969 + - -0.01928966 + - 0.027728884 + - -0.026884962 + - -0.0130808 + - -0.014226124 + - 0.023388712 + - -0.023509271 + - -0.0012357439 + - -0.010609312 + - -0.030742895 + - -0.009584549 + - -0.0026975384 + - 0.014105563 + - -0.0015823549 + - 0.014346683 + - 0.0050333953 + - 0.012538278 + - -0.001974176 + - 0.013864442 + - -0.014346683 + - -0.010549032 + - 0.00017989868 + - 0.006781521 + - -0.00030140093 + - -0.009222868 + - -0.01627565 + - 0.011453235 + - -0.0021098063 + - 0.0077761435 + - -0.0651026 + - 0.096448295 + - 0.015431727 + - -0.012417718 + - 0.025076555 + - 0.0028633086 + - 0.037855957 + - -0.011513515 + - -0.01675789 + - 0.0027578184 + - -0.0027728884 + - -0.050635356 + - -0.019771902 + - -0.020977505 + - 0.027367204 + - -0.0057868976 + - -0.0024112074 + - 0.047741905 + - 0.007444603 + - -0.005937598 + - -0.00038240242 + - -0.043883976 + - 0.03616811 + - 0.0150097655 + - -0.019169098 + - -0.005334796 + - 0.005515637 + - 0.014949486 + - -0.024473755 + - -0.028813928 + - -0.00042007753 + - 0.01928966 + - 0.005214236 + - 0.034721386 + - -0.043883976 + - -0.010669592 + - 0.0038880717 + - -0.02664384 + - -0.018566296 + - -0.011151833 + - 0.027246643 + - 0.038820438 + - 0.0056964774 + - -0.0040990524 + - -0.0010699732 + - 0.06148579 + - -0.00020156187 + - -0.027005523 + - -0.0048826947 + - -0.0325513 + - 0.04508958 + - 0.020013021 + - -0.035444748 + - -0.0034661104 + - 0.0042196126 + - -0.008981748 + - 0.01627565 + - -0.025438238 + - 0.023509271 + - -0.0038880717 + - -0.037373718 + - -0.044125095 + - 0.012297157 + - 0.027487764 + - -0.019530779 + - -0.033033542 + - 0.008137825 + - 0.0065102596 + - -0.034480266 + - 0.031586815 + - 0.021821426 + - 0.008439225 + - -0.034721386 + - -0.028693367 + - -0.020374702 + - -0.00023170195 + - -0.022062548 + - 0.02664384 + - 0.013623321 + - 0.008981748 + - 0.058592338 + - 0.025679357 + - -0.025679357 + - 0.028090566 + - -0.011634075 + - 0.013864442 + - -0.030501772 + - 0.036409233 + - 0.0146480845 + - -0.010970994 + - 0.012960239 + - -0.023991512 + - -0.02025414 + - 0.031586815 + - 0.04171389 + - -0.04918863 + - -0.011392955 + - 0.023750393 + - -0.0012508138 + - -0.024835436 + - 0.012417718 + - 0.010669592 + - 0.014889206 + - -0.027608324 + - -0.00334555 + - 0.0261616 + - 0.007565163 + - -0.0030140092 + - 0.03279242 + - 0.0045210137 + - -0.028331686 + - 0.00017047989 + - -0.03568587 + - -0.011453235 + - 0.01627565 + - 0.007565163 + - 0.0036318812 + - -0.030019531 + - -0.012477998 + - 0.025076555 + - -0.015672848 + - 0.008318665 + - 0.008017264 + - 0.021098064 + - 0.078605354 + - -0.010006511 + - -0.039784923 + - -0.0013713742 + - -0.0027276783 + - -0.02278591 + - 0.0005236841 + - 0.001989246 + - -1.4599107e-05 + - 0.028452247 + - 0.027487764 + - 0.019048538 + - -0.006751381 + - 0.0002806796 + - -0.011212114 + - 0.0006254069 + - 0.015552287 + - 0.0034209006 + - -0.029296169 + - -0.0020947363 + - -0.012779399 + - 0.01928966 + - -0.018204616 + - -0.0050936756 + - -0.0054553566 + - 0.014587805 + - -0.073300704 + - 0.038338196 + - -0.021821426 + - -0.030863455 + - 0.02917561 + - -0.041472767 + - -0.034721386 + - 0.024955995 + - -0.039061558 + - -0.047741905 + - 0.001959106 + - -0.0031797797 + - -0.001002158 + - -0.006178719 + - 0.009403709 + - -0.00055759173 + - -0.0037976515 + - -0.009403709 + - 0.008439225 + - 0.009403709 + - -0.004249753 + - 0.018325176 + - -0.01639621 + - 0.008861187 + - -0.030501772 + - -0.031104574 + - 0.028934488 + - -0.03520363 + - 0.0077158636 + - 0.012417718 + - 0.033033542 + - -0.0019063607 + - 0.0337569 + - -0.015913969 + - -0.06896053 + - -0.0018686857 + - 0.07667639 + - -0.019169098 + - -0.014828925 + - 0.030019531 + - 0.042678367 + - -0.025558798 + - 0.0034811804 + - -0.034962505 + - -0.00025242328 + - -0.02302703 + - -0.013442481 + - -0.028090566 + - 0.060280185 + - -0.027728884 + - -0.0060882987 + - 0.019410219 + - -0.00013280478 + - -0.0133822 + - -0.0004464501 + - 0.010428472 + - -0.027367204 + - 0.010488752 + - 0.002637258 + - 0.025197119 + - 0.000119147546 + - 0.007836424 + - -0.039302677 + - 0.019771902 + - -0.0056663374 + - -0.009463989 + - -0.013623321 + - 0.01012707 + - -0.017119572 + - 0.034239143 + - 0.0062992796 + - 0.03592699 + - -0.0133822 + - 0.008740626 + - -0.0026824684 + - -0.0063896994 + - 0.0058170375 + - -0.0006894546 + - 0.0077761435 + - -0.040990524 + - -0.0020495262 + - 0.0093434295 + - 0.006902081 + - -0.018445736 + - -0.009283148 + - 0.0012658838 + - -0.011392955 + - 0.008680346 + - -0.018084055 + - -0.023870952 + - 0.02905505 + - -0.02905505 + - -0.017722374 + - -0.012297157 + - 0.005485497 + - -0.024594314 + - 0.024594314 + - -0.007203482 + - -0.010368192 + - -0.016999012 + - 0.012116318 + - 0.035444748 + - 0.015793407 + - -0.013864442 + - 0.024594314 + - 0.047259666 + - -0.008017264 + - -0.004370313 + - -0.0055759167 + - 0.0040387725 + - 0.01615509 + - -0.008318665 + - 0.0049429755 + - -0.0075048828 + - -0.005153956 + - -0.00331541 + - 0.02278591 + - -0.022183107 + - -0.016034529 + - -0.013020519 + - 0.041231647 + - -0.008800907 + - -0.011513515 + - -0.050876476 + - 0.011875196 + - 0.0046717147 + - 0.0465363 + - -0.0032702 + - -0.0029085188 + - 0.0070829215 + - -0.01012707 + - -0.03689147 + - 0.0130808 + - -0.017240133 + - 0.02965785 + - 0.017722374 + - 0.060039062 + - -0.008800907 + - 0.02953729 + - 0.015672848 + - 0.047259666 + - 0.0035263908 + - -0.047500785 + - 0.03592699 + - 0.009222868 + - 0.08825019 + - -0.020374702 + - -0.008318665 + - -0.010247631 + - 0.024835436 + - -0.008559786 + - -0.00063670945 + - -0.011935476 + - 0.003571601 + - -0.00079117744 + - 0.06799605 + - -0.010609312 + - 0.0100667905 + - 0.018686859 + - 0.019530779 + - -0.021821426 + - 0.0031044295 + - -0.0041593327 + - -0.015250886 + - -0.0017782655 + - -0.028693367 + - -0.013804162 + - 0.028452247 + - -0.036650352 + - -0.025317678 + - -0.0031797797 + - -0.01928966 + - 0.029898971 + - -0.021700867 + - 0.010247631 + - 0.026041038 + - -0.0008514576 + - -0.031827938 + - 0.020013021 + - 0.002938659 + - -0.0018084055 + - 0.025679357 + - 0.017842935 + - 0.017722374 + - -0.04171389 + - -0.024353195 + - 0.0055759167 + - 0.0034811804 + - -0.050635356 + - 0.0005990343 + - -0.033998024 + - -0.0069925017 + - -0.009283148 + - -0.006058159 + - 0.01615509 + - 0.0146480845 + - -0.008198105 + - 0.047018543 + - 0.031104574 + - 0.00019308497 + - 0.01687845 + - -0.02965785 + - 0.009946231 + - 0.07667639 + - -0.028693367 + - 0.055457767 + - -0.010729874 + - -0.0023659973 + - -0.017240133 + - -0.02290647 + - 0.0015823549 + - -0.014828925 + - 0.017481253 + - 0.010790153 + - 0.01627565 + - -0.010006511 + - -0.032069057 + - -0.008378945 + - -0.024473755 + - 0.031345695 + - 0.021459747 + - -0.0049128346 + - 0.057868976 + - -0.0121765975 + - -6.828614e-05 + - 0.012357438 + - -0.011935476 + - 0.018084055 + - -0.0048826947 + - 0.018807419 + - 0.006238999 + - 0.013864442 + - 0.023750393 + - 0.037855957 + - -0.014889206 + - -0.011995756 + - -0.025558798 + - 0.011875196 + - 0.034239143 + - -0.024835436 + - -0.018686859 + - 0.0121765975 + - -0.022424228 + - 0.02965785 + - 0.0066911 + - -0.005184096 + - 0.042678367 + - 0.02917561 + - -0.013804162 + - 0.012598559 + - -0.008680346 + - 0.010970994 + - -0.0034209006 + - 0.014708364 + - -0.007956984 + - -0.009162588 + - -0.012056037 + - -0.030381212 + - 0.015552287 + - -0.037373718 + - -0.002576978 + - -0.029778412 + - 0.014406964 + - 0.03689147 + - -0.022424228 + - -0.030140093 + - -0.011392955 + - 0.0021550166 + - 0.011754636 + - -0.018325176 + - -0.012297157 + - 0.005244376 + - -0.021339184 + - 0.0007987124 + - -0.037373718 + - 0.047500785 + - 0.035444748 + - 0.0035113208 + - -0.010247631 + - 0.023388712 + - -0.027246643 + - 0.0029537291 + - 0.00012526975 + - -0.036409233 + - 0.029416729 + - 0.006902081 + - 0.030863455 + - -0.012899959 + - 0.07137174 + - -0.020013021 + - -0.030381212 + - 0.01663733 + - 0.017601814 + - 0.021700867 + - 0.038338196 + - -0.020013021 + - 0.004822415 + - -0.008499506 + - 0.044607334 + - 0.017240133 + - -0.031104574 + - -0.011573795 + - 5.839643e-05 + - 0.006902081 + - -0.024955995 + - -0.030019531 + - 0.0028934488 + - -0.01332192 + - 0.016999012 + - 0.00046717143 + - 0.00015070046 + - 0.009946231 + - -0.011995756 + - -0.011453235 + - -0.04171389 + - -0.010729874 + - -0.011212114 + - -0.023870952 + - -0.023750393 + - -6.216394e-05 + - 0.001959106 + - 0.038097076 + - -0.024714876 + - 0.009765389 + id: 5a1e1bc7-a2ed-4126-bc70-40d29e7d65ab + meta: + api_version: + version: '2' + billed_units: + image_tokens: 0 + input_tokens: 4 + response_type: embeddings_by_type + texts: + - Hello, world! + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_embeddings/TestCohere.test_query_with_truncate.yaml b/tests/cassettes/test_embeddings/TestCohere.test_query_with_truncate.yaml new file mode 100644 index 0000000000..2b6103ded2 --- /dev/null +++ b/tests/cassettes/test_embeddings/TestCohere.test_query_with_truncate.yaml @@ -0,0 +1,1602 @@ +interactions: +- request: + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate, br, zstd + connection: + - keep-alive + content-length: + - '135' + content-type: + - application/json + host: + - api.cohere.com + method: POST + parsed_body: + input_type: search_query + max_tokens: null + model: embed-v4.0 + output_dimension: null + texts: + - Hello, world! + truncate: END + uri: https://api.cohere.com/v2/embed + response: + headers: + access-control-expose-headers: + - X-Debug-Trace-ID + alt-svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-length: + - '19488' + content-type: + - application/json + expires: + - Thu, 01 Jan 1970 00:00:00 GMT + num_chars: + - '13' + num_tokens: + - '4' + pragma: + - no-cache + transfer-encoding: + - chunked + vary: + - Origin,Accept-Encoding + parsed_body: + embeddings: + float: + - - -0.017963495 + - 0.007474743 + - -0.0016501701 + - 0.050635356 + - -0.008439225 + - 0.009584549 + - -0.017842935 + - 0.0060280184 + - -0.010368192 + - 0.014406964 + - -0.03279242 + - 0.054252166 + - -0.044125095 + - -0.018566296 + - 0.06654932 + - -0.02290647 + - 0.024714876 + - 0.0010699732 + - 0.0016275649 + - 0.018686859 + - -0.0024262774 + - 0.0020796664 + - -0.026402721 + - -7.346648e-05 + - -0.044125095 + - -0.010609312 + - 0.027970007 + - 0.0008476901 + - -0.00046905517 + - 0.021821426 + - -0.02254479 + - 0.033998024 + - -0.04991199 + - 0.014828925 + - -0.034962505 + - 0.011694356 + - 0.01639621 + - 0.0050936756 + - 0.02278591 + - 0.011091554 + - 0.008137825 + - 0.011332675 + - 0.015250886 + - 0.015552287 + - 0.06703156 + - 0.014527525 + - 0.0048826947 + - 0.019410219 + - -0.06654932 + - -0.0022605069 + - 0.0032099197 + - 0.030501772 + - -0.019048538 + - 0.0066006803 + - 0.05304656 + - -0.0050936756 + - 0.025317678 + - 0.014527525 + - 0.018807419 + - -0.013020519 + - -0.062209148 + - -0.001974176 + - -0.02254479 + - 0.0057266173 + - 0.01663733 + - 0.011513515 + - -0.0066911 + - 0.019651338 + - 0.015793407 + - 0.004822415 + - -0.01675789 + - 0.03279242 + - 0.035444748 + - 0.018445736 + - 0.012477998 + - 0.005244376 + - -0.020977505 + - -0.02290647 + - -0.014587805 + - 0.004822415 + - -0.018566296 + - 0.008861187 + - 0.012297157 + - -0.038338196 + - -0.056904495 + - -0.011151833 + - 0.0267644 + - -0.018807419 + - -0.0261616 + - -0.025317678 + - -0.0056964774 + - 0.06944277 + - -0.020615824 + - -0.025438238 + - 0.030863455 + - 0.036650352 + - -0.01928966 + - -0.000987088 + - -0.052082077 + - 0.021821426 + - 0.007565163 + - -0.024714876 + - 0.007354182 + - 0.01615509 + - -0.03713259 + - 0.004249753 + - 0.0030893595 + - 0.052564323 + - -0.009222868 + - -0.005545777 + - -0.012899959 + - -0.04605406 + - -0.040749405 + - -0.09789502 + - -0.00070075714 + - -0.034721386 + - 0.047259666 + - 0.0021399464 + - 0.0019289659 + - 0.028693367 + - -0.04846527 + - 0.02025414 + - -0.011573795 + - -0.054493286 + - -0.012236877 + - 0.05907458 + - -0.004460734 + - -0.01687845 + - -0.007444603 + - -0.06269139 + - 0.030501772 + - 0.0007082922 + - -0.02664384 + - 0.02652328 + - -0.009825669 + - -0.009885951 + - 0.0041593327 + - 0.044366214 + - 0.026041038 + - -0.014165843 + - 0.008499506 + - -0.01012707 + - 0.025920479 + - 0.00042949631 + - -0.015431727 + - 0.0046717147 + - 0.028572807 + - 0.013141081 + - -0.008559786 + - 0.010850433 + - -0.017842935 + - 0.07571191 + - 0.008559786 + - -0.02266535 + - -0.0337569 + - 0.0121765975 + - 0.0048525548 + - -0.024594314 + - -0.028331686 + - 4.2384505e-05 + - 0.011995756 + - -0.017119572 + - 0.057386734 + - 0.053769924 + - 0.01663733 + - 0.0007045247 + - -0.0043100333 + - -0.012116318 + - -0.049429752 + - -0.0034359705 + - 0.008017264 + - 0.011151833 + - 0.063655876 + - -0.009102308 + - -0.023388712 + - -0.014226124 + - -0.008017264 + - 0.0038428619 + - -0.022424228 + - 0.043883976 + - -0.06703156 + - 0.016999012 + - 0.018686859 + - -0.014346683 + - -0.0337569 + - 0.010790153 + - -0.0100667905 + - 0.0012056037 + - -0.064138114 + - 0.005606057 + - -0.03351578 + - 0.04991199 + - -0.0040387725 + - -0.007203482 + - 0.0077761435 + - 0.0024112074 + - -0.039784923 + - -0.02025414 + - -0.044366214 + - -0.008198105 + - 0.013201361 + - 0.030622335 + - -0.009042027 + - -0.005545777 + - -0.0063294196 + - -0.028331686 + - -0.020615824 + - -0.017842935 + - -0.037373718 + - 0.026041038 + - 0.028813928 + - 0.01928966 + - 0.021821426 + - -0.03327466 + - -0.0057266173 + - -0.010609312 + - -0.0054252166 + - -0.0049429755 + - 0.001311094 + - -0.005545777 + - 0.0118149165 + - -0.01332192 + - -0.0031948497 + - -0.009042027 + - -0.028813928 + - -0.0121765975 + - 0.014045283 + - 0.013563042 + - -0.0118149165 + - -0.01687845 + - -0.0064198393 + - -0.052564323 + - -0.043883976 + - 0.014768645 + - 0.0017481254 + - 0.0075048828 + - 0.021941988 + - -0.01675789 + - -0.034480266 + - 0.038338196 + - -0.020736383 + - -0.033033542 + - 0.031586815 + - -0.026402721 + - 0.013563042 + - -0.023629833 + - 0.06799605 + - -0.011332675 + - -0.0267644 + - -0.0048525548 + - -0.0021700866 + - 0.012297157 + - -0.019169098 + - 0.0056663374 + - 0.011453235 + - 0.0064499797 + - -0.020495262 + - -0.0021399464 + - 0.03713259 + - 0.0049429755 + - -0.008137825 + - 0.014165843 + - -0.023388712 + - -0.030863455 + - 0.043642852 + - 0.010247631 + - -0.018927978 + - 0.043401733 + - -0.0038428619 + - -0.008198105 + - 0.012116318 + - 0.025438238 + - 0.028572807 + - 0.024473755 + - 0.021459747 + - 0.04195501 + - 0.006751381 + - -0.03231018 + - 0.032069057 + - 0.030019531 + - -0.010729874 + - -0.024112074 + - 0.024232635 + - 0.024955995 + - 0.057386734 + - 0.037614837 + - 0.000493544 + - -0.03616811 + - -0.002230367 + - -0.04605406 + - -0.021098064 + - 0.008258386 + - -0.041472767 + - 0.01928966 + - -0.015250886 + - -0.016516771 + - 0.00017989868 + - 0.013141081 + - 0.030019531 + - 0.0004389151 + - 0.034239143 + - 0.0028180988 + - 0.05497553 + - -0.028572807 + - 0.018566296 + - 0.054011047 + - -0.019892462 + - 0.03568587 + - -0.0453307 + - -0.011332675 + - 0.008198105 + - -0.010790153 + - -0.027367204 + - 0.023629833 + - 0.01928966 + - 0.019651338 + - -0.0075048828 + - 0.0063896994 + - 0.019651338 + - -0.012116318 + - -0.019651338 + - -0.013020519 + - 0.011091554 + - -0.009946231 + - 0.0031044295 + - -0.0070226416 + - -0.031827938 + - 0.0028633086 + - 0.0029085188 + - -0.0337569 + - -0.010187351 + - -0.020615824 + - -0.015552287 + - 0.015070046 + - -0.041472767 + - 0.025076555 + - -0.0072939023 + - -0.0325513 + - 0.005274516 + - 0.034721386 + - 0.0012583488 + - -0.028090566 + - -0.030260652 + - 0.0056964774 + - -0.011091554 + - -0.026884962 + - -0.017119572 + - -0.012598559 + - 0.031827938 + - 0.024112074 + - 0.00023452759 + - -0.03520363 + - 0.0008363875 + - -0.01627565 + - 0.012538278 + - 0.055216648 + - 0.011935476 + - -0.026402721 + - -0.019410219 + - 0.0047621345 + - 0.021700867 + - -0.009584549 + - -0.023509271 + - -0.0070226416 + - -0.008499506 + - 0.030501772 + - -0.02326815 + - 0.012899959 + - 0.011573795 + - 0.0013939792 + - -0.0025619077 + - 0.019410219 + - 0.0050936756 + - 0.0032099197 + - -0.020736383 + - 0.026041038 + - 0.030140093 + - -0.008559786 + - 0.01675789 + - -0.0008024799 + - -0.021821426 + - 0.025558798 + - -0.008981748 + - 0.020133581 + - -0.008439225 + - 0.04508958 + - 0.021700867 + - -0.03568587 + - -0.06462036 + - 0.0325513 + - 0.015672848 + - 0.0023961372 + - 0.0053950767 + - -0.034239143 + - -0.027005523 + - -0.017360693 + - -0.009102308 + - -0.0008853652 + - 0.06172691 + - -0.014527525 + - -0.020374702 + - -0.038338196 + - 0.005304656 + - -0.007836424 + - 0.020133581 + - -0.02290647 + - -0.009584549 + - 0.000501079 + - -0.009162588 + - -0.015913969 + - 0.04918863 + - -0.03616811 + - -0.040026043 + - 0.0337569 + - 0.018807419 + - -0.014708364 + - -0.00037863493 + - -0.035444748 + - -0.005485497 + - -0.008800907 + - 0.017722374 + - -0.037614837 + - -0.011453235 + - 0.0049429755 + - 0.00331541 + - -0.010609312 + - -0.024594314 + - -0.03592699 + - 0.02254479 + - 0.020133581 + - -0.060280185 + - 0.014889206 + - -0.04918863 + - -0.027849443 + - 0.021821426 + - 0.028452247 + - -0.040026043 + - -0.023509271 + - -0.008740626 + - -0.0535288 + - -0.0054252166 + - -0.030501772 + - -0.009825669 + - 0.015311168 + - -0.039302677 + - 0.003948352 + - 0.00015540986 + - -0.01326164 + - -0.023388712 + - -0.0060882987 + - -0.023629833 + - 0.068478286 + - 0.02917561 + - -0.03616811 + - 0.023991512 + - 0.010368192 + - 0.008620067 + - -0.019048538 + - 0.02326815 + - -0.011453235 + - 0.011272395 + - -0.007836424 + - 0.02025414 + - 0.030260652 + - -0.034480266 + - -0.015793407 + - 0.03351578 + - 0.011875196 + - 0.012658839 + - -0.0032702 + - 0.02314759 + - -0.022183107 + - 0.017842935 + - -0.06799605 + - -0.021218624 + - -0.013502762 + - -0.0009192728 + - 0.00010831595 + - -0.006932221 + - -0.033033542 + - 0.051599838 + - 0.070889495 + - 0.039543804 + - 0.039061558 + - 0.003616811 + - 0.017601814 + - 0.004641574 + - -0.040990524 + - 0.029778412 + - -0.0337569 + - -0.044607334 + - 0.005877318 + - -0.011091554 + - -0.008800907 + - 0.008921468 + - 0.06172691 + - -0.0063896994 + - -0.010970994 + - 0.0057567577 + - -0.030501772 + - 0.009042027 + - -0.020977505 + - 0.015311168 + - 0.037614837 + - -0.02664384 + - 0.0064198393 + - -0.012477998 + - 0.01663733 + - -0.01326164 + - -0.005997878 + - -0.0020193863 + - -0.02326815 + - 0.08149881 + - 0.012899959 + - -0.015672848 + - 0.021218624 + - 0.008499506 + - 0.019530779 + - 0.019169098 + - 0.00964483 + - 0.034962505 + - -0.012116318 + - -0.020374702 + - 0.0073240423 + - -0.008439225 + - 0.01627565 + - -0.024112074 + - -0.013563042 + - 0.006751381 + - -0.014286404 + - 0.018686859 + - -0.03351578 + - -0.039784923 + - 0.015250886 + - -0.03279242 + - -0.021700867 + - -0.021580307 + - -0.018927978 + - -0.042919494 + - -0.047018543 + - 0.0012206737 + - 0.04219613 + - -0.020977505 + - -0.021941988 + - 0.10271743 + - -0.0017481254 + - 0.020013021 + - -0.05328768 + - -0.0064198393 + - -0.023991512 + - 0.008499506 + - -0.002968799 + - 0.014165843 + - 0.014527525 + - -0.023870952 + - 0.0044004535 + - -0.030381212 + - -0.01012707 + - -0.04219613 + - 0.11332674 + - -0.015311168 + - 0.014889206 + - 0.04171389 + - -0.02917561 + - -0.009102308 + - -4.968406e-05 + - 0.010910713 + - -0.027608324 + - 0.022062548 + - -0.021218624 + - -0.020977505 + - -0.0048525548 + - 0.030501772 + - 0.02266535 + - -0.030863455 + - 0.006208859 + - -0.056422252 + - -0.015552287 + - 0.027005523 + - -0.037614837 + - 0.013442481 + - 0.03520363 + - 0.00033907604 + - -0.028693367 + - -0.008740626 + - -0.024714876 + - -0.023629833 + - -0.00166524 + - -0.044366214 + - -0.005877318 + - -0.016034529 + - 0.00663082 + - 0.0077158636 + - 0.030863455 + - 0.023509271 + - 0.031827938 + - -0.017963495 + - -0.013623321 + - 0.002004316 + - -0.013683602 + - -0.025799919 + - -0.030140093 + - 0.0027126083 + - 0.007956984 + - 0.0020344562 + - -0.0040689125 + - -0.01675789 + - 0.008740626 + - 0.03857932 + - 0.03713259 + - 0.021098064 + - -0.03592699 + - 0.020374702 + - 0.0067212405 + - -0.039302677 + - 0.051358715 + - -0.03713259 + - 0.008439225 + - 0.008861187 + - 0.007836424 + - -0.0073843226 + - 0.0028180988 + - 0.0017858004 + - 0.023629833 + - -0.008439225 + - -0.018927978 + - 0.037614837 + - 0.007535023 + - 0.03568587 + - -0.0006329419 + - -0.03592699 + - 0.011694356 + - 0.008680346 + - 0.023388712 + - -0.013985003 + - 0.021218624 + - -0.0047621345 + - 0.03231018 + - 0.0150097655 + - 0.035444748 + - 0.040990524 + - -0.0030290794 + - -0.00095318037 + - 0.008499506 + - -0.005847178 + - 0.010669592 + - -0.0020344562 + - 0.004551154 + - 0.005485497 + - 0.014889206 + - 0.044125095 + - 0.04050828 + - -0.044125095 + - -0.015552287 + - -0.040990524 + - -0.01928966 + - -0.005937598 + - 0.023388712 + - 0.01639621 + - -0.006178719 + - -0.01627565 + - 0.014467244 + - 0.010006511 + - -0.022303667 + - 0.027608324 + - -0.013623321 + - -0.008499506 + - -0.057386734 + - 0.0021248765 + - -0.014467244 + - 0.02664384 + - 0.009524269 + - 0.004611434 + - 0.017240133 + - -0.0150097655 + - -0.012779399 + - -0.01627565 + - 0.022424228 + - 0.015190606 + - 0.020374702 + - 0.02917561 + - 0.020615824 + - 0.017963495 + - -0.023750393 + - -0.06172691 + - -0.017722374 + - -0.0077158636 + - -0.033033542 + - -0.0056361975 + - 0.036409233 + - 0.008198105 + - -0.012056037 + - 0.016516771 + - -0.015672848 + - 0.018686859 + - -0.019530779 + - 0.0019289659 + - -0.02664384 + - 0.017842935 + - -0.023991512 + - -0.008740626 + - 0.039784923 + - -0.022303667 + - -0.0037524414 + - 0.005274516 + - 0.051840957 + - 0.036650352 + - -0.0076857237 + - -0.018325176 + - -0.0325513 + - 0.0054252166 + - -0.023388712 + - -0.012839679 + - 0.0059074583 + - -0.016999012 + - -0.017601814 + - -0.002622188 + - -0.0049128346 + - -0.0146480845 + - 0.018084055 + - 0.03327466 + - 0.03568587 + - 0.0015446797 + - 0.0024413473 + - -0.034962505 + - 0.025076555 + - -0.011212114 + - -0.007444603 + - 0.011995756 + - 0.0133822 + - 0.039061558 + - 0.007535023 + - -0.03351578 + - -0.039061558 + - -0.011091554 + - -0.040990524 + - -0.0047621345 + - 0.02905505 + - -0.0146480845 + - 0.037614837 + - 0.0261616 + - -0.066067085 + - -0.02953729 + - -0.011935476 + - 0.0593157 + - 0.00023452759 + - 0.008861187 + - 0.0043100333 + - 0.023388712 + - -0.008680346 + - 0.005997878 + - -0.035444748 + - 0.0040990524 + - -0.017722374 + - 0.011754636 + - 0.036650352 + - 0.041231647 + - -0.018927978 + - -0.02953729 + - 0.014045283 + - 0.009283148 + - 0.053769924 + - 0.009222868 + - 0.013563042 + - -0.013201361 + - 0.0022002268 + - 0.028934488 + - 0.004370313 + - 0.0036469512 + - -0.023509271 + - -0.007444603 + - 0.00048224148 + - 0.037373718 + - 0.013683602 + - 0.010729874 + - 0.034962505 + - -0.02905505 + - -0.0050936756 + - -0.029296169 + - 0.005847178 + - 0.010187351 + - -0.01627565 + - 6.969897e-05 + - 0.026282161 + - -0.0325513 + - 0.011634075 + - 0.011392955 + - -0.0061184387 + - -0.008258386 + - -0.025076555 + - 0.004129193 + - -0.023991512 + - -0.001989246 + - -0.021098064 + - 0.014828925 + - -0.023870952 + - -0.03568587 + - 0.086803466 + - 0.026282161 + - 0.027728884 + - 0.030622335 + - 0.015793407 + - 0.021339184 + - 0.01627565 + - -0.0044004535 + - 0.00053875416 + - 0.013020519 + - -0.023991512 + - 0.012236877 + - 0.009403709 + - 0.021098064 + - -0.038097076 + - -0.033033542 + - 0.0018159406 + - 0.06269139 + - 0.012899959 + - 0.07040726 + - -0.017842935 + - -0.017601814 + - -0.011935476 + - 0.033033542 + - -0.0050333953 + - -0.033033542 + - 0.02266535 + - 0.0061184387 + - 0.013623321 + - -0.025197119 + - 0.018204616 + - 0.003571601 + - -0.0038428619 + - 0.055457767 + - 0.0026975384 + - 0.0337569 + - -0.0040689125 + - 0.00028256336 + - 0.08149881 + - 0.019169098 + - -0.043642852 + - -0.023629833 + - 0.014045283 + - 0.006208859 + - -0.015793407 + - -0.00042949631 + - -0.014949486 + - 0.025558798 + - 0.022303667 + - 0.020977505 + - 0.010368192 + - 0.007836424 + - 0.04629518 + - 0.025558798 + - -0.010006511 + - -0.0012282087 + - 0.012538278 + - 0.04557182 + - -0.008017264 + - 0.009524269 + - -0.029296169 + - 0.0021550166 + - -0.0453307 + - 0.017240133 + - -0.0118149165 + - 0.053769924 + - -0.019410219 + - -0.012477998 + - 0.004641574 + - 0.031104574 + - 0.022062548 + - -0.0071733417 + - 0.016034529 + - 0.043642852 + - 0.027728884 + - 0.0014693295 + - -0.010609312 + - 0.021821426 + - 0.015130326 + - -0.013141081 + - 0.019169098 + - 0.043642852 + - 0.020977505 + - -0.027126083 + - -0.028331686 + - -0.040990524 + - -0.021098064 + - 0.008981748 + - 0.013924722 + - 0.09114364 + - -0.015672848 + - -0.0325513 + - -0.0031948497 + - -0.012236877 + - -0.008680346 + - -0.0675138 + - -0.03568587 + - -0.016034529 + - 0.078123115 + - 0.0025016277 + - -0.01615509 + - -0.04050828 + - 0.015431727 + - 0.0065102596 + - 0.039543804 + - 0.0038579318 + - 0.016516771 + - -0.026282161 + - 0.006962361 + - -0.0018988258 + - -0.018566296 + - -0.031104574 + - -0.0013563042 + - -0.012538278 + - -0.003948352 + - -0.014165843 + - 0.02917561 + - -0.040990524 + - -0.025076555 + - -0.023991512 + - 0.0043100333 + - 0.0097051095 + - -0.043160614 + - -0.057386734 + - -0.022303667 + - -0.014346683 + - -0.022303667 + - 0.020013021 + - 0.040749405 + - 0.017963495 + - -0.007836424 + - -0.06799605 + - 0.012236877 + - 0.009524269 + - 0.012297157 + - -0.018807419 + - 0.01675789 + - 0.017601814 + - -0.041472767 + - -0.01627565 + - 0.011272395 + - 0.020013021 + - 0.006871941 + - 0.0093434295 + - 0.024353195 + - -0.027246643 + - 0.01675789 + - 0.044848457 + - 0.027728884 + - -0.0047922744 + - -0.013683602 + - -0.0064198393 + - 0.022424228 + - 0.0070527815 + - 0.03520363 + - 0.015913969 + - -0.0015446797 + - 0.0061485786 + - 0.031345695 + - 0.01663733 + - 0.0030742893 + - -0.02278591 + - -0.017360693 + - 0.019410219 + - 0.057145614 + - 0.02290647 + - 0.030019531 + - 0.009403709 + - -0.042678367 + - -0.014708364 + - -0.002320787 + - -0.027487764 + - -0.0018084055 + - 0.018084055 + - 0.0014165844 + - -0.0031797797 + - 0.009463989 + - -0.037614837 + - -0.0097051095 + - 0.025317678 + - 0.007474743 + - -0.014768645 + - -0.027970007 + - -0.007896704 + - -0.005515637 + - 0.039061558 + - 0.01012707 + - -0.0045210137 + - 0.008620067 + - 0.02302703 + - -0.036650352 + - 0.0060882987 + - 0.026282161 + - -0.003948352 + - -0.004490874 + - 0.04050828 + - -0.009765389 + - -0.024473755 + - 0.02652328 + - 0.0032099197 + - 0.02314759 + - -0.021580307 + - 0.020736383 + - -0.018325176 + - -0.038097076 + - -0.00013374665 + - -0.03351578 + - 0.001989246 + - -0.0038579318 + - 0.006841801 + - -0.028813928 + - 0.005364937 + - -0.007625443 + - 0.014527525 + - -0.022183107 + - -0.018566296 + - 0.024714876 + - 0.013743882 + - 0.030381212 + - -0.025076555 + - -0.0015446797 + - -0.010549032 + - 0.016999012 + - 0.0047621345 + - 0.017240133 + - -0.00027314457 + - 0.015371447 + - 0.036650352 + - 0.0021550166 + - 0.01627565 + - -0.023870952 + - -0.020615824 + - 0.02905505 + - 0.020133581 + - -0.022183107 + - -0.015913969 + - -0.01928966 + - 0.027728884 + - -0.026884962 + - -0.0130808 + - -0.014226124 + - 0.023388712 + - -0.023509271 + - -0.0012357439 + - -0.010609312 + - -0.030742895 + - -0.009584549 + - -0.0026975384 + - 0.014105563 + - -0.0015823549 + - 0.014346683 + - 0.0050333953 + - 0.012538278 + - -0.001974176 + - 0.013864442 + - -0.014346683 + - -0.010549032 + - 0.00017989868 + - 0.006781521 + - -0.00030140093 + - -0.009222868 + - -0.01627565 + - 0.011453235 + - -0.0021098063 + - 0.0077761435 + - -0.0651026 + - 0.096448295 + - 0.015431727 + - -0.012417718 + - 0.025076555 + - 0.0028633086 + - 0.037855957 + - -0.011513515 + - -0.01675789 + - 0.0027578184 + - -0.0027728884 + - -0.050635356 + - -0.019771902 + - -0.020977505 + - 0.027367204 + - -0.0057868976 + - -0.0024112074 + - 0.047741905 + - 0.007444603 + - -0.005937598 + - -0.00038240242 + - -0.043883976 + - 0.03616811 + - 0.0150097655 + - -0.019169098 + - -0.005334796 + - 0.005515637 + - 0.014949486 + - -0.024473755 + - -0.028813928 + - -0.00042007753 + - 0.01928966 + - 0.005214236 + - 0.034721386 + - -0.043883976 + - -0.010669592 + - 0.0038880717 + - -0.02664384 + - -0.018566296 + - -0.011151833 + - 0.027246643 + - 0.038820438 + - 0.0056964774 + - -0.0040990524 + - -0.0010699732 + - 0.06148579 + - -0.00020156187 + - -0.027005523 + - -0.0048826947 + - -0.0325513 + - 0.04508958 + - 0.020013021 + - -0.035444748 + - -0.0034661104 + - 0.0042196126 + - -0.008981748 + - 0.01627565 + - -0.025438238 + - 0.023509271 + - -0.0038880717 + - -0.037373718 + - -0.044125095 + - 0.012297157 + - 0.027487764 + - -0.019530779 + - -0.033033542 + - 0.008137825 + - 0.0065102596 + - -0.034480266 + - 0.031586815 + - 0.021821426 + - 0.008439225 + - -0.034721386 + - -0.028693367 + - -0.020374702 + - -0.00023170195 + - -0.022062548 + - 0.02664384 + - 0.013623321 + - 0.008981748 + - 0.058592338 + - 0.025679357 + - -0.025679357 + - 0.028090566 + - -0.011634075 + - 0.013864442 + - -0.030501772 + - 0.036409233 + - 0.0146480845 + - -0.010970994 + - 0.012960239 + - -0.023991512 + - -0.02025414 + - 0.031586815 + - 0.04171389 + - -0.04918863 + - -0.011392955 + - 0.023750393 + - -0.0012508138 + - -0.024835436 + - 0.012417718 + - 0.010669592 + - 0.014889206 + - -0.027608324 + - -0.00334555 + - 0.0261616 + - 0.007565163 + - -0.0030140092 + - 0.03279242 + - 0.0045210137 + - -0.028331686 + - 0.00017047989 + - -0.03568587 + - -0.011453235 + - 0.01627565 + - 0.007565163 + - 0.0036318812 + - -0.030019531 + - -0.012477998 + - 0.025076555 + - -0.015672848 + - 0.008318665 + - 0.008017264 + - 0.021098064 + - 0.078605354 + - -0.010006511 + - -0.039784923 + - -0.0013713742 + - -0.0027276783 + - -0.02278591 + - 0.0005236841 + - 0.001989246 + - -1.4599107e-05 + - 0.028452247 + - 0.027487764 + - 0.019048538 + - -0.006751381 + - 0.0002806796 + - -0.011212114 + - 0.0006254069 + - 0.015552287 + - 0.0034209006 + - -0.029296169 + - -0.0020947363 + - -0.012779399 + - 0.01928966 + - -0.018204616 + - -0.0050936756 + - -0.0054553566 + - 0.014587805 + - -0.073300704 + - 0.038338196 + - -0.021821426 + - -0.030863455 + - 0.02917561 + - -0.041472767 + - -0.034721386 + - 0.024955995 + - -0.039061558 + - -0.047741905 + - 0.001959106 + - -0.0031797797 + - -0.001002158 + - -0.006178719 + - 0.009403709 + - -0.00055759173 + - -0.0037976515 + - -0.009403709 + - 0.008439225 + - 0.009403709 + - -0.004249753 + - 0.018325176 + - -0.01639621 + - 0.008861187 + - -0.030501772 + - -0.031104574 + - 0.028934488 + - -0.03520363 + - 0.0077158636 + - 0.012417718 + - 0.033033542 + - -0.0019063607 + - 0.0337569 + - -0.015913969 + - -0.06896053 + - -0.0018686857 + - 0.07667639 + - -0.019169098 + - -0.014828925 + - 0.030019531 + - 0.042678367 + - -0.025558798 + - 0.0034811804 + - -0.034962505 + - -0.00025242328 + - -0.02302703 + - -0.013442481 + - -0.028090566 + - 0.060280185 + - -0.027728884 + - -0.0060882987 + - 0.019410219 + - -0.00013280478 + - -0.0133822 + - -0.0004464501 + - 0.010428472 + - -0.027367204 + - 0.010488752 + - 0.002637258 + - 0.025197119 + - 0.000119147546 + - 0.007836424 + - -0.039302677 + - 0.019771902 + - -0.0056663374 + - -0.009463989 + - -0.013623321 + - 0.01012707 + - -0.017119572 + - 0.034239143 + - 0.0062992796 + - 0.03592699 + - -0.0133822 + - 0.008740626 + - -0.0026824684 + - -0.0063896994 + - 0.0058170375 + - -0.0006894546 + - 0.0077761435 + - -0.040990524 + - -0.0020495262 + - 0.0093434295 + - 0.006902081 + - -0.018445736 + - -0.009283148 + - 0.0012658838 + - -0.011392955 + - 0.008680346 + - -0.018084055 + - -0.023870952 + - 0.02905505 + - -0.02905505 + - -0.017722374 + - -0.012297157 + - 0.005485497 + - -0.024594314 + - 0.024594314 + - -0.007203482 + - -0.010368192 + - -0.016999012 + - 0.012116318 + - 0.035444748 + - 0.015793407 + - -0.013864442 + - 0.024594314 + - 0.047259666 + - -0.008017264 + - -0.004370313 + - -0.0055759167 + - 0.0040387725 + - 0.01615509 + - -0.008318665 + - 0.0049429755 + - -0.0075048828 + - -0.005153956 + - -0.00331541 + - 0.02278591 + - -0.022183107 + - -0.016034529 + - -0.013020519 + - 0.041231647 + - -0.008800907 + - -0.011513515 + - -0.050876476 + - 0.011875196 + - 0.0046717147 + - 0.0465363 + - -0.0032702 + - -0.0029085188 + - 0.0070829215 + - -0.01012707 + - -0.03689147 + - 0.0130808 + - -0.017240133 + - 0.02965785 + - 0.017722374 + - 0.060039062 + - -0.008800907 + - 0.02953729 + - 0.015672848 + - 0.047259666 + - 0.0035263908 + - -0.047500785 + - 0.03592699 + - 0.009222868 + - 0.08825019 + - -0.020374702 + - -0.008318665 + - -0.010247631 + - 0.024835436 + - -0.008559786 + - -0.00063670945 + - -0.011935476 + - 0.003571601 + - -0.00079117744 + - 0.06799605 + - -0.010609312 + - 0.0100667905 + - 0.018686859 + - 0.019530779 + - -0.021821426 + - 0.0031044295 + - -0.0041593327 + - -0.015250886 + - -0.0017782655 + - -0.028693367 + - -0.013804162 + - 0.028452247 + - -0.036650352 + - -0.025317678 + - -0.0031797797 + - -0.01928966 + - 0.029898971 + - -0.021700867 + - 0.010247631 + - 0.026041038 + - -0.0008514576 + - -0.031827938 + - 0.020013021 + - 0.002938659 + - -0.0018084055 + - 0.025679357 + - 0.017842935 + - 0.017722374 + - -0.04171389 + - -0.024353195 + - 0.0055759167 + - 0.0034811804 + - -0.050635356 + - 0.0005990343 + - -0.033998024 + - -0.0069925017 + - -0.009283148 + - -0.006058159 + - 0.01615509 + - 0.0146480845 + - -0.008198105 + - 0.047018543 + - 0.031104574 + - 0.00019308497 + - 0.01687845 + - -0.02965785 + - 0.009946231 + - 0.07667639 + - -0.028693367 + - 0.055457767 + - -0.010729874 + - -0.0023659973 + - -0.017240133 + - -0.02290647 + - 0.0015823549 + - -0.014828925 + - 0.017481253 + - 0.010790153 + - 0.01627565 + - -0.010006511 + - -0.032069057 + - -0.008378945 + - -0.024473755 + - 0.031345695 + - 0.021459747 + - -0.0049128346 + - 0.057868976 + - -0.0121765975 + - -6.828614e-05 + - 0.012357438 + - -0.011935476 + - 0.018084055 + - -0.0048826947 + - 0.018807419 + - 0.006238999 + - 0.013864442 + - 0.023750393 + - 0.037855957 + - -0.014889206 + - -0.011995756 + - -0.025558798 + - 0.011875196 + - 0.034239143 + - -0.024835436 + - -0.018686859 + - 0.0121765975 + - -0.022424228 + - 0.02965785 + - 0.0066911 + - -0.005184096 + - 0.042678367 + - 0.02917561 + - -0.013804162 + - 0.012598559 + - -0.008680346 + - 0.010970994 + - -0.0034209006 + - 0.014708364 + - -0.007956984 + - -0.009162588 + - -0.012056037 + - -0.030381212 + - 0.015552287 + - -0.037373718 + - -0.002576978 + - -0.029778412 + - 0.014406964 + - 0.03689147 + - -0.022424228 + - -0.030140093 + - -0.011392955 + - 0.0021550166 + - 0.011754636 + - -0.018325176 + - -0.012297157 + - 0.005244376 + - -0.021339184 + - 0.0007987124 + - -0.037373718 + - 0.047500785 + - 0.035444748 + - 0.0035113208 + - -0.010247631 + - 0.023388712 + - -0.027246643 + - 0.0029537291 + - 0.00012526975 + - -0.036409233 + - 0.029416729 + - 0.006902081 + - 0.030863455 + - -0.012899959 + - 0.07137174 + - -0.020013021 + - -0.030381212 + - 0.01663733 + - 0.017601814 + - 0.021700867 + - 0.038338196 + - -0.020013021 + - 0.004822415 + - -0.008499506 + - 0.044607334 + - 0.017240133 + - -0.031104574 + - -0.011573795 + - 5.839643e-05 + - 0.006902081 + - -0.024955995 + - -0.030019531 + - 0.0028934488 + - -0.01332192 + - 0.016999012 + - 0.00046717143 + - 0.00015070046 + - 0.009946231 + - -0.011995756 + - -0.011453235 + - -0.04171389 + - -0.010729874 + - -0.011212114 + - -0.023870952 + - -0.023750393 + - -6.216394e-05 + - 0.001959106 + - 0.038097076 + - -0.024714876 + - 0.009765389 + id: 9c17f453-3ea7-4382-8bb3-1e4774d1a71b + meta: + api_version: + version: '2' + billed_units: + image_tokens: 0 + input_tokens: 4 + response_type: embeddings_by_type + texts: + - Hello, world! + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_embeddings/TestVoyageAI.test_documents.yaml b/tests/cassettes/test_embeddings/TestVoyageAI.test_documents.yaml new file mode 100644 index 0000000000..e80ec8a2ad --- /dev/null +++ b/tests/cassettes/test_embeddings/TestVoyageAI.test_documents.yaml @@ -0,0 +1,41 @@ +interactions: +- request: + headers: + content-type: + - application/json + method: post + parsed_body: + encoding_format: base64 + input: + - hello + - world + input_type: document + model: voyage-3.5 + output_dimension: null + output_dtype: null + truncation: false + uri: https://api.voyageai.com/v1/embeddings + response: + headers: + alt-svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content-length: + - '11098' + content-type: + - application/json + parsed_body: + data: + - embedding: 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 + index: 0 + object: embedding + - embedding: 5J9nPD4x6TzHAga7AKuMPW7dNT3eHc282xtFvRLcF72AJxG9U6QKPFiwlT2opoc9JhWevcpoxDu4U8C7j98APYL0bLqMJE89U4o2O/BVzzymiqu6MKcuvBjulb1U2Qm8ZEQuPfeImLx04sk8dAmIvWGP77zqTze8VIRDPIYfO70vPQU99Hgive1sF71IMDS8E7Zdu9P0jrxPIee7AudVvI9Jqjwm4HG9AYxJPeBMBrygcba8UwMqO1qxGb3FwG89/Y4wvaPxyDuEOIu81SmOPV5FjTyZN3a9E7ZdPOQbv7ty9CI8RTxwveU9OblOfy8973sJvEBZq7zxdpo8wOkQvTMnwT1+5PY8l12wvSCFlTwV0TW9ctpOPSAJkzx76WU9+5IbvdDd9Lxl3Iy6lGCXvJFkgrxgKH28FcRLOjdRC71oxEA86Sd1vL2/Rj34lPk7exaXPEhM5romFR69wOKZOxftETxGUdW8AYVSvYowNTsBdIK7uqHivMZXyju92Zq95VeNPOUx070V7A28IurPvATXCTxNeDi9ztR1vY/9urz9dFy9G9ZJPGKYbjwkGQm9vHgbvXMCkTzrPFq9M2tJvFiwFb3E85M8vs20OVGPpbzOY6o78P8GvIEvjD03MEC9C8iRPCD7JLxbf3k7SGa6PfFHYb3Z8fo8+3HQvDhYgr0BEfa7AKuMPGvbLb3GwXM7OlQXPJY63bso7l+7hyHDvPFoLL3wWr68wNUvvcnqOT39dNy8mjj6PPJ9ET0oFiK9cNFPvVeuDT2VVPC8ZMcnuUlGczoXwOA73RZWPDE4lj3pYhQ9U6UOvaWDNL0JwRq7BZSZu9Pm8zthvqg82v/ovF6NZ72oa2g9etrzPOETb7154Ga9ptYavCgPqzzpVCY8/W1luuppiz1SnRM9GTnevH4FQjuFC9o8T1n1PB6KBDw+Q0K8cNHPPAO0i7xDYio92SC0vPt5y7zdQwe94jQ6PcHwB70jx6Y8BYniu7WkSbpYqZ68cPKaPeVXDT1p7AK9hyc2vMvS7bxQooK7MARuPYSumrwU64k7ym2IPLWRbLvxQnK9EZl9PGLFHz1SfMg92JU/vGK4Nb1qcAC8X7A6vY/Ln7xp7II9PAowvCgKPD3VIpc7gu99vfyNLL1Gf4o8yQQOPSTZerzTg0G8AXL1OhrP0rzB1rO8xe2gPY4a8bzD+AI9kkquvB0AFD2zDGs84BhevXn6urxquNq8mErTPPBA6jueQv08r7OWvAwVBb2B++O8iTwbvRdPwLwToXi8TJGIvIDpj7xTaeu8OzRQPVOeFz3yUOA8YUEivHsCtjsOyx29WG5/vQWJ4jxj0409J/xNvZ5LgbsJhvu8LvT3PPZ6qrzSuRy8P18ePTkY9LodABS7f+X6PO447zwZXzY8+HyyvIg1JDxw2EY9dRGDO5UvAD0x+ZC8TGpKu6+mLLzpTjM9m3QdOcFTOjtFcZw8ixHyPIEVOD32C5K7Z7bSuyw0hjzIAwo9udwBPfaBIb1VrIW8iUmFPcb8Ej1al0W4Dbe8vHDEZbtYnDS8Dr6zO01+qzuYZCc9iyvGPEJonTsLVmg8F+CnPUZ/Cr169Ec99VLoPMS+Zz3fJUg8AJG4PM9a+zzAbIq7ubQ/PWfkhzz7ZOY6OloKOyH2Nb1CrRW87F2lvKuOO7pFfoa8JhUePbiTdD0FojK9x1hOPOBAIL1HRe85x4YDvLOPZLzytZ88CcGaPH7kdjxakE490BGdOmaoZLz0fxk93ys7vQV7dDybdJ08A5q3PBr9BzwIv5I62yDcvK6SSz1vYje8o3s5O5I9RD19xAm87m2bvDH9drh6DyC6JwG9PbSD/jxxC2a88EBqO/BaPryVM2Y8CJJhPEqCFr0Akbg8ewM6vXHmtLwAkbg8yt5TPIMqnTyddSG9YKpHvQB3ZDtKdjA9yOk1vQiKZryNJte7ZsK4PA/pVzximO46t59aPR2CCT2715K8PzhgvMG1aD3ubRu9tKo8vSHV6juzokE8yNxLvXPU2zxPesC8UpApPBxotTso6fA87Cn9vBLOKTnUu8+7DtiHO0PRwjwgAhw8JwG9vHC+8ryCNgO90BGdu9Ujm7xx5rQ8MXcbvfaBIT0TTLQ82Zy2u+858zrZOoi9m3QdOl+usjstDky9TdeEvF6nuzxy4EG7vdmavb3FObyiWu47/IBCvXT2qrvo1x88aqvwPH/qPrwxHsK8KPXWO0pnkzv2hxS8VHLqvA23vLyuAWS6Cs4EPTYpSb1/DLm8V6+RPe97CT1PlJQ7tswLvZlYQb2q4Q28OmEBvcTM1Tv9es879EtxuywtDzxQ8VM7cNhGPWPNGr34iqC8QExBO31fdTyoXn48xeetu95pFb0Unxo8KwVNPeloh726tse8MBBUvd1DBz2vf+68x0GLO1aAWD3Mfi085yzkvJZWuTxVZHy9DKlOPK10PDzKxP+7uK3IvIMXQLzVAtC8o1T7vLKB9rwc8aG8KiUUPRa4ZTymlxU8CKw1PWGXajzVjMA8yF/FOxXlFj2INaQ9pcAGPOYqXD0S3Je7Q0jWPD422DxKXNw8GLN2vHEAiTuYT0K8NDQrPAzQjLyAGqe8VHLqO4sR8rwq8Wu8G/eUvEmPAL0Pxq48lh2nPH7r7Tv7mZK8R0Vvu/pj4rxQVhM8ZqHtPNk6iL36Vvi8e+llPHwJLb39dNy80RKhvLmVfD3W73K8/KAJvUqJjbxYtoi9HczrOq19ZjzG7qQ8G2bBu34SLDzvRt27V4Fcu88WDLt7cB+8W78HPW3pm70oAkG8lW4FvT1qAL29nnu9RDV5vLCjiTx112e83AL1OyXsV72HLi29/BAmvHscir0MvKs80hOlvFTCxDqzlls8ferpvNoM07zqLuy8UG5avdHGMbx38r88R0XvuZnopDwLJVE8hyHDPI+xSzxpyzc9Up0TO/pWeDxNixW9nE3fvGpCyzx65108VHdZPW6297wV5RY71SMbvauOuzx7HQ49eNlvvTVPA7xJex89NxbsPMhTXzuzwwy9HN9IPENbMz1BZ5m8w7B5PBLVID1iuLU8ilGAvI1Aq7pWtAC9zQ8VvSMSkr30jIO8cPKavEpc3DwujNa8ktQevNMAyDwPq9a8ix1YPckFEjzRHwu7dt5eu3oIKTsVvlg85peWPLtY/7s6TaC7A4BjvDNBFbzrQ9G77Cn9vGa1Tr0Ka6W7oo0Svaf6R7vSEyU9QPE0vBDUHD2ZPu27LS4TvRzkNzxIWlQ8urZHOjhZhrzHhoM8LsD8OyAJE7xfm9W8p3fOPSMSEr2tE707OEsYPTtiBT25wi08egEyvRsvIzxVn5u8zYQgPPP7mzsfQB28buOout4dzTsUsGo825wLPd5Lgrxtz0e9UozpOyqiGr0oDys98mo0vI8RnDxJdCi91Ac/vcXtIL2aeYw84Ax4vcHkoTvK8rQ7u6phPCgINDxmoe08BLUPPMDpkLtxB4C9z/VAPdDk6zxv6yM9Z9edPe0yfLvmpIC8vsY9vVt/eTxKYUs96DpSPW/+gL1ARs68NxZsvHcLkDzZEsa8gRQ0PQeji7zhVAE86GeDOfoOnrsxjl68sXp/uyoYqrv2PCm8pZYRvefeQTzfrrS7+IkcO4b/87xZLZy81aWQPJd3BDyHBms873QSPcb8kjylnQi9kiPwvBtLfTyNE3q7kn1NPNYQPjujbs88ODHEvJpfOL184m49ZM4eupJSqb3LrI08jUArPBLVIL32Tfm7OlSXvJE30bx+6226JpiXvMCu8Tvgm9c85CPlvL+BmrwkBiy9fwy5PHDRzzyRRLu79oEhPSP4PT3I3Eu91z8jvaaLrztasRk8xe0gvT42WD1KXNy7LXqCO2vHzDzqiMm8zx0DPQF+W7ulYum7dAOVPBi6bTqYOrK8EqhvPU9s0jzGx2a8/HjHO+vLzTuYSlM8mzn+PIo+Iz3N51I8e/zCvFlDMLzsUb88cQeAPI4nWz1lME29cL7yuzcwwLzdMCq7JpcTvMn+GjtRW308zfy3vFiipzvPF5C8JfPOPGOf5btikfe8PaJhvB5WXDyQnu673x7RPC0hKb1fsDq9qqgPveUyL73H1VS89UiPOxjuFb0MyZW8rpLLvHXP7Ly0t6a8OEUlvY5bAz1VrYm8EknQPAeDb71ZfG08EVEjvOlUJrtA8AU9PDvHPOpCzbvgH1W8qnraO4opPj0kDJ+8I/FGvRDaD71kxyc9HP4LPa8pprxxBBw9wfAHPYwK+7zu4yo7Ifa1O+Eh3bxXjsa8rbgFPT1JNb1uw+E8ij2fuzhYgr0UvVS8dhIHvN4kRLv6noE8xSdivDQ1rznxXMY63RbWPPFWU7y0ywc8wclJvIkvMT0SL6k8hiC/PIowNb01T4O8KhgqvRfNyjtFSl47/5yePCPxRjrxR2G8MARuvTOJ7zs+b2q8w7D5vGPahDyDA1887kxQvWfkhzzrZBw9H6nCPBTkkj0Mw6K7fgs1PCsfoT0o4/28mL9eu7pOUbyghZc8ppCePIGROrxzAhE8yQUSvT89T7sS2xO9l12wu4Ygv7xaILK8fW7nOigWIrsV5Za751OiPNODQbzHAoY76VsdvQajtjwV8gC9JwG9PGAmSrzWED69fXvRvMb8EryBFbi8Mf12OnJkPzz2Z009HAWDvDQU5LuSXg89H+yHvHUEmTwM14O8mmWrvB3eRLwU5JK8t8ccvcTTTD3AikQ8c+T8OopRALxTirY80P6/PAKG1jzgTAY9W5jJvDQuODyG+Hy8Br0KvTVCmb2dfBg7BKglPdqKXTyGMxw92RLGu3f/KT35hK08gjAQPdoHZD38gMI8ce2ru1icND25r1A9H8d8u4YSUTwumcA8+366vNkLzzydR+w8RWSyO62RR71iskK9JBMWPSciCLzUFKm8OUycvPSyYzx23l491BSpO552pTxFAQC9166PPHLAersvIi09se0svLGNXDsEvIa8FsXPO9Ly2TxW5Zc8T2zSPN09lLyFOY+8buQsvayqlz1Dt+47dM7oPFt1y7tzx/E8IeLUPGfQpj2yryu88YIAPbOwr7sBpp283TchPc33c7uWVDG9JNl6PaJgYTxy5zi9l0NcPGu64jxTirY7lCxvvAGSvDwJhvu8xHwAvPiKoLx+BcK7pXy9PONPkrtVhss6kj3EvNIgj7y1xZQ8Rz74O49PHb02ShQ9xNg7vepwAjwjC5u6+3lLvMPfsrwJoE+9/Yc5vcPfsj2/wU69W7KdvMv5K7154GY8/2h2ve9bwrx67gG8ZK3TvCQZCT1GeJO6+ndDu/iXij30RHq9R4YBvZCOIjxALPo8NEgMPXwkBT0YZKU8kzjVPDRkkzs3yHE86i5svS8jMbtgEuk8A7SLPXXqxLsjC5u7IfY1PTIgyrxavgM9f8MtPE6Zg7xVnxu94DmpPOo14zwgCZO73kWPvA== + index: 1 + object: embedding + model: voyage-3.5 + object: list + usage: + total_tokens: 0 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_embeddings/TestVoyageAI.test_embed_error.yaml b/tests/cassettes/test_embeddings/TestVoyageAI.test_embed_error.yaml new file mode 100644 index 0000000000..8297216130 --- /dev/null +++ b/tests/cassettes/test_embeddings/TestVoyageAI.test_embed_error.yaml @@ -0,0 +1,32 @@ +interactions: +- request: + headers: + content-type: + - application/json + method: post + parsed_body: + encoding_format: base64 + input: + - Hello, world! + input_type: query + model: nonexistent + output_dimension: null + output_dtype: null + truncation: false + uri: https://api.voyageai.com/v1/embeddings + response: + headers: + alt-svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content-length: + - '333' + content-type: + - application/json + parsed_body: + detail: Model nonexistent is not supported. Supported models are ['g2-20250421-0156pm-voyage-2-series-preloading', 'voyage-large-2-instruct', + 'voyage-law-2', 'voyage-code-2', 'voyage-02', 'voyage-2', 'voyage-01', 'voyage-lite-01', 'voyage-lite-01-instruct', + 'voyage-lite-02-instruct', 'voyage-multilingual-2', 'voyage-large-2']. + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/cassettes/test_embeddings/TestVoyageAI.test_query.yaml b/tests/cassettes/test_embeddings/TestVoyageAI.test_query.yaml new file mode 100644 index 0000000000..6f8a80a620 --- /dev/null +++ b/tests/cassettes/test_embeddings/TestVoyageAI.test_query.yaml @@ -0,0 +1,37 @@ +interactions: +- request: + headers: + content-type: + - application/json + method: post + parsed_body: + encoding_format: base64 + input: + - Hello, world! + input_type: query + model: voyage-3.5 + output_dimension: null + output_dtype: null + truncation: false + uri: https://api.voyageai.com/v1/embeddings + response: + headers: + alt-svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content-length: + - '5586' + content-type: + - application/json + parsed_body: + data: + - embedding: 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 + index: 0 + object: embedding + model: voyage-3.5 + object: list + usage: + total_tokens: 3 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_embeddings/TestVoyageAI.test_query_voyage_4.yaml b/tests/cassettes/test_embeddings/TestVoyageAI.test_query_voyage_4.yaml new file mode 100644 index 0000000000..17c43d1caa --- /dev/null +++ b/tests/cassettes/test_embeddings/TestVoyageAI.test_query_voyage_4.yaml @@ -0,0 +1,37 @@ +interactions: +- request: + headers: + content-type: + - application/json + method: post + parsed_body: + encoding_format: base64 + input: + - Hello, world! + input_type: query + model: voyage-4 + output_dimension: null + output_dtype: null + truncation: false + uri: https://api.voyageai.com/v1/embeddings + response: + headers: + alt-svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content-length: + - '5584' + content-type: + - application/json + parsed_body: + data: + - embedding: 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 + index: 0 + object: embedding + model: voyage-4 + object: list + usage: + total_tokens: 3 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_embeddings/TestVoyageAI.test_query_with_truncate.yaml b/tests/cassettes/test_embeddings/TestVoyageAI.test_query_with_truncate.yaml new file mode 100644 index 0000000000..ea850d4570 --- /dev/null +++ b/tests/cassettes/test_embeddings/TestVoyageAI.test_query_with_truncate.yaml @@ -0,0 +1,37 @@ +interactions: +- request: + headers: + content-type: + - application/json + method: post + parsed_body: + encoding_format: base64 + input: + - Hello, world! + input_type: query + model: voyage-3.5 + output_dimension: null + output_dtype: null + truncation: true + uri: https://api.voyageai.com/v1/embeddings + response: + headers: + alt-svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content-length: + - '5586' + content-type: + - application/json + parsed_body: + data: + - embedding: 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 + index: 0 + object: embedding + model: voyage-3.5 + object: list + usage: + total_tokens: 3 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_embeddings/TestVoyageAI.test_query_with_voyageai_input_type.yaml b/tests/cassettes/test_embeddings/TestVoyageAI.test_query_with_voyageai_input_type.yaml new file mode 100644 index 0000000000..d754ec49f1 --- /dev/null +++ b/tests/cassettes/test_embeddings/TestVoyageAI.test_query_with_voyageai_input_type.yaml @@ -0,0 +1,37 @@ +interactions: +- request: + headers: + content-type: + - application/json + method: post + parsed_body: + encoding_format: base64 + input: + - Hello, world! + input_type: null + model: voyage-3.5 + output_dimension: null + output_dtype: null + truncation: false + uri: https://api.voyageai.com/v1/embeddings + response: + headers: + alt-svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + content-length: + - '5586' + content-type: + - application/json + parsed_body: + data: + - embedding: LGqyvKvVET2BNay81bEcPWvHJj1WbIW8gV7tvBatI72WZ4y86x+iPFYKmD1Wu449q9URvStXTrwBt+i8Fpq/vIFx0byrc6Q91TzLPKzrbj2W8ro8KwjFPCsbKb3Vi9S81YvUPFbRa70r3wM9VkY9veuBD70BaN+4a4sBPKuvSb2BXm08q2DAvEGcEr0rLg28gdM+PFczWTvrMoa8rBG3uhZLtjzrgQ+9QU0JPYFxUTxrFjC9QDoluisuDb3rMoY9wTAzPBZLtrsrROq8AcrMPCvfAz0rGym9a9oKPQCOJ71XM9k8gOYivYFebTys6+48a9qKPIDmIr2rJJu7aymUvNbEgD3B9A28wM7FvWsWsLwrV848QOsbPYDmIj2sEbe8FsCHPNYp57xWgmK9a4sBvGtlubuAlxm9q2BAPSvfA73r0Bg9Fg8RvQBSAj3AkiA9q5xlPKv+Uryrhoi919rdudZ48DtB2Dc7K32WvRZLtjsWrSM9AAZyvav+UrmBD+S8K6ZXvCtXzr3WePC8qyQbvSvMnz1B2De9VoLivFaCYryrr8m8LGqyvJZnDLxW0eu8q2DAvFYKGD3rDD696zIGvQAGcjwrzJ88AXvDPKtN3LzrDD66wX88PSsujT2A5qK8K6bXOmt4Hb0rLg281ilnPSzifL1rKRQ9AcrMu5ajsb0AVfu8QCdBPCsIRTyr1RE7LJNzPICt9jzWnjg8gV5tvYHA2jzVi1S9lgUfvQFoX7wrCEW91sd5PCsIRbyrhgi9gQ9kvVZZobwBt+i81ilnvKuc5TxBiS48VzPZPIHTvjtXM1k91hOKvdU8S71ri4G8AWjfvAGhizzWYpO61u1BvCtE6ryrr0k9QOubvNaeOL0Be0O9q2DAvFZZIbmWZ4w8FvysPKtgQD3WYhM9VgoYvaskm7srV8681innOyu5Oz2rTdy7VvezvAHdsLyBSBA9a9oKPAFoX7ys626819pdPavVEb3AQxc9Fpo/vRatI70ALDq91bEcPWvHJj1WguK8LJPzPAAGcrwrROq81YtUPZYYg72B0z48gTUsO8DOxbuArXa9Ad0wvdZiEz1WguI9VvczuQGhi7vVi9S6rOvuuyvMH72BcVE9VpXGu9WxHD0s4ny81innvAAsOr1ri4E8a9oKPZYYgzzWnrg7K0Tqu+syhrtWChg9AAZyPYD8f72BcVG8a2W5PKv+0jwrfRY8q4aIvCyT87uA5iK869AYveu9NLwrubs8gTUsPAA/HjzAkqA8q8ItvYCt9rzWKee7rOvuvCvMH7srCEW96720u9bH+TxW0Ws8K98DO+u9tDwW/Cy91k+vu9ZPr7wBaF89K30WvdZikzyB+Ya8VvczPICXmTtV5E+8lvI6PGspFL0AUgI9FsAHPQFoX7tW0es7ACy6vAGhC7ysEbe7VvczvADwlDwrubu71mITvSumVz2BD2Q8q9URvQFo37wAjqc8lhgDPavVETuA/P87a8emPEHYtzyrwi09APCUPCsujb2WozG9q6/JPID8fz2rTdy8QYmuvID8f7zWxAC9QCdBPauvyTyWtpU8AaGLvGvairzVPMu7gfmGPYCXmbuBcVE9q4YIvMF/vDyrhgg8a4sBu+tuqzxrxya8VlkhPQF7wzyBIsg7aykUvIEiSLzWnji8VzNZvFaoKrzW7cG8Vka9PGuLAT3Vi1S9wEOXO6zr7ryWZ4y8LGqyvGvHprtW97M8AWjfPBVeGryrcyQ9VrsOPFaCYryrTVw9llQovYFxUbvrDL67axYwPYFe7ToBoQs8KwhFOlb3szwAPx48VgoYvYH5Bj3BpQS9VpVGvQA/Hj1AJ0G9gUiQPRaavzqWBZ88AFX7uxb8rDxXM9m7gJcZPdbEgLwBe0O8q69JvQFo37xrFjA8Fpq/OwA/HjxWbAW7AXtDvdU8S70AVXs9q4aIvZZUKL0r9WC8ARnWOUHYt7zAQxc8gK32PCv14Dys6269gTWsvFZv/jxr2oo8a8emvAAGcrwABnI6aykUvVXkz7xAJ0E8Ad0wPetuKz0APx49AaGLPGsWMLsBt2i7q8ItvYD8fz0ALDo7wfQNvdZPr7wWraO8Vlkhu4H5hjyrhgg91p44uwHKTD1rFjA8gIS1u9btQTwr9eC81bGcvAG36LwBGVa9q2BAvIH5Bj2BXu27gXFRvaw6+LxWbAU9VeRPvRbABz3VPEs8AcrMPAEZVrsr9eA7wEOXu4CXmTwBt2g8q9URvVbR67zAkqC8QYmuPFYKmLxBTQm96700PZZBxDuBIsi8wX88vVXkT72WQUQ9q69JvQBSAj2rhog86700vZa2FbxrZbk8Vm9+PQG3aLxXM9k5a2U5vUFNCTzVPMu7gdO+u+syhr0rROq8q03cPNaeOL1WgmK919rdvNYAprurwi29rOvuvMCSID2rhgi9lraVvICtdjzWYhO9rDr4ulZvfjyr1RE9APAUvdZPr7wrfZa8K8wfvYDmoryrTdy8FvysPOtuqzzWePA8weEpvBaaPz2sEbe8AFX7ugHdMDtW0Ws9lkHEPAF7Qz1reB28VlmhPauGCD3rMoY8rBE3uiv14LxWgmI8wEOXuyt9Fr2WBZ88a9oKO6tN3DsrfRa9AXtDPJYYg7xWbIU71mITPdZiE7xA65u8lgWfvCtXzrxB2Lc8q/7SPNZ4cL3WTy+9VvczutZiE7xBnBK91sQAPEGckj1WlcY4Ky4NPIEiyDoBGVa9Fks2PZajsTyBcVE9gK32PIEP5Dyr1RG9Ad2wOkGckrusOni8VlkhPRYPkb1rZTm8a3gdvaskG71rKRS9AaGLPMCSIDyrnGU8VpXGu4D8fzxV5M+8q/7SOauGiL2s6+47Ad0wO1bR67zBMLM7Qdg3PFcz2bvAzsW7gQ9kvcF/PDys62681gAmPEGJrjyAlxk9gQ/kO+vQGDzrgQ88VqgqOwF7wzzWACa9ViB1OgHdsDwBoYs8VzNZPauc5bssarI619pdvZYYA73B9I08lkHEvCtXzjyrYEA8Fpo/PQCOp7qWVCi9wfSNPNZPLz3rvTS9ARnWPIDmojzWKec8q6/JO9fa3byBIki8QOsbvazrbr3B9I28Fks2PGvaCj3Wnri8a2W5O9faXTxrtMK8gTWsPIDmIjwsk/M81sd5PGtlObxB2Lc7AbdoPKv+UjpWChi9q9WRPFcz2Turwi281nhwvSvfg71Wlca6VzPZvNYp5zzWKec8VoLiPBatIzzWT6+8axawvFYKmLzrDD48VzNZu1bR6ztWRr08K7m7PCvMH7xWlUY8K1fOPWvair1WIHU7a2U5PJYYAz0BoQs8a3idvSzi/DxBia68ViD1vFaoKjyA/H+7Fg8RvKvVET1W0Ws8FvwsPQG36DqrJJu8KxupvKuvybwrple6VvezvOsMvrxWRr28gfmGvVYKGL3WKWc8rBE3vesfIjwB3bC8Vvczulcz2byB+QY9gOYivWt4HTwBt2i9AWhfPUHYNz0A8JQ9a4uBPRaaP7yrJJs6Ad0wvVcz2ToABnI8gXHRPOvQmL0WrSO9K/VgvBVemjwBoYu8ARlWPZYFnzxWb/48Fq2jvCsujbwAPx48gfkGPJYFH7wrRGo6gPx/PBbAB7yrc6S8Vm/+O1ZsBb2BXu28gK32PAHKTLtr2oo71gAmPVZZIT1AJ0E8a9oKvQBSAjwABnK8waWEO6w6eLzVi9Q8Fq2julYgdbwrG6k8K7k7Paskm73WACa91sSAPAFo37zWKec8AWhfvAAsurwBe0O8gSJIvJa2FT1riwE8KxspvIFebb3Wnrg81njwPKuvST2WVCi9VzPZPNU8yzzVPMu81mITvatN3LwrV847FV4avUAnwTyB+QY9rBE3PKvVET0rple8lqMxPKwRNzyBNSy9AcrMuoHTvjyBwNq7gQ/ku4EiSD0rubs7q5xlu4HA2jyrcyQ9gUgQPaucZT2WZ4y8axYwPCvfA7yB+YY81p64PCv1YD1V5M88weGpPKv+0rzrbqu8FV6aOwHKTDvWxIA7VtHrvNYpZ7yWZ4y8AFV7PMF/PDwABnI7K1fOvIEiSLwrzB89gTWsPCzifL1rtMK7aymUvNYAJr1rZTm9VzPZPABSgr3WYpO7K1fOvIE1LL3VsRy7QZwSvWsplDwAPx69waUEPMCSIL3WAKa6LGqyvKskm7zWxAA9Ad2wONU8yzvVi9S8FV6avNYTCj3X2t071gAmvVYg9TtWu449q8ItPWuLAbwBysw81bEcPZZBRL2rYEA8QZwSvawRt7yBNSy9q/5Su6vCrbyA5iI91hOKO6tNXL1BnJI86700vAHdMLvrMga9wJIgPCsuDTwrple8lrYVPRaaPzzWxAA9gV7tvFYg9Twrplc9Fq0ju9YpZ72Al5k81p44vQFo37wsk/M8gPz/u6uGiLurr8m7AFICvNfa3bwB3TC6wEMXPIFx0bxXM9k8AWjfvACOJ7xriwE9AbfouxYPkT0WwIc8gfkGvZZnDD3VsRy81sQAvNYTCj3rMoa61hMKPSsuDb0Be8O7VqiquytEarxWlUY81bGcPKuGiLwBysy8gfmGO2tlOTzB4Sm7weEpPEFNib3Vi1S71k+vvMHhKT1W0eu8lmcMPCsuDb3WEwq9q03cvIH5Bj3Wnrg81TxLO5a2lbyBwFo9QOubvIHTvjoW/Kw8LJPzvNZPrzsrzB+9lkHEvIH5hrwAPx69AI6nPIFebT2WGAM9ViD1POtuKzzrgQ89lkHEPKvVkTxrKZQ9K7m7vMGlBDwWSza71sQAvdU8y71W9zM8q/7SO8DOxTxrtMI8gfkGugCOJz3B9A08KxupPEHYNz0WraM5q69JO5YYgz3BMLM8AFX7O5a2lTwB3bA9Fks2u5ajMbtV5E88AFV7PKwRN71Wb/68K1fOO8GlBL1WlcY8wX88vICXGTvAQxc91mKTu2vHJrzBpYQ71TzLPAAGcj2r/tI8AD8ePNbEAL3VPMu7VpXGuwFoX7xri4G7gK12u1a7DjurYMC56zKGvID8fzxBiS48AWhfPatgwLwrGyk9VeTPPCumVz1WIPU7AD8ePOsMvjwAjic8AD+ePGsplLtB2De9VoLiPVYKmDsAPx67K98DvRZLNjyBcdE8VeTPvAA/njyBIsi8KxupPFZGvTuBXu08q3MkPYE1rDtV5M88lqOxvNU8y7tr2oq7QU0JvKzr7rysETc9K32WuwAsOjyBIsg7q3OkPIHA2jnX2l291sf5vCt9lj2B0z68q5xlvSyTc71WlUY7q9URvSumV7yrc6S7APAUvQHdMLyAlxm9QYkuPWu0Qj0sajK9LGoyvSt9Fr0WwAc91YvUPCtEaj2rYMC6a2W5OwDwlLtWb368VpVGvaskm7wBykw9QOsbPauvybwrG6m8wX88PAHKTLwBe8M7q01cuxZLtrwWmj+9VgoYPSyT87srfZY8K8wfPA== + index: 0 + object: embedding + model: voyage-3.5 + object: list + usage: + total_tokens: 4 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/conftest.py b/tests/conftest.py index 1edf85c6f9..d12b3d6a80 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -420,6 +420,11 @@ def co_api_key() -> str: return os.getenv('CO_API_KEY', 'mock-api-key') +@pytest.fixture(scope='session') +def voyage_api_key() -> str: + return os.getenv('VOYAGE_API_KEY', 'mock-api-key') + + @pytest.fixture(scope='session') def mistral_api_key() -> str: return os.getenv('MISTRAL_API_KEY', 'mock-api-key') diff --git a/tests/providers/test_voyageai.py b/tests/providers/test_voyageai.py new file mode 100644 index 0000000000..943c5972d0 --- /dev/null +++ b/tests/providers/test_voyageai.py @@ -0,0 +1,34 @@ +from __future__ import annotations as _annotations + +import pytest + +from pydantic_ai.exceptions import UserError + +from ..conftest import TestEnv, try_import + +with try_import() as imports_successful: + from voyageai.client_async import AsyncClient + + from pydantic_ai.providers.voyageai import VoyageAIProvider + + +pytestmark = pytest.mark.skipif(not imports_successful(), reason='voyageai not installed') + + +def test_voyageai_provider() -> None: + provider = VoyageAIProvider(api_key='api-key') + assert provider.name == 'voyageai' + assert provider.base_url == 'https://api.voyageai.com/v1' + assert isinstance(provider.client, AsyncClient) + + +def test_voyageai_provider_need_api_key(env: TestEnv) -> None: + env.remove('VOYAGE_API_KEY') + with pytest.raises(UserError, match='VOYAGE_API_KEY'): + VoyageAIProvider() + + +def test_voyageai_provider_pass_voyageai_client() -> None: + voyageai_client = AsyncClient(api_key='test-api-key') + provider = VoyageAIProvider(voyageai_client=voyageai_client) + assert provider.client == voyageai_client diff --git a/tests/test_embeddings.py b/tests/test_embeddings.py index bc0e1e80b3..f7d495ef33 100644 --- a/tests/test_embeddings.py +++ b/tests/test_embeddings.py @@ -18,7 +18,7 @@ TestEmbeddingModel, infer_embedding_model, ) -from pydantic_ai.exceptions import ModelHTTPError, UserError +from pydantic_ai.exceptions import ModelAPIError, ModelHTTPError, UserError from pydantic_ai.models.instrumented import InstrumentationSettings from pydantic_ai.usage import RequestUsage @@ -37,7 +37,11 @@ from pydantic_ai.providers.openai import OpenAIProvider with try_import() as cohere_imports_successful: - from pydantic_ai.embeddings.cohere import CohereEmbeddingModel, LatestCohereEmbeddingModelNames + from pydantic_ai.embeddings.cohere import ( + CohereEmbeddingModel, + CohereEmbeddingSettings, + LatestCohereEmbeddingModelNames, + ) from pydantic_ai.providers.cohere import CohereProvider with try_import() as google_imports_successful: @@ -49,6 +53,14 @@ ) from pydantic_ai.providers.google import GoogleProvider +with try_import() as voyageai_imports_successful: + from pydantic_ai.embeddings.voyageai import ( + LatestVoyageAIEmbeddingModelNames, + VoyageAIEmbeddingModel, + VoyageAIEmbeddingSettings, + ) + from pydantic_ai.providers.voyageai import VoyageAIProvider + with try_import() as sentence_transformers_imports_successful: from sentence_transformers import SentenceTransformer @@ -326,6 +338,147 @@ async def test_embed_error(self, co_api_key: str): with pytest.raises(ModelHTTPError, match='not found,'): await embedder.embed_query('Hello, world!') + async def test_query_with_cohere_truncate(self, co_api_key: str): + model = CohereEmbeddingModel('embed-v4.0', provider=CohereProvider(api_key=co_api_key)) + embedder = Embedder(model) + settings: CohereEmbeddingSettings = {'cohere_truncate': 'END'} + result = await embedder.embed_query('Hello, world!', settings=settings) + assert result == snapshot( + EmbeddingResult( + embeddings=IsList(IsList(IsFloat(), length=1536), length=1), + inputs=['Hello, world!'], + input_type='query', + usage=RequestUsage(input_tokens=4), + model_name='embed-v4.0', + timestamp=IsDatetime(), + provider_name='cohere', + provider_response_id=IsStr(), + ) + ) + + async def test_query_with_truncate(self, co_api_key: str): + model = CohereEmbeddingModel('embed-v4.0', provider=CohereProvider(api_key=co_api_key)) + embedder = Embedder(model) + result = await embedder.embed_query('Hello, world!', settings={'truncate': True}) + assert result == snapshot( + EmbeddingResult( + embeddings=IsList(IsList(IsFloat(), length=1536), length=1), + inputs=['Hello, world!'], + input_type='query', + usage=RequestUsage(input_tokens=4), + model_name='embed-v4.0', + timestamp=IsDatetime(), + provider_name='cohere', + provider_response_id=IsStr(), + ) + ) + + +@pytest.mark.skipif(not voyageai_imports_successful(), reason='VoyageAI not installed') +@pytest.mark.vcr +class TestVoyageAI: + async def test_infer_model(self, voyage_api_key: str): + with patch.dict(os.environ, {'VOYAGE_API_KEY': voyage_api_key}): + model = infer_embedding_model('voyageai:voyage-3.5') + assert isinstance(model, VoyageAIEmbeddingModel) + assert model.model_name == 'voyage-3.5' + assert model.system == 'voyageai' + assert model.base_url == 'https://api.voyageai.com/v1' + assert isinstance(model._provider, VoyageAIProvider) # type: ignore[reportAttributeAccess] + + async def test_query(self, voyage_api_key: str): + model = VoyageAIEmbeddingModel('voyage-3.5', provider=VoyageAIProvider(api_key=voyage_api_key)) + embedder = Embedder(model) + result = await embedder.embed_query('Hello, world!') + assert result == snapshot( + EmbeddingResult( + embeddings=IsList(IsList(IsFloat(), length=1024), length=1), + inputs=['Hello, world!'], + input_type='query', + usage=RequestUsage(input_tokens=3), + model_name='voyage-3.5', + timestamp=IsDatetime(), + provider_name='voyageai', + ) + ) + + async def test_query_voyage_4(self, voyage_api_key: str): + model = VoyageAIEmbeddingModel('voyage-4', provider=VoyageAIProvider(api_key=voyage_api_key)) + embedder = Embedder(model) + result = await embedder.embed_query('Hello, world!') + assert result == snapshot( + EmbeddingResult( + embeddings=IsList(IsList(IsFloat(), length=1024), length=1), + inputs=['Hello, world!'], + input_type='query', + usage=RequestUsage(input_tokens=3), + model_name='voyage-4', + timestamp=IsDatetime(), + provider_name='voyageai', + ) + ) + + async def test_documents(self, voyage_api_key: str): + model = VoyageAIEmbeddingModel('voyage-3.5', provider=VoyageAIProvider(api_key=voyage_api_key)) + embedder = Embedder(model) + result = await embedder.embed_documents(['hello', 'world']) + assert result == snapshot( + EmbeddingResult( + embeddings=IsList(IsList(IsFloat(), length=1024), length=2), + inputs=['hello', 'world'], + input_type='document', + usage=RequestUsage(), + model_name='voyage-3.5', + timestamp=IsDatetime(), + provider_name='voyageai', + ) + ) + + async def test_max_input_tokens(self, voyage_api_key: str): + model = VoyageAIEmbeddingModel('voyage-3.5', provider=VoyageAIProvider(api_key=voyage_api_key)) + embedder = Embedder(model) + max_input_tokens = await embedder.max_input_tokens() + assert max_input_tokens == snapshot(32000) + + async def test_embed_error(self, voyage_api_key: str): + model = VoyageAIEmbeddingModel('nonexistent', provider=VoyageAIProvider(api_key=voyage_api_key)) + embedder = Embedder(model) + with pytest.raises(ModelAPIError, match='not supported'): + await embedder.embed_query('Hello, world!') + + async def test_query_with_truncate(self, voyage_api_key: str): + model = VoyageAIEmbeddingModel('voyage-3.5', provider=VoyageAIProvider(api_key=voyage_api_key)) + embedder = Embedder(model) + result = await embedder.embed_query('Hello, world!', settings={'truncate': True}) + assert result == snapshot( + EmbeddingResult( + embeddings=IsList(IsList(IsFloat(), length=1024), length=1), + inputs=['Hello, world!'], + input_type='query', + usage=RequestUsage(input_tokens=3), + model_name='voyage-3.5', + timestamp=IsDatetime(), + provider_name='voyageai', + ) + ) + + async def test_query_with_voyageai_input_type(self, voyage_api_key: str): + model = VoyageAIEmbeddingModel('voyage-3.5', provider=VoyageAIProvider(api_key=voyage_api_key)) + embedder = Embedder(model) + settings: VoyageAIEmbeddingSettings = {'voyageai_input_type': 'none'} + result = await embedder.embed_query('Hello, world!', settings=settings) + assert result == snapshot( + EmbeddingResult( + embeddings=IsList(IsList(IsFloat(), length=1024), length=1), + inputs=['Hello, world!'], + input_type='query', + usage=RequestUsage(input_tokens=4), + model_name='voyage-3.5', + timestamp=IsDatetime(), + provider_name='voyageai', + ) + ) + @pytest.mark.skipif(not google_imports_successful(), reason='Google not installed') @pytest.mark.vcr @@ -563,7 +716,10 @@ async def test_count_tokens(self, embedder: Embedder): @pytest.mark.skipif( - not openai_imports_successful() or not cohere_imports_successful() or not google_imports_successful(), + not openai_imports_successful() + or not cohere_imports_successful() + or not google_imports_successful() + or not voyageai_imports_successful(), reason='some embedding package was not installed', ) def test_known_embedding_model_names(): # pragma: lax no cover @@ -579,8 +735,9 @@ def get_model_names(model_name_type: Any) -> Iterator[str]: cohere_names = [f'cohere:{n}' for n in get_model_names(LatestCohereEmbeddingModelNames)] google_gla_names = [f'google-gla:{n}' for n in get_model_names(LatestGoogleGLAEmbeddingModelNames)] google_vertex_names = [f'google-vertex:{n}' for n in get_model_names(LatestGoogleVertexEmbeddingModelNames)] + voyageai_names = [f'voyageai:{n}' for n in get_model_names(LatestVoyageAIEmbeddingModelNames)] - generated_names = sorted(openai_names + cohere_names + google_gla_names + google_vertex_names) + generated_names = sorted(openai_names + cohere_names + google_gla_names + google_vertex_names + voyageai_names) known_model_names = sorted(get_args(KnownEmbeddingModelName.__value__)) if generated_names != known_model_names: diff --git a/tests/test_examples.py b/tests/test_examples.py index e8fd606e3d..1bbb653bbe 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -186,6 +186,7 @@ def print(self, *args: Any, **kwargs: Any) -> None: env.set('ALIBABA_API_KEY', 'testing') env.set('SAMBANOVA_API_KEY', 'testing') env.set('PYDANTIC_AI_GATEWAY_API_KEY', 'testing') + env.set('VOYAGE_API_KEY', 'testing') prefix_settings = example.prefix_settings() opt_test = prefix_settings.get('test', '') @@ -1017,6 +1018,7 @@ def mock_infer_embedding_model(model: EmbeddingModel | str) -> EmbeddingModel: 'text-embedding-3-small': 1536, 'text-embedding-3-large': 3072, 'embed-v4.0': 1024, + 'voyage-3.5': 1024, 'all-MiniLM-L6-v2': 384, 'gemini-embedding-001': 3072, } diff --git a/uv.lock b/uv.lock index be63eab7de..2d5ab4fa4a 100644 --- a/uv.lock +++ b/uv.lock @@ -187,6 +187,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9f/4d/d22668674122c08f4d56972297c51a624e64b3ed1efaa40187607a7cb66e/aiohttp-3.13.2-cp314-cp314t-win_amd64.whl", hash = "sha256:ff0a7b0a82a7ab905cbda74006318d1b12e37c797eb1b0d4eb3e316cf47f658f", size = 498093, upload-time = "2025-10-28T20:58:52.782Z" }, ] +[[package]] +name = "aiolimiter" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/23/b52debf471f7a1e42e362d959a3982bdcb4fe13a5d46e63d28868807a79c/aiolimiter-1.2.1.tar.gz", hash = "sha256:e02a37ea1a855d9e832252a105420ad4d15011505512a1a1d814647451b5cca9", size = 7185, upload-time = "2024-12-08T15:31:51.496Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/ba/df6e8e1045aebc4778d19b8a3a9bc1808adb1619ba94ca354d9ba17d86c3/aiolimiter-1.2.1-py3-none-any.whl", hash = "sha256:d3f249e9059a20badcb56b61601a83556133655c11d1eb3dd3e04ff069e5f3c7", size = 6711, upload-time = "2024-12-08T15:31:49.874Z" }, +] + [[package]] name = "aiosignal" version = "1.4.0" @@ -2049,6 +2058,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/28/a3/2ad0a0a69662fd4cf556ab8074f0de978ee9b56bff6ddb4e656df4aa9e8e/fastrlock-0.8.3-cp313-cp313-win_amd64.whl", hash = "sha256:8d1d6a28291b4ace2a66bd7b49a9ed9c762467617febdd9ab356b867ed901af8", size = 30472, upload-time = "2024-12-17T11:02:37.983Z" }, ] +[[package]] +name = "ffmpeg-python" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "future" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dd/5e/d5f9105d59c1325759d838af4e973695081fbbc97182baf73afc78dec266/ffmpeg-python-0.2.0.tar.gz", hash = "sha256:65225db34627c578ef0e11c8b1eb528bb35e024752f6f10b78c011f6f64c4127", size = 21543, upload-time = "2019-07-06T00:19:08.989Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/0c/56be52741f75bad4dc6555991fabd2e07b432d333da82c11ad701123888a/ffmpeg_python-0.2.0-py3-none-any.whl", hash = "sha256:ac441a0404e053f8b6a1113a77c0f452f1cfc62f6344a769475ffdc0f56c23c5", size = 25024, upload-time = "2019-07-06T00:19:07.215Z" }, +] + [[package]] name = "ffmpy" version = "1.0.0" @@ -2231,6 +2252,15 @@ http = [ { name = "aiohttp" }, ] +[[package]] +name = "future" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/b2/4140c69c6a66432916b26158687e821ba631a4c9273c474343badf84d3ba/future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05", size = 1228490, upload-time = "2024-02-21T11:52:38.461Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216", size = 491326, upload-time = "2024-02-21T11:52:35.956Z" }, +] + [[package]] name = "genai-prices" version = "0.0.49" @@ -2983,6 +3013,56 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, ] +[[package]] +name = "langchain-core" +version = "1.2.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonpatch" }, + { name = "langsmith" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "tenacity" }, + { name = "typing-extensions" }, + { name = "uuid-utils" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/0e/664d8d81b3493e09cbab72448d2f9d693d1fa5aa2bcc488602203a9b6da0/langchain_core-1.2.7.tar.gz", hash = "sha256:e1460639f96c352b4a41c375f25aeb8d16ffc1769499fb1c20503aad59305ced", size = 837039, upload-time = "2026-01-09T17:44:25.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/6f/34a9fba14d191a67f7e2ee3dbce3e9b86d2fa7310e2c7f2c713583481bd2/langchain_core-1.2.7-py3-none-any.whl", hash = "sha256:452f4fef7a3d883357b22600788d37e3d8854ef29da345b7ac7099f33c31828b", size = 490232, upload-time = "2026-01-09T17:44:24.236Z" }, +] + +[[package]] +name = "langchain-text-splitters" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/41/42/c178dcdc157b473330eb7cc30883ea69b8ec60078c7b85e2d521054c4831/langchain_text_splitters-1.1.0.tar.gz", hash = "sha256:75e58acb7585dc9508f3cd9d9809cb14751283226c2d6e21fb3a9ae57582ca22", size = 272230, upload-time = "2025-12-14T01:15:38.659Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/1a/a84ed1c046deecf271356b0179c1b9fba95bfdaa6f934e1849dee26fad7b/langchain_text_splitters-1.1.0-py3-none-any.whl", hash = "sha256:f00341fe883358786104a5f881375ac830a4dd40253ecd42b4c10536c6e4693f", size = 34182, upload-time = "2025-12-14T01:15:37.382Z" }, +] + +[[package]] +name = "langsmith" +version = "0.6.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx" }, + { name = "orjson", marker = "platform_python_implementation != 'PyPy'" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "requests" }, + { name = "requests-toolbelt" }, + { name = "uuid-utils" }, + { name = "zstandard" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/85/9c7933052a997da1b85bc5c774f3865e9b1da1c8d71541ea133178b13229/langsmith-0.6.4.tar.gz", hash = "sha256:36f7223a01c218079fbb17da5e536ebbaf5c1468c028abe070aa3ae59bc99ec8", size = 919964, upload-time = "2026-01-15T20:02:28.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/0f/09a6637a7ba777eb307b7c80852d9ee26438e2bdafbad6fcc849ff9d9192/langsmith-0.6.4-py3-none-any.whl", hash = "sha256:ac4835860160be371042c7adbba3cb267bcf8d96a5ea976c33a8a4acad6c5486", size = 283503, upload-time = "2026-01-15T20:02:26.662Z" }, +] + [[package]] name = "lark" version = "1.2.2" @@ -5951,6 +6031,9 @@ prefect = [ sentence-transformers = [ { name = "pydantic-ai-slim", extra = ["sentence-transformers"] }, ] +voyageai = [ + { name = "pydantic-ai-slim", extra = ["voyageai"] }, +] [package.dev-dependencies] dev = [ @@ -6011,8 +6094,9 @@ requires-dist = [ { name = "pydantic-ai-slim", extras = ["outlines-vllm-offline"], marker = "extra == 'outlines-vllm-offline'", editable = "pydantic_ai_slim" }, { name = "pydantic-ai-slim", extras = ["prefect"], marker = "extra == 'prefect'", editable = "pydantic_ai_slim" }, { name = "pydantic-ai-slim", extras = ["sentence-transformers"], marker = "extra == 'sentence-transformers'", editable = "pydantic_ai_slim" }, + { name = "pydantic-ai-slim", extras = ["voyageai"], marker = "extra == 'voyageai'", editable = "pydantic_ai_slim" }, ] -provides-extras = ["a2a", "dbos", "examples", "outlines-llamacpp", "outlines-mlxlm", "outlines-sglang", "outlines-transformers", "outlines-vllm-offline", "prefect", "sentence-transformers"] +provides-extras = ["a2a", "dbos", "examples", "outlines-llamacpp", "outlines-mlxlm", "outlines-sglang", "outlines-transformers", "outlines-vllm-offline", "prefect", "sentence-transformers", "voyageai"] [package.metadata.requires-dev] dev = [ @@ -6222,6 +6306,9 @@ vertexai = [ { name = "google-auth" }, { name = "requests" }, ] +voyageai = [ + { name = "voyageai" }, +] web = [ { name = "httpx" }, { name = "starlette" }, @@ -6284,8 +6371,9 @@ requires-dist = [ { name = "typing-inspection", specifier = ">=0.4.0" }, { name = "uvicorn", marker = "extra == 'web'", specifier = ">=0.38.0" }, { name = "vllm", marker = "(python_full_version < '3.12' and platform_machine != 'x86_64' and extra == 'outlines-vllm-offline') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'outlines-vllm-offline')", specifier = ">=0.11.0" }, + { name = "voyageai", marker = "extra == 'voyageai'", specifier = ">=0.3.2" }, ] -provides-extras = ["a2a", "ag-ui", "anthropic", "bedrock", "cli", "cohere", "dbos", "duckduckgo", "evals", "exa", "fastmcp", "google", "groq", "huggingface", "logfire", "mcp", "mistral", "openai", "openrouter", "outlines-llamacpp", "outlines-mlxlm", "outlines-sglang", "outlines-transformers", "outlines-vllm-offline", "prefect", "retries", "sentence-transformers", "tavily", "temporal", "ui", "vertexai", "web"] +provides-extras = ["a2a", "ag-ui", "anthropic", "bedrock", "cli", "cohere", "dbos", "duckduckgo", "evals", "exa", "fastmcp", "google", "groq", "huggingface", "logfire", "mcp", "mistral", "openai", "openrouter", "outlines-llamacpp", "outlines-mlxlm", "outlines-sglang", "outlines-transformers", "outlines-vllm-offline", "prefect", "retries", "sentence-transformers", "tavily", "temporal", "ui", "vertexai", "voyageai", "web"] [[package]] name = "pydantic-core" @@ -7051,6 +7139,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" }, ] +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, +] + [[package]] name = "rfc3339-validator" version = "0.1.4" @@ -8845,6 +8945,35 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6d/b9/4095b668ea3678bf6a0af005527f39de12fb026516fb3df17495a733b7f8/urllib3-2.6.2-py3-none-any.whl", hash = "sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd", size = 131182, upload-time = "2025-12-11T15:56:38.584Z" }, ] +[[package]] +name = "uuid-utils" +version = "0.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8a/17b11768dcb473d3a255c02ffdd94fbd1b345c906efea0a39124dcbaed52/uuid_utils-0.13.0.tar.gz", hash = "sha256:4c17df6427a9e23a4cd7fb9ee1efb53b8abb078660b9bdb2524ca8595022dfe1", size = 21921, upload-time = "2026-01-08T15:48:10.841Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/b8/d40848ca22781f206c60a1885fc737d2640392bd6b5792d455525accd89c/uuid_utils-0.13.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:83628283e977fb212e756bc055df8fdd2f9f589a2e539ba1abe755b8ce8df7a4", size = 602130, upload-time = "2026-01-08T15:47:34.877Z" }, + { url = "https://files.pythonhosted.org/packages/40/b9/00a944b8096632ea12638181f8e294abcde3e3b8b5e29b777f809896f6ae/uuid_utils-0.13.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c47638ed6334ab19d80f73664f153b04bbb04ab8ce4298d10da6a292d4d21c47", size = 304213, upload-time = "2026-01-08T15:47:36.807Z" }, + { url = "https://files.pythonhosted.org/packages/da/d7/07b36c33aef683b81c9afff3ec178d5eb39d325447a68c3c68a62e4abb32/uuid_utils-0.13.0-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:b276b538c57733ed406948584912da422a604313c71479654848b84b9e19c9b0", size = 340624, upload-time = "2026-01-08T15:47:38.821Z" }, + { url = "https://files.pythonhosted.org/packages/7d/55/fcff2fff02a27866cb1a6614c9df2b3ace721f0a0aab2b7b8f5a7d4e4221/uuid_utils-0.13.0-cp39-abi3-manylinux_2_24_armv7l.whl", hash = "sha256:bdaf2b77e34b199cf04cde28399495fd1ed951de214a4ece1f3919b2f945bb06", size = 346705, upload-time = "2026-01-08T15:47:40.397Z" }, + { url = "https://files.pythonhosted.org/packages/41/48/67438506c2bb8bee1b4b00d7c0b3ff866401b4790849bf591d654d4ea0bc/uuid_utils-0.13.0-cp39-abi3-manylinux_2_24_i686.whl", hash = "sha256:eb2f0baf81e82f9769a7684022dca8f3bf801ca1574a3e94df1876e9d6f9271e", size = 366023, upload-time = "2026-01-08T15:47:42.662Z" }, + { url = "https://files.pythonhosted.org/packages/8b/d7/2d91ce17f62fd764d593430de296b70843cc25229c772453f7261de9e6a8/uuid_utils-0.13.0-cp39-abi3-manylinux_2_24_ppc64le.whl", hash = "sha256:6be6c4d11275f5cc402a4fdba6c2b1ce45fd3d99bb78716cd1cc2cbf6802b2ce", size = 471149, upload-time = "2026-01-08T15:47:44.963Z" }, + { url = "https://files.pythonhosted.org/packages/2e/9a/aa0756186073ba84daf5704c150d41ede10eb3185d510e02532e2071550e/uuid_utils-0.13.0-cp39-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:77621cf6ceca7f42173a642a01c01c216f9eaec3b7b65d093d2d6a433ca0a83d", size = 342130, upload-time = "2026-01-08T15:47:46.331Z" }, + { url = "https://files.pythonhosted.org/packages/74/b4/3191789f4dc3bed59d79cec90559821756297a25d7dc34d1bf7781577a75/uuid_utils-0.13.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9a5a9eb06c2bb86dd876cd7b2fe927fc8543d14c90d971581db6ffda4a02526f", size = 524128, upload-time = "2026-01-08T15:47:47.628Z" }, + { url = "https://files.pythonhosted.org/packages/b2/30/29839210a8fff9fc219bfa7c8d8cd115324e92618cba0cda090d54d3d321/uuid_utils-0.13.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:775347c6110fb71360df17aac74132d8d47c1dbe71233ac98197fc872a791fd2", size = 615872, upload-time = "2026-01-08T15:47:50.61Z" }, + { url = "https://files.pythonhosted.org/packages/99/ed/15000c96a8bd8f5fd8efd622109bf52549ea0b366f8ce71c45580fa55878/uuid_utils-0.13.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf95f6370ad1a0910ee7b5ad5228fd19c4ae32fe3627389006adaf519408c41e", size = 581023, upload-time = "2026-01-08T15:47:52.776Z" }, + { url = "https://files.pythonhosted.org/packages/67/c8/3f809fa2dc2ca4bd331c792a3c7d3e45ae2b709d85847a12b8b27d1d5f19/uuid_utils-0.13.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5a88e23e0b2f4203fefe2ccbca5736ee06fcad10e61b5e7e39c8d7904bc13300", size = 546715, upload-time = "2026-01-08T15:47:54.415Z" }, + { url = "https://files.pythonhosted.org/packages/f5/80/4f7c7efd734d1494397c781bd3d421688e9c187ae836e3174625b1ddf8b0/uuid_utils-0.13.0-cp39-abi3-win32.whl", hash = "sha256:3e4f2cc54e6a99c0551158100ead528479ad2596847478cbad624977064ffce3", size = 177650, upload-time = "2026-01-08T15:47:55.679Z" }, + { url = "https://files.pythonhosted.org/packages/6c/94/d05ab68622e66ad787a241dfe5ccc649b3af09f30eae977b9ee8f7046aaa/uuid_utils-0.13.0-cp39-abi3-win_amd64.whl", hash = "sha256:046cb2756e1597b3de22d24851b769913e192135830486a0a70bf41327f0360c", size = 183211, upload-time = "2026-01-08T15:47:57.604Z" }, + { url = "https://files.pythonhosted.org/packages/69/37/674b3ce25cd715b831ea8ebbd828b74c40159f04c95d1bb963b2c876fe79/uuid_utils-0.13.0-cp39-abi3-win_arm64.whl", hash = "sha256:5447a680df6ef8a5a353976aaf4c97cc3a3a22b1ee13671c44227b921e3ae2a9", size = 183518, upload-time = "2026-01-08T15:47:59.148Z" }, + { url = "https://files.pythonhosted.org/packages/99/fa/1d92de9538463859228e68db679b766fd300770c9a2db849dcba0c0c5a57/uuid_utils-0.13.0-pp311-pypy311_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e5182e2d95f38e65f2e5bce90648ef56987443da13e145afcd747e584f9bc69c", size = 587641, upload-time = "2026-01-08T15:48:00.433Z" }, + { url = "https://files.pythonhosted.org/packages/ca/07/6bd9e6f5367e38c2ee7178ad882d2bd1b0d17c5393974b09ab027a215eba/uuid_utils-0.13.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e3909a8a1fbd79d7c8bdc874eeb83e23ccb7a7cb0aa821a49596cc96c0cce84b", size = 298273, upload-time = "2026-01-08T15:48:02.063Z" }, + { url = "https://files.pythonhosted.org/packages/dc/14/7061b868a8a6799c8df83768a23f313d4e22075069f01ee3c28fa82aa2c6/uuid_utils-0.13.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.whl", hash = "sha256:5dc4c9f749bd2511b8dcbf0891e658d7d86880022963db050722ad7b502b5e22", size = 333618, upload-time = "2026-01-08T15:48:03.503Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f1/f48c3c9c343c9071ade5f355403e344d817412d9cf379a2d04b181282e74/uuid_utils-0.13.0-pp311-pypy311_pp73-manylinux_2_24_armv7l.whl", hash = "sha256:516adf07f5b2cdb88d50f489c702b5f1a75ae8b2639bfd254f4192d5f7ee261f", size = 339104, upload-time = "2026-01-08T15:48:05.02Z" }, + { url = "https://files.pythonhosted.org/packages/47/22/8e3142b4baffee77ce533fe956446d3699ec42f1d5252911208cbef4501e/uuid_utils-0.13.0-pp311-pypy311_pp73-manylinux_2_24_i686.whl", hash = "sha256:aeee3bd89e8de6184a3ab778ce19f5ce9ad32849d1be549516e0ddb257562d8d", size = 359503, upload-time = "2026-01-08T15:48:06.347Z" }, + { url = "https://files.pythonhosted.org/packages/bd/1a/756f1f9e31b15019c87cd2becb1c596351c50967cd143443da38df8818d1/uuid_utils-0.13.0-pp311-pypy311_pp73-manylinux_2_24_ppc64le.whl", hash = "sha256:97985256c2e59b7caa51f5c8515f64d777328562a9c900ec65e9d627baf72737", size = 467480, upload-time = "2026-01-08T15:48:07.681Z" }, + { url = "https://files.pythonhosted.org/packages/0a/20/a6929e98d9a461ca49e96194a82a1cc3fd5420f3a2f53cbb34fca438549e/uuid_utils-0.13.0-pp311-pypy311_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:b7ccaa20e24c5f60f41a69ef571ed820737f9b0ade4cbeef56aaa8f80f5aa475", size = 333610, upload-time = "2026-01-08T15:48:09.375Z" }, +] + [[package]] name = "uv" version = "0.9.18" @@ -9019,6 +9148,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/bf/973444bb959fc7acbbeb3d226bd4d135dcd49b6af174b29aab1b50e2d710/vllm-0.11.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:52369c9ee949944354bdc7afc88ded2d1ed02b098bf90db06cf80098a19787b7", size = 401003969, upload-time = "2025-10-04T01:39:50.251Z" }, ] +[[package]] +name = "voyageai" +version = "0.3.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "aiolimiter" }, + { name = "ffmpeg-python" }, + { name = "langchain-text-splitters" }, + { name = "numpy", marker = "python_full_version < '3.14'" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "requests" }, + { name = "tenacity" }, + { name = "tokenizers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/94/16/1b46b3cd401e1717a68197c1fe336d7bb4e0a1833f8105e1738f5b1add05/voyageai-0.3.7.tar.gz", hash = "sha256:826cd97f97223f42b5babc5c459c9c80f3a8215ce5c0e007b0b276550f790d24", size = 26485, upload-time = "2025-12-16T18:43:05.26Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/64/89f6325666d6836979f94ac88b96fefc7527e02e61abc81359843585e088/voyageai-0.3.7-py3-none-any.whl", hash = "sha256:909f6c033001e5a3b3caf970525bf3614a1bfef9003cf3c3b68207dfdb53e86d", size = 34691, upload-time = "2025-12-16T18:43:04.073Z" }, +] + [[package]] name = "watchdog" version = "6.0.0" @@ -9692,3 +9842,93 @@ sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50e wheels = [ { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, ] + +[[package]] +name = "zstandard" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/7a/28efd1d371f1acd037ac64ed1c5e2b41514a6cc937dd6ab6a13ab9f0702f/zstandard-0.25.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e59fdc271772f6686e01e1b3b74537259800f57e24280be3f29c8a0deb1904dd", size = 795256, upload-time = "2025-09-14T22:15:56.415Z" }, + { url = "https://files.pythonhosted.org/packages/96/34/ef34ef77f1ee38fc8e4f9775217a613b452916e633c4f1d98f31db52c4a5/zstandard-0.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4d441506e9b372386a5271c64125f72d5df6d2a8e8a2a45a0ae09b03cb781ef7", size = 640565, upload-time = "2025-09-14T22:15:58.177Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1b/4fdb2c12eb58f31f28c4d28e8dc36611dd7205df8452e63f52fb6261d13e/zstandard-0.25.0-cp310-cp310-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:ab85470ab54c2cb96e176f40342d9ed41e58ca5733be6a893b730e7af9c40550", size = 5345306, upload-time = "2025-09-14T22:16:00.165Z" }, + { url = "https://files.pythonhosted.org/packages/73/28/a44bdece01bca027b079f0e00be3b6bd89a4df180071da59a3dd7381665b/zstandard-0.25.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e05ab82ea7753354bb054b92e2f288afb750e6b439ff6ca78af52939ebbc476d", size = 5055561, upload-time = "2025-09-14T22:16:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/e9/74/68341185a4f32b274e0fc3410d5ad0750497e1acc20bd0f5b5f64ce17785/zstandard-0.25.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:78228d8a6a1c177a96b94f7e2e8d012c55f9c760761980da16ae7546a15a8e9b", size = 5402214, upload-time = "2025-09-14T22:16:04.109Z" }, + { url = "https://files.pythonhosted.org/packages/8b/67/f92e64e748fd6aaffe01e2b75a083c0c4fd27abe1c8747fee4555fcee7dd/zstandard-0.25.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b6bd67528ee8b5c5f10255735abc21aa106931f0dbaf297c7be0c886353c3d0", size = 5449703, upload-time = "2025-09-14T22:16:06.312Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e5/6d36f92a197c3c17729a2125e29c169f460538a7d939a27eaaa6dcfcba8e/zstandard-0.25.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4b6d83057e713ff235a12e73916b6d356e3084fd3d14ced499d84240f3eecee0", size = 5556583, upload-time = "2025-09-14T22:16:08.457Z" }, + { url = "https://files.pythonhosted.org/packages/d7/83/41939e60d8d7ebfe2b747be022d0806953799140a702b90ffe214d557638/zstandard-0.25.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9174f4ed06f790a6869b41cba05b43eeb9a35f8993c4422ab853b705e8112bbd", size = 5045332, upload-time = "2025-09-14T22:16:10.444Z" }, + { url = "https://files.pythonhosted.org/packages/b3/87/d3ee185e3d1aa0133399893697ae91f221fda79deb61adbe998a7235c43f/zstandard-0.25.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:25f8f3cd45087d089aef5ba3848cd9efe3ad41163d3400862fb42f81a3a46701", size = 5572283, upload-time = "2025-09-14T22:16:12.128Z" }, + { url = "https://files.pythonhosted.org/packages/0a/1d/58635ae6104df96671076ac7d4ae7816838ce7debd94aecf83e30b7121b0/zstandard-0.25.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3756b3e9da9b83da1796f8809dd57cb024f838b9eeafde28f3cb472012797ac1", size = 4959754, upload-time = "2025-09-14T22:16:14.225Z" }, + { url = "https://files.pythonhosted.org/packages/75/d6/57e9cb0a9983e9a229dd8fd2e6e96593ef2aa82a3907188436f22b111ccd/zstandard-0.25.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:81dad8d145d8fd981b2962b686b2241d3a1ea07733e76a2f15435dfb7fb60150", size = 5266477, upload-time = "2025-09-14T22:16:16.343Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a9/ee891e5edf33a6ebce0a028726f0bbd8567effe20fe3d5808c42323e8542/zstandard-0.25.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a5a419712cf88862a45a23def0ae063686db3d324cec7edbe40509d1a79a0aab", size = 5440914, upload-time = "2025-09-14T22:16:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/58/08/a8522c28c08031a9521f27abc6f78dbdee7312a7463dd2cfc658b813323b/zstandard-0.25.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e7360eae90809efd19b886e59a09dad07da4ca9ba096752e61a2e03c8aca188e", size = 5819847, upload-time = "2025-09-14T22:16:20.559Z" }, + { url = "https://files.pythonhosted.org/packages/6f/11/4c91411805c3f7b6f31c60e78ce347ca48f6f16d552fc659af6ec3b73202/zstandard-0.25.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:75ffc32a569fb049499e63ce68c743155477610532da1eb38e7f24bf7cd29e74", size = 5363131, upload-time = "2025-09-14T22:16:22.206Z" }, + { url = "https://files.pythonhosted.org/packages/ef/d6/8c4bd38a3b24c4c7676a7a3d8de85d6ee7a983602a734b9f9cdefb04a5d6/zstandard-0.25.0-cp310-cp310-win32.whl", hash = "sha256:106281ae350e494f4ac8a80470e66d1fe27e497052c8d9c3b95dc4cf1ade81aa", size = 436469, upload-time = "2025-09-14T22:16:25.002Z" }, + { url = "https://files.pythonhosted.org/packages/93/90/96d50ad417a8ace5f841b3228e93d1bb13e6ad356737f42e2dde30d8bd68/zstandard-0.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea9d54cc3d8064260114a0bbf3479fc4a98b21dffc89b3459edd506b69262f6e", size = 506100, upload-time = "2025-09-14T22:16:23.569Z" }, + { url = "https://files.pythonhosted.org/packages/2a/83/c3ca27c363d104980f1c9cee1101cc8ba724ac8c28a033ede6aab89585b1/zstandard-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c", size = 795254, upload-time = "2025-09-14T22:16:26.137Z" }, + { url = "https://files.pythonhosted.org/packages/ac/4d/e66465c5411a7cf4866aeadc7d108081d8ceba9bc7abe6b14aa21c671ec3/zstandard-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f", size = 640559, upload-time = "2025-09-14T22:16:27.973Z" }, + { url = "https://files.pythonhosted.org/packages/12/56/354fe655905f290d3b147b33fe946b0f27e791e4b50a5f004c802cb3eb7b/zstandard-0.25.0-cp311-cp311-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:0bbc9a0c65ce0eea3c34a691e3c4b6889f5f3909ba4822ab385fab9057099431", size = 5348020, upload-time = "2025-09-14T22:16:29.523Z" }, + { url = "https://files.pythonhosted.org/packages/3b/13/2b7ed68bd85e69a2069bcc72141d378f22cae5a0f3b353a2c8f50ef30c1b/zstandard-0.25.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:01582723b3ccd6939ab7b3a78622c573799d5d8737b534b86d0e06ac18dbde4a", size = 5058126, upload-time = "2025-09-14T22:16:31.811Z" }, + { url = "https://files.pythonhosted.org/packages/c9/dd/fdaf0674f4b10d92cb120ccff58bbb6626bf8368f00ebfd2a41ba4a0dc99/zstandard-0.25.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5f1ad7bf88535edcf30038f6919abe087f606f62c00a87d7e33e7fc57cb69fcc", size = 5405390, upload-time = "2025-09-14T22:16:33.486Z" }, + { url = "https://files.pythonhosted.org/packages/0f/67/354d1555575bc2490435f90d67ca4dd65238ff2f119f30f72d5cde09c2ad/zstandard-0.25.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:06acb75eebeedb77b69048031282737717a63e71e4ae3f77cc0c3b9508320df6", size = 5452914, upload-time = "2025-09-14T22:16:35.277Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1f/e9cfd801a3f9190bf3e759c422bbfd2247db9d7f3d54a56ecde70137791a/zstandard-0.25.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9300d02ea7c6506f00e627e287e0492a5eb0371ec1670ae852fefffa6164b072", size = 5559635, upload-time = "2025-09-14T22:16:37.141Z" }, + { url = "https://files.pythonhosted.org/packages/21/88/5ba550f797ca953a52d708c8e4f380959e7e3280af029e38fbf47b55916e/zstandard-0.25.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfd06b1c5584b657a2892a6014c2f4c20e0db0208c159148fa78c65f7e0b0277", size = 5048277, upload-time = "2025-09-14T22:16:38.807Z" }, + { url = "https://files.pythonhosted.org/packages/46/c0/ca3e533b4fa03112facbe7fbe7779cb1ebec215688e5df576fe5429172e0/zstandard-0.25.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f373da2c1757bb7f1acaf09369cdc1d51d84131e50d5fa9863982fd626466313", size = 5574377, upload-time = "2025-09-14T22:16:40.523Z" }, + { url = "https://files.pythonhosted.org/packages/12/9b/3fb626390113f272abd0799fd677ea33d5fc3ec185e62e6be534493c4b60/zstandard-0.25.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6c0e5a65158a7946e7a7affa6418878ef97ab66636f13353b8502d7ea03c8097", size = 4961493, upload-time = "2025-09-14T22:16:43.3Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d3/23094a6b6a4b1343b27ae68249daa17ae0651fcfec9ed4de09d14b940285/zstandard-0.25.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c8e167d5adf59476fa3e37bee730890e389410c354771a62e3c076c86f9f7778", size = 5269018, upload-time = "2025-09-14T22:16:45.292Z" }, + { url = "https://files.pythonhosted.org/packages/8c/a7/bb5a0c1c0f3f4b5e9d5b55198e39de91e04ba7c205cc46fcb0f95f0383c1/zstandard-0.25.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:98750a309eb2f020da61e727de7d7ba3c57c97cf6213f6f6277bb7fb42a8e065", size = 5443672, upload-time = "2025-09-14T22:16:47.076Z" }, + { url = "https://files.pythonhosted.org/packages/27/22/503347aa08d073993f25109c36c8d9f029c7d5949198050962cb568dfa5e/zstandard-0.25.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:22a086cff1b6ceca18a8dd6096ec631e430e93a8e70a9ca5efa7561a00f826fa", size = 5822753, upload-time = "2025-09-14T22:16:49.316Z" }, + { url = "https://files.pythonhosted.org/packages/e2/be/94267dc6ee64f0f8ba2b2ae7c7a2df934a816baaa7291db9e1aa77394c3c/zstandard-0.25.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:72d35d7aa0bba323965da807a462b0966c91608ef3a48ba761678cb20ce5d8b7", size = 5366047, upload-time = "2025-09-14T22:16:51.328Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a3/732893eab0a3a7aecff8b99052fecf9f605cf0fb5fb6d0290e36beee47a4/zstandard-0.25.0-cp311-cp311-win32.whl", hash = "sha256:f5aeea11ded7320a84dcdd62a3d95b5186834224a9e55b92ccae35d21a8b63d4", size = 436484, upload-time = "2025-09-14T22:16:55.005Z" }, + { url = "https://files.pythonhosted.org/packages/43/a3/c6155f5c1cce691cb80dfd38627046e50af3ee9ddc5d0b45b9b063bfb8c9/zstandard-0.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:daab68faadb847063d0c56f361a289c4f268706b598afbf9ad113cbe5c38b6b2", size = 506183, upload-time = "2025-09-14T22:16:52.753Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3e/8945ab86a0820cc0e0cdbf38086a92868a9172020fdab8a03ac19662b0e5/zstandard-0.25.0-cp311-cp311-win_arm64.whl", hash = "sha256:22a06c5df3751bb7dc67406f5374734ccee8ed37fc5981bf1ad7041831fa1137", size = 462533, upload-time = "2025-09-14T22:16:53.878Z" }, + { url = "https://files.pythonhosted.org/packages/82/fc/f26eb6ef91ae723a03e16eddb198abcfce2bc5a42e224d44cc8b6765e57e/zstandard-0.25.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b", size = 795738, upload-time = "2025-09-14T22:16:56.237Z" }, + { url = "https://files.pythonhosted.org/packages/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00", size = 640436, upload-time = "2025-09-14T22:16:57.774Z" }, + { url = "https://files.pythonhosted.org/packages/53/6c/288c3f0bd9fcfe9ca41e2c2fbfd17b2097f6af57b62a81161941f09afa76/zstandard-0.25.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64", size = 5343019, upload-time = "2025-09-14T22:16:59.302Z" }, + { url = "https://files.pythonhosted.org/packages/1e/15/efef5a2f204a64bdb5571e6161d49f7ef0fffdbca953a615efbec045f60f/zstandard-0.25.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea", size = 5063012, upload-time = "2025-09-14T22:17:01.156Z" }, + { url = "https://files.pythonhosted.org/packages/b7/37/a6ce629ffdb43959e92e87ebdaeebb5ac81c944b6a75c9c47e300f85abdf/zstandard-0.25.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7149623bba7fdf7e7f24312953bcf73cae103db8cae49f8154dd1eadc8a29ecb", size = 5394148, upload-time = "2025-09-14T22:17:03.091Z" }, + { url = "https://files.pythonhosted.org/packages/e3/79/2bf870b3abeb5c070fe2d670a5a8d1057a8270f125ef7676d29ea900f496/zstandard-0.25.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6a573a35693e03cf1d67799fd01b50ff578515a8aeadd4595d2a7fa9f3ec002a", size = 5451652, upload-time = "2025-09-14T22:17:04.979Z" }, + { url = "https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902", size = 5546993, upload-time = "2025-09-14T22:17:06.781Z" }, + { url = "https://files.pythonhosted.org/packages/85/c7/3483ad9ff0662623f3648479b0380d2de5510abf00990468c286c6b04017/zstandard-0.25.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f", size = 5046806, upload-time = "2025-09-14T22:17:08.415Z" }, + { url = "https://files.pythonhosted.org/packages/08/b3/206883dd25b8d1591a1caa44b54c2aad84badccf2f1de9e2d60a446f9a25/zstandard-0.25.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b", size = 5576659, upload-time = "2025-09-14T22:17:10.164Z" }, + { url = "https://files.pythonhosted.org/packages/9d/31/76c0779101453e6c117b0ff22565865c54f48f8bd807df2b00c2c404b8e0/zstandard-0.25.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6", size = 4953933, upload-time = "2025-09-14T22:17:11.857Z" }, + { url = "https://files.pythonhosted.org/packages/18/e1/97680c664a1bf9a247a280a053d98e251424af51f1b196c6d52f117c9720/zstandard-0.25.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:809c5bcb2c67cd0ed81e9229d227d4ca28f82d0f778fc5fea624a9def3963f91", size = 5268008, upload-time = "2025-09-14T22:17:13.627Z" }, + { url = "https://files.pythonhosted.org/packages/1e/73/316e4010de585ac798e154e88fd81bb16afc5c5cb1a72eeb16dd37e8024a/zstandard-0.25.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f27662e4f7dbf9f9c12391cb37b4c4c3cb90ffbd3b1fb9284dadbbb8935fa708", size = 5433517, upload-time = "2025-09-14T22:17:16.103Z" }, + { url = "https://files.pythonhosted.org/packages/5b/60/dd0f8cfa8129c5a0ce3ea6b7f70be5b33d2618013a161e1ff26c2b39787c/zstandard-0.25.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99c0c846e6e61718715a3c9437ccc625de26593fea60189567f0118dc9db7512", size = 5814292, upload-time = "2025-09-14T22:17:17.827Z" }, + { url = "https://files.pythonhosted.org/packages/fc/5f/75aafd4b9d11b5407b641b8e41a57864097663699f23e9ad4dbb91dc6bfe/zstandard-0.25.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa", size = 5360237, upload-time = "2025-09-14T22:17:19.954Z" }, + { url = "https://files.pythonhosted.org/packages/ff/8d/0309daffea4fcac7981021dbf21cdb2e3427a9e76bafbcdbdf5392ff99a4/zstandard-0.25.0-cp312-cp312-win32.whl", hash = "sha256:23ebc8f17a03133b4426bcc04aabd68f8236eb78c3760f12783385171b0fd8bd", size = 436922, upload-time = "2025-09-14T22:17:24.398Z" }, + { url = "https://files.pythonhosted.org/packages/79/3b/fa54d9015f945330510cb5d0b0501e8253c127cca7ebe8ba46a965df18c5/zstandard-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffef5a74088f1e09947aecf91011136665152e0b4b359c42be3373897fb39b01", size = 506276, upload-time = "2025-09-14T22:17:21.429Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6b/8b51697e5319b1f9ac71087b0af9a40d8a6288ff8025c36486e0c12abcc4/zstandard-0.25.0-cp312-cp312-win_arm64.whl", hash = "sha256:181eb40e0b6a29b3cd2849f825e0fa34397f649170673d385f3598ae17cca2e9", size = 462679, upload-time = "2025-09-14T22:17:23.147Z" }, + { url = "https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec996f12524f88e151c339688c3897194821d7f03081ab35d31d1e12ec975e94", size = 795735, upload-time = "2025-09-14T22:17:26.042Z" }, + { url = "https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a1a4ae2dec3993a32247995bdfe367fc3266da832d82f8438c8570f989753de1", size = 640440, upload-time = "2025-09-14T22:17:27.366Z" }, + { url = "https://files.pythonhosted.org/packages/d9/14/933d27204c2bd404229c69f445862454dcc101cd69ef8c6068f15aaec12c/zstandard-0.25.0-cp313-cp313-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:e96594a5537722fdfb79951672a2a63aec5ebfb823e7560586f7484819f2a08f", size = 5343070, upload-time = "2025-09-14T22:17:28.896Z" }, + { url = "https://files.pythonhosted.org/packages/6d/db/ddb11011826ed7db9d0e485d13df79b58586bfdec56e5c84a928a9a78c1c/zstandard-0.25.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bfc4e20784722098822e3eee42b8e576b379ed72cca4a7cb856ae733e62192ea", size = 5063001, upload-time = "2025-09-14T22:17:31.044Z" }, + { url = "https://files.pythonhosted.org/packages/db/00/87466ea3f99599d02a5238498b87bf84a6348290c19571051839ca943777/zstandard-0.25.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:457ed498fc58cdc12fc48f7950e02740d4f7ae9493dd4ab2168a47c93c31298e", size = 5394120, upload-time = "2025-09-14T22:17:32.711Z" }, + { url = "https://files.pythonhosted.org/packages/2b/95/fc5531d9c618a679a20ff6c29e2b3ef1d1f4ad66c5e161ae6ff847d102a9/zstandard-0.25.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:fd7a5004eb1980d3cefe26b2685bcb0b17989901a70a1040d1ac86f1d898c551", size = 5451230, upload-time = "2025-09-14T22:17:34.41Z" }, + { url = "https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e735494da3db08694d26480f1493ad2cf86e99bdd53e8e9771b2752a5c0246a", size = 5547173, upload-time = "2025-09-14T22:17:36.084Z" }, + { url = "https://files.pythonhosted.org/packages/4e/d5/ba05ed95c6b8ec30bd468dfeab20589f2cf709b5c940483e31d991f2ca58/zstandard-0.25.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3a39c94ad7866160a4a46d772e43311a743c316942037671beb264e395bdd611", size = 5046736, upload-time = "2025-09-14T22:17:37.891Z" }, + { url = "https://files.pythonhosted.org/packages/50/d5/870aa06b3a76c73eced65c044b92286a3c4e00554005ff51962deef28e28/zstandard-0.25.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:172de1f06947577d3a3005416977cce6168f2261284c02080e7ad0185faeced3", size = 5576368, upload-time = "2025-09-14T22:17:40.206Z" }, + { url = "https://files.pythonhosted.org/packages/5d/35/398dc2ffc89d304d59bc12f0fdd931b4ce455bddf7038a0a67733a25f550/zstandard-0.25.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3c83b0188c852a47cd13ef3bf9209fb0a77fa5374958b8c53aaa699398c6bd7b", size = 4954022, upload-time = "2025-09-14T22:17:41.879Z" }, + { url = "https://files.pythonhosted.org/packages/9a/5c/36ba1e5507d56d2213202ec2b05e8541734af5f2ce378c5d1ceaf4d88dc4/zstandard-0.25.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1673b7199bbe763365b81a4f3252b8e80f44c9e323fc42940dc8843bfeaf9851", size = 5267889, upload-time = "2025-09-14T22:17:43.577Z" }, + { url = "https://files.pythonhosted.org/packages/70/e8/2ec6b6fb7358b2ec0113ae202647ca7c0e9d15b61c005ae5225ad0995df5/zstandard-0.25.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0be7622c37c183406f3dbf0cba104118eb16a4ea7359eeb5752f0794882fc250", size = 5433952, upload-time = "2025-09-14T22:17:45.271Z" }, + { url = "https://files.pythonhosted.org/packages/7b/01/b5f4d4dbc59ef193e870495c6f1275f5b2928e01ff5a81fecb22a06e22fb/zstandard-0.25.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:5f5e4c2a23ca271c218ac025bd7d635597048b366d6f31f420aaeb715239fc98", size = 5814054, upload-time = "2025-09-14T22:17:47.08Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e5/fbd822d5c6f427cf158316d012c5a12f233473c2f9c5fe5ab1ae5d21f3d8/zstandard-0.25.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f187a0bb61b35119d1926aee039524d1f93aaf38a9916b8c4b78ac8514a0aaf", size = 5360113, upload-time = "2025-09-14T22:17:48.893Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e0/69a553d2047f9a2c7347caa225bb3a63b6d7704ad74610cb7823baa08ed7/zstandard-0.25.0-cp313-cp313-win32.whl", hash = "sha256:7030defa83eef3e51ff26f0b7bfb229f0204b66fe18e04359ce3474ac33cbc09", size = 436936, upload-time = "2025-09-14T22:17:52.658Z" }, + { url = "https://files.pythonhosted.org/packages/d9/82/b9c06c870f3bd8767c201f1edbdf9e8dc34be5b0fbc5682c4f80fe948475/zstandard-0.25.0-cp313-cp313-win_amd64.whl", hash = "sha256:1f830a0dac88719af0ae43b8b2d6aef487d437036468ef3c2ea59c51f9d55fd5", size = 506232, upload-time = "2025-09-14T22:17:50.402Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/60c3c01243bb81d381c9916e2a6d9e149ab8627c0c7d7abb2d73384b3c0c/zstandard-0.25.0-cp313-cp313-win_arm64.whl", hash = "sha256:85304a43f4d513f5464ceb938aa02c1e78c2943b29f44a750b48b25ac999a049", size = 462671, upload-time = "2025-09-14T22:17:51.533Z" }, + { url = "https://files.pythonhosted.org/packages/3d/5c/f8923b595b55fe49e30612987ad8bf053aef555c14f05bb659dd5dbe3e8a/zstandard-0.25.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e29f0cf06974c899b2c188ef7f783607dbef36da4c242eb6c82dcd8b512855e3", size = 795887, upload-time = "2025-09-14T22:17:54.198Z" }, + { url = "https://files.pythonhosted.org/packages/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:05df5136bc5a011f33cd25bc9f506e7426c0c9b3f9954f056831ce68f3b6689f", size = 640658, upload-time = "2025-09-14T22:17:55.423Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/8b6b71b1ddd517f68ffb55e10834388d4f793c49c6b83effaaa05785b0b4/zstandard-0.25.0-cp314-cp314-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:f604efd28f239cc21b3adb53eb061e2a205dc164be408e553b41ba2ffe0ca15c", size = 5379849, upload-time = "2025-09-14T22:17:57.372Z" }, + { url = "https://files.pythonhosted.org/packages/a4/86/a48e56320d0a17189ab7a42645387334fba2200e904ee47fc5a26c1fd8ca/zstandard-0.25.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:223415140608d0f0da010499eaa8ccdb9af210a543fac54bce15babbcfc78439", size = 5058095, upload-time = "2025-09-14T22:17:59.498Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ad/eb659984ee2c0a779f9d06dbfe45e2dc39d99ff40a319895df2d3d9a48e5/zstandard-0.25.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e54296a283f3ab5a26fc9b8b5d4978ea0532f37b231644f367aa588930aa043", size = 5551751, upload-time = "2025-09-14T22:18:01.618Z" }, + { url = "https://files.pythonhosted.org/packages/61/b3/b637faea43677eb7bd42ab204dfb7053bd5c4582bfe6b1baefa80ac0c47b/zstandard-0.25.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ca54090275939dc8ec5dea2d2afb400e0f83444b2fc24e07df7fdef677110859", size = 6364818, upload-time = "2025-09-14T22:18:03.769Z" }, + { url = "https://files.pythonhosted.org/packages/31/dc/cc50210e11e465c975462439a492516a73300ab8caa8f5e0902544fd748b/zstandard-0.25.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e09bb6252b6476d8d56100e8147b803befa9a12cea144bbe629dd508800d1ad0", size = 5560402, upload-time = "2025-09-14T22:18:05.954Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ae/56523ae9c142f0c08efd5e868a6da613ae76614eca1305259c3bf6a0ed43/zstandard-0.25.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a9ec8c642d1ec73287ae3e726792dd86c96f5681eb8df274a757bf62b750eae7", size = 4955108, upload-time = "2025-09-14T22:18:07.68Z" }, + { url = "https://files.pythonhosted.org/packages/98/cf/c899f2d6df0840d5e384cf4c4121458c72802e8bda19691f3b16619f51e9/zstandard-0.25.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a4089a10e598eae6393756b036e0f419e8c1d60f44a831520f9af41c14216cf2", size = 5269248, upload-time = "2025-09-14T22:18:09.753Z" }, + { url = "https://files.pythonhosted.org/packages/1b/c0/59e912a531d91e1c192d3085fc0f6fb2852753c301a812d856d857ea03c6/zstandard-0.25.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f67e8f1a324a900e75b5e28ffb152bcac9fbed1cc7b43f99cd90f395c4375344", size = 5430330, upload-time = "2025-09-14T22:18:11.966Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/7e31db1240de2df22a58e2ea9a93fc6e38cc29353e660c0272b6735d6669/zstandard-0.25.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:9654dbc012d8b06fc3d19cc825af3f7bf8ae242226df5f83936cb39f5fdc846c", size = 5811123, upload-time = "2025-09-14T22:18:13.907Z" }, + { url = "https://files.pythonhosted.org/packages/f6/49/fac46df5ad353d50535e118d6983069df68ca5908d4d65b8c466150a4ff1/zstandard-0.25.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4203ce3b31aec23012d3a4cf4a2ed64d12fea5269c49aed5e4c3611b938e4088", size = 5359591, upload-time = "2025-09-14T22:18:16.465Z" }, + { url = "https://files.pythonhosted.org/packages/c2/38/f249a2050ad1eea0bb364046153942e34abba95dd5520af199aed86fbb49/zstandard-0.25.0-cp314-cp314-win32.whl", hash = "sha256:da469dc041701583e34de852d8634703550348d5822e66a0c827d39b05365b12", size = 444513, upload-time = "2025-09-14T22:18:20.61Z" }, + { url = "https://files.pythonhosted.org/packages/3a/43/241f9615bcf8ba8903b3f0432da069e857fc4fd1783bd26183db53c4804b/zstandard-0.25.0-cp314-cp314-win_amd64.whl", hash = "sha256:c19bcdd826e95671065f8692b5a4aa95c52dc7a02a4c5a0cac46deb879a017a2", size = 516118, upload-time = "2025-09-14T22:18:17.849Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ef/da163ce2450ed4febf6467d77ccb4cd52c4c30ab45624bad26ca0a27260c/zstandard-0.25.0-cp314-cp314-win_arm64.whl", hash = "sha256:d7541afd73985c630bafcd6338d2518ae96060075f9463d7dc14cfb33514383d", size = 476940, upload-time = "2025-09-14T22:18:19.088Z" }, +]