diff --git a/libs/ibm/langchain_ibm/__init__.py b/libs/ibm/langchain_ibm/__init__.py index dbda222..a5587dd 100644 --- a/libs/ibm/langchain_ibm/__init__.py +++ b/libs/ibm/langchain_ibm/__init__.py @@ -1,5 +1,6 @@ from langchain_ibm.chat_models import ChatWatsonx from langchain_ibm.embeddings import WatsonxEmbeddings from langchain_ibm.llms import WatsonxLLM +from langchain_ibm.rerank import WatsonxRerank -__all__ = ["WatsonxLLM", "WatsonxEmbeddings", "ChatWatsonx"] +__all__ = ["WatsonxLLM", "WatsonxEmbeddings", "ChatWatsonx", "WatsonxRerank"] diff --git a/libs/ibm/langchain_ibm/chat_models.py b/libs/ibm/langchain_ibm/chat_models.py index 71edba0..02b20f3 100644 --- a/libs/ibm/langchain_ibm/chat_models.py +++ b/libs/ibm/langchain_ibm/chat_models.py @@ -24,7 +24,6 @@ from ibm_watsonx_ai import APIClient, Credentials # type: ignore from ibm_watsonx_ai.foundation_models import ModelInference # type: ignore from ibm_watsonx_ai.foundation_models.schema import ( # type: ignore - BaseSchema, TextChatParameters, ) from langchain_core.callbacks import CallbackManagerForLLMRun @@ -74,7 +73,7 @@ from pydantic import BaseModel, ConfigDict, Field, SecretStr, model_validator from typing_extensions import Self -from langchain_ibm.utils import check_for_attribute +from langchain_ibm.utils import check_for_attribute, extract_params logger = logging.getLogger(__name__) @@ -668,24 +667,8 @@ def _stream( def _create_message_dicts( self, messages: List[BaseMessage], stop: Optional[List[str]], **kwargs: Any ) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]: - params = ( - { - **( - self.params.to_dict() - if isinstance(self.params, BaseSchema) - else self.params - ) - } - if self.params - else {} - ) - params = params | { - **( - kwargs.get("params", {}).to_dict() - if isinstance(kwargs.get("params", {}), BaseSchema) - else kwargs.get("params", {}) - ) - } + params = extract_params(kwargs, self.params) + if stop is not None: if params and "stop_sequences" in params: raise ValueError( @@ -693,7 +676,7 @@ def _create_message_dicts( ) params = (params or {}) | {"stop_sequences": stop} message_dicts = [_convert_message_to_dict(m, self.model_id) for m in messages] - return message_dicts, params + return message_dicts, params or {} def _create_chat_result( self, response: dict, generation_info: Optional[Dict] = None diff --git a/libs/ibm/langchain_ibm/embeddings.py b/libs/ibm/langchain_ibm/embeddings.py index 27afa8b..af1767a 100644 --- a/libs/ibm/langchain_ibm/embeddings.py +++ b/libs/ibm/langchain_ibm/embeddings.py @@ -1,7 +1,5 @@ -from __future__ import annotations - import logging -from typing import List, Optional, Union +from typing import Any, Dict, List, Optional, Union from ibm_watsonx_ai import APIClient, Credentials # type: ignore from ibm_watsonx_ai.foundation_models.embeddings import Embeddings # type: ignore @@ -10,7 +8,7 @@ from pydantic import BaseModel, ConfigDict, Field, SecretStr, model_validator from typing_extensions import Self -from langchain_ibm.utils import check_for_attribute +from langchain_ibm.utils import check_for_attribute, extract_params logger = logging.getLogger(__name__) @@ -63,7 +61,7 @@ class WatsonxEmbeddings(BaseModel, LangChainEmbeddings): version: Optional[SecretStr] = None """Version of the CPD instance.""" - params: Optional[dict] = None + params: Optional[Dict] = None """Model parameters to use during request generation.""" verify: Union[str, bool, None] = None @@ -151,10 +149,13 @@ def validate_environment(self) -> Self: return self - def embed_documents(self, texts: List[str]) -> List[List[float]]: + def embed_documents(self, texts: List[str], **kwargs: Any) -> List[List[float]]: """Embed search docs.""" - return self.watsonx_embed.embed_documents(texts=texts) + params = extract_params(kwargs, self.params) + return self.watsonx_embed.embed_documents( + texts=texts, **(kwargs | {"params": params}) + ) - def embed_query(self, text: str) -> List[float]: + def embed_query(self, text: str, **kwargs: Any) -> List[float]: """Embed query text.""" - return self.embed_documents([text])[0] + return self.embed_documents([text], **kwargs)[0] diff --git a/libs/ibm/langchain_ibm/llms.py b/libs/ibm/langchain_ibm/llms.py index 0cc5f5e..fbc0aa8 100644 --- a/libs/ibm/langchain_ibm/llms.py +++ b/libs/ibm/langchain_ibm/llms.py @@ -16,7 +16,7 @@ from pydantic import ConfigDict, Field, SecretStr, model_validator from typing_extensions import Self -from langchain_ibm.utils import check_for_attribute +from langchain_ibm.utils import check_for_attribute, extract_params logger = logging.getLogger(__name__) textgen_valid_params = [ @@ -305,12 +305,9 @@ def _override_chat_params( def _get_chat_params( self, stop: Optional[List[str]] = None, **kwargs: Any ) -> Tuple[Dict[str, Any], Dict[str, Any]]: - params = ( - {**self.params, **kwargs.pop("params", {})} - if self.params - else kwargs.pop("params", {}) - ) - params, kwargs = self._override_chat_params(params, **kwargs) + params = extract_params(kwargs, self.params) + + params, kwargs = self._override_chat_params(params or {}, **kwargs) if stop is not None: if params and "stop_sequences" in params: raise ValueError( diff --git a/libs/ibm/langchain_ibm/rerank.py b/libs/ibm/langchain_ibm/rerank.py new file mode 100644 index 0000000..754ad5d --- /dev/null +++ b/libs/ibm/langchain_ibm/rerank.py @@ -0,0 +1,232 @@ +from __future__ import annotations + +from copy import deepcopy +from typing import Any, Dict, List, Optional, Sequence, Union + +from ibm_watsonx_ai import APIClient, Credentials # type: ignore +from ibm_watsonx_ai.foundation_models import Rerank # type: ignore +from ibm_watsonx_ai.foundation_models.schema import ( # type: ignore + RerankParameters, +) +from langchain_core.callbacks import Callbacks +from langchain_core.documents import BaseDocumentCompressor, Document +from langchain_core.utils.utils import secret_from_env +from pydantic import ConfigDict, Field, SecretStr, model_validator +from typing_extensions import Self + +from langchain_ibm.utils import check_for_attribute, extract_params + + +class WatsonxRerank(BaseDocumentCompressor): + """Document compressor that uses `watsonx Rerank API`.""" + + model_id: str + """Type of model to use.""" + + project_id: Optional[str] = None + """ID of the Watson Studio project.""" + + space_id: Optional[str] = None + """ID of the Watson Studio space.""" + + url: SecretStr = Field( + alias="url", default_factory=secret_from_env("WATSONX_URL", default=None) + ) + """URL to the Watson Machine Learning or CPD instance.""" + + apikey: Optional[SecretStr] = Field( + alias="apikey", default_factory=secret_from_env("WATSONX_APIKEY", default=None) + ) + """API key to the Watson Machine Learning or CPD instance.""" + + token: Optional[SecretStr] = Field( + alias="token", default_factory=secret_from_env("WATSONX_TOKEN", default=None) + ) + """Token to the CPD instance.""" + + password: Optional[SecretStr] = Field( + alias="password", + default_factory=secret_from_env("WATSONX_PASSWORD", default=None), + ) + """Password to the CPD instance.""" + + username: Optional[SecretStr] = Field( + alias="username", + default_factory=secret_from_env("WATSONX_USERNAME", default=None), + ) + """Username to the CPD instance.""" + + instance_id: Optional[SecretStr] = Field( + alias="instance_id", + default_factory=secret_from_env("WATSONX_INSTANCE_ID", default=None), + ) + """Instance_id of the CPD instance.""" + + version: Optional[SecretStr] = None + """Version of the CPD instance.""" + + params: Optional[Union[dict, RerankParameters]] = None + """Model parameters to use during request generation.""" + + verify: Union[str, bool, None] = None + """You can pass one of following as verify: + * the path to a CA_BUNDLE file + * the path of directory with certificates of trusted CAs + * True - default path to truststore will be taken + * False - no verification will be made""" + + validate_model: bool = True + """Model ID validation.""" + + streaming: bool = False + """ Whether to stream the results or not. """ + + watsonx_rerank: Rerank = Field(default=None, exclude=True) #: :meta private: + + watsonx_client: Optional[APIClient] = Field(default=None, exclude=True) + + model_config = ConfigDict( + arbitrary_types_allowed=True, + extra="forbid", + protected_namespaces=(), + ) + + @property + def lc_secrets(self) -> Dict[str, str]: + """A map of constructor argument names to secret ids. + + For example: + { + "url": "WATSONX_URL", + "apikey": "WATSONX_APIKEY", + "token": "WATSONX_TOKEN", + "password": "WATSONX_PASSWORD", + "username": "WATSONX_USERNAME", + "instance_id": "WATSONX_INSTANCE_ID", + } + """ + return { + "url": "WATSONX_URL", + "apikey": "WATSONX_APIKEY", + "token": "WATSONX_TOKEN", + "password": "WATSONX_PASSWORD", + "username": "WATSONX_USERNAME", + "instance_id": "WATSONX_INSTANCE_ID", + } + + @model_validator(mode="after") + def validate_environment(self) -> Self: + """Validate that credentials and python package exists in environment.""" + if isinstance(self.watsonx_client, APIClient): + watsonx_rerank = Rerank( + model_id=self.model_id, + params=self.params, + api_client=self.watsonx_client, + project_id=self.project_id, + space_id=self.space_id, + verify=self.verify, + ) + self.watsonx_rerank = watsonx_rerank + + else: + check_for_attribute(self.url, "url", "WATSONX_URL") + + if "cloud.ibm.com" in self.url.get_secret_value(): + check_for_attribute(self.apikey, "apikey", "WATSONX_APIKEY") + else: + if not self.token and not self.password and not self.apikey: + raise ValueError( + "Did not find 'token', 'password' or 'apikey'," + " please add an environment variable" + " `WATSONX_TOKEN`, 'WATSONX_PASSWORD' or 'WATSONX_APIKEY' " + "which contains it," + " or pass 'token', 'password' or 'apikey'" + " as a named parameter." + ) + elif self.token: + check_for_attribute(self.token, "token", "WATSONX_TOKEN") + elif self.password: + check_for_attribute(self.password, "password", "WATSONX_PASSWORD") + check_for_attribute(self.username, "username", "WATSONX_USERNAME") + elif self.apikey: + check_for_attribute(self.apikey, "apikey", "WATSONX_APIKEY") + check_for_attribute(self.username, "username", "WATSONX_USERNAME") + + if not self.instance_id: + check_for_attribute( + self.instance_id, "instance_id", "WATSONX_INSTANCE_ID" + ) + + credentials = Credentials( + url=self.url.get_secret_value() if self.url else None, + api_key=self.apikey.get_secret_value() if self.apikey else None, + token=self.token.get_secret_value() if self.token else None, + password=self.password.get_secret_value() if self.password else None, + username=self.username.get_secret_value() if self.username else None, + instance_id=self.instance_id.get_secret_value() + if self.instance_id + else None, + version=self.version.get_secret_value() if self.version else None, + verify=self.verify, + ) + + watsonx_rerank = Rerank( + model_id=self.model_id, + credentials=credentials, + params=self.params, + project_id=self.project_id, + space_id=self.space_id, + verify=self.verify, + ) + self.watsonx_rerank = watsonx_rerank + + return self + + def rerank( + self, + documents: Sequence[Union[str, Document, dict]], + query: str, + **kwargs: Any, + ) -> List[Dict[str, Any]]: + if len(documents) == 0: # to avoid empty api call + return [] + docs = [ + doc.page_content if isinstance(doc, Document) else doc for doc in documents + ] + params = extract_params(kwargs, self.params) + + results = self.watsonx_rerank.generate( + query=query, inputs=docs, **(kwargs | {"params": params}) + ) + result_dicts = [] + for res in results["results"]: + result_dicts.append( + {"index": res.get("index"), "relevance_score": res.get("score")} + ) + return result_dicts + + def compress_documents( + self, + documents: Sequence[Document], + query: str, + callbacks: Optional[Callbacks] = None, + **kwargs: Any, + ) -> Sequence[Document]: + """ + Compress documents using watsonx's rerank API. + + Args: + documents: A sequence of documents to compress. + query: The query to use for compressing the documents. + callbacks: Callbacks to run during the compression process. + + Returns: + A sequence of compressed documents. + """ + compressed = [] + for res in self.rerank(documents, query, **kwargs): + doc = documents[res["index"]] + doc_copy = Document(doc.page_content, metadata=deepcopy(doc.metadata)) + doc_copy.metadata["relevance_score"] = res["relevance_score"] + compressed.append(doc_copy) + return compressed diff --git a/libs/ibm/langchain_ibm/utils.py b/libs/ibm/langchain_ibm/utils.py index 6e340d9..49a764a 100644 --- a/libs/ibm/langchain_ibm/utils.py +++ b/libs/ibm/langchain_ibm/utils.py @@ -1,3 +1,6 @@ +from typing import Any, Dict, Optional, Union + +from ibm_watsonx_ai.foundation_models.schema import BaseSchema # type: ignore from pydantic import SecretStr @@ -8,3 +11,20 @@ def check_for_attribute(value: SecretStr | None, key: str, env_key: str) -> None f" `{env_key}` which contains it, or pass" f" `{key}` as a named parameter." ) + + +def extract_params( + kwargs: Dict[str, Any], + default_params: Optional[Union[BaseSchema, Dict[str, Any]]] = None, +) -> Dict[str, Any]: + if kwargs.get("params") is not None: + params = kwargs.pop("params") + elif default_params is not None: + params = default_params + else: + params = None + + if isinstance(params, BaseSchema): + params = params.to_dict() + + return params or {} diff --git a/libs/ibm/poetry.lock b/libs/ibm/poetry.lock index 46a6e02..4162223 100644 --- a/libs/ibm/poetry.lock +++ b/libs/ibm/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "anyio" -version = "4.6.2" +version = "4.6.2.post1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "anyio-4.6.2-py3-none-any.whl", hash = "sha256:6caec6b1391f6f6d7b2ef2258d2902d36753149f67478f7df4be8e54d03a8f54"}, - {file = "anyio-4.6.2.tar.gz", hash = "sha256:f72a7bb3dd0752b3bd8b17a844a019d7fbf6ae218c588f4f9ba1b2f600b12347"}, + {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, + {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, ] [package.dependencies] @@ -188,73 +188,73 @@ files = [ [[package]] name = "coverage" -version = "7.6.3" +version = "7.6.4" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" files = [ - {file = "coverage-7.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6da42bbcec130b188169107ecb6ee7bd7b4c849d24c9370a0c884cf728d8e976"}, - {file = "coverage-7.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c222958f59b0ae091f4535851cbb24eb57fc0baea07ba675af718fb5302dddb2"}, - {file = "coverage-7.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab84a8b698ad5a6c365b08061920138e7a7dd9a04b6feb09ba1bfae68346ce6d"}, - {file = "coverage-7.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70a6756ce66cd6fe8486c775b30889f0dc4cb20c157aa8c35b45fd7868255c5c"}, - {file = "coverage-7.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c2e6fa98032fec8282f6b27e3f3986c6e05702828380618776ad794e938f53a"}, - {file = "coverage-7.6.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:921fbe13492caf6a69528f09d5d7c7d518c8d0e7b9f6701b7719715f29a71e6e"}, - {file = "coverage-7.6.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6d99198203f0b9cb0b5d1c0393859555bc26b548223a769baf7e321a627ed4fc"}, - {file = "coverage-7.6.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:87cd2e29067ea397a47e352efb13f976eb1b03e18c999270bb50589323294c6e"}, - {file = "coverage-7.6.3-cp310-cp310-win32.whl", hash = "sha256:a3328c3e64ea4ab12b85999eb0779e6139295bbf5485f69d42cf794309e3d007"}, - {file = "coverage-7.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:bca4c8abc50d38f9773c1ec80d43f3768df2e8576807d1656016b9d3eeaa96fd"}, - {file = "coverage-7.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c51ef82302386d686feea1c44dbeef744585da16fcf97deea2a8d6c1556f519b"}, - {file = "coverage-7.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ca37993206402c6c35dc717f90d4c8f53568a8b80f0bf1a1b2b334f4d488fba"}, - {file = "coverage-7.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c77326300b839c44c3e5a8fe26c15b7e87b2f32dfd2fc9fee1d13604347c9b38"}, - {file = "coverage-7.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e484e479860e00da1f005cd19d1c5d4a813324e5951319ac3f3eefb497cc549"}, - {file = "coverage-7.6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c6c0f4d53ef603397fc894a895b960ecd7d44c727df42a8d500031716d4e8d2"}, - {file = "coverage-7.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:37be7b5ea3ff5b7c4a9db16074dc94523b5f10dd1f3b362a827af66a55198175"}, - {file = "coverage-7.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:43b32a06c47539fe275106b376658638b418c7cfdfff0e0259fbf877e845f14b"}, - {file = "coverage-7.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ee77c7bef0724165e795b6b7bf9c4c22a9b8468a6bdb9c6b4281293c6b22a90f"}, - {file = "coverage-7.6.3-cp311-cp311-win32.whl", hash = "sha256:43517e1f6b19f610a93d8227e47790722c8bf7422e46b365e0469fc3d3563d97"}, - {file = "coverage-7.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:04f2189716e85ec9192df307f7c255f90e78b6e9863a03223c3b998d24a3c6c6"}, - {file = "coverage-7.6.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27bd5f18d8f2879e45724b0ce74f61811639a846ff0e5c0395b7818fae87aec6"}, - {file = "coverage-7.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d546cfa78844b8b9c1c0533de1851569a13f87449897bbc95d698d1d3cb2a30f"}, - {file = "coverage-7.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9975442f2e7a5cfcf87299c26b5a45266ab0696348420049b9b94b2ad3d40234"}, - {file = "coverage-7.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:583049c63106c0555e3ae3931edab5669668bbef84c15861421b94e121878d3f"}, - {file = "coverage-7.6.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2341a78ae3a5ed454d524206a3fcb3cec408c2a0c7c2752cd78b606a2ff15af4"}, - {file = "coverage-7.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a4fb91d5f72b7e06a14ff4ae5be625a81cd7e5f869d7a54578fc271d08d58ae3"}, - {file = "coverage-7.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e279f3db904e3b55f520f11f983cc8dc8a4ce9b65f11692d4718ed021ec58b83"}, - {file = "coverage-7.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aa23ce39661a3e90eea5f99ec59b763b7d655c2cada10729ed920a38bfc2b167"}, - {file = "coverage-7.6.3-cp312-cp312-win32.whl", hash = "sha256:52ac29cc72ee7e25ace7807249638f94c9b6a862c56b1df015d2b2e388e51dbd"}, - {file = "coverage-7.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:40e8b1983080439d4802d80b951f4a93d991ef3261f69e81095a66f86cf3c3c6"}, - {file = "coverage-7.6.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9134032f5aa445ae591c2ba6991d10136a1f533b1d2fa8f8c21126468c5025c6"}, - {file = "coverage-7.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:99670790f21a96665a35849990b1df447993880bb6463a0a1d757897f30da929"}, - {file = "coverage-7.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc7d6b380ca76f5e817ac9eef0c3686e7834c8346bef30b041a4ad286449990"}, - {file = "coverage-7.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7b26757b22faf88fcf232f5f0e62f6e0fd9e22a8a5d0d5016888cdfe1f6c1c4"}, - {file = "coverage-7.6.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c59d6a4a4633fad297f943c03d0d2569867bd5372eb5684befdff8df8522e39"}, - {file = "coverage-7.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f263b18692f8ed52c8de7f40a0751e79015983dbd77b16906e5b310a39d3ca21"}, - {file = "coverage-7.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:79644f68a6ff23b251cae1c82b01a0b51bc40c8468ca9585c6c4b1aeee570e0b"}, - {file = "coverage-7.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:71967c35828c9ff94e8c7d405469a1fb68257f686bca7c1ed85ed34e7c2529c4"}, - {file = "coverage-7.6.3-cp313-cp313-win32.whl", hash = "sha256:e266af4da2c1a4cbc6135a570c64577fd3e6eb204607eaff99d8e9b710003c6f"}, - {file = "coverage-7.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:ea52bd218d4ba260399a8ae4bb6b577d82adfc4518b93566ce1fddd4a49d1dce"}, - {file = "coverage-7.6.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8d4c6ea0f498c7c79111033a290d060c517853a7bcb2f46516f591dab628ddd3"}, - {file = "coverage-7.6.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:331b200ad03dbaa44151d74daeb7da2cf382db424ab923574f6ecca7d3b30de3"}, - {file = "coverage-7.6.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54356a76b67cf8a3085818026bb556545ebb8353951923b88292556dfa9f812d"}, - {file = "coverage-7.6.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebec65f5068e7df2d49466aab9128510c4867e532e07cb6960075b27658dca38"}, - {file = "coverage-7.6.3-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d33a785ea8354c480515e781554d3be582a86297e41ccbea627a5c632647f2cd"}, - {file = "coverage-7.6.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f7ddb920106bbbbcaf2a274d56f46956bf56ecbde210d88061824a95bdd94e92"}, - {file = "coverage-7.6.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:70d24936ca6c15a3bbc91ee9c7fc661132c6f4c9d42a23b31b6686c05073bde5"}, - {file = "coverage-7.6.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c30e42ea11badb147f0d2e387115b15e2bd8205a5ad70d6ad79cf37f6ac08c91"}, - {file = "coverage-7.6.3-cp313-cp313t-win32.whl", hash = "sha256:365defc257c687ce3e7d275f39738dcd230777424117a6c76043459db131dd43"}, - {file = "coverage-7.6.3-cp313-cp313t-win_amd64.whl", hash = "sha256:23bb63ae3f4c645d2d82fa22697364b0046fbafb6261b258a58587441c5f7bd0"}, - {file = "coverage-7.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:da29ceabe3025a1e5a5aeeb331c5b1af686daab4ff0fb4f83df18b1180ea83e2"}, - {file = "coverage-7.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df8c05a0f574d480947cba11b947dc41b1265d721c3777881da2fb8d3a1ddfba"}, - {file = "coverage-7.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec1e3b40b82236d100d259854840555469fad4db64f669ab817279eb95cd535c"}, - {file = "coverage-7.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4adeb878a374126f1e5cf03b87f66279f479e01af0e9a654cf6d1509af46c40"}, - {file = "coverage-7.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43d6a66e33b1455b98fc7312b124296dad97a2e191c80320587234a77b1b736e"}, - {file = "coverage-7.6.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1990b1f4e2c402beb317840030bb9f1b6a363f86e14e21b4212e618acdfce7f6"}, - {file = "coverage-7.6.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:12f9515d875859faedb4144fd38694a761cd2a61ef9603bf887b13956d0bbfbb"}, - {file = "coverage-7.6.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99ded130555c021d99729fabd4ddb91a6f4cc0707df4b1daf912c7850c373b13"}, - {file = "coverage-7.6.3-cp39-cp39-win32.whl", hash = "sha256:c3a79f56dee9136084cf84a6c7c4341427ef36e05ae6415bf7d787c96ff5eaa3"}, - {file = "coverage-7.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:aac7501ae73d4a02f4b7ac8fcb9dc55342ca98ffb9ed9f2dfb8a25d53eda0e4d"}, - {file = "coverage-7.6.3-pp39.pp310-none-any.whl", hash = "sha256:b9853509b4bf57ba7b1f99b9d866c422c9c5248799ab20e652bbb8a184a38181"}, - {file = "coverage-7.6.3.tar.gz", hash = "sha256:bb7d5fe92bd0dc235f63ebe9f8c6e0884f7360f88f3411bfed1350c872ef2054"}, + {file = "coverage-7.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07"}, + {file = "coverage-7.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0"}, + {file = "coverage-7.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72"}, + {file = "coverage-7.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51"}, + {file = "coverage-7.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491"}, + {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b"}, + {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea"}, + {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a"}, + {file = "coverage-7.6.4-cp310-cp310-win32.whl", hash = "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa"}, + {file = "coverage-7.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172"}, + {file = "coverage-7.6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b"}, + {file = "coverage-7.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25"}, + {file = "coverage-7.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546"}, + {file = "coverage-7.6.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b"}, + {file = "coverage-7.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e"}, + {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718"}, + {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db"}, + {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522"}, + {file = "coverage-7.6.4-cp311-cp311-win32.whl", hash = "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf"}, + {file = "coverage-7.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19"}, + {file = "coverage-7.6.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2"}, + {file = "coverage-7.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117"}, + {file = "coverage-7.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613"}, + {file = "coverage-7.6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27"}, + {file = "coverage-7.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52"}, + {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2"}, + {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1"}, + {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5"}, + {file = "coverage-7.6.4-cp312-cp312-win32.whl", hash = "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17"}, + {file = "coverage-7.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08"}, + {file = "coverage-7.6.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9"}, + {file = "coverage-7.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba"}, + {file = "coverage-7.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c"}, + {file = "coverage-7.6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06"}, + {file = "coverage-7.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f"}, + {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b"}, + {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21"}, + {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a"}, + {file = "coverage-7.6.4-cp313-cp313-win32.whl", hash = "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e"}, + {file = "coverage-7.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963"}, + {file = "coverage-7.6.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f"}, + {file = "coverage-7.6.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806"}, + {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11"}, + {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3"}, + {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a"}, + {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc"}, + {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70"}, + {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef"}, + {file = "coverage-7.6.4-cp313-cp313t-win32.whl", hash = "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e"}, + {file = "coverage-7.6.4-cp313-cp313t-win_amd64.whl", hash = "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1"}, + {file = "coverage-7.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3"}, + {file = "coverage-7.6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c"}, + {file = "coverage-7.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076"}, + {file = "coverage-7.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376"}, + {file = "coverage-7.6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0"}, + {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858"}, + {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111"}, + {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901"}, + {file = "coverage-7.6.4-cp39-cp39-win32.whl", hash = "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09"}, + {file = "coverage-7.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f"}, + {file = "coverage-7.6.4-pp39.pp310-none-any.whl", hash = "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e"}, + {file = "coverage-7.6.4.tar.gz", hash = "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73"}, ] [package.dependencies] @@ -350,57 +350,57 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "ibm-cos-sdk" -version = "2.13.5" +version = "2.13.6" description = "IBM SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "ibm-cos-sdk-2.13.5.tar.gz", hash = "sha256:1aff7f9863ac9072a3db2f0053bec99478b26f3fb5fa797ce96a15bbb13cd40e"}, + {file = "ibm-cos-sdk-2.13.6.tar.gz", hash = "sha256:171cf2ae4ab662a4b8ab58dcf4ac994b0577d6c92d78490295fd7704a83978f6"}, ] [package.dependencies] -ibm-cos-sdk-core = "2.13.5" -ibm-cos-sdk-s3transfer = "2.13.5" +ibm-cos-sdk-core = "2.13.6" +ibm-cos-sdk-s3transfer = "2.13.6" jmespath = ">=0.10.0,<=1.0.1" [[package]] name = "ibm-cos-sdk-core" -version = "2.13.5" +version = "2.13.6" description = "Low-level, data-driven core of IBM SDK for Python" optional = false python-versions = ">=3.6" files = [ - {file = "ibm-cos-sdk-core-2.13.5.tar.gz", hash = "sha256:d3a99d8b06b3f8c00b1a9501f85538d592463e63ddf8cec32672ab5a0b107b83"}, + {file = "ibm-cos-sdk-core-2.13.6.tar.gz", hash = "sha256:dd41fb789eeb65546501afabcd50e78846ab4513b6ad4042e410b6a14ff88413"}, ] [package.dependencies] jmespath = ">=0.10.0,<=1.0.1" python-dateutil = ">=2.9.0,<3.0.0" -requests = ">=2.32.3,<3.0" -urllib3 = {version = ">=1.26.18,<2.2", markers = "python_version >= \"3.10\""} +requests = ">=2.32.0,<2.32.3" +urllib3 = ">=1.26.18,<3" [[package]] name = "ibm-cos-sdk-s3transfer" -version = "2.13.5" +version = "2.13.6" description = "IBM S3 Transfer Manager" optional = false python-versions = ">=3.8" files = [ - {file = "ibm-cos-sdk-s3transfer-2.13.5.tar.gz", hash = "sha256:9649b1f2201c6de96ff5a6b5a3686de3a809e6ef3b8b12c7c4f2f7ce72da7749"}, + {file = "ibm-cos-sdk-s3transfer-2.13.6.tar.gz", hash = "sha256:e0acce6f380c47d11e07c6765b684b4ababbf5c66cc0503bc246469a1e2b9790"}, ] [package.dependencies] -ibm-cos-sdk-core = "2.13.5" +ibm-cos-sdk-core = "2.13.6" [[package]] name = "ibm-watsonx-ai" -version = "1.1.14" +version = "1.1.16" description = "IBM watsonx.ai API Client" optional = false python-versions = ">=3.10" files = [ - {file = "ibm_watsonx_ai-1.1.14-py3-none-any.whl", hash = "sha256:3b711dd4eb96a67ebfa406d5de115bf51e74b8bd5b58e0d80bd7cb7aebc11155"}, - {file = "ibm_watsonx_ai-1.1.14.tar.gz", hash = "sha256:746d838370b5c07e2591082530ff8ed232a2ef01a530b214da32367483deafa8"}, + {file = "ibm_watsonx_ai-1.1.16-py3-none-any.whl", hash = "sha256:c703adda2588c85606f74c230afe3ce31202815de369301df19f14ce21bd093a"}, + {file = "ibm_watsonx_ai-1.1.16.tar.gz", hash = "sha256:ab79ed5dedd57fd574c5c6c5ceca50a89b8423562646255c910ed74a8d8811a5"}, ] [package.dependencies] @@ -420,7 +420,7 @@ fl-crypto = ["pyhelayers (==1.5.0.3)"] fl-crypto-rt24-1 = ["pyhelayers (==1.5.3.1)"] fl-rt23-1-py3-10 = ["GPUtil", "cryptography (==42.0.5)", "ddsketch (==2.0.4)", "diffprivlib (==0.5.1)", "environs (==9.5.0)", "gym", "image (==1.5.33)", "joblib (==1.1.1)", "lz4", "msgpack (==1.0.7)", "msgpack-numpy (==0.4.8)", "numcompress (==0.1.2)", "numpy (==1.23.5)", "pandas (==1.5.3)", "parse (==1.19.0)", "pathlib2 (==2.3.6)", "protobuf (==4.22.1)", "psutil", "pyYAML (==6.0.1)", "pytest (==6.2.5)", "requests (==2.32.3)", "scikit-learn (==1.1.1)", "scipy (==1.10.1)", "setproctitle", "skops (==0.9.0)", "skorch (==0.12.0)", "tabulate (==0.8.9)", "tensorflow (==2.12.0)", "torch (==2.0.1)", "websockets (==10.1)"] fl-rt24-1-py3-11 = ["GPUtil", "cryptography (==42.0.5)", "ddsketch (==2.0.4)", "diffprivlib (==0.5.1)", "environs (==9.5.0)", "gym", "image (==1.5.33)", "joblib (==1.3.2)", "lz4", "msgpack (==1.0.7)", "msgpack-numpy (==0.4.8)", "numcompress (==0.1.2)", "numpy (==1.26.4)", "pandas (==2.1.4)", "parse (==1.19.0)", "pathlib2 (==2.3.6)", "protobuf (==4.22.1)", "psutil", "pyYAML (==6.0.1)", "pytest (==6.2.5)", "requests (==2.32.3)", "scikit-learn (==1.3.0)", "scipy (==1.11.4)", "setproctitle", "skops (==0.9.0)", "skorch (==0.12.0)", "tabulate (==0.8.9)", "tensorflow (==2.14.1)", "torch (==2.1.2)", "websockets (==10.1)"] -rag = ["beautifulsoup4 (==4.12.3)", "grpcio (>=1.60.0)", "langchain (>=0.2.15,<0.3)", "langchain-chroma (==0.1.1)", "langchain-community (>=0.2.4,<0.3)", "langchain-core (>=0.2.37,<0.3)", "langchain-elasticsearch (==0.2.2)", "langchain-ibm", "langchain-milvus (==0.1.1)", "pypdf (==4.2.0)", "python-docx (==1.1.2)"] +rag = ["beautifulsoup4 (==4.12.3)", "grpcio (>=1.60.0)", "langchain (>=0.2.15,<0.3)", "langchain-chroma (==0.1.1)", "langchain-community (>=0.2.4,<0.3)", "langchain-core (>=0.2.37,<0.3)", "langchain-elasticsearch (==0.2.2)", "langchain-ibm", "langchain-milvus (==0.1.1)", "markdown (==3.4.1)", "pypdf (==4.2.0)", "python-docx (==1.1.2)"] [[package]] name = "idna" @@ -508,7 +508,7 @@ files = [ [[package]] name = "langchain-core" -version = "0.3.10" +version = "0.3.13" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.9,<4.0" @@ -531,7 +531,7 @@ typing-extensions = ">=4.7" type = "git" url = "https://github.com/langchain-ai/langchain.git" reference = "HEAD" -resolved_reference = "2197958366b527df23adbf12bf6578e4cd5e002c" +resolved_reference = "94e5765416037b9b90a27603cfda36cbe86bce71" subdirectory = "libs/core" [[package]] @@ -553,18 +553,18 @@ syrupy = "^4" type = "git" url = "https://github.com/langchain-ai/langchain.git" reference = "HEAD" -resolved_reference = "2197958366b527df23adbf12bf6578e4cd5e002c" +resolved_reference = "94e5765416037b9b90a27603cfda36cbe86bce71" subdirectory = "libs/standard-tests" [[package]] name = "langsmith" -version = "0.1.134" +version = "0.1.137" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.134-py3-none-any.whl", hash = "sha256:ada98ad80ef38807725f32441a472da3dd28394010877751f48f458d3289da04"}, - {file = "langsmith-0.1.134.tar.gz", hash = "sha256:23abee3b508875a0e63c602afafffc02442a19cfd88f9daae05b3e9054fd6b61"}, + {file = "langsmith-0.1.137-py3-none-any.whl", hash = "sha256:4256d5c61133749890f7b5c88321dbb133ce0f440c621ea28e76513285859b81"}, + {file = "langsmith-0.1.137.tar.gz", hash = "sha256:56cdfcc6c74cb20a3f437d5bd144feb5bf93f54c5a2918d1e568cbd084a372d4"}, ] [package.dependencies] @@ -593,43 +593,43 @@ six = ">=1.10.0" [[package]] name = "mypy" -version = "1.12.0" +version = "1.13.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4397081e620dc4dc18e2f124d5e1d2c288194c2c08df6bdb1db31c38cd1fe1ed"}, - {file = "mypy-1.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:684a9c508a283f324804fea3f0effeb7858eb03f85c4402a967d187f64562469"}, - {file = "mypy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cabe4cda2fa5eca7ac94854c6c37039324baaa428ecbf4de4567279e9810f9e"}, - {file = "mypy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:060a07b10e999ac9e7fa249ce2bdcfa9183ca2b70756f3bce9df7a92f78a3c0a"}, - {file = "mypy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:0eff042d7257f39ba4ca06641d110ca7d2ad98c9c1fb52200fe6b1c865d360ff"}, - {file = "mypy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b86de37a0da945f6d48cf110d5206c5ed514b1ca2614d7ad652d4bf099c7de7"}, - {file = "mypy-1.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20c7c5ce0c1be0b0aea628374e6cf68b420bcc772d85c3c974f675b88e3e6e57"}, - {file = "mypy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a64ee25f05fc2d3d8474985c58042b6759100a475f8237da1f4faf7fcd7e6309"}, - {file = "mypy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:faca7ab947c9f457a08dcb8d9a8664fd438080e002b0fa3e41b0535335edcf7f"}, - {file = "mypy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:5bc81701d52cc8767005fdd2a08c19980de9ec61a25dbd2a937dfb1338a826f9"}, - {file = "mypy-1.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8462655b6694feb1c99e433ea905d46c478041a8b8f0c33f1dab00ae881b2164"}, - {file = "mypy-1.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:923ea66d282d8af9e0f9c21ffc6653643abb95b658c3a8a32dca1eff09c06475"}, - {file = "mypy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ebf9e796521f99d61864ed89d1fb2926d9ab6a5fab421e457cd9c7e4dd65aa9"}, - {file = "mypy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e478601cc3e3fa9d6734d255a59c7a2e5c2934da4378f3dd1e3411ea8a248642"}, - {file = "mypy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:c72861b7139a4f738344faa0e150834467521a3fba42dc98264e5aa9507dd601"}, - {file = "mypy-1.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52b9e1492e47e1790360a43755fa04101a7ac72287b1a53ce817f35899ba0521"}, - {file = "mypy-1.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:48d3e37dd7d9403e38fa86c46191de72705166d40b8c9f91a3de77350daa0893"}, - {file = "mypy-1.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f106db5ccb60681b622ac768455743ee0e6a857724d648c9629a9bd2ac3f721"}, - {file = "mypy-1.12.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:233e11b3f73ee1f10efada2e6da0f555b2f3a5316e9d8a4a1224acc10e7181d3"}, - {file = "mypy-1.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:4ae8959c21abcf9d73aa6c74a313c45c0b5a188752bf37dace564e29f06e9c1b"}, - {file = "mypy-1.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eafc1b7319b40ddabdc3db8d7d48e76cfc65bbeeafaa525a4e0fa6b76175467f"}, - {file = "mypy-1.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9b9ce1ad8daeb049c0b55fdb753d7414260bad8952645367e70ac91aec90e07e"}, - {file = "mypy-1.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfe012b50e1491d439172c43ccb50db66d23fab714d500b57ed52526a1020bb7"}, - {file = "mypy-1.12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c40658d4fa1ab27cb53d9e2f1066345596af2f8fe4827defc398a09c7c9519b"}, - {file = "mypy-1.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:dee78a8b9746c30c1e617ccb1307b351ded57f0de0d287ca6276378d770006c0"}, - {file = "mypy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b5df6c8a8224f6b86746bda716bbe4dbe0ce89fd67b1fa4661e11bfe38e8ec8"}, - {file = "mypy-1.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5feee5c74eb9749e91b77f60b30771563327329e29218d95bedbe1257e2fe4b0"}, - {file = "mypy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:77278e8c6ffe2abfba6db4125de55f1024de9a323be13d20e4f73b8ed3402bd1"}, - {file = "mypy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dcfb754dea911039ac12434d1950d69a2f05acd4d56f7935ed402be09fad145e"}, - {file = "mypy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:06de0498798527451ffb60f68db0d368bd2bae2bbfb5237eae616d4330cc87aa"}, - {file = "mypy-1.12.0-py3-none-any.whl", hash = "sha256:fd313226af375d52e1e36c383f39bf3836e1f192801116b31b090dfcd3ec5266"}, - {file = "mypy-1.12.0.tar.gz", hash = "sha256:65a22d87e757ccd95cbbf6f7e181e6caa87128255eb2b6be901bb71b26d8a99d"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, ] [package.dependencies] @@ -639,6 +639,7 @@ typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] reports = ["lxml"] @@ -701,68 +702,69 @@ files = [ [[package]] name = "orjson" -version = "3.10.7" +version = "3.10.10" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, - {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, - {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, - {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, - {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, - {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, - {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, - {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, - {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, - {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, - {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, - {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, - {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, - {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, - {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, - {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, - {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, - {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, - {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, - {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, - {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, - {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, - {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, - {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, - {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, - {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, - {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, - {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, - {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, - {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, - {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, - {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, + {file = "orjson-3.10.10-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b788a579b113acf1c57e0a68e558be71d5d09aa67f62ca1f68e01117e550a998"}, + {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:804b18e2b88022c8905bb79bd2cbe59c0cd014b9328f43da8d3b28441995cda4"}, + {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9972572a1d042ec9ee421b6da69f7cc823da5962237563fa548ab17f152f0b9b"}, + {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc6993ab1c2ae7dd0711161e303f1db69062955ac2668181bfdf2dd410e65258"}, + {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d78e4cacced5781b01d9bc0f0cd8b70b906a0e109825cb41c1b03f9c41e4ce86"}, + {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6eb2598df518281ba0cbc30d24c5b06124ccf7e19169e883c14e0831217a0bc"}, + {file = "orjson-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23776265c5215ec532de6238a52707048401a568f0fa0d938008e92a147fe2c7"}, + {file = "orjson-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8cc2a654c08755cef90b468ff17c102e2def0edd62898b2486767204a7f5cc9c"}, + {file = "orjson-3.10.10-cp310-none-win32.whl", hash = "sha256:081b3fc6a86d72efeb67c13d0ea7c030017bd95f9868b1e329a376edc456153b"}, + {file = "orjson-3.10.10-cp310-none-win_amd64.whl", hash = "sha256:ff38c5fb749347768a603be1fb8a31856458af839f31f064c5aa74aca5be9efe"}, + {file = "orjson-3.10.10-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:879e99486c0fbb256266c7c6a67ff84f46035e4f8749ac6317cc83dacd7f993a"}, + {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019481fa9ea5ff13b5d5d95e6fd5ab25ded0810c80b150c2c7b1cc8660b662a7"}, + {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0dd57eff09894938b4c86d4b871a479260f9e156fa7f12f8cad4b39ea8028bb5"}, + {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dbde6d70cd95ab4d11ea8ac5e738e30764e510fc54d777336eec09bb93b8576c"}, + {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2625cb37b8fb42e2147404e5ff7ef08712099197a9cd38895006d7053e69d6"}, + {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbf3c20c6a7db69df58672a0d5815647ecf78c8e62a4d9bd284e8621c1fe5ccb"}, + {file = "orjson-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:75c38f5647e02d423807d252ce4528bf6a95bd776af999cb1fb48867ed01d1f6"}, + {file = "orjson-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:23458d31fa50ec18e0ec4b0b4343730928296b11111df5f547c75913714116b2"}, + {file = "orjson-3.10.10-cp311-none-win32.whl", hash = "sha256:2787cd9dedc591c989f3facd7e3e86508eafdc9536a26ec277699c0aa63c685b"}, + {file = "orjson-3.10.10-cp311-none-win_amd64.whl", hash = "sha256:6514449d2c202a75183f807bc755167713297c69f1db57a89a1ef4a0170ee269"}, + {file = "orjson-3.10.10-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8564f48f3620861f5ef1e080ce7cd122ee89d7d6dacf25fcae675ff63b4d6e05"}, + {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bf161a32b479034098c5b81f2608f09167ad2fa1c06abd4e527ea6bf4837a9"}, + {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:68b65c93617bcafa7f04b74ae8bc2cc214bd5cb45168a953256ff83015c6747d"}, + {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8e28406f97fc2ea0c6150f4c1b6e8261453318930b334abc419214c82314f85"}, + {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4d0d9fe174cc7a5bdce2e6c378bcdb4c49b2bf522a8f996aa586020e1b96cee"}, + {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3be81c42f1242cbed03cbb3973501fcaa2675a0af638f8be494eaf37143d999"}, + {file = "orjson-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:65f9886d3bae65be026219c0a5f32dbbe91a9e6272f56d092ab22561ad0ea33b"}, + {file = "orjson-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:730ed5350147db7beb23ddaf072f490329e90a1d059711d364b49fe352ec987b"}, + {file = "orjson-3.10.10-cp312-none-win32.whl", hash = "sha256:a8f4bf5f1c85bea2170800020d53a8877812892697f9c2de73d576c9307a8a5f"}, + {file = "orjson-3.10.10-cp312-none-win_amd64.whl", hash = "sha256:384cd13579a1b4cd689d218e329f459eb9ddc504fa48c5a83ef4889db7fd7a4f"}, + {file = "orjson-3.10.10-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44bffae68c291f94ff5a9b4149fe9d1bdd4cd0ff0fb575bcea8351d48db629a1"}, + {file = "orjson-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e27b4c6437315df3024f0835887127dac2a0a3ff643500ec27088d2588fa5ae1"}, + {file = "orjson-3.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca84df16d6b49325a4084fd8b2fe2229cb415e15c46c529f868c3387bb1339d"}, + {file = "orjson-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c14ce70e8f39bd71f9f80423801b5d10bf93d1dceffdecd04df0f64d2c69bc01"}, + {file = "orjson-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:24ac62336da9bda1bd93c0491eff0613003b48d3cb5d01470842e7b52a40d5b4"}, + {file = "orjson-3.10.10-cp313-none-win32.whl", hash = "sha256:eb0a42831372ec2b05acc9ee45af77bcaccbd91257345f93780a8e654efc75db"}, + {file = "orjson-3.10.10-cp313-none-win_amd64.whl", hash = "sha256:f0c4f37f8bf3f1075c6cc8dd8a9f843689a4b618628f8812d0a71e6968b95ffd"}, + {file = "orjson-3.10.10-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:829700cc18503efc0cf502d630f612884258020d98a317679cd2054af0259568"}, + {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0ceb5e0e8c4f010ac787d29ae6299846935044686509e2f0f06ed441c1ca949"}, + {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c25908eb86968613216f3db4d3003f1c45d78eb9046b71056ca327ff92bdbd4"}, + {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:218cb0bc03340144b6328a9ff78f0932e642199ac184dd74b01ad691f42f93ff"}, + {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2277ec2cea3775640dc81ab5195bb5b2ada2fe0ea6eee4677474edc75ea6785"}, + {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:848ea3b55ab5ccc9d7bbd420d69432628b691fba3ca8ae3148c35156cbd282aa"}, + {file = "orjson-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e3e67b537ac0c835b25b5f7d40d83816abd2d3f4c0b0866ee981a045287a54f3"}, + {file = "orjson-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:7948cfb909353fce2135dcdbe4521a5e7e1159484e0bb024c1722f272488f2b8"}, + {file = "orjson-3.10.10-cp38-none-win32.whl", hash = "sha256:78bee66a988f1a333dc0b6257503d63553b1957889c17b2c4ed72385cd1b96ae"}, + {file = "orjson-3.10.10-cp38-none-win_amd64.whl", hash = "sha256:f1d647ca8d62afeb774340a343c7fc023efacfd3a39f70c798991063f0c681dd"}, + {file = "orjson-3.10.10-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5a059afddbaa6dd733b5a2d76a90dbc8af790b993b1b5cb97a1176ca713b5df8"}, + {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f9b5c59f7e2a1a410f971c5ebc68f1995822837cd10905ee255f96074537ee6"}, + {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d5ef198bafdef4aa9d49a4165ba53ffdc0a9e1c7b6f76178572ab33118afea25"}, + {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf29ce0bb5d3320824ec3d1508652421000ba466abd63bdd52c64bcce9eb1fa"}, + {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dddd5516bcc93e723d029c1633ae79c4417477b4f57dad9bfeeb6bc0315e654a"}, + {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12f2003695b10817f0fa8b8fca982ed7f5761dcb0d93cff4f2f9f6709903fd7"}, + {file = "orjson-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:672f9874a8a8fb9bb1b771331d31ba27f57702c8106cdbadad8bda5d10bc1019"}, + {file = "orjson-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1dcbb0ca5fafb2b378b2c74419480ab2486326974826bbf6588f4dc62137570a"}, + {file = "orjson-3.10.10-cp39-none-win32.whl", hash = "sha256:d9bbd3a4b92256875cb058c3381b782649b9a3c68a4aa9a2fff020c2f9cfc1be"}, + {file = "orjson-3.10.10-cp39-none-win_amd64.whl", hash = "sha256:766f21487a53aee8524b97ca9582d5c6541b03ab6210fbaf10142ae2f3ced2aa"}, + {file = "orjson-3.10.10.tar.gz", hash = "sha256:37949383c4df7b4337ce82ee35b6d7471e55195efa7dcb45ab8226ceadb0fe3b"}, ] [[package]] @@ -1162,13 +1164,13 @@ files = [ [[package]] name = "requests" -version = "2.32.3" +version = "2.32.2" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, + {file = "requests-2.32.2-py3-none-any.whl", hash = "sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c"}, + {file = "requests-2.32.2.tar.gz", hash = "sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289"}, ] [package.dependencies] @@ -1300,13 +1302,13 @@ files = [ [[package]] name = "types-requests" -version = "2.32.0.20240914" +version = "2.32.0.20241016" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.32.0.20240914.tar.gz", hash = "sha256:2850e178db3919d9bf809e434eef65ba49d0e7e33ac92d588f4a5e295fffd405"}, - {file = "types_requests-2.32.0.20240914-py3-none-any.whl", hash = "sha256:59c2f673eb55f32a99b2894faf6020e1a9f4a402ad0f192bfee0b64469054310"}, + {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, + {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, ] [package.dependencies] @@ -1336,17 +1338,18 @@ files = [ [[package]] name = "urllib3" -version = "2.1.0" +version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] diff --git a/libs/ibm/pyproject.toml b/libs/ibm/pyproject.toml index 3237220..bb60464 100644 --- a/libs/ibm/pyproject.toml +++ b/libs/ibm/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langchain-ibm" -version = "0.3.1" +version = "0.3.2" description = "An integration package connecting IBM watsonx.ai and LangChain" authors = ["IBM"] readme = "README.md" diff --git a/libs/ibm/tests/integration_tests/test_chat_models.py b/libs/ibm/tests/integration_tests/test_chat_models.py index f37c4af..184d33a 100644 --- a/libs/ibm/tests/integration_tests/test_chat_models.py +++ b/libs/ibm/tests/integration_tests/test_chat_models.py @@ -27,6 +27,8 @@ MODEL_ID = "ibm/granite-34b-code-instruct" MODEL_ID_TOOL = "mistralai/mistral-large" +PARAMS_WITH_MAX_TOKENS = {"max_tokens": 20} + def test_01_generate_chat() -> None: chat = ChatWatsonx(model_id=MODEL_ID, url=URL, project_id=WX_PROJECT_ID) # type: ignore[arg-type] @@ -122,7 +124,12 @@ def test_01b_generate_chat_with_invoke_params() -> None: def test_02_generate_chat_with_few_inputs() -> None: - chat = ChatWatsonx(model_id=MODEL_ID, url=URL, project_id=WX_PROJECT_ID) # type: ignore[arg-type] + chat = ChatWatsonx( + model_id=MODEL_ID, + url=URL, # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + params=PARAMS_WITH_MAX_TOKENS, + ) message = HumanMessage(content="Hello") response = chat.generate([[message], [message]]) assert response @@ -131,7 +138,12 @@ def test_02_generate_chat_with_few_inputs() -> None: def test_03_generate_chat_with_few_various_inputs() -> None: - chat = ChatWatsonx(model_id=MODEL_ID, url=URL, project_id=WX_PROJECT_ID) # type: ignore[arg-type] + chat = ChatWatsonx( + model_id=MODEL_ID, + url=URL, # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + params=PARAMS_WITH_MAX_TOKENS, + ) system_message = SystemMessage(content="You are to chat with the user.") human_message = HumanMessage(content="Hello") response = chat.invoke([system_message, human_message]) @@ -142,7 +154,12 @@ def test_03_generate_chat_with_few_various_inputs() -> None: def test_05_generate_chat_with_stream() -> None: - chat = ChatWatsonx(model_id=MODEL_ID, url=URL, project_id=WX_PROJECT_ID) # type: ignore[arg-type] + chat = ChatWatsonx( + model_id=MODEL_ID, + url=URL, # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + params=PARAMS_WITH_MAX_TOKENS, + ) response = chat.stream("What's the weather in san francisco") for chunk in response: assert isinstance(chunk.content, str) @@ -154,6 +171,7 @@ def test_05a_invoke_chat_with_streaming() -> None: url=URL, # type: ignore[arg-type] project_id=WX_PROJECT_ID, streaming=True, + params=PARAMS_WITH_MAX_TOKENS, ) response = chat.invoke("What's the weather in san francisco") assert isinstance(response.content, str) @@ -185,6 +203,7 @@ def test_06_chain_invoke() -> None: model_id=MODEL_ID, url=URL, # type: ignore[arg-type] project_id=WX_PROJECT_ID, + params=PARAMS_WITH_MAX_TOKENS, ) system = "You are a helpful assistant." @@ -199,48 +218,18 @@ def test_06_chain_invoke() -> None: def test_10_chaining() -> None: - chat = ChatWatsonx(model_id=MODEL_ID, url=URL, project_id=WX_PROJECT_ID) # type: ignore[arg-type] - prompt = ChatPromptTemplate.from_messages( - [ - ( - "system", - "You are a helpful assistant that " - "translates {input_language} to {output_language}.", - ), - ("human", "{input}"), - ] - ) - chain = prompt | chat - - response = chain.invoke( - { - "input_language": "English", - "output_language": "German", - "input": "I love programming.", - } - ) - assert response - assert response.content - - -def test_11_chaining_with_params() -> None: - parameters = { - GenTextParamsMetaNames.DECODING_METHOD: "sample", - GenTextParamsMetaNames.MIN_NEW_TOKENS: 5, - GenTextParamsMetaNames.MAX_NEW_TOKENS: 10, - } chat = ChatWatsonx( model_id=MODEL_ID, url=URL, # type: ignore[arg-type] project_id=WX_PROJECT_ID, - params=parameters, + params=PARAMS_WITH_MAX_TOKENS, ) prompt = ChatPromptTemplate.from_messages( [ ( "system", - "You are a helpful assistant that translates " - "{input_language} to {output_language}.", + "You are a helpful assistant that " + "translates {input_language} to {output_language}.", ), ("human", "{input}"), ] diff --git a/libs/ibm/tests/integration_tests/test_chat_models_standard.py b/libs/ibm/tests/integration_tests/test_chat_models_standard.py index a845aec..99b57f8 100644 --- a/libs/ibm/tests/integration_tests/test_chat_models_standard.py +++ b/libs/ibm/tests/integration_tests/test_chat_models_standard.py @@ -13,13 +13,26 @@ URL = "https://us-south.ml.cloud.ibm.com" MODEL_ID = "mistralai/mistral-large" +MODEL_ID_IMAGE = "meta-llama/llama-3-2-11b-vision-instruct" -class TestWatsonxStandard(ChatModelIntegrationTests): +class TestChatWatsonxStandard(ChatModelIntegrationTests): @property def chat_model_class(self) -> Type[BaseChatModel]: return ChatWatsonx + @property + def has_tool_calling(self) -> bool: + return True + + @property + def returns_usage_metadata(self) -> bool: + return True + + @property + def supports_image_inputs(self) -> bool: + return True + @property def supported_usage_metadata_details( self, @@ -49,6 +62,12 @@ def chat_model_params(self) -> dict: "project_id": WX_PROJECT_ID, } + @pytest.mark.xfail(reason="Supported for vision model.") + def test_image_inputs(self, model: BaseChatModel) -> None: + model.watsonx_model._inference.model_id = MODEL_ID_IMAGE # type: ignore[attr-defined] + super().test_image_inputs(model) + model.watsonx_model._inference.model_id = MODEL_ID # type: ignore[attr-defined] + @pytest.mark.xfail(reason="Not implemented tool_choice as `any`.") def test_structured_few_shot_examples(self, model: BaseChatModel) -> None: super().test_structured_few_shot_examples(model) diff --git a/libs/ibm/tests/integration_tests/test_embeddings.py b/libs/ibm/tests/integration_tests/test_embeddings.py index 23ba79b..2af2b24 100644 --- a/libs/ibm/tests/integration_tests/test_embeddings.py +++ b/libs/ibm/tests/integration_tests/test_embeddings.py @@ -30,7 +30,55 @@ def test_01_generate_embed_documents() -> None: assert all(isinstance(el, float) for el in generate_embedding[0]) -def test_02_generate_embed_query() -> None: +def test_02_generate_embed_documents_with_param() -> None: + embed_params = { + EmbedTextParamsMetaNames.TRUNCATE_INPUT_TOKENS: 3, + } + watsonx_embedding = WatsonxEmbeddings( + model_id=MODEL_ID, + url=URL, # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + params=embed_params, + ) + generate_embedding = watsonx_embedding.embed_documents(texts=DOCUMENTS) + assert len(generate_embedding) == len(DOCUMENTS) + assert all(isinstance(el, float) for el in generate_embedding[0]) + + +def test_03_generate_embed_documents_with_param_in_method() -> None: + embed_params = { + EmbedTextParamsMetaNames.TRUNCATE_INPUT_TOKENS: 3, + } + watsonx_embedding = WatsonxEmbeddings( + model_id=MODEL_ID, + url=URL, # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + ) + generate_embedding = watsonx_embedding.embed_documents( + texts=DOCUMENTS, params=embed_params + ) + assert len(generate_embedding) == len(DOCUMENTS) + assert all(isinstance(el, float) for el in generate_embedding[0]) + + +def test_04_generate_embed_documents_with_param_and_concurrency_limit() -> None: + embed_params = { + EmbedTextParamsMetaNames.TRUNCATE_INPUT_TOKENS: 3, + } + watsonx_embedding = WatsonxEmbeddings( + model_id=MODEL_ID, + url=URL, # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + params=embed_params, + ) + generate_embedding = watsonx_embedding.embed_documents( + texts=DOCUMENTS, concurrency_limit=9 + ) + assert len(generate_embedding) == len(DOCUMENTS) + assert all(isinstance(el, float) for el in generate_embedding[0]) + + +def test_10_generate_embed_query() -> None: watsonx_embedding = WatsonxEmbeddings( model_id=MODEL_ID, url=URL, # type: ignore[arg-type] @@ -42,7 +90,24 @@ def test_02_generate_embed_query() -> None: ) -def test_03_generate_embed_documents_with_param() -> None: +def test_11_generate_embed_query_with_params() -> None: + embed_params = { + EmbedTextParamsMetaNames.TRUNCATE_INPUT_TOKENS: 3, + } + watsonx_embedding = WatsonxEmbeddings( + model_id=MODEL_ID, + url=URL, # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + ) + generate_embedding = watsonx_embedding.embed_query( + text=DOCUMENTS[0], params=embed_params + ) + assert isinstance(generate_embedding, list) and isinstance( + generate_embedding[0], float + ) + + +def test_12_generate_embed_query_with_params_and_concurrency_limit() -> None: embed_params = { EmbedTextParamsMetaNames.TRUNCATE_INPUT_TOKENS: 3, } @@ -52,12 +117,15 @@ def test_03_generate_embed_documents_with_param() -> None: project_id=WX_PROJECT_ID, params=embed_params, ) - generate_embedding = watsonx_embedding.embed_documents(texts=DOCUMENTS) - assert len(generate_embedding) == len(DOCUMENTS) - assert all(isinstance(el, float) for el in generate_embedding[0]) + generate_embedding = watsonx_embedding.embed_query( + text=DOCUMENTS[0], concurrency_limit=9 + ) + assert isinstance(generate_embedding, list) and isinstance( + generate_embedding[0], float + ) -def test_10_generate_embed_query_with_client_initialization() -> None: +def test_20_generate_embed_query_with_client_initialization() -> None: watsonx_client = APIClient( credentials={ "url": URL, diff --git a/libs/ibm/tests/integration_tests/test_embeddings_standard.py b/libs/ibm/tests/integration_tests/test_embeddings_standard.py new file mode 100644 index 0000000..ace9ff5 --- /dev/null +++ b/libs/ibm/tests/integration_tests/test_embeddings_standard.py @@ -0,0 +1,28 @@ +import os +from typing import Type + +from langchain_standard_tests.integration_tests import EmbeddingsIntegrationTests + +from langchain_ibm import WatsonxEmbeddings + +WX_APIKEY = os.environ.get("WATSONX_APIKEY", "") +WX_PROJECT_ID = os.environ.get("WATSONX_PROJECT_ID", "") + +URL = "https://us-south.ml.cloud.ibm.com" + +MODEL_ID = "ibm/slate-125m-english-rtrvr" + + +class TestWatsonxEmbeddingsStandard(EmbeddingsIntegrationTests): + @property + def embeddings_class(self) -> Type[WatsonxEmbeddings]: + return WatsonxEmbeddings + + @property + def embedding_model_params(self) -> dict: + return { + "model_id": MODEL_ID, + "url": URL, + "apikey": WX_APIKEY, + "project_id": WX_PROJECT_ID, + } diff --git a/libs/ibm/tests/integration_tests/test_llms.py b/libs/ibm/tests/integration_tests/test_llms.py index 5a8cfb7..bfc6d2b 100644 --- a/libs/ibm/tests/integration_tests/test_llms.py +++ b/libs/ibm/tests/integration_tests/test_llms.py @@ -34,11 +34,7 @@ def test_watsonxllm_invoke() -> None: def test_watsonxllm_invoke_with_params() -> None: - parameters = { - GenTextParamsMetaNames.DECODING_METHOD: "sample", - GenTextParamsMetaNames.MAX_NEW_TOKENS: 10, - GenTextParamsMetaNames.MIN_NEW_TOKENS: 5, - } + parameters = {GenTextParamsMetaNames.MAX_NEW_TOKENS: 4} watsonxllm = WatsonxLLM( model_id=MODEL_ID, @@ -46,10 +42,10 @@ def test_watsonxllm_invoke_with_params() -> None: project_id=WX_PROJECT_ID, params=parameters, ) - response = watsonxllm.invoke("What color sunflower is?") + response = watsonxllm.invoke("Write: 'ttttttttttttt'?") print(f"\nResponse: {response}") assert isinstance(response, str) - assert len(response) > 0 + assert 0 < len(response) < 5 def test_watsonxllm_invoke_with_params_2() -> None: @@ -112,6 +108,32 @@ def test_watsonxllm_invoke_with_params_4() -> None: assert len(response) > 0 +def test_watsonxllm_invoke_with_params_5_diff() -> None: + parameters_1 = { + GenTextParamsMetaNames.MAX_NEW_TOKENS: 5, + } + parameters_2 = { + GenTextParamsMetaNames.MAX_NEW_TOKENS: 10, + } + + watsonxllm = WatsonxLLM( + model_id=MODEL_ID, + url="https://us-south.ml.cloud.ibm.com", # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + params=parameters_1, + ) + response_1 = watsonxllm.invoke("Please write 'ttttttttttttttttttttttt'?") + print(f"\nResponse 1: {response_1}") + assert isinstance(response_1, str) + assert 3 < len(response_1) < 5 + response_2 = watsonxllm.invoke( + "Please write 'ttttttttttttttttttttttt'?", params=parameters_2 + ) + print(f"\nResponse 2: {response_2}") + assert isinstance(response_2, str) + assert 8 < len(response_2) < 10 + + def test_watsonxllm_generate() -> None: watsonxllm = WatsonxLLM( model_id=MODEL_ID, diff --git a/libs/ibm/tests/integration_tests/test_rerank.py b/libs/ibm/tests/integration_tests/test_rerank.py new file mode 100644 index 0000000..5e4a7d2 --- /dev/null +++ b/libs/ibm/tests/integration_tests/test_rerank.py @@ -0,0 +1,147 @@ +import os + +from ibm_watsonx_ai import APIClient # type: ignore +from ibm_watsonx_ai.foundation_models.schema import ( # type: ignore + RerankParameters, + RerankReturnOptions, +) +from langchain_core.documents import Document + +from langchain_ibm import WatsonxRerank + +WX_APIKEY = os.environ.get("WATSONX_APIKEY", "") +WX_PROJECT_ID = os.environ.get("WATSONX_PROJECT_ID", "") + +URL = "https://us-south.ml.cloud.ibm.com" + +MODEL_ID = "ibm/slate-125m-english-rtrvr" + + +def test_01_rerank_init() -> None: + wx_rerank = WatsonxRerank(model_id=MODEL_ID, url=URL, project_id=WX_PROJECT_ID) # type: ignore[arg-type] + assert isinstance(wx_rerank, WatsonxRerank) + + +def test_01_rerank_init_with_client() -> None: + wx_client = APIClient( + credentials={ + "url": URL, + "apikey": WX_APIKEY, + } + ) + wx_rerank = WatsonxRerank( + model_id=MODEL_ID, project_id=WX_PROJECT_ID, watsonx_client=wx_client + ) + assert isinstance(wx_rerank, WatsonxRerank) + + +def test_02_rerank_documents() -> None: + wx_rerank = WatsonxRerank(model_id=MODEL_ID, url=URL, project_id=WX_PROJECT_ID) # type: ignore[arg-type] + test_documents = [ + Document(page_content="This is a test document."), + Document(page_content="Another test document."), + ] + test_query = "Test query" + results = wx_rerank.rerank(test_documents, test_query) + assert len(results) == 2 + + +def test_02_rerank_documents_with_params() -> None: + params = RerankParameters(truncate_input_tokens=1) + test_documents = [ + Document(page_content="This is a test document."), + ] + test_query = "Test query" + + wx_rerank = WatsonxRerank( + model_id=MODEL_ID, + url=URL, # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + ) + + results_1 = wx_rerank.rerank(test_documents, test_query) + assert len(results_1) == 1 + + results_2 = wx_rerank.rerank(test_documents, test_query, params=params) + assert len(results_2) == 1 + + assert results_1[0]["relevance_score"] != results_2[0]["relevance_score"] + + +def test_03_compress_documents() -> None: + wx_rerank = WatsonxRerank( + model_id=MODEL_ID, + url=URL, # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + ) + doc_list = [ + "The Mediterranean diet emphasizes fish, olive oil, and vegetables" + ", believed to reduce chronic diseases.", + "Photosynthesis in plants converts light energy into glucose and " + "produces essential oxygen.", + "20th-century innovations, from radios to smartphones, centered " + "on electronic advancements.", + "Rivers provide water, irrigation, and habitat for aquatic species, " + "vital for ecosystems.", + "Apple’s conference call to discuss fourth fiscal quarter results and " + "business updates is scheduled for Thursday, November 2, 2023 at 2:00 " + "p.m. PT / 5:00 p.m. ET.", + "Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' " + "endure in literature.", + ] + documents = [Document(page_content=x) for x in doc_list] + + result = wx_rerank.compress_documents( + query="When is the Apple's conference call scheduled?", documents=documents + ) + assert len(doc_list) == len(result) + + +def test_04_compress_documents_with_param() -> None: + params_1 = RerankParameters( + truncate_input_tokens=1, return_options=RerankReturnOptions(inputs=True) + ) + params_2 = RerankParameters(truncate_input_tokens=2) + wx_rerank = WatsonxRerank( + model_id=MODEL_ID, + url=URL, # type: ignore[arg-type] + project_id=WX_PROJECT_ID, + params=params_1, + ) + doc_list = [ + "The Mediterranean diet emphasizes fish, olive oil, and vegetables" + ", believed to reduce chronic diseases.", + "Photosynthesis in plants converts light energy into glucose and " + "produces essential oxygen.", + "20th-century innovations, from radios to smartphones, centered " + "on electronic advancements.", + "Rivers provide water, irrigation, and habitat for aquatic species, " + "vital for ecosystems.", + "Apple’s conference call to discuss fourth fiscal quarter results and " + "business updates is scheduled for Thursday, November 2, 2023 at 2:00 " + "p.m. PT / 5:00 p.m. ET.", + "Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' " + "endure in literature.", + ] + documents = [Document(page_content=x) for x in doc_list] + + result_1 = wx_rerank.compress_documents( + query="When is the Apple's conference call scheduled?", documents=documents + ) + assert len(doc_list) == len(result_1) + result_2 = wx_rerank.compress_documents( + query="When is the Apple's conference call scheduled?", + documents=documents, + params=params_2, + ) + assert len(doc_list) == len(result_2) + + assert [ + el.metadata["relevance_score"] + for el in result_1 + if el.page_content.startswith("20th") + ][0] != [ + el.metadata["relevance_score"] + for el in result_2 + if el.page_content.startswith("20th") + ][0] diff --git a/libs/ibm/tests/unit_tests/test_embeddings_standard.py b/libs/ibm/tests/unit_tests/test_embeddings_standard.py new file mode 100644 index 0000000..7181d90 --- /dev/null +++ b/libs/ibm/tests/unit_tests/test_embeddings_standard.py @@ -0,0 +1,28 @@ +from typing import Type + +from ibm_watsonx_ai import APIClient, Credentials # type: ignore +from ibm_watsonx_ai.service_instance import ServiceInstance # type: ignore +from langchain_standard_tests.unit_tests.embeddings import EmbeddingsUnitTests + +from langchain_ibm import WatsonxEmbeddings + +client = APIClient.__new__(APIClient) +client.CLOUD_PLATFORM_SPACES = True +client.ICP_PLATFORM_SPACES = True +credentials = Credentials(api_key="api_key") +client.credentials = credentials +client.service_instance = ServiceInstance.__new__(ServiceInstance) +client.service_instance._credentials = credentials + + +class TestWatsonxEmbeddingsStandard(EmbeddingsUnitTests): + @property + def embeddings_class(self) -> Type[WatsonxEmbeddings]: + return WatsonxEmbeddings + + @property + def embedding_model_params(self) -> dict: + return { + "model_id": "ibm/granite-13b-instruct-v2", + "watsonx_client": client, + } diff --git a/libs/ibm/tests/unit_tests/test_imports.py b/libs/ibm/tests/unit_tests/test_imports.py index 7bdeb32..bd4594d 100644 --- a/libs/ibm/tests/unit_tests/test_imports.py +++ b/libs/ibm/tests/unit_tests/test_imports.py @@ -1,6 +1,6 @@ from langchain_ibm import __all__ -EXPECTED_ALL = ["WatsonxLLM", "WatsonxEmbeddings", "ChatWatsonx"] +EXPECTED_ALL = ["WatsonxLLM", "WatsonxEmbeddings", "ChatWatsonx", "WatsonxRerank"] def test_all_imports() -> None: diff --git a/libs/ibm/tests/unit_tests/test_rerank.py b/libs/ibm/tests/unit_tests/test_rerank.py new file mode 100644 index 0000000..38b58ca --- /dev/null +++ b/libs/ibm/tests/unit_tests/test_rerank.py @@ -0,0 +1,84 @@ +"""Test WatsonxLLM API wrapper.""" + +import os + +from langchain_ibm import WatsonxRerank + +os.environ.pop("WATSONX_APIKEY", None) +os.environ.pop("WATSONX_PROJECT_ID", None) + +MODEL_ID = "sample_rerank_model" + + +def test_initialize_watsonxllm_bad_path_without_url() -> None: + try: + WatsonxRerank( + model_id=MODEL_ID, + ) + except ValueError as e: + assert "url" in e.__str__() + assert "WATSONX_URL" in e.__str__() + + +def test_initialize_watsonxllm_cloud_bad_path() -> None: + try: + WatsonxRerank(model_id=MODEL_ID, url="https://us-south.ml.cloud.ibm.com") # type: ignore[arg-type] + except ValueError as e: + assert "apikey" in e.__str__() + assert "WATSONX_APIKEY" in e.__str__() + + +def test_initialize_watsonxllm_cpd_bad_path_without_all() -> None: + try: + WatsonxRerank( + model_id=MODEL_ID, + url="https://cpd-zen.apps.cpd48.cp.fyre.ibm.com", # type: ignore[arg-type] + ) + except ValueError as e: + assert ( + "apikey" in e.__str__() + and "password" in e.__str__() + and "token" in e.__str__() + ) + assert ( + "WATSONX_APIKEY" in e.__str__() + and "WATSONX_PASSWORD" in e.__str__() + and "WATSONX_TOKEN" in e.__str__() + ) + + +def test_initialize_watsonxllm_cpd_bad_path_password_without_username() -> None: + try: + WatsonxRerank( + model_id=MODEL_ID, + url="https://cpd-zen.apps.cpd48.cp.fyre.ibm.com", # type: ignore[arg-type] + password="test_password", # type: ignore[arg-type] + ) + except ValueError as e: + assert "username" in e.__str__() + assert "WATSONX_USERNAME" in e.__str__() + + +def test_initialize_watsonxllm_cpd_bad_path_apikey_without_username() -> None: + try: + WatsonxRerank( + model_id=MODEL_ID, + url="https://cpd-zen.apps.cpd48.cp.fyre.ibm.com", # type: ignore[arg-type] + apikey="test_apikey", # type: ignore[arg-type] + ) + except ValueError as e: + assert "username" in e.__str__() + assert "WATSONX_USERNAME" in e.__str__() + + +def test_initialize_watsonxllm_cpd_bad_path_without_instance_id() -> None: + try: + WatsonxRerank( + model_id=MODEL_ID, + url="https://cpd-zen.apps.cpd48.cp.fyre.ibm.com", # type: ignore[arg-type] + apikey="test_apikey", # type: ignore[arg-type] + username="test_user", # type: ignore[arg-type] + ) + except ValueError as e: + assert "instance_id" in e.__str__() + assert "WATSONX_INSTANCE_ID" in e.__str__()