From 364dc96ca0aac59974c5b419ad1f84e2435fc8cf Mon Sep 17 00:00:00 2001 From: Bagatur Date: Thu, 12 Sep 2024 09:37:27 -0700 Subject: [PATCH 01/30] start v0.3 migration --- libs/ai-endpoints/Makefile | 1 - .../docs/chat/nvidia_ai_endpoints.ipynb | 282 +----- .../langchain_nvidia_ai_endpoints/_common.py | 21 +- .../langchain_nvidia_ai_endpoints/_statics.py | 2 +- .../chat_models.py | 27 +- .../embeddings.py | 27 +- .../langchain_nvidia_ai_endpoints/llm.py | 14 +- .../reranking.py | 26 +- .../langchain_nvidia_ai_endpoints/tools.py | 2 +- libs/ai-endpoints/poetry.lock | 811 ++++++++++-------- libs/ai-endpoints/pyproject.toml | 7 +- libs/ai-endpoints/scripts/check_pydantic.sh | 27 - .../integration_tests/test_bind_tools.py | 2 +- .../test_structured_output.py | 2 +- .../tests/unit_tests/test_api_key.py | 2 +- .../tests/unit_tests/test_bind_tools.py | 2 +- .../unit_tests/test_structured_output.py | 4 +- 17 files changed, 570 insertions(+), 689 deletions(-) delete mode 100755 libs/ai-endpoints/scripts/check_pydantic.sh diff --git a/libs/ai-endpoints/Makefile b/libs/ai-endpoints/Makefile index 52863145..d79ec9d7 100644 --- a/libs/ai-endpoints/Makefile +++ b/libs/ai-endpoints/Makefile @@ -33,7 +33,6 @@ lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test lint lint_diff lint_package lint_tests: - ./scripts/check_pydantic.sh . ./scripts/lint_imports.sh poetry run ruff . [ "$(PYTHON_FILES)" = "" ] || poetry run ruff format $(PYTHON_FILES) --diff diff --git a/libs/ai-endpoints/docs/chat/nvidia_ai_endpoints.ipynb b/libs/ai-endpoints/docs/chat/nvidia_ai_endpoints.ipynb index 4795e3c9..ee3775c6 100644 --- a/libs/ai-endpoints/docs/chat/nvidia_ai_endpoints.ipynb +++ b/libs/ai-endpoints/docs/chat/nvidia_ai_endpoints.ipynb @@ -41,9 +41,7 @@ "id": "e13eb331", "metadata": {}, "outputs": [], - "source": [ - "%pip install --upgrade --quiet langchain-nvidia-ai-endpoints" - ] + "source": ["%pip install --upgrade --quiet langchain-nvidia-ai-endpoints"] }, { "cell_type": "markdown", @@ -71,18 +69,7 @@ "id": "686c4d2f", "metadata": {}, "outputs": [], - "source": [ - "import getpass\n", - "import os\n", - "\n", - "# del os.environ['NVIDIA_API_KEY'] ## delete key and reset\n", - "if os.environ.get(\"NVIDIA_API_KEY\", \"\").startswith(\"nvapi-\"):\n", - " print(\"Valid NVIDIA_API_KEY already in environment. Delete to reset\")\n", - "else:\n", - " nvapi_key = getpass.getpass(\"NVAPI Key (starts with nvapi-): \")\n", - " assert nvapi_key.startswith(\"nvapi-\"), f\"{nvapi_key[:5]}... is not a valid key\"\n", - " os.environ[\"NVIDIA_API_KEY\"] = nvapi_key" - ] + "source": ["import getpass\nimport os\n\n# del os.environ['NVIDIA_API_KEY'] ## delete key and reset\nif os.environ.get(\"NVIDIA_API_KEY\", \"\").startswith(\"nvapi-\"):\n print(\"Valid NVIDIA_API_KEY already in environment. Delete to reset\")\nelse:\n nvapi_key = getpass.getpass(\"NVAPI Key (starts with nvapi-): \")\n assert nvapi_key.startswith(\"nvapi-\"), f\"{nvapi_key[:5]}... is not a valid key\"\n os.environ[\"NVIDIA_API_KEY\"] = nvapi_key"] }, { "cell_type": "markdown", @@ -104,14 +91,7 @@ "outputId": "e9c4cc72-8db6-414b-d8e9-95de93fc5db4" }, "outputs": [], - "source": [ - "## Core LC Chat Interface\n", - "from langchain_nvidia_ai_endpoints import ChatNVIDIA\n", - "\n", - "llm = ChatNVIDIA(model=\"mistralai/mixtral-8x7b-instruct-v0.1\")\n", - "result = llm.invoke(\"Write a ballad about LangChain.\")\n", - "print(result.content)" - ] + "source": ["## Core LC Chat Interface\nfrom langchain_nvidia_ai_endpoints import ChatNVIDIA\n\nllm = ChatNVIDIA(model=\"mistralai/mixtral-8x7b-instruct-v0.1\")\nresult = llm.invoke(\"Write a ballad about LangChain.\")\nprint(result.content)"] }, { "cell_type": "markdown", @@ -130,12 +110,7 @@ "id": "49838930", "metadata": {}, "outputs": [], - "source": [ - "from langchain_nvidia_ai_endpoints import ChatNVIDIA\n", - "\n", - "# connect to an embedding NIM running at localhost:8000, specifying a specific model\n", - "llm = ChatNVIDIA(base_url=\"http://localhost:8000/v1\", model=\"meta/llama3-8b-instruct\")" - ] + "source": ["from langchain_nvidia_ai_endpoints import ChatNVIDIA\n\n# connect to an embedding NIM running at localhost:8000, specifying a specific model\nllm = ChatNVIDIA(base_url=\"http://localhost:8000/v1\", model=\"meta/llama3-8b-instruct\")"] }, { "cell_type": "markdown", @@ -153,11 +128,7 @@ "id": "01fa5095-be72-47b0-8247-e9fac799435d", "metadata": {}, "outputs": [], - "source": [ - "print(llm.batch([\"What's 2*3?\", \"What's 2*6?\"]))\n", - "# Or via the async API\n", - "# await llm.abatch([\"What's 2*3?\", \"What's 2*6?\"])" - ] + "source": ["print(llm.batch([\"What's 2*3?\", \"What's 2*6?\"]))\n# Or via the async API\n# await llm.abatch([\"What's 2*3?\", \"What's 2*6?\"])"] }, { "cell_type": "code", @@ -165,11 +136,7 @@ "id": "75189ac6-e13f-414f-9064-075c77d6e754", "metadata": {}, "outputs": [], - "source": [ - "for chunk in llm.stream(\"How far can a seagull fly in one day?\"):\n", - " # Show the token separations\n", - " print(chunk.content, end=\"|\")" - ] + "source": ["for chunk in llm.stream(\"How far can a seagull fly in one day?\"):\n # Show the token separations\n print(chunk.content, end=\"|\")"] }, { "cell_type": "code", @@ -177,12 +144,7 @@ "id": "8a9a4122-7a10-40c0-a979-82a769ce7f6a", "metadata": {}, "outputs": [], - "source": [ - "async for chunk in llm.astream(\n", - " \"How long does it take for monarch butterflies to migrate?\"\n", - "):\n", - " print(chunk.content, end=\"|\")" - ] + "source": ["async for chunk in llm.astream(\n \"How long does it take for monarch butterflies to migrate?\"\n):\n print(chunk.content, end=\"|\")"] }, { "cell_type": "markdown", @@ -204,10 +166,7 @@ "id": "5b8a312d-38e9-4528-843e-59451bdadbac", "metadata": {}, "outputs": [], - "source": [ - "ChatNVIDIA.get_available_models()\n", - "# llm.get_available_models()" - ] + "source": ["ChatNVIDIA.get_available_models()\n# llm.get_available_models()"] }, { "cell_type": "markdown", @@ -247,19 +206,7 @@ "id": "f5f7aee8-e90c-4d5a-ac97-0dd3d45c3f4c", "metadata": {}, "outputs": [], - "source": [ - "from langchain_core.output_parsers import StrOutputParser\n", - "from langchain_core.prompts import ChatPromptTemplate\n", - "from langchain_nvidia_ai_endpoints import ChatNVIDIA\n", - "\n", - "prompt = ChatPromptTemplate.from_messages(\n", - " [(\"system\", \"You are a helpful AI assistant named Fred.\"), (\"user\", \"{input}\")]\n", - ")\n", - "chain = prompt | ChatNVIDIA(model=\"meta/llama3-8b-instruct\") | StrOutputParser()\n", - "\n", - "for txt in chain.stream({\"input\": \"What's your name?\"}):\n", - " print(txt, end=\"\")" - ] + "source": ["from langchain_core.output_parsers import StrOutputParser\nfrom langchain_core.prompts import ChatPromptTemplate\nfrom langchain_nvidia_ai_endpoints import ChatNVIDIA\n\nprompt = ChatPromptTemplate.from_messages(\n [(\"system\", \"You are a helpful AI assistant named Fred.\"), (\"user\", \"{input}\")]\n)\nchain = prompt | ChatNVIDIA(model=\"meta/llama3-8b-instruct\") | StrOutputParser()\n\nfor txt in chain.stream({\"input\": \"What's your name?\"}):\n print(txt, end=\"\")"] }, { "cell_type": "markdown", @@ -277,21 +224,7 @@ "id": "49aa569b-5f33-47b3-9edc-df58313eb038", "metadata": {}, "outputs": [], - "source": [ - "prompt = ChatPromptTemplate.from_messages(\n", - " [\n", - " (\n", - " \"system\",\n", - " \"You are an expert coding AI. Respond only in valid python; no narration whatsoever.\",\n", - " ),\n", - " (\"user\", \"{input}\"),\n", - " ]\n", - ")\n", - "chain = prompt | ChatNVIDIA(model=\"meta/codellama-70b\") | StrOutputParser()\n", - "\n", - "for txt in chain.stream({\"input\": \"How do I solve this fizz buzz problem?\"}):\n", - " print(txt, end=\"\")" - ] + "source": ["prompt = ChatPromptTemplate.from_messages(\n [\n (\n \"system\",\n \"You are an expert coding AI. Respond only in valid python; no narration whatsoever.\",\n ),\n (\"user\", \"{input}\"),\n ]\n)\nchain = prompt | ChatNVIDIA(model=\"meta/codellama-70b\") | StrOutputParser()\n\nfor txt in chain.stream({\"input\": \"How do I solve this fizz buzz problem?\"}):\n print(txt, end=\"\")"] }, { "cell_type": "markdown", @@ -311,15 +244,7 @@ "id": "26625437-1695-440f-b792-b85e6add9a90", "metadata": {}, "outputs": [], - "source": [ - "import IPython\n", - "import requests\n", - "\n", - "image_url = \"https://www.nvidia.com/content/dam/en-zz/Solutions/research/ai-playground/nvidia-picasso-3c33-p@2x.jpg\" ## Large Image\n", - "image_content = requests.get(image_url).content\n", - "\n", - "IPython.display.Image(image_content)" - ] + "source": ["import IPython\nimport requests\n\nimage_url = \"https://www.nvidia.com/content/dam/en-zz/Solutions/research/ai-playground/nvidia-picasso-3c33-p@2x.jpg\" ## Large Image\nimage_content = requests.get(image_url).content\n\nIPython.display.Image(image_content)"] }, { "cell_type": "code", @@ -327,11 +252,7 @@ "id": "dfbbe57c-27a5-4cbb-b967-19c4e7d29fd0", "metadata": {}, "outputs": [], - "source": [ - "from langchain_nvidia_ai_endpoints import ChatNVIDIA\n", - "\n", - "llm = ChatNVIDIA(model=\"nvidia/neva-22b\")" - ] + "source": ["from langchain_nvidia_ai_endpoints import ChatNVIDIA\n\nllm = ChatNVIDIA(model=\"nvidia/neva-22b\")"] }, { "cell_type": "markdown", @@ -347,20 +268,7 @@ "id": "432ea2a2-4d39-43f8-a236-041294171f14", "metadata": {}, "outputs": [], - "source": [ - "from langchain_core.messages import HumanMessage\n", - "\n", - "llm.invoke(\n", - " [\n", - " HumanMessage(\n", - " content=[\n", - " {\"type\": \"text\", \"text\": \"Describe this image:\"},\n", - " {\"type\": \"image_url\", \"image_url\": {\"url\": image_url}},\n", - " ]\n", - " )\n", - " ]\n", - ")" - ] + "source": ["from langchain_core.messages import HumanMessage\n\nllm.invoke(\n [\n HumanMessage(\n content=[\n {\"type\": \"text\", \"text\": \"Describe this image:\"},\n {\"type\": \"image_url\", \"image_url\": {\"url\": image_url}},\n ]\n )\n ]\n)"] }, { "cell_type": "markdown", @@ -384,15 +292,7 @@ "id": "c58f1dd0", "metadata": {}, "outputs": [], - "source": [ - "import IPython\n", - "import requests\n", - "\n", - "image_url = \"https://picsum.photos/seed/kitten/300/200\"\n", - "image_content = requests.get(image_url).content\n", - "\n", - "IPython.display.Image(image_content)" - ] + "source": ["import IPython\nimport requests\n\nimage_url = \"https://picsum.photos/seed/kitten/300/200\"\nimage_content = requests.get(image_url).content\n\nIPython.display.Image(image_content)"] }, { "cell_type": "code", @@ -400,28 +300,7 @@ "id": "8c721629-42eb-4006-bf68-0296f7925ebc", "metadata": {}, "outputs": [], - "source": [ - "import base64\n", - "\n", - "from langchain_core.messages import HumanMessage\n", - "\n", - "## Works for simpler images. For larger images, see actual implementation\n", - "b64_string = base64.b64encode(image_content).decode(\"utf-8\")\n", - "\n", - "llm.invoke(\n", - " [\n", - " HumanMessage(\n", - " content=[\n", - " {\"type\": \"text\", \"text\": \"Describe this image:\"},\n", - " {\n", - " \"type\": \"image_url\",\n", - " \"image_url\": {\"url\": f\"data:image/png;base64,{b64_string}\"},\n", - " },\n", - " ]\n", - " )\n", - " ]\n", - ")" - ] + "source": ["import base64\n\nfrom langchain_core.messages import HumanMessage\n\n## Works for simpler images. For larger images, see actual implementation\nb64_string = base64.b64encode(image_content).decode(\"utf-8\")\n\nllm.invoke(\n [\n HumanMessage(\n content=[\n {\"type\": \"text\", \"text\": \"Describe this image:\"},\n {\n \"type\": \"image_url\",\n \"image_url\": {\"url\": f\"data:image/png;base64,{b64_string}\"},\n },\n ]\n )\n ]\n)"] }, { "cell_type": "markdown", @@ -439,10 +318,7 @@ "id": "00c06a9a-497b-4192-a842-b075e27401aa", "metadata": {}, "outputs": [], - "source": [ - "base64_with_mime_type = f\"data:image/png;base64,{b64_string}\"\n", - "llm.invoke(f'What\\'s in this image?\\n')" - ] + "source": ["base64_with_mime_type = f\"data:image/png;base64,{b64_string}\"\nllm.invoke(f'What\\'s in this image?\\n')"] }, { "cell_type": "markdown", @@ -470,9 +346,7 @@ "id": "082ccb21-91e1-4e71-a9ba-4bff1e89f105", "metadata": {}, "outputs": [], - "source": [ - "%pip install --upgrade --quiet langchain" - ] + "source": ["%pip install --upgrade --quiet langchain"] }, { "cell_type": "code", @@ -482,41 +356,7 @@ "id": "fd2c6bc1" }, "outputs": [], - "source": [ - "from langchain_core.chat_history import InMemoryChatMessageHistory\n", - "from langchain_core.runnables.history import RunnableWithMessageHistory\n", - "\n", - "# store is a dictionary that maps session IDs to their corresponding chat histories.\n", - "store = {} # memory is maintained outside the chain\n", - "\n", - "\n", - "# A function that returns the chat history for a given session ID.\n", - "def get_session_history(session_id: str) -> InMemoryChatMessageHistory:\n", - " if session_id not in store:\n", - " store[session_id] = InMemoryChatMessageHistory()\n", - " return store[session_id]\n", - "\n", - "\n", - "chat = ChatNVIDIA(\n", - " model=\"mistralai/mixtral-8x22b-instruct-v0.1\",\n", - " temperature=0.1,\n", - " max_tokens=100,\n", - " top_p=1.0,\n", - ")\n", - "\n", - "# Define a RunnableConfig object, with a `configurable` key. session_id determines thread\n", - "config = {\"configurable\": {\"session_id\": \"1\"}}\n", - "\n", - "conversation = RunnableWithMessageHistory(\n", - " chat,\n", - " get_session_history,\n", - ")\n", - "\n", - "conversation.invoke(\n", - " \"Hi I'm Srijan Dubey.\", # input or query\n", - " config=config,\n", - ")" - ] + "source": ["from langchain_core.chat_history import InMemoryChatMessageHistory\nfrom langchain_core.runnables.history import RunnableWithMessageHistory\n\n# store is a dictionary that maps session IDs to their corresponding chat histories.\nstore = {} # memory is maintained outside the chain\n\n\n# A function that returns the chat history for a given session ID.\ndef get_session_history(session_id: str) -> InMemoryChatMessageHistory:\n if session_id not in store:\n store[session_id] = InMemoryChatMessageHistory()\n return store[session_id]\n\n\nchat = ChatNVIDIA(\n model=\"mistralai/mixtral-8x22b-instruct-v0.1\",\n temperature=0.1,\n max_tokens=100,\n top_p=1.0,\n)\n\n# Define a RunnableConfig object, with a `configurable` key. session_id determines thread\nconfig = {\"configurable\": {\"session_id\": \"1\"}}\n\nconversation = RunnableWithMessageHistory(\n chat,\n get_session_history,\n)\n\nconversation.invoke(\n \"Hi I'm Srijan Dubey.\", # input or query\n config=config,\n)"] }, { "cell_type": "code", @@ -531,12 +371,7 @@ "outputId": "79acc89d-a820-4f2c-bac2-afe99da95580" }, "outputs": [], - "source": [ - "conversation.invoke(\n", - " \"I'm doing well! Just having a conversation with an AI.\",\n", - " config=config,\n", - ")" - ] + "source": ["conversation.invoke(\n \"I'm doing well! Just having a conversation with an AI.\",\n config=config,\n)"] }, { "cell_type": "code", @@ -551,12 +386,7 @@ "outputId": "a1714513-a8fd-4d14-f974-233e39d5c4f5" }, "outputs": [], - "source": [ - "conversation.invoke(\n", - " \"Tell me about yourself.\",\n", - " config=config,\n", - ")" - ] + "source": ["conversation.invoke(\n \"Tell me about yourself.\",\n config=config,\n)"] }, { "cell_type": "markdown", @@ -584,10 +414,7 @@ "id": "e36c8911", "metadata": {}, "outputs": [], - "source": [ - "tool_models = [model for model in ChatNVIDIA.get_available_models() if model.supports_tools]\n", - "tool_models" - ] + "source": ["tool_models = [model for model in ChatNVIDIA.get_available_models() if model.supports_tools]\ntool_models"] }, { "cell_type": "markdown", @@ -603,21 +430,7 @@ "id": "bd54f174", "metadata": {}, "outputs": [], - "source": [ - "from langchain_core.pydantic_v1 import Field\n", - "from langchain_core.tools import tool\n", - "\n", - "@tool\n", - "def get_current_weather(\n", - " location: str = Field(..., description=\"The location to get the weather for.\")\n", - "):\n", - " \"\"\"Get the current weather for a location.\"\"\"\n", - " ...\n", - "\n", - "llm = ChatNVIDIA(model=tool_models[0].id).bind_tools(tools=[get_current_weather])\n", - "response = llm.invoke(\"What is the weather in Boston?\")\n", - "response.tool_calls" - ] + "source": ["from pydantic import Field\nfrom langchain_core.tools import tool\n\n@tool\ndef get_current_weather(\n location: str = Field(..., description=\"The location to get the weather for.\")\n):\n \"\"\"Get the current weather for a location.\"\"\"\n ...\n\nllm = ChatNVIDIA(model=tool_models[0].id).bind_tools(tools=[get_current_weather])\nresponse = llm.invoke(\"What is the weather in Boston?\")\nresponse.tool_calls"] }, { "cell_type": "markdown", @@ -655,11 +468,7 @@ "id": "0515f558", "metadata": {}, "outputs": [], - "source": [ - "from langchain_nvidia_ai_endpoints import ChatNVIDIA\n", - "structured_models = [model for model in ChatNVIDIA.get_available_models() if model.supports_structured_output]\n", - "structured_models" - ] + "source": ["from langchain_nvidia_ai_endpoints import ChatNVIDIA\nstructured_models = [model for model in ChatNVIDIA.get_available_models() if model.supports_structured_output]\nstructured_models"] }, { "cell_type": "markdown", @@ -675,17 +484,7 @@ "id": "482c37e8", "metadata": {}, "outputs": [], - "source": [ - "from langchain_core.pydantic_v1 import BaseModel, Field\n", - "\n", - "class Person(BaseModel):\n", - " first_name: str = Field(..., description=\"The person's first name.\")\n", - " last_name: str = Field(..., description=\"The person's last name.\")\n", - "\n", - "llm = ChatNVIDIA(model=structured_models[0].id).with_structured_output(Person)\n", - "response = llm.invoke(\"Who is Michael Jeffrey Jordon?\")\n", - "response" - ] + "source": ["from pydantic import BaseModel, Field\n\nclass Person(BaseModel):\n first_name: str = Field(..., description=\"The person's first name.\")\n last_name: str = Field(..., description=\"The person's last name.\")\n\nllm = ChatNVIDIA(model=structured_models[0].id).with_structured_output(Person)\nresponse = llm.invoke(\"Who is Michael Jeffrey Jordon?\")\nresponse"] }, { "cell_type": "markdown", @@ -701,24 +500,7 @@ "id": "7f802912", "metadata": {}, "outputs": [], - "source": [ - "from enum import Enum\n", - "\n", - "class Choices(Enum):\n", - " A = \"A\"\n", - " B = \"B\"\n", - " C = \"C\"\n", - "\n", - "llm = ChatNVIDIA(model=structured_models[2].id).with_structured_output(Choices)\n", - "response = llm.invoke(\"\"\"\n", - " What does 1+1 equal?\n", - " A. -100\n", - " B. 2\n", - " C. doorstop\n", - " \"\"\"\n", - ")\n", - "response" - ] + "source": ["from enum import Enum\n\nclass Choices(Enum):\n A = \"A\"\n B = \"B\"\n C = \"C\"\n\nllm = ChatNVIDIA(model=structured_models[2].id).with_structured_output(Choices)\nresponse = llm.invoke(\"\"\"\n What does 1+1 equal?\n A. -100\n B. 2\n C. doorstop\n \"\"\"\n)\nresponse"] }, { "cell_type": "code", @@ -726,19 +508,7 @@ "id": "02b7ef29", "metadata": {}, "outputs": [], - "source": [ - "model = structured_models[3].id\n", - "llm = ChatNVIDIA(model=model).with_structured_output(Choices)\n", - "print(model)\n", - "response = llm.invoke(\"\"\"\n", - " What does 1+1 equal?\n", - " A. -100\n", - " B. 2\n", - " C. doorstop\n", - " \"\"\"\n", - ")\n", - "response" - ] + "source": ["model = structured_models[3].id\nllm = ChatNVIDIA(model=model).with_structured_output(Choices)\nprint(model)\nresponse = llm.invoke(\"\"\"\n What does 1+1 equal?\n A. -100\n B. 2\n C. doorstop\n \"\"\"\n)\nresponse"] } ], "metadata": { diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py index 79c5a54b..c69f12bd 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py @@ -20,13 +20,14 @@ from urllib.parse import urlparse, urlunparse import requests -from langchain_core.pydantic_v1 import ( +from pydantic import ( BaseModel, + ConfigDict, Field, PrivateAttr, SecretStr, - root_validator, - validator, + field_validator, + model_validator, ) from requests.models import Response @@ -48,11 +49,12 @@ class _NVIDIAClient(BaseModel): # todo: add a validator for requests.Response (last_response attribute) and # remove arbitrary_types_allowed=True - class Config: - arbitrary_types_allowed = True + model_config = ConfigDict( + arbitrary_types_allowed=True, + ) ## Core defaults. These probably should not be changed - _api_key_var = "NVIDIA_API_KEY" + _api_key_var: str = PrivateAttr("NVIDIA_API_KEY") base_url: str = Field( ..., description="Base URL for standard inference", @@ -103,7 +105,7 @@ class Config: ################################################################################### ################### Validation and Initialization ################################# - @validator("base_url") + @field_validator("base_url") def _validate_base_url(cls, v: str) -> str: if v is not None: result = urlparse(v) @@ -113,8 +115,9 @@ def _validate_base_url(cls, v: str) -> str: raise ValueError(f"Invalid base_url format. {expected_format} Got: {v}") return v - @root_validator(pre=True) - def _preprocess_args(cls, values: Dict[str, Any]) -> Dict[str, Any]: + @model_validator(mode="before") + @classmethod + def _preprocess_args(cls, values: Dict[str, Any]) -> Any: values["api_key"] = ( values.get(cls._api_key_var.lower()) or values.get("api_key") diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_statics.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_statics.py index e1970872..1771f3b6 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_statics.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_statics.py @@ -2,7 +2,7 @@ import warnings from typing import Literal, Optional -from langchain_core.pydantic_v1 import BaseModel, validator +from pydantic import BaseModel, validator class Model(BaseModel): diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index 42d825eb..76ef1946 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -46,11 +46,11 @@ ChatResult, Generation, ) -from langchain_core.pydantic_v1 import BaseModel, Field, PrivateAttr, root_validator from langchain_core.runnables import Runnable from langchain_core.tools import BaseTool from langchain_core.utils.function_calling import convert_to_openai_tool from langchain_core.utils.pydantic import is_basemodel_subclass +from pydantic import BaseModel, Field, PrivateAttr, model_validator from langchain_nvidia_ai_endpoints._common import _NVIDIAClient from langchain_nvidia_ai_endpoints._statics import Model @@ -193,24 +193,27 @@ class ChatNVIDIA(BaseChatModel): base_url: str = Field( description="Base url for model listing an invocation", ) - model: Optional[str] = Field(description="Name of the model to invoke") - temperature: Optional[float] = Field(description="Sampling temperature in [0, 1]") + model: Optional[str] = Field(None, description="Name of the model to invoke") + temperature: Optional[float] = Field( + None, description="Sampling temperature in [0, 1]" + ) max_tokens: Optional[int] = Field( 1024, description="Maximum # of tokens to generate" ) - top_p: Optional[float] = Field(description="Top-p for distribution sampling") - seed: Optional[int] = Field(description="The seed for deterministic results") - stop: Optional[Sequence[str]] = Field(description="Stop words (cased)") + top_p: Optional[float] = Field(None, description="Top-p for distribution sampling") + seed: Optional[int] = Field(None, description="The seed for deterministic results") + stop: Optional[Sequence[str]] = Field(None, description="Stop words (cased)") - _base_url_var = "NVIDIA_BASE_URL" + _base_url_var: str = "NVIDIA_BASE_URL" - @root_validator(pre=True) - def _validate_base_url(cls, values: Dict[str, Any]) -> Dict[str, Any]: + @model_validator(mode="before") + @classmethod + def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values["base_url"] = ( - values.get(cls._base_url_var.lower()) + values.get(cls.__private_attributes__["_base_url_var"].default.lower()) or values.get("base_url") - or os.getenv(cls._base_url_var) - or cls._default_base_url + or os.getenv(cls.__private_attributes__["_base_url_var"].default) + or cls.__private_attributes__["_default_base_url"].default ) return values diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py index 428bdb84..9b2ec552 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py @@ -6,12 +6,13 @@ from langchain_core.embeddings import Embeddings from langchain_core.outputs.llm_result import LLMResult -from langchain_core.pydantic_v1 import ( +from pydantic import ( BaseModel, + ConfigDict, Field, PrivateAttr, - root_validator, - validator, + field_validator, + model_validator, ) from langchain_nvidia_ai_endpoints._common import _NVIDIAClient @@ -30,13 +31,14 @@ class NVIDIAEmbeddings(BaseModel, Embeddings): too long. """ - class Config: - validate_assignment = True + model_config = ConfigDict( + validate_assignment=True, + ) _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) - _default_model_name: str = "nvidia/nv-embedqa-e5-v5" - _default_max_batch_size: int = 50 - _default_base_url: str = "https://integrate.api.nvidia.com/v1" + _default_model_name: str = PrivateAttr("nvidia/nv-embedqa-e5-v5") + _default_max_batch_size: int = PrivateAttr(50) + _default_base_url: str = PrivateAttr("https://integrate.api.nvidia.com/v1") base_url: str = Field( description="Base url for model listing an invocation", ) @@ -53,10 +55,11 @@ class Config: None, description="(DEPRECATED) The type of text to be embedded." ) - _base_url_var = "NVIDIA_BASE_URL" + _base_url_var: str = "NVIDIA_BASE_URL" - @root_validator(pre=True) - def _validate_base_url(cls, values: Dict[str, Any]) -> Dict[str, Any]: + @model_validator(mode="before") + @classmethod + def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values["base_url"] = ( values.get(cls._base_url_var.lower()) or values.get("base_url") @@ -116,7 +119,7 @@ def __init__(self, **kwargs: Any): ) self.truncate = "END" - @validator("model_type") + @field_validator("model_type") def _validate_model_type( cls, v: Optional[Literal["passage", "query"]] ) -> Optional[Literal["passage", "query"]]: diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py index 12f364a5..13ec5d30 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py @@ -7,7 +7,7 @@ from langchain_core.callbacks.manager import CallbackManagerForLLMRun from langchain_core.language_models.llms import LLM from langchain_core.outputs import GenerationChunk -from langchain_core.pydantic_v1 import Field, PrivateAttr, root_validator +from pydantic import ConfigDict, Field, PrivateAttr, model_validator from langchain_nvidia_ai_endpoints._common import _NVIDIAClient from langchain_nvidia_ai_endpoints._statics import Model @@ -18,8 +18,9 @@ class NVIDIA(LLM): LangChain LLM that uses the Completions API with NVIDIA NIMs. """ - class Config: - validate_assignment = True + model_config = ConfigDict( + validate_assignment=True, + ) _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) _default_model_name: str = "nvidia/mistral-nemo-minitron-8b-base" @@ -29,14 +30,15 @@ class Config: ) model: Optional[str] = Field(description="The model to use for completions.") - _base_url_var = "NVIDIA_BASE_URL" + _base_url_var: str = "NVIDIA_BASE_URL" _init_args: Dict[str, Any] = PrivateAttr() """Stashed arguments given to the constructor that can be passed to the Completions API endpoint.""" - @root_validator(pre=True) - def _validate_base_url(cls, values: Dict[str, Any]) -> Dict[str, Any]: + @model_validator(mode="before") + @classmethod + def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values["base_url"] = ( values.get(cls._base_url_var.lower()) or values.get("base_url") diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py index d1caa69f..dd1caf73 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py @@ -6,7 +6,13 @@ from langchain_core.callbacks.manager import Callbacks from langchain_core.documents import Document from langchain_core.documents.compressor import BaseDocumentCompressor -from langchain_core.pydantic_v1 import BaseModel, Field, PrivateAttr, root_validator +from pydantic import ( + BaseModel, + ConfigDict, + Field, + PrivateAttr, + model_validator, +) from langchain_nvidia_ai_endpoints._common import _NVIDIAClient from langchain_nvidia_ai_endpoints._statics import Model @@ -22,14 +28,15 @@ class NVIDIARerank(BaseDocumentCompressor): LangChain Document Compressor that uses the NVIDIA NeMo Retriever Reranking API. """ - class Config: - validate_assignment = True + model_config = ConfigDict( + validate_assignment=True, + ) _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) - _default_batch_size: int = 32 - _default_model_name: str = "nvidia/nv-rerankqa-mistral-4b-v3" - _default_base_url: str = "https://integrate.api.nvidia.com/v1" + _default_batch_size: int = PrivateAttr(32) + _default_model_name: str = PrivateAttr("nvidia/nv-rerankqa-mistral-4b-v3") + _default_base_url: str = PrivateAttr("https://integrate.api.nvidia.com/v1") base_url: str = Field( description="Base url for model listing an invocation", ) @@ -46,10 +53,11 @@ class Config: _default_batch_size, ge=1, description="The maximum batch size." ) - _base_url_var = "NVIDIA_BASE_URL" + _base_url_var: str = PrivateAttr("NVIDIA_BASE_URL") - @root_validator(pre=True) - def _validate_base_url(cls, values: Dict[str, Any]) -> Dict[str, Any]: + @model_validator(mode="before") + @classmethod + def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values["base_url"] = ( values.get(cls._base_url_var.lower()) or values.get("base_url") diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/tools.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/tools.py index c5cba14d..fd5d5646 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/tools.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/tools.py @@ -21,10 +21,10 @@ JsonOutputKeyToolsParser, PydanticToolsParser, ) -from langchain_core.pydantic_v1 import BaseModel from langchain_core.runnables import Runnable, RunnableMap, RunnablePassthrough from langchain_core.tools import BaseTool from langchain_core.utils.function_calling import convert_to_openai_tool +from pydantic import BaseModel logger = logging.getLogger(__name__) diff --git a/libs/ai-endpoints/poetry.lock b/libs/ai-endpoints/poetry.lock index 457bc907..692a1d9d 100644 --- a/libs/ai-endpoints/poetry.lock +++ b/libs/ai-endpoints/poetry.lock @@ -1,91 +1,118 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. + +[[package]] +name = "aiohappyeyeballs" +version = "2.4.0" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohappyeyeballs-2.4.0-py3-none-any.whl", hash = "sha256:7ce92076e249169a13c2f49320d1967425eaf1f407522d707d59cac7628d62bd"}, + {file = "aiohappyeyeballs-2.4.0.tar.gz", hash = "sha256:55a1714f084e63d49639800f95716da97a1f173d46a16dfcfda0016abb93b6b2"}, +] [[package]] name = "aiohttp" -version = "3.9.5" +version = "3.10.5" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, - {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, - {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, - {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, - {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, - {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, - {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, - {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, - {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, - {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, + {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:18a01eba2574fb9edd5f6e5fb25f66e6ce061da5dab5db75e13fe1558142e0a3"}, + {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:94fac7c6e77ccb1ca91e9eb4cb0ac0270b9fb9b289738654120ba8cebb1189c6"}, + {file = "aiohttp-3.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f1f1c75c395991ce9c94d3e4aa96e5c59c8356a15b1c9231e783865e2772699"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7acae3cf1a2a2361ec4c8e787eaaa86a94171d2417aae53c0cca6ca3118ff6"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94c4381ffba9cc508b37d2e536b418d5ea9cfdc2848b9a7fea6aebad4ec6aac1"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c31ad0c0c507894e3eaa843415841995bf8de4d6b2d24c6e33099f4bc9fc0d4f"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0912b8a8fadeb32ff67a3ed44249448c20148397c1ed905d5dac185b4ca547bb"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d93400c18596b7dc4794d48a63fb361b01a0d8eb39f28800dc900c8fbdaca91"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d00f3c5e0d764a5c9aa5a62d99728c56d455310bcc288a79cab10157b3af426f"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d742c36ed44f2798c8d3f4bc511f479b9ceef2b93f348671184139e7d708042c"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:814375093edae5f1cb31e3407997cf3eacefb9010f96df10d64829362ae2df69"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8224f98be68a84b19f48e0bdc14224b5a71339aff3a27df69989fa47d01296f3"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9a487ef090aea982d748b1b0d74fe7c3950b109df967630a20584f9a99c0683"}, + {file = "aiohttp-3.10.5-cp310-cp310-win32.whl", hash = "sha256:d9ef084e3dc690ad50137cc05831c52b6ca428096e6deb3c43e95827f531d5ef"}, + {file = "aiohttp-3.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:66bf9234e08fe561dccd62083bf67400bdbf1c67ba9efdc3dac03650e97c6088"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c6a4e5e40156d72a40241a25cc226051c0a8d816610097a8e8f517aeacd59a2"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c634a3207a5445be65536d38c13791904fda0748b9eabf908d3fe86a52941cf"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4aff049b5e629ef9b3e9e617fa6e2dfeda1bf87e01bcfecaf3949af9e210105e"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1942244f00baaacaa8155eca94dbd9e8cc7017deb69b75ef67c78e89fdad3c77"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e04a1f2a65ad2f93aa20f9ff9f1b672bf912413e5547f60749fa2ef8a644e061"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f2bfc0032a00405d4af2ba27f3c429e851d04fad1e5ceee4080a1c570476697"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:424ae21498790e12eb759040bbb504e5e280cab64693d14775c54269fd1d2bb7"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:975218eee0e6d24eb336d0328c768ebc5d617609affaca5dbbd6dd1984f16ed0"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4120d7fefa1e2d8fb6f650b11489710091788de554e2b6f8347c7a20ceb003f5"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b90078989ef3fc45cf9221d3859acd1108af7560c52397ff4ace8ad7052a132e"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ba5a8b74c2a8af7d862399cdedce1533642fa727def0b8c3e3e02fcb52dca1b1"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:02594361128f780eecc2a29939d9dfc870e17b45178a867bf61a11b2a4367277"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4fc029e135859f533025bc82047334e24b0d489e75513144f25408ecaf058"}, + {file = "aiohttp-3.10.5-cp311-cp311-win32.whl", hash = "sha256:e1ca1ef5ba129718a8fc827b0867f6aa4e893c56eb00003b7367f8a733a9b072"}, + {file = "aiohttp-3.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:349ef8a73a7c5665cca65c88ab24abe75447e28aa3bc4c93ea5093474dfdf0ff"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:305be5ff2081fa1d283a76113b8df7a14c10d75602a38d9f012935df20731487"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a1c32a19ee6bbde02f1cb189e13a71b321256cc1d431196a9f824050b160d5a"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:61645818edd40cc6f455b851277a21bf420ce347baa0b86eaa41d51ef58ba23d"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c225286f2b13bab5987425558baa5cbdb2bc925b2998038fa028245ef421e75"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ba01ebc6175e1e6b7275c907a3a36be48a2d487549b656aa90c8a910d9f3178"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8eaf44ccbc4e35762683078b72bf293f476561d8b68ec8a64f98cf32811c323e"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c43eb1ab7cbf411b8e387dc169acb31f0ca0d8c09ba63f9eac67829585b44f"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de7a5299827253023c55ea549444e058c0eb496931fa05d693b95140a947cb73"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4790f0e15f00058f7599dab2b206d3049d7ac464dc2e5eae0e93fa18aee9e7bf"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:44b324a6b8376a23e6ba25d368726ee3bc281e6ab306db80b5819999c737d820"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0d277cfb304118079e7044aad0b76685d30ecb86f83a0711fc5fb257ffe832ca"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:54d9ddea424cd19d3ff6128601a4a4d23d54a421f9b4c0fff740505813739a91"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4f1c9866ccf48a6df2b06823e6ae80573529f2af3a0992ec4fe75b1a510df8a6"}, + {file = "aiohttp-3.10.5-cp312-cp312-win32.whl", hash = "sha256:dc4826823121783dccc0871e3f405417ac116055bf184ac04c36f98b75aacd12"}, + {file = "aiohttp-3.10.5-cp312-cp312-win_amd64.whl", hash = "sha256:22c0a23a3b3138a6bf76fc553789cb1a703836da86b0f306b6f0dc1617398abc"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7f6b639c36734eaa80a6c152a238242bedcee9b953f23bb887e9102976343092"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f29930bc2921cef955ba39a3ff87d2c4398a0394ae217f41cb02d5c26c8b1b77"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f489a2c9e6455d87eabf907ac0b7d230a9786be43fbe884ad184ddf9e9c1e385"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:123dd5b16b75b2962d0fff566effb7a065e33cd4538c1692fb31c3bda2bfb972"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b98e698dc34966e5976e10bbca6d26d6724e6bdea853c7c10162a3235aba6e16"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3b9162bab7e42f21243effc822652dc5bb5e8ff42a4eb62fe7782bcbcdfacf6"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1923a5c44061bffd5eebeef58cecf68096e35003907d8201a4d0d6f6e387ccaa"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55f011da0a843c3d3df2c2cf4e537b8070a419f891c930245f05d329c4b0689"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:afe16a84498441d05e9189a15900640a2d2b5e76cf4efe8cbb088ab4f112ee57"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8112fb501b1e0567a1251a2fd0747baae60a4ab325a871e975b7bb67e59221f"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1e72589da4c90337837fdfe2026ae1952c0f4a6e793adbbfbdd40efed7c63599"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4d46c7b4173415d8e583045fbc4daa48b40e31b19ce595b8d92cf639396c15d5"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:33e6bc4bab477c772a541f76cd91e11ccb6d2efa2b8d7d7883591dfb523e5987"}, + {file = "aiohttp-3.10.5-cp313-cp313-win32.whl", hash = "sha256:c58c6837a2c2a7cf3133983e64173aec11f9c2cd8e87ec2fdc16ce727bcf1a04"}, + {file = "aiohttp-3.10.5-cp313-cp313-win_amd64.whl", hash = "sha256:38172a70005252b6893088c0f5e8a47d173df7cc2b2bd88650957eb84fcf5022"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f6f18898ace4bcd2d41a122916475344a87f1dfdec626ecde9ee802a711bc569"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5ede29d91a40ba22ac1b922ef510aab871652f6c88ef60b9dcdf773c6d32ad7a"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:673f988370f5954df96cc31fd99c7312a3af0a97f09e407399f61583f30da9bc"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58718e181c56a3c02d25b09d4115eb02aafe1a732ce5714ab70326d9776457c3"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b38b1570242fbab8d86a84128fb5b5234a2f70c2e32f3070143a6d94bc854cf"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:074d1bff0163e107e97bd48cad9f928fa5a3eb4b9d33366137ffce08a63e37fe"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd31f176429cecbc1ba499d4aba31aaccfea488f418d60376b911269d3b883c5"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7384d0b87d4635ec38db9263e6a3f1eb609e2e06087f0aa7f63b76833737b471"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8989f46f3d7ef79585e98fa991e6ded55d2f48ae56d2c9fa5e491a6e4effb589"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c83f7a107abb89a227d6c454c613e7606c12a42b9a4ca9c5d7dad25d47c776ae"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cde98f323d6bf161041e7627a5fd763f9fd829bcfcd089804a5fdce7bb6e1b7d"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:676f94c5480d8eefd97c0c7e3953315e4d8c2b71f3b49539beb2aa676c58272f"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2d21ac12dc943c68135ff858c3a989f2194a709e6e10b4c8977d7fcd67dfd511"}, + {file = "aiohttp-3.10.5-cp38-cp38-win32.whl", hash = "sha256:17e997105bd1a260850272bfb50e2a328e029c941c2708170d9d978d5a30ad9a"}, + {file = "aiohttp-3.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:1c19de68896747a2aa6257ae4cf6ef59d73917a36a35ee9d0a6f48cff0f94db8"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7e2fe37ac654032db1f3499fe56e77190282534810e2a8e833141a021faaab0e"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5bf3ead3cb66ab990ee2561373b009db5bc0e857549b6c9ba84b20bc462e172"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b2c16a919d936ca87a3c5f0e43af12a89a3ce7ccbce59a2d6784caba945b68b"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad146dae5977c4dd435eb31373b3fe9b0b1bf26858c6fc452bf6af394067e10b"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c5c6fa16412b35999320f5c9690c0f554392dc222c04e559217e0f9ae244b92"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95c4dc6f61d610bc0ee1edc6f29d993f10febfe5b76bb470b486d90bbece6b22"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da452c2c322e9ce0cfef392e469a26d63d42860f829026a63374fde6b5c5876f"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:898715cf566ec2869d5cb4d5fb4be408964704c46c96b4be267442d265390f32"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:391cc3a9c1527e424c6865e087897e766a917f15dddb360174a70467572ac6ce"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:380f926b51b92d02a34119d072f178d80bbda334d1a7e10fa22d467a66e494db"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce91db90dbf37bb6fa0997f26574107e1b9d5ff939315247b7e615baa8ec313b"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9093a81e18c45227eebe4c16124ebf3e0d893830c6aca7cc310bfca8fe59d857"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ee40b40aa753d844162dcc80d0fe256b87cba48ca0054f64e68000453caead11"}, + {file = "aiohttp-3.10.5-cp39-cp39-win32.whl", hash = "sha256:03f2645adbe17f274444953bdea69f8327e9d278d961d85657cb0d06864814c1"}, + {file = "aiohttp-3.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:d17920f18e6ee090bdd3d0bfffd769d9f2cb4c8ffde3eb203777a3895c128862"}, + {file = "aiohttp-3.10.5.tar.gz", hash = "sha256:f071854b47d39591ce9a17981c46790acb30518e2f83dfca8db2dfa091178691"}, ] [package.dependencies] +aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" @@ -94,7 +121,7 @@ multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" @@ -121,8 +148,27 @@ files = [ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] +[[package]] +name = "anyio" +version = "4.4.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, +] + [package.dependencies] -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "async-timeout" @@ -137,32 +183,32 @@ files = [ [[package]] name = "attrs" -version = "23.2.0" +version = "24.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "certifi" -version = "2024.7.4" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] @@ -319,7 +365,6 @@ files = [ [package.dependencies] python-dateutil = ">=2.4" -typing-extensions = {version = ">=3.10.0.1", markers = "python_version <= \"3.8\""} [[package]] name = "freezegun" @@ -421,15 +466,72 @@ files = [ {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, ] +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.2" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "idna" -version = "3.7" +version = "3.8" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, + {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, ] [[package]] @@ -470,10 +572,10 @@ files = [ [[package]] name = "langchain-core" -version = "0.2.23" +version = "0.2.38" description = "Building applications with LLMs through composability" optional = false -python-versions = ">=3.8.1,<4.0" +python-versions = ">=3.9,<4.0" files = [] develop = false @@ -487,26 +589,28 @@ pydantic = [ ] PyYAML = ">=5.3" tenacity = "^8.1.0,!=8.4.0" +typing-extensions = ">=4.7" [package.source] type = "git" url = "https://github.com/langchain-ai/langchain.git" -reference = "HEAD" -resolved_reference = "b55f6105c6ddb885256a9af062f75048539ca952" +reference = "v0.3rc" +resolved_reference = "79c46319ddd7959ca868772982aad25bcdbef1c2" subdirectory = "libs/core" [[package]] name = "langsmith" -version = "0.1.93" +version = "0.1.114" 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.93-py3-none-any.whl", hash = "sha256:811210b9d5f108f36431bd7b997eb9476a9ecf5a2abd7ddbb606c1cdcf0f43ce"}, - {file = "langsmith-0.1.93.tar.gz", hash = "sha256:285b6ad3a54f50fa8eb97b5f600acc57d0e37e139dd8cf2111a117d0435ba9b4"}, + {file = "langsmith-0.1.114-py3-none-any.whl", hash = "sha256:2b6b6b49ddb1cea75f465da107ddc21e60d3c7242813dcc0de90f914e4957249"}, + {file = "langsmith-0.1.114.tar.gz", hash = "sha256:1683e1505d034d1bf7c960067c1357fd0d294172dd20540f913093e4b86857a2"}, ] [package.dependencies] +httpx = ">=0.23.0,<1" orjson = ">=3.9.14,<4.0.0" pydantic = [ {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, @@ -676,62 +780,68 @@ files = [ [[package]] name = "orjson" -version = "3.10.6" +version = "3.10.7" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.6-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fb0ee33124db6eaa517d00890fc1a55c3bfe1cf78ba4a8899d71a06f2d6ff5c7"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c1c4b53b24a4c06547ce43e5fee6ec4e0d8fe2d597f4647fc033fd205707365"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eadc8fd310edb4bdbd333374f2c8fec6794bbbae99b592f448d8214a5e4050c0"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61272a5aec2b2661f4fa2b37c907ce9701e821b2c1285d5c3ab0207ebd358d38"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57985ee7e91d6214c837936dc1608f40f330a6b88bb13f5a57ce5257807da143"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:633a3b31d9d7c9f02d49c4ab4d0a86065c4a6f6adc297d63d272e043472acab5"}, - {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1c680b269d33ec444afe2bdc647c9eb73166fa47a16d9a75ee56a374f4a45f43"}, - {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f759503a97a6ace19e55461395ab0d618b5a117e8d0fbb20e70cfd68a47327f2"}, - {file = "orjson-3.10.6-cp310-none-win32.whl", hash = "sha256:95a0cce17f969fb5391762e5719575217bd10ac5a189d1979442ee54456393f3"}, - {file = "orjson-3.10.6-cp310-none-win_amd64.whl", hash = "sha256:df25d9271270ba2133cc88ee83c318372bdc0f2cd6f32e7a450809a111efc45c"}, - {file = "orjson-3.10.6-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b1ec490e10d2a77c345def52599311849fc063ae0e67cf4f84528073152bb2ba"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d43d3feb8f19d07e9f01e5b9be4f28801cf7c60d0fa0d279951b18fae1932b"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3045267e98fe749408eee1593a142e02357c5c99be0802185ef2170086a863"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c27bc6a28ae95923350ab382c57113abd38f3928af3c80be6f2ba7eb8d8db0b0"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d27456491ca79532d11e507cadca37fb8c9324a3976294f68fb1eff2dc6ced5a"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05ac3d3916023745aa3b3b388e91b9166be1ca02b7c7e41045da6d12985685f0"}, - {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1335d4ef59ab85cab66fe73fd7a4e881c298ee7f63ede918b7faa1b27cbe5212"}, - {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4bbc6d0af24c1575edc79994c20e1b29e6fb3c6a570371306db0993ecf144dc5"}, - {file = "orjson-3.10.6-cp311-none-win32.whl", hash = "sha256:450e39ab1f7694465060a0550b3f6d328d20297bf2e06aa947b97c21e5241fbd"}, - {file = "orjson-3.10.6-cp311-none-win_amd64.whl", hash = "sha256:227df19441372610b20e05bdb906e1742ec2ad7a66ac8350dcfd29a63014a83b"}, - {file = "orjson-3.10.6-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ea2977b21f8d5d9b758bb3f344a75e55ca78e3ff85595d248eee813ae23ecdfb"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6f3d167d13a16ed263b52dbfedff52c962bfd3d270b46b7518365bcc2121eed"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f710f346e4c44a4e8bdf23daa974faede58f83334289df80bc9cd12fe82573c7"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7275664f84e027dcb1ad5200b8b18373e9c669b2a9ec33d410c40f5ccf4b257e"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0943e4c701196b23c240b3d10ed8ecd674f03089198cf503105b474a4f77f21f"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:446dee5a491b5bc7d8f825d80d9637e7af43f86a331207b9c9610e2f93fee22a"}, - {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:64c81456d2a050d380786413786b057983892db105516639cb5d3ee3c7fd5148"}, - {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:960db0e31c4e52fa0fc3ecbaea5b2d3b58f379e32a95ae6b0ebeaa25b93dfd34"}, - {file = "orjson-3.10.6-cp312-none-win32.whl", hash = "sha256:a6ea7afb5b30b2317e0bee03c8d34c8181bc5a36f2afd4d0952f378972c4efd5"}, - {file = "orjson-3.10.6-cp312-none-win_amd64.whl", hash = "sha256:874ce88264b7e655dde4aeaacdc8fd772a7962faadfb41abe63e2a4861abc3dc"}, - {file = "orjson-3.10.6-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:66680eae4c4e7fc193d91cfc1353ad6d01b4801ae9b5314f17e11ba55e934183"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff75b425db5ef8e8f23af93c80f072f97b4fb3afd4af44482905c9f588da28"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3722fddb821b6036fd2a3c814f6bd9b57a89dc6337b9924ecd614ebce3271394"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2c116072a8533f2fec435fde4d134610f806bdac20188c7bd2081f3e9e0133f"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6eeb13218c8cf34c61912e9df2de2853f1d009de0e46ea09ccdf3d757896af0a"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965a916373382674e323c957d560b953d81d7a8603fbeee26f7b8248638bd48b"}, - {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03c95484d53ed8e479cade8628c9cea00fd9d67f5554764a1110e0d5aa2de96e"}, - {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e060748a04cccf1e0a6f2358dffea9c080b849a4a68c28b1b907f272b5127e9b"}, - {file = "orjson-3.10.6-cp38-none-win32.whl", hash = "sha256:738dbe3ef909c4b019d69afc19caf6b5ed0e2f1c786b5d6215fbb7539246e4c6"}, - {file = "orjson-3.10.6-cp38-none-win_amd64.whl", hash = "sha256:d40f839dddf6a7d77114fe6b8a70218556408c71d4d6e29413bb5f150a692ff7"}, - {file = "orjson-3.10.6-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:697a35a083c4f834807a6232b3e62c8b280f7a44ad0b759fd4dce748951e70db"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd502f96bf5ea9a61cbc0b2b5900d0dd68aa0da197179042bdd2be67e51a1e4b"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f215789fb1667cdc874c1b8af6a84dc939fd802bf293a8334fce185c79cd359b"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2debd8ddce948a8c0938c8c93ade191d2f4ba4649a54302a7da905a81f00b56"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5410111d7b6681d4b0d65e0f58a13be588d01b473822483f77f513c7f93bd3b2"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb1f28a137337fdc18384079fa5726810681055b32b92253fa15ae5656e1dddb"}, - {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf2fbbce5fe7cd1aa177ea3eab2b8e6a6bc6e8592e4279ed3db2d62e57c0e1b2"}, - {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:79b9b9e33bd4c517445a62b90ca0cc279b0f1f3970655c3df9e608bc3f91741a"}, - {file = "orjson-3.10.6-cp39-none-win32.whl", hash = "sha256:30b0a09a2014e621b1adf66a4f705f0809358350a757508ee80209b2d8dae219"}, - {file = "orjson-3.10.6-cp39-none-win_amd64.whl", hash = "sha256:49e3bc615652617d463069f91b867a4458114c5b104e13b7ae6872e5f79d0844"}, - {file = "orjson-3.10.6.tar.gz", hash = "sha256:e54b63d0a7c6c54a5f5f726bc93a2078111ef060fec4ecbf34c5db800ca3b3a7"}, + {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"}, ] [[package]] @@ -1068,62 +1178,64 @@ six = ">=1.5" [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] @@ -1201,15 +1313,26 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + [[package]] name = "syrupy" -version = "4.6.1" +version = "4.7.1" description = "Pytest Snapshot Test Utility" optional = false -python-versions = ">=3.8.1,<4" +python-versions = ">=3.8.1" files = [ - {file = "syrupy-4.6.1-py3-none-any.whl", hash = "sha256:203e52f9cb9fa749cf683f29bd68f02c16c3bc7e7e5fe8f2fc59bdfe488ce133"}, - {file = "syrupy-4.6.1.tar.gz", hash = "sha256:37a835c9ce7857eeef86d62145885e10b3cb9615bc6abeb4ce404b3f18e1bb36"}, + {file = "syrupy-4.7.1-py3-none-any.whl", hash = "sha256:be002267a512a4bedddfae2e026c93df1ea928ae10baadc09640516923376d41"}, + {file = "syrupy-4.7.1.tar.gz", hash = "sha256:f9d4485f3f27d0e5df6ed299cac6fa32eb40a441915d988e82be5a4bdda335c8"}, ] [package.dependencies] @@ -1243,13 +1366,13 @@ files = [ [[package]] name = "types-pillow" -version = "10.2.0.20240520" +version = "10.2.0.20240822" description = "Typing stubs for Pillow" optional = false python-versions = ">=3.8" files = [ - {file = "types-Pillow-10.2.0.20240520.tar.gz", hash = "sha256:130b979195465fa1e1676d8e81c9c7c30319e8e95b12fae945e8f0d525213107"}, - {file = "types_Pillow-10.2.0.20240520-py3-none-any.whl", hash = "sha256:33c36494b380e2a269bb742181bea5d9b00820367822dbd3760f07210a1da23d"}, + {file = "types-Pillow-10.2.0.20240822.tar.gz", hash = "sha256:559fb52a2ef991c326e4a0d20accb3bb63a7ba8d40eb493e0ecb0310ba52f0d3"}, + {file = "types_Pillow-10.2.0.20240822-py3-none-any.whl", hash = "sha256:d9dab025aba07aeb12fd50a6799d4eac52a9603488eca09d7662543983f16c5d"}, ] [[package]] @@ -1296,43 +1419,41 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "watchdog" -version = "4.0.1" +version = "5.0.2" description = "Filesystem events monitoring" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "watchdog-4.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:da2dfdaa8006eb6a71051795856bedd97e5b03e57da96f98e375682c48850645"}, - {file = "watchdog-4.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e93f451f2dfa433d97765ca2634628b789b49ba8b504fdde5837cdcf25fdb53b"}, - {file = "watchdog-4.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ef0107bbb6a55f5be727cfc2ef945d5676b97bffb8425650dadbb184be9f9a2b"}, - {file = "watchdog-4.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:17e32f147d8bf9657e0922c0940bcde863b894cd871dbb694beb6704cfbd2fb5"}, - {file = "watchdog-4.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:03e70d2df2258fb6cb0e95bbdbe06c16e608af94a3ffbd2b90c3f1e83eb10767"}, - {file = "watchdog-4.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:123587af84260c991dc5f62a6e7ef3d1c57dfddc99faacee508c71d287248459"}, - {file = "watchdog-4.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:093b23e6906a8b97051191a4a0c73a77ecc958121d42346274c6af6520dec175"}, - {file = "watchdog-4.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:611be3904f9843f0529c35a3ff3fd617449463cb4b73b1633950b3d97fa4bfb7"}, - {file = "watchdog-4.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:62c613ad689ddcb11707f030e722fa929f322ef7e4f18f5335d2b73c61a85c28"}, - {file = "watchdog-4.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d4925e4bf7b9bddd1c3de13c9b8a2cdb89a468f640e66fbfabaf735bd85b3e35"}, - {file = "watchdog-4.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cad0bbd66cd59fc474b4a4376bc5ac3fc698723510cbb64091c2a793b18654db"}, - {file = "watchdog-4.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a3c2c317a8fb53e5b3d25790553796105501a235343f5d2bf23bb8649c2c8709"}, - {file = "watchdog-4.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c9904904b6564d4ee8a1ed820db76185a3c96e05560c776c79a6ce5ab71888ba"}, - {file = "watchdog-4.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:667f3c579e813fcbad1b784db7a1aaa96524bed53437e119f6a2f5de4db04235"}, - {file = "watchdog-4.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d10a681c9a1d5a77e75c48a3b8e1a9f2ae2928eda463e8d33660437705659682"}, - {file = "watchdog-4.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0144c0ea9997b92615af1d94afc0c217e07ce2c14912c7b1a5731776329fcfc7"}, - {file = "watchdog-4.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:998d2be6976a0ee3a81fb8e2777900c28641fb5bfbd0c84717d89bca0addcdc5"}, - {file = "watchdog-4.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e7921319fe4430b11278d924ef66d4daa469fafb1da679a2e48c935fa27af193"}, - {file = "watchdog-4.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:f0de0f284248ab40188f23380b03b59126d1479cd59940f2a34f8852db710625"}, - {file = "watchdog-4.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bca36be5707e81b9e6ce3208d92d95540d4ca244c006b61511753583c81c70dd"}, - {file = "watchdog-4.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab998f567ebdf6b1da7dc1e5accfaa7c6992244629c0fdaef062f43249bd8dee"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:dddba7ca1c807045323b6af4ff80f5ddc4d654c8bce8317dde1bd96b128ed253"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:4513ec234c68b14d4161440e07f995f231be21a09329051e67a2118a7a612d2d"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_i686.whl", hash = "sha256:4107ac5ab936a63952dea2a46a734a23230aa2f6f9db1291bf171dac3ebd53c6"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:6e8c70d2cd745daec2a08734d9f63092b793ad97612470a0ee4cbb8f5f705c57"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f27279d060e2ab24c0aa98363ff906d2386aa6c4dc2f1a374655d4e02a6c5e5e"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:f8affdf3c0f0466e69f5b3917cdd042f89c8c63aebdb9f7c078996f607cdb0f5"}, - {file = "watchdog-4.0.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ac7041b385f04c047fcc2951dc001671dee1b7e0615cde772e84b01fbf68ee84"}, - {file = "watchdog-4.0.1-py3-none-win32.whl", hash = "sha256:206afc3d964f9a233e6ad34618ec60b9837d0582b500b63687e34011e15bb429"}, - {file = "watchdog-4.0.1-py3-none-win_amd64.whl", hash = "sha256:7577b3c43e5909623149f76b099ac49a1a01ca4e167d1785c76eb52fa585745a"}, - {file = "watchdog-4.0.1-py3-none-win_ia64.whl", hash = "sha256:d7b9f5f3299e8dd230880b6c55504a1f69cf1e4316275d1b215ebdd8187ec88d"}, - {file = "watchdog-4.0.1.tar.gz", hash = "sha256:eebaacf674fa25511e8867028d281e602ee6500045b57f43b08778082f7f8b44"}, + {file = "watchdog-5.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d961f4123bb3c447d9fcdcb67e1530c366f10ab3a0c7d1c0c9943050936d4877"}, + {file = "watchdog-5.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72990192cb63872c47d5e5fefe230a401b87fd59d257ee577d61c9e5564c62e5"}, + {file = "watchdog-5.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bec703ad90b35a848e05e1b40bf0050da7ca28ead7ac4be724ae5ac2653a1a0"}, + {file = "watchdog-5.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dae7a1879918f6544201d33666909b040a46421054a50e0f773e0d870ed7438d"}, + {file = "watchdog-5.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c4a440f725f3b99133de610bfec93d570b13826f89616377715b9cd60424db6e"}, + {file = "watchdog-5.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8b2918c19e0d48f5f20df458c84692e2a054f02d9df25e6c3c930063eca64c1"}, + {file = "watchdog-5.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:aa9cd6e24126d4afb3752a3e70fce39f92d0e1a58a236ddf6ee823ff7dba28ee"}, + {file = "watchdog-5.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f627c5bf5759fdd90195b0c0431f99cff4867d212a67b384442c51136a098ed7"}, + {file = "watchdog-5.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d7594a6d32cda2b49df3fd9abf9b37c8d2f3eab5df45c24056b4a671ac661619"}, + {file = "watchdog-5.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba32efcccfe2c58f4d01115440d1672b4eb26cdd6fc5b5818f1fb41f7c3e1889"}, + {file = "watchdog-5.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:963f7c4c91e3f51c998eeff1b3fb24a52a8a34da4f956e470f4b068bb47b78ee"}, + {file = "watchdog-5.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8c47150aa12f775e22efff1eee9f0f6beee542a7aa1a985c271b1997d340184f"}, + {file = "watchdog-5.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:14dd4ed023d79d1f670aa659f449bcd2733c33a35c8ffd88689d9d243885198b"}, + {file = "watchdog-5.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b84bff0391ad4abe25c2740c7aec0e3de316fdf7764007f41e248422a7760a7f"}, + {file = "watchdog-5.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e8d5ff39f0a9968952cce548e8e08f849141a4fcc1290b1c17c032ba697b9d7"}, + {file = "watchdog-5.0.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fb223456db6e5f7bd9bbd5cd969f05aae82ae21acc00643b60d81c770abd402b"}, + {file = "watchdog-5.0.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9814adb768c23727a27792c77812cf4e2fd9853cd280eafa2bcfa62a99e8bd6e"}, + {file = "watchdog-5.0.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:901ee48c23f70193d1a7bc2d9ee297df66081dd5f46f0ca011be4f70dec80dab"}, + {file = "watchdog-5.0.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:638bcca3d5b1885c6ec47be67bf712b00a9ab3d4b22ec0881f4889ad870bc7e8"}, + {file = "watchdog-5.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5597c051587f8757798216f2485e85eac583c3b343e9aa09127a3a6f82c65ee8"}, + {file = "watchdog-5.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:53ed1bf71fcb8475dd0ef4912ab139c294c87b903724b6f4a8bd98e026862e6d"}, + {file = "watchdog-5.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:29e4a2607bd407d9552c502d38b45a05ec26a8e40cc7e94db9bb48f861fa5abc"}, + {file = "watchdog-5.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:b6dc8f1d770a8280997e4beae7b9a75a33b268c59e033e72c8a10990097e5fde"}, + {file = "watchdog-5.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:d2ab34adc9bf1489452965cdb16a924e97d4452fcf88a50b21859068b50b5c3b"}, + {file = "watchdog-5.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:7d1aa7e4bb0f0c65a1a91ba37c10e19dabf7eaaa282c5787e51371f090748f4b"}, + {file = "watchdog-5.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:726eef8f8c634ac6584f86c9c53353a010d9f311f6c15a034f3800a7a891d941"}, + {file = "watchdog-5.0.2-py3-none-win32.whl", hash = "sha256:bda40c57115684d0216556671875e008279dea2dc00fcd3dde126ac8e0d7a2fb"}, + {file = "watchdog-5.0.2-py3-none-win_amd64.whl", hash = "sha256:d010be060c996db725fbce7e3ef14687cdcc76f4ca0e4339a68cc4532c382a73"}, + {file = "watchdog-5.0.2-py3-none-win_ia64.whl", hash = "sha256:3960136b2b619510569b90f0cd96408591d6c251a75c97690f4553ca88889769"}, + {file = "watchdog-5.0.2.tar.gz", hash = "sha256:dcebf7e475001d2cdeb020be630dc5b687e9acdd60d16fea6bb4508e7b94cf76"}, ] [package.extras] @@ -1340,101 +1461,103 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "yarl" -version = "1.9.4" +version = "1.9.10" description = "Yet another URL library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, + {file = "yarl-1.9.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:31cc725911654fe77b4a21b79c4ba08d71bd9074a4cf1f8fcc1aca6b9ece5b29"}, + {file = "yarl-1.9.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b37f1400f0e6d86cadcfc701c149c6cd8aa8c851cab38813d3d0cb9e1f8e5014"}, + {file = "yarl-1.9.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:592cb002e7b4a52313d6bcd8196b1f8b9e0b86e3bcac374e3c95375a59cf9456"}, + {file = "yarl-1.9.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6f7a9e88643d1ccfe7c51eb904c5cf357b85dbe5de6c562724533e4794c45f"}, + {file = "yarl-1.9.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:116c1fa600f0afabdb312bf1b95767098c03d5550bae5c648b63aa2a95a84f6c"}, + {file = "yarl-1.9.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7979df841db760b2ea957a7a05cbcbb29132adafdba4c4e713f7bac9f6c6e1c"}, + {file = "yarl-1.9.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1045aca1d48c9f614cdcebce5345cd4e8be0b856b608aaa2fcb67ea3c816ff9a"}, + {file = "yarl-1.9.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec055bf02fe03b6bb06966b80b79ddfc26501a8bcf7213d2c8a4c1a09d6ad6a3"}, + {file = "yarl-1.9.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:30c9956ea776067dff46aa988899f1218b217469ec6a447d9d0021bd4653ce28"}, + {file = "yarl-1.9.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:07354c6cf182fe130ae0392f54d76f864a105134bef88f71f98365d323be7115"}, + {file = "yarl-1.9.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1f2b93e00243d8d0cedf82c0eaaa5cde27e0e4040013387085a0362ea8068f8d"}, + {file = "yarl-1.9.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:4f0da5a07def830dacd610675f1821702f252f6b3f8d5a1d5a282bc874497f4c"}, + {file = "yarl-1.9.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:83bb7b9d1d02442b0d6218f6cf4fc748aca6f1a077f1ffef1f73d8adf44f359a"}, + {file = "yarl-1.9.10-cp310-cp310-win32.whl", hash = "sha256:5be05d6c8980e6ef818a7a789b49a4fd2253068cfd6dff8291030ea1b6002922"}, + {file = "yarl-1.9.10-cp310-cp310-win_amd64.whl", hash = "sha256:742651d2e53e535ef93cfd338a9d3faaeb5cecb4e216904d4b08ef2b7971f9ac"}, + {file = "yarl-1.9.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:411df3ba2b58097e472468dd8a8a45696bb2fb4d8d98249d7ace6571c05a91c3"}, + {file = "yarl-1.9.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:437e969848de7bbb2e34abc93db6ccf307ba4acec708e40b710b17f15e691d30"}, + {file = "yarl-1.9.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f56bd2bdeeb2416cc45236ce10898dc19932d4cc21fd37aa2da0e281112cde16"}, + {file = "yarl-1.9.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f749ae3f9c3d4fbe42fe24bcd7ce81e785683fd144415540598a6f3769c8f52"}, + {file = "yarl-1.9.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb52a9d5286c300c34630f58d4403412bda1cebc4a7881b462a23f8cc5d2476e"}, + {file = "yarl-1.9.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ceba7b6ee24db0db6db329d5fe1ed1b8e95225e0343bf2390e66042c661a3c6"}, + {file = "yarl-1.9.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6812f3b67111561226016af7edc5cbd340d455176edbc30e7c9d2c6b70eaae24"}, + {file = "yarl-1.9.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca7c4ef061b3e47514476ea40970df13a3db8c94db876adc95e3609767ed53b5"}, + {file = "yarl-1.9.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:197b01e0dab3beb349a7f7be2cfb0f69979fab128f4fbef0fb655b898c22bc71"}, + {file = "yarl-1.9.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c34c0b6f43f5b3107bd2e881e622585101c53c2c53e694ab9948e5252369628c"}, + {file = "yarl-1.9.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1ba0926703e64a8125054bbbba5d9dd8399465f298cd48338497506684221569"}, + {file = "yarl-1.9.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d6366324f622c81b7c806f0a93372fe68e85828fe70e5728be2fe2e1f618d498"}, + {file = "yarl-1.9.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:30f7b462b498fc1b109d319b77abb63cf74f71546e54785c92a62cfa296148de"}, + {file = "yarl-1.9.10-cp311-cp311-win32.whl", hash = "sha256:47ab8355ab667b908cf2a2bdd4edc8b27770fe327f915eafc440c5ea68a3df9c"}, + {file = "yarl-1.9.10-cp311-cp311-win_amd64.whl", hash = "sha256:c48beaecf7edd647e6688ad08bf0b89c88cfe18ea3d9077399e8fc08c9796276"}, + {file = "yarl-1.9.10-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:49cf15f65b86b48fd1403d14452d2f213475e763e5b4a67ece1e114f8b5c89ad"}, + {file = "yarl-1.9.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:78f1cc410fe6862726bef485a34f16aec24c6a4e1e1342ed2e3718cd3fe7c9ea"}, + {file = "yarl-1.9.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ec2c1eafd7b5f869fd40831509edebc85489678d8949c61e967f4688630098e1"}, + {file = "yarl-1.9.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:400bb873f7e1697830ef276a21d53cd63761b36a726fb9753cd00e7e00547449"}, + {file = "yarl-1.9.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c1142ad33527aac79209dd9ebf53f2536e01efc728b883605e66bf7688a6b74a"}, + {file = "yarl-1.9.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2920c39ddf5f710b6f70d9b6fe178dcd4c3bd0aeb7265d3fcdd97d55b944d664"}, + {file = "yarl-1.9.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:338931f1358501d70d99ed1185b126f627cdce29862a868690ebaa0a1056f6c9"}, + {file = "yarl-1.9.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d5ffbb8e6ba4cd7c5f9237f3543e2a3878eb2b45cb51579a0f83b3affcdd52d"}, + {file = "yarl-1.9.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7b33cdb0b98daf968b02f9ed0d729af480d2117c4f8ad307893dc4777ffd8ff8"}, + {file = "yarl-1.9.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:bf4104176a918df0abab01044cb243096b68c707c8da83c57d137530c4289b7e"}, + {file = "yarl-1.9.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b9384298eba7f7c411c8289311f80075f6a2221690cbd57347239d45bb54f149"}, + {file = "yarl-1.9.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0fbafb51e453c325660e7f4eb9e827b268bace2d5a924bcff0247c7d10ddd8d3"}, + {file = "yarl-1.9.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:05c0720f01f94c8d792ed8653a8bde7de143e5d6917ea86dcf51de9d3ba0e3ed"}, + {file = "yarl-1.9.10-cp312-cp312-win32.whl", hash = "sha256:99cbaf5b5072293de38432260eaddc46c84a1008eb48e05366c703680d67c32b"}, + {file = "yarl-1.9.10-cp312-cp312-win_amd64.whl", hash = "sha256:77832ed01e7587ebd56fc160a88ba677b9d706d368f78c73404aa04b9f69cbbb"}, + {file = "yarl-1.9.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0efb49c6637197749fa5f7cfb21d8922b82c61d063a7f88227fb5c81c5ea35e7"}, + {file = "yarl-1.9.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8318c8ec736dde091e02079ac82a4e3a9d67f6dfd23074dcc1f09b0517ed7660"}, + {file = "yarl-1.9.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ee2758c6db892ea27675e6b394a215d7bc88346e4a0952e6f2f789c71ab2d467"}, + {file = "yarl-1.9.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa990d9bcdaf96160347852833bbf5b738ae1d21ce4d676af540984ebdc2b9a"}, + {file = "yarl-1.9.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47923aada4a2cd85daa810c241f1ba05454f386054946244131ab801920f468"}, + {file = "yarl-1.9.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9ebf1191e47e31405e210e0926d44b110237104f8deca54735b40cb5a2b5f348"}, + {file = "yarl-1.9.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562ea9c21d2563af2cf062ceaf4530f6e8ce58e89a243df2eeae933781ea6864"}, + {file = "yarl-1.9.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:251d8e6ede8e1f1b6bad8da23d685ab8f79ee8647aabf7b0dc4619c6eb6d433b"}, + {file = "yarl-1.9.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8a5bd28e12bb85f2d8480097c4670bc5cf5f72c23613b0edbea8534d3b007c00"}, + {file = "yarl-1.9.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8a490845e0ded093ec503a90e236ea2cbd4e5873ec345a616f30f357a87e266d"}, + {file = "yarl-1.9.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c494cd77b080312ad881bf42ef90d27130a1cfc4d37dadbc2a8aaf03dd026443"}, + {file = "yarl-1.9.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4a80685a0355d12f2cc73fa07f070496802518f0a3d935754d2fecf4ecce9c3b"}, + {file = "yarl-1.9.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bc1ef802088a9a5351e3f00bdd2c504dda5c65d515b8ad72497d6802d6273b71"}, + {file = "yarl-1.9.10-cp313-cp313-win32.whl", hash = "sha256:a0f8e00f618d9e217c080ec87220da519c817a03a3138fe4cead992ec9b5d98b"}, + {file = "yarl-1.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:2a24180a47b0aacdd51403a22b2149627edc5f01cc851fe0dac7a279b6ce123d"}, + {file = "yarl-1.9.10-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7f6871d7f3ed5410274cad801f1669ee4e66cd647bd53dbde7151deabe19f4ed"}, + {file = "yarl-1.9.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0aa36416f7d2b984adff86f3e087ee402053c2a050ae232ff103177dff0f517e"}, + {file = "yarl-1.9.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:160d0a21abcd776d8589eb291bfe4c66f5aa754bda43f9346c561519aedb7f90"}, + {file = "yarl-1.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2aecbd90de8abfee55d67f7ae665452696f290ef74008dd505abeb40ba2be03d"}, + {file = "yarl-1.9.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecb9486e7d1c3a27318ac43aa0b364c5066c08858622fb054dde74e357f279a4"}, + {file = "yarl-1.9.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57021bc580ef6c8ef4eb9a7d4a26687da1a74cdce858696fb54bacadf4bc6ca8"}, + {file = "yarl-1.9.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b43880f6d6fad721786c62d74da7738d4c373d1dd321d9c2984a351b070a1d70"}, + {file = "yarl-1.9.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cba3210cb4116b184d717db123484181bdfa07bccfc2dfd24718bfcafaee3509"}, + {file = "yarl-1.9.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5bb04a89b7efdb9fb215e007b3dca30819a23757633f0ef24da19729a278d168"}, + {file = "yarl-1.9.10-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:17745e92cc05aa28284e62a1938fd8e83ece4cddd0be44bf8b69bd0445b1d6ac"}, + {file = "yarl-1.9.10-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:642c387a51b99a18c99a7b781cd8c0ceaca0c6f956e2a01ccc1d624386021d86"}, + {file = "yarl-1.9.10-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:075261df1a9b28753d8af133b4fef97931a6f85515615241e76d73a655a0fdae"}, + {file = "yarl-1.9.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a9d3826d3294cffb30598ecbf7660a45b42add21588a3cbb297f26141cd3ba41"}, + {file = "yarl-1.9.10-cp38-cp38-win32.whl", hash = "sha256:a8ab1274030afb9f802fad41ce143a0971788509e47d187fad4560873938d308"}, + {file = "yarl-1.9.10-cp38-cp38-win_amd64.whl", hash = "sha256:8aafa5ee1970027c11aee1c99999142e76de769bcca8f5364e06eee739d05e5b"}, + {file = "yarl-1.9.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f8d0e045f7788011b0b44e19f04ce62a3329e6af08a3382b8ec8070798aef"}, + {file = "yarl-1.9.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4a638b73d4037b4f9e52514fec402ca97c98ef7af16909dd5c06254f23d2018e"}, + {file = "yarl-1.9.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8dd3be4068df64d952dc4488511fcda0809af99596639b5e4cd8f5b797d7f8ce"}, + {file = "yarl-1.9.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f40c88d185300b6d177e08f4b8359354e1ba10b564b2bcd9a14ac3fdb679e2f9"}, + {file = "yarl-1.9.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7e7190a70a7067da2af6dc325032f07544bfc9fbca4ae471e76e8ace18cf408c"}, + {file = "yarl-1.9.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d56c0498efc6bd13e9f25a0e67fee5544ae70f776983ac7c01a39694695eb0e2"}, + {file = "yarl-1.9.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb09fbd303586c96110cac521d6236e12b97d555f0cf5b086d59eaf643c7d75"}, + {file = "yarl-1.9.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:892b37b4abaed283c01240a732a384fc239e875b39f3e9c774482e50451142eb"}, + {file = "yarl-1.9.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fe487b0399a850c8adf4158972331345541961b8aa17a35f050d6c3707c95965"}, + {file = "yarl-1.9.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:b7a83d465037cae9a578dbc73b271aaa772e5b18412b1034a4187e3cd3246930"}, + {file = "yarl-1.9.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:df831cca0bb7af9494f7e9008a8099c7dda35bb1e540a00fd695889458cde945"}, + {file = "yarl-1.9.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:dccfee37fb7cda974627de852e88770a5618b4975a269a2ca076b860990b4a8c"}, + {file = "yarl-1.9.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bed9ff4834fed52ad8d4716ab1846b2445ed3341f5d376905ea02bb5d3d861df"}, + {file = "yarl-1.9.10-cp39-cp39-win32.whl", hash = "sha256:410657b3267d5b95a84b1bbdfae03a58fb18b144f3f8e17505bf5df3b7440953"}, + {file = "yarl-1.9.10-cp39-cp39-win_amd64.whl", hash = "sha256:453784dbe38495749ea3ac00eb96c358d52a360fd54a8e8a901f38b22227c302"}, + {file = "yarl-1.9.10-py3-none-any.whl", hash = "sha256:6367b8f2e885e0357dd8449a94f6d67480d1b2b7265eb0e54f2b226258f13b4c"}, + {file = "yarl-1.9.10.tar.gz", hash = "sha256:f3a76bd93dfb1fffc48123ed266fa085fdfce5766ff61231da3f07c0e3367056"}, ] [package.dependencies] @@ -1443,5 +1566,5 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" -python-versions = ">=3.8.1,<4.0" -content-hash = "6acf7fa18caa83c76267748e07a1f53c0f5eef8a3b1d8cff07169c224b200a2d" +python-versions = ">=3.9,<4.0" +content-hash = "cc5c2b6874d5b847d446d3cfed891166452a59f98e48dcd1c7998bf547945c45" diff --git a/libs/ai-endpoints/pyproject.toml b/libs/ai-endpoints/pyproject.toml index 09206860..a5b32ea9 100644 --- a/libs/ai-endpoints/pyproject.toml +++ b/libs/ai-endpoints/pyproject.toml @@ -11,8 +11,8 @@ license = "MIT" "Source Code" = "https://github.com/langchain-ai/langchain-nvidia/tree/main/libs/ai-endpoints" [tool.poetry.dependencies] -python = ">=3.8.1,<4.0" -langchain-core = ">=0.2.22,<0.3" +python = ">=3.9,<4.0" +langchain-core = { git = "https://github.com/langchain-ai/langchain.git", subdirectory = "libs/core", branch = "v0.3rc" } aiohttp = "^3.9.1" pillow = ">=10.0.0,<11.0.0" @@ -26,7 +26,6 @@ pytest-mock = "^3.10.0" syrupy = "^4.0.2" pytest-watcher = "^0.3.4" pytest-asyncio = "^0.21.1" -langchain-core = { git = "https://github.com/langchain-ai/langchain.git", subdirectory = "libs/core" } requests-mock = "^1.11.0" faker = "^24.4.0" @@ -52,13 +51,11 @@ ruff = "^0.1.5" mypy = "^0.991" types-requests = "^2.31.0.10" types-pillow = "^10.2.0.20240125" -langchain-core = { git = "https://github.com/langchain-ai/langchain.git", subdirectory = "libs/core" } [tool.poetry.group.dev] optional = true [tool.poetry.group.dev.dependencies] -langchain-core = { git = "https://github.com/langchain-ai/langchain.git", subdirectory = "libs/core" } [tool.ruff.lint] select = [ diff --git a/libs/ai-endpoints/scripts/check_pydantic.sh b/libs/ai-endpoints/scripts/check_pydantic.sh deleted file mode 100755 index d0fa31d6..00000000 --- a/libs/ai-endpoints/scripts/check_pydantic.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# -# This script searches for lines starting with "import pydantic" or "from pydantic" -# in tracked files within a Git repository. -# -# Usage: ./scripts/check_pydantic.sh /path/to/repository - -# Check if a path argument is provided -if [ $# -ne 1 ]; then - echo "Usage: $0 /path/to/repository" - exit 1 -fi - -repository_path="$1" - -# Search for lines matching the pattern within the specified repository -result=$(git -C "$repository_path" grep -E '^import pydantic|^from pydantic' | grep -v "# ignore: check_pydantic") - -# Check if any matching lines were found -if [ -n "$result" ]; then - echo "ERROR: The following lines need to be updated:" - echo "$result" - echo "Please replace the code with an import from langchain_core.pydantic_v1." - echo "For example, replace 'from pydantic import BaseModel'" - echo "with 'from langchain_core.pydantic_v1 import BaseModel'" - exit 1 -fi diff --git a/libs/ai-endpoints/tests/integration_tests/test_bind_tools.py b/libs/ai-endpoints/tests/integration_tests/test_bind_tools.py index c9a84b69..f01f43b3 100644 --- a/libs/ai-endpoints/tests/integration_tests/test_bind_tools.py +++ b/libs/ai-endpoints/tests/integration_tests/test_bind_tools.py @@ -9,8 +9,8 @@ BaseMessage, BaseMessageChunk, ) -from langchain_core.pydantic_v1 import Field from langchain_core.tools import tool +from pydantic import Field from langchain_nvidia_ai_endpoints import ChatNVIDIA diff --git a/libs/ai-endpoints/tests/integration_tests/test_structured_output.py b/libs/ai-endpoints/tests/integration_tests/test_structured_output.py index 3f4f5aa8..1f059e75 100644 --- a/libs/ai-endpoints/tests/integration_tests/test_structured_output.py +++ b/libs/ai-endpoints/tests/integration_tests/test_structured_output.py @@ -3,7 +3,7 @@ import pytest from langchain_core.messages import HumanMessage -from langchain_core.pydantic_v1 import BaseModel, Field +from pydantic import BaseModel, Field from langchain_nvidia_ai_endpoints import ChatNVIDIA diff --git a/libs/ai-endpoints/tests/unit_tests/test_api_key.py b/libs/ai-endpoints/tests/unit_tests/test_api_key.py index 2564b05b..552c4703 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_api_key.py +++ b/libs/ai-endpoints/tests/unit_tests/test_api_key.py @@ -3,7 +3,7 @@ from typing import Any, Generator import pytest -from langchain_core.pydantic_v1 import SecretStr +from pydantic import SecretStr from requests_mock import Mocker diff --git a/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py b/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py index a8f044f9..2a5cd2ba 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py +++ b/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py @@ -13,8 +13,8 @@ HumanMessage, ToolMessage, ) -from langchain_core.pydantic_v1 import BaseModel, Field from langchain_core.tools import tool +from pydantic import BaseModel, Field from langchain_nvidia_ai_endpoints import ChatNVIDIA diff --git a/libs/ai-endpoints/tests/unit_tests/test_structured_output.py b/libs/ai-endpoints/tests/unit_tests/test_structured_output.py index 053b10b3..e7601fa3 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_structured_output.py +++ b/libs/ai-endpoints/tests/unit_tests/test_structured_output.py @@ -4,9 +4,9 @@ import pytest import requests_mock -from langchain_core.pydantic_v1 import BaseModel as lc_pydanticV1BaseModel -from langchain_core.pydantic_v1 import Field +from pydantic import BaseModel as lc_pydanticV1BaseModel from pydantic import BaseModel as pydanticV2BaseModel # ignore: check_pydantic +from pydantic import Field from pydantic.v1 import BaseModel as pydanticV1BaseModel # ignore: check_pydantic from langchain_nvidia_ai_endpoints import ChatNVIDIA From 9df872f0c9486e146591da68823f66aa9e672f35 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Mon, 16 Sep 2024 16:18:53 -0400 Subject: [PATCH 02/30] move api key var name out of class, it is a constant --- .../ai-endpoints/langchain_nvidia_ai_endpoints/_common.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py index c69f12bd..55481e40 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py @@ -35,6 +35,7 @@ logger = logging.getLogger(__name__) +_API_KEY_VAR = "NVIDIA_API_KEY" class _NVIDIAClient(BaseModel): """ @@ -54,7 +55,6 @@ class _NVIDIAClient(BaseModel): ) ## Core defaults. These probably should not be changed - _api_key_var: str = PrivateAttr("NVIDIA_API_KEY") base_url: str = Field( ..., description="Base URL for standard inference", @@ -119,9 +119,9 @@ def _validate_base_url(cls, v: str) -> str: @classmethod def _preprocess_args(cls, values: Dict[str, Any]) -> Any: values["api_key"] = ( - values.get(cls._api_key_var.lower()) + values.get(_API_KEY_VAR.lower()) or values.get("api_key") - or os.getenv(cls._api_key_var) + or os.getenv(_API_KEY_VAR.upper()) or None ) @@ -236,7 +236,7 @@ def is_lc_serializable(cls) -> bool: @property def lc_secrets(self) -> Dict[str, str]: - return {"api_key": self._api_key_var} + return {"api_key": _API_KEY_VAR} @property def lc_attributes(self) -> Dict[str, Any]: From efe24f3524e26d15682e17047bc44ecd803056e9 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Mon, 16 Sep 2024 16:24:43 -0400 Subject: [PATCH 03/30] move base url var name out of class, it is a constant; address ModelPrivateAttr errors --- .../langchain_nvidia_ai_endpoints/_common.py | 2 ++ .../langchain_nvidia_ai_endpoints/chat_models.py | 10 ++++------ .../langchain_nvidia_ai_endpoints/embeddings.py | 8 +++----- libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py | 8 +++----- .../langchain_nvidia_ai_endpoints/reranking.py | 8 +++----- 5 files changed, 15 insertions(+), 21 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py index 55481e40..a56fd998 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py @@ -36,6 +36,8 @@ logger = logging.getLogger(__name__) _API_KEY_VAR = "NVIDIA_API_KEY" +_BASE_URL_VAR = "NVIDIA_BASE_URL" + class _NVIDIAClient(BaseModel): """ diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index 76ef1946..5aa0b0fe 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -52,7 +52,7 @@ from langchain_core.utils.pydantic import is_basemodel_subclass from pydantic import BaseModel, Field, PrivateAttr, model_validator -from langchain_nvidia_ai_endpoints._common import _NVIDIAClient +from langchain_nvidia_ai_endpoints._common import _BASE_URL_VAR, _NVIDIAClient from langchain_nvidia_ai_endpoints._statics import Model from langchain_nvidia_ai_endpoints._utils import convert_message_to_dict @@ -204,16 +204,14 @@ class ChatNVIDIA(BaseChatModel): seed: Optional[int] = Field(None, description="The seed for deterministic results") stop: Optional[Sequence[str]] = Field(None, description="Stop words (cased)") - _base_url_var: str = "NVIDIA_BASE_URL" - @model_validator(mode="before") @classmethod def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values["base_url"] = ( - values.get(cls.__private_attributes__["_base_url_var"].default.lower()) + values.get(_BASE_URL_VAR.lower()) or values.get("base_url") - or os.getenv(cls.__private_attributes__["_base_url_var"].default) - or cls.__private_attributes__["_default_base_url"].default + or os.getenv(_BASE_URL_VAR.upper()) + or cls._default_base_url ) return values diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py index 9b2ec552..a0cbbdbd 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py @@ -15,7 +15,7 @@ model_validator, ) -from langchain_nvidia_ai_endpoints._common import _NVIDIAClient +from langchain_nvidia_ai_endpoints._common import _BASE_URL_VAR, _NVIDIAClient from langchain_nvidia_ai_endpoints._statics import Model from langchain_nvidia_ai_endpoints.callbacks import usage_callback_var @@ -55,15 +55,13 @@ class NVIDIAEmbeddings(BaseModel, Embeddings): None, description="(DEPRECATED) The type of text to be embedded." ) - _base_url_var: str = "NVIDIA_BASE_URL" - @model_validator(mode="before") @classmethod def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values["base_url"] = ( - values.get(cls._base_url_var.lower()) + values.get(_BASE_URL_VAR.lower()) or values.get("base_url") - or os.getenv(cls._base_url_var) + or os.getenv(_BASE_URL_VAR.upper()) or cls._default_base_url ) return values diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py index 13ec5d30..90eb07c4 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py @@ -9,7 +9,7 @@ from langchain_core.outputs import GenerationChunk from pydantic import ConfigDict, Field, PrivateAttr, model_validator -from langchain_nvidia_ai_endpoints._common import _NVIDIAClient +from langchain_nvidia_ai_endpoints._common import _BASE_URL_VAR, _NVIDIAClient from langchain_nvidia_ai_endpoints._statics import Model @@ -30,8 +30,6 @@ class NVIDIA(LLM): ) model: Optional[str] = Field(description="The model to use for completions.") - _base_url_var: str = "NVIDIA_BASE_URL" - _init_args: Dict[str, Any] = PrivateAttr() """Stashed arguments given to the constructor that can be passed to the Completions API endpoint.""" @@ -40,9 +38,9 @@ class NVIDIA(LLM): @classmethod def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values["base_url"] = ( - values.get(cls._base_url_var.lower()) + values.get(_BASE_URL_VAR.lower()) or values.get("base_url") - or os.getenv(cls._base_url_var) + or os.getenv(_BASE_URL_VAR.upper()) or cls._default_base_url ) return values diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py index dd1caf73..17e4c074 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py @@ -14,7 +14,7 @@ model_validator, ) -from langchain_nvidia_ai_endpoints._common import _NVIDIAClient +from langchain_nvidia_ai_endpoints._common import _BASE_URL_VAR, _NVIDIAClient from langchain_nvidia_ai_endpoints._statics import Model @@ -53,15 +53,13 @@ class NVIDIARerank(BaseDocumentCompressor): _default_batch_size, ge=1, description="The maximum batch size." ) - _base_url_var: str = PrivateAttr("NVIDIA_BASE_URL") - @model_validator(mode="before") @classmethod def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values["base_url"] = ( - values.get(cls._base_url_var.lower()) + values.get(_BASE_URL_VAR.lower()) or values.get("base_url") - or os.getenv(cls._base_url_var) + or os.getenv(_BASE_URL_VAR.upper()) or cls._default_base_url ) return values From 3e5b4fe43a6397671858bfff9d7283736a68abaa Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Mon, 16 Sep 2024 16:43:10 -0400 Subject: [PATCH 04/30] make base_url Optional --- libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py | 2 +- libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py | 2 +- libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py | 2 +- libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index 5aa0b0fe..1b1ff7e9 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -190,7 +190,7 @@ class ChatNVIDIA(BaseChatModel): _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) _default_model_name: str = "meta/llama3-8b-instruct" _default_base_url: str = "https://integrate.api.nvidia.com/v1" - base_url: str = Field( + base_url: Optional[str] = Field( description="Base url for model listing an invocation", ) model: Optional[str] = Field(None, description="Name of the model to invoke") diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py index a0cbbdbd..03ec07a0 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py @@ -39,7 +39,7 @@ class NVIDIAEmbeddings(BaseModel, Embeddings): _default_model_name: str = PrivateAttr("nvidia/nv-embedqa-e5-v5") _default_max_batch_size: int = PrivateAttr(50) _default_base_url: str = PrivateAttr("https://integrate.api.nvidia.com/v1") - base_url: str = Field( + base_url: Optional[str] = Field( description="Base url for model listing an invocation", ) model: Optional[str] = Field(description="Name of the model to invoke") diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py index 90eb07c4..2a507f33 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py @@ -25,7 +25,7 @@ class NVIDIA(LLM): _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) _default_model_name: str = "nvidia/mistral-nemo-minitron-8b-base" _default_base_url: str = "https://integrate.api.nvidia.com/v1" - base_url: str = Field( + base_url: Optional[str] = Field( description="Base url for model listing and invocation", ) model: Optional[str] = Field(description="The model to use for completions.") diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py index 17e4c074..ea38c13f 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py @@ -37,7 +37,7 @@ class NVIDIARerank(BaseDocumentCompressor): _default_batch_size: int = PrivateAttr(32) _default_model_name: str = PrivateAttr("nvidia/nv-rerankqa-mistral-4b-v3") _default_base_url: str = PrivateAttr("https://integrate.api.nvidia.com/v1") - base_url: str = Field( + base_url: Optional[str] = Field( description="Base url for model listing an invocation", ) top_n: int = Field(5, ge=0, description="The number of documents to return.") From f3a44b121ca795ec9553ee3acf4e3c36f84bffba Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Mon, 16 Sep 2024 16:43:40 -0400 Subject: [PATCH 05/30] get value from ModelPrivateAttr with .default --- libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py | 2 +- libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py | 2 +- libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py | 2 +- libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index 1b1ff7e9..075a4867 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -211,7 +211,7 @@ def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values.get(_BASE_URL_VAR.lower()) or values.get("base_url") or os.getenv(_BASE_URL_VAR.upper()) - or cls._default_base_url + or cls._default_base_url.default ) return values diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py index 03ec07a0..928bb834 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py @@ -62,7 +62,7 @@ def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values.get(_BASE_URL_VAR.lower()) or values.get("base_url") or os.getenv(_BASE_URL_VAR.upper()) - or cls._default_base_url + or cls._default_base_url.default ) return values diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py index 2a507f33..de10948b 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py @@ -41,7 +41,7 @@ def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values.get(_BASE_URL_VAR.lower()) or values.get("base_url") or os.getenv(_BASE_URL_VAR.upper()) - or cls._default_base_url + or cls._default_base_url.default ) return values diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py index ea38c13f..b4e27fcf 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py @@ -60,7 +60,7 @@ def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values.get(_BASE_URL_VAR.lower()) or values.get("base_url") or os.getenv(_BASE_URL_VAR.upper()) - or cls._default_base_url + or cls._default_base_url.default ) return values From d57b1aaae20a9fee3ca20aaa5fab98fd721e0201 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Mon, 16 Sep 2024 16:44:00 -0400 Subject: [PATCH 06/30] set last_inputs default --- libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py index a56fd998..330ba15d 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py @@ -80,8 +80,8 @@ class _NVIDIAClient(BaseModel): ## Generation arguments timeout: float = Field(60, ge=0, description="Timeout for waiting on response (s)") interval: float = Field(0.02, ge=0, description="Interval for pulling response") - last_inputs: Optional[dict] = Field( - description="Last inputs sent over to the server" + last_inputs: dict = Field( + default={}, description="Last inputs sent over to the server" ) last_response: Response = Field( None, description="Last response sent from the server" From e2aaee7c182ce6a48a6c9122a4adc9e90a827f46 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Mon, 16 Sep 2024 16:48:50 -0400 Subject: [PATCH 07/30] move default base url out of class, it is a constant; address ModelPrivateAttr errors --- .../langchain_nvidia_ai_endpoints/chat_models.py | 6 ++++-- .../langchain_nvidia_ai_endpoints/embeddings.py | 5 +++-- libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py | 5 +++-- .../ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py | 6 ++++-- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index 075a4867..1bc89c8e 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -174,6 +174,9 @@ def _nv_vlm_adjust_input(message_dict: Dict[str, Any]) -> Dict[str, Any]: return message_dict +_DEFAULT_BASE_URL: str = "https://integrate.api.nvidia.com/v1" + + class ChatNVIDIA(BaseChatModel): """NVIDIA chat model. @@ -189,7 +192,6 @@ class ChatNVIDIA(BaseChatModel): _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) _default_model_name: str = "meta/llama3-8b-instruct" - _default_base_url: str = "https://integrate.api.nvidia.com/v1" base_url: Optional[str] = Field( description="Base url for model listing an invocation", ) @@ -211,7 +213,7 @@ def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values.get(_BASE_URL_VAR.lower()) or values.get("base_url") or os.getenv(_BASE_URL_VAR.upper()) - or cls._default_base_url.default + or _DEFAULT_BASE_URL ) return values diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py index 928bb834..5c98b5f3 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py @@ -19,6 +19,8 @@ from langchain_nvidia_ai_endpoints._statics import Model from langchain_nvidia_ai_endpoints.callbacks import usage_callback_var +_DEFAULT_BASE_URL: str = "https://integrate.api.nvidia.com/v1" + class NVIDIAEmbeddings(BaseModel, Embeddings): """ @@ -38,7 +40,6 @@ class NVIDIAEmbeddings(BaseModel, Embeddings): _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) _default_model_name: str = PrivateAttr("nvidia/nv-embedqa-e5-v5") _default_max_batch_size: int = PrivateAttr(50) - _default_base_url: str = PrivateAttr("https://integrate.api.nvidia.com/v1") base_url: Optional[str] = Field( description="Base url for model listing an invocation", ) @@ -62,7 +63,7 @@ def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values.get(_BASE_URL_VAR.lower()) or values.get("base_url") or os.getenv(_BASE_URL_VAR.upper()) - or cls._default_base_url.default + or _DEFAULT_BASE_URL ) return values diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py index de10948b..03cff942 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py @@ -12,6 +12,8 @@ from langchain_nvidia_ai_endpoints._common import _BASE_URL_VAR, _NVIDIAClient from langchain_nvidia_ai_endpoints._statics import Model +_DEFAULT_BASE_URL: str = "https://integrate.api.nvidia.com/v1" + class NVIDIA(LLM): """ @@ -24,7 +26,6 @@ class NVIDIA(LLM): _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) _default_model_name: str = "nvidia/mistral-nemo-minitron-8b-base" - _default_base_url: str = "https://integrate.api.nvidia.com/v1" base_url: Optional[str] = Field( description="Base url for model listing and invocation", ) @@ -41,7 +42,7 @@ def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values.get(_BASE_URL_VAR.lower()) or values.get("base_url") or os.getenv(_BASE_URL_VAR.upper()) - or cls._default_base_url.default + or _DEFAULT_BASE_URL ) return values diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py index b4e27fcf..c2876946 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py @@ -23,6 +23,9 @@ class Ranking(BaseModel): logit: float +_DEFAULT_BASE_URL: str = "https://integrate.api.nvidia.com/v1" + + class NVIDIARerank(BaseDocumentCompressor): """ LangChain Document Compressor that uses the NVIDIA NeMo Retriever Reranking API. @@ -36,7 +39,6 @@ class NVIDIARerank(BaseDocumentCompressor): _default_batch_size: int = PrivateAttr(32) _default_model_name: str = PrivateAttr("nvidia/nv-rerankqa-mistral-4b-v3") - _default_base_url: str = PrivateAttr("https://integrate.api.nvidia.com/v1") base_url: Optional[str] = Field( description="Base url for model listing an invocation", ) @@ -60,7 +62,7 @@ def _validate_base_url(cls, values: Dict[str, Any]) -> Any: values.get(_BASE_URL_VAR.lower()) or values.get("base_url") or os.getenv(_BASE_URL_VAR.upper()) - or cls._default_base_url.default + or _DEFAULT_BASE_URL ) return values From 778158087f59ef0fceb88ef5ac7d4b208ced10c0 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Mon, 16 Sep 2024 16:59:08 -0400 Subject: [PATCH 08/30] move default model name out of class, it is a constant --- .../chat_models.py | 4 ++-- .../embeddings.py | 4 ++-- .../langchain_nvidia_ai_endpoints/llm.py | 4 ++-- .../reranking.py | 4 ++-- .../tests/integration_tests/conftest.py | 20 +++++++++++++++---- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index 1bc89c8e..675ab1fb 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -175,6 +175,7 @@ def _nv_vlm_adjust_input(message_dict: Dict[str, Any]) -> Dict[str, Any]: _DEFAULT_BASE_URL: str = "https://integrate.api.nvidia.com/v1" +_DEFAULT_MODEL_NAME: str = "meta/llama3-8b-instruct" class ChatNVIDIA(BaseChatModel): @@ -191,7 +192,6 @@ class ChatNVIDIA(BaseChatModel): """ _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) - _default_model_name: str = "meta/llama3-8b-instruct" base_url: Optional[str] = Field( description="Base url for model listing an invocation", ) @@ -254,7 +254,7 @@ def __init__(self, **kwargs: Any): self._client = _NVIDIAClient( base_url=self.base_url, model_name=self.model, - default_hosted_model_name=self._default_model_name, + default_hosted_model_name=_DEFAULT_MODEL_NAME, api_key=kwargs.get("nvidia_api_key", kwargs.get("api_key", None)), infer_path="{base_url}/chat/completions", cls=self.__class__.__name__, diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py index 5c98b5f3..1315e8bc 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py @@ -20,6 +20,7 @@ from langchain_nvidia_ai_endpoints.callbacks import usage_callback_var _DEFAULT_BASE_URL: str = "https://integrate.api.nvidia.com/v1" +_DEFAULT_MODEL_NAME: str = "nvidia/nv-embedqa-e5-v5" class NVIDIAEmbeddings(BaseModel, Embeddings): @@ -38,7 +39,6 @@ class NVIDIAEmbeddings(BaseModel, Embeddings): ) _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) - _default_model_name: str = PrivateAttr("nvidia/nv-embedqa-e5-v5") _default_max_batch_size: int = PrivateAttr(50) base_url: Optional[str] = Field( description="Base url for model listing an invocation", @@ -99,7 +99,7 @@ def __init__(self, **kwargs: Any): self._client = _NVIDIAClient( base_url=self.base_url, model_name=self.model, - default_hosted_model_name=self._default_model_name, + default_hosted_model_name=_DEFAULT_MODEL_NAME, api_key=kwargs.get("nvidia_api_key", kwargs.get("api_key", None)), infer_path="{base_url}/embeddings", cls=self.__class__.__name__, diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py index 03cff942..a2dff5cc 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py @@ -13,6 +13,7 @@ from langchain_nvidia_ai_endpoints._statics import Model _DEFAULT_BASE_URL: str = "https://integrate.api.nvidia.com/v1" +_DEFAULT_MODEL_NAME: str = "nvidia/mistral-nemo-minitron-8b-base" class NVIDIA(LLM): @@ -25,7 +26,6 @@ class NVIDIA(LLM): ) _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) - _default_model_name: str = "nvidia/mistral-nemo-minitron-8b-base" base_url: Optional[str] = Field( description="Base url for model listing and invocation", ) @@ -113,7 +113,7 @@ def __init__(self, **kwargs: Any): self._client = _NVIDIAClient( base_url=self.base_url, model_name=self.model, - default_hosted_model_name=self._default_model_name, + default_hosted_model_name=_DEFAULT_MODEL_NAME, api_key=kwargs.pop("nvidia_api_key", kwargs.pop("api_key", None)), infer_path="{base_url}/completions", cls=self.__class__.__name__, diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py index c2876946..3be230d1 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py @@ -24,6 +24,7 @@ class Ranking(BaseModel): _DEFAULT_BASE_URL: str = "https://integrate.api.nvidia.com/v1" +_DEFAULT_MODEL_NAME: str = "nvidia/nv-rerankqa-mistral-4b-v3" class NVIDIARerank(BaseDocumentCompressor): @@ -38,7 +39,6 @@ class NVIDIARerank(BaseDocumentCompressor): _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) _default_batch_size: int = PrivateAttr(32) - _default_model_name: str = PrivateAttr("nvidia/nv-rerankqa-mistral-4b-v3") base_url: Optional[str] = Field( description="Base url for model listing an invocation", ) @@ -145,7 +145,7 @@ def __init__(self, **kwargs: Any): self._client = _NVIDIAClient( base_url=self.base_url, model_name=self.model, - default_hosted_model_name=self._default_model_name, + default_hosted_model_name=_DEFAULT_MODEL_NAME, api_key=kwargs.get("nvidia_api_key", kwargs.get("api_key", None)), infer_path="{base_url}/ranking", cls=self.__class__.__name__, diff --git a/libs/ai-endpoints/tests/integration_tests/conftest.py b/libs/ai-endpoints/tests/integration_tests/conftest.py index 15671c7f..0d787227 100644 --- a/libs/ai-endpoints/tests/integration_tests/conftest.py +++ b/libs/ai-endpoints/tests/integration_tests/conftest.py @@ -10,6 +10,18 @@ NVIDIARerank, ) from langchain_nvidia_ai_endpoints._statics import MODEL_TABLE, Model +from langchain_nvidia_ai_endpoints.chat_models import ( + _DEFAULT_MODEL_NAME as DEFAULT_CHAT_MODEL, +) +from langchain_nvidia_ai_endpoints.embeddings import ( + _DEFAULT_MODEL_NAME as DEFAULT_EMBEDDINGS_MODEL, +) +from langchain_nvidia_ai_endpoints.llm import ( + _DEFAULT_MODEL_NAME as DEFAULT_COMPLETIONS_MODEL, +) +from langchain_nvidia_ai_endpoints.reranking import ( + _DEFAULT_MODEL_NAME as DEFAULT_RERANKING_MODEL, +) def get_mode(config: pytest.Config) -> dict: @@ -87,7 +99,7 @@ def get_all_known_models() -> List[Model]: return list(MODEL_TABLE.values()) if "chat_model" in metafunc.fixturenames: - models = [ChatNVIDIA._default_model_name] + models = [DEFAULT_CHAT_MODEL] if model_list := metafunc.config.getoption("chat_model_id"): models = model_list if metafunc.config.getoption("all_models"): @@ -111,7 +123,7 @@ def get_all_known_models() -> List[Model]: metafunc.parametrize("tool_model", models, ids=models) if "completions_model" in metafunc.fixturenames: - models = [NVIDIA._default_model_name] + models = [DEFAULT_COMPLETIONS_MODEL] if model_list := metafunc.config.getoption("completions_model_id"): models = model_list if metafunc.config.getoption("all_models"): @@ -135,7 +147,7 @@ def get_all_known_models() -> List[Model]: metafunc.parametrize("structured_model", models, ids=models) if "rerank_model" in metafunc.fixturenames: - models = [NVIDIARerank._default_model_name] + models = [DEFAULT_RERANKING_MODEL] if model_list := metafunc.config.getoption("rerank_model_id"): models = model_list if metafunc.config.getoption("all_models"): @@ -167,7 +179,7 @@ def get_all_known_models() -> List[Model]: metafunc.parametrize("qa_model", models, ids=models) if "embedding_model" in metafunc.fixturenames: - models = [NVIDIAEmbeddings._default_model_name] + models = [DEFAULT_EMBEDDINGS_MODEL] if metafunc.config.getoption("all_models"): models = [model.id for model in NVIDIAEmbeddings(**mode).available_models] if model_list := metafunc.config.getoption("embedding_model_id"): From f0748631bba59926dc7fa8339e54bbbfd3316415 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Mon, 16 Sep 2024 17:08:40 -0400 Subject: [PATCH 09/30] ensure optional model has a default --- libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py | 2 +- libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py | 2 +- libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py index 1315e8bc..304ddc77 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py @@ -43,7 +43,7 @@ class NVIDIAEmbeddings(BaseModel, Embeddings): base_url: Optional[str] = Field( description="Base url for model listing an invocation", ) - model: Optional[str] = Field(description="Name of the model to invoke") + model: Optional[str] = Field(None, description="Name of the model to invoke") truncate: Literal["NONE", "START", "END"] = Field( default="NONE", description=( diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py index a2dff5cc..84d45053 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py @@ -29,7 +29,7 @@ class NVIDIA(LLM): base_url: Optional[str] = Field( description="Base url for model listing and invocation", ) - model: Optional[str] = Field(description="The model to use for completions.") + model: Optional[str] = Field(None, description="The model to use for completions.") _init_args: Dict[str, Any] = PrivateAttr() """Stashed arguments given to the constructor that can be passed to diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py index 3be230d1..7eaac13e 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py @@ -43,7 +43,7 @@ class NVIDIARerank(BaseDocumentCompressor): description="Base url for model listing an invocation", ) top_n: int = Field(5, ge=0, description="The number of documents to return.") - model: Optional[str] = Field(description="The model to use for reranking.") + model: Optional[str] = Field(None, description="The model to use for reranking.") truncate: Optional[Literal["NONE", "END"]] = Field( description=( "Truncate input text if it exceeds the model's maximum token length. " From 72a44efb77574696c0371a1880deb0479f163437 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Mon, 16 Sep 2024 17:10:18 -0400 Subject: [PATCH 10/30] ensure optional truncate has default --- libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py index 7eaac13e..e8ac3df1 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py @@ -45,6 +45,7 @@ class NVIDIARerank(BaseDocumentCompressor): top_n: int = Field(5, ge=0, description="The number of documents to return.") model: Optional[str] = Field(None, description="The model to use for reranking.") truncate: Optional[Literal["NONE", "END"]] = Field( + default=None, description=( "Truncate input text if it exceeds the model's maximum token length. " "Default is model dependent and is likely to raise error if an " From f1b8e1faefff5a224c35f7b539a3f1edc77f6456 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Mon, 16 Sep 2024 16:59:08 -0400 Subject: [PATCH 11/30] move default model name out of class, it is a constant --- libs/ai-endpoints/tests/unit_tests/test_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ai-endpoints/tests/unit_tests/test_model.py b/libs/ai-endpoints/tests/unit_tests/test_model.py index bf19b806..55067692 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_model.py +++ b/libs/ai-endpoints/tests/unit_tests/test_model.py @@ -163,7 +163,7 @@ def test_default_lora(public_class: type) -> None: def test_default(public_class: type) -> None: x = public_class(api_key="BOGUS") - assert x.model == x._default_model_name + assert x.model is not None @pytest.mark.parametrize( From d00015211e0bd8d0ae7dfa1a27f5a2545dd56093 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Tue, 17 Sep 2024 05:40:42 -0400 Subject: [PATCH 12/30] move default batch size out of class, it is a constant --- libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py index e8ac3df1..a14298e4 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py @@ -25,6 +25,7 @@ class Ranking(BaseModel): _DEFAULT_BASE_URL: str = "https://integrate.api.nvidia.com/v1" _DEFAULT_MODEL_NAME: str = "nvidia/nv-rerankqa-mistral-4b-v3" +_DEFAULT_BATCH_SIZE: int = 32 class NVIDIARerank(BaseDocumentCompressor): @@ -38,7 +39,6 @@ class NVIDIARerank(BaseDocumentCompressor): _client: _NVIDIAClient = PrivateAttr(_NVIDIAClient) - _default_batch_size: int = PrivateAttr(32) base_url: Optional[str] = Field( description="Base url for model listing an invocation", ) @@ -53,7 +53,7 @@ class NVIDIARerank(BaseDocumentCompressor): ), ) max_batch_size: int = Field( - _default_batch_size, ge=1, description="The maximum batch size." + _DEFAULT_BATCH_SIZE, ge=1, description="The maximum batch size." ) @model_validator(mode="before") From 2e8bbd01885348edddbe591e36d97f0f3b00a87d Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Tue, 17 Sep 2024 05:41:27 -0400 Subject: [PATCH 13/30] update test to use model_config instead of Config --- libs/ai-endpoints/tests/integration_tests/test_ranking.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/ai-endpoints/tests/integration_tests/test_ranking.py b/libs/ai-endpoints/tests/integration_tests/test_ranking.py index 06f9444b..47fc8438 100644 --- a/libs/ai-endpoints/tests/integration_tests/test_ranking.py +++ b/libs/ai-endpoints/tests/integration_tests/test_ranking.py @@ -66,11 +66,11 @@ def test_langchain_reranker_direct_empty_docs( def test_langchain_reranker_direct_top_n_negative( query: str, documents: List[Document], rerank_model: str, mode: dict ) -> None: - orig = NVIDIARerank.Config.validate_assignment - NVIDIARerank.Config.validate_assignment = False + orig = NVIDIARerank.model_config["validate_assignment"] + NVIDIARerank.model_config["validate_assignment"] = False ranker = NVIDIARerank(model=rerank_model, **mode) ranker.top_n = -100 - NVIDIARerank.Config.validate_assignment = orig + NVIDIARerank.model_config["validate_assignment"] = orig result_docs = ranker.compress_documents(documents=documents, query=query) assert len(result_docs) == 0 From e963a8d4828c77b9bd74e0b43919cfbae8768fbc Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Tue, 17 Sep 2024 05:42:22 -0400 Subject: [PATCH 14/30] schema is deprecated -> model_json_schema --- .../langchain_nvidia_ai_endpoints/chat_models.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index 675ab1fb..321c6702 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -735,7 +735,11 @@ def parse_result( return None output_parser = ForgivingPydanticOutputParser(pydantic_object=schema) - nvext_param = {"guided_json": schema.schema()} + if hasattr(schema, "model_json_schema"): + json_schema = schema.model_json_schema() + else: + json_schema = schema.schema() + nvext_param = {"guided_json": json_schema} else: raise ValueError( From 37551437ec9a0d059d30db3909ceea8ff795aa35 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Tue, 17 Sep 2024 05:53:09 -0400 Subject: [PATCH 15/30] remove structured output test for langchain_core.pydantic_v1 --- .../ai-endpoints/tests/unit_tests/test_structured_output.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libs/ai-endpoints/tests/unit_tests/test_structured_output.py b/libs/ai-endpoints/tests/unit_tests/test_structured_output.py index e7601fa3..7f4be094 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_structured_output.py +++ b/libs/ai-endpoints/tests/unit_tests/test_structured_output.py @@ -4,7 +4,6 @@ import pytest import requests_mock -from pydantic import BaseModel as lc_pydanticV1BaseModel from pydantic import BaseModel as pydanticV2BaseModel # ignore: check_pydantic from pydantic import Field from pydantic.v1 import BaseModel as pydanticV1BaseModel # ignore: check_pydantic @@ -12,7 +11,7 @@ from langchain_nvidia_ai_endpoints import ChatNVIDIA -class Joke(lc_pydanticV1BaseModel): +class Joke(pydanticV2BaseModel): """Joke to tell user.""" setup: str = Field(description="The setup of the joke") @@ -145,11 +144,10 @@ def test_stream_enum_incomplete( @pytest.mark.parametrize( "pydanticBaseModel", [ - lc_pydanticV1BaseModel, pydanticV1BaseModel, pydanticV2BaseModel, ], - ids=["lc-pydantic-v1", "pydantic-v1", "pydantic-v2"], + ids=["pydantic-v1", "pydantic-v2"], ) def test_pydantic_version( requests_mock: requests_mock.Mocker, From 9044a6a4beae80372211b9c0cba322f5dca5a535 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Tue, 17 Sep 2024 05:54:29 -0400 Subject: [PATCH 16/30] remove langchain_core.pydantic_v1 from docs --- libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index 321c6702..d41da25f 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -577,7 +577,7 @@ def with_structured_output( # type: ignore 1. If a Pydantic schema is provided, the model will return a Pydantic object. Example: ``` - from langchain_core.pydantic_v1 import BaseModel, Field + from pydantic import BaseModel, Field class Joke(BaseModel): setup: str = Field(description="The setup of the joke") punchline: str = Field(description="The punchline to the joke") From af26c31adb72909c497b95450dcffcaff9839740 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Tue, 17 Sep 2024 06:12:05 -0400 Subject: [PATCH 17/30] fix cls._api_key_var -> _API_KEY_VAR after main merge --- libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py index 880b95f8..d64c694a 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py @@ -125,7 +125,7 @@ def _preprocess_args(cls, values: Dict[str, Any]) -> Any: # we can't use Field(default_factory=...) # because construction may happen with api_key=None if values.get("api_key") is None: - values["api_key"] = os.getenv(cls._api_key_var) + values["api_key"] = os.getenv(_API_KEY_VAR) ## Making sure /v1 in added to the url, followed by infer_path if "base_url" in values: From d59d1531c638e144a02576ba944f78fa89918db9 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Tue, 17 Sep 2024 11:26:05 -0400 Subject: [PATCH 18/30] align ChatNVIDIA.with_structured_output with BaseChatModel.with_structured_output's signature --- .../langchain_nvidia_ai_endpoints/chat_models.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index d41da25f..5e7beed2 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -57,8 +57,6 @@ from langchain_nvidia_ai_endpoints._utils import convert_message_to_dict _CallbackManager = Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun] -_DictOrPydanticOrEnumClass = Union[Dict[str, Any], Type[BaseModel], Type[enum.Enum]] -_DictOrPydanticOrEnum = Union[Dict, BaseModel, enum.Enum] try: import PIL.Image @@ -536,11 +534,11 @@ def bind_functions( # as a result need to type ignore for the schema parameter and return type. def with_structured_output( # type: ignore self, - schema: _DictOrPydanticOrEnumClass, + schema: Union[Dict, Type], *, include_raw: bool = False, **kwargs: Any, - ) -> Runnable[LanguageModelInput, _DictOrPydanticOrEnum]: + ) -> Runnable[LanguageModelInput, Union[Dict, BaseModel]]: """ Bind a structured output schema to the model. From 29a748ff61211e3c97d39d55eb8963063ecc4e9f Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Tue, 17 Sep 2024 12:41:04 -0400 Subject: [PATCH 19/30] align ChatNVIDIA.bind_tools with BaseChatModel.bind_tools' signature --- libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index 5e7beed2..c846154b 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -448,7 +448,7 @@ def _get_payload( def bind_tools( self, - tools: Sequence[Union[Dict[str, Any], Type[BaseModel], Callable, BaseTool]], + tools: Sequence[Union[Dict[str, Any], Type, Callable, BaseTool]], *, tool_choice: Optional[ Union[dict, str, Literal["auto", "none", "any", "required"], bool] From f10714612422bdf80cf7790d73e8a1d84f4a214e Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 12:24:37 -0400 Subject: [PATCH 20/30] fix type error in test mock, uncovered thanks to pydantic v2 --- libs/ai-endpoints/tests/unit_tests/test_bind_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py b/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py index 299a5519..9553a315 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py +++ b/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py @@ -163,7 +163,7 @@ def test_invoke_response_parsing( r'"{\""', r'"input\""', r'"\":"', - r"3", + r'"3"', r'"}"', ], [r'"{\"intput\": 3}"'], From cd387b3482d1d8953e1b45395c2830ebeebafb30 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 13:28:09 -0400 Subject: [PATCH 21/30] update copy (deprecated) -> model_copy --- libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py index 89b655b2..9d4b1d4b 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py @@ -529,7 +529,7 @@ def get_req_stream( stream=True, **self.__add_authorization(self.last_inputs) ) self._try_raise(response) - call = self.copy() + call: _NVIDIAClient = self.model_copy() def out_gen() -> Generator[dict, Any, Any]: ## Good for client, since it allows self.last_inputs From e35da457dfd32fc4ec1976b060abeb45ff8db9ce Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 13:33:17 -0400 Subject: [PATCH 22/30] add @tool test with Annotated --- .../tests/unit_tests/test_bind_tools.py | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py b/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py index 9553a315..175f80dc 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py +++ b/libs/ai-endpoints/tests/unit_tests/test_bind_tools.py @@ -2,7 +2,7 @@ import warnings from functools import reduce from operator import add -from typing import Any, List +from typing import Annotated, Any, List import pytest import requests_mock @@ -32,7 +32,7 @@ class xxyyzz_cls(BaseModel): @tool -def xxyyzz_tool( +def xxyyzz_tool_field( a: int = Field(..., description="First number"), b: int = Field(..., description="Second number"), ) -> int: @@ -40,14 +40,24 @@ def xxyyzz_tool( return 42 +@tool +def xxyyzz_tool_annotated( + a: Annotated[int, "First number"], + b: Annotated[int, "Second number"], +) -> int: + """xxyyzz two numbers""" + return 42 + + @pytest.mark.parametrize( "tools, choice", [ ([xxyyzz_func], "xxyyzz_func"), ([xxyyzz_cls], "xxyyzz_cls"), - ([xxyyzz_tool], "xxyyzz_tool"), + ([xxyyzz_tool_field], "xxyyzz_tool_field"), + ([xxyyzz_tool_annotated], "xxyyzz_tool_annotated"), ], - ids=["func", "cls", "tool"], + ids=["func", "cls", "tool_field", "tool_annotated"], ) def test_bind_tool_and_select(tools: Any, choice: str) -> None: warnings.filterwarnings( @@ -62,9 +72,10 @@ def test_bind_tool_and_select(tools: Any, choice: str) -> None: ([], "wrong"), ([xxyyzz_func], "wrong_xxyyzz_func"), ([xxyyzz_cls], "wrong_xxyyzz_cls"), - ([xxyyzz_tool], "wrong_xxyyzz_tool"), + ([xxyyzz_tool_field], "wrong_xxyyzz_tool_field"), + ([xxyyzz_tool_annotated], "wrong_xxyyzz_tool_annotated"), ], - ids=["empty", "func", "cls", "tool"], + ids=["empty", "func", "cls", "tool_field", "tool_annotated"], ) def test_bind_tool_and_select_negative(tools: Any, choice: str) -> None: warnings.filterwarnings( From 8d2bc6bbeae78fc426d2e6885f256d4a9aab8e6c Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 13:51:18 -0400 Subject: [PATCH 23/30] convert @validator(always=True) to @model_validator(mode="after") --- .../langchain_nvidia_ai_endpoints/_statics.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_statics.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_statics.py index f66537ec..b4d4cf40 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_statics.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_statics.py @@ -2,7 +2,7 @@ import warnings from typing import Literal, Optional -from pydantic import BaseModel, validator +from pydantic import BaseModel, model_validator class Model(BaseModel): @@ -37,21 +37,21 @@ class Model(BaseModel): def __hash__(self) -> int: return hash(self.id) - @validator("client", always=True) - def validate_client(cls, client: str, values: dict) -> str: - if client: + @model_validator(mode="after") + def validate_client(self) -> "Model": + if self.client: supported = { "ChatNVIDIA": ("chat", "vlm", "qa"), "NVIDIAEmbeddings": ("embedding",), "NVIDIARerank": ("ranking",), "NVIDIA": ("completions",), } - model_type = values.get("model_type") - if model_type not in supported[client]: + if self.model_type not in supported.get(self.client, ()): raise ValueError( - f"Model type '{model_type}' not supported by client '{client}'" + f"Model type '{self.model_type}' not supported " + f"by client '{self.client}'" ) - return client + return self CHAT_MODEL_TABLE = { From 5bc00802ab6609b361afd01181ecae08e8ea9bdf Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 13:51:42 -0400 Subject: [PATCH 24/30] fix input error in test mock, uncovered thanks to pydantic v2 --- libs/ai-endpoints/tests/unit_tests/test_register_model.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/ai-endpoints/tests/unit_tests/test_register_model.py b/libs/ai-endpoints/tests/unit_tests/test_register_model.py index 482d40dc..f87efa11 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_register_model.py +++ b/libs/ai-endpoints/tests/unit_tests/test_register_model.py @@ -21,9 +21,9 @@ ("vlm", "NVIDIAEmbeddings"), ("vlm", "NVIDIARerank"), ("vlm", "NVIDIA"), - ("embeddings", "ChatNVIDIA"), - ("embeddings", "NVIDIARerank"), - ("embeddings", "NVIDIA"), + ("embedding", "ChatNVIDIA"), + ("embedding", "NVIDIARerank"), + ("embedding", "NVIDIA"), ("ranking", "ChatNVIDIA"), ("ranking", "NVIDIAEmbeddings"), ("ranking", "NVIDIA"), From 9ff8d5de46ea1d94f0448262350d51b7a4f0c7fb Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 13:53:47 -0400 Subject: [PATCH 25/30] schema -> model_json_schema to address deprecation of schema --- libs/ai-endpoints/tests/unit_tests/test_structured_output.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ai-endpoints/tests/unit_tests/test_structured_output.py b/libs/ai-endpoints/tests/unit_tests/test_structured_output.py index 7f4be094..830bec3b 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_structured_output.py +++ b/libs/ai-endpoints/tests/unit_tests/test_structured_output.py @@ -38,7 +38,7 @@ def test_include_raw() -> None: with pytest.raises(NotImplementedError): ChatNVIDIA(api_key="BOGUS").with_structured_output( - Joke.schema(), include_raw=True + Joke.model_json_schema(), include_raw=True ) From 24c38593532108cb0b1f531d7ae58b8995a29123 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 13:57:54 -0400 Subject: [PATCH 26/30] ignore warning about mock-model --- libs/ai-endpoints/tests/unit_tests/test_202_polling.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libs/ai-endpoints/tests/unit_tests/test_202_polling.py b/libs/ai-endpoints/tests/unit_tests/test_202_polling.py index 18469e63..a3a5e644 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_202_polling.py +++ b/libs/ai-endpoints/tests/unit_tests/test_202_polling.py @@ -1,3 +1,5 @@ +import warnings + import requests_mock from langchain_core.messages import AIMessage @@ -32,6 +34,7 @@ def test_polling_auth_header( }, ) + warnings.filterwarnings("ignore", r".*type is unknown and inference may fail.*") client = ChatNVIDIA(model=mock_model, api_key="BOGUS") response = client.invoke("IGNORED") From 00eb8a0a4d244b20d411e0ac87a148ddd0e416fb Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 13:59:49 -0400 Subject: [PATCH 27/30] ignore warning about model not supporting structured output, model is not used --- libs/ai-endpoints/tests/unit_tests/test_structured_output.py | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/ai-endpoints/tests/unit_tests/test_structured_output.py b/libs/ai-endpoints/tests/unit_tests/test_structured_output.py index 830bec3b..81e4d8eb 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_structured_output.py +++ b/libs/ai-endpoints/tests/unit_tests/test_structured_output.py @@ -183,6 +183,7 @@ def test_pydantic_version( class Person(pydanticBaseModel): # type: ignore name: str + warnings.filterwarnings("ignore", r".*not known to support structured output.*") llm = ChatNVIDIA(api_key="BOGUS").with_structured_output(Person) response = llm.invoke("This is ignored.") assert isinstance(response, Person) From fbc669ee7fd93c694f13942ce5c5365cc5f37b13 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 14:05:20 -0400 Subject: [PATCH 28/30] model_name -> mdl_name to avoid the protected namespace "model_" --- .../langchain_nvidia_ai_endpoints/_common.py | 29 ++++++++++--------- .../chat_models.py | 4 +-- .../embeddings.py | 4 +-- .../langchain_nvidia_ai_endpoints/llm.py | 4 +-- .../reranking.py | 4 +-- .../tests/unit_tests/test_model.py | 2 +- 6 files changed, 24 insertions(+), 23 deletions(-) diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py index 9d4b1d4b..711321da 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/_common.py @@ -44,7 +44,8 @@ class _NVIDIAClient(BaseModel): """ default_hosted_model_name: str = Field(..., description="Default model name to use") - model_name: Optional[str] = Field(..., description="Name of the model to invoke") + # "mdl_name" because "model_" is a protected namespace in pydantic + mdl_name: Optional[str] = Field(..., description="Name of the model to invoke") model: Optional[Model] = Field(None, description="The model to invoke") is_hosted: bool = Field(True) cls: str = Field(..., description="Class Name") @@ -163,10 +164,10 @@ def __init__(self, **kwargs: Any): ) # set default model for hosted endpoint - if not self.model_name: - self.model_name = self.default_hosted_model_name + if not self.mdl_name: + self.mdl_name = self.default_hosted_model_name - if model := determine_model(self.model_name): + if model := determine_model(self.mdl_name): if not model.client: warnings.warn(f"Unable to determine validity of {model.id}") elif model.client != self.cls: @@ -184,27 +185,27 @@ def __init__(self, **kwargs: Any): candidates = [ model for model in self.available_models - if model.id == self.model_name + if model.id == self.mdl_name ] assert len(candidates) <= 1, ( - f"Multiple candidates for {self.model_name} " + f"Multiple candidates for {self.mdl_name} " f"in `available_models`: {candidates}" ) if candidates: model = candidates[0] warnings.warn( - f"Found {self.model_name} in available_models, but type is " + f"Found {self.mdl_name} in available_models, but type is " "unknown and inference may fail." ) else: raise ValueError( - f"Model {self.model_name} is unknown, check `available_models`" + f"Model {self.mdl_name} is unknown, check `available_models`" ) self.model = model - self.model_name = self.model.id # name may change because of aliasing + self.mdl_name = self.model.id # name may change because of aliasing else: # set default model - if not self.model_name: + if not self.mdl_name: valid_models = [ model for model in self.available_models @@ -212,9 +213,9 @@ def __init__(self, **kwargs: Any): ] self.model = next(iter(valid_models), None) if self.model: - self.model_name = self.model.id + self.mdl_name = self.model.id warnings.warn( - f"Default model is set as: {self.model_name}. \n" + f"Default model is set as: {self.mdl_name}. \n" "Set model using model parameter. \n" "To get available models use available_models property.", UserWarning, @@ -238,8 +239,8 @@ def lc_attributes(self) -> Dict[str, Any]: attributes: Dict[str, Any] = {} attributes["base_url"] = self.base_url - if self.model_name: - attributes["model"] = self.model_name + if self.mdl_name: + attributes["model"] = self.mdl_name return attributes diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py index e861343e..e10864fb 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/chat_models.py @@ -244,7 +244,7 @@ def __init__(self, **kwargs: Any): api_key = kwargs.pop("nvidia_api_key", kwargs.pop("api_key", None)) self._client = _NVIDIAClient( **({"base_url": base_url} if base_url else {}), # only pass if set - model_name=self.model, + mdl_name=self.model, default_hosted_model_name=_DEFAULT_MODEL_NAME, **({"api_key": api_key} if api_key else {}), # only pass if set infer_path="{base_url}/chat/completions", @@ -252,7 +252,7 @@ def __init__(self, **kwargs: Any): ) # todo: only store the model in one place # the model may be updated to a newer name during initialization - self.model = self._client.model_name + self.model = self._client.mdl_name # same for base_url self.base_url = self._client.base_url diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py index 20650902..f0849e6a 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/embeddings.py @@ -89,7 +89,7 @@ def __init__(self, **kwargs: Any): api_key = kwargs.pop("nvidia_api_key", kwargs.pop("api_key", None)) self._client = _NVIDIAClient( **({"base_url": base_url} if base_url else {}), # only pass if set - model_name=self.model, + mdl_name=self.model, default_hosted_model_name=_DEFAULT_MODEL_NAME, **({"api_key": api_key} if api_key else {}), # only pass if set infer_path="{base_url}/embeddings", @@ -97,7 +97,7 @@ def __init__(self, **kwargs: Any): ) # todo: only store the model in one place # the model may be updated to a newer name during initialization - self.model = self._client.model_name + self.model = self._client.mdl_name # same for base_url self.base_url = self._client.base_url diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py index 36599aaf..942e610d 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/llm.py @@ -105,7 +105,7 @@ def __init__(self, **kwargs: Any): api_key = kwargs.pop("nvidia_api_key", kwargs.pop("api_key", None)) self._client = _NVIDIAClient( **({"base_url": base_url} if base_url else {}), # only pass if set - model_name=self.model, + mdl_name=self.model, default_hosted_model_name=_DEFAULT_MODEL_NAME, **({"api_key": api_key} if api_key else {}), # only pass if set infer_path="{base_url}/completions", @@ -113,7 +113,7 @@ def __init__(self, **kwargs: Any): ) # todo: only store the model in one place # the model may be updated to a newer name during initialization - self.model = self._client.model_name + self.model = self._client.mdl_name # same for base_url self.base_url = self._client.base_url diff --git a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py index cb6fc1f9..d64f8d84 100644 --- a/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py +++ b/libs/ai-endpoints/langchain_nvidia_ai_endpoints/reranking.py @@ -136,7 +136,7 @@ def __init__(self, **kwargs: Any): api_key = kwargs.pop("nvidia_api_key", kwargs.pop("api_key", None)) self._client = _NVIDIAClient( **({"base_url": base_url} if base_url else {}), # only pass if set - model_name=self.model, + mdl_name=self.model, default_hosted_model_name=_DEFAULT_MODEL_NAME, **({"api_key": api_key} if api_key else {}), # only pass if set infer_path="{base_url}/ranking", @@ -144,7 +144,7 @@ def __init__(self, **kwargs: Any): ) # todo: only store the model in one place # the model may be updated to a newer name during initialization - self.model = self._client.model_name + self.model = self._client.mdl_name # same for base_url self.base_url = self._client.base_url diff --git a/libs/ai-endpoints/tests/unit_tests/test_model.py b/libs/ai-endpoints/tests/unit_tests/test_model.py index 55067692..4ef37849 100644 --- a/libs/ai-endpoints/tests/unit_tests/test_model.py +++ b/libs/ai-endpoints/tests/unit_tests/test_model.py @@ -96,7 +96,7 @@ def test_aliases(alias: str, client: Any) -> None: """ with pytest.warns(UserWarning) as record: x = client(model=alias, nvidia_api_key="a-bogus-key") - assert x.model == x._client.model_name + assert x.model == x._client.mdl_name assert isinstance(record[0].message, Warning) assert "deprecated" in record[0].message.args[0] From 83b1c91c67573fa1f132631f53725a2bad23ca04 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 16:46:36 -0400 Subject: [PATCH 29/30] use github version of langchain-core for dev & test --- libs/ai-endpoints/pyproject.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/ai-endpoints/pyproject.toml b/libs/ai-endpoints/pyproject.toml index 6168b042..73d0d0e2 100644 --- a/libs/ai-endpoints/pyproject.toml +++ b/libs/ai-endpoints/pyproject.toml @@ -26,7 +26,7 @@ pytest-mock = "^3.10.0" syrupy = "^4.0.2" pytest-watcher = "^0.3.4" pytest-asyncio = "^0.21.1" -langchain-core = ">=0.3.0,<0.4" +langchain-core = { git = "https://github.com/langchain-ai/langchain.git", subdirectory = "libs/core" } requests-mock = "^1.11.0" faker = "^24.4.0" @@ -52,13 +52,13 @@ ruff = "^0.1.5" mypy = "^0.991" types-requests = "^2.31.0.10" types-pillow = "^10.2.0.20240125" -langchain-core = ">=0.3.0,<0.4" +langchain-core = { git = "https://github.com/langchain-ai/langchain.git", subdirectory = "libs/core" } [tool.poetry.group.dev] optional = true [tool.poetry.group.dev.dependencies] -langchain-core = ">=0.3.0,<0.4" +langchain-core = { git = "https://github.com/langchain-ai/langchain.git", subdirectory = "libs/core" } [tool.ruff.lint] select = [ From 1015888a359742ab49c5106d2d3f2d2eb96ce063 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Wed, 18 Sep 2024 17:00:13 -0400 Subject: [PATCH 30/30] update poetry.lock --- libs/ai-endpoints/poetry.lock | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/libs/ai-endpoints/poetry.lock b/libs/ai-endpoints/poetry.lock index 38042e37..9eae9e8a 100644 --- a/libs/ai-endpoints/poetry.lock +++ b/libs/ai-endpoints/poetry.lock @@ -578,33 +578,38 @@ name = "langchain-core" version = "0.3.1" description = "Building applications with LLMs through composability" optional = false -python-versions = "<4.0,>=3.9" -files = [ - {file = "langchain_core-0.3.1-py3-none-any.whl", hash = "sha256:52656baafd9f14163f112c2828b4c3099170a99861479cdbb8e8949f4153b5c5"}, - {file = "langchain_core-0.3.1.tar.gz", hash = "sha256:c4609eba3969df633fb3e3f3378f51bac8b85cdea18f7cb09a1f44c6a1d07723"}, -] +python-versions = ">=3.9,<4.0" +files = [] +develop = false [package.dependencies] -jsonpatch = ">=1.33,<2.0" -langsmith = ">=0.1.117,<0.2.0" +jsonpatch = "^1.33" +langsmith = "^0.1.117" packaging = ">=23.2,<25" pydantic = [ {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] PyYAML = ">=5.3" -tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" +tenacity = "^8.1.0,!=8.4.0" typing-extensions = ">=4.7" +[package.source] +type = "git" +url = "https://github.com/langchain-ai/langchain.git" +reference = "HEAD" +resolved_reference = "84b831356c5e67ca2defdeb4c839d189a7c51a41" +subdirectory = "libs/core" + [[package]] name = "langsmith" -version = "0.1.121" +version = "0.1.122" 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.121-py3-none-any.whl", hash = "sha256:fdb1ac8a671d3904201bfeea197d87bded46a10d08f1034af464211872e29893"}, - {file = "langsmith-0.1.121.tar.gz", hash = "sha256:e9381b82a5bd484af9a51c3e96faea572746b8d617b070c1cda40cbbe48e33df"}, + {file = "langsmith-0.1.122-py3-none-any.whl", hash = "sha256:9c9cde442d7321e8557f5c45c14b1b643b8aa28acc3f844d3a0021a9571aad7c"}, + {file = "langsmith-0.1.122.tar.gz", hash = "sha256:56dff727ca529fe8df300e6e4759dc920efe10ab8cd602b4d6b51e33599214e6"}, ] [package.dependencies] @@ -1571,4 +1576,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "2cc1ebf6215e5b0e53c5b37dee304f21f489e5481d16845165fedf2db0cedd79" +content-hash = "fd55cec7f60515783c4b8f1cfcb696c8cd241979ac2f50323ba568a7ae2de039"