From ef2f875dfbd048d16a989bbef36bbe5555af443c Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Mon, 9 Dec 2024 19:56:48 -0800 Subject: [PATCH 01/14] core: deprecate PipelinePromptTemplate (#28644) --- libs/core/langchain_core/prompts/pipeline.py | 23 +++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/libs/core/langchain_core/prompts/pipeline.py b/libs/core/langchain_core/prompts/pipeline.py index e25a0a7f72461..f316ba3d12175 100644 --- a/libs/core/langchain_core/prompts/pipeline.py +++ b/libs/core/langchain_core/prompts/pipeline.py @@ -3,6 +3,7 @@ from pydantic import model_validator +from langchain_core._api.deprecation import deprecated from langchain_core.prompt_values import PromptValue from langchain_core.prompts.base import BasePromptTemplate from langchain_core.prompts.chat import BaseChatPromptTemplate @@ -12,8 +13,28 @@ def _get_inputs(inputs: dict, input_variables: list[str]) -> dict: return {k: inputs[k] for k in input_variables} +@deprecated( + since="0.3.22", + removal="1.0", + message=( + "This class is deprecated. Please see the docstring below or at the link" + " for a replacement option: " + "https://python.langchain.com/api_reference/core/prompts/langchain_core.prompts.pipeline.PipelinePromptTemplate.html" + ), +) class PipelinePromptTemplate(BasePromptTemplate): - """Prompt template for composing multiple prompt templates together. + """ + This has been deprecated in favor of chaining individual prompts together in your + code. E.g. using a for loop, you could do: + + .. code-block:: python + + my_input = {"key": "value"} + for name, prompt in pipeline_prompts: + my_input[name] = prompt.invoke(my_input).to_string() + my_output = final_prompt.invoke(my_input) + + Prompt template for composing multiple prompt templates together. This can be useful when you want to reuse parts of prompts. From d0e95971f533268a155914a2562cf7461f7ed47f Mon Sep 17 00:00:00 2001 From: hsm207 Date: Tue, 10 Dec 2024 06:00:07 +0100 Subject: [PATCH 02/14] langchain-weaviate: Remove outdated docs (#28058) Thank you for contributing to LangChain! - [x] **PR title**: "package: description" - Where "package" is whichever of langchain, community, core, etc. is being modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI changes. - Example: "community: add foobar LLM" Docs on how to do hybrid search with weaviate is covered [here](https://python.langchain.com/docs/integrations/vectorstores/weaviate/) @efriis --------- Co-authored-by: pookam90 Co-authored-by: Pooja Kamath <60406274+Pookam90@users.noreply.github.com> Co-authored-by: Erick Friis --- .../retrievers/weaviate-hybrid.ipynb | 297 ------------------ docs/vercel.json | 4 + 2 files changed, 4 insertions(+), 297 deletions(-) delete mode 100644 docs/docs/integrations/retrievers/weaviate-hybrid.ipynb diff --git a/docs/docs/integrations/retrievers/weaviate-hybrid.ipynb b/docs/docs/integrations/retrievers/weaviate-hybrid.ipynb deleted file mode 100644 index 9592435b918b1..0000000000000 --- a/docs/docs/integrations/retrievers/weaviate-hybrid.ipynb +++ /dev/null @@ -1,297 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "ce0f17b9", - "metadata": {}, - "source": [ - "# Weaviate Hybrid Search\n", - "\n", - ">[Weaviate](https://weaviate.io/developers/weaviate) is an open-source vector database.\n", - "\n", - ">[Hybrid search](https://weaviate.io/blog/hybrid-search-explained) is a technique that combines multiple search algorithms to improve the accuracy and relevance of search results. It uses the best features of both keyword-based search algorithms with vector search techniques.\n", - "\n", - ">The `Hybrid search in Weaviate` uses sparse and dense vectors to represent the meaning and context of search queries and documents.\n", - "\n", - "This notebook shows how to use `Weaviate hybrid search` as a LangChain retriever." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "c307b082", - "metadata": {}, - "source": [ - "Set up the retriever:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "bba863a2-977c-4add-b5f4-bfc33a80eae5", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "%pip install --upgrade --quiet weaviate-client" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "c10dd962", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "import weaviate\n", - "\n", - "WEAVIATE_URL = os.getenv(\"WEAVIATE_URL\")\n", - "auth_client_secret = (weaviate.AuthApiKey(api_key=os.getenv(\"WEAVIATE_API_KEY\")),)\n", - "client = weaviate.Client(\n", - " url=WEAVIATE_URL,\n", - " additional_headers={\n", - " \"X-Openai-Api-Key\": os.getenv(\"OPENAI_API_KEY\"),\n", - " },\n", - ")\n", - "\n", - "# client.schema.delete_all()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f47a2bfe", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain_community.retrievers import (\n", - " WeaviateHybridSearchRetriever,\n", - ")\n", - "from langchain_core.documents import Document" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "f2eff08e", - "metadata": {}, - "outputs": [], - "source": [ - "retriever = WeaviateHybridSearchRetriever(\n", - " client=client,\n", - " index_name=\"LangChain\",\n", - " text_key=\"text\",\n", - " attributes=[],\n", - " create_schema_if_missing=True,\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "b68debff", - "metadata": {}, - "source": [ - "Add some data:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "cd8a7b17", - "metadata": {}, - "outputs": [], - "source": [ - "docs = [\n", - " Document(\n", - " metadata={\n", - " \"title\": \"Embracing The Future: AI Unveiled\",\n", - " \"author\": \"Dr. Rebecca Simmons\",\n", - " },\n", - " page_content=\"A comprehensive analysis of the evolution of artificial intelligence, from its inception to its future prospects. Dr. Simmons covers ethical considerations, potentials, and threats posed by AI.\",\n", - " ),\n", - " Document(\n", - " metadata={\n", - " \"title\": \"Symbiosis: Harmonizing Humans and AI\",\n", - " \"author\": \"Prof. Jonathan K. Sterling\",\n", - " },\n", - " page_content=\"Prof. Sterling explores the potential for harmonious coexistence between humans and artificial intelligence. The book discusses how AI can be integrated into society in a beneficial and non-disruptive manner.\",\n", - " ),\n", - " Document(\n", - " metadata={\"title\": \"AI: The Ethical Quandary\", \"author\": \"Dr. Rebecca Simmons\"},\n", - " page_content=\"In her second book, Dr. Simmons delves deeper into the ethical considerations surrounding AI development and deployment. It is an eye-opening examination of the dilemmas faced by developers, policymakers, and society at large.\",\n", - " ),\n", - " Document(\n", - " metadata={\n", - " \"title\": \"Conscious Constructs: The Search for AI Sentience\",\n", - " \"author\": \"Dr. Samuel Cortez\",\n", - " },\n", - " page_content=\"Dr. Cortez takes readers on a journey exploring the controversial topic of AI consciousness. The book provides compelling arguments for and against the possibility of true AI sentience.\",\n", - " ),\n", - " Document(\n", - " metadata={\n", - " \"title\": \"Invisible Routines: Hidden AI in Everyday Life\",\n", - " \"author\": \"Prof. Jonathan K. Sterling\",\n", - " },\n", - " page_content=\"In his follow-up to 'Symbiosis', Prof. Sterling takes a look at the subtle, unnoticed presence and influence of AI in our everyday lives. It reveals how AI has become woven into our routines, often without our explicit realization.\",\n", - " ),\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "3c5970db", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['3a27b0a5-8dbb-4fee-9eba-8b6bc2c252be',\n", - " 'eeb9fd9b-a3ac-4d60-a55b-a63a25d3b907',\n", - " '7ebbdae7-1061-445f-a046-1989f2343d8f',\n", - " 'c2ab315b-3cab-467f-b23a-b26ed186318d',\n", - " 'b83765f2-e5d2-471f-8c02-c3350ade4c4f']" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "retriever.add_documents(docs)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "6e030694", - "metadata": {}, - "source": [ - "Do a hybrid search:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "bf7dbb98", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Document(page_content='In her second book, Dr. Simmons delves deeper into the ethical considerations surrounding AI development and deployment. It is an eye-opening examination of the dilemmas faced by developers, policymakers, and society at large.', metadata={}),\n", - " Document(page_content='A comprehensive analysis of the evolution of artificial intelligence, from its inception to its future prospects. Dr. Simmons covers ethical considerations, potentials, and threats posed by AI.', metadata={}),\n", - " Document(page_content=\"In his follow-up to 'Symbiosis', Prof. Sterling takes a look at the subtle, unnoticed presence and influence of AI in our everyday lives. It reveals how AI has become woven into our routines, often without our explicit realization.\", metadata={}),\n", - " Document(page_content='Prof. Sterling explores the potential for harmonious coexistence between humans and artificial intelligence. The book discusses how AI can be integrated into society in a beneficial and non-disruptive manner.', metadata={})]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "retriever.invoke(\"the ethical implications of AI\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "d0c5bb4d", - "metadata": {}, - "source": [ - "Do a hybrid search with where filter:" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "b2bc87c1", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Document(page_content='Prof. Sterling explores the potential for harmonious coexistence between humans and artificial intelligence. The book discusses how AI can be integrated into society in a beneficial and non-disruptive manner.', metadata={}),\n", - " Document(page_content=\"In his follow-up to 'Symbiosis', Prof. Sterling takes a look at the subtle, unnoticed presence and influence of AI in our everyday lives. It reveals how AI has become woven into our routines, often without our explicit realization.\", metadata={})]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "retriever.invoke(\n", - " \"AI integration in society\",\n", - " where_filter={\n", - " \"path\": [\"author\"],\n", - " \"operator\": \"Equal\",\n", - " \"valueString\": \"Prof. Jonathan K. Sterling\",\n", - " },\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "5ae2899e", - "metadata": {}, - "source": [ - "Do a hybrid search with scores:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "4fffd0af", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Document(page_content='Prof. Sterling explores the potential for harmonious coexistence between humans and artificial intelligence. The book discusses how AI can be integrated into society in a beneficial and non-disruptive manner.', metadata={'_additional': {'explainScore': '(bm25)\\n(hybrid) Document eeb9fd9b-a3ac-4d60-a55b-a63a25d3b907 contributed 0.00819672131147541 to the score\\n(hybrid) Document eeb9fd9b-a3ac-4d60-a55b-a63a25d3b907 contributed 0.00819672131147541 to the score', 'score': '0.016393442'}}),\n", - " Document(page_content=\"In his follow-up to 'Symbiosis', Prof. Sterling takes a look at the subtle, unnoticed presence and influence of AI in our everyday lives. It reveals how AI has become woven into our routines, often without our explicit realization.\", metadata={'_additional': {'explainScore': '(bm25)\\n(hybrid) Document b83765f2-e5d2-471f-8c02-c3350ade4c4f contributed 0.0078125 to the score\\n(hybrid) Document b83765f2-e5d2-471f-8c02-c3350ade4c4f contributed 0.008064516129032258 to the score', 'score': '0.015877016'}}),\n", - " Document(page_content='In her second book, Dr. Simmons delves deeper into the ethical considerations surrounding AI development and deployment. It is an eye-opening examination of the dilemmas faced by developers, policymakers, and society at large.', metadata={'_additional': {'explainScore': '(bm25)\\n(hybrid) Document 7ebbdae7-1061-445f-a046-1989f2343d8f contributed 0.008064516129032258 to the score\\n(hybrid) Document 7ebbdae7-1061-445f-a046-1989f2343d8f contributed 0.0078125 to the score', 'score': '0.015877016'}}),\n", - " Document(page_content='A comprehensive analysis of the evolution of artificial intelligence, from its inception to its future prospects. Dr. Simmons covers ethical considerations, potentials, and threats posed by AI.', metadata={'_additional': {'explainScore': '(vector) [-0.0071824766 -0.0006682752 0.001723625 -0.01897258 -0.0045127636 0.0024410256 -0.020503938 0.013768672 0.009520169 -0.037972264]... \\n(hybrid) Document 3a27b0a5-8dbb-4fee-9eba-8b6bc2c252be contributed 0.007936507936507936 to the score', 'score': '0.007936508'}})]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "retriever.invoke(\n", - " \"AI integration in society\",\n", - " score=True,\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/vercel.json b/docs/vercel.json index f91844dda1265..236755ba7dae4 100644 --- a/docs/vercel.json +++ b/docs/vercel.json @@ -121,6 +121,10 @@ { "source": "/docs/contributing/:path((?:faq|repo_structure|review_process)/?)", "destination": "/docs/contributing/reference/:path" + }, + { + "source": "/docs/integrations/retrievers/weaviate-hybrid(/?)", + "destination": "/docs/integrations/vectorstores/weaviate/#search-mechanism" } ] } From e24f86e55f73f6dd84c94be764d1d509926033b0 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Tue, 10 Dec 2024 01:59:38 -0800 Subject: [PATCH 03/14] core[patch]: return ToolMessage from tool (#28605) --- libs/core/langchain_core/messages/tool.py | 11 ++- libs/core/langchain_core/tools/base.py | 103 +++++++++++++++++----- libs/core/langchain_core/tools/simple.py | 6 +- libs/core/tests/unit_tests/test_tools.py | 64 ++++++++++++++ 4 files changed, 158 insertions(+), 26 deletions(-) diff --git a/libs/core/langchain_core/messages/tool.py b/libs/core/langchain_core/messages/tool.py index 653dd838f860e..873f872cef268 100644 --- a/libs/core/langchain_core/messages/tool.py +++ b/libs/core/langchain_core/messages/tool.py @@ -9,7 +9,16 @@ from langchain_core.utils._merge import merge_dicts, merge_obj -class ToolMessage(BaseMessage): +class ToolOutputMixin: + """Mixin for objects that tools can return directly. + + If a custom BaseTool is invoked with a ToolCall and the output of custom code is + not an instance of ToolOutputMixin, the output will automatically be coerced to a + string and wrapped in a ToolMessage. + """ + + +class ToolMessage(BaseMessage, ToolOutputMixin): """Message for passing the result of executing a tool back to a model. ToolMessages contain the result of a tool invocation. Typically, the result diff --git a/libs/core/langchain_core/tools/base.py b/libs/core/langchain_core/tools/base.py index 815607f3b4325..ff264edac3284 100644 --- a/libs/core/langchain_core/tools/base.py +++ b/libs/core/langchain_core/tools/base.py @@ -45,7 +45,7 @@ CallbackManager, Callbacks, ) -from langchain_core.messages.tool import ToolCall, ToolMessage +from langchain_core.messages.tool import ToolCall, ToolMessage, ToolOutputMixin from langchain_core.runnables import ( RunnableConfig, RunnableSerializable, @@ -494,7 +494,9 @@ async def ainvoke( # --- Tool --- - def _parse_input(self, tool_input: Union[str, dict]) -> Union[str, dict[str, Any]]: + def _parse_input( + self, tool_input: Union[str, dict], tool_call_id: Optional[str] + ) -> Union[str, dict[str, Any]]: """Convert tool input to a pydantic model. Args: @@ -512,9 +514,39 @@ def _parse_input(self, tool_input: Union[str, dict]) -> Union[str, dict[str, Any else: if input_args is not None: if issubclass(input_args, BaseModel): + for k, v in get_all_basemodel_annotations(input_args).items(): + if ( + _is_injected_arg_type(v, injected_type=InjectedToolCallId) + and k not in tool_input + ): + if tool_call_id is None: + msg = ( + "When tool includes an InjectedToolCallId " + "argument, tool must always be invoked with a full " + "model ToolCall of the form: {'args': {...}, " + "'name': '...', 'type': 'tool_call', " + "'tool_call_id': '...'}" + ) + raise ValueError(msg) + tool_input[k] = tool_call_id result = input_args.model_validate(tool_input) result_dict = result.model_dump() elif issubclass(input_args, BaseModelV1): + for k, v in get_all_basemodel_annotations(input_args).items(): + if ( + _is_injected_arg_type(v, injected_type=InjectedToolCallId) + and k not in tool_input + ): + if tool_call_id is None: + msg = ( + "When tool includes an InjectedToolCallId " + "argument, tool must always be invoked with a full " + "model ToolCall of the form: {'args': {...}, " + "'name': '...', 'type': 'tool_call', " + "'tool_call_id': '...'}" + ) + raise ValueError(msg) + tool_input[k] = tool_call_id result = input_args.parse_obj(tool_input) result_dict = result.dict() else: @@ -570,8 +602,10 @@ async def _arun(self, *args: Any, **kwargs: Any) -> Any: kwargs["run_manager"] = kwargs["run_manager"].get_sync() return await run_in_executor(None, self._run, *args, **kwargs) - def _to_args_and_kwargs(self, tool_input: Union[str, dict]) -> tuple[tuple, dict]: - tool_input = self._parse_input(tool_input) + def _to_args_and_kwargs( + self, tool_input: Union[str, dict], tool_call_id: Optional[str] + ) -> tuple[tuple, dict]: + tool_input = self._parse_input(tool_input, tool_call_id) # For backwards compatibility, if run_input is a string, # pass as a positional argument. if isinstance(tool_input, str): @@ -648,10 +682,9 @@ def run( child_config = patch_config(config, callbacks=run_manager.get_child()) context = copy_context() context.run(_set_config_context, child_config) - tool_args, tool_kwargs = self._to_args_and_kwargs(tool_input) + tool_args, tool_kwargs = self._to_args_and_kwargs(tool_input, tool_call_id) if signature(self._run).parameters.get("run_manager"): tool_kwargs["run_manager"] = run_manager - if config_param := _get_runnable_config_param(self._run): tool_kwargs[config_param] = config response = context.run(self._run, *tool_args, **tool_kwargs) @@ -755,7 +788,7 @@ async def arun( artifact = None error_to_raise: Optional[Union[Exception, KeyboardInterrupt]] = None try: - tool_args, tool_kwargs = self._to_args_and_kwargs(tool_input) + tool_args, tool_kwargs = self._to_args_and_kwargs(tool_input, tool_call_id) child_config = patch_config(config, callbacks=run_manager.get_child()) context = copy_context() context.run(_set_config_context, child_config) @@ -889,20 +922,23 @@ def _prep_run_args( def _format_output( - content: Any, artifact: Any, tool_call_id: Optional[str], name: str, status: str -) -> Union[ToolMessage, Any]: - if tool_call_id: - if not _is_message_content_type(content): - content = _stringify(content) - return ToolMessage( - content, - artifact=artifact, - tool_call_id=tool_call_id, - name=name, - status=status, - ) - else: + content: Any, + artifact: Any, + tool_call_id: Optional[str], + name: str, + status: str, +) -> Union[ToolOutputMixin, Any]: + if isinstance(content, ToolOutputMixin) or not tool_call_id: return content + if not _is_message_content_type(content): + content = _stringify(content) + return ToolMessage( + content, + artifact=artifact, + tool_call_id=tool_call_id, + name=name, + status=status, + ) def _is_message_content_type(obj: Any) -> bool: @@ -954,10 +990,31 @@ class InjectedToolArg: """Annotation for a Tool arg that is **not** meant to be generated by a model.""" -def _is_injected_arg_type(type_: type) -> bool: +class InjectedToolCallId(InjectedToolArg): + r'''Annotation for injecting the tool_call_id. + + Example: + ..code-block:: python + + from typing_extensions import Annotated + + from langchain_core.messages import ToolMessage + from langchain_core.tools import tool, InjectedToolCallID + + @tool + def foo(x: int, tool_call_id: Annotated[str, InjectedToolCallID]) -> ToolMessage: + """Return x.""" + return ToolMessage(str(x), artifact=x, name="foo", tool_call_id=tool_call_id) + ''' # noqa: E501 + + +def _is_injected_arg_type( + type_: type, injected_type: Optional[type[InjectedToolArg]] = None +) -> bool: + injected_type = injected_type or InjectedToolArg return any( - isinstance(arg, InjectedToolArg) - or (isinstance(arg, type) and issubclass(arg, InjectedToolArg)) + isinstance(arg, injected_type) + or (isinstance(arg, type) and issubclass(arg, injected_type)) for arg in get_args(type_)[1:] ) diff --git a/libs/core/langchain_core/tools/simple.py b/libs/core/langchain_core/tools/simple.py index 118c8b39f6db3..d9e38ba227c8b 100644 --- a/libs/core/langchain_core/tools/simple.py +++ b/libs/core/langchain_core/tools/simple.py @@ -62,9 +62,11 @@ def args(self) -> dict: # assume it takes a single string input. return {"tool_input": {"type": "string"}} - def _to_args_and_kwargs(self, tool_input: Union[str, dict]) -> tuple[tuple, dict]: + def _to_args_and_kwargs( + self, tool_input: Union[str, dict], tool_call_id: Optional[str] + ) -> tuple[tuple, dict]: """Convert tool input to pydantic model.""" - args, kwargs = super()._to_args_and_kwargs(tool_input) + args, kwargs = super()._to_args_and_kwargs(tool_input, tool_call_id) # For backwards compatibility. The tool must be run with a single input all_args = list(args) + list(kwargs.values()) if len(all_args) != 1: diff --git a/libs/core/tests/unit_tests/test_tools.py b/libs/core/tests/unit_tests/test_tools.py index ce7ea4894bb5a..164ecc508e76e 100644 --- a/libs/core/tests/unit_tests/test_tools.py +++ b/libs/core/tests/unit_tests/test_tools.py @@ -31,6 +31,7 @@ CallbackManagerForToolRun, ) from langchain_core.messages import ToolMessage +from langchain_core.messages.tool import ToolOutputMixin from langchain_core.runnables import ( Runnable, RunnableConfig, @@ -46,6 +47,7 @@ ) from langchain_core.tools.base import ( InjectedToolArg, + InjectedToolCallId, SchemaAnnotationError, _is_message_content_block, _is_message_content_type, @@ -856,6 +858,7 @@ class _RaiseNonValidationErrorTool(BaseTool): def _parse_input( self, tool_input: Union[str, dict], + tool_call_id: Optional[str], ) -> Union[str, dict[str, Any]]: raise NotImplementedError @@ -920,6 +923,7 @@ class _RaiseNonValidationErrorTool(BaseTool): def _parse_input( self, tool_input: Union[str, dict], + tool_call_id: Optional[str], ) -> Union[str, dict[str, Any]]: raise NotImplementedError @@ -2110,3 +2114,63 @@ def injected_tool(x: int, foo: Annotated[Foo, InjectedToolArg]) -> str: return foo.value assert injected_tool.invoke({"x": 5, "foo": Foo()}) == "bar" # type: ignore + + +def test_tool_injected_tool_call_id() -> None: + @tool + def foo(x: int, tool_call_id: Annotated[str, InjectedToolCallId]) -> ToolMessage: + """foo""" + return ToolMessage(x, tool_call_id=tool_call_id) # type: ignore + + assert foo.invoke( + {"type": "tool_call", "args": {"x": 0}, "name": "foo", "id": "bar"} + ) == ToolMessage(0, tool_call_id="bar") # type: ignore + + with pytest.raises(ValueError): + assert foo.invoke({"x": 0}) + + @tool + def foo2(x: int, tool_call_id: Annotated[str, InjectedToolCallId()]) -> ToolMessage: + """foo""" + return ToolMessage(x, tool_call_id=tool_call_id) # type: ignore + + assert foo2.invoke( + {"type": "tool_call", "args": {"x": 0}, "name": "foo", "id": "bar"} + ) == ToolMessage(0, tool_call_id="bar") # type: ignore + + +def test_tool_uninjected_tool_call_id() -> None: + @tool + def foo(x: int, tool_call_id: str) -> ToolMessage: + """foo""" + return ToolMessage(x, tool_call_id=tool_call_id) # type: ignore + + with pytest.raises(ValueError): + foo.invoke({"type": "tool_call", "args": {"x": 0}, "name": "foo", "id": "bar"}) + + assert foo.invoke( + { + "type": "tool_call", + "args": {"x": 0, "tool_call_id": "zap"}, + "name": "foo", + "id": "bar", + } + ) == ToolMessage(0, tool_call_id="zap") # type: ignore + + +def test_tool_return_output_mixin() -> None: + class Bar(ToolOutputMixin): + def __init__(self, x: int) -> None: + self.x = x + + def __eq__(self, other: Any) -> bool: + return isinstance(other, self.__class__) and self.x == other.x + + @tool + def foo(x: int) -> Bar: + """Foo.""" + return Bar(x=x) + + assert foo.invoke( + {"type": "tool_call", "args": {"x": 0}, "name": "foo", "id": "bar"} + ) == Bar(x=0) From 24292c4a31468d1a4fdc8bd7aa7d97c259acc18f Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Tue, 10 Dec 2024 02:01:16 -0800 Subject: [PATCH 04/14] core[patch]: Release 0.3.23 (#28648) --- libs/core/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/core/pyproject.toml b/libs/core/pyproject.toml index af153d8b66267..ebb41501b275f 100644 --- a/libs/core/pyproject.toml +++ b/libs/core/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "langchain-core" -version = "0.3.22" +version = "0.3.23" description = "Building applications with LLMs through composability" authors = [] license = "MIT" From 5c6e2cbcda16e99053ed4b8c4160c6a38c8644d3 Mon Sep 17 00:00:00 2001 From: ccurme Date: Tue, 10 Dec 2024 10:36:00 -0500 Subject: [PATCH 05/14] ollama[patch]: support structured output (#28629) - Bump minimum version of `ollama` to 0.4.4 (which also addresses https://github.com/langchain-ai/langchain/issues/28607). - Support recently-released [structured output](https://ollama.com/blog/structured-outputs) feature. This can be accessed by calling `.with_structured_output` with `method="json_schema"` (choice of name [mirrors](https://python.langchain.com/api_reference/openai/chat_models/langchain_openai.chat_models.base.ChatOpenAI.html#langchain_openai.chat_models.base.ChatOpenAI.with_structured_output) what we have for OpenAI's structured output feature). `ChatOllama` previously implemented `.with_structured_output` via the [base implementation](https://github.com/langchain-ai/langchain/blob/ec9b41431ea8bccccc3b9f1679c1e1e16c26e23e/libs/core/langchain_core/language_models/chat_models.py#L1117). --- .../ollama/langchain_ollama/chat_models.py | 345 +++++++++++++++++- libs/partners/ollama/poetry.lock | 335 ++++++++++++----- libs/partners/ollama/pyproject.toml | 2 +- .../chat_models/test_chat_models.py | 51 +++ 4 files changed, 642 insertions(+), 91 deletions(-) diff --git a/libs/partners/ollama/langchain_ollama/chat_models.py b/libs/partners/ollama/langchain_ollama/chat_models.py index 4f074206c8f00..2565660a4c472 100644 --- a/libs/partners/ollama/langchain_ollama/chat_models.py +++ b/libs/partners/ollama/langchain_ollama/chat_models.py @@ -1,6 +1,7 @@ """Ollama chat models.""" import json +from operator import itemgetter from typing import ( Any, AsyncIterator, @@ -36,13 +37,24 @@ ) from langchain_core.messages.ai import UsageMetadata from langchain_core.messages.tool import tool_call +from langchain_core.output_parsers import ( + JsonOutputKeyToolsParser, + JsonOutputParser, + PydanticOutputParser, + PydanticToolsParser, +) from langchain_core.outputs import ChatGeneration, ChatGenerationChunk, ChatResult -from langchain_core.runnables import Runnable +from langchain_core.runnables import Runnable, RunnableMap, RunnablePassthrough from langchain_core.tools import BaseTool +from langchain_core.utils.function_calling import ( + _convert_any_typed_dicts_to_pydantic as convert_any_typed_dicts_to_pydantic, +) from langchain_core.utils.function_calling import convert_to_openai_tool +from langchain_core.utils.pydantic import TypeBaseModel, is_basemodel_subclass from ollama import AsyncClient, Client, Message, Options -from pydantic import PrivateAttr, model_validator -from typing_extensions import Self +from pydantic import BaseModel, PrivateAttr, model_validator +from pydantic.json_schema import JsonSchemaValue +from typing_extensions import Self, is_typeddict def _get_usage_metadata_from_generation_info( @@ -157,6 +169,10 @@ def _lc_tool_call_to_openai_tool_call(tool_call: ToolCall) -> dict: } +def _is_pydantic_class(obj: Any) -> bool: + return isinstance(obj, type) and is_basemodel_subclass(obj) + + class ChatOllama(BaseChatModel): r"""Ollama chat model integration. @@ -385,8 +401,8 @@ class Multiply(BaseModel): to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)""" - format: Literal["", "json"] = "" - """Specify the format of the output (options: json)""" + format: Optional[Union[Literal["", "json"], JsonSchemaValue]] = None + """Specify the format of the output (options: "json", JSON schema).""" keep_alive: Optional[Union[int, str]] = None """How long the model will stay loaded into memory.""" @@ -815,3 +831,322 @@ def bind_tools( """ # noqa: E501 formatted_tools = [convert_to_openai_tool(tool) for tool in tools] return super().bind(tools=formatted_tools, **kwargs) + + def with_structured_output( + self, + schema: Union[Dict, type], + *, + method: Literal[ + "function_calling", "json_mode", "json_schema" + ] = "function_calling", + include_raw: bool = False, + **kwargs: Any, + ) -> Runnable[LanguageModelInput, Union[Dict, BaseModel]]: + """Model wrapper that returns outputs formatted to match the given schema. + + Args: + schema: + The output schema. Can be passed in as: + + - a Pydantic class, + - a JSON schema + - a TypedDict class + - an OpenAI function/tool schema. + + If ``schema`` is a Pydantic class then the model output will be a + Pydantic instance of that class, and the model-generated fields will be + validated by the Pydantic class. Otherwise the model output will be a + dict and will not be validated. See :meth:`langchain_core.utils.function_calling.convert_to_openai_tool` + for more on how to properly specify types and descriptions of + schema fields when specifying a Pydantic or TypedDict class. + + method: The method for steering model generation, one of: + + - "function_calling": + Uses Ollama's tool-calling API + - "json_schema": + Uses Ollama's structured output API: https://ollama.com/blog/structured-outputs + - "json_mode": + Specifies ``format="json"``. Note that if using JSON mode then you + must include instructions for formatting the output into the + desired schema into the model call. + + include_raw: + If False then only the parsed structured output is returned. If + an error occurs during model output parsing it will be raised. If True + then both the raw model response (a BaseMessage) and the parsed model + response will be returned. If an error occurs during output parsing it + will be caught and returned as well. The final output is always a dict + with keys "raw", "parsed", and "parsing_error". + + kwargs: Additional keyword args aren't supported. + + Returns: + A Runnable that takes same inputs as a :class:`langchain_core.language_models.chat.BaseChatModel`. + + | If ``include_raw`` is False and ``schema`` is a Pydantic class, Runnable outputs an instance of ``schema`` (i.e., a Pydantic object). Otherwise, if ``include_raw`` is False then Runnable outputs a dict. + + | If ``include_raw`` is True, then Runnable outputs a dict with keys: + + - "raw": BaseMessage + - "parsed": None if there was a parsing error, otherwise the type depends on the ``schema`` as described above. + - "parsing_error": Optional[BaseException] + + .. versionchanged:: 0.2.2 + + Added support for structured output API via ``format`` parameter. + + .. dropdown:: Example: schema=Pydantic class, method="function_calling", include_raw=False + + .. code-block:: python + + from typing import Optional + + from langchain_ollama import ChatOllama + from pydantic import BaseModel, Field + + + class AnswerWithJustification(BaseModel): + '''An answer to the user question along with justification for the answer.''' + + answer: str + justification: Optional[str] = Field( + default=..., description="A justification for the answer." + ) + + + llm = ChatOllama(model="llama3.1", temperature=0) + structured_llm = llm.with_structured_output( + AnswerWithJustification + ) + + structured_llm.invoke( + "What weighs more a pound of bricks or a pound of feathers" + ) + + # -> AnswerWithJustification( + # answer='They weigh the same', + # justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.' + # ) + + .. dropdown:: Example: schema=Pydantic class, method="function_calling", include_raw=True + + .. code-block:: python + + from langchain_ollama import ChatOllama + from pydantic import BaseModel + + + class AnswerWithJustification(BaseModel): + '''An answer to the user question along with justification for the answer.''' + + answer: str + justification: str + + + llm = ChatOllama(model="llama3.1", temperature=0) + structured_llm = llm.with_structured_output( + AnswerWithJustification, include_raw=True + ) + + structured_llm.invoke( + "What weighs more a pound of bricks or a pound of feathers" + ) + # -> { + # 'raw': AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_Ao02pnFYXD6GN1yzc0uXPsvF', 'function': {'arguments': '{"answer":"They weigh the same.","justification":"Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ."}', 'name': 'AnswerWithJustification'}, 'type': 'function'}]}), + # 'parsed': AnswerWithJustification(answer='They weigh the same.', justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.'), + # 'parsing_error': None + # } + + .. dropdown:: Example: schema=Pydantic class, method="json_schema", include_raw=False + + .. code-block:: python + + from typing import Optional + + from langchain_ollama import ChatOllama + from pydantic import BaseModel, Field + + + class AnswerWithJustification(BaseModel): + '''An answer to the user question along with justification for the answer.''' + + answer: str + justification: Optional[str] = Field( + default=..., description="A justification for the answer." + ) + + + llm = ChatOllama(model="llama3.1", temperature=0) + structured_llm = llm.with_structured_output( + AnswerWithJustification, method="json_schema" + ) + + structured_llm.invoke( + "What weighs more a pound of bricks or a pound of feathers" + ) + + # -> AnswerWithJustification( + # answer='They weigh the same', + # justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.' + # ) + + .. dropdown:: Example: schema=TypedDict class, method="function_calling", include_raw=False + + .. code-block:: python + + # IMPORTANT: If you are using Python <=3.8, you need to import Annotated + # from typing_extensions, not from typing. + from typing_extensions import Annotated, TypedDict + + from langchain_ollama import ChatOllama + + + class AnswerWithJustification(TypedDict): + '''An answer to the user question along with justification for the answer.''' + + answer: str + justification: Annotated[ + Optional[str], None, "A justification for the answer." + ] + + + llm = ChatOllama(model="llama3.1", temperature=0) + structured_llm = llm.with_structured_output(AnswerWithJustification) + + structured_llm.invoke( + "What weighs more a pound of bricks or a pound of feathers" + ) + # -> { + # 'answer': 'They weigh the same', + # 'justification': 'Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume and density of the two substances differ.' + # } + + .. dropdown:: Example: schema=OpenAI function schema, method="function_calling", include_raw=False + + .. code-block:: python + + from langchain_ollama import ChatOllama + + oai_schema = { + 'name': 'AnswerWithJustification', + 'description': 'An answer to the user question along with justification for the answer.', + 'parameters': { + 'type': 'object', + 'properties': { + 'answer': {'type': 'string'}, + 'justification': {'description': 'A justification for the answer.', 'type': 'string'} + }, + 'required': ['answer'] + } + } + + llm = ChatOllama(model="llama3.1", temperature=0) + structured_llm = llm.with_structured_output(oai_schema) + + structured_llm.invoke( + "What weighs more a pound of bricks or a pound of feathers" + ) + # -> { + # 'answer': 'They weigh the same', + # 'justification': 'Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume and density of the two substances differ.' + # } + + .. dropdown:: Example: schema=Pydantic class, method="json_mode", include_raw=True + + .. code-block:: + + from langchain_ollama import ChatOllama + from pydantic import BaseModel + + class AnswerWithJustification(BaseModel): + answer: str + justification: str + + llm = ChatOllama(model="llama3.1", temperature=0) + structured_llm = llm.with_structured_output( + AnswerWithJustification, + method="json_mode", + include_raw=True + ) + + structured_llm.invoke( + "Answer the following question. " + "Make sure to return a JSON blob with keys 'answer' and 'justification'.\\n\\n" + "What's heavier a pound of bricks or a pound of feathers?" + ) + # -> { + # 'raw': AIMessage(content='{\\n "answer": "They are both the same weight.",\\n "justification": "Both a pound of bricks and a pound of feathers weigh one pound. The difference lies in the volume and density of the materials, not the weight." \\n}'), + # 'parsed': AnswerWithJustification(answer='They are both the same weight.', justification='Both a pound of bricks and a pound of feathers weigh one pound. The difference lies in the volume and density of the materials, not the weight.'), + # 'parsing_error': None + # } + """ # noqa: E501, D301 + if kwargs: + raise ValueError(f"Received unsupported arguments {kwargs}") + is_pydantic_schema = _is_pydantic_class(schema) + if method == "function_calling": + if schema is None: + raise ValueError( + "schema must be specified when method is not 'json_mode'. " + "Received None." + ) + tool_name = convert_to_openai_tool(schema)["function"]["name"] + llm = self.bind_tools([schema], tool_choice=tool_name) + if is_pydantic_schema: + output_parser: Runnable = PydanticToolsParser( + tools=[schema], # type: ignore[list-item] + first_tool_only=True, + ) + else: + output_parser = JsonOutputKeyToolsParser( + key_name=tool_name, first_tool_only=True + ) + elif method == "json_mode": + llm = self.bind(format="json") + output_parser = ( + PydanticOutputParser(pydantic_object=schema) # type: ignore[arg-type] + if is_pydantic_schema + else JsonOutputParser() + ) + elif method == "json_schema": + if schema is None: + raise ValueError( + "schema must be specified when method is not 'json_mode'. " + "Received None." + ) + if is_pydantic_schema: + schema = cast(TypeBaseModel, schema) + llm = self.bind(format=schema.model_json_schema()) + output_parser = PydanticOutputParser(pydantic_object=schema) + else: + if is_typeddict(schema): + schema = cast(type, schema) + response_format = convert_any_typed_dicts_to_pydantic( + schema, visited={} + ).schema() # type: ignore[attr-defined] + if "required" not in response_format: + response_format["required"] = list( + response_format["properties"].keys() + ) + else: + # is JSON schema + response_format = schema + llm = self.bind(format=response_format) + output_parser = JsonOutputParser() + else: + raise ValueError( + f"Unrecognized method argument. Expected one of 'function_calling', " + f"'json_schema', or 'json_mode'. Received: '{method}'" + ) + + if include_raw: + parser_assign = RunnablePassthrough.assign( + parsed=itemgetter("raw") | output_parser, parsing_error=lambda _: None + ) + parser_none = RunnablePassthrough.assign(parsed=lambda _: None) + parser_with_fallback = parser_assign.with_fallbacks( + [parser_none], exception_key="parsing_error" + ) + return RunnableMap(raw=llm) | parser_with_fallback + else: + return llm | output_parser diff --git a/libs/partners/ollama/poetry.lock b/libs/partners/ollama/poetry.lock index 47e6066ced28b..7ad5d63438a28 100644 --- a/libs/partners/ollama/poetry.lock +++ b/libs/partners/ollama/poetry.lock @@ -13,24 +13,24 @@ files = [ [[package]] name = "anyio" -version = "4.6.2.post1" +version = "4.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, - {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, + {file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"}, + {file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"}, ] [package.dependencies] 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\""} +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -doc = ["Sphinx (>=7.4,<8.0)", "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", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +doc = ["Sphinx (>=7.4,<8.0)", "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", "truststore (>=0.9.1)", "uvloop (>=0.21)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -309,7 +309,7 @@ files = [ [[package]] name = "langchain-core" -version = "0.3.21" +version = "0.3.22" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.9,<4.0" @@ -334,7 +334,7 @@ url = "../../core" [[package]] name = "langchain-tests" -version = "0.3.4" +version = "0.3.6" description = "Standard tests for LangChain implementations" optional = false python-versions = ">=3.9,<4.0" @@ -342,9 +342,15 @@ files = [] develop = true [package.dependencies] -httpx = "^0.27.0" -langchain-core = "^0.3.19" +httpx = ">=0.25.0,<1" +langchain-core = "^0.3.22" +numpy = [ + {version = ">=1.24.0,<2.0.0", markers = "python_version < \"3.12\""}, + {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, +] pytest = ">=7,<9" +pytest-asyncio = ">=0.20,<1" +pytest-socket = ">=0.6.0,<1" syrupy = "^4" [package.source] @@ -353,13 +359,13 @@ url = "../../standard-tests" [[package]] name = "langsmith" -version = "0.1.144" +version = "0.1.147" 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.144-py3-none-any.whl", hash = "sha256:08ffb975bff2e82fc6f5428837c64c074ea25102d08a25e256361a80812c6100"}, - {file = "langsmith-0.1.144.tar.gz", hash = "sha256:b621f358d5a33441d7b5e7264c376bf4ea82bfc62d7e41aafc0f8094e3bd6369"}, + {file = "langsmith-0.1.147-py3-none-any.whl", hash = "sha256:7166fc23b965ccf839d64945a78e9f1157757add228b086141eb03a60d699a15"}, + {file = "langsmith-0.1.147.tar.gz", hash = "sha256:2e933220318a4e73034657103b3b1a3a6109cc5db3566a7e8e03be8d6d7def7a"}, ] [package.dependencies] @@ -372,6 +378,9 @@ pydantic = [ requests = ">=2,<3" requests-toolbelt = ">=1.0.0,<2.0.0" +[package.extras] +langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"] + [[package]] name = "mypy" version = "1.13.0" @@ -436,15 +445,124 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + +[[package]] +name = "numpy" +version = "2.2.0" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.10" +files = [ + {file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31"}, + {file = "numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661"}, + {file = "numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d"}, + {file = "numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410"}, + {file = "numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef"}, + {file = "numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1"}, + {file = "numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742"}, + {file = "numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e"}, + {file = "numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72"}, + {file = "numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066"}, + {file = "numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221"}, + {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"}, +] + [[package]] name = "ollama" -version = "0.4.1" +version = "0.4.4" description = "The official Python client for Ollama." optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "ollama-0.4.1-py3-none-any.whl", hash = "sha256:b6fb16aa5a3652633e1716acb12cf2f44aa18beb229329e46a0302734822dfad"}, - {file = "ollama-0.4.1.tar.gz", hash = "sha256:8c6b5e7ff80dd0b8692150b03359f60bac7ca162b088c604069409142a684ad3"}, + {file = "ollama-0.4.4-py3-none-any.whl", hash = "sha256:0f466e845e2205a1cbf5a2fef4640027b90beaa3b06c574426d8b6b17fd6e139"}, + {file = "ollama-0.4.4.tar.gz", hash = "sha256:e1db064273c739babc2dde9ea84029c4a43415354741b6c50939ddd3dd0f7ffb"}, ] [package.dependencies] @@ -453,69 +571,86 @@ pydantic = ">=2.9.0,<3.0.0" [[package]] name = "orjson" -version = "3.10.11" +version = "3.10.12" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, - {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, - {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, - {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, - {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, - {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, - {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, - {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, - {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, - {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, - {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, - {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, - {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, - {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, - {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, - {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, - {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, - {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, - {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, - {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, - {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, - {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, - {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, - {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, - {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, - {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, - {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, - {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, - {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, - {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, - {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, - {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, - {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, + {file = "orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2"}, + {file = "orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3"}, + {file = "orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509"}, + {file = "orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd"}, + {file = "orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79"}, + {file = "orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8"}, + {file = "orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c"}, + {file = "orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708"}, + {file = "orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb"}, + {file = "orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543"}, + {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296"}, + {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e"}, + {file = "orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc"}, + {file = "orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825"}, + {file = "orjson-3.10.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7d69af5b54617a5fac5c8e5ed0859eb798e2ce8913262eb522590239db6c6763"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ed119ea7d2953365724a7059231a44830eb6bbb0cfead33fcbc562f5fd8f935"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5fc1238ef197e7cad5c91415f524aaa51e004be5a9b35a1b8a84ade196f73f"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43509843990439b05f848539d6f6198d4ac86ff01dd024b2f9a795c0daeeab60"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f72e27a62041cfb37a3de512247ece9f240a561e6c8662276beaf4d53d406db4"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a904f9572092bb6742ab7c16c623f0cdccbad9eeb2d14d4aa06284867bddd31"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:855c0833999ed5dc62f64552db26f9be767434917d8348d77bacaab84f787d7b"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:897830244e2320f6184699f598df7fb9db9f5087d6f3f03666ae89d607e4f8ed"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0b32652eaa4a7539f6f04abc6243619c56f8530c53bf9b023e1269df5f7816dd"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:36b4aa31e0f6a1aeeb6f8377769ca5d125db000f05c20e54163aef1d3fe8e833"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5535163054d6cbf2796f93e4f0dbc800f61914c0e3c4ed8499cf6ece22b4a3da"}, + {file = "orjson-3.10.12-cp38-none-win32.whl", hash = "sha256:90a5551f6f5a5fa07010bf3d0b4ca2de21adafbbc0af6cb700b63cd767266cb9"}, + {file = "orjson-3.10.12-cp38-none-win_amd64.whl", hash = "sha256:703a2fb35a06cdd45adf5d733cf613cbc0cb3ae57643472b16bc22d325b5fb6c"}, + {file = "orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69"}, + {file = "orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b"}, + {file = "orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548"}, + {file = "orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff"}, ] [[package]] @@ -546,13 +681,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pydantic" -version = "2.10.1" +version = "2.10.3" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.10.1-py3-none-any.whl", hash = "sha256:a8d20db84de64cf4a7d59e899c2caf0fe9d660c7cfc482528e7020d7dd189a7e"}, - {file = "pydantic-2.10.1.tar.gz", hash = "sha256:a4daca2dc0aa429555e0656d6bf94873a7dc5f54ee42b1f5873d666fb3f35560"}, + {file = "pydantic-2.10.3-py3-none-any.whl", hash = "sha256:be04d85bbc7b65651c5f8e6b9976ed9c6f41782a55524cef079a34a0bb82144d"}, + {file = "pydantic-2.10.3.tar.gz", hash = "sha256:cb5ac360ce894ceacd69c403187900a02c4b20b693a9dd1d643e1effab9eadf9"}, ] [package.dependencies] @@ -881,13 +1016,13 @@ files = [ [[package]] name = "syrupy" -version = "4.7.2" +version = "4.8.0" description = "Pytest Snapshot Test Utility" optional = false python-versions = ">=3.8.1" files = [ - {file = "syrupy-4.7.2-py3-none-any.whl", hash = "sha256:eae7ba6be5aed190237caa93be288e97ca1eec5ca58760e4818972a10c4acc64"}, - {file = "syrupy-4.7.2.tar.gz", hash = "sha256:ea45e099f242de1bb53018c238f408a5bb6c82007bc687aefcbeaa0e1c2e935a"}, + {file = "syrupy-4.8.0-py3-none-any.whl", hash = "sha256:544f4ec6306f4b1c460fdab48fd60b2c7fe54a6c0a8243aeea15f9ad9c638c3f"}, + {file = "syrupy-4.8.0.tar.gz", hash = "sha256:648f0e9303aaa8387c8365d7314784c09a6bab0a407455c6a01d6a4f5c6a8ede"}, ] [package.dependencies] @@ -910,13 +1045,43 @@ test = ["pytest", "tornado (>=4.5)", "typeguard"] [[package]] name = "tomli" -version = "2.1.0" +version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, - {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] @@ -992,4 +1157,4 @@ watchmedo = ["PyYAML (>=3.10)"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "078fb5da0212681a4fc4d02e4e4112fe7a3ebda0923411e72ad706a097a989ae" +content-hash = "6cdc5d8dc48cecb900f751e3e8f0be9ed5a52fb8e873a9ce2bcf3fd7db36ef79" diff --git a/libs/partners/ollama/pyproject.toml b/libs/partners/ollama/pyproject.toml index bab24cf619887..d0df93c840fd7 100644 --- a/libs/partners/ollama/pyproject.toml +++ b/libs/partners/ollama/pyproject.toml @@ -20,7 +20,7 @@ disallow_untyped_defs = "True" [tool.poetry.dependencies] python = ">=3.9,<4.0" -ollama = ">=0.3.0,<1" +ollama = ">=0.4.4,<1" langchain-core = "^0.3.20" [tool.ruff.lint] diff --git a/libs/partners/ollama/tests/integration_tests/chat_models/test_chat_models.py b/libs/partners/ollama/tests/integration_tests/chat_models/test_chat_models.py index 837df8c5164eb..61190f73f800d 100644 --- a/libs/partners/ollama/tests/integration_tests/chat_models/test_chat_models.py +++ b/libs/partners/ollama/tests/integration_tests/chat_models/test_chat_models.py @@ -4,10 +4,61 @@ import pytest from pydantic import BaseModel, Field +from typing_extensions import Annotated, TypedDict from langchain_ollama import ChatOllama +@pytest.mark.parametrize(("method"), [("function_calling"), ("json_schema")]) +def test_structured_output(method: str) -> None: + """Test to verify structured output via tool calling and ``format`` parameter.""" + + class Joke(BaseModel): + """Joke to tell user.""" + + setup: str = Field(description="question to set up a joke") + punchline: str = Field(description="answer to resolve the joke") + + llm = ChatOllama(model="llama3.1", temperature=0) + query = "Tell me a joke about cats." + + # Pydantic + structured_llm = llm.with_structured_output(Joke, method=method) # type: ignore[arg-type] + result = structured_llm.invoke(query) + assert isinstance(result, Joke) + + for chunk in structured_llm.stream(query): + assert isinstance(chunk, Joke) + + # JSON Schema + structured_llm = llm.with_structured_output(Joke.model_json_schema(), method=method) # type: ignore[arg-type] + result = structured_llm.invoke(query) + assert isinstance(result, dict) + assert set(result.keys()) == {"setup", "punchline"} + + for chunk in structured_llm.stream(query): + assert isinstance(chunk, dict) + assert isinstance(chunk, dict) # for mypy + assert set(chunk.keys()) == {"setup", "punchline"} + + # Typed Dict + class JokeSchema(TypedDict): + """Joke to tell user.""" + + setup: Annotated[str, "question to set up a joke"] + punchline: Annotated[str, "answer to resolve the joke"] + + structured_llm = llm.with_structured_output(JokeSchema, method=method) # type: ignore[arg-type] + result = structured_llm.invoke(query) + assert isinstance(result, dict) + assert set(result.keys()) == {"setup", "punchline"} + + for chunk in structured_llm.stream(query): + assert isinstance(chunk, dict) + assert isinstance(chunk, dict) # for mypy + assert set(chunk.keys()) == {"setup", "punchline"} + + @pytest.mark.parametrize(("model"), [("llama3.1")]) def test_structured_output_deeply_nested(model: str) -> None: """Test to verify structured output with a nested objects.""" From aba2711e7fcbe1d9c82361a0a35bf76d05473dc8 Mon Sep 17 00:00:00 2001 From: Katarina Supe <61758502+katarinasupe@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:57:21 +0100 Subject: [PATCH 06/14] community: update Memgraph integration (#27017) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Description:** - **Memgraph** no longer relies on `Neo4jGraphStore` but **implements `GraphStore`**, just like other graph databases. - **Memgraph** no longer relies on `GraphQAChain`, but implements `MemgraphQAChain`, just like other graph databases. - The refresh schema procedure has been updated to try using `SHOW SCHEMA INFO`. The fallback uses Cypher queries (a combination of schema and Cypher) → **LangChain integration no longer relies on MAGE library**. - The **schema structure** has been reformatted. Regardless of the procedures used to get schema, schema structure is the same. - The `add_graph_documents()` method has been implemented. It transforms `GraphDocument` into Cypher queries and creates a graph in Memgraph. It implements the ability to use `baseEntityLabel` to improve speed (`baseEntityLabel` has an index on the `id` property). It also implements the ability to include sources by creating a `MENTIONS` relationship to the source document. - Jupyter Notebook for Memgraph has been updated. - **Issue:** / - **Dependencies:** / - **Twitter handle:** supe_katarina (DX Engineer @ Memgraph) Closes #25606 --- docs/docs/integrations/graphs/memgraph.ipynb | 861 ++++++++++-------- docs/static/img/memgraph_kg.png | Bin 0 -> 119961 bytes docs/static/img/memgraph_kg_2.png | Bin 0 -> 67141 bytes docs/static/img/memgraph_kg_3.png | Bin 0 -> 140424 bytes docs/static/img/memgraph_kg_4.png | Bin 0 -> 257118 bytes .../chains/graph_qa/memgraph.py | 316 +++++++ .../chains/graph_qa/prompts.py | 55 ++ .../graphs/memgraph_graph.py | 527 ++++++++++- .../integration_tests/graphs/test_memgraph.py | 169 +++- 9 files changed, 1476 insertions(+), 452 deletions(-) create mode 100644 docs/static/img/memgraph_kg.png create mode 100644 docs/static/img/memgraph_kg_2.png create mode 100644 docs/static/img/memgraph_kg_3.png create mode 100644 docs/static/img/memgraph_kg_4.png create mode 100644 libs/community/langchain_community/chains/graph_qa/memgraph.py diff --git a/docs/docs/integrations/graphs/memgraph.ipynb b/docs/docs/integrations/graphs/memgraph.ipynb index 4dc8d33be4b86..1040d43f9e50f 100644 --- a/docs/docs/integrations/graphs/memgraph.ipynb +++ b/docs/docs/integrations/graphs/memgraph.ipynb @@ -2,24 +2,26 @@ "cells": [ { "cell_type": "markdown", - "id": "311b3061", "metadata": {}, "source": [ "# Memgraph\n", "\n", - ">[Memgraph](https://github.com/memgraph/memgraph) is the open-source graph database, compatible with `Neo4j`.\n", - ">The database is using the `Cypher` graph query language, \n", - ">\n", - ">[Cypher](https://en.wikipedia.org/wiki/Cypher_(query_language)) is a declarative graph query language that allows for expressive and efficient data querying in a property graph.\n", - "\n", - "This notebook shows how to use LLMs to provide a natural language interface to a [Memgraph](https://github.com/memgraph/memgraph) database.\n", + "Memgraph is an open-source graph database, tuned for dynamic analytics environments and compatible with Neo4j. To query the database, Memgraph uses Cypher - the most widely adopted, fully-specified, and open query language for property graph databases.\n", "\n", + "This notebook will show you how to [query Memgraph with natural language](#natural-language-querying) and how to [construct a knowledge graph](#constructing-knowledge-graph) from your unstructured data. \n", "\n", + "But first, make sure to [set everything up](#setting-up)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "## Setting up\n", "\n", - "To complete this tutorial, you will need [Docker](https://www.docker.com/get-started/) and [Python 3.x](https://www.python.org/) installed.\n", + "To go over this guide, you will need [Docker](https://www.docker.com/get-started/) and [Python 3.x](https://www.python.org/) installed.\n", "\n", - "Ensure you have a running Memgraph instance. To quickly run Memgraph Platform (Memgraph database + MAGE library + Memgraph Lab) for the first time, do the following:\n", + "To quickly run **Memgraph Platform** (Memgraph database + MAGE library + Memgraph Lab) for the first time, do the following:\n", "\n", "On Linux/MacOS:\n", "```\n", @@ -31,89 +33,90 @@ "iwr https://windows.memgraph.com | iex\n", "```\n", "\n", - "Both commands run a script that downloads a Docker Compose file to your system, builds and starts `memgraph-mage` and `memgraph-lab` Docker services in two separate containers. \n", + "Both commands run a script that downloads a Docker Compose file to your system, builds and starts `memgraph-mage` and `memgraph-lab` Docker services in two separate containers. Now you have Memgraph up and running! Read more about the installation process on [Memgraph documentation](https://memgraph.com/docs/getting-started/install-memgraph).\n", "\n", - "Read more about the installation process on [Memgraph documentation](https://memgraph.com/docs/getting-started/install-memgraph).\n", + "To use LangChain, install and import all the necessary packages. We'll use the package manager [pip](https://pip.pypa.io/en/stable/installation/), along with the `--user` flag, to ensure proper permissions. If you've installed Python 3.4 or a later version, `pip` is included by default. You can install all the required packages using the following command:\n", "\n", - "Now you can start playing with `Memgraph`!" - ] - }, - { - "cell_type": "markdown", - "id": "45ee105e", - "metadata": {}, - "source": [ - "Begin by installing and importing all the necessary packages. We'll use the package manager called [pip](https://pip.pypa.io/en/stable/installation/), along with the `--user` flag, to ensure proper permissions. If you've installed Python 3.4 or a later version, pip is included by default. You can install all the required packages using the following command:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fd6b9672", - "metadata": {}, - "outputs": [], - "source": [ - "pip install langchain langchain-neo4j langchain-openai neo4j gqlalchemy --user" + "```\n", + "pip install langchain langchain-openai neo4j --user\n", + "```\n", + "\n", + "You can either run the provided code blocks in this notebook or use a separate Python file to experiment with Memgraph and LangChain." ] }, { "cell_type": "markdown", - "id": "ec969a02", "metadata": {}, "source": [ - "You can either run the provided code blocks in this notebook or use a separate Python file to experiment with Memgraph and LangChain." + "## Natural language querying\n", + "\n", + "Memgraph's integration with LangChain includes natural language querying. To utilized it, first do all the necessary imports. We will discuss them as they appear in the code.\n", + "\n", + "First, instantiate `MemgraphGraph`. This object holds the connection to the running Memgraph instance. Make sure to set up all the environment variables properly." ] }, { "cell_type": "code", - "execution_count": null, - "id": "8206f90d", + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", - "from gqlalchemy import Memgraph\n", + "from langchain_community.chains.graph_qa.memgraph import MemgraphQAChain\n", "from langchain_community.graphs import MemgraphGraph\n", "from langchain_core.prompts import PromptTemplate\n", - "from langchain_neo4j import GraphCypherQAChain\n", - "from langchain_openai import ChatOpenAI" + "from langchain_openai import ChatOpenAI\n", + "\n", + "url = os.environ.get(\"MEMGRAPH_URI\", \"bolt://localhost:7687\")\n", + "username = os.environ.get(\"MEMGRAPH_USERNAME\", \"\")\n", + "password = os.environ.get(\"MEMGRAPH_PASSWORD\", \"\")\n", + "\n", + "graph = MemgraphGraph(\n", + " url=url, username=username, password=password, refresh_schema=False\n", + ")" ] }, { "cell_type": "markdown", - "id": "95ba37a4", "metadata": {}, "source": [ - "We're utilizing the Python library [GQLAlchemy](https://github.com/memgraph/gqlalchemy) to establish a connection between our Memgraph database and Python script. You can establish the connection to a running Memgraph instance with the Neo4j driver as well, since it's compatible with Memgraph. To execute queries with GQLAlchemy, we can set up a Memgraph instance as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b90c9cf8", - "metadata": {}, - "outputs": [], - "source": [ - "memgraph = Memgraph(host=\"127.0.0.1\", port=7687)" + "The `refresh_schema` is initially set to `False` because there is still no data in the database and we want to avoid unnecessary database calls. " ] }, { "cell_type": "markdown", - "id": "4c379d16", "metadata": {}, "source": [ - "## Populating the database\n", - "You can effortlessly populate your new, empty database using the Cypher query language. Don't worry if you don't grasp every line just yet, you can learn Cypher from the documentation [here](https://memgraph.com/docs/cypher-manual/). Running the following script will execute a seeding query on the database, giving us data about a video game, including details like the publisher, available platforms, and genres. This data will serve as a basis for our work." + "### Populating the database\n", + "\n", + "To populate the database, first make sure it's empty. The most efficient way to do that is to switch to the in-memory analytical storage mode, drop the graph and go back to the in-memory transactional mode. Learn more about Memgraph's [storage modes](https://memgraph.com/docs/fundamentals/storage-memory-usage#storage-modes).\n", + "\n", + "The data we'll add to the database is about video games of different genres available on various platforms and related to publishers." ] }, { "cell_type": "code", - "execution_count": null, - "id": "11922bdf", - "metadata": {}, - "outputs": [], - "source": [ + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Drop graph\n", + "graph.query(\"STORAGE MODE IN_MEMORY_ANALYTICAL\")\n", + "graph.query(\"DROP GRAPH\")\n", + "graph.query(\"STORAGE MODE IN_MEMORY_TRANSACTIONAL\")\n", + "\n", "# Creating and executing the seeding query\n", "query = \"\"\"\n", " MERGE (g:Game {name: \"Baldur's Gate 3\"})\n", @@ -131,576 +134,660 @@ " MERGE (g)-[:PUBLISHED_BY]->(p);\n", "\"\"\"\n", "\n", - "memgraph.execute(query)" + "graph.query(query)" ] }, { "cell_type": "markdown", - "id": "378db965", "metadata": {}, "source": [ - "## Refresh graph schema" + "Notice how the `graph` object holds the `query` method. That method executes query in Memgraph and it is also used by the `MemgraphQAChain` to query the database." ] }, { "cell_type": "markdown", - "id": "d6b37df3", "metadata": {}, "source": [ - "You're all set to instantiate the Memgraph-LangChain graph using the following script. This interface will allow us to query our database using LangChain, automatically creating the required graph schema for generating Cypher queries through LLM." + "### Refresh graph schema\n", + "\n", + "Since the new data is created in Memgraph, it is necessary to refresh the schema. The generated schema will be used by the `MemgraphQAChain` to instruct LLM to better generate Cypher queries. " ] }, { "cell_type": "code", - "execution_count": null, - "id": "f38bbe83", + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "graph = MemgraphGraph(url=\"bolt://localhost:7687\", username=\"\", password=\"\")" + "graph.refresh_schema()" ] }, { "cell_type": "markdown", - "id": "846c32a8", "metadata": {}, "source": [ - "If necessary, you can manually refresh the graph schema as follows." + "To familiarize yourself with the data and verify the updated graph schema, you can print it using the following statement:" ] }, { "cell_type": "code", - "execution_count": null, - "id": "b561026e", - "metadata": {}, - "outputs": [], - "source": [ - "graph.refresh_schema()" - ] - }, - { - "cell_type": "markdown", - "id": "c51b7948", - "metadata": {}, - "source": [ - "To familiarize yourself with the data and verify the updated graph schema, you can print it using the following statement." + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Node labels and properties (name and type) are:\n", + "- labels: (:Platform)\n", + " properties:\n", + " - name: string\n", + "- labels: (:Genre)\n", + " properties:\n", + " - name: string\n", + "- labels: (:Game)\n", + " properties:\n", + " - name: string\n", + "- labels: (:Publisher)\n", + " properties:\n", + " - name: string\n", + "\n", + "Nodes are connected with the following relationships:\n", + "(:Game)-[:HAS_GENRE]->(:Genre)\n", + "(:Game)-[:PUBLISHED_BY]->(:Publisher)\n", + "(:Game)-[:AVAILABLE_ON]->(:Platform)\n", + "\n" + ] + } + ], + "source": [ + "print(graph.get_schema)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Querying the database\n", + "\n", + "To interact with the OpenAI API, you must configure your API key as an environment variable. This ensures proper authorization for your requests. You can find more information on obtaining your API key [here](https://help.openai.com/en/articles/4936850-where-do-i-find-my-secret-api-key). To configure the API key, you can use Python [os](https://docs.python.org/3/library/os.html) package:\n", + "\n", + "```\n", + "os.environ[\"OPENAI_API_KEY\"] = \"your-key-here\"\n", + "```\n", + "\n", + "Run the above code snippet if you're running the code within the Jupyter notebook. \n", + "\n", + "Next, create `MemgraphQAChain`, which will be utilized in the question-answering process based on your graph data. The `temperature parameter` is set to zero to ensure predictable and consistent answers. You can set `verbose` parameter to `True` to receive more detailed messages regarding query generation." ] }, { "cell_type": "code", - "execution_count": null, - "id": "f2e0ec3e", + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "print(graph.schema)" - ] - }, - { - "cell_type": "markdown", - "id": "a0c2a556", - "metadata": {}, - "source": [ - "```\n", - "Node properties are the following:\n", - "Node name: 'Game', Node properties: [{'property': 'name', 'type': 'str'}]\n", - "Node name: 'Platform', Node properties: [{'property': 'name', 'type': 'str'}]\n", - "Node name: 'Genre', Node properties: [{'property': 'name', 'type': 'str'}]\n", - "Node name: 'Publisher', Node properties: [{'property': 'name', 'type': 'str'}]\n", - "\n", - "Relationship properties are the following:\n", - "\n", - "The relationships are the following:\n", - "['(:Game)-[:AVAILABLE_ON]->(:Platform)']\n", - "['(:Game)-[:HAS_GENRE]->(:Genre)']\n", - "['(:Game)-[:PUBLISHED_BY]->(:Publisher)']\n", - "```" + "chain = MemgraphQAChain.from_llm(\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " model_name=\"gpt-4-turbo\",\n", + " allow_dangerous_requests=True,\n", + ")" ] }, { "cell_type": "markdown", - "id": "44d3a1da", "metadata": {}, "source": [ - "## Querying the database" + "Now you can start asking questions!" ] }, { - "cell_type": "markdown", - "id": "8aedfd63", + "cell_type": "code", + "execution_count": 7, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MATCH (:Game{name: \"Baldur's Gate 3\"})-[:AVAILABLE_ON]->(platform:Platform)\n", + "RETURN platform.name\n", + "Baldur's Gate 3 is available on PlayStation 5, Mac OS, Windows, and Xbox Series X/S.\n" + ] + } + ], "source": [ - "To interact with the OpenAI API, you must configure your API key as an environment variable using the Python [os](https://docs.python.org/3/library/os.html) package. This ensures proper authorization for your requests. You can find more information on obtaining your API key [here](https://help.openai.com/en/articles/4936850-where-do-i-find-my-secret-api-key)." + "response = chain.invoke(\"Which platforms is Baldur's Gate 3 available on?\")\n", + "print(response[\"result\"])" ] }, { "cell_type": "code", - "execution_count": null, - "id": "b8385c72", + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MATCH (:Game{name: \"Baldur's Gate 3\"})-[:AVAILABLE_ON]->(:Platform{name: \"Windows\"})\n", + "RETURN \"Yes\"\n", + "Yes, Baldur's Gate 3 is available on Windows.\n" + ] + } + ], "source": [ - "os.environ[\"OPENAI_API_KEY\"] = \"your-key-here\"" + "response = chain.invoke(\"Is Baldur's Gate 3 available on Windows?\")\n", + "print(response[\"result\"])" ] }, { "cell_type": "markdown", - "id": "5a74565a", "metadata": {}, "source": [ - "You should create the graph chain using the following script, which will be utilized in the question-answering process based on your graph data. While it defaults to GPT-3.5-turbo, you might also consider experimenting with other models like [GPT-4](https://help.openai.com/en/articles/7102672-how-can-i-access-gpt-4) for notably improved Cypher queries and outcomes. We'll utilize the OpenAI chat, utilizing the key you previously configured. We'll set the temperature to zero, ensuring predictable and consistent answers. Additionally, we'll use our Memgraph-LangChain graph and set the verbose parameter, which defaults to False, to True to receive more detailed messages regarding query generation." + "### Chain modifiers\n", + "\n", + "To modify the behavior of your chain and obtain more context or additional information, you can modify the chain's parameters.\n", + "\n", + "#### Return direct query results\n", + "The `return_direct` modifier specifies whether to return the direct results of the executed Cypher query or the processed natural language response." ] }, { "cell_type": "code", - "execution_count": null, - "id": "4a3a5f2e", - "metadata": {}, - "outputs": [], + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MATCH (g:Game {name: \"Baldur's Gate 3\"})-[:PUBLISHED_BY]->(p:Publisher)\n", + "RETURN p.name\n", + "[{'p.name': 'Larian Studios'}]\n" + ] + } + ], "source": [ - "chain = GraphCypherQAChain.from_llm(\n", + "# Return the result of querying the graph directly\n", + "chain = MemgraphQAChain.from_llm(\n", " ChatOpenAI(temperature=0),\n", " graph=graph,\n", - " verbose=True,\n", - " model_name=\"gpt-3.5-turbo\",\n", + " return_direct=True,\n", " allow_dangerous_requests=True,\n", - ")" + " model_name=\"gpt-4-turbo\",\n", + ")\n", + "\n", + "response = chain.invoke(\"Which studio published Baldur's Gate 3?\")\n", + "print(response[\"result\"])" ] }, { "cell_type": "markdown", - "id": "949de4f3", "metadata": {}, "source": [ - "Now you can start asking questions!" + "#### Return query intermediate steps\n", + "The `return_intermediate_steps` chain modifier enhances the returned response by including the intermediate steps of the query in addition to the initial query result." ] }, { "cell_type": "code", - "execution_count": null, - "id": "b7aea263", - "metadata": {}, - "outputs": [], + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MATCH (:Game {name: \"Baldur's Gate 3\"})-[:HAS_GENRE]->(:Genre {name: \"Adventure\"})\n", + "RETURN \"Yes\"\n", + "Intermediate steps: [{'query': 'MATCH (:Game {name: \"Baldur\\'s Gate 3\"})-[:HAS_GENRE]->(:Genre {name: \"Adventure\"})\\nRETURN \"Yes\"'}, {'context': [{'\"Yes\"': 'Yes'}]}]\n", + "Final response: Yes.\n" + ] + } + ], "source": [ - "response = chain.run(\"Which platforms is Baldur's Gate 3 available on?\")\n", - "print(response)" + "# Return all the intermediate steps of query execution\n", + "chain = MemgraphQAChain.from_llm(\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " allow_dangerous_requests=True,\n", + " return_intermediate_steps=True,\n", + " model_name=\"gpt-4-turbo\",\n", + ")\n", + "\n", + "response = chain.invoke(\"Is Baldur's Gate 3 an Adventure game?\")\n", + "print(f\"Intermediate steps: {response['intermediate_steps']}\")\n", + "print(f\"Final response: {response['result']}\")" ] }, { "cell_type": "markdown", - "id": "a06a8164", "metadata": {}, "source": [ - "```\n", - "> Entering new GraphCypherQAChain chain...\n", - "Generated Cypher:\n", - "MATCH (g:Game {name: 'Baldur\\'s Gate 3'})-[:AVAILABLE_ON]->(p:Platform)\n", - "RETURN p.name\n", - "Full Context:\n", - "[{'p.name': 'PlayStation 5'}, {'p.name': 'Mac OS'}, {'p.name': 'Windows'}, {'p.name': 'Xbox Series X/S'}]\n", + "#### Limit the number of query results\n", "\n", - "> Finished chain.\n", - "Baldur's Gate 3 is available on PlayStation 5, Mac OS, Windows, and Xbox Series X/S.\n", - "```" + "The `top_k` modifier can be used when you want to restrict the maximum number of query results." ] }, { "cell_type": "code", - "execution_count": null, - "id": "59d298d5", - "metadata": {}, - "outputs": [], - "source": [ - "response = chain.run(\"Is Baldur's Gate 3 available on Windows?\")\n", - "print(response)" - ] - }, - { - "cell_type": "markdown", - "id": "99dd783c", - "metadata": {}, + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MATCH (:Game {name: \"Baldur's Gate 3\"})-[:HAS_GENRE]->(g:Genre)\n", + "RETURN g.name;\n", + "Adventure, Role-Playing Game\n" + ] + } + ], "source": [ - "```\n", - "> Entering new GraphCypherQAChain chain...\n", - "Generated Cypher:\n", - "MATCH (:Game {name: 'Baldur\\'s Gate 3'})-[:AVAILABLE_ON]->(:Platform {name: 'Windows'})\n", - "RETURN true\n", - "Full Context:\n", - "[{'true': True}]\n", + "# Limit the maximum number of results returned by query\n", + "chain = MemgraphQAChain.from_llm(\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " top_k=2,\n", + " allow_dangerous_requests=True,\n", + " model_name=\"gpt-4-turbo\",\n", + ")\n", "\n", - "> Finished chain.\n", - "Yes, Baldur's Gate 3 is available on Windows.\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "08620465", - "metadata": {}, - "source": [ - "## Chain modifiers" - ] - }, - { - "cell_type": "markdown", - "id": "6603e6c8", - "metadata": {}, - "source": [ - "To modify the behavior of your chain and obtain more context or additional information, you can modify the chain's parameters." + "response = chain.invoke(\"What genres are associated with Baldur's Gate 3?\")\n", + "print(response[\"result\"])" ] }, { "cell_type": "markdown", - "id": "8d187a83", "metadata": {}, "source": [ - "#### Return direct query results\n", - "The `return_direct` modifier specifies whether to return the direct results of the executed Cypher query or the processed natural language response." + "### Advanced querying\n", + "\n", + "As the complexity of your solution grows, you might encounter different use-cases that require careful handling. Ensuring your application's scalability is essential to maintain a smooth user flow without any hitches.\n", + "\n", + "Let's instantiate our chain once again and attempt to ask some questions that users might potentially ask." ] }, { "cell_type": "code", - "execution_count": null, - "id": "0533847d", - "metadata": {}, - "outputs": [], - "source": [ - "# Return the result of querying the graph directly\n", - "chain = GraphCypherQAChain.from_llm(\n", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MATCH (:Game{name: \"Baldur's Gate 3\"})-[:AVAILABLE_ON]->(:Platform{name: \"PS5\"})\n", + "RETURN \"Yes\"\n", + "I don't know the answer.\n" + ] + } + ], + "source": [ + "chain = MemgraphQAChain.from_llm(\n", " ChatOpenAI(temperature=0),\n", " graph=graph,\n", - " verbose=True,\n", - " return_direct=True,\n", + " model_name=\"gpt-4-turbo\",\n", " allow_dangerous_requests=True,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "afbe96fb", - "metadata": {}, - "outputs": [], - "source": [ - "response = chain.run(\"Which studio published Baldur's Gate 3?\")\n", - "print(response)" + ")\n", + "\n", + "response = chain.invoke(\"Is Baldur's Gate 3 available on PS5?\")\n", + "print(response[\"result\"])" ] }, { "cell_type": "markdown", - "id": "94b32b6e", "metadata": {}, "source": [ - "```\n", - "> Entering new GraphCypherQAChain chain...\n", - "Generated Cypher:\n", - "MATCH (:Game {name: 'Baldur\\'s Gate 3'})-[:PUBLISHED_BY]->(p:Publisher)\n", - "RETURN p.name\n", - "\n", - "> Finished chain.\n", - "[{'p.name': 'Larian Studios'}]\n", - "```" + "The generated Cypher query looks fine, but we didn't receive any information in response. This illustrates a common challenge when working with LLMs - the misalignment between how users phrase queries and how data is stored. In this case, the difference between user perception and the actual data storage can cause mismatches. Prompt refinement, the process of honing the model's prompts to better grasp these distinctions, is an efficient solution that tackles this issue. Through prompt refinement, the model gains increased proficiency in generating precise and pertinent queries, leading to the successful retrieval of the desired data." ] }, { "cell_type": "markdown", - "id": "5c97ab3a", "metadata": {}, "source": [ - "#### Return query intermediate steps\n", - "The `return_intermediate_steps` chain modifier enhances the returned response by including the intermediate steps of the query in addition to the initial query result." + "#### Prompt refinement\n", + "\n", + "To address this, we can adjust the initial Cypher prompt of the QA chain. This involves adding guidance to the LLM on how users can refer to specific platforms, such as PS5 in our case. We achieve this using the LangChain [PromptTemplate](/docs/how_to#prompt-templates), creating a modified initial prompt. This modified prompt is then supplied as an argument to our refined `MemgraphQAChain` instance." ] }, { "cell_type": "code", - "execution_count": null, - "id": "82f673c8", - "metadata": {}, - "outputs": [], - "source": [ - "# Return all the intermediate steps of query execution\n", - "chain = GraphCypherQAChain.from_llm(\n", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MATCH (:Game{name: \"Baldur's Gate 3\"})-[:AVAILABLE_ON]->(:Platform{name: \"PlayStation 5\"})\n", + "RETURN \"Yes\"\n", + "Yes, Baldur's Gate 3 is available on PS5.\n" + ] + } + ], + "source": [ + "MEMGRAPH_GENERATION_TEMPLATE = \"\"\"Your task is to directly translate natural language inquiry into precise and executable Cypher query for Memgraph database. \n", + "You will utilize a provided database schema to understand the structure, nodes and relationships within the Memgraph database.\n", + "Instructions: \n", + "- Use provided node and relationship labels and property names from the\n", + "schema which describes the database's structure. Upon receiving a user\n", + "question, synthesize the schema to craft a precise Cypher query that\n", + "directly corresponds to the user's intent. \n", + "- Generate valid executable Cypher queries on top of Memgraph database. \n", + "Any explanation, context, or additional information that is not a part \n", + "of the Cypher query syntax should be omitted entirely. \n", + "- Use Memgraph MAGE procedures instead of Neo4j APOC procedures. \n", + "- Do not include any explanations or apologies in your responses. \n", + "- Do not include any text except the generated Cypher statement.\n", + "- For queries that ask for information or functionalities outside the direct\n", + "generation of Cypher queries, use the Cypher query format to communicate\n", + "limitations or capabilities. For example: RETURN \"I am designed to generate\n", + "Cypher queries based on the provided schema only.\"\n", + "Schema: \n", + "{schema}\n", + "\n", + "With all the above information and instructions, generate Cypher query for the\n", + "user question. \n", + "If the user asks about PS5, Play Station 5 or PS 5, that is the platform called PlayStation 5.\n", + "\n", + "The question is:\n", + "{question}\"\"\"\n", + "\n", + "MEMGRAPH_GENERATION_PROMPT = PromptTemplate(\n", + " input_variables=[\"schema\", \"question\"], template=MEMGRAPH_GENERATION_TEMPLATE\n", + ")\n", + "\n", + "chain = MemgraphQAChain.from_llm(\n", " ChatOpenAI(temperature=0),\n", + " cypher_prompt=MEMGRAPH_GENERATION_PROMPT,\n", " graph=graph,\n", - " verbose=True,\n", - " return_intermediate_steps=True,\n", + " model_name=\"gpt-4-turbo\",\n", " allow_dangerous_requests=True,\n", - ")" + ")\n", + "\n", + "response = chain.invoke(\"Is Baldur's Gate 3 available on PS5?\")\n", + "print(response[\"result\"])" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "d87e0976", + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "response = chain(\"Is Baldur's Gate 3 an Adventure game?\")\n", - "print(f\"Intermediate steps: {response['intermediate_steps']}\")\n", - "print(f\"Final response: {response['result']}\")" + "Now, with the revised initial Cypher prompt that includes guidance on platform naming, we are obtaining accurate and relevant results that align more closely with user queries. \n", + "\n", + "This approach allows for further improvement of your QA chain. You can effortlessly integrate extra prompt refinement data into your chain, thereby enhancing the overall user experience of your app." ] }, { "cell_type": "markdown", - "id": "df12b3da", "metadata": {}, "source": [ - "```\n", - "> Entering new GraphCypherQAChain chain...\n", - "Generated Cypher:\n", - "MATCH (g:Game {name: 'Baldur\\'s Gate 3'})-[:HAS_GENRE]->(genre:Genre {name: 'Adventure'})\n", - "RETURN g, genre\n", - "Full Context:\n", - "[{'g': {'name': \"Baldur's Gate 3\"}, 'genre': {'name': 'Adventure'}}]\n", + "## Constructing knowledge graph\n", + "\n", + "Transforming unstructured data to structured is not an easy or straightforward task. This guide will show how LLMs can be utilized to help us there and how to construct a knowledge graph in Memgraph. After knowledge graph is created, you can use it for your GraphRAG application.\n", "\n", - "> Finished chain.\n", - "Intermediate steps: [{'query': \"MATCH (g:Game {name: 'Baldur\\\\'s Gate 3'})-[:HAS_GENRE]->(genre:Genre {name: 'Adventure'})\\nRETURN g, genre\"}, {'context': [{'g': {'name': \"Baldur's Gate 3\"}, 'genre': {'name': 'Adventure'}}]}]\n", - "Final response: Yes, Baldur's Gate 3 is an Adventure game.\n", - "```" + "The steps of constructing a knowledge graph from the text are:\n", + "\n", + "- [Extracting structured information from text](#extracting-structured-information-from-text): LLM is used to extract structured graph information from text in a form of nodes and relationships.\n", + "- [Storing into Memgraph](#storing-into-memgraph): Storing the extracted structured graph information into Memgraph." ] }, { "cell_type": "markdown", - "id": "41124485", "metadata": {}, "source": [ - "#### Limit the number of query results\n", - "The `top_k` modifier can be used when you want to restrict the maximum number of query results." + "### Extracting structured information from text\n", + "\n", + "Besides all the imports in the [setup section](#setting-up), import `LLMGraphTransformer` and `Document` which will be used to extract structured information from text." ] }, { "cell_type": "code", - "execution_count": null, - "id": "7340fc87", + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ - "# Limit the maximum number of results returned by query\n", - "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0),\n", - " graph=graph,\n", - " verbose=True,\n", - " top_k=2,\n", - " allow_dangerous_requests=True,\n", - ")" + "from langchain_core.documents import Document\n", + "from langchain_experimental.graph_transformers import LLMGraphTransformer" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "3a17cdc6", + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "response = chain.run(\"What genres are associated with Baldur's Gate 3?\")\n", - "print(response)" + "Below is an example text about Charles Darwin ([source](https://en.wikipedia.org/wiki/Charles_Darwin)) from which knowledge graph will be constructed." ] }, { - "cell_type": "markdown", - "id": "dcff33ed", + "cell_type": "code", + "execution_count": 15, "metadata": {}, + "outputs": [], "source": [ - "```\n", - "> Entering new GraphCypherQAChain chain...\n", - "Generated Cypher:\n", - "MATCH (:Game {name: 'Baldur\\'s Gate 3'})-[:HAS_GENRE]->(g:Genre)\n", - "RETURN g.name\n", - "Full Context:\n", - "[{'g.name': 'Adventure'}, {'g.name': 'Role-Playing Game'}]\n", - "\n", - "> Finished chain.\n", - "Baldur's Gate 3 is associated with the genres Adventure and Role-Playing Game.\n", - "```" + "text = \"\"\"\n", + " Charles Robert Darwin was an English naturalist, geologist, and biologist,\n", + " widely known for his contributions to evolutionary biology. His proposition that\n", + " all species of life have descended from a common ancestor is now generally\n", + " accepted and considered a fundamental scientific concept. In a joint\n", + " publication with Alfred Russel Wallace, he introduced his scientific theory that\n", + " this branching pattern of evolution resulted from a process he called natural\n", + " selection, in which the struggle for existence has a similar effect to the\n", + " artificial selection involved in selective breeding. Darwin has been\n", + " described as one of the most influential figures in human history and was\n", + " honoured by burial in Westminster Abbey.\n", + "\"\"\"" ] }, { "cell_type": "markdown", - "id": "2eb524a1", "metadata": {}, "source": [ - "# Advanced querying" + "The next step is to initialize `LLMGraphTransformer` from the desired LLM and convert the document to the graph structure. " ] }, { - "cell_type": "markdown", - "id": "113be997", + "cell_type": "code", + "execution_count": 16, "metadata": {}, + "outputs": [], "source": [ - "As the complexity of your solution grows, you might encounter different use-cases that require careful handling. Ensuring your application's scalability is essential to maintain a smooth user flow without any hitches." + "llm = ChatOpenAI(temperature=0, model_name=\"gpt-4-turbo\")\n", + "llm_transformer = LLMGraphTransformer(llm=llm)\n", + "documents = [Document(page_content=text)]\n", + "graph_documents = llm_transformer.convert_to_graph_documents(documents)" ] }, { "cell_type": "markdown", - "id": "e0b2db17", "metadata": {}, "source": [ - "Let's instantiate our chain once again and attempt to ask some questions that users might potentially ask." + "Under the hood, LLM extracts important entities from the text and returns them as a list of nodes and relationships. Here's how it looks like:" ] }, { "cell_type": "code", - "execution_count": null, - "id": "fc544d0b", + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[GraphDocument(nodes=[Node(id='Charles Robert Darwin', type='Person', properties={}), Node(id='English', type='Nationality', properties={}), Node(id='Naturalist', type='Profession', properties={}), Node(id='Geologist', type='Profession', properties={}), Node(id='Biologist', type='Profession', properties={}), Node(id='Evolutionary Biology', type='Field', properties={}), Node(id='Common Ancestor', type='Concept', properties={}), Node(id='Scientific Concept', type='Concept', properties={}), Node(id='Alfred Russel Wallace', type='Person', properties={}), Node(id='Natural Selection', type='Concept', properties={}), Node(id='Selective Breeding', type='Concept', properties={}), Node(id='Westminster Abbey', type='Location', properties={})], relationships=[Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='English', type='Nationality', properties={}), type='NATIONALITY', properties={}), Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='Naturalist', type='Profession', properties={}), type='PROFESSION', properties={}), Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='Geologist', type='Profession', properties={}), type='PROFESSION', properties={}), Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='Biologist', type='Profession', properties={}), type='PROFESSION', properties={}), Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='Evolutionary Biology', type='Field', properties={}), type='CONTRIBUTION', properties={}), Relationship(source=Node(id='Common Ancestor', type='Concept', properties={}), target=Node(id='Scientific Concept', type='Concept', properties={}), type='BASIS', properties={}), Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='Alfred Russel Wallace', type='Person', properties={}), type='COLLABORATION', properties={}), Relationship(source=Node(id='Natural Selection', type='Concept', properties={}), target=Node(id='Selective Breeding', type='Concept', properties={}), type='COMPARISON', properties={}), Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='Westminster Abbey', type='Location', properties={}), type='BURIAL', properties={})], source=Document(metadata={}, page_content='\\n Charles Robert Darwin was an English naturalist, geologist, and biologist,\\n widely known for his contributions to evolutionary biology. His proposition that\\n all species of life have descended from a common ancestor is now generally\\n accepted and considered a fundamental scientific concept. In a joint\\n publication with Alfred Russel Wallace, he introduced his scientific theory that\\n this branching pattern of evolution resulted from a process he called natural\\n selection, in which the struggle for existence has a similar effect to the\\n artificial selection involved in selective breeding. Darwin has been\\n described as one of the most influential figures in human history and was\\n honoured by burial in Westminster Abbey.\\n'))]\n" + ] + } + ], "source": [ - "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0),\n", - " graph=graph,\n", - " verbose=True,\n", - " model_name=\"gpt-3.5-turbo\",\n", - " allow_dangerous_requests=True,\n", - ")" + "print(graph_documents)" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "e2abde2d", + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "response = chain.run(\"Is Baldur's Gate 3 available on PS5?\")\n", - "print(response)" + "### Storing into Memgraph\n", + "\n", + "Once you have the data ready in a format of `GraphDocument`, that is, nodes and relationships, you can use `add_graph_documents` method to import it into Memgraph. That method transforms the list of `graph_documents` into appropriate Cypher queries that need to be executed in Memgraph. Once that's done, a knowledge graph is stored in Memgraph. " ] }, { - "cell_type": "markdown", - "id": "cf22dc48", + "cell_type": "code", + "execution_count": 18, "metadata": {}, + "outputs": [], "source": [ - "```\n", - "> Entering new GraphCypherQAChain chain...\n", - "Generated Cypher:\n", - "MATCH (g:Game {name: 'Baldur\\'s Gate 3'})-[:AVAILABLE_ON]->(p:Platform {name: 'PS5'})\n", - "RETURN g.name, p.name\n", - "Full Context:\n", - "[]\n", + "# Empty the database\n", + "graph.query(\"STORAGE MODE IN_MEMORY_ANALYTICAL\")\n", + "graph.query(\"DROP GRAPH\")\n", + "graph.query(\"STORAGE MODE IN_MEMORY_TRANSACTIONAL\")\n", "\n", - "> Finished chain.\n", - "I'm sorry, but I don't have the information to answer your question.\n", - "```" + "# Create KG\n", + "graph.add_graph_documents(graph_documents)" ] }, { "cell_type": "markdown", - "id": "293aa1c9", "metadata": {}, "source": [ - "The generated Cypher query looks fine, but we didn't receive any information in response. This illustrates a common challenge when working with LLMs - the misalignment between how users phrase queries and how data is stored. In this case, the difference between user perception and the actual data storage can cause mismatches. Prompt refinement, the process of honing the model's prompts to better grasp these distinctions, is an efficient solution that tackles this issue. Through prompt refinement, the model gains increased proficiency in generating precise and pertinent queries, leading to the successful retrieval of the desired data." + "Here is how the graph looks like in Memgraph Lab (check on `localhost:3000`):\n", + "\n", + "![memgraph-kg](../../../static/img/memgraph_kg.png)\n", + "\n", + "In case you tried this out and got a different graph, that is expected behavior. The graph construction process is non-deterministic, since LLM which is used to generate nodes and relationships from unstructured data in non-deterministic.\n", + "\n", + "### Additional options\n", + "\n", + "Additionally, you have the flexibility to define specific types of nodes and relationships for extraction according to your requirements." ] }, { - "cell_type": "markdown", - "id": "a87b2f1b", - "metadata": {}, - "source": [ - "### Prompt refinement" + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Nodes:[Node(id='Charles Robert Darwin', type='Person', properties={}), Node(id='English', type='Nationality', properties={}), Node(id='Evolutionary Biology', type='Concept', properties={}), Node(id='Natural Selection', type='Concept', properties={}), Node(id='Alfred Russel Wallace', type='Person', properties={})]\n", + "Relationships:[Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='English', type='Nationality', properties={}), type='NATIONALITY', properties={}), Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='Evolutionary Biology', type='Concept', properties={}), type='INVOLVED_IN', properties={}), Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='Natural Selection', type='Concept', properties={}), type='INVOLVED_IN', properties={}), Relationship(source=Node(id='Charles Robert Darwin', type='Person', properties={}), target=Node(id='Alfred Russel Wallace', type='Person', properties={}), type='COLLABORATES_WITH', properties={})]\n" + ] + } + ], + "source": [ + "llm_transformer_filtered = LLMGraphTransformer(\n", + " llm=llm,\n", + " allowed_nodes=[\"Person\", \"Nationality\", \"Concept\"],\n", + " allowed_relationships=[\"NATIONALITY\", \"INVOLVED_IN\", \"COLLABORATES_WITH\"],\n", + ")\n", + "graph_documents_filtered = llm_transformer_filtered.convert_to_graph_documents(\n", + " documents\n", + ")\n", + "\n", + "print(f\"Nodes:{graph_documents_filtered[0].nodes}\")\n", + "print(f\"Relationships:{graph_documents_filtered[0].relationships}\")" ] }, { "cell_type": "markdown", - "id": "8edb9976", "metadata": {}, "source": [ - "To address this, we can adjust the initial Cypher prompt of the QA chain. This involves adding guidance to the LLM on how users can refer to specific platforms, such as PS5 in our case. We achieve this using the LangChain [PromptTemplate](/docs/how_to#prompt-templates), creating a modified initial prompt. This modified prompt is then supplied as an argument to our refined Memgraph-LangChain instance." + "Here's how the graph would like in such case:\n", + "\n", + "![memgraph-kg-2](../../../static/img/memgraph_kg_2.png)\n", + "\n", + "Your graph can also have `__Entity__` labels on all nodes which will be indexed for faster retrieval. " ] }, { "cell_type": "code", - "execution_count": null, - "id": "312dad05", + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ - "CYPHER_GENERATION_TEMPLATE = \"\"\"\n", - "Task:Generate Cypher statement to query a graph database.\n", - "Instructions:\n", - "Use only the provided relationship types and properties in the schema.\n", - "Do not use any other relationship types or properties that are not provided.\n", - "Schema:\n", - "{schema}\n", - "Note: Do not include any explanations or apologies in your responses.\n", - "Do not respond to any questions that might ask anything else than for you to construct a Cypher statement.\n", - "Do not include any text except the generated Cypher statement.\n", - "If the user asks about PS5, Play Station 5 or PS 5, that is the platform called PlayStation 5.\n", - "\n", - "The question is:\n", - "{question}\n", - "\"\"\"\n", + "# Drop graph\n", + "graph.query(\"STORAGE MODE IN_MEMORY_ANALYTICAL\")\n", + "graph.query(\"DROP GRAPH\")\n", + "graph.query(\"STORAGE MODE IN_MEMORY_TRANSACTIONAL\")\n", "\n", - "CYPHER_GENERATION_PROMPT = PromptTemplate(\n", - " input_variables=[\"schema\", \"question\"], template=CYPHER_GENERATION_TEMPLATE\n", - ")" + "# Store to Memgraph with Entity label\n", + "graph.add_graph_documents(graph_documents, baseEntityLabel=True)" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "2c297245", + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0),\n", - " cypher_prompt=CYPHER_GENERATION_PROMPT,\n", - " graph=graph,\n", - " verbose=True,\n", - " model_name=\"gpt-3.5-turbo\",\n", - " allow_dangerous_requests=True,\n", - ")" + "Here's how the graph would look like:\n", + "\n", + "![memgraph-kg-3](../../../static/img/memgraph_kg_3.png)\n", + "\n", + "There is also an option to include the source of the information that's obtained in the graph. To do that, set `include_source` to `True` and then the source document is stored and it is linked to the nodes in the graph using the `MENTIONS` relationship." ] }, { "cell_type": "code", - "execution_count": null, - "id": "7efb11a0", + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ - "response = chain.run(\"Is Baldur's Gate 3 available on PS5?\")\n", - "print(response)" - ] - }, - { - "cell_type": "markdown", - "id": "289db07f", - "metadata": {}, - "source": [ - "```\n", - "> Entering new GraphCypherQAChain chain...\n", - "Generated Cypher:\n", - "MATCH (g:Game {name: 'Baldur\\'s Gate 3'})-[:AVAILABLE_ON]->(p:Platform {name: 'PlayStation 5'})\n", - "RETURN g.name, p.name\n", - "Full Context:\n", - "[{'g.name': \"Baldur's Gate 3\", 'p.name': 'PlayStation 5'}]\n", + "# Drop graph\n", + "graph.query(\"STORAGE MODE IN_MEMORY_ANALYTICAL\")\n", + "graph.query(\"DROP GRAPH\")\n", + "graph.query(\"STORAGE MODE IN_MEMORY_TRANSACTIONAL\")\n", "\n", - "> Finished chain.\n", - "Yes, Baldur's Gate 3 is available on PlayStation 5.\n", - "```" + "# Store to Memgraph with source included\n", + "graph.add_graph_documents(graph_documents, include_source=True)" ] }, { "cell_type": "markdown", - "id": "84b5f6af", "metadata": {}, "source": [ - "Now, with the revised initial Cypher prompt that includes guidance on platform naming, we are obtaining accurate and relevant results that align more closely with user queries. " + "The constructed graph would look like this:\n", + "\n", + "![memgraph-kg-4](../../../static/img/memgraph_kg_4.png)\n", + "\n", + "Notice how the content of the source is stored and `id` property is generated since the document didn't have any `id`.\n", + "You can combine having both `__Entity__` label and document source. Still, be aware that both take up memory, especially source included due to long strings for content.\n", + "\n", + "In the end, you can query the knowledge graph, as explained in the section before:" ] }, { - "cell_type": "markdown", - "id": "a21108ad", - "metadata": {}, - "source": [ - "This approach allows for further improvement of your QA chain. You can effortlessly integrate extra prompt refinement data into your chain, thereby enhancing the overall user experience of your app." + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MATCH (:Person {id: \"Charles Robert Darwin\"})-[:COLLABORATION]->(collaborator)\n", + "RETURN collaborator;\n", + "Alfred Russel Wallace\n" + ] + } + ], + "source": [ + "chain = MemgraphQAChain.from_llm(\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " model_name=\"gpt-4-turbo\",\n", + " allow_dangerous_requests=True,\n", + ")\n", + "print(chain.invoke(\"Who Charles Robert Darwin collaborated with?\")[\"result\"])" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "langchain", "language": "python", "name": "python3" }, @@ -714,9 +801,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.9.19" } }, "nbformat": 4, - "nbformat_minor": 5 + "nbformat_minor": 2 } diff --git a/docs/static/img/memgraph_kg.png b/docs/static/img/memgraph_kg.png new file mode 100644 index 0000000000000000000000000000000000000000..3f518a18710ea8d6475f9afb8918def31aea721d GIT binary patch literal 119961 zcmeFZc|6o@`#xSGNi`{cOu}6ZytFlSHez+RwXt&& zbC+a0`i2;I4ZRIxV?Fwcv$Z6frt$+;S^H0V^rnc&KM(!KNB{RwH7C<& zvi7#%qRvu(_s#Ev|M}tX10`V4v;U(l2n~JoE@)|~(-N@1dQIwdHl62>W5;BU-Me$^ ziTm-TQPQ}JYADjRaQ%C%#J6vgqv&qE3lX4x^5Fb=k~Ffp6SwZ1XO?<${sM{IryZ{I zax&kyk9|?3PE%Tqzx*le_PMTRZwyOi-DvCO!OO8v-DbrT+h^J&-F}Lq%TE1@dMwtP z&pk*+#VYgs*l{A_f4unoNoH2DSUdI9|M=_&39)|_*+0Mi`}iANtgKmUb^Xr&aVo-x zM7PoZc?H7T7ig)d)ORMV#s0^K$CFq8&s{;s_?;#vBjem#6O8}w51&8paQnYc0*;Y+ z1@8EQ&rXcWe}5<=GbjFEPtPioR7*ruds^B{nd84dWM$pFNVxm|XoCkv$B!GmVyQ}} z`R@;@sCLi(kCyzL`}}!sEu}&C|7d11GH=phG0d<2y!+%EjxHq_>VteR zLxg+?)5pWN%#vck^n7eE9hY9U?uATb!lcXE__zA@j%3;HJ{@~hw3`b90chk35CiOE zYpFXR_>bH>CqgvU5Uk`j;;2xLX%p|3K3ESuze?w}*pDH4)9#`**8%dy!q)C1WuOKD+a2ecxUB^@NwpW)tQ= zr-mrX2At8d!a5oe&{C2vNbD;qAO1o$GNvTys)-3c2bjbR1W)-j<#;idsRWUo&$QXXD-U8TidwB$nrf z(%cvZd{YG+>Xo~m`!J^S#8z-7FP!B1M-#Dr;2S6SdNxk5|pR?k8>A~(|H>J4mrj%@Wl{{> z*jg2LPH2xTH0=67Js&L0qFUED!mrw1t2zEF(_r69Y-jvs)TU6|Z;VC@>H^(kA)$Yx zCTC~A!2u(Um!B+D^WOys!AY>k2`$ak2HpA zbFn~u$S{~P-N(Dn;!zdX*!_4ZAr$Xqx`3T=x7+V_-#8@c&`u#iw z&@A?cVD#VZp@^(LfQ$VKlkIATRqHx9FZ75~p42cf#i!VKELZYPG;Q`|R;xPAw%z#3 z>o8s;ae2gjDj0E7oB;i5-UECbHPUh6?`A0E^lN1CmAD9>OSY`_KP88%a9fTo)?Dq# z>K~7h8{8QCD7GKGIe^gkWXaz^t2PhXY1^^m$iOvvbYi@w7art zEF^5?eLTF%8=oF)UnQDdW;Q&(J`lOzLl{q7cV%QsSuZA1|CQS2WQbVy=M=hSDJ7p2 zT1*v5#hj${a$B#;UVR(8qbu}lXCozMF{?nO92$bBIkO&o7`$}U+r+ebNw$al6DcK) zfBXYfe<1T(M;O?gJDZdDGi3P&)7z`rBffQ6B~w0fi^hHt?cOU+gSW3b{oNfYpgZVB zTL|Y!8a-XPE-y53XcC&HnPj*$;C6N2zJ%hDBN4IoWry{8x{T_*X;^(8XLhc>wr{XE z0=sN!o_$L^?G~r4+7n!Y=gK|w-i$B;>-szL$kFkBckgVCyLHrtLxnXU%0;YHV%j9g znD~tEFo-^Tdcg0sv(^P~+|zqWN~w~WU92q?)vvB&8{s-=8r74bn%FgU;T&s66|uhe zR_`9x8P$h^XT^;btgnAjidxx9am9+22ysa6jljA;T}NJUIUHT}iE>p zDm-M7>fFp-@)VKnY=w`|kUhGIjs{|4f7>O$&xGM>@ujBJajGlSXESv(Lwf(Z9P(RQ zSv}D)QWh@!+bZ*1Djvtpk=cQsgFjBXV#wOy}5t-ej% zG=^`!QVKGQ^IR!Y9@6nL3?xib&7|kg9sDGu2!X*?m9@4eT6Kx8dPgos${TJ;0!^@! zIi;2hqfUkkeQ9nBW7(<;eS-L=ZBH}Fz?qi#k7jK#@6FmjzDKDj^P5+rq+NDP1@nukKRq~|u5r2M7hM79cs?ULC0?b3%{`pHs~8p^AKzYtoK6(PNh zJMU&;N;FriM;mUvJegLpS|z?U*O|I3K`clZ%gZt{G6QFs-`_ZQ6mzJe1+CS0TkU+fmJ#KL;Cy243_$IyxxK8q0{@m=u#4-4u zlAiw*-o+uc{>Fy6fCuB10|LP`%wf5xKON?aYnGEM)?F>Y-KdefMLOtVJ@nb;^E!!^ zwUq}#MRfYZc}}6>-y=5?%nKd6>AOe0mpejioct~|MC^v-`ga;kk5RCio1%42xyizy zcfE&{b?^&I{;QviOjcCb$4cE2no;=C)i%$YIh7kfF<$A=9dPhE&9oGDtB9v{rlQa8 zXe?Ez!21Idb$l*p|8(=&jj-lXV z5_H^z276UgeXxZrY?s0doFcW>QuwH*F?3@&7pKvE(t4?+r}o?DJ6vYD6EQ3*!}i+| zO9`=bTS4()Z1Ey>xZWGH%Oow6?QJ1_xxp8EPY$k5gj8npKV9u9d)#07raN6(NkiYm zRKYH%_$W^Kse{B)EcS(*&^vuJuggwKZ+%fs6GnR#l+Gz~W+jeQ%%8F>a5>xd;+tu| z?9~^wt$m`GZ7VwI@-MYmU)cJC-|YVGK%-P7Pxao$QN(W67%v{S#M6M?Lx3<9%9UO5g5 z+}VN_QKmX?rX5N;r&yF!Q5zMLZK_hZr$HA6Y=5V#T9Qpx-O_jLN5i7#<^_5o8_gm6 z>iro1m!tV=Z_q^(owiq*&V&i(dr*Qu9)7Wo(tp*?a=6o22>Ma@k0DJji@;-krfd$Y zC@k%S;fO=Tg;*7e-1|53nC$YO9a0ojxZYR+;YOGa|K~%KKrwk~>M>#L-6t7?FJ^Df ztNMzeb|w+^-uP{X_hSW3>tB4)ZUI}gEIhOE7w~6W7q;trICO56RY`93JjUhDeR-VG zhp0TqntO)C4z<-cX@~O6df(2jecpLIK1UCp9-*#@v`98;AbCZIlerI$AD_7WhKZ0~ zB7iX>0-=Ipf6hx;9`4B=9Y`!xNfu-`*DtwS< zc6nE%Wp^@ZT3b9?|6{>U62;1$i^4kCaOHrTV*s7bXBD(ry)06@LUd8XaPs>b%bm3e zxf6_ZE7wkoueH@2tP-bmXQ-;Khh7jO#D2pG5c^*-ioQ6SNL(&{28X--^D)*r*H^lc z?J<_&$t03F&rd+CGfx7eskt)A~h83c*y zEb2Ig!pk%Wmq_{oAmf)nx1#}L_>ue$@*97fNNTBl`wC||cR$`{VdRU_!#;i26b_>v zlxLkm2N+_%HUUg8in{ul!_SqQ*Q)1p%7LC3Rxw@-RbZj8ev1@6KUSpLSt}o!((xPM z@P>j`V?IYhxXj?GmS{e9ZvehwGffL4WjaGv`|SD5ysKGfDwnLf#g0Py(6jxzg6Ej! z~LE(W{%@j}L?voVQS`p11<;?2vbQrRUSEXHs=0y44M)OhL*UXjS%AqEw zZT-k^{*6=!UzpdZTk`d!Kb%SkukNmN1O#Y#02KafQaz%6T~EwYxmG(lBzv-ogJQ14 z2TE_>C&@B%3e`H_f>H;joFGx=ZVx6Bj@)@=M0E67Gxzlwj^JK*1Aq!rGS>In6~BNB zsd-YxymYvQrXoNrzh~e%$`FqT6RC%!O%gjIU^`T}C&kC)7XQtYXUmgkkugjBDRL>& zzTJ=3Z?2xspfW3S+=qB5TgKnNz^qjfR=IY&95)k-$z5v`U%lVSE)1uSv{eR=(?X){ zYNNnyeMX*9Qq0P;2tjDOfSTd(6GaUXx&$0aWsz62Hc^MEUg}rX^p3dr2zyq9DOV%( z_;t8^mDKh@<(KN6dRW&x1?G<@&)OW;eO_$0b2MNdFI)JU*#(VO0kf9q!s$qzbQE?> z+rVPTl>CO}4V+|1$l37D3k1FGuF6x~Xw`!fu zV+&nn3JhX9-b%Cbw&P!ANmn0oX`Vym$9ZoL+9s(tmz*xr=Dz4Y?l=FMJ>)LC{M)-a zHhFTp!{~#^?NK-MCdh}V&$^rED>l279;4`0dpk~Tq8X*~Q*8hoz4O6VprBv2?6g!$7YxbfW>c1En*G2i}{V3f&+qeatDFiP_9?LvijOV5?y$ zA5X5OKHIV9$f_HT?%(;}nlrTXElvF)eA1ua9M#Jli~8%qvApDGzfPoNbhz+=$Ll8)h)$bi^~B6?yefAFfUwop!Yqx>;C^eAW@_U!zhH!!-_;Q{)N^%vwk{38J1wiW~Y1V)H^?xOmK~A`o|o z2qEAtNlJ$1RB^+NVd1LfFue6s+0To|jr^7Q1PUFm*#_Ed5;1J;VcKUCSBm=el|#gK z=TeIgwzO~+rL(V%`uUv8_?X^e*bIZq_ZKv( zwUZ1mo_A{04?!wvHK3!N>20@X9v7_Es0>{bf|K_78kagOVFC2+#ZC!Uky7XLSTIVs zI}8DA(5-Eq9l=7|sIb~RVAhuKzFK`b>JNVODR~lqHP79lqnL}}1R+;fbd~_=>d%+% zZx18*@mQ@2SuAswaG?U$=Zk84Z`X(U)QuF)h@zjzjW$0Z!mh!|NiR1pWpke* zOEu=ZFGf53+NdTwuRd&!OtX5s2$=@p39aPT!tpWBF-*cH(s!RT@nxQV-;Q=M`aQf? z76pG!=cm8asEcTAjv@7Jm0lexGCd@h0@VQSq(3#8Jnw)6tKFIJo2>V_V+;zew4?cs zx;rVAym0AIMXdbAHsMiCuRT~Dr76)ZJ8WoPYiq`;pC~BqJ5j4+S9XOmFVa3Z5Y|n+`1ZEGygbo_eqePf${NhvTZd_{G0@MDI9wz@CyF&VWcgC!2 z%v8bdY#!^q%`VS{FBvgs%yatLXUg7=1?A1%BX%@3(j(5_dX8Me%$TlMr6ud5n6uZ1 z_7bQc<&=!UJ$OZ`%eG>O{R`0Z_xc&OEMfi8y&Ws^q1%sqw+N+Pvn(JOBzi`}p;UB( zlPa@Pi0AafFV7)XEHicWN20gC3iX;z`FwiBK9ASDlEKfwAM($)K@b$892G))VVptH z&F$=NLu{USxHpSY^EKI7mBKHDvxOmEi5VY{BWu#O#)D89Px{O;RMS>ey)9VHiJkZD z7-DOjXXc6*sIxXA-n0J*61x*dC;Q&yR^+Sf2f9dm|9I*ja*R`Zn$eeMbajnhUD(*@ zOjVc-Z1~zv{h%Q)SaK68@4ZZ?q7e?aoS6Go`y&lf_3~WiyRO(4cFJE@w>TR}V%vHm zuOvNK#oLoYyW{%Bg@Qq+^o)6aG}lniNa{|_Z=lq12UL^(b&P}=?@YoFNQYgjGTx@c zszt3(40rV6x3t(@7Q4h-WB3J;YG?R!p2^UYEh4LZc0o`}tiqyJ({}9QoV)IM*jM-- z;?W+ec{s@`GPLoxu(>z%sFUoKh%&4(zQtTB-1t)5fH9e!KfKck*7jy?`3*uZp(EbVN7Qyj}y2{+f=X*B__JN^PS0yl*vKnpz1*BjM~9ZjjH#Q%cD=j zl^5#ktqUdLgGE>eUWW6M7ft9Lv!0E1ZQJC2JLzG_&@NHD9-ff-L`KAJ(#fM@vHDJ! z4f}5f>7OV}CiB!Ck;iBN+_k(*ZX!<<==-xbN`5FQ=}ftK?9g(KLU<$$d)hiKkPkkz z|BFNV9w_5I$5PjRu!pwLU3&AF?HVE%LQgG7DiqA*TNoC!<9sbS?0()?`xbF}#B*KG z<)Z6wiw4?TCa6ZOtY?guj9S|1hC#b0REJy?7h2t-yQIhUzLUPM-rMBtH*h)_{A6EA zsd~?Kq9!sj`-RoB$f-iH#)xRS6xQt-F77YKq6RY zK&C2QTP(8ty2Aw!#BC?~cwg7pWZ$ZACJv!3x zp%Y;QY2NpnQ&U6lnju`D*y!`N7D3N1p<^6d%2EqiBsGpqXoM}(?`RvI0t7vw0* zK-%Y^95kl4wE?K&hXMNlqMn0oDTuqaM+8<|Il#7rVD_w7%2%o~UY(9INI>57YWTza z*CiuK*0(q^EWjQT;|MA~A{0HG@zNt3>alvon$D>ln~IH}oR3>v=)M{3$L%_Hdh)@! znSFL9wo*LwQ{A5WM+2O93!yHVFiV8F{#yS{r_;u-a8(t~?7~NmJ>J;SsFf=GiUcqB zY0lDu*#uA8;}fy=s5px5gpVX$_R^S;Ha@$_0y&ykK$XC-mQ@80cW z(bAM#DJ4+37DajGh%lMx-^XLy>x#&5#>t^`@7#9hGiH-@xNOc1LlVYjcjAFS{ez#W zp;BTnMA8FEy4b4;*`!`{BgCVHLRG9p6kz$-C4{q41M-q*#AtA8;5Rw8bKTB13Q zN$#kE(UvnDDRr!ODR)`cS<*1g;5(m9>8PhUoa&}$LRs0cpYLFQD-ovnnJ!uLOm;S9 zS#WZBYcqp1lBHi$oi?j?m@yf>-pG>3Q$Cj>;5hlcQiP}oq!vB^vFvd8-L>&jv#GVQ zUBSsMP$ssXsMRcd>R1doV&{Zz<5#~zy?(Ld9!zT%mD=FJRQ!lNT?s&IcS+S&cE0RJ zenFcUXZmx7)R>7Vnf!23cyES`$4Vt4@ zl!bks2@=&dOw_M?nh)ES*iwcnT|5HVGO<*1A1Fe<6upW0OnlT7bK^vLyH;7{+UR2R z(yyM(#^<}kij@sPUnwQLeLDLfWI#F2Ad8y8b5m?Fyeyl+n|{;R(uylddVu`w&bjja zFo=RhN+MAMHgjz0hYnXEbtX-et%iZOOVF4vqWqOXRuU8Wmw_>A5&TjCCVA;$SDI63 z;S{X_q$+vMK0jNmk=d$@mGZF5d*PTB=M8v!mt1wL-;)A7f$>XqhQ^}G1#>32pf-GrgQby{5B5zaVH#0}A8 zBR}5}3iLO`3@2(;zBu*8W-uU53Z%HK_Bm_1WQ{ON7h92iztLQ5%AVV&ZJkDc!>9g& z#xG$eshNbrnXlp*Gu5O~%C?a!ddAd|Q3_+~BbR9{--wF-=A&eqNyJL_9w;1famR_W zuZC^G^V6QD(*T64q&og7T;&FB+DDz((aU#q;BI=`8q7j7iI&@Omi57^fEO}G|CuEJ zV>Cx<8b+w8U(b1%X-aP2lAv9Q{Mq(aD?C=9sPj`3=@=Dj?suYf{9-}kzKvsif1^}% zdMmv_&jyq6Rj$bWU}d5(vLq zVq>|ngMB<*V5?1EY|c*7iB*A<{;emv&yLtAv*+rPgov+{77m)lUT~ooUGWomHX>V( z-!A0`$yRyh$=iq;fciJL2hO_?hNJCmfK9G4zf^?yOc^y|hQL2G@<=D%eq3$2W#R6q zR<$)$R!LIswweG@r2>XE&r@!+SMAOUIR3N-=PjhcT$93WsL4fmVprmkeIq-Ry!C;9 z(uTCqoqzwuderP4Vno5HnXwq5d>5Xfkesf8nTFiLi-Nb*P8BNok^N%7{5F@jSUV<` z*>^ptXKdznyrj825EGia9 zGJ~qL`YJ$QMh4d$CuIr?k=!1bG<%#LtVk)b-!0&=uqdacGxAZ$Q7Cl1EWL)_*uEVxb>Y7HcCM&@h;oKJAZ7Y4#POJQOA_SBT zrt4#15;d!^(qaYx5gf!QuUbonmJjuOyI%pB>_g-GE{Q=TH7D7+26GyviZ*Rdgk6x)e|57TGQ^cT>xMx zhv1j7$4K3HeFjIR@cik0vz=(qF7|eVNMmVy+D>_aL=IE`r1#;(nWzS&3>54mP5`D1{yoUva>nG^azX;thc_P#7>b$4big}TR^%+1=h*sff@!ym}* zY@L$L7XJ26?nTtBxqBoKZ{)l)5tsqQl2hxc>L>8_F?|LmXeig1syBTsxSA2AUwtK* z3A=g~yEI&4AJiM<2GYRQX%MT9;(j(eAVC&I%1JKb=8!0g7TYa5LgK08#-Pk6g{UL4;Sx;t9F4GbV#O$N;&!TDMR8K%EV3rx98nZF9cUDz_ z$??u^S5(ypb#2Qu9P`wPqj4jXv;{Iqw)wmwA(y@*zN!)z4WLm4Aa93dvBp(M?mqk` zn_g-*%ibI&Dt$fN;78^ksFSH!!%enAYSxZzl7>)#u1d#W1o-~YbdRrao!?K)&2{UO zg=@!rBzZx7y4YD9A}DE=(=}3yQ|Nt?k)pP7FIm$z5}YWL4YZ!F28?su#(qEad#|gJ01nN0zv3$$WwvSx zwnvX5BS>Og-!>t9`3vd1h-~BggjKS!SmezS?iDn9V1D*_nV>22Q2E z)nqLUje|l_zcQ!UbO`+=W+L^=dQaMf3u)uoZL2tpHkrI;dZp7lX_&J$B$xA>dFBDc zxC_irH-0Yt4n9!Zc5Fj}|LVuj)X)i^XpRG$)lZHU79f=*cOcufEt|Kb!a?<*_Ms>( z9-t$|P}I&M$XKsav>_^@d?JAH5mMi_piNG0`5&hZJHxkqg%ILw@3LOqs)keoKu7EJ zSV2~*m+iV?6r&gQAa_gCV}*3mgtFXwBBh=3jA`hD?ULGW#T#KgzjX<4mYUndfJ!F| z3nc`u4XW1({(Qb@P?GA6R4L7_SYlkH<4Mu9RQN$~>g~THtDJz8|@rd@d=qaf7a&Ed3bsli=iZ4&vMD$(EcU$N+NlWq4 zTDc#~CxsH3Oy6vXRTU~*1}GfoJY<>i(JA*$kT5Z=!T3ZViwcAV0qNR1Y4H6c`FVON zFL(G#*=!en3|ln<_anuJ9bMYl5L}wnr!+<$y7WcaalokGgCJyAoTyXKNtcD5E7?*G z6#~v{%!4ET&FLj$En4B-&FqJf`YiYd>Y-(FdgU&Qk&x|R^Bbj4?zIBhqy-|N!Blsp zMd`=r`{1Sv+r$<>LDBpo@R)qD?$6;)AG9qQ-ALYrvIe4EEAGTpd*tU~;Odx9+s5zs z9%6mFK{>AR1gV-RWeFxs8=aXp;JOeSrYIU;*LdI)ybiZjh|j4$*oE9z>5zj4SX+3S z%f(iXnh?O)=b~g$j3~w<>%L#)DJD?H&JS55l|fkzQ~BIG^J&6 zCv)1wqV2XNQT{F^BsykvF^-GLi?w1;d}17AlQ@XQ<}P}WTr@lhCysno0~~*`uAs>! zsD{DB?FRAbz3Lxp$&}vLC{rTkF3z}xI!-lAlV1YX7~A?wkd_Fm+A#*kyZaCOhQvYQ zHQ$9yH)d^d9}huK^UuHKZ@asgU7}w;6(X*UcSU%kc*zjFghI*h#;LhmnrRu?*+EHEfngl!JrlT_2y=M5y%e^yww!f%)-`EE@_&%~~ z*UE9UDV!riuwR#7?)8ue+RCx!=78ncONT#3y0{4eC-%Grjy_OG%R7SY2!ZrczwVgu zJ(%^~NVqGFYf|mHprQLvz{jrdrNh#9^NmCSE>rN3KZxom9w8GrGwk%>87rgeKLXgW zKe3)>PIU62bsr1TKLLvK6G)#Ke+;fo3?zzq>oVYHx-Dmxn(B*USDAo!X&$g3KV-vZ z5=NkH8Z&rGC>n+AOdULV|<&(X;2wZDn=&8I$=1jUY zi1oA_$Th-+EorXJ)v+8n=tqgL2G}-!An(lKE*ZI*h;bgT@vASRZfi(HKoXmjuE>xR zgxnGvRSI#Cg()cE19gon2s=%)zI#(F-4HYBvz2KuJ^e5df?A>A-RlP0EAW|&n6U&05falgKPa`X z0ugT>nA(~S-!mZS1<=Nq-cg&ZD#6YiTElmHt-DiUx-raNGbzsP;j^EH553{#i|_2y zJPYZTDK1r23oyMcD@`HofB;?c!(&tv-Fw9VYjU%cGhwDsvy!X#07+~= z=c+}7xn$548~Jj6ca#)=E8Dt-)U4o zMGLXgD&Pj&eblR;9_&K8M=-NwIT?(uXhoT4J5l&y2K~YaeY!lX4pQC^F;@fF73`-6 z*ftR|t3al1I?+i+#O{uGz*{V`{rtq)9~8pCIC@?(r|xEs8rsn6~5%0qv)7GKe!Bga@9)l3btrn?Y|E>vi7&;z`eE)t$$P z!6<`Z7AYk6Tk<8d`Hfb@X@9_Ld-BUrR*g(f_iX|0&M}qU)}A&8cA)J2e&2nKWlG;2 zS?wS>I3Fo?LG|8;UKV`Vyw-Q^|{G$L3ITQZ;QCjXPMqId?*AFgA{{`^Kx3WmA&~j zIj((L=F_HwUI8A%sg+fxC{}B&B#mZT)+R(PPb_18WGhTl`cou#%li_P&wbqtP|nrQ znr=10J!aa4bw;j8uK+SJ+mt-6r?$GvRFV?2XeJ3;l+*uB^U+3^G~cRtEvQEDNm6|# z|K2f0uSh3*2)V;6u}UqJrGTHDk@RPv6aJFe4cPGd?~0kwB*9F0X;FnyP9a1oObsxX064( zipSyQvORqsZ7XfwVFqaapa6iU8Dyu)YI2~l>84vTy%?%jUFQM`rNo*{RjJZQwcQ02 zE``)+^v1$@*}~LHpZk@*z<`A@s^+^da^Uq=nvqe1_pE_PkrVYkvYBMv`&PLh(WP4hEHZ!Zx$;7Rx{2Y4R3Yep-0ss(s9go~K-|AmG zQ!%h0o3)t8-DWLm*aD}T$!OeKoS2`~Z5Jg(NNzGRvf(HY{Dl1HeF@tdXb zI#i!O)x4yXiY9&0Nsg3~wh-EsHt^m9%-9dl9r;kS<~ZAn(rATTTwm#q+T3Mb(?m^(0d-M?{1#R60IGa0hhA1KlzVkkMO{83xrpX()KV zf$x4Lslge%t%OuSkvuOwYIWhb4%c31sj1ViG)Vk`eZ_WVVk@mBavY@t!FlMeN!%fZtlZ?{t$gEV9 zvFU8|tia6GI5h3@ZVjnaSYRCAcd?-hsIw+#YZ0(25$R<>2DNAigd|sW7Ss261Cnqi z*|K;*QL1DLNUYI`Zk=*;(~<|q^|PAPKKDw(Rm85d@G$cLiu*}bjAM(71%cLBR!mZc zC8s(aExbeLO(1 zn~a{xq;LFMCJn?bOoYeOj^?s3`DJU9#t`ndH)^c~MioUibGAOKS+lxTKRp~}io;1> zHDKIi(dw^S>|!Et=i3aC}R!cy>gR zh{;XoABO#NQMHAspXRa<{IH(rB4*flz>)UBg*ww&H(e8ttfx$}zKc$4fljy9M~`Z(S{qpJVj)^VZgG8Q39TPF}e-EQA}y9-)OVy;p5%*~bZVE3GJY46Wo|C@L9|wp zAlO+f63wvMEUMn!hw!=K7xJgFbsJ^5`Il@kBb)~*bWZ+9(xg{k>5Dr54enl!tec-+2nU9>og-aakGi4 zgS97drW}CGMMlFx>6EdUQ;}0ta*Ja4&%FTbiZuHzS1zFJj0X~+(L#;P3;`kiL?s3F_I9mJ$ z`fRV@TC+O3rLGxpZsL@?8&W^=P}7A&7RgPh z-i-(0{5l-NZGmVyfB|iGbAr-Wgi^EMg4C?&9uRC*A>tbp-l(qRK;{_0KqTx%<2>pE zCtUWo`i0BXiQiCLK=00%PK7jk&I>S8*+GdGliW1;^~-f1yUO*3^Rkh@wY;NP{sDNs zoAo{%dG+dv%UzdaRC!r$>HC{uhS`|BRz1pV~ zLPI5W5oy5+hJZ2j9ph8fh}B@n_z>h9*z*>WHsZ#sT5yvuZD6%jtA;?(e$;#$S<4mM z43oYZi_E>I=9sg65U)H0xYZb@ND^Dz?4ZOe zIUEGkD!It{F!^guMD3Fp_rzD3MWsI8;=n>^&6!hb%uOzVNddfYB`r2i+|6!3Oq-Uf zuXyBH^Q5;EQbcH^8u*T;8=rnN;bvse6JPk88swCp5M0ES1rR$?kFj)dQJ;2Zl#m1~i3q6m)(J(n^;_Xyn?vS1+#z z;2Um40JsQ0lvDjSkb*U`w&`R?I#&F8uk^^fej<<=eob=Y2RlSl>3_nT9=DLnFxdRG z2uzG(VBt%5*d^JG1XnHkC^Qdz5{UXkV8Q8zoR+asiPSePS=#)6p`DLRr#DFs7%IjTWLJyZ8M77^#t zr!^lay=N42(^T;%yef^}tU{nflY)OSBFgvxMeoXFgofBHwCBSWM&Pu@Y}9)N(&@V! z?e>*aMYKCbZ(X}jEhV2@0+^yUr@@K3!1l+qBzzghXDUL(1ksamJ6!mZrt{ydrf82_ z?-e>D@ONtHCrqZ)eOWk}8*>-)xnJCIqKa&~_S<0vI%TaG?D`?>ck}=PG_RSR^A_y6 zI{3f>-K&WQz__dgS-c+;TMat&_W)+itEvX@RV7W1*|-@{nOpdjK~=wji^$khSyvq| z1ldALhCx;v6C&?BErwkF82oS_JBz`@`ySxF*rTgFIy8hzjJ(u~O=aUTR7H+$-*z1# zxj_nTSQ+X;3NR>kR{^od&>xhZ!4X=<(QbPxvy%>XJWvVk; z)Y-H`=)Wc(Y6xbGLiR9bUO@t1GcGyrtAmj5_zM;54Xw>21SVCvwS;WP_?pWZ{t!70 zw)<~cZ_@63KKy>0jgPC$2H|9UWs+=dp|R0Aj%LDgQ~s^z2w)(URYJ!Qd5VtS)+=f- zWOc)X*?|MV(DorV`b+I}tN8?Mo;??aV#sfF%=H9#A|J4kLT|`iAjv1;+lUAFq7y_q)w0Y z0@bC@zZcvt3#qfnhU#)r$k-ULlG5N8q(ai6D-6=SR%X8Z0}Ncy)?It9^QWp+wdW z2vVQ-kforDb2Yc_tcM|;(=oHmYqQH`VCh9S%fVV;W#iMh^F|9ApupLD1@pQ@$!OyD zfks6n*#TklvoZzPa-Xluvg|(iseZYwuHGT^l}Z&@t18TFmPiO5M~xtNe(pSi0X8Xm zmQV;r(7itN3IXg_bT{(M1Exbo+8F? z1_(8J`ES7mtMxbI-X?@XmQGCQ3|=ZgRv~sq*ubbzQXL+W@X{2^jk!^wbtaEl+;xd) zxw-8zp$t75l`>^u!O)1@^`p7<=O{fIu6~MS^v1ex8nXx{A_A-M=Rp1mb_ts1Q9NR6 z{(dCrBu{{=MDyRHe$V%RTjL1j|Jxe>&Xl77@^9SuXQ2JJHU4dle{&U`ERcL z7ghdUEdHAv{>={mW`}>X!@pHFp?v)R8V}1O={Ti?0BrL1(wJBOyW^^UXxD~4LIC#uy4iDHiw%)T}THK*{3{{#^TRJ zFHce^W+JQLLx2zL&Z$_5DMtI?A@Pwmevz>L<#+iD)UJ2XR*Ko|f_HVusOCzE)*E|) zEFTGZ0iA)ZJ{{t`!Coa9Y79&hG0KND zWWbMkwDV3Zde1CIvSQw0TuPEOZL5DrhM~j0E^XkKHiP8B`exT+N%}m0qi~sOdxB&) z37u}(*x>&TQ0>on^3^>s`>DqNf z9DKqP(3(>?b_Mm;YEtNLYyok9hV#Hh6BUw~3ASY-BZ78>5L?Qv>x$+x2`bp#W{4}+ zK3wZT>7c<@iYs7qMjpxC+AD*(Q^E+VEU*EP8&|&AhIrhPxFv^e> z67_@gKSl|ag$7s(;ks4&BvPjFocqj2^DdyQOb7sVwbH0a`{xY92!A%ed#KQGhqkR9 z9C+f>9!?$V_2l^;9?VDT*xdu$`SJXRB_2#kzil?K>;$H&D0#}6*NjcKh!Jh z;epT~x1{5~2-ZPv?yW5%${|DaJhanFXKKek*i&fc0R4Y<`^n&;`KrWt>Wx03gLDom zvSi^ju=2m=#4uyTvLlt^-1hn6P86NoFdLAnw0H1@NoCM5-3$0=z-oF4<6^B#N2ek4A_DS5B=C6C!N&vW zYL&q1mnRIuc3F$=c4L*I1tX*frn9H-J|~8LSU;2PXqpqvJPLi2Z z)p+T2>3ARw@YpauJ=nv+BdCo8e=TjNUJ<+5MxCjmgob67R9?ra=jgY;re^;&pONVL zeW;WS>LG_4epy*ue$&`rP2tl!>r-+({9-o^7J8-DUx&7a!yP#m9#Tg#DV~jBw=`Oy zzHv`MwWqraL5T?#sRZMHBKQ;A8z<5~+dxK*CP_xK_q&JGIkHDY4xKN0{q=@QN*^)w zi;s>uf5+tPlRuq3D1&n+Cnx9I4BosL`jZ+l#Rm0S%`M__c?s`bXAj^#pC14A@|8L* zt<}Af#|2M22LE{W5PQZ_8-{$4ILQ#gO!=-X)8uK}PkOCFA?*-zTG}(Isj1U5vG$R` zl&xoMVuD}{!T%l&;M7T7ryj6oIe(Wp4(^jo7no@Bjq6WSq{=_>p6{DrK6UE)-plJ@ zmeVt)O&b(6mpNd1uoI4C24HUr8U1s!DnyrMh(g$T&D)qffHZ5`7;^DdpX;rDXPi!` z^Zf9Y$5#EDdg}1k{?b{m-+h$s4NGP2d$qp4{tPILO+VhTleY#^fHVC5d7wsojY|E3 zWkMkFi|CpcB;+GLJI*#PMFMYEf8AyCWzuC6-}XWF)1Et*qW6{N+&QK)b)Fz-L=wG` zQBesQ0g~uV>%Oep-2uEJ2jx#JJLm31zrKCZt0xRD@kBrIq0$(>Dl$liaZ>2UIbCQg zC9rfxvc%Qy?;#_jMg{ul!UvDD=g6KB-M#;U_{udw69%P{Z8y=#yZSyM#cYK%k%r5U zGgMrb;AOnfAR!|rx_kRYsV|w^gtm(G6{Q4*2(EaVXS%VRs4Cd?`}%uaDplIrvZi-= zs7^BqT3uePKCF`Ye`I|JG?xGSKTnU9^+ciUy?17mnN1~|Y%(*l=Yv9Ik5nW@gY1lq zkjh?VBzu-o2vOAkx>29L|KB-Ir_VWkZuk8j*LYp8>vi$j>|b8Q5@4UQ$zh9m9KM;d zVIt7_MVI)2Klj9F+u>PZD*h^cM+GHs02zPsa!9aK+9q`UsE@wz>J;bQUo<@x9ErzZ z1N}d|40$Q_nY+_t=Kjk^EfZy;S|(l>E0&@Y9_77m&G8bRTR(sPyof^|+i@A+Vh8JM zd*)#8KJ(lOEklLsiSx(lpxDmYp@^vkPQGRGEP3}@p0C28uI&A9JSt|-`7BjaE4gBY zz0Equj>b$`L3HLiHDOy9*G}He_}JSWgEO3&!usx423PlJpwjDE*(2XD8L3xZeCBvl z{4B|UP-p*thW)mHt8h7aLX;>$E*H}fFIw|H=2U;7^baXMz6%S@72-};Z7oh5*tf?Q zQKI%;?^mygiV_!~zcOaAP=1wRIWn2*zaT;$+!;E()~FawaV+slT+rv-^qEEi#*-fl z{@GGn3fR(&t5V`bXen%Y`AMT1?`QWhd?;or(=&z7jJ{93j?u~l?O0?d+BicE!&^w4 z)1!nm#$E`X|8gSDPGWmhRD`oTa3SI34MEkEH82ouDcrg{u7!6of9`hZH^OsFSI5L= zZ>Tn0A?&z!X53bQ`GR2K&Gw42d@mOZNZ)<(++a%~@kJ>=GrS&djZoBZ;Ua97O1egPQ{b>Fj)-9P~q ztkTf`yh7VqgNXR%dX1F+K!oF)lNSrEo_DSkme6Ri9-NTV?4eshE&8zquf6>|HFK_> zdM?LT{&9DsT0S#y`|^%u^i6Izkh!Y(XakBJzoc#d{wmc5T)2wckbKrho`~iQErKmzb;_{grua5^0YIJHz+5M?|X50B%KzV zr3Zq7)GDZcm44_Imd&{MuH4sn&kG*KLg3t2K#&pgmGKf&UIsnx zrRtfHt5VNw>CT&5y%g=0kfz zDiFUumJwI}eR0+75jdG?wDja`xD;G*a+;d*7n1JQ#!kJE_BPiptnpI0crnF#uVKXnJN}*{l0ZDO&6&pJ|-;t+|tI% zdVx)5DdHL%-^O5p(R7QK$N9f!T~8+zW!Wz}e_V};ix9;38(cD_s=rueeAJF~wFxMw zhW0r!GwyU{#Kh|9SbXlw<+yW&|5(6EUl!hgm)@B>Po<{SNY@_fq-%PXLIiqC`rwKq zzv0{wSaV*5__q*s9aU@4C24Q-F8pY49%IT+I6XZbv+%}y-^O`h+>X8V_v%VXNbn$` z2#s7n@AN!|_fXBv?!Pa}c8&oa)~GxP$ z9bVqaeNifO^WY6qVj6yIEOxrn8_(SGFTN;!_pVFYLR-_x(!Xv_4rPnD_SlA@Oo+7B z(amRH++dKt+OlHtPbAO=&c)L2@hT0R{|iS5NlA|x@HRbs zkLoSBcnE!&v%R#rKX*7)K2#w39TJY?zGQI&^DKJry4T2Sk+N5f$GXL84(E|w5>G$- zcS)m>C1o)sgGFX?MNO`D97;+JdcSITA#ORXc89M_`)~w4-rhMrXNmg!`E$}8lZ4lU zx_tR7L?{a!oqRQe^hKOoryr^QdE!JQJn_e*@??r?gBtqB`e)W7M~>L3h0y)zeV=Lk zA;34o=!9tu5Na;}$&en?;OaP4TO1{1ZBm|cq%zd@7kNTs$?$jEF|qJO{As=U+iKZ| ziIh}S+JWtB-BtCyM<*#U)wv>5Url42Gg4RlmMx+vo7eT{{u9xi^6qd+*c!$oIyK@g z8TcTp{Y5;3SG`yLD?!e5IFx&#ZNE0G>T`3HHl&FxBVlf;VdZ#h z(eB)PJpn#7P5!MDz zQ&yraB5Xne#t$07@CG6{Z?M1I{T2Ptp5sR=N&D%W@2x{x=0-(3ux(cc7l8G?ld$`H>~A0?rGGIw6I?2Xh-f$>VvGZ9)aD4ecrX6vMi0?cHh5 zKaQv09U-aVw#X7KO|l)0BYz*LSMICF!pdqpT<*|Uf#f*G}z7{rcaz*Nrm%Gq-z5e@Y^( znFz|-2flC|Bd0$NEVwq3G!N%T1;aaeHuH3%F29V`x;2yZOgJ?B^|4OtFzaAuDn@W~ zklXVTvZoVVsFtH&9iPeCE5|+(WYJeT?Lce@*~I z{}YZ<683s4gb|(~zjiG8B~5tonz@tAp#v9&J_PYtqg!hAS&9{16y)jBcH@wZcaoHO z_StNtRnEAzoqabam?|3?+_y^cZLO>$#R5;teM;$1v?$k)`859WrBturot&A={!t&i zJzncET|K6jS!-9g7b7BDnZ1VOwt%m7^K%SlUY=7K`{&Ua^(vA)-L^gL zbEmQJcBymU=_h8ds?A*l0}AdJj8Nnb(jGa&d`IF6l}s5}mxCWUWul(2;vBS}3;;OY zgm(b~67iT(#p2kfTOSX2Zt``3|BA-K>Y1fE^$=~%Q5IhDIssarpg9h*ip#wU5Flu| z7xxw6=Kwze>26p z#^&w4@q9!5fRXDFyz8LzzyT!T$n36ti#NfD1^|sCU;kNOa`cVjne^75Z1wu}A(~y0 zWi(eqSU;4`M+6AFK5X<55fJE#w4XTlpFz_E*CAvcRG5k0iE03h`^<-G&qpLQLUI%o z6zd(uyCCdMwCR@yI9jf@Gw-bb-RvwA4JBWBeU;*;XvLiqU_w(%huwQThqWzIZo7{}sb7QR5T^D1MA=xnI@eL}RnaRt4>%MyzKtB(UIF0KRhu(>jQ;R*k z3r#j_(2A@EMlELP75)CA^y^rxf9e(SoYRy|gd{z!w$%LgKzIJH=xq!9?KYay-$QTK ze*U5?!M`Ks#G#SKcRu86Q;?8!u2XAjf?UH9xj^}- z@F!26cmS%W5f~U4?bIL~CHCBR)yk;+a$PU`;Xmf?w_Mm{$-1WDYHn ze?gJZBET!wkEz8e!YbII+!Dc;Bv<_S1ZA9z__w$iYUZO>cOO1v!z!~3uf)EEB$f@} z*qC_e1Wtrd^KjPcV}qistDpOnK_{MD%<(&LnGmOSM%QKQO!?{`MNV* z8t*y)z}9!UnZnC>g{#_+*?*YOXBB!}RBdLWmDsW6R9&eD37BfbZ!mr9znz+oCxx;S zG2s#=#g{wwtHV*9X%YLAO6h6f=+70anuG4XIcLSpC;^4-L`H_*sl>xsF5Qzt)t~Oa zN%G%`5Ig1S3MD%gq~EDA(NFS^i2+L_XNfTiyYmMYG8r|$Y}=RFQ>bQ6-&EDU;zJwhPtUJyNH(O{~eopSI6 zs3h=up|#F;PZFWUvD@F~HN3qm*1wM5E4+XW;+6_PPQuD5)W+gqI<#2~?gX{A5hcDn z^Fc08aQ*i=3MU_>Hav3iBr^gX8$SFIC>R>OZQVH4^AFVY0D+p`&(2sOi^bH~GFBJh zwe-@i^Y-@d2r0$AlZFjtbpxT6R+uYiGnbjp$TB@vz!@KM?rr(D$!tEmm`%&p*`%u{ zJ2YKpS`s}#Sn`(3zac^?{DuO)Qo3|-MHpN*6097d#FIj^8mi%L{DYIcatsTHq78<{ zOr%9PE-V>)-1HdN(m0d2^~zxWX^UhU`&!3acaN_R!<=8!T!A4Ji0Z7q&1HtY9B=(>7T$W<%w`9;7;$#C8Z}LJO zY?=CP-M)ByK-5g(>3Lq$GX4t;eiD}kzVfwb($UlNgE+to5(b%}j`V|w6nX2%&PalM zN9Zlw;2v~B2~9=}0SOHg5fRbDKar{4StfRNWtha5`)tTeXZVR;g^ZVV>D^wAkI$?7 z7Jnu;%{+-;XbDNLeyi;K{&8X;K*)WtF6#FV?faYk?x%fl-Yb}eSj_s$)9Ep-1Ri%OAu2cFa z|BVr|n`S?Y_rUr6$D}HQAF)lGtzw%XKtp@sS(j)x080;3gayK|s!{;%{Gj1v7MU*h z)aH6?YpaO$8xpL>YO&=jHW`^(^)8d!$#k;*7jK_*V1XRXSnhSaXb3;X{~iLziM!m6 zoBUMtZKf9S`winn6W`V|?6VS~)9Zznm`q0!1AXaCnCo$m;K8d7hMeOrA$}4}hr7%v z`Nw}>P&~uf?naJ#snXR98X^O1nxl>cZ%CBZF3!5|zdHPhRfD&;xFpea8?DZ^GUD0Y z3PN=}-{v}#;q2e}1y%DHO}M8uMwt*TVI(hLO?y_#^J`w~$)a z2wb_oatGb&PdPE@frwwmr+;l(S3`~81{Cu>pkejr;z=n%ptJ-A(0GYGhx0Kx{-j6$k*k2S|*xLX#wSNlD4I zM-BgAd5;y~_~m27b(B$hYT1z6_2nA~E*H-Dk7?ZzSBoU0pMjS39u&)_5zjT2V6I(& ztcFK7K@BeL=hv6!Q&Usx_qSG0x{gS?ObP{TIxh>5#6*H#d>e$qf|#OT(3h)jXn2bZ z9WQQp_!o5L{GbCLR#M>~&d!{aYU(?A%>%l7TfiN2F$QnlKh0S{4A;%Wv#YOT5$2AF zcrO|58iLp90E78fq85r}Ga%2@<0<&%C4;QL>K$>HlkrfNP=l#nyorf;*ePl#{ORUt zCL$*4ca&+F-A(Vr>!~WRE1f+sSN(S5NVO-PXBbn=QnHxi(dM)tAgtoW7)xaE6%^fL z^5yPiWN?p%{H_axre*&TXr0n5yBQtbTQE>$UR3>{&ZN?HZ6cg}AsA!c$mlu)v3B3f zkdSKV9P*;4UlNlee0{>QRmyM8CW!Ahk_KQcI77R~Kx9emF0kX9#XM-t%pK zJEvAxMY+-9ra|^7qAjsp2+QRwxuGP>KRT-3<2eF-ZxL-vV8Bc@_eFts8HuiMWoM%UvSKv-)oAA{`w-QnSz`s7x_E=AYb4SwT}uWwIKDCl_Pn*5dd_S8v0; zcca0b)pvf0?)-k5J73~mo)ybN3B&+b zO&sQO3)a>pc~);6=M)z1y^t0=0OdB<;aa_vt;^hlR-%IJca7RQhn_8hXiffGgTj_P zGa~E@msi(GUo3+jUHq7ST52Bo0N$^*6Xz^^DiY=RnD^crA zItOzLlvB%{g!oP@p`1hwZ#TLOJxAJL?I;B*ig}j$a$_o_%YC?n&()NY0cs+|QNYnd z@a3&{n9Ztl+EK+ zf_!|vQO$AI`!P;f+XrSsI!9y2ORQCvIY^x}3t9zA?dwnd(E>1}HoazvOXwtLsL3O& zQ*+^C(8P7p?~X?eIhrzQ^~2pxy^)%zzp3Jm7uz!~#xV(rcCPpG@Q-23Aa86g2l3u9 zk!wX`7*HVwE1~Snd{vfyArlR_yHfQbzk|&TB-+-4cVwH#NxgJc&b*Swd?fU;G+9Uw z)ZhFk8CXCv82{~WOKj)3(Fs=%;R(D1F;4DHx_pD80hVNYR3cpS$QfiFPqQ=~qsC)l>>};` z0?8H(=lNBJryLMy(xX)DH;77iI=WM=6x#%al?!J~e`b??cWlOs(D(>lkhw+FXvJo0 zrNE~-G-0a{$~?6`{vwX30z+eFmTmUEY~QV)^G9tttH_vN!E?WQqz`4uVLCnNzt}E* z5T7AYrVr}1%DK(&A3THMbX+20V`KZ|Z6mbFhp8xhvA{!rhwP_?I{_~tp>`qO8GnoI zP~U)Dehh)7B^JfoaO0?XSGy-e+p@k1*=dkVkfvgpLa|(DY(CRW&!>UQ+N{9$bSQ&6 zkqIqKE6cbUY=~kRV=B0qz=S`=m-L#AlQV$+L|O*M>qtmX*~D@jqQiB+C=0-fUiV#lHmo`)4z+I8*+!mDQQqmD?QdQpaUeAD$*;kMrfIA# zm3MURn#D3^n@K4(kLi>!TFs{KIb*I=;p5Zwx6|jhis>TyCqNj3)9tl)5Hc>W)a9c% z|9d|MgZJV|>2elOI?w-{VGQn7g>+d} zDQAko5t%HK>u>r~y6SMXMa0r;w~Pwnx%h`%Emu1ZU|K))g$ozfC$^UC4uAy27s+wT zVTF2%nC5j*%9v0bd?$IE>T5X9y_b!V=P;i>9FInxqPvwxt7FQi)Fn;k&LJXoAxXIZ`p z-&iEgQI|Xx`4_un!tx+suDZ}SHnwvcXz8n;vR`vF_bW~vCe(C$qL<;XY&#_;j5Db~ z;;v)MKR^|ZNk=$CFn@2bWJz808^1}#r&~S%8F*Y1^6ZS zRh$x+d*r@PhU}Zudd_0MZ+4G(4P zIoU44@w6u^a(!kqGgtw&`h%d&B2cKGvy=#tWEM^VB{W!TsA*~S8~L=e@JTa}QSVn$ zCR9ih=`oah2jMM-M$|4AV3M&#f6(`QGQIqQ!)7(q*5oYUSx#`9 zI4)!n8VC`=4@@)3^@b=m<9{62IeN&O^a;GOlF@W>2YuhT)a;pTz>K4@r&A+YEtOJ;#QPjU`#WbPVb-ZxcVyi2#$;}$=Mw@O7`?C$ zPGhq{GQd6}Hb8f&88U1sZj0HOtE+097J&?+Gsn)PE zH#gV8Nx6#t)zcD?dI)Q_;QHhViixf8`d%CXbS9>a)%ClZChzc26QEi4Y(6yT@iacY z`gu=rf`i)A-ctWpxeUw1F|9=6eo*1){qnl8D|~Su1bfVY0{>MCqO8QyMpP7b$Ml%U zSoFUDIc9xaz;F?U*eeuPO&tzWg@r*|-)CwMg!tA=7E)}$tn93aoA79+#vwC)eo9E% zl6KX1+;^IEd%1EPQchF*vd9=w*PKT7<2lT8gHXpDH6Z`8%4kI~WlA_|nGP78p=`FU`hlP?!QxtomS~SvWP? zVBeEYP@`e+ss1*kTII(qUk2|!bRB(hZ4RobJejJCaMO^qdU03l_Q^!h)-$c)B!>VA zfxQ5ZeK`wU+jmp}*YMAijwK}z?MizuaUm9XETa7zM9ee52<@}ZSp{M3G|;$c2fTy{ ziQIz>6T5-5NoBbBa&y>8#DD$rC^^f#BDpLZBw9&*UDYj=Zhwh`fL9@?A#TJSFiT@Z z4Y|H!wSL3Ws0?aFMTgL(%%djzfYs9*a;mCP6(kWWk-ia_2^kI0iZ8DbEZCixi@9S4 z-_tibahAlXwl4(=&YxT{6d%hSSXFzTyG<&LibMX#Km1|37MS!eZg?(#C{wAyue{uw z(@Yb&xrz~*o|*yx=X4@Sj+((Sl{qfu@i2HOXiM`?txyhC&(>hRwMSNIXhd6(VhuI6 z?%Vz@_E_<#KDl=pusFV#s!e`>w3bv|a*1x+ATc zE8i)mrh(U;{fr30X1#?;R#w*MTQpQu91xr(f{vToTQ#L9@_!Px$0P{46VCIN4L9=0 zP^oQ9T;=-;7ZWvARkxvqD!Tm_kmE$g>#A3}j-mzL0p6)im72T0v2uT1V@G$R3T=7e!7`AIFEp`c+5#R8rI11qLtfNmiS?k zY9UAuBmBQOvnalH1n9WLI1oPN(&bOEmm41#A`gVyNOoB!0v&cuE;zV8?o`w~_7K6s zR(NBncVY5gh6a3drt^e+c(Qmh<&0prLCj51)i5mf6=c?rF3}bIJcs#4PE0hR;N?853{&D(RTc4CxVQ~xf4xLCIE;;RbGw#) zet6)i9&d)Q^>rk2LAa(a8-%z==l9}}1(&Wu>wj@8TO_pLD<4Wnhs8Fm&9-|9`PgX3 z#>bPF_Ip5dK;k_#}lg zQZ)GJG}j_w1mb(Vp**p~S5{ieCMKr$_UHOi6yJndjd%a?hD5wt7)YIER<%#Mn79Un zIl*&7N~lI{oGGUI$BiDCH1dCf0dPSRPAIsnSzSFhi^c1Cic!~xq6nIZVh zy*~|=Sm$1<^Z!C$wf8CVnxSgyVOvw4pV=nVagNiz+?pbm*GvawrnV(?vGDER`_rh7 zL!_>*eu1LExyqGdg$=-5d_Mp=Z9kOSX4SB%8{uW8jLAobxjeMgZ&&!){xRWM0r7X0 zuL-hZ;;p}KEnmAXpOb8IrA`mz-n^fHX7>GE=RLn_!3w2Pi<&7@L87Db2u&?1Esf(4 zK1sHuA(~bEzep6gV>cTf-3#U+KfPsfKfGy;^`V)u#Kx!le0Z#fmy0ed+62dztDez1 zbAgqt{YBNb2h*I7sI#42UMPBPL~pxNV!n?v)5mWX9(C{WoN|{UeP}S{_Br5_ zadf-urwW*mG%5mk#)lH?NRv|%NKnQ!1oaP+3f``bq)-A}LsFJ@lV`@yAKG_kF$7fq zCCBUsNt`Rtan=TFzvOLEw(jlGh&7q*nEB?_ccd~?ueg_K(dKyI%2_E+hsWqF!P0?(vYAldW7UccuK-ADhBhw^HBL zsf7%x?!C+3j}(-}%yF`^&`*;Qi;Cx?34utVD7C@7=|6Q!uw4zDZh)1w0U+F|z_RwB z-08}a6RKpNPTm2vnmvZWPLpE{3#^DK8B*(lyLOJ zL6`rj6n?85J_8+liC_Qn1?RkrHn|(C?^4AkQ|&_h{a;kDX=-VSx$Nb4q3@sodG*J! zxgV+x#JEx67$Rme1-5_K`iPHTqcE&=%|xmRb1N;iG@pZftH6}p5f3Rk*(x&|!9HnD zIa+2PAA3Sf-NVy!H)!E5BeIWM5n%Q1SmrBx zb#?*)<*k|tTf4djbcvrgJxr${c<{}7*X1dD7eQJCk%Rs1U?iLcQuXcq;$1^493|=P z1rHat33(hMwcuad_L&I}od&}~I~Yc*{vOZq2XHU$)z2Q}Hkx=mv>ZEbPF7o27+ zUY@saEz9NKO%zc*VUy*YCksWO3=!KKAMExxf_K${aj09wH>iwaKu<6TUm24jA}3D= z3X$q%uJK{|kM%`)X%hh1#=hyPzSYU?$_AnqYoBys;zdBN| z17fq|+&SJySyyF-KROe5us7XE@=OvC(`dMfV{>^QnBjzugHJR0?avb%%+VFjA6THk zkP3N|x`G0#`XF-#94bN1(9jT1Wnz*IGlWJe37P9%mtGsSQmaP&m`|a&_s;M(uu>I) z?Ur5|@ZI$hU;N^pNmPKfr&4Ibr*NYJivgH={IFv&Sd1=XIs>S&@16R7CFJg5=N)## za43=kAyTmu&=S#3#5clo|Jf0TQ*>4PGbi&v^u3NW+g3<$XeM~4*7t~;m%+cq*u9cv z!>pj!zJ2o=k(Xip!ZbzxPqP!G|8mNNOq)y;DW9yawS4A2#3OQdoWVr2D6U+}yCP#8 z?y)V@8V|@$ZWI8xX}`E_N({+`Az(pFp6*}?z2>aqM@Rm{c96p^a-^lTH4&nz5xQiz z9g^tIXHLL~{G2eX%d(c!SvnT-JLrI*e-}RResUqlpaMz&jU2 zE31dlJ~;EgX8$zv1W!U{O0PW2Gn#v`i{0Vnr-NVIQ1)fPZEp-Gum$ArmyB809?7Z= z$@!~`SD7eQuAndk%oGZA5vnc!`?z{0@V;kmS)Q=15b@$PXnLmlB;6~?C?{XlalbPK zi-Vwi4T4OMbWmCUbDcLwx?TRH|9i1F7dbYS*8qHRTeKp7BFFJ(?V_4;4DW`NNpj_A z64DcrfrP__Pz)(>+$D(66xf*=n{7a=ycCk4yo}%XUdrI#=bZtbnk>z|cS zr#BA6NN!^fD7}@!kvkmUii=pvhI?Qs*B|9KRwu~e5zfrbwE;H54yiRhRK4%t4-7EC z;Uxbrae*j>Nyuq{@7)y7t&Fn-22-9VG?aom6`tTDe{*IQG~_221T#it5c=4xBP`JDzGUn*hq+Ij22slKiS6^w3(nC zgUBG!iO?SfRNVxqiy@V8c4lVgPkxxcSQh*x^a>FhJ9{-LO)~Xj1w9FEuYl9$%n_2s z`4ez8U_c(~ep!*A0W})k*Vkv$n#8_;@8pZE1QP%81=&xD=%5_5oFcs4IA1cwbHjhl zE<JvZ{n~aKsL+xVIie|Ymj8RfLW_uejXU~VZhqU~-U*g5IR8F5 za$F~C4+6tdz-sg1VtkTA&rl*4icb2fDokhu&-(M5sg%S&`-g2{N7$fQjNJDZ%!^Y$ z)!w#iJ^FW%nYK>%(|b%-kx&fP_!JeG)#%>_CKHG)vmi|G|9&2yL=~d$JMq=4pSsUT zMwe+Yp`QsQRVcj%OKNCG@3}t}IOf|`t6UV1^-&)_d=Lrw6&M{Iod|;}4Hiv(J^p(b z6Ye~vr1#P-Bb$rCq`KsJ>K8A?e)KR?)~%!;*|TprfR+p42%dPPiHf1(PXfQo|37XK zpddd#zkW}vtW@;VTXKPcwNlpJm#;q|&}Bb$@|{aH09BqJ=k^*t&>~=Zuz?$r-?Q0@ zgLnNAMjOH;s-Y%eM+@9O*tDGp9Exit335W1#{lsd+363t!+YIWd|_>Eoxvn@OW^dN zI!azHlv^i!g2gj>mU9Jwu~x8B&iKGvPemXCa2m7y&wT*wS%Y~dEm{(zY``!ml{iqO@Z3aihquv>4h&8}^JymDtZD-{|)qobk{fI@Q-URL_shf9RO+(th z_J;OK3kZqMfVw$Vd+7*%Civu9K>S54o6wcs0n^Y_lnh1N+pAQ3hD^`^o?q@dYAo(D z%mzFNJI1cadP#h*sPKTzrQZ4GZDxHcgNd-%U<@zwul}cc8d-jG$3Kr$mq9$;zkIHs z*Xz=z|LRip*~&xJP(S<|u3?U%p^>D-!k~nY3+J)2T?AFLFt%;t&KBH<)z)V4n>kVq0HG}~jrmU`7>yn%%*@k7Fg&1dQIp$CS zd2hFXNriK-Q4~az0vV@#3h&G^zsZ6=uhVDHGK2vD`t(}e3kp2nEivL24wD>p^a~7` zU53khM=_=+1|k)&lO&o4Zz}^!qGK}ao5-nyx+xr8E+r;DzAC;)hjA?wdycGdU7 z1)!d~-U5L7Ip$5?p8TJ@^tUhuk(y(TRD} zWi$Z8X!%yNmuz(a%?}Re)76p9wMLQANuJZ0g0|f?An&z+V)>OiSqM?(WfTnYsM0kN63uWQ zW>+Y$GHfUu!^*sQEi(NJKQR`QMw->Cy0qH+g&X5KUT?C>?~|iiAQ@dTFzie4Y(qgmU#6Wfc|TsUt7afU0whf_qY33)_=QvG~u8s6{hj zh9#PHS;(J0q<5f5Hs|FEg&f{)fM~ICYs>e5^DPN}U4he7x$yo4BBrbf=q!2AjobJP z8m5eel;$jJAn^LRxs2rG-pO55J4kmaq?3HY!oqoV(4HV-*FjT<1mai=!t@#FJa|Wt ziey!Ml>7HM@@c$JRX`ci=d%*_>`r zeOWA)aBy(A{d(+#$!v->r|ZL0^l|xeg!fbS!~C=0Q{NSG4NiNao;wY0I*!`kBXp&5 z8@zerMiP)ynp_9EGcq#Ppd`@>`rl5&lVd-T-uo-8c}z+QY?SVuDJ1S!pwr%%uDQyV zzoMUI&bCJWqjiIa8x(aAth*-qpH?&EQt+U*T%*4habY^cna`5MYXC`um;Ygsygq=cMeH_{ML^&dKf*g94V3LLI_;I7h-vP1^ zB&Om^0L<&yu)V|x%(ge~0HWVrSL2t#brma%knJ_pRmFn%ZHN~tSr;6TM)4M3&N7*c~ zuFoVg{2^s|xA0esYbgaY=OKSPgLBqib0Slli2Bw{)Q z#Dj=Q;M`o|l9t9p9@Wj7dKjBX+gD z@z(gP>dfgUcb54|0)s|aSjnzOMz$k;7xnmiL3as~gm3nFSYnlMjIK$56Gp-d;H{)e zdR3AC)98RCY+gs?=#~+)bU{~l`!T7e}900+5G0sjZ7PIPp#N7RuiY)sju$@ z`ghh8JZy~Wj^_yuK#|Juk9C439R=R#MnQJl&AkPP_hv>78*(L%4|l1i`xzQu6-> zoJc+g<*HhkgWCs?DkVQNkG}V=pq~D;B5pe&%lxlf^mf0#k9fu-MBam@18t;<`-wr? z;#vR-gU^f+KLD1#f15@B&lzn<#%Y?V{r&6bg$HLz>v#oEs!&O6X^JSu`+0BtT+S35 zXssCL?T`V(t1)P$7>=-nA0Yt2I&a6uHaix<;+@ax`VBK?IvThW32e0= zJn^__dua1}Y3_iBk@0V0QLT?WrI2Ii-Q1%(yGi5PDY+r=)lOUk_(WSUxqzWiFJD^n zp`3|0xWWe)nGmH~Sm`t<@S(!x&JLuTRz_(|RFggT6?0)kjR!EPGQ<`m*e{*+z1`um zp0%!e0=ft&Z_t$Z-!XWGRyeSD~v{1B$%twEvjlR%VORr#;0 zpHqf)w6#vX-6(c^X3zb7o_*s?`pn~9I|jGZvofz?0)2aV$zC|or~o-nv8h90*)Y*W z%zH?AH)Qq`-u0ED&6uV?c&eNfQAFf7r>j!EtHn4hp%49wkB$HY+>kkB5`FV#DolRq zTx#+efl&4$=OitV8!k%(rjGgsW#WZNhS)zONs^Yjsrmb9p<$BX%eTLHXdMO9mWsn@ zqTLd+fDa9Im)fU~n!h3ECe$1=Awm1HisY`65XP{=Iin%07-Vw7syP1hK3ENiQu*9C zyEBr(r$CqP42*nBuzsuFr9`qQUqus;hU6jI(x2H7d4q=!AATB*?hTj;xjB}q|F)*Z z;Ykpi^h-zU9s1Z|cBiS3gz_j>*LTZH`{WP?tRU;eT#WHVp~_ig&I}udnvjAXyS*=mMp*re4e^o20vs=CXf@HRCP2 zQ_FqFi9cD!-N!(DH_%XuDp-k=*=S_tox;=v%<0S-y}?cP10xy90%^7?qHxsG{zi>} z0>N$N2doT9HQezJ0ZqVijjWiEnpD#ZUSyf{aJc>9?Cspj)HfN=*fj&cQHrthY5j`*P{0^{KIDck zjg=I-u5SzVP&#K#QKRf^k~ z&-jFXdu=w7H&ICbwtaar$MHw15y$jK+^%iXlj@|@iB+_X-QrK8^ULlDKH0FmjU`~{ z@%%n_VtIo}99a=L3}&TsIfDu3HG7hrA7O#MdeWaXDwde zI0lzz>WGbqH~(x&ZA^T8I>J}j^Ifa2scoTVTd1gh>2e{(R>da*?}OS`oE}XEBkOrT zv8%HGxAY}bxoRrm2*ZmZ*(@5l`cA8`vtYlxvjYekv-x4Rb86^>4N{aP)HttFRjNyq zM*fQ^F(JAjUgN;x!%HhIKDq=nV}!E|O;-=P4^>V=MwRySE@UtXKtwTP2;Q>XhGdI( zr3xfkT<))yDvIL8TPK-bHg`CIF>sq`z$> zUhj3oqyPoio@K|e3lzrw|9IjrZ3L>03Eg5K&TkYjdvS|fu|shx3H0F{^A*ZosT?z8 z9|OYT4|lM;2nhx)Of1YPW4f4_n0VolHa)gogyHdYZ?^m)7)$IKc#@TD@534qB-738 zN@2xeLZtmJ#J!1{ComDAO&`Sk$X`M@an6%{xITHw^x|430(wI)B2N&vo70={{qFzl z1z5rY=>ZvC45lHobGAKwF@mk$qmB^eY|8S-WFjY0jA96!MZ+QdG(VVRG=AgQJPQlU zQ};X>vAusKXNz#pjBKP_dydH2Re~7cf)^{Hh}HArzYzQ0j-8>D%bS9-kSY|`$|a-h z_sgZ&30BB^w+f{UOx4g9QiQ|`XpcGSeD$yn%YSWCph81^wTnH^brbiiSIc$Y%pCxb zSOo5xFca+>A}3-p{04z6+T93@+kB+xOv?Xwz6mt04Nn$C-ArGQIMZvu-2dfD{~p}Y z2#BJkn|Vm#7y;54cC~|Q&q}=`U`13x{#n(>bf}hdJFroQv$_G#upC)xo9sA`yeCr+ zp^&O^wwZ9(;8#Qo$lN|aainp@&GAdH4_1=--=}EdP=$-ybtFu`jc-RXS>+~Z;7`(K zr<99*3%Qs6nvo>*!9rak7NP2N4n~!;P9`(OCmxlR7Z4Zj6|}Cu=^Tq#!%eb2e`Zx=x5(-2_c4G`rwL<&g2} z{RG|wKLD_6F#W3R;_mLVWKPd26W~o4niyR2Xl3_zxg|RGmGx|F0*DLh3)F8-T@aie z3;3FP>lV#6P(U<-NKWmUEf6}xv(%%U-=0nc{$lFWRg>M8<8x}FoS#;hOo9)vO?4L>xi0``sLJ8_H zkBhzX5YoBO$a*e@^BZ6ytpGR|8kt?~RSt^~;PQR>b*MyfHM{RULwy!AS+O=cGYhOldyv%p# z-^6=Ysf|I;c$i^B7M{c!EHHslsZI3zXC?-mRy0708fv9+s|WnZ08uIe?K8>;!q_Xmpj`RANHHIj#=Eg6CPjQ$*D;glz@@M6tJZ5V}I$)~amz z*%}P0RzxUQNa@~7{{yg(#-GvFQbWv_i^o_%T#JZ`NZ?l}Uj*t}`RnA5IF8fTs4szF z2;K2B!L{=Ou0M&eCa%@WOmFla%4wQbx!rgESfK^tHiDQMp4(4ozS0^Jzeoevu-!}4 zVlk^@l_7Yk*#%J`?)y5Hx>JE)zc&;uL&neJtFhIA4K3?jT z=On@(1;d~L0V);qB+rdz2k#R89423jFIjknajF*^DSY>WFnIC7rpm=7keGDZJyH40 z7^r`Ia6{7oiqkp0v!b{SYr`%g(zk)BlveVIy_1#YI?NpUfHY?l>D4xi+=_K6pWcWH z8=MBGaXC)W7BUXhpmo$BW=__;9W&0{-~vV)p&u@n#(bx1_8AQOE-+?~X?lB;mh;T+ zdUBQV`MBevXOTWNB&HxaaZ**k(3IPE^d+fW)Rrmx*M!M}z>^Jx0y)X${nxRtux0b@@OeGx^oN1#Bi>IK$J0vJ$~bhg zoQG32?&T`UJAp8qKF~NE45qNTR!@!6&Ac-lbO(a?kkiJW{_%Ls{vL72Pxpc!=L>)G_^9s&$q@;@*u75cDrC)dbP%T}v?*y6Vp=s64t&Sfnvr=`ns+GhHfn|D zfpc%He)Z(fbB$FzU+$XFO6-J(1}(4r;Csr|`|$7 z^iuZ&TU~=F!e4evrV1uiYB74fk}Hyb{c~WNgjT$xNm4!bWY7vjleC`cS>m6o)d&P^ z%yT{a+V>o@UqBHv`LwuwsUi4EhkF6V@cQ2|tD_|0j!{E647*WibJc>wGM z%7#&D@X^={6zB90QPneXSF%{>OY zgzs~hn}xbX0=L}wPYzGZVI2COrvAcR9yT!Abzmk%(W)z>6=vu1frKvE93K)z=Y4*_ z?}y3``0s+MDoKskPGvsF`~_mpU-9$6ZezOfAY5V`s_`J zryxNW{M^#~)U2JWysvlAP)@Q(Ol68mU2ehIjS=P<`HR1SZORW>_hIIT-1%q9#0kG* z(jf@V``E^V89s!_6B}PGuUuW?4wVnQF88FsR!hQm*PfgBEI&ie5fn38J}T7ve5*`( zk3De!=38oiQEtJBWdVH{1-U-teP~P($Z@du1*0~dccpZT^o#~Si+3FQs%#s5`A3z$ z^BiWDSzzk=A+(ARzC?}h;fO7lP%*AWo0^zkBUqsuQu57;+~kZ=c^I!$ukzz2MrI3M z@=QwD6=LBFwz&fzfyW;+R-}OW|8+>^16YqRQ&y;gNS>Qt2P4Rz<9!Z&vIcsvui1<~tOS+7E=51T$PBc`~( zg{x=(T6yPeS_5=lwdB1zel z86uL(NJ3;KWH#vcxm!=)-|N+@r$0Q$x$o<`KG$cwNASzGjDqKchxJ~E=c{tE+R?so z6FWsfQ@?!J{WQO1+cMRvSW~MSnr4}1oyTY?n!O`YX3A})V7#*P zH2V3cnJu&HxP0NYO-Bl4+R`k_@mr(&ET3i3>*(q6_|x4!N*@h*k1P!qLLoc;>_fxD zK+KMz+36Lu<7>S32811YAu{y{CmpWt&xHirf?1Gu&_}q2Hlbh0L>OEg?>&&j$$+Yp!N4= z4Re0X#r-Zg74&_gutJeej#JZs|1G#yZ`TTn-E3}g)E^gNYS4C$Gd7&;%IEiT zWx|Kl8ul0i1h6KZM?394O*CZk+kU0@K8wGq$#c1_#!Y0qwyq{EjjA%QI?ju=R*!XA ziTpL_B`gP-@?%XW$Ze3k4iNW{{u|qVWKTgQh+wXY7)`M2eVd5E<%WbjvxZAc72O&HZ8PKqnAIsdzA@@Pk1Gpfd%kxG@6&SwXBw$_cSjGNz`PtM3?mn`r#cXs;1v3yLpKwHR^ zUl{E!K{PKiD6K6`yaNR?iWv4yoBOSXr=*xxDw@E>uvfXHpU;OT`U?Chrb2XDYrk&v z%U@pYrV5~=kJ3}6l2Dj;lS5{*yk zX?&eswF`e(VItAbtSi#9@2EwNr`<%pZ<(sVxWUs8b5imj?#xhM(tl7YE*n2xdyN*z zN=g>ICDhHgp-C`O60KRHcG+~i&0s{dN3tSmSp)F!ANlGWzty}K(o#y<7Ou)T{3&R( z(c2kB-Q$8+n%Kxwywxn+)^eCdauV|Ut|TaFQRbMUmmgt|s;4yHlpGdm`} zayTC$C*pYRcevgx#I|X7JgCYzkfH6_n+GXrR2JFO4wuc(+OpJZ1~4?&O%vR>++8Ky zr9<-Tuu;KFo6CD*7Z#28Xp?&%Z6PhxcZjnz#N+<&9DR)uzn;b4^Lp2ndiL_zTeeLD zGf}}%$;WXnkYGM}3k8(zC&mUXG+DP1h-CO}8=0Bf1JA4Rpu&`XGl|1RmCLGUV&v+B zW_-UhsmmVuj;kY^$i2^&TCZxDM8A;%<>0=}4|tBT^L<<7mO?SrzO*i_WJQvUTJ>7W zqYdxlWS)8lvl-T))})m`$__>a?M=s#g)Tvp9D!&5G0Qb~O1oSGKf}c%o zg^pZSRt_u09?Vd|t;;C0iwxT*bWH?}2Gozy}b$Pp>tNm=h9a zG4i1IgWTg`l_diJxtSlul=G;4%@)eK7q@tQV}>tSQ_UWoj!cd`!}#?yyBy*M;}Ht} zAY-;sJLXX$M~>Mjfy>4PvE`#!KpW%7MAngj(MHL=2lD=L6ui92;ZYl za$&-9OAQXmXLJB;nip-3mq+IeuQs{_ZTi}q;kZ~W5*wuOy%`hXg#x@ZRq2^OWa$-9 z8outcJn?tR0Mz%dL(YOb7S51k0$-wBIMuKfGR)*6tf)4L|CJKG*Ai*fOAk_*9LiLA z(r7eAO(oFFsyeio9K9K_o&i*1u`Qg)5qn z5ZSVuGziNts-PB04WbY3Pt#Jg{aVJp)Tl#}*r@YX@!|7g;keBc17)2`+GdAt+F2YH z(#PeLc$j&))TV637ol|OP6Vi2k4~eB{HU{6QGvH5DYTteBwQdocj}T2g%(SVVKv>b zNyGJ}FL%fXi=R~r+(WmVX|NvG38ds8@ZA$K@zFNBW0rG|-?dLNaJQ*bFJXu zLG1=E^QSehmV=K8jo6c|;`6?wAM2hB4eq*OzjOH0!3`6Vkm%(Z@7pwVTi?32m2uVf1@q_aKDX>OkjeGb{NR(Cx16D~CAx z&llTKAd)Qks&d2h*B+;fS&1ST6;VIj-AH%pGfWIdxM6$7Y<33ys+XbNcry)xLu!t4 z5k`7WWJziq;o>w0d=FQJg+(w7m?RRIbR+pJze|Yr0(48fXNXOc=^f{0{dIYdF6>^c zbg3XdfX|Z`LeC*=Zu54e8aNe|6iY76=Ee?_U80N;Ar#pqLp#vWxw!w+~mftCDMC zNr3DXF<^1|wgyQoL7#ek^3Pc%U`nxy`V~ERvT3Mn4ZNADI93_deTy~Xn}0(BsMT?N z!JA;$=9cDo&4^OqaTKU*rKeWN1+nu&J5q*Mj8@l&#Q6A5eH1QG+ftL6xuevHMVn=t zCllgv|Iq?)b+=%r8Vdk(U4Q-BSuCg1Nn&704+orxdQywNe z_^TDE&LO*-)=!@ta+SbMDa=_snsidf{kaTZ?Z4v^Lwx-D1nxc6_##CXFvn;BL*Va${4SgTWG+cyXJMs6)k=7#hPaF-{$p9Rk4ScD~k`fJv zUiu#Tm9Is?XDmD?>$6Y2ffttKI$EU!RkpcH=##z^cH4iFI^;*)xbQm%RAeuArl|0( ze7^9+n=2hL-e@f^tv%7qkwAd8B;wIJtB4XbDAFLNuDUuqE+}-uaI@RvZmEerHS>0y z=|wIbRAFgI7(w)l0Fql6<^4UE(c~aXsWSfF{%lvd!3$seCs%orZ@L=W-2PQ|eoljt zY4coPK|n|=@G87!9DONjora$fia5~z?HEreL*u2%L~uMdu1x7#JjZ0qroFZu++BWa5X!-=Ecb4OaH+Y9@nfd;%G> zW%wE!wwt3p8W4$O`GT_izg{|)Cif6c9%Ig1d0lIOqlT@`fMkmn3}>$YJuyGWub)%# zgy_$JY*E71Bb=N{z>ny(_50#a-ei#gYyNn8TY;k$5H%Tt_hGg83%i4 zW50lD2CJn7#$`(C?`k#ca0m%KeZy+KOcslv|LviF*QhMs*@jH9P0f96e}C;GuoQ=A zSkzJYvwjF*P*ej!5#SaiWd0Hz5MVpf<3e)zuUF?8sJF3!kja zuQlg@%r#V2a^8+$V}6j)Q1l9jDo`%2xtoj~|K}~^r(+aRePAWRD=w~&^k1P8_0jAb zCI9_18p!nH22n}iX=^|(Ar>G={td0=k#0Hrk-v==_{W5@HHac2W)A1enA$l|%7=cJ z74-<5>KupA*;T>x6AMPoq-Ee$AcB&z>C$t`%2 zIxEgvv2K)J!Ufm`2A~P&^s-bxF1~~H?{-0cD~ALDA`%ZTi&O}N@r`xhEb$Bt4c%OM zvi18*Pm#hwIPZRN6z4|UN;v+{N%+*U;rs8C@l0VPeb;hN-#n_Omx7AWfGx}$K}zrO z+B59;ahL$oU*4O0m^bO%1jtMnc#WFSeB~7t6; zn((^~KaEe2y`T+WC*U51c^V?Z_P(=rk%(#MA%*q}D46pO&91YuNgBEI$6|GsNa0^nkK3(*5K@%+sD z_Y&`}oBv+ZkQfp@CHM6%n_*?BIB`7BYhkjhq1V9FV6~gzkUV|tpQlokL}zGqt+7>D zG*rW4L=E1W#_O~D9nmE5{V@!?yw-%(+8ly{nhB0;(56m>KHbwX$J-(ZK_1b~14KMR z)E|@Msr#iyfb8s07HSPm&EBEliQWJd2pI{3@Z}5kGT@PvZUKqULR>;k`L;*DEv?C(WK3Ll95pOT8-a2g8bfW8RF zyDg|9$`$lVnm8GMU&tZqhz z{J=oVX5ag|cEcb|$H3j2z+m$0!F-X!c+aX0?fke`Aw$1zTF$io2$`2-CvN%ou@6Cc zs6*fux=Os(GYPNzRfJUWncJd0KPCz_X%7OyQq%UJhj{xi6jzUE4R-+(ch_tA^-7^d z5Evy|YE3 zB!V`ex$J>&YXEozM6aR{6iyIT8{#98IGm$8E~G8e;u?gBRN#Uy8Nq;zS^~j!`M(7P zi(B?RBxrLWrdUP^&|Z%J{t`n8W3;l{XSPl)b%T$=mXBooeXyD{B#ZqZi(z&Jag7Gx z?$v~l47Ncp^KCqg&$8ZTi=&hu!be_v-PiAaWT5ofVhs^-4_Tb9ozx$;z(GtdvCRRu zdZ7e7A)@zfXhOD6{T=30#!jBT8f5g8vBV-cKRArTDlq$h;nQ#ZlmWf2Xk4nt*>ari zTw*|#>UElfADuJ&Yf8`hAu6;PB+o68Rn89^j9#*E&*ihJCMw$;wdS>q5cluD1T?)AhT` z-#~eN!7UaEY@i4yrh#I8%Aq$N#@*Rw+XX#3-CLW4!d-28v-R13f=~#mTHP8{GQy}H zK!k4Qrkp_oBOw9dp;WP1dK^J};~&-ZN(cn;`mr3shGQA)fOk7ce;v}0=OR{7P5sLzI{I3FBJTJ5)c zDTbInP>Ir>H^%6!(OWG|uf!RHV?w(5F==}A*jE@M3xhab&Cf%79z0)ic}iIH-VoFAI%%q&a%&!c=tr3stm6SZ%~#g{w$l6igmI_tcQ2@Z|owq}M_MH-W=LPT3V}^rFsS!qr3FVHif1txzr>43+*tCIYi7 z6!Zb>*(9Nu=|QyJDfu?QvflQ(h|AQt8omNqL(NHUS@aOq>==TTWI(Hs+~#LJl1?_! zDV~0Q`qQu9!-ga!1&pE-&rTK9ZMMs3rD`OMzw*}%ye~8@U*y?5bDzG@cW&FDMp@ge zZjRXOu}dY3wwz_^r`AwHL~MBJ2%Vt{z&1{HDMhjH|GlO(I9$;jugH{LR`T5zZ!Pvq z48DvBFF%y!lKAExT-E&7!%eB$FnLcPI3>YYW+D59!{h8&qz$QrB|#~x<|C3Cw`F!s zF^3aXs280vd~ZRV2=V2+^^D_U`v$ema8JuE_78k7E z^^hC}FzWtW_08hr&$0ntRlPBh_jb_s&CQiJCLmW{dYCT#u*s)F+3;db4eDX22PFbt zFmX+?UY+2C8}{X7FuzN}4Wgc_IAy_$Z{A*gC*slfT(;Ez%5k`7pzXgC|i$jyTN>k|We zE8!}tviY+XYbDv4ChGu@C-$nmG#e4=4Wc4|gDx0u8+{`RVmFBP3|Z=EUwBF4%m=Wy z7?vUoADQzChUS?;?PaqDz$)HS$v9%ET8hx%s0Os02`rN#X?<1Z(r-I^8mv2u_b_9X@rhrj?nDhrgEMx>Zz zw+@Ybi6>ognGyEvP_;OH(8=S8i-EC`?up2IjT)EspwP%tWBGSeVsGN9HbHVl*4YZw z%fs^#T=70HMrIK2zA zNBi$Kq{2dW{aHw*+yokPgO(w~+M_Hey)p_b`E@r(ayEa*kw=!c1=?9^qAVp(-!VTr zOLRKeYdrE^J%Z#7X7Xn6_-6?}hvFI3Oxf{v9w84tIXkXW^RC}xW%`vZKpXh4yAib! zyC~(QLM=?zd2*Kjn9Wdw6O}A0C)evzeQx1)YkwDa+HN4^ftDH)J@>g4sg!@5A0`jL z1`5|onl^Si3B~T5NRJ6$FyJgRx|@~leo3L^8kF|Kd18=6d;h=P^c{7_uq>%e68C^X z$gqcgCb!Ix+#N%I{oCduErUBI2-}0p=bBzS)VcmbqR#E~Jr|2#$7|{gtni-S`Qa6M zA^JB&np5Jw#?Q)Mb?BUKeADD^llobQC(lE@#7W~s5a^Rf9(TOq>8AT{rS2PtC;NS^ zzX=iKbH+?RhvGVCnV9(x#q|rK&mH_iwAE7w*pEoZy@W_V!fy8CxsjOjyrX7|pRW(= zN?941%6B;NdI)lTIbJZw%9H)K716^_ux41$5TyvSyg)=*0mR-*48)t)|8w>^2;7Mb zadxW;(A7Ajm}HM#K2hO!gDys=obqE$+-rpu4?${^F(<&2Kk$Af<%s`pz-LDTV1Bm4 z%s09M6VlB=TFNo+19dck5WS=QwJU${!HI}63d$nL(DV(^IEROkyJm5BINMK5SCw8= zh{Aa*eSwQN`$NIGoVRBjiT?QoV3eXW1v;%sV1-8(J-P*Ie&Eg#_}0oN?swwWj(|$* zuQz`51u_`D27oi4Qi}qtu6pP?SB*w_#>O-hrAayLeZX% z_ckPX3{Qm8UAVg53uT(Ui(NK++`6a@%~IL*PTB$4|9K_f)sd*!Xs`|)L8PIGsGS=N zZNIa3i2rpLe}>|;JrH~AT?qms%Rb8>YG`=Lcx9>on-kZgQ9*ti5 z(gZHb#NyMk)Nw7Zp_zf^cYK$OR`?>w=-nHS17OZEllJfb#)G*+pcY*ycNP0>RMzq$ z0fIM7jizFe%#CP+Bq3rl!})JQQH{KxG<`qk4qzutI=KyTbT=6ZLAO&i-Jr|l zob-8UCS*!HBl))%xJs*7G($qmchOY|OUL~%jJ%j*cO3_4`EaLUWm#hSL{E zYQ!ff?wsSiE4=|34RT9R>M_8Od zUICF?E0MF;e(h1bCrizI{#n8{P4IiB`2&RTiOiJmuITzf$><0fAo>ocM(d}bQlp!^7NM8rr+bV4S2)34AV@4=QG0G=+2~a^{HA){iOqXJ znf(k4qiR7m+fk~#@UVZ@d5VMpL(~l#cfkB`EV4agA$}t1S29h7ir&qm{it#%G$n-& zO5gYgxvCZyc-=%T>T#W2De2)+@d1=C!k>RJnnL~8*s9NIh5e2iI-(X$mk3Lx4Wcy` z?;K7f{0;=)5rawg%KTSRFzqq(F+$ll=Y}%uS@-_ObB|=aZo{y$=tr zIE=FTV;pc%hyQDsi#JB&vf;`hnY%sf{vx%LW1 z9ep#AzMLG-=JVAkU-g{4vLoj|QIF#^d}#-&S-^qX1A?j%O%k1$D?swM9?YGBdQ*7U z8S|Q9l*+8P_gjbm<$El`Ul!y`%IJj*-HQJw^6MRetOb$!BnZW@KMdGf>eA{W@)Yzn z{=K>y=@3A@?)zTN6T$JSl`3X$82syTaogr6 z$NnG$*N(w)&UqBbe{zxmeKw9Y3ED?m)9s1gH{)4!HnNf0pf{l&`+NWXOlqyrxd!4t zpNupSG3Ozr7fKPE|DgF_NYv%1PARDHT>qHngAoTbS+SH9 z!_J@Mk33D!L43NHte;(SkfEqyKzsV|eEM?%@g$7EYyEJ1I#52iio=J;&#IFIOD;Yz zZzY}c=Yr)*P&70&L~TnipFbtJ4$L0IV}0V#D2oBn^9w`>9^WP5owafDA z-7yp_gZ?w9u@aw@8csYCny?feRVRJk1sd`H6RpvV@Q(5{_krGh6qw_wABw9$vNvnS z`l6x5pY)*;lq#PePv;7xP?~YHliB|6#K&#h?7V8_A-q-k$r-8$Z%J)cuk2g@h$}H- zemZUdR&;Hs5pH&x?ENQ1Iu~gFzQ`Bwp+{H+EUjKbjafq0v~xEt#ZEoj@9~+@FaeLZ ziadpXAtR8k&5GckEd#N)F6qo7AQ;lHv)``cpBwsnVA@ZGNTE9-U&s+(g7z!rqT)dM z%a?Rx4UVaX!ta0Ry@5b6ma`k>$q8)vsndVw9Y5FH70m)lsC+t^g@@^(C1DQe`I6ge z8y_yq{#B?`v_u+zmU<#nc2ByxG@&7yZ9Hm;1Yg~ca#gy}2lDWDh&m@j_CLEEbAq7M zP!?KIB9ve-ZMqi9&_Mj(0iEP({V_S&XlZuk?uuMp(9Tg!gIBS8SD0(X+!}FOey_?+ zuKsVjgt0^}>qO9e(*m`M-`DjHO7_1C@e!Qp4A;_)9aSGTWx5s9CO?P$6CAe(eb%5M zQv2=Xd_}F|(*FiMMN`=ENbm1qoi%9cqVl?a3ECof##JQwdh48S)3=`R8Zg|BSvoS; z(mK>>ZuvddshHfowPbMT6GQts;Gj+cfl}e07)VM`Y~T*dOSg zihe1Xk<~AN$CY+by`OaLgpTKjy<_)xS`Xac5VrK2OGUWN3f_r9|DB{z0{##JU%0sG z&X(1~hJsP<~1|??gLv4Q^T{wzx`J#6f;8KStDJyw-b!Mk-g?eb1r%q^@@(9W(P` zMEpcz@ZV%5bb?mWV-`m#ci8{JT&5!15TO7}7y2Acm|03yEf6)1t`8P#`h{B4G3q!I; z=wVdBbVcvabcM$4I2`86N3zpS6G&SGy8LdG+w+-X7v^(}2AUc9h*zaz$Qs=o)M>Ci%2V zIU3amP~vI22~+#pipN2Z*o4H z{c{2iz%S`RYXF%SLI{^qVA}Z`LfjDBgv!UN(@q@iu25~e2pSaPY!A3#4-KQ<;Uf(mh@s@OygKR&y6IBB7>%@gjsauD z?8*O}#gDWh-BW;N%1jRKmlcRr;3jbp)Fa7NFVNDv1#K;y3nG-*7R@79re47O6Tj`2SJ zv60uwSkC8tW~JbXk%!xC_KL?bUd`8+a|D^|e(;n&yc~mw7QM{p>(u!hqXBPmEVMnM z*b&tPXwyP0nNUhYJnc5f0a>cs3C_VhZ~IW~!u_ zA&fD;xl2cd=v7!MjPGXZN_9ZqwU^bo@%#8Iw$Z{p*Jed%@-P>Q!J}XjCeq#lL)fI0 zl)^VeRF7P)KQ6avND&IYV<_NRoO0MNk}gK%_OefjfNR^WfFB0*DL+zJ1B`ozQr@%0 zZihl~CtDA@v z>rR2>ZQ9}n3@L|A2F|nE{wzv4fc$#y0{F#3Oa%&Q8hAIAU!*vkuFaN{74;Xe<#sYu zS*UZ$_p{X1y5zfk>I8@!W=W2}7HCE=ey(sApDVN|lSnZ&RiCkaTFSYR{*haqYQdKK z`nM4weYc{IlRH;?-j9HMSR@s@D3B$|8z@X51yN-SMYx!V@;xG80CiIzwEm53itMBg zxIa1Qr~$3M&F8@TgDiAl{XT+pP@JXqg(JHe6$Mg9bLoxsVk`?NA&5H zdz+5AoLm)*(l_g@P86e${MNt8NGC!UKXDE3*Z#@4&ybCD0IWXjUWp#`5 zP~;mJ3-JQKI}HrfE{d^zI7oid24*$Q+EaiJA9gzMVemG4HSMdzEUDwKlE67lT<|QH zn%_xw8F|**T;g|%hiW_9pV~=j`H3$8d=Kcq~_Q5Isb>;c;u6FP)>#er$^9U3* zgeEGb5N#b0;+r#OWx8+8BbJOeXP-(wi>g9J$ zir_W(QR^)va{s(1=3YHD$dpRFH7jd@?g)U&xntSNj_@-6wRi! z;tqJDBH$A9v&NGlVGnT$`3yJOrF+@dhe%SB=AKx7E9`EFdKhKB_I09vRmN1KSU5U) zr#LO4sN7Ch+7QTib2$N@5)U1}l>IOc`Hb&p@Vee$ikU6QNeC=1U#{54g%D`?h!+AE zx}~)h3LS$^?0mCCT0G0d+5K(AgtdaPE2` z=+WI3FdH35%yY-B^^WY#n_oS%WxwbPnzd+l@ta3(65nh796hC$1vUQ^sF0%I(w(AH zZ6_Ye9tD2tBAs%3_t19%tQSm>l?tQE3}cl~N07~TJd@xLsi*pL8;3X}+6T{ytW|!d z=^i8qa0wyq_VzkWw|Cja_lmUa^ges)eB^}majWUV()OO){lcPRftFfxM`B4OPkPV- zl;JLZpCoMOsUU(iO4U>=Lk;z!O*du_yjrO45bE*btMYV1D3>Nmo>Q|R;u{F&30iIk z?^FA<%X0kwGP_WaD*v!F-~I`jkyS#BdXY)ofrm981baVE6TX>C`7DUvw-In4ubVJO zk;lzZZ3R`anm z^IbvlPN_TBfg17-o8#D{xCjKtv46xMU-i0Pmc8>AIKe1(bBrbVy*8*)9G$OS`O~N7 z!HhvAd1`yhaTSRtxvl8JJB*8nAU8OV6O2F48{+iaio0bXd*WKl0m4Hz&swwA60d6a z$-E=t+i^vFfLUdXAxm*^d8P@M&^?SI(>mCl3GQm#2RKx6ChOf#`Z|UeuQ(rns87Iw zYWp}UTJs~@uKPmVAu(f>%xhlb`Uxd|K#oOhKtBk5XG)Ep-ooX(YJ`Va;Qq^~X?iFj ztsBeha`_eY+D}aZY$grRFTzv4bz75%J1WWhm6)oO@CO2A3+g9!q`ybJAUBEwnCQks zqHM@Q*HEE|s#E~J>)XcTxh+GNKFRW;d~nf8#g_s-dh&K5gj&%0!ZkmesLtjd zclMZ&ktIv>S^pZzSz*ujor8x9=Ds=#_2dvbk^ER!27Pqo;dW>hCB>Bk^g}vp+qE7p z=c%^gKQ*tqd_s7JfDz0nCAL!m%vK2IiOQC%}#o-~s@P<(Bi`OaLi_+ZQk1 z5k2*y)+VWmneAnx5p%T0D)Hgow!-&0*oc&>kZ-)7X^>2FLLHAS9Qw~K-mBD7XZPMx z8ncCOz0^zCZu*Q0G^02yl7|u7>Tw^3)^KuWBxzTvVRlAFk5(7|&@=(f8h z$q)0`)NA`+)XBoY2c_rX0|6W=53_m>aAB{EUV@%R?CG8N2VngYHFK?R;{y9xPP$G6 zuD7G(o7$JAY1#NNBmj^~oy&Qz{e0dJ;H(!F zW)geeq+*+JIhI4CQNj9gc0VFzgA61@@@ISzcMk9d>H*ue%;b&+hud&tBL+eC0AsFn zqGeVlxWXCo{1M=Rj!qHn1*f_`cb?(!eO=~b_=H?7cWT|jw%)2e9Dyi$lU=EWf&Uah zlBHWdR`(Hnl1nd}uO7OStF9CiesRX^j>x^T_*S`8YbWxVci;vhjCeMg6?U)D9D=d% zRB-e>pKQSpaw)0fO@@N+RVw%e>5&EO;z@zb=88q=)s6~WcrL*_Wni|NbQq%UQ^M66 zMCg|bY5>eZV(aX3+c=mym!KAuGR}J3{20Y7CW{saxc1`R^{zS?%6{eh0l*~(4{Y=K zAkedW3fRjn#!@}U_H-ehXQ#X$gH8nRONTMbeejj<1v{d`!E1m!l=`M}Ox3a)QCNkG zb5?lg1=eO8Lef$+*7B0f8!ZAqohi5`$V*KFZI%g-URtYcmUqcvyS909{qwB46A}KQ zV;4C9iTQNc^Yauesu}+p)N_3RxS_4;P~?4b-k{Yo9G{}vVbUZA>snT2_Xf!-eNVM( z%gZa~8;C1Mug9K(5db7&&0<^x6l|TCooZX&SEqbw1dHU4emwhLZmD4IQ^iMLTjs!K zR%x$`wfPg(?!H$*aeRsslCzBkTh3!BE1&h$ky`MhIM);jdUhjW3CEZwx~L~(^e*@g z0~jJ`K;<1=Jc6|Rx-Z*rN(}&N2r*iCKF!+|!|!;BU#RL zoon=b2=xBe)p=l}B_Pziref{}`A2$4QTx#|?=50uvhP80brY5P?ttd*^ug<5>#NNh zammXE=<%oz+(@vIeV8xOBj)hcaoptze8ENrP0swWZGhQnwfJv6WaLDtGBta+$sa*% z+K;)68=8DMY;-5Z^0wKvtyBEL7dj7SUFf7==DhOI^_}GuFHY==1|{Vc4IfGbMS*H~ z1xYs5lQKp>6PiJSWPo_tQ7vG|NxzW|bk%*yY(AWu^;l;IDTZ*g1 z*wL&}g(9MGG2v?*x`VoBSL1qajvK!1cv?!acEa%7v#9EpOGKURs>g+mI#|42&8ThP z!$2sMuorMUTS0uC4i<1-Pk9nRhqr(%R>%vp2ZnM7-45WcVbWuLBk!s7bQ7I)$7!v} zDg`Uh9SG%Acn77%0t+Ek6r-hY-gayG`KH>Bz~CVZL?4XgBxm|U3iEMpB-3Y@SPKaR zwVMSyz(*VE%B&oNOmxJSt@xQrageBRcpY~Ipfdg0XB90#rcGWRE5oE(1JKDnaDlDt zu)t{DIMRfeu-&8D$9JdT^u?SBUqJvw1bqAA2Rqz3uH?6%2NCW6nyZ|unx+nW$GdxD zJsm9ES%2oyswS5*hk0@Ea6#ql0~463%eowhRUhsLE=`0Vx`< z34$j3Xy=?aAGfk0OI_o`Z$3NCO1K)jD^u5{)LeSfm|%*-`^@fXDVtcM4vMA8=NcmA zd6BW5O3ypN1H10V+#(amRdL$&QiLcWUe zLn4g&2n+pZj#*AecC3i+%RI&FdwNl_M={e=>rsqaqcHud=|ORlvIX>*qwlFqJhaKU zHglc-VUL5dHpT}*tvb6?_@SorqCDIBFbDK0XXxV`JL@);W5Wj{zB3?pW%&~bZZkf@ z2RsJ$zRod*As(yB(BB*m zD=hPE1SG*T^1T3P5FU@}|C(hqaL_%XgfHpajK9)m#B0NA31Sgu4KQDJH!k29U?r98*;!O zI8G9GN(pu9HduCke3*z#PD4?rVwt9e1&qFDOiWTKiS1WwkF)AUXun{)x2|+R4TZG3 zzG&l7g-D1`A+aZuw0zxZb6xpneK zoQGFmh`3w^X@)LNWOyo zoZqHE=u6)ogW=@bCCyH(a@;;?hizmQZC-#xC$Th>t zeAu&%v#yb*n2mKE((MlH6V%5 z=(RoYeMWaNQOMA*_kYf?b?ViTv(kXIkE;^FO>#ZJsgQ34PC& zR6p`QSOYSeo&bW~$1&N@o@kX`pMM#1#hof9yjX1g4%OhDN1Zo`E`5jV#ndw!8vbhp zp&-iI3;i(W=Z17V%9U;3w+@nDY}b^~=v~XcMEj}WNkTj((Vb81k=cMa+$4|DyWfrO zT8lCyX;^taJC4{IEMIzr=}3rQgJR{C(H+sIk4IV0O@Pe9tus_qes0IrMM(`i)rP2e zB6SAc$PFnWg4ZFl`WcbGs&;(~EJ^uZQ#E{Nnw(-lxaLW7eE_X4Ug3 z=@=S7%hy}C^J(hJ>RTsul{{KsviA4X1k88%!|_QUa5Rt4(ssIYgm77)Ia{4yS0qB^ zz4Y{1v4`8ZzRDTcamEe#Yh*$vxOcek7#38KeGO%aKVtC>3hpImLL02I&BAi~@qPY~ zfRy{y>w+)t`ek0dW%j9VebFdRtIywwohD2nclYk&kKj)j(TeacZabe2xMD0;pBltL znYo`!vxwK%v;gyn6i_VAe1%{a>$6+IjZ$#Uz2vty)ir0OlLadA?@6IO z8hVo>SOOOa9|`3>6^kvU`Qy`;OqHbCE$#SAEV|O|R=9Thp8X_q3|TL#T9k%WYBn>J^Pm{h;b) zM(%MeJC~Qq+sCG=PXF?V!2-N4jsp50LWE1r9>a|9|eik!AH?6P-~ zXCinE1N3t7=9TwV4w0yG;eU5g;pu)ya{1-dEf1UJ_fj%@1MlOHs};SeI!1NL_e(B; zG{j#(g-@xx1#-a@OJIh7&O))Q=l6?NW$4%+x9acZU)$|@1Er&aPihbsz7kQHsK5WPF2{u^gKF#`3_e!ssYU|_J@VTE6P5~K;%Uh_;zExRp5^%@p z;GpxJCW#Bu>*PK;!x4vXBgz8*F@j`J#MD;0{D3(1r0>D&;gSr^Br4b4&Eyzs`$*?2 z+(eA-7)GwNdFM%H+&bLhvUdt^y6Y4Ron|WKjXieD%at}Q*b9OtNAF&0UeR=_h1(Tj zQA~}wRzznmB()K%Ke%PmEobyj=-iFEZ&yS<@IZthLvygpywJ@P;1xbc(Zj#Q>yBB8 z)3^OFeDS1%?kLoWqSwB!N8Ox*&uZmI;5f6&)y%M-NdG|Ezs=&*6s#$72#iU~t~<#C(gsAEkf8rTdHOrSAG$`N6k%L%7rt2%Cz_075<^ zQpIbShBoNakm&1|$Ny*nJRVekxmQ*kB}?q$HOE17XPZ&(J|@usvgf;^0#2^oPH=I! zB3jxj%iXW%xkJV6o}h(JBX=S&98(CNEWMJn<>Pj+u=1lm^uR2`9y#dPC_K{0gNG~m zqL_|{?&hXG z!e_szSDJ)0YS{_Yz7NxHV^N>e6hSuU^EOIWnq(J;*M2G1NGO@%igVhRpvyaB4%0iq zS^L2MJ7ZF#PJI_RpyyXur7RK+xJEJl$HC1(X~xsAM*Y!9d1a&4c%3VIbJ@TTX~32! zjh?vEd)x2B&7&8eb4Yr5PXR;*9rX)hRY~3#p025pxK!w{{8|tsAJdYu5mrrK>P-_S(IX zbM2WA+QVsAQZ;;28+QVIxfq4^2j5@2y7uERmCp?wC{^^Jpy;t8gmr++y^6M~<-_Is z!XNoP7V%f)LCUkES0N?!!%U2fX0B5)#Y&9F4z+}Q9rkgbJ|cQojztj zPSghTpH;8A2!E1zx^SjTmjS!%vFmnj%j-cl0Qf?~IM-kRCiP=ydMxnqnNB5@4FxTp zic1bJckg$zJ@_CAkftenf=!Oi&#&y>AdTYIA{56%rgBqh&^!zOMm|KPmZyAB^*GKE zYNVHJS4RiREv=!`H)83t=7rSApN?W#4BfGglkE{?L=idGYrX-HBiVx_^11IFM}0?? zjs-${w-7qpFAy|)8X}DC#xiRWE{P6+{`JE(Ur-2i3Z;%Ht#)2}9RRw{x8Ax@&fW+! z;b>-a1_i{CAW$qFm!Syq2kK(YNlxS35QaMohr-b$L!@Fj2df97E#hB8E+xQ}vxY(I z*@?BIs*k6JMu9N;z%<@H4o2t}jb4j1RkAM}rZh8+$u$d8{he;msaRP_PPZk4yb$7{ z0l`FFYiH~XjhhI5Ai7TcQLZMWkuw>dh+UE;MoDbdW3qzu^tK;RzJE8N}ex1%QSTdoAS%F;T$}@L>wzif-Aot&TdjIXuKyESD+6dmi+0J-C(a+ zvFfrki+GS-0W2uYoJvh@R#{`&h?$jda)N5ofK*$#hwQbrDWw+Iq5SUU<6M`SMm_@V zW9SR@kPo-zhh3ga>bOPd#F;cUPf=XgbLr^ICVtGgX00mP3FX^6;kcf47*J*h*R3sT z*AKUO@qJ9Vl%*z}AE2W6C=Mso7NYylYqQFzSZ z)+UUykqvKP2L79j#my(%{=OWx%mHQ&-wNyGWkyH{I0v#U#c5cG`)*7{6n;2@i(I@( z!u_NX`tA$Cg;y=m4ta5jlkO7c2ihpr6m9M7ioig~-xKYDriMUP@W~3P)ioT!pTnnL zZ+S@UI~!mW3!6y3%78)jiq3UsJMu3qoRnOv!yq%n2ht7V+QWQYzS^Lu^6w>D3Ce#SC8#uuVz9$z;}YC>PhRUia`Py-z}PI93uz-xikpVEsA? zI+|(1`qbrP1hxW0Ab|Ng??u(v>)87&Gvdu363TmgnYljJLp8M7xIEbulijGx?WF#E2kCh#g?2$dQ zg%DZU31#mY9W(QHo$mYdxxc^1qkrm=!3ORI4YXs2v?am_KE%`7W8lJs8R}yH$DN|qEcXoF6+2A@+B%lIZG>djqJGXdTpu&bA0BxT@ zt4g+_JjIaHJa*gWU{jDoMQ<4XZgz>NOwc1-VG${rLDht8MbP~OyMtKyc@`Pref8L5YATTw46#H|%*b8Fw;r4AC$G`j;8 zJAo0(D4^-t$6#+1jtGet?n?vPt0zE3g#RTQwe^p)F9p(90YFwa(&JT9Sx0@RzasZ9r?AuNm-rF%Gwp@R+wPUmEe-3RkfT<08xu-}1UwYQsXN;d};#t5yit&(%UJLR-o*v-Kh91@db*B`wW7Sdkg!(rkNRyPk}!wJj#gSpMAk%Ia>8II7dMggdG^#iG2 ztk90%Y(#V|eZ(Y?y{&|mhrR}y%=7nA48O?g2IeN~h!Mr&haM*{Tj_>Dx3h%kED_~- zS3`l=LpS?@RC_JxivE~jPD9rT0%vA3vY>uaG5pNmIDTokQ`yI@nxA{J(1gA%*Gt!` zY0|tHB1ZFd6v^@rnmUTfSXMBy?V6$4bt@;MvvW_1>)z$F?j1h){>LFA;O>#b>7i2R ztnyv|K}VycvoM^Y?Tt0N$}-#q9CMFw=fffdW0>zCm)hKNFRe9~^237$6Gy%(*(N?FZIDp_c>k{CC@&v@oj{_dPE= zLNU|}9n5W9Up?&EnQ#_0$I8qr?Y)v1WsfBUd==!i6gppAMBfU{0UY>hx%JHuVpyX+ zi^nYfEtj_rphfTQKkf`>U3Rf}y;QFvXTouC)lMc*G#sdkDeJ-b0`sIOzSz?LAQx^$ zMLk9d?=fa&QPHx!`C-U~M19$kOVl456^CGsyblVK?3TLzJna8icKjGc^iH~ zwnK|4UstIlYFl3Sp`}weAmuw&38B6lKLw8s+r&uQrbvD@(5B)lxRzjb!_oVDadUa+@TI zBv!5Zd+_sx1%kFmmF&>@&qQ(r6VnE(#LIo1mrh=;690O~TO zBnoIfSjV!gRHfn*-?ic5-ehB#yTQ7at#C|px0M_=*$q6@T#Epk#T|xGXdyzY&_&=?FMZXwAJ#icVQU6j?XT|sqt;^L% zLjHD*3_H{$&h6pB@CT4TUgv*SUdYKeO0w-SSU9()3GGOl0%HfCCm0(xEIkrWv2KUv z9-L~2I!p+@NY=Pf`q7m_q1>M*R9p6BiD@OIEA%lK2o7e^!6Rnt1H=`sbQjKbuv#*~ z83M^W{hdNz2Jc`in%)M~_Sv!!h_sQ!4nPC=kePF0VMv}D$+ttovq7QkcwHlJXacn{ zt?I!-&U)o@F?Nzl?W!~+(U;Lsb_}zn?lW@MTM-_%Uur@_pNKj}Z#}6r%Xjwtnbm?{ z%69%H=5@>TWrq(%35q$SSKBo{MIKt9AQ*^4=Nb8-D8sqdTvNyi!>{KxY}>G5-jrY@Cmchl=dG*oeri8V(k`=CU%Y;NSd5?1AK2#QJOjER2^Q7p~D zkrROyxI3B;I53@6Cggwoe_silsV}~c{q^Ib@&&57_}6CO*7f{PCNHncIAsZfeiJbf zlGW76jZFj)AR@kQ^rLX7TSOYQpAC@`<@n@d;n!JJr96&nl=btX&+k5{E8Y@L91U#S z=gM%`>kg$i{wS`pKS1-!2(Sx^~UQ#R74Dr;+I=vZ_h8aScX+xalu( z2_6X(Cp57RvYh?>I#$7{-JG$JNjS%52Zf2Dd)mc)*-^RpQlNI0NF$x%1n9K#F|c<8 zl*y`1$A`uDr?0N`XPhG+g-BYr&9WJrOM6V;9O!4r++CKmeoDr!pxHfi6C=d%>QWH3 zm$PFF9_5Qrt)t}fAf+3smcEO}DbgM6R7(h-}q{bG0Tm#W%>sK7!cyL=G+TSih4d{M_Mk&4$h_Ibc^!=Yb|jKo!ie>a!zTuh6+x_bCQV@A(D_KKgTguKbs~Xc+(nQrCT*k1;66y5jM{{O; z9|PL0JqDKDV_z4CMzsDMC&*6v!a%@+P0XZ(_En@$j7?MYQpb;1d+yt9IX|rl91ni- z65%I#`JU2ZVY>0b^ze-q#_I)8nDqQ1!*mGGrn!=;Xs`opyEGp?a?+|f65|?abdjPPj z>q#M-_5`Kfs1(ZCtkrK`ho=S;eLc6WawP1j2J92RTnpGqeqY2|#MiFXv4yZ9BV%R0 zM_w+4n*IJ5fS)D9u;4BbKS5N`_)rC|Pbq3vsysw<$U%xp+MU13F>46I(v;`pae=>K zNeI7@33l-gEgY!wFb9Is^SyJYY9TmLERM1N<^rzOdq^0wFjSMO7B4BwEU4qf_(^lS ziV(Tz+Uw{Hg*!)ohEgcTQq$4|bUj)*YpmU>jwOBk+Y)0fklLa6aHnt*xdKvCh^(~v9?i0GZx1oJ?@V0+TCJ6Cuf5C)EiSXo9~2--@t ztH$lpI$$KYe7H42E2YFSg0y1zWK~p_9G4;QW}{!0+{w6YRo?0YN%|s^-uK@gyDM!X+!43ByDoG z6jmKBE>cEnPc;37R+#F!0kZ%U!bILg|Dh4=@ZvYt&24=cBd3xV=7#3a+Pj>3Li6Ltpbf(>R6#*i*zDsm(~qa6lbUZ9BhZc6snEwf5Q4Hh`uBrjA>I{CRvtpg45ihIrb&-$mNKFK49VUt*EZNJ zEw7#DSzN;kv48s^zGxK`B0;F>;dnh-Gqi>a!}K$dUdcqrAMt9?#>%$xmh_KZ>w4Lm zyvWsSa4kp1%CArDmxpTiuAJ(G60)Rs(S*-ieo3CX+OEcD7;D=wvj>Z4R|oji2mk<1 zf2a-07ErHFBJl);@4!y&6?G;WMb!%9)r;!Z-na!B9UI30k@*z*if9X(@LMBnRd<^K&#!W zEyp30UdVvX=28`ngF=^Z6dE+)lX9i3^e`j|-z}gdLzig{2nwgYBJH_+(?YkPOLakqbjvVYnB)Jspj%iHMa zXZTK$RL9~@Y!#H36!YtJ>QT|D0vsW<2CV24MT%3rzYuJXN&izx;EyFJwo@>PzLoSE~r86)@|vtspZ99}$JP=_GbIPH1DpvyE3lbVEi;M@pM4Ouw(drD1B28@d{Z?r+7a?!#`94|Id5DZ_o^Ee@yFsF)Gc zFtIeneRbQ(T>U@jX{;X}$}@uALSsljNyaWt|7OYL=1bdd73Bw%pikz;d~pEew)7Wp zOxi_qd|J4lBtCy>u%kYNxA4iG0M4S$!!$m}WRhTvB%z>){C(@uo~>p}6OUGfeC&tT z8&?U~Fg#^%&Bht0Aq!e%q@v#!8d_+mEgb<#q<=SbDZl^9faZ9Rnq;FM`s$r`-lc>S zM)6}jSLiZyD*ht>WeJ`3@P*CW-vu0BiYFh=RZ#;Z z&O;nXSuj~;b{X8d6KsRPx6@|#lHK|tv)MJv4ye+57t7OQSsU!+|&qL=u21jbfBm%-So(wAda z0^B}lZp!~5i91o@!#RG;=|hLUKii*4+z$*P>wcb|7nTmW1scDZ;iZJhNFZ(F_eppW zDJs5=Iee9LxI6xfA9STE6mf%OS$quBXYIOWVDCC)F$ntIBg%J?boCWP6;o7unQggE zz3(c}#^F-9i3UC{9e0WySNePJiQscQQ(2|oG`3^A_9y8=*W;5EFY16vl}1jd05^_{ zIV99x8Xa$hcnYUm?Nx8-+#|6NS+RWhg35*p2lak@nynf>O%sJ`Y{=s{*%E_XIgpKg7{NKN|c7I#y z0LqO`8V&)4R%xLqnaa?roS^Q<{wgN&S~SR~uor8!Hvcy7(s1tU0(-Fnu zuvbJXEe9}o4rx+GsCG`$EvQJlow|xm(BoFti5DNkZ~=@No#Gt>EdZ8sUclW_c1_2kREq(N0qj_7tmnBz)Ew@KUxmSTQs7IdWd)pjSesCVe_ z7p0njv|y@SreEiW40=PG_aWTNMRK>QoAbde^cyeU(%iF(HI7*_0st6yJN_NF@4kL> z?>FWlY#lTp$yIq57M@jt@1PF8gE#vA1n=MPzzt}35(7BW2+kXNq(x^zy_=C{q+Q%5 zNS(X+g3~ZKN?@f*0LXNIiDKpli2vt*HK1U=B(QHaE=xWAcg?EcTPZ;-X{rVRpLvSz z0p>;=7$Wz4mbDzY+hRtz`D)$XV2nM}oVpZ-y>@P7bfU3LANoVZS6 zT`=D3bw!Sds3^A|dv8g{m_-VUnKYfR*1OCvmCY{&$1WM@ysnxI!x0fcAE*99(^Fa! zB~pKOM1Of zTFG@a-{*(>4=}1TvHyF@#Ry)0*!e+c<@I-NNlb{thvURt5%-$knV1TobFwz4SNeT5 zp+f0@a;kcg-f~e)yZv++21%)(k5e$9?wCXNHpcD&U*e6F(@RUEmh^j0h8|DnP4)@S z>p8_|&nL1~D5LiS`Z)1@X?Pw~<)?rqy%zTkPRdMXEpI?Xgfu4Ouqo4=v;DO~+t^3F z|G6wasLld9+4nTe0sWzwVTWq1MZ)5C4D&!?SfZNnS>uL$r*7?AHn$Qg5q zDDwGxwDhW>T?T5;#2Hj|HbJS z(*lmAD$oN+y~Ex)!*7-tFRobF<)xORF11|TlNc7ZyO6W+&|q=su!k@-5FlG(0U}G6 z>1$$9OI!@1AA)nGX7N3BwpsaXxBhIO{o@zKG|WYQ;;)Z4ouR2{FrMe7kTy!7;h2>p z0Mil|z#o++H_1AWqW4^FUbqb>qhU0d;YxuLSNs8*9rv7t$R_JZNa|AYWFb>NLF00` zqZkS$09vm=nHYMjg~+`g$53lA2pg^^LGADM`f7ed1A=uENW=DGzRggM+aWn zbpc_x9^9T^3%?x~B5uo;Jy(W=TWp!@MQ>s(YB1 z(x4AgH0jcNi}tdE5J0yl()dZ*qWb5$0|!lWE|-_Yd4_#5^NtVwfRXg__PNKZW5$18 z)Ogvq9C@AKguM|`RJZ68w~GqP5bDO; zr?NT;3q)Kw1LXptldXuTCmBn=x00>l_1OxA)BAZ8S@(gG(1m0B~E@kh53 z9Fq1&9L`B0O49bapI29gLg3=gT#IRL-{{N*f|K@p*9!fi@2L90#kbxA-HpeL4%Phc z7jAR|+Ssi+;;f?{KyQ80@EM1v>?JwH$t?f`mt={O!NSUD)0d(@5LP`_kzA8Q{v7%8 zlNHx^T+Wq-Q-iHcj3UQrz591@I02XJB+v?@U`r9RH+%yp8@XX%ymZM9kTemhenQ4I zPbc=o7esKo5PAf_1UUEefNyv^Ojq^~8(o&v{6lttwAdxjAlF>_!oOkLI78G)P=i_1(_NYbBlxfID(S=l z4Ft)Nw<=-^`pg0#qha~#ic54TYl~HxDn3bX)HaB@4 z_5fT`PSNXZ&jyDfwMP3~IhHCtMgDzuGj`RM%G$pEJyi8?)BONh6XpwgF~Sps;&|g+ zFyo`0+19mXc*of$$V7&wM*s*jLGPZj-)$TceT#6mB0_rs5Zb1mtZTpUT`Pf;G+C03 zR(@+*KYv^dNbS;Dmj-lkH-#@wHKS~!dm4nQ|NcR=LveHBNBt>MfRRhGCG|E*(l$^* z6$@~-1!k^WOV-!Rwj&b|E=H(X`A6u+xDzJb(MZ?uC4P>!mbI+~}Eg4mEKkJk;x! zoZ+`ZgWfeVoHExbPR`Z0l+z3OU-@G29;g&?#w;HIkzz|YwA`|>Zn<4s!yLf8@LA;6 znDgQvK<<`ic~;0Plhb{>{Y7QeBOFUQnfZlL*zgi*)TW-|o$pmo^t@3(XJ-`0XCTtd zQAMQl>m&Ga>Gv~kyn8mG7?1+Fy!-KBN}feG4O3yaDIN$r`p_dKiJBUSm}}m}bs|#w ztgqpUm2+?;2hGOfn*OKbgFi!a1gI~Bm*AJF3?p{tCyfg|N$#Y{d(a{=z3N2(TZY5% z3DnI7Fr``poDmkV*VZP@cI1>uiT+;rBtYxX^!RX_HRjU(?a@t}1a1p7eHe!L+u08O zl9(;M_J?rp`t;i-Kmj&J4^WZPUD^K1#s1YFO zuweldVWblanl#<=vg1QQ4j#FP>qT73t+**s13Iw}kMIPya8#`J&d!x(r^!T+zNAAo zf#NT{T7a=_an(BywJDl@Z5B@=hn;|CBQ!-D*$-pSj<~PVI2n#pAd-^#sg(PF`U(hw zW=_ACfn74jK;9)aM6itCHYM8Z*l-T6)>|EG!7yC%p+t;3TsUs&`@lF zZxmPNfGbXl!nc1F2@Y*K7HmvAXDB;cJI-dr?}UVdld~Hq0t6U;uGh()l!s75PKq*N zjU

Jcz`2(hp@a6D@RhHsM6Q0A*0iQ|u{g!x zjBgI4LSfLdxpK>8V#^K}d-8t0L0uJp( zg&aDxv$IHKAW*11Ls}*t`^DB5+gbs2UR*bl2Yp6kRj>PBO6DZnEyhIFdld+x%LtX^ zvs5qP(@vZbI5G~Vcb@LoTpubKg&QM*`dRtK5(w0j{bi-Q)eRBJ-x@Jj$v#w7)qy}k zDp&+98xmX_LJNo3c)VjgxnmE*?XikX_lg6#>UL|o>Zw1goL5FDgw!o2G-PI0+2C+q zfv?2b)GFN&OrgkGK8eS1|4kh2HhRpS`s;E?(%GwS+7;w%=>r)dJ9t zF5>dhwlo>y170+p@Y#A4_HA6BI#e37Y{iRNm2%E{s z#~d8Zz|$rDiu|T~by9dMm+v1d%D(B%&I`$gL8^i+0rL*}vFh!E!JZMdx=(z?M8$F8 zHadCpP|9~XSLgdx1=daKDIu+@tJ_fulYyK=OG46Xl>W?k;Hy`Iyafv|0-YD#`Z_K0 zey^;gWMzGDkkI0TZt8Hlk&%72Q%PUT2ZWpBVw3)6z*JYr1}YgxTew;rW>uaYKsa63=*qB;(SjLBIOLAo5RsHoz+ zV5`1~KqGe*kqK5v2!nA^sypGGED7^bb(m3G;VQgc%vBV)JVk;xA_f>dVpTRJ?m~6H zBUDQ}4Pu9)i_m(>EV#uX9;^QFt5cGpjt&%MKe;Au{RD1jR4fR#cXCQ>WA5il5$V=c zmF26L5NMb$%l-abTkp$JjJd+UaZXdWKlXXYpE1t>Mt=7ohZZ!K9XY z0`|p_*iO-jV&b)IKP~&(rJ|*|Fe_k4tKH;SuKaJSv#9PjVLkNwnFY%mYDuK1E1 zTn1U$!Dvu6qd}SE48($s1UDi9MI^tXY`vKC$G5)usr#zN?_QXhm^Ho#+~crcfV+p@!KSI}c1pSuo)TxZ>$7UUc3oUo- ztEMQ>edVD2%PJgYF?EP~H)NYloa6vG`ye}ce@$*=j5)>k(#pE!T(uCa+p z4WilU3W}kr;JBr6LO$S8iiKZeYr##SOd}nk(jWc@wcV0NIk0_I=x#0(*-po<@hWWB z;#}=CB0tdUvC#0XL|do9YH0uV8nEQ%b)7eEX=ur6znHD%b;tQ-3aiY3eWO2ogfem$B{A6V8%BB;U;uDunnfKq6?@e-^TB{)*G)lp1~^+C5+$^ANc0 z<-g|@r?gU=KK#_uQOgVBZ%Z^TyKI<_K%->k63!^xU6>zI}VkUPJ8gvQy&Y8wV#&CxkgSS8HO9Wm}VmT z{!9Aftq}Db86kxa9I`>O=lO+&5n!?&TmRmc{um2Xu$R8UPd%VCmys3Jiug7Z%9d@* z74TTm!IMq?l1JdLz{kptdqp%^xdo*H6_=w8bAlA-8yqa6yhatJT5P+xV`5&OxsJ`w zLQ{&z-s zAB$nJYfpiNbNo)FO__m)v#4-LC7XG=XFSyJY)HF0?FXwlZsmp4PpH^O<1TDIhloYKM^_gw|9L5Y3 z&{RufVfy>6oc?!-=Sp>$&ddQzQD4LE&iaeOBSoV*g|S>|#w*{uH4!QL8$$P1xAG)N z(}N({&Tc&zyPT;F_&h z7)qsbQ3?_Npz^TpeRJ#G8XfH?;;p4XMsjTswAeyH@#KU06q?qgjwb!r=3`v2f+c5u zG2@l{o24aLeW5psFFc%oNpc;A>pb% z_mEvTC$T&An>g~#%UuKKN508M*T$O2JDXuo(4hBs7h378(eD=fYM^JsY}J*}a|Bb# z#tYLRc~w=RWE$`w(o))eVyY;Sw!u(E?(>R~x-y;er^9$o)jw%`Kqz_|`~=(elXSkb zJy0O#_N`mPK)vN}Yhy_X!fuJa?7{m}`umQ&VEHEAvY&)m`v#~nvXf;_NiEL~NZwkL zuiE~G3<~_`&$_N4ag_q{Db7pxKE8Hrd9Q5JO$g+yU;fA|cIWr{YA`g&zXAc0mF&d* z*--Ya=BYID{HndH7Af&hXqqWZuzn|$31KFVj*itu5%;%SeUv#ULc9MAT^}6hrR1Vc z--feFW9r)P(P&0Z2i{06f7Ni(Cy(oj_6v=Q^Lfq%M?r= zuWWQ;AHFG#Qqmv(%`yu1I?O=xb|EW{P20K3K6nkuYwK<9B$moIz^pV$)MV-tZ<+f_ zPNB0JV)YH7x`i3WeEWWZdEH3!<-<7aFUf>GB{g88iC>i7FQ4YWaKtH1%o z5$A!nC%T&-?7=r5g)OKz>(|LhNrM81?Wahm*~8=QLHdi$9#>?lCUzz}g=Z6`s_n{u zT>*mSh6>wAroud(#PxdRLVxyL=m zy%g1gi;X|kT)APM|5A^z(d2X zq?Q1DSZ8@Txr})RJ6dmWb!?f})YKdS2@OHbJiF3q!Tc-3pgsLo{OJ7HB5g6qI9&r| z4m&8tgf35i3E~d-1~-zs9$zdNx8L#^UhfT$mbf%0N5?bx0vq+S#RgAU(itL+CiECp zjYmG!<|m}p+_hLr$@p->r`-*7=8Rn@QX{2ZNI16Fk`Lx5vT74tWE78(1y<%aNpKz;`ekvBt zW9)UqdpR#yL6FSpkC*RyLoe!_g%Ey^tnqc`Hw|x}LjJ69nuRP1PLQL#C|{vMkirSc zf4oksOM5?WF`@@>hzYQjgK@F^{-9Xt)WR6gPN7m{-f{`Z+gC06&Q$P!QoTn_P5o@o zi{Sb8rNTzxG5Q7akkM1F!$(>&ZRtEZ5^Y)2>|Iqu%vBR0M&U6BAn2=uG$aSSzLF-( zXo1raOjU1uL#t*Y`emsVdWpUt&aV@gcWC`B>GxPNCxeA8HNx+4&l7ml(FvKLQOXq4 z`^$sRV7q6^xVZP*<%)m;N~CBT&nW1L4b{@pGImaH@5`;Lt22R_4SQlnGCDg2wqnJ) zHdfsOeKV5<9TXHao!Mv8Q*fkjS|jXfx>59^7lnakcXR=L+@Tp^1Fskf zTr)QO0^nlh?|&Ct7zSeKtIrB^3~fm3bi2M<;xZ7q6}k=F?2W^%U6JE)*}z0J10wnZHv^ zK2`8*ckFsS)rRAS=_ibPwLMBukA>Y0T)T9xXvh8zy}s0BXV@t7B}uaix_V+Um$vZ; zu(Ff}_iT8bFcnWNA(MVq3C1#KKpbZtbUeHCn&^aVtvlTii>*}9dvApX79YW3Ztz`b zM1)BXuE!!hU=&Bv2lJbHo+HozJm2N$C4Xrm2E`1fKobh%cMrVl9SN-dm znTdG*iy17O?hqHfdSd5@xgV8!xa(jyA?w`9`cNJ|{gViXCSZ`PM2v;db2{ym}k7T+V5V zV;|LmwQI?MDe5h#R}}8oa-M9jxt{LSm1DT{9baZ{?{zgcHPEVOor&999d=)iStjEm4>U`y0(hJKYpB%fXlt+>t zMAvjQ@rQ_Bw__cWFlWqFRtP&>k;|b;o2GT*Zo6clA)rR)A-}B^=rXwNCGpFWcx-zk zVi-N3F>}AEG%1zrA_-O`eae%#fLSy9AoJs?iNr{Qep8#9nla?M4~cl$7A3Wl-Y5zet>) zQqp6Q${y>m1+7O%nB_;gZ-B&8E#y`vfOhLVXBwVDdaeTWd`gx&^-Vw{#}P!^qC=t~ ztWi<4>&eT8{sw0b0h^z2mX4g-{Q1BG8adx=!V(dg2NI@Cpp+P7{*#;Xv1nQY)44_<*kdZ)o1koO(k}jxi z<7}t9Sb(}mXW!o7b&T7<{7TFunO2zulmvV<2E;+p{5~&}nGp%8g`nh~akmJ|^wKze zsT=61OsRHIpZ)mTG1KOCD5(ODI)lATRrbncwJL>zW!%*=j+Y0wD|==|jQ8?XK^e+6C%Dd@_xSBlp0M|l-~i!!k@fy;lhRb@KG=nE0xSMs){sl4A`GGks+6@ z`QIM^p(1}R4Cs+ zgtkPLi=gAS`!YT`U0IS`i&N0Sy1+=N_aBSo=15Wu$4+%NoE=C~j2<^vSic?Z)iEm4 z^;Tx5qw-fhclT{2D6o_cuu$Om6KvlkoopC4m$P~wMLdDs+*og@7Nd~1{K9{_2*v|W z9*iS1P5GUsVxXqi;bxF-GF4z2H~&2fOBYS*h$D{jWb4b44Wl{O*%BghrmaoKyTs|# zyAsgC%KxSOm_eNW>bU?1ViybJo)_dUItidEv{Kmu9?vtwz z_zh*Fce_rIifj>2exFH9-isrqQ5IQM^*;YYwiO+PBN@E=3o)lg|zg$;W z#nm>q(9^{t&ah2i3Lk-Z=>vNB!+B6mHp)$ru#q}O7t%koAeK&KWMo1ZD0N@4lFR7C5)l51A8YVvz`o8TdwP`6(g;3~V6*hzwIxI_V1hDU}3 z><=qZtn_nIW}H?^&f&}{CcR{;bv<=~18pt$2#3;wv0{K+5T$oTUOvDgl2ozK7JY9kTT*{CmQg*~o;ka) zGT?o9mHOvo!6Wyr>gSRUrc1N40LEU;Hmv8i>)So}!~?IaoYhJ)58|tjHBaaeyq@Qv zM}!S^g-ke4pZ?5&(a;Fpf6J|OB_lcb!qjC6aK~ZiO=DrT;+in!6)C*d<Nvyx5%toMUx(8ux5z5U=ldg0(wq0BzPPZkuqVZ zFb$B>Up(|STb!p3eeTqcw%y{JoT~lN{V?b29i-pqG#4bC$8`kL<@?s-6oMy z$`-x36QB6$eA-epBXR3jR#L3QBp|ROxkD|e*4uOjV=HXYQ~90d@1Z@~X6=zoB*z6? zwr{-z^3>(v*3LqVrv#*!^Pm(HrTz?rt%N$p4%$l3(@}q48q;#s!8sU%CeLQhei7}l!U?mJA0ScKbD{JX1H_s;GlR!Rm_24lE z^Db;kte2}IqGLnCj5Cf?5$!zU3&u#)R+=;`X0ngy*bwcx{mcwtZ6rY)vidOi!dt*D z8bkHx2!UMG*O+j*fRtI_PWro7H(29DvOD8r+F&F_o@PU5fJnG0Yw{m=g=`4HxQ#xm z?S&fo7l^kZhhv(ZWm?crt5cvsI-$TK_p*%#jeC*IP-shGd+gXT1wd_P8u=x5QrjCU zE`akL-;yO}9)4A5R!%6fr83o>Qez4MEet~v5CQ|jX8y}A1D&(?z(C;H+ogmT{b9Jn z+X7oH9EqC@%?U9x@{wdrloQ;4>{h#+ltX%JFU3SkRdSDzc@t5HO;lr)0X3a;^5ahh zk!%o)t60Ky$9BzU4PK29ax-XWjGS4`ni80#9)1yOJJ|Zh;dUm>p|2K4C8pVuCchI| zsT>7M2IW@^pfQED)=I|LK%M)^ENZpxu?jl(%!J$(D?@!yC*fs{! zvQ^TnPhp#-W{QP_v**PI!iLzl+pp?uPvYZkH!v2s9z9XL%|~kbR-*bgU$@c*sFy5t ze2#<^PN`0l(LeE_x!ZmT8y-WN?7?REat^Sdb8x>a23@afV>SsH71q!RC4NTtwnwKG zV~7jQ;p>K`ghKHozj2?B31mFMR$bTKZ6c)943qO-V6u;C!yz)$863D-%MZe3=M~z& zh<6H~QzX8>p|m=K9sX7x%A;e~1U4eoUo5IhqQl4TJlO^^eK?S1P||8Ou;^g}A=2#) zH%s!#$v9BQTR!DfCirxh13*cMjJ$59s*(8e*h5K5TBgzGA=CAuy}j7Zi0|A*wMWf` z)VSdhQ1Ghfze#bHkglmB{87Aa=Y>nrG>5FtOfkD@=OowR9+`Nv_8nL8=H8ex+B{G) z(MXVblymv}x%G{;*?D+@T0N}UklH6%@g~5)aV_@z*X-WO*ftY2YzeKEpP(U+tC6>H zmP(00nXK8-Ugs}1t$^i8%*GkE2|Dg14R{37EN57Ih0%BK;;B{wx3Rinr+WFHrN=~ot6S|M=~Y6pY1zfOQXP=7%cqPh`2ncOpbe%rPtN1(#dlQ( zI&WkzPd(&ooV)gE!{9T5aP!tPV;LWHB3#MasDJq=Mbuvsnk}Z;)`m_ygcM8x4AmbN z38{D=nG4$j%Mdh+f^RifOzsmgF)_JXvV1df>hb+~91D7#d8;$;t-Gs%=z^`g!FXw@YMAwH(rUQ$KeD{WjN(ook1z|yqlKn9Z+s9Wyh>Q zE^N3sa9oz&LHg>)_VFH`ir>s1KYsl5+Iw?Dz^!vYNXV|=02KGxR(IM#jC6Z%CBJT4 zgh}2ZC5-n?-8|!f?g>{Acw8$Sa#Ge;>mWTVa4u-uJ1t2cBYU{hwDpKjC!tZ~s9Kj^ zr{qitN11E|zr~!2kVt+S%@iLY=k-#4OII14N88w2HgUiUM`7Fe`-bbquX(;|wD^+k zr8|Z-PA4_6BTTU8$1gxdW#lA3i<@16>YYn?;t{L@!BXthdc6Epu{AEva%H}Ew!?YK zea<>&O?)zSB}>0Jr*;h*(JXb5JVGbiN+j*j#TIQ>u+z3i@?ClD60V9pq%Lg;d~o^B zRB7>;@b>&3V*|6itZ5<4I^?20wm&aGPTV#Lg-GK=|AYD5%?3#B223Qxi?P0myRRUn zNCR}TkUr5<7SU1nQAU>RZ5rjWYDntH|=h;HA!4*e!ADwxuBy-lnx4bx+SVR5v0X&E=}H zIhH563FFLbu?!hCG&%-1)6%E>)#F6GK$|--eFEIXO`g7p0&|Y;lo_b61ry-#`n{95 zQBES@=5>k|36e`n7{4cU58DNpUiO%Xe27+d+HM*1q6nM{0BK4EWzE7fNmBfVn?IrZ z${+Izn&j2i)uwxEfGxEdK*}gUahw+e8r)p3QMh=D72GVCz+2m{Lvlg?7?Gf6pM5D- z)zDFIPN^b0R>IN8q@SMIm95{kUT~siOxRJw4jGR%c#2$t0{se~NZ?f=*A|P3=woMf zZwR`#RK_oR&kxtIC*A?tK{dF^sIECs+@F+FR9?*t?$m1&78Xv5=`=5+8$@u@4fll) zi_Q7$H`lv2PNqz8-?DiD;P^BRRwogQW~7+S`cgkC1*cNl?}5$r1n|R>VL*CP0!&+w z@prmwOkMb3Q+jZO;?(g=U9~$$p<(r85nLC}C-e5rc1avQC1HTfRW&P?U7&?|Huqcb zhpq66sXp-P$_^HBeE(VfA|v*P(|KrDzaiT8KA+eq7gyA}< z22Ap1rfyCKfaY#B*ibjfU7GTuNV1GVs=!U|mIdh5gw)q7odBiM{RbGpM{YE>Gj#&8 zV8@I7UTf2)2MS4{5_-Xo&g=o!Tg%|s=hwHDyOE~dhYuh8Nl)PJrm~~6Gp3X+_h==w zq^wL3;=lpOTj_dTdtrgV=d5IAPn+*6@C5xyl?3cF-)SquOePNtJ|=HjY^o66N8^+? zKm3E5RsKmdTV}E>Em8%yTgL5h8!lai^ZWU#sW~l*i9J#CW0r-r$c6Ww#dVZcXBxJV z22gqA<>#9~CnuQ4icsjDjO9DVMV2{+J2L~$JQf>+V_pMzdaF65^gUJ>r_QWvX&I@C zkje`g%Ie}kmYgK0wc0dll*(%$uw;*gs&L+0SWBDII$%4;9bhdVkcjZjVmuanUd@| zW$3N{<+gG{an99Z$ITew|Tj4Q9I?-x+dPE{Ip~-+1}%9f)A^ zt*R40g5UOg1mW77W#W@yG`7pCOw})Nb(Rg?ooOYP?TCo61*lb z{dfi_#%`h8@yDM8>Fm!Pn;=FJ9c|{66)98-%Ml-*;`v4NBL3D+_urDpkXAkYy!)4% zJydBg+<`P_MLF5n9R0gYBE?J}71t%e0R<1sVVttcim?rKvZ%oEVX3k65hbd!^3&%+^c>d0Ljo z;>*vvQ}z4^dKEcGGTSnb5HKta1k&~a(%#2E8JuWF{V zv%oa>^geqHAqRx9*lqHq=ZS2(h9oeY*?F(UCE;$Lh07%{z`|qPViVtf`3%n{uI7kq6B*zQF7kUT7%Tle}XWA{HOxz^^7bx6VsAH+fjl z`ZFV4eSx#=^3_+l?g?&_oF!ljCGCfT>_cITFPspu@|zymb|)T9xb}a|nY0=HvF7F2+lw>$O$V*2x#A2tl);ABY_q@LS;8#zXdvVw3l*-cT z=1IC|?W*gWhUoQdmRMX3F`yZw5jJ48SH|3cCgug60JH7Yx3b=N2@wAFxPJH^IbB8@IuV2mEOI@~3$1`}WXhTdx7(h2 z4NGlt)dC<}?DnIsk4c#!@3S)19ygakzWKh-3}Y^f5AH-d5E)=m6NJ;aPd%@r8jmFX zjl3XN$R$~3<62or4#{ECNhf&dSA(hm_ID`bEW<7?!#9e7(aCz>vWnz43djt(}LSKtbXTX4XcWw;9)=Q3QH@dTkl;)qzD9nSEz?8 zhqHK6StzwptK@#9OgM$RGoi}6;Qcw8&(JIq12&E$q`=Y2w|!6CJ!mALw}m7o5OqN! zX!DfSUec&UlN|%190whhH6@?Z1g+HvN-ggwfDbFg5ICx_n=2&DB;K z=K6o}aA=QjR${1=JitzL3K}mzcHYC*4`9*_h5Hu-j%>xEpEEv0O|tEiawZOuh%~)ft{RKDy@yC^fi;UJB_izroS@kxJ#A5A4nvhGu$%-dXi-1 zaEjdg5pB+j!qYUL8W&;KaLH-Iu7_I)v5#q8upw# zti-#IG1fo%Bc3w*U>HeS+uBB;jmoF_df&n0l>TQ<@Ah}LzWkEzAmmq1T9RemDK4ea z2!v2M$FmR@KYl9cPFNEsn|Q>Q%C9Uk%)s@&=sKsY3B}WtRzier8%2o<;7nVjXdu@l zI|VoSbs@)`6Xiu)-OvyLnEDt;oKtkW*6h@qpJlfW?6~M{4VLhFw5Peb1(O+p5PP1J zhsUKL-PVD4BEpq$u-hx@8gZ+`dATUv0KR122R3C21e2AQ)Fcf+qk#UYE^u2584LX_ zDKUeXz0aaO6Me-VV~&$Ui|}$_VBjtmhIeMa@(ww6`x~Rlj7?3q?3k_*u$e>W`$hQw32`T(Vp9}Q6O1dblp`XT%99yictQS`= z18wb+A|wBX4qJheIR#3c>6Lj4b4_*illv4W6`pn43}T=qY$@`6zE(;@*?sG%N03i=b|lOC)qiC z^P17q=K1FWWYQ@NF^ejsZ>K7l#Lm46ii%cc6#Nj~&X6G9Hb{nO zJy2fuEoCah(Dtyf#n|4XMhvSg2c{wf!->Ag%7^)O21|^OH-hy=9bEmE@B?NX0c*s$ zNGVd11^TFb>_q?IN8D9SrH$3jq#fOv`1mWp>sE)X0_%Su%dk`%{G1M$O&KU&W{48N zxEUXIh(G+p;FfFXVxPlv`nSdT$*C}%4+~+D4a_+OSt!04!T!3<-aW=dsfI@?^zZl6 ztuBFVJzFA9eMjDZJ6hbmkI~kCY5RK|+Gc|DfJStv@GY zTUd8?1aya-B$Sdvix)|%%3qiK?b|mD^qcgyAXtcRSBvkejB={WD4EV1?oSR9p%?a# z;D%Gsv~nKTK5A$|pThAyg^;v{5TI&qazPSjZG@(fy)l3)DJe-RHMVMPu+Y%dTv?}d z*#@`+9LJnAXM0pHW$@^~tEpjB5-2aLXR@e8a z{&~%?#xc4F#2^Pr(#+2e*Y1@*)HrKxl02GUH$%mmlXZ(EgZr9*>-=!Wgd|#qks7I4 zzv(|$CZkUT)}jFAiIXR}kTLtupFfGuhE(m~Ahz-wMtTzGnO;u2w?FPDXUdvVV26|0 z!gQaWMLW3*6V^W8ek>2_7(?^`9Vd&2Y-#YCCKXERNOR_A5jK6z-0Nla{?&&plIF>aV9PaLv8RlZ0ToW%kE%CUv=B}0&DgKnB9QAD)O4Hj5+ zOGBzWDBX#2A0OCV!ANvu)7VK+XA&jl#u{SGCdUUVDgbyyS|D-YA4f;? z(PttsYm%Ctce^;>5*-k6QP{d^fW9vQ3b-v!iZ2T+(2I@jz8K72EX6a>n2IU9;kNvp z6QD2$%smly)?b(ToJ~zzn|%gf{U+~@h4vjebAh~L`fbb=ammguTvdA^#!#xkwGoY^ z+LQRQ@B;jpuP_nj_Yn4Xak^W}M>?_+Oe5KNc$#LgLB7sMS$@~r;rY+lat5T)PrTD@ohN=e%XD+PenYyyS1h)gTArEmUqmv9%Ys4xyy z=YrWp-@wF}p-a?eV#?3r(H{p6V#_)a0u`M&4U7FCiqEVu{I5N?TuGinvb*Ohn^1(O z0uZcGT(1D*hj3C2<=_8tOe6j5$3`cRR9Ns8WF9#$_+aKjj+GTuH;mwAzzlZG%HWlG zqa{fu&vn5R67}bcGksrjO*D`1-Yam#T3a=|X=H>E1o{m?SO;^RBkvKNH{PK3=TQwG zy=P+`+}mq#4V+WASh#-@j(i680%Aj&IOO%~*N6^Iz~jd&?r4O2_}9IEWqJ}7HDPY< z_iZ#-Eb0Ir0v*?d92Qm4E&k!43%p$~j#LcXRU+U>58%_Tm$^k93BhNFwEklQha+UM znbOM-980Z|ZQ?aMp@n+&WJ96~NfJWjZZCHeVE{C-@FNu_c&nwjsbe{PiG6=v2izM6 zQ4=P`>{WwmhqUzhc)@t*BQ5eGcnlfB^Z6Qixs7s;S{G!TV91~n8Wz^T-5uXmvjb+` zx+Bcu{_njdZ7mZbCN;>t5H+99a@G7@RH4U8@)HPPmQ@Q8>S7*(gHq)6}V zoO!#w;r}oMyva4l;NQ+@{BUYht{+4$sMS*62r*)tPFIOdYJ~7-```$QjO038(BPv?B0TX? zc%+d$Mz&iUWzeVg+s)k%0@8zngTuQQfo_!kZg_wtcawfRFSC4pU&LO8TY+c}h>u&; zcuHM((fFlQEL3{n>|unBv{v?9TaIXNZzn$Uc$36rY&_%mlGBz1Mn*Z1ji5T(=+aPNvChR4M-dadqAC zShj6AqKpQQ6;jBa*(4=ig&W zy}#f0zK{F9?&~_w^E%GsI8LIxE=lsXwa^`vkLD){jgq~`f%Ca$E`Jf0a{F9!3+Hx5 z8($?8AU9{*VQ%i~58%mX!l-w|N^BA6Rd-deTw&}LpBFfoxAgc*n&y#a0~ z{h%kN1fA7_&9(P0fqn{&76%}q2(Q7koP=(e6lmY0E0fv?)0I~RwZ8#dO!}*04#9^7 z2TH5PYen_X4hV5)u#cbX^99x1E+Yfr-Ek-ARY6v_jVAm!6j6S_N@%-J*6pj#mvl z;I{Cy+~d7a^|u4^V?Ay*_1h=u*Bi^g8)rYO`oS3Tbv=8PGQh;LN{F$Cjz}0Q+w5ph zY}8>E#PW-;zpS)WHI@TSkBCxtpssWPCUM+U)>Ogpp{%f=ubUgdIjec2Gi!Xj!9ukH zYr}ZVLp{VhQUcf3m*0WzaUrE1(cFOJU<8nbuaI-!;24)JNP>w<7uMVX zdRVoB<{DoHF97sTeZ2g%+EW#mZQP+7txTjY`@qc1EI}=?Zgvv%7aWLGZqjwRXs9R! zaLGUW6{<7{Z@y=iY0rrF5r4~F7_{!CwSD0fcY=<{2#&Mlitp>B1VW_O5pv=*^m)X5 zYu{%L?%+?!y+``o1*_b`G^31B~Y3+?R(fykg^%lB}IOrc)j6_@oz~%gaC=j;Tncy0am$WDk6?Y;d47 zKbnsp{hJ$h@a++8K7Bc=+IUuyw!DYwWz5497uq8cS0Hb=El_G3D4a}hh8bNpmIHl( z&*Uy}>I!xCy|P7mZhX?Zy{mRWx{3iY{YOWA#pN>wsda60^32H$plgW{bHiSLteOm| z^E$Mb2dwx29W%P}uPC_o+CXTL>QNn5Xf{y3m61VpO~sn` z!MjriP=~KUB-c(?+Dr^v-#}WH^3cM|uW{Vx0^C+8M_x(ktB#lLjf})kU^CG9T>f|D zhRp}GzozgHABDge<@|i?3-ZpM7s~w=9}Js@N!EOA6jfaA+yq*77^0}eYk(rQnOZ~g z5YAU_j|=oybB=z5TsVjbc@ZJ*EuwC*McaPZV-A;1!`8oiVM{Jp!=F-;Ssu0+)1rc& z=zZuseStt5H&tDWuHwM#UyZM{An)U1-!3Dx>=) znfRG}-{SJ;n&Hw{Ruy$v;Y+!e+S$j~Fk?rqQJp?VbQC_4xboh!!};YP(bj~GSpUUS6=p3J z4*}>Ji{u3}%L-4ce7$k_ymKJXIe(7ZsoL^eCP3F}UZ6}t9oJlAU+kF}?&;s#p{s#f zun)Ju>D41~hU85i(8eL~3uOFj`4Zce?%U2~f<*au4m1Bwu9i@3%DgJb&Zy+L4S6ro zbH7A?dm*=J3SX4*vf%ZoE_JI~(7r(pvJKYTpj5gyfdgKd#$eRmpJw3W8;N*sR&eI zN9sJ!jvjKjJKg7<$I-1I;4N1zxSXAV6yu24>}{fk@gbZ8RRDZbQwSrVSDZXF_{lsH zjYcB`xWwaz{6wIf$QGeWbAtd~FzLMtePiO}*djv3Z;J!6FsOL3sD>(85rlTjTF_z; z$u=F#jj)_7yrObEB@A2!tosL`dA*$nTAX%>ymo>GH>EOPwfuI~LT)2)%@dzP*o`CQ zRnrm{sUyz?h|UjRq6j^Dfp<`h2n{J19CGdW)nA+ASn5NORn&w{1)d(sN5nv}d=L7C z^Wc0Lg{VTfv}9Q?0k_C`dN&QiRJxU@js-X~Uivshy8vUInd>aN5z2&^`l5zVX&>!8 z_+j2(b12eCKsw)olYPq0lR0;}(U=$J)G*1EeyYx?e0c{nYKR}DSq3!?zKGM3CZCQY zC{i8fB4x+Fecw(4;t68Q*4LMdbYApef}q0-V%hct0joKXEkuD`RymhB#IRj`fu91$ zUl(|q)sBV0UHUcb&4ted8kx2b%KwO z0$F=~p_gL!ODsQ8-T=m_`U9w_CMG!FCmo@$b53Ak~S0>0eu;= z{9S13{y!`e-5-u)IcZ&5z?T1=nuNrTD;K|pCe236J3R#&icgOQoJ z3&#H%A~sAQlztIiuYS8A6AYnrfiQEyw+`rvs1PUlJ4Kzq{;5>>+R`EcVY={3io5<` zavkJu8ySFagP#4dP-B)bmT7q`US9R>7_vuFYm=ZTWskXEYIQe{ zOi?74!<`gQ{17&g*C8C*Ls)p?X-oKs7@baHZZe6LOUtAvy+4&O-(#+i=2^=MnvNdP zuO)xey5j~|uXx%;93uKI$>2Jo+(X_wJNF+C=_*6HoYO)cU`i8YB;Ce)!vy{EirDYJ zpdKvl>gsB#95*IG8-~ZCIZ*cUj1|Nnr;PE~s-f%=YP+LFR4CbukX6+xok({BJ8L;+ zr0vM6b{rR*DE9((Uh;*4rJ4c9AY#>vaQu<_U@KAldJS*Qb6!O8 zme-TMw^3uY_MF_jucPf4yQ||U({P;6Z1#KhGrWn2GOpK8TjW^f4}Mt(8!z%&SL(Ee zk5^PLi-t2$pOc8<=?Bab{#zJijl{`_Zw(j5Cp!(J=^8zU3~P!ybxvcrDTO==cVjqn z1;k7&5oe`B9RY?2A{J}$Gy=R&*R^q9FY;F6aolJaMIeubps8xRH-iZm%YA<>`OnqQ z4{1iK44`74{K`$S+DqMJ+LTj*zoJ+bV>;wnWwFubqhtk;x-&!szZK)dupVID7J2P? z@(m52W`H_vRz@$si#qMlP8SQBDtbQi|9kdpB)Q<_-S}gvKnu#xX4NXq36oR-kLOjH zHYZjTV`H2s*=-~;Twe88_1*%aMuMlT|C*4E<1F?>0n=u=}LsReZfLkj&1V);bfa;6^NpuxS5HqB z+z>_2&$S9HjE;spUX390#8By4;chbbE8KXm&b>CDSS8{v*j@JPwY>pV9hl2ig&>(ddgj$-Zs@4q&I_(c-!YTIPsRP?$J7k)p-s;r}v za2!0mkXl(6Jb=N(z}%a)utUczmEUdJ;d;`ojcR_vm8(86zGLMp1%CVGMHbR@&%sl3 z-;#mg_?4C;IPd%pNtjIP5gdu)z(K~aclGvG1Ls)>ylJCMb-H02{XY4yz5yBsld)T7 z0k*Rl%D>hsa}P$J>Xeଃ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

5IjIIP=-7R~UAv^V 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%0DU;0sk*p6x|F3=d-)L5y4KNwfYg%uC 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 ab24w@jgDQ#52&pHuR{kgmIW3b7ybjthHtw7 literal 0 HcmV?d00001 diff --git a/libs/community/langchain_community/chains/graph_qa/memgraph.py b/libs/community/langchain_community/chains/graph_qa/memgraph.py new file mode 100644 index 0000000000000..02fa66992a2fd --- /dev/null +++ b/libs/community/langchain_community/chains/graph_qa/memgraph.py @@ -0,0 +1,316 @@ +"""Question answering over a graph.""" + +from __future__ import annotations + +import re +from typing import Any, Dict, List, Optional, Union + +from langchain.chains.base import Chain +from langchain_core.callbacks import CallbackManagerForChainRun +from langchain_core.language_models import BaseLanguageModel +from langchain_core.messages import ( + AIMessage, + BaseMessage, + SystemMessage, + ToolMessage, +) +from langchain_core.output_parsers import StrOutputParser +from langchain_core.prompts import ( + BasePromptTemplate, + ChatPromptTemplate, + HumanMessagePromptTemplate, + MessagesPlaceholder, +) +from langchain_core.runnables import Runnable +from pydantic import Field + +from langchain_community.chains.graph_qa.prompts import ( + MEMGRAPH_GENERATION_PROMPT, + MEMGRAPH_QA_PROMPT, +) +from langchain_community.graphs.memgraph_graph import MemgraphGraph + +INTERMEDIATE_STEPS_KEY = "intermediate_steps" + +FUNCTION_RESPONSE_SYSTEM = """You are an assistant that helps to form nice and human +understandable answers based on the provided information from tools. +Do not add any other information that wasn't present in the tools, and use +very concise style in interpreting results! +""" + + +def extract_cypher(text: str) -> str: + """Extract Cypher code from a text. + + Args: + text: Text to extract Cypher code from. + + Returns: + Cypher code extracted from the text. + """ + # The pattern to find Cypher code enclosed in triple backticks + pattern = r"```(.*?)```" + + # Find all matches in the input text + matches = re.findall(pattern, text, re.DOTALL) + + return matches[0] if matches else text + + +def get_function_response( + question: str, context: List[Dict[str, Any]] +) -> List[BaseMessage]: + TOOL_ID = "call_H7fABDuzEau48T10Qn0Lsh0D" + messages = [ + AIMessage( + content="", + additional_kwargs={ + "tool_calls": [ + { + "id": TOOL_ID, + "function": { + "arguments": '{"question":"' + question + '"}', + "name": "GetInformation", + }, + "type": "function", + } + ] + }, + ), + ToolMessage(content=str(context), tool_call_id=TOOL_ID), + ] + return messages + + +class MemgraphQAChain(Chain): + """Chain for question-answering against a graph by generating Cypher statements. + + *Security note*: Make sure that the database connection uses credentials + that are narrowly-scoped to only include necessary permissions. + Failure to do so may result in data corruption or loss, since the calling + code may attempt commands that would result in deletion, mutation + of data if appropriately prompted or reading sensitive data if such + data is present in the database. + The best way to guard against such negative outcomes is to (as appropriate) + limit the permissions granted to the credentials used with this tool. + + See https://python.langchain.com/docs/security for more information. + """ + + graph: MemgraphGraph = Field(exclude=True) + cypher_generation_chain: Runnable + qa_chain: Runnable + graph_schema: str + input_key: str = "query" #: :meta private: + output_key: str = "result" #: :meta private: + top_k: int = 10 + """Number of results to return from the query""" + return_intermediate_steps: bool = False + """Whether or not to return the intermediate steps along with the final answer.""" + return_direct: bool = False + """Optional cypher validation tool""" + use_function_response: bool = False + """Whether to wrap the database context as tool/function response""" + allow_dangerous_requests: bool = False + """Forced user opt-in to acknowledge that the chain can make dangerous requests. + + *Security note*: Make sure that the database connection uses credentials + that are narrowly-scoped to only include necessary permissions. + Failure to do so may result in data corruption or loss, since the calling + code may attempt commands that would result in deletion, mutation + of data if appropriately prompted or reading sensitive data if such + data is present in the database. + The best way to guard against such negative outcomes is to (as appropriate) + limit the permissions granted to the credentials used with this tool. + + See https://python.langchain.com/docs/security for more information. + """ + + def __init__(self, **kwargs: Any) -> None: + """Initialize the chain.""" + super().__init__(**kwargs) + if self.allow_dangerous_requests is not True: + raise ValueError( + "In order to use this chain, you must acknowledge that it can make " + "dangerous requests by setting `allow_dangerous_requests` to `True`." + "You must narrowly scope the permissions of the database connection " + "to only include necessary permissions. Failure to do so may result " + "in data corruption or loss or reading sensitive data if such data is " + "present in the database." + "Only use this chain if you understand the risks and have taken the " + "necessary precautions. " + "See https://python.langchain.com/docs/security for more information." + ) + + @property + def input_keys(self) -> List[str]: + """Return the input keys. + + :meta private: + """ + return [self.input_key] + + @property + def output_keys(self) -> List[str]: + """Return the output keys. + + :meta private: + """ + _output_keys = [self.output_key] + return _output_keys + + @property + def _chain_type(self) -> str: + return "graph_cypher_chain" + + @classmethod + def from_llm( + cls, + llm: Optional[BaseLanguageModel] = None, + *, + qa_prompt: Optional[BasePromptTemplate] = None, + cypher_prompt: Optional[BasePromptTemplate] = None, + cypher_llm: Optional[BaseLanguageModel] = None, + qa_llm: Optional[Union[BaseLanguageModel, Any]] = None, + qa_llm_kwargs: Optional[Dict[str, Any]] = None, + cypher_llm_kwargs: Optional[Dict[str, Any]] = None, + use_function_response: bool = False, + function_response_system: str = FUNCTION_RESPONSE_SYSTEM, + **kwargs: Any, + ) -> MemgraphQAChain: + """Initialize from LLM.""" + + if not cypher_llm and not llm: + raise ValueError("Either `llm` or `cypher_llm` parameters must be provided") + if not qa_llm and not llm: + raise ValueError("Either `llm` or `qa_llm` parameters must be provided") + if cypher_llm and qa_llm and llm: + raise ValueError( + "You can specify up to two of 'cypher_llm', 'qa_llm'" + ", and 'llm', but not all three simultaneously." + ) + if cypher_prompt and cypher_llm_kwargs: + raise ValueError( + "Specifying cypher_prompt and cypher_llm_kwargs together is" + " not allowed. Please pass prompt via cypher_llm_kwargs." + ) + if qa_prompt and qa_llm_kwargs: + raise ValueError( + "Specifying qa_prompt and qa_llm_kwargs together is" + " not allowed. Please pass prompt via qa_llm_kwargs." + ) + use_qa_llm_kwargs = qa_llm_kwargs if qa_llm_kwargs is not None else {} + use_cypher_llm_kwargs = ( + cypher_llm_kwargs if cypher_llm_kwargs is not None else {} + ) + if "prompt" not in use_qa_llm_kwargs: + use_qa_llm_kwargs["prompt"] = ( + qa_prompt if qa_prompt is not None else MEMGRAPH_QA_PROMPT + ) + if "prompt" not in use_cypher_llm_kwargs: + use_cypher_llm_kwargs["prompt"] = ( + cypher_prompt + if cypher_prompt is not None + else MEMGRAPH_GENERATION_PROMPT + ) + + qa_llm = qa_llm or llm + if use_function_response: + try: + qa_llm.bind_tools({}) # type: ignore[union-attr] + response_prompt = ChatPromptTemplate.from_messages( + [ + SystemMessage(content=function_response_system), + HumanMessagePromptTemplate.from_template("{question}"), + MessagesPlaceholder(variable_name="function_response"), + ] + ) + qa_chain = response_prompt | qa_llm | StrOutputParser() # type: ignore + except (NotImplementedError, AttributeError): + raise ValueError("Provided LLM does not support native tools/functions") + else: + qa_chain = use_qa_llm_kwargs["prompt"] | qa_llm | StrOutputParser() # type: ignore + + prompt = use_cypher_llm_kwargs["prompt"] + llm_to_use = cypher_llm if cypher_llm is not None else llm + + if prompt is not None and llm_to_use is not None: + cypher_generation_chain = prompt | llm_to_use | StrOutputParser() # type: ignore[arg-type] + else: + raise ValueError( + "Missing required components for the cypher generation chain: " + "'prompt' or 'llm'" + ) + + graph_schema = kwargs["graph"].get_schema + + return cls( + graph_schema=graph_schema, + qa_chain=qa_chain, + cypher_generation_chain=cypher_generation_chain, + use_function_response=use_function_response, + **kwargs, + ) + + def _call( + self, + inputs: Dict[str, Any], + run_manager: Optional[CallbackManagerForChainRun] = None, + ) -> Dict[str, Any]: + """Generate Cypher statement, use it to look up in db and answer question.""" + _run_manager = run_manager or CallbackManagerForChainRun.get_noop_manager() + callbacks = _run_manager.get_child() + question = inputs[self.input_key] + args = { + "question": question, + "schema": self.graph_schema, + } + args.update(inputs) + + intermediate_steps: List = [] + + generated_cypher = self.cypher_generation_chain.invoke( + args, callbacks=callbacks + ) + # Extract Cypher code if it is wrapped in backticks + generated_cypher = extract_cypher(generated_cypher) + + _run_manager.on_text("Generated Cypher:", end="\n", verbose=self.verbose) + _run_manager.on_text( + generated_cypher, color="green", end="\n", verbose=self.verbose + ) + + intermediate_steps.append({"query": generated_cypher}) + + # Retrieve and limit the number of results + # Generated Cypher be null if query corrector identifies invalid schema + if generated_cypher: + context = self.graph.query(generated_cypher)[: self.top_k] + else: + context = [] + + if self.return_direct: + result = context + else: + _run_manager.on_text("Full Context:", end="\n", verbose=self.verbose) + _run_manager.on_text( + str(context), color="green", end="\n", verbose=self.verbose + ) + + intermediate_steps.append({"context": context}) + if self.use_function_response: + function_response = get_function_response(question, context) + result = self.qa_chain.invoke( # type: ignore + {"question": question, "function_response": function_response}, + ) + else: + result = self.qa_chain.invoke( # type: ignore + {"question": question, "context": context}, + callbacks=callbacks, + ) + + chain_result: Dict[str, Any] = {"result": result} + if self.return_intermediate_steps: + chain_result[INTERMEDIATE_STEPS_KEY] = intermediate_steps + + return chain_result diff --git a/libs/community/langchain_community/chains/graph_qa/prompts.py b/libs/community/langchain_community/chains/graph_qa/prompts.py index ec4d9a4c750a2..9077da3e00e3d 100644 --- a/libs/community/langchain_community/chains/graph_qa/prompts.py +++ b/libs/community/langchain_community/chains/graph_qa/prompts.py @@ -411,3 +411,58 @@ input_variables=["schema", "question", "extra_instructions"], template=NEPTUNE_OPENCYPHER_GENERATION_SIMPLE_TEMPLATE, ) + +MEMGRAPH_GENERATION_TEMPLATE = """Your task is to directly translate natural language inquiry into precise and executable Cypher query for Memgraph database. +You will utilize a provided database schema to understand the structure, nodes and relationships within the Memgraph database. +Instructions: +- Use provided node and relationship labels and property names from the +schema which describes the database's structure. Upon receiving a user +question, synthesize the schema to craft a precise Cypher query that +directly corresponds to the user's intent. +- Generate valid executable Cypher queries on top of Memgraph database. +Any explanation, context, or additional information that is not a part +of the Cypher query syntax should be omitted entirely. +- Use Memgraph MAGE procedures instead of Neo4j APOC procedures. +- Do not include any explanations or apologies in your responses. +- Do not include any text except the generated Cypher statement. +- For queries that ask for information or functionalities outside the direct +generation of Cypher queries, use the Cypher query format to communicate +limitations or capabilities. For example: RETURN "I am designed to generate +Cypher queries based on the provided schema only." +Schema: +{schema} + +With all the above information and instructions, generate Cypher query for the +user question. + +The question is: +{question}""" + +MEMGRAPH_GENERATION_PROMPT = PromptTemplate( + input_variables=["schema", "question"], template=MEMGRAPH_GENERATION_TEMPLATE +) + + +MEMGRAPH_QA_TEMPLATE = """Your task is to form nice and human +understandable answers. The information part contains the provided +information that you must use to construct an answer. +The provided information is authoritative, you must never doubt it or try to +use your internal knowledge to correct it. Make the answer sound as a +response to the question. Do not mention that you based the result on the +given information. Here is an example: + +Question: Which managers own Neo4j stocks? +Context:[manager:CTL LLC, manager:JANE STREET GROUP LLC] +Helpful Answer: CTL LLC, JANE STREET GROUP LLC owns Neo4j stocks. + +Follow this example when generating answers. If the provided information is +empty, say that you don't know the answer. + +Information: +{context} + +Question: {question} +Helpful Answer:""" +MEMGRAPH_QA_PROMPT = PromptTemplate( + input_variables=["context", "question"], template=MEMGRAPH_QA_TEMPLATE +) diff --git a/libs/community/langchain_community/graphs/memgraph_graph.py b/libs/community/langchain_community/graphs/memgraph_graph.py index 34e9f7145bb22..fa829a0e5db81 100644 --- a/libs/community/langchain_community/graphs/memgraph_graph.py +++ b/libs/community/langchain_community/graphs/memgraph_graph.py @@ -1,15 +1,272 @@ -from langchain_community.graphs.neo4j_graph import Neo4jGraph +import logging +from hashlib import md5 +from typing import Any, Dict, List, Optional + +from langchain_core.utils import get_from_dict_or_env + +from langchain_community.graphs.graph_document import GraphDocument, Node, Relationship +from langchain_community.graphs.graph_store import GraphStore + +logger = logging.getLogger(__name__) + + +BASE_ENTITY_LABEL = "__Entity__" SCHEMA_QUERY = """ -CALL llm_util.schema("raw") -YIELD * -RETURN * +SHOW SCHEMA INFO +""" + +NODE_PROPERTIES_QUERY = """ +CALL schema.node_type_properties() +YIELD nodeType AS label, propertyName AS property, propertyTypes AS type +WITH label AS nodeLabels, collect({key: property, types: type}) AS properties +RETURN {labels: nodeLabels, properties: properties} AS output +""" + +REL_QUERY = """ +MATCH (n)-[e]->(m) +WITH DISTINCT + labels(n) AS start_node_labels, + type(e) AS rel_type, + labels(m) AS end_node_labels, + e, + keys(e) AS properties +UNWIND CASE WHEN size(properties) > 0 THEN properties ELSE [null] END AS prop +WITH + start_node_labels, + rel_type, + end_node_labels, + CASE WHEN prop IS NULL THEN [] ELSE [prop, valueType(e[prop])] END AS property_info +RETURN + start_node_labels, + rel_type, + end_node_labels, + COLLECT(DISTINCT CASE + WHEN property_info <> [] + THEN property_info + ELSE null END) AS properties_info +""" + +NODE_IMPORT_QUERY = """ +UNWIND $data AS row +CALL merge.node(row.label, row.properties, {}, {}) +YIELD node +RETURN distinct 'done' AS result +""" + +REL_NODES_IMPORT_QUERY = """ +UNWIND $data AS row +MERGE (source {id: row.source_id}) +MERGE (target {id: row.target_id}) +RETURN distinct 'done' AS result +""" + +REL_IMPORT_QUERY = """ +UNWIND $data AS row +MATCH (source {id: row.source_id}) +MATCH (target {id: row.target_id}) +WITH source, target, row +CALL merge.relationship(source, row.type, {}, {}, target, {}) +YIELD rel +RETURN distinct 'done' AS result +""" + +INCLUDE_DOCS_QUERY = """ +MERGE (d:Document {id:$document.metadata.id}) +SET d.content = $document.page_content +SET d += $document.metadata +RETURN distinct 'done' AS result +""" + +INCLUDE_DOCS_SOURCE_QUERY = """ +UNWIND $data AS row +MATCH (source {id: row.source_id}), (d:Document {id: $document.metadata.id}) +MERGE (d)-[:MENTIONS]->(source) +RETURN distinct 'done' AS result +""" + +NODE_PROPS_TEXT = """ +Node labels and properties (name and type) are: """ +REL_PROPS_TEXT = """ +Relationship labels and properties are: +""" + +REL_TEXT = """ +Nodes are connected with the following relationships: +""" + + +def get_schema_subset(data: Dict[str, Any]) -> Dict[str, Any]: + return { + "edges": [ + { + "end_node_labels": edge["end_node_labels"], + "properties": [ + { + "key": prop["key"], + "types": [ + {"type": type_item["type"].lower()} + for type_item in prop["types"] + ], + } + for prop in edge["properties"] + ], + "start_node_labels": edge["start_node_labels"], + "type": edge["type"], + } + for edge in data["edges"] + ], + "nodes": [ + { + "labels": node["labels"], + "properties": [ + { + "key": prop["key"], + "types": [ + {"type": type_item["type"].lower()} + for type_item in prop["types"] + ], + } + for prop in node["properties"] + ], + } + for node in data["nodes"] + ], + } + + +def get_reformated_schema( + nodes: List[Dict[str, Any]], rels: List[Dict[str, Any]] +) -> Dict[str, Any]: + return { + "edges": [ + { + "end_node_labels": rel["end_node_labels"], + "properties": [ + {"key": prop[0], "types": [{"type": prop[1].lower()}]} + for prop in rel["properties_info"] + ], + "start_node_labels": rel["start_node_labels"], + "type": rel["rel_type"], + } + for rel in rels + ], + "nodes": [ + { + "labels": [_remove_backticks(node["labels"])[1:]], + "properties": [ + { + "key": prop["key"], + "types": [ + {"type": type_item.lower()} for type_item in prop["types"] + ], + } + for prop in node["properties"] + if node["properties"][0]["key"] != "" + ], + } + for node in nodes + ], + } + + +def transform_schema_to_text(schema: Dict[str, Any]) -> str: + node_props_data = "" + rel_props_data = "" + rel_data = "" + + for node in schema["nodes"]: + node_props_data += f"- labels: (:{':'.join(node['labels'])})\n" + if node["properties"] == []: + continue + node_props_data += " properties:\n" + for prop in node["properties"]: + prop_types_str = " or ".join( + {prop_types["type"] for prop_types in prop["types"]} + ) + node_props_data += f" - {prop['key']}: {prop_types_str}\n" + + for rel in schema["edges"]: + rel_type = rel["type"] + start_labels = ":".join(rel["start_node_labels"]) + end_labels = ":".join(rel["end_node_labels"]) + rel_data += f"(:{start_labels})-[:{rel_type}]->(:{end_labels})\n" + + if rel["properties"] == []: + continue + + rel_props_data += f"- labels: {rel_type}\n properties:\n" + for prop in rel["properties"]: + prop_types_str = " or ".join( + {prop_types["type"].lower() for prop_types in prop["types"]} + ) + rel_props_data += f" - {prop['key']}: {prop_types_str}\n" + + return "".join( + [ + NODE_PROPS_TEXT + node_props_data if node_props_data else "", + REL_PROPS_TEXT + rel_props_data if rel_props_data else "", + REL_TEXT + rel_data if rel_data else "", + ] + ) + + +def _remove_backticks(text: str) -> str: + return text.replace("`", "") + + +def _transform_nodes(nodes: list[Node], baseEntityLabel: bool) -> List[dict]: + transformed_nodes = [] + for node in nodes: + properties_dict = node.properties | {"id": node.id} + label = ( + [_remove_backticks(node.type), BASE_ENTITY_LABEL] + if baseEntityLabel + else [_remove_backticks(node.type)] + ) + node_dict = {"label": label, "properties": properties_dict} + transformed_nodes.append(node_dict) + return transformed_nodes + + +def _transform_relationships( + relationships: list[Relationship], baseEntityLabel: bool +) -> List[dict]: + transformed_relationships = [] + for rel in relationships: + rel_dict = { + "type": _remove_backticks(rel.type), + "source_label": ( + [BASE_ENTITY_LABEL] + if baseEntityLabel + else [_remove_backticks(rel.source.type)] + ), + "source_id": rel.source.id, + "target_label": ( + [BASE_ENTITY_LABEL] + if baseEntityLabel + else [_remove_backticks(rel.target.type)] + ), + "target_id": rel.target.id, + } + transformed_relationships.append(rel_dict) + return transformed_relationships -class MemgraphGraph(Neo4jGraph): + +class MemgraphGraph(GraphStore): """Memgraph wrapper for graph operations. + Parameters: + url (Optional[str]): The URL of the Memgraph database server. + username (Optional[str]): The username for database authentication. + password (Optional[str]): The password for database authentication. + database (str): The name of the database to connect to. Default is 'memgraph'. + refresh_schema (bool): A flag whether to refresh schema information + at initialization. Default is True. + driver_config (Dict): Configuration passed to Neo4j Driver. + *Security note*: Make sure that the database connection uses credentials that are narrowly-scoped to only include necessary permissions. Failure to do so may result in data corruption or loss, since the calling @@ -23,49 +280,247 @@ class MemgraphGraph(Neo4jGraph): """ def __init__( - self, url: str, username: str, password: str, *, database: str = "memgraph" + self, + url: Optional[str] = None, + username: Optional[str] = None, + password: Optional[str] = None, + database: Optional[str] = None, + refresh_schema: bool = True, + *, + driver_config: Optional[Dict] = None, ) -> None: """Create a new Memgraph graph wrapper instance.""" - super().__init__(url, username, password, database=database) + try: + import neo4j + except ImportError: + raise ImportError( + "Could not import neo4j python package. " + "Please install it with `pip install neo4j`." + ) + + url = get_from_dict_or_env({"url": url}, "url", "MEMGRAPH_URI") + + # if username and password are "", assume auth is disabled + if username == "" and password == "": + auth = None + else: + username = get_from_dict_or_env( + {"username": username}, + "username", + "MEMGRAPH_USERNAME", + ) + password = get_from_dict_or_env( + {"password": password}, + "password", + "MEMGRAPH_PASSWORD", + ) + auth = (username, password) + database = get_from_dict_or_env( + {"database": database}, "database", "MEMGRAPH_DATABASE", "memgraph" + ) + + self._driver = neo4j.GraphDatabase.driver( + url, auth=auth, **(driver_config or {}) + ) + + self._database = database + self.schema: str = "" + self.structured_schema: Dict[str, Any] = {} + + # Verify connection + try: + self._driver.verify_connectivity() + except neo4j.exceptions.ServiceUnavailable: + raise ValueError( + "Could not connect to Memgraph database. " + "Please ensure that the url is correct" + ) + except neo4j.exceptions.AuthError: + raise ValueError( + "Could not connect to Memgraph database. " + "Please ensure that the username and password are correct" + ) + + # Set schema + if refresh_schema: + try: + self.refresh_schema() + except neo4j.exceptions.ClientError as e: + raise e + + def close(self) -> None: + if self._driver: + logger.info("Closing the driver connection.") + self._driver.close() + self._driver = None + + @property + def get_schema(self) -> str: + """Returns the schema of the Graph database""" + return self.schema + + @property + def get_structured_schema(self) -> Dict[str, Any]: + """Returns the structured schema of the Graph database""" + return self.structured_schema + + def query(self, query: str, params: dict = {}) -> List[Dict[str, Any]]: + """Query the graph. + + Args: + query (str): The Cypher query to execute. + params (dict): The parameters to pass to the query. + + Returns: + List[Dict[str, Any]]: The list of dictionaries containing the query results. + """ + from neo4j.exceptions import Neo4jError + + try: + data, _, _ = self._driver.execute_query( + query, + database_=self._database, + parameters_=params, + ) + json_data = [r.data() for r in data] + return json_data + except Neo4jError as e: + if not ( + ( + ( # isCallInTransactionError + e.code == "Neo.DatabaseError.Statement.ExecutionFailed" + or e.code + == "Neo.DatabaseError.Transaction.TransactionStartFailed" + ) + and "in an implicit transaction" in e.message + ) + or ( # isPeriodicCommitError + e.code == "Neo.ClientError.Statement.SemanticError" + and ( + "in an open transaction is not possible" in e.message + or "tried to execute in an explicit transaction" in e.message + ) + ) + or ( + e.code == "Memgraph.ClientError.MemgraphError.MemgraphError" + and ("in multicommand transactions" in e.message) + ) + or ( + e.code == "Memgraph.ClientError.MemgraphError.MemgraphError" + and "SchemaInfo disabled" in e.message + ) + ): + raise + + # fallback to allow implicit transactions + with self._driver.session(database=self._database) as session: + data = session.run(query, params) + json_data = [r.data() for r in data] + return json_data def refresh_schema(self) -> None: """ Refreshes the Memgraph graph schema information. """ + import ast + + from neo4j.exceptions import Neo4jError + + # leave schema empty if db is empty + if self.query("MATCH (n) RETURN n LIMIT 1") == []: + return - db_structured_schema = self.query(SCHEMA_QUERY)[0].get("schema") - assert db_structured_schema is not None - self.structured_schema = db_structured_schema + # first try with SHOW SCHEMA INFO + try: + result = self.query(SCHEMA_QUERY)[0].get("schema") + if result is not None and isinstance(result, (str, ast.AST)): + schema_result = ast.literal_eval(result) + else: + schema_result = result + assert schema_result is not None + structured_schema = get_schema_subset(schema_result) + self.structured_schema = structured_schema + self.schema = transform_schema_to_text(structured_schema) + return + except Neo4jError as e: + if ( + e.code == "Memgraph.ClientError.MemgraphError.MemgraphError" + and "SchemaInfo disabled" in e.message + ): + logger.info( + "Schema generation with SHOW SCHEMA INFO query failed. " + "Set --schema-info-enabled=true to use SHOW SCHEMA INFO query. " + "Falling back to alternative queries." + ) - # Format node properties - formatted_node_props = [] + # fallback on Cypher without SHOW SCHEMA INFO + nodes = [query["output"] for query in self.query(NODE_PROPERTIES_QUERY)] + rels = self.query(REL_QUERY) - for node_name, properties in db_structured_schema["node_props"].items(): - formatted_node_props.append( - f"Node name: '{node_name}', Node properties: {properties}" + structured_schema = get_reformated_schema(nodes, rels) + self.structured_schema = structured_schema + self.schema = transform_schema_to_text(structured_schema) + + def add_graph_documents( + self, + graph_documents: List[GraphDocument], + include_source: bool = False, + baseEntityLabel: bool = False, + ) -> None: + """ + Take GraphDocument as input as uses it to construct a graph in Memgraph. + + Parameters: + - graph_documents (List[GraphDocument]): A list of GraphDocument objects + that contain the nodes and relationships to be added to the graph. Each + GraphDocument should encapsulate the structure of part of the graph, + including nodes, relationships, and the source document information. + - include_source (bool, optional): If True, stores the source document + and links it to nodes in the graph using the MENTIONS relationship. + This is useful for tracing back the origin of data. Merges source + documents based on the `id` property from the source document metadata + if available; otherwise it calculates the MD5 hash of `page_content` + for merging process. Defaults to False. + - baseEntityLabel (bool, optional): If True, each newly created node + gets a secondary __Entity__ label, which is indexed and improves import + speed and performance. Defaults to False. + """ + + if baseEntityLabel: + self.query( + f"CREATE CONSTRAINT ON (b:{BASE_ENTITY_LABEL}) " + "ASSERT b.id IS UNIQUE;" ) + self.query(f"CREATE INDEX ON :{BASE_ENTITY_LABEL}(id);") + self.query(f"CREATE INDEX ON :{BASE_ENTITY_LABEL};") + + for document in graph_documents: + if include_source: + if not document.source.metadata.get("id"): + document.source.metadata["id"] = md5( + document.source.page_content.encode("utf-8") + ).hexdigest() - # Format relationship properties - formatted_rel_props = [] - for rel_name, properties in db_structured_schema["rel_props"].items(): - formatted_rel_props.append( - f"Relationship name: '{rel_name}', " - f"Relationship properties: {properties}" + self.query(INCLUDE_DOCS_QUERY, {"document": document.source.__dict__}) + + self.query( + NODE_IMPORT_QUERY, + {"data": _transform_nodes(document.nodes, baseEntityLabel)}, ) - # Format relationships - formatted_rels = [ - f"(:{rel['start']})-[:{rel['type']}]->(:{rel['end']})" - for rel in db_structured_schema["relationships"] - ] + rel_data = _transform_relationships(document.relationships, baseEntityLabel) + self.query( + REL_NODES_IMPORT_QUERY, + {"data": rel_data}, + ) + self.query( + REL_IMPORT_QUERY, + {"data": rel_data}, + ) - self.schema = "\n".join( - [ - "Node properties are the following:", - *formatted_node_props, - "Relationship properties are the following:", - *formatted_rel_props, - "The relationships are the following:", - *formatted_rels, - ] - ) + if include_source: + self.query( + INCLUDE_DOCS_SOURCE_QUERY, + {"data": rel_data, "document": document.source.__dict__}, + ) + self.refresh_schema() diff --git a/libs/community/tests/integration_tests/graphs/test_memgraph.py b/libs/community/tests/integration_tests/graphs/test_memgraph.py index 663f974d3f106..c005eec55ef3a 100644 --- a/libs/community/tests/integration_tests/graphs/test_memgraph.py +++ b/libs/community/tests/integration_tests/graphs/test_memgraph.py @@ -1,24 +1,44 @@ import os +from langchain_core.documents import Document + from langchain_community.graphs import MemgraphGraph +from langchain_community.graphs.graph_document import GraphDocument, Node, Relationship +from langchain_community.graphs.memgraph_graph import NODE_PROPERTIES_QUERY, REL_QUERY + +test_data = [ + GraphDocument( + nodes=[Node(id="foo", type="foo"), Node(id="bar", type="bar")], + relationships=[ + Relationship( + source=Node(id="foo", type="foo"), + target=Node(id="bar", type="bar"), + type="REL", + ) + ], + source=Document(page_content="source document"), + ) +] def test_cypher_return_correct_schema() -> None: """Test that chain returns direct results.""" + url = os.environ.get("MEMGRAPH_URI", "bolt://localhost:7687") username = os.environ.get("MEMGRAPH_USERNAME", "") password = os.environ.get("MEMGRAPH_PASSWORD", "") + assert url is not None assert username is not None assert password is not None - graph = MemgraphGraph( - url=url, - username=username, - password=password, - ) - # Delete all nodes in the graph - graph.query("MATCH (n) DETACH DELETE n") + graph = MemgraphGraph(url=url, username=username, password=password) + + # Drop graph + graph.query("STORAGE MODE IN_MEMORY_ANALYTICAL") + graph.query("DROP GRAPH") + graph.query("STORAGE MODE IN_MEMORY_TRANSACTIONAL") + # Create two nodes and a relationship graph.query( """ @@ -31,32 +51,123 @@ def test_cypher_return_correct_schema() -> None: ) # Refresh schema information graph.refresh_schema() - relationships = graph.query( - "CALL llm_util.schema('raw') YIELD schema " - "WITH schema.relationships AS relationships " - "UNWIND relationships AS relationship " - "RETURN relationship['start'] AS start, " - "relationship['type'] AS type, " - "relationship['end'] AS end " - "ORDER BY start, type, end;" - ) - node_props = graph.query( - "CALL llm_util.schema('raw') YIELD schema " - "WITH schema.node_props AS nodes " - "WITH nodes['LabelA'] AS properties " - "UNWIND properties AS property " - "RETURN property['property'] AS prop, " - "property['type'] AS type " - "ORDER BY prop ASC;" - ) + node_properties = graph.query(NODE_PROPERTIES_QUERY) + relationships = graph.query(REL_QUERY) + + expected_node_properties = [ + { + "output": { + "labels": ":`LabelA`", + "properties": [{"key": "property_a", "types": ["String"]}], + } + }, + {"output": {"labels": ":`LabelB`", "properties": [{"key": "", "types": []}]}}, + {"output": {"labels": ":`LabelC`", "properties": [{"key": "", "types": []}]}}, + ] expected_relationships = [ - {"start": "LabelA", "type": "REL_TYPE", "end": "LabelB"}, - {"start": "LabelA", "type": "REL_TYPE", "end": "LabelC"}, + { + "start_node_labels": ["LabelA"], + "rel_type": "REL_TYPE", + "end_node_labels": ["LabelC"], + "properties_info": [["rel_prop", "STRING"]], + }, + { + "start_node_labels": ["LabelA"], + "rel_type": "REL_TYPE", + "end_node_labels": ["LabelB"], + "properties_info": [], + }, ] - expected_node_props = [{"prop": "property_a", "type": "str"}] + graph.close() + assert node_properties == expected_node_properties assert relationships == expected_relationships - assert node_props == expected_node_props + + +def test_add_graph_documents() -> None: + """Test that Memgraph correctly imports graph document.""" + url = os.environ.get("MEMGRAPH_URI", "bolt://localhost:7687") + username = os.environ.get("MEMGRAPH_USERNAME", "") + password = os.environ.get("MEMGRAPH_PASSWORD", "") + + assert url is not None + assert username is not None + assert password is not None + + graph = MemgraphGraph( + url=url, username=username, password=password, refresh_schema=False + ) + # Drop graph + graph.query("STORAGE MODE IN_MEMORY_ANALYTICAL") + graph.query("DROP GRAPH") + graph.query("STORAGE MODE IN_MEMORY_TRANSACTIONAL") + # Create KG + graph.add_graph_documents(test_data) + output = graph.query("MATCH (n) RETURN labels(n) AS label, count(*) AS count") + # Close the connection + graph.close() + assert output == [{"label": ["bar"], "count": 1}, {"label": ["foo"], "count": 1}] + + +def test_add_graph_documents_base_entity() -> None: + """Test that Memgraph correctly imports graph document with Entity label.""" + url = os.environ.get("MEMGRAPH_URI", "bolt://localhost:7687") + username = os.environ.get("MEMGRAPH_USERNAME", "") + password = os.environ.get("MEMGRAPH_PASSWORD", "") + + assert url is not None + assert username is not None + assert password is not None + + graph = MemgraphGraph( + url=url, username=username, password=password, refresh_schema=False + ) + # Drop graph + graph.query("STORAGE MODE IN_MEMORY_ANALYTICAL") + graph.query("DROP GRAPH") + graph.query("STORAGE MODE IN_MEMORY_TRANSACTIONAL") + # Create KG + graph.add_graph_documents(test_data, baseEntityLabel=True) + output = graph.query("MATCH (n) RETURN labels(n) AS label, count(*) AS count") + + # Close the connection + graph.close() + + assert output == [ + {"label": ["__Entity__", "bar"], "count": 1}, + {"label": ["__Entity__", "foo"], "count": 1}, + ] + + +def test_add_graph_documents_include_source() -> None: + """Test that Memgraph correctly imports graph document with source included.""" + url = os.environ.get("MEMGRAPH_URI", "bolt://localhost:7687") + username = os.environ.get("MEMGRAPH_USERNAME", "") + password = os.environ.get("MEMGRAPH_PASSWORD", "") + + assert url is not None + assert username is not None + assert password is not None + + graph = MemgraphGraph( + url=url, username=username, password=password, refresh_schema=False + ) + # Drop graph + graph.query("STORAGE MODE IN_MEMORY_ANALYTICAL") + graph.query("DROP GRAPH") + graph.query("STORAGE MODE IN_MEMORY_TRANSACTIONAL") + # Create KG + graph.add_graph_documents(test_data, include_source=True) + output = graph.query("MATCH (n) RETURN labels(n) AS label, count(*) AS count") + + # Close the connection + graph.close() + + assert output == [ + {"label": ["bar"], "count": 1}, + {"label": ["foo"], "count": 1}, + {"label": ["Document"], "count": 1}, + ] From 0d20c314dd0508ea956482fbdd6ce7854b85fc01 Mon Sep 17 00:00:00 2001 From: Alex Tonkonozhenko Date: Tue, 10 Dec 2024 17:05:23 +0100 Subject: [PATCH 07/14] Confluence Loader: Fix CQL loading (#27620) fix #12082 --- .../document_loaders/confluence.py | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/libs/community/langchain_community/document_loaders/confluence.py b/libs/community/langchain_community/document_loaders/confluence.py index 263c0c8d31fe2..954f4139cae5c 100644 --- a/libs/community/langchain_community/document_loaders/confluence.py +++ b/libs/community/langchain_community/document_loaders/confluence.py @@ -442,17 +442,25 @@ def lazy_load(self) -> Iterator[Document]: yield from self._lazy_load() def _search_content_by_cql( - self, cql: str, include_archived_spaces: Optional[bool] = None, **kwargs: Any - ) -> List[dict]: - url = "rest/api/content/search" + self, + cql: str, + include_archived_spaces: Optional[bool] = None, + next_url: str = "", + **kwargs: Any, + ) -> tuple[List[dict], str]: + if next_url: + response = self.confluence.get(next_url) + else: + url = "rest/api/content/search" + + params: Dict[str, Any] = {"cql": cql} + params.update(kwargs) + if include_archived_spaces is not None: + params["includeArchivedSpaces"] = include_archived_spaces - params: Dict[str, Any] = {"cql": cql} - params.update(kwargs) - if include_archived_spaces is not None: - params["includeArchivedSpaces"] = include_archived_spaces + response = self.confluence.get(url, params=params) - response = self.confluence.get(url, params=params) - return response.get("results", []) + return response.get("results", []), response.get("_links", {}).get("next", "") def paginate_request(self, retrieval_method: Callable, **kwargs: Any) -> List: """Paginate the various methods to retrieve groups of pages. @@ -477,6 +485,7 @@ def paginate_request(self, retrieval_method: Callable, **kwargs: Any) -> List: max_pages = kwargs.pop("max_pages") docs: List[dict] = [] + next_url: str = "" while len(docs) < max_pages: get_pages = retry( reraise=True, @@ -490,9 +499,15 @@ def paginate_request(self, retrieval_method: Callable, **kwargs: Any) -> List: ), before_sleep=before_sleep_log(logger, logging.WARNING), )(retrieval_method) - batch = get_pages(**kwargs, start=len(docs)) - if not batch: - break + if self.cql: # cursor pagination for CQL + batch, next_url = get_pages(**kwargs, next_url=next_url) + if not next_url: + docs.extend(batch) + break + else: + batch = get_pages(**kwargs, start=len(docs)) + if not batch: + break docs.extend(batch) return docs[:max_pages] @@ -694,8 +709,11 @@ def process_pdf( return text for i, image in enumerate(images): - image_text = pytesseract.image_to_string(image, lang=ocr_languages) - text += f"Page {i + 1}:\n{image_text}\n\n" + try: + image_text = pytesseract.image_to_string(image, lang=ocr_languages) + text += f"Page {i + 1}:\n{image_text}\n\n" + except pytesseract.TesseractError as ex: + logger.warning(f"TesseractError: {ex}") return text From c1d348e95d0f89f8a7322d3458e5a39a73de63bf Mon Sep 17 00:00:00 2001 From: Johannes Mohren <60135409+jmohren@users.noreply.github.com> Date: Tue, 10 Dec 2024 17:22:58 +0100 Subject: [PATCH 08/14] doc-loader: retain Azure Doc Intelligence API metadata in Document parser (#28382) **Description**: This PR modifies the doc_intelligence.py parser in the community package to include all metadata returned by the Azure Doc Intelligence API in the Document object. Previously, only the parsed content (markdown) was retained, while other important metadata such as bounding boxes (bboxes) for images and tables was discarded. These image bboxes are crucial for supporting use cases like multi-modal RAG workflows when using Azure Doc Intelligence. The change ensures that all information returned by the Azure Doc Intelligence API is preserved by setting the metadata attribute of the Document object to the entire result returned by the API, rather than an empty dictionary. This extends the parser's utility for complex use cases without breaking existing functionality. **Issue**: This change does not address a specific issue number, but it resolves a critical limitation in supporting multimodal workflows when using the LangChain wrapper for the Azure API. **Dependencies**: No additional dependencies are required for this change. --------- Co-authored-by: jmohren --- .../document_loaders/parsers/doc_intelligence.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/community/langchain_community/document_loaders/parsers/doc_intelligence.py b/libs/community/langchain_community/document_loaders/parsers/doc_intelligence.py index 2d77fcd1f87a7..107e569339fb5 100644 --- a/libs/community/langchain_community/document_loaders/parsers/doc_intelligence.py +++ b/libs/community/langchain_community/document_loaders/parsers/doc_intelligence.py @@ -71,7 +71,7 @@ def _generate_docs_page(self, result: Any) -> Iterator[Document]: yield d def _generate_docs_single(self, result: Any) -> Iterator[Document]: - yield Document(page_content=result.content, metadata={}) + yield Document(page_content=result.content, metadata=result.as_dict()) def lazy_parse(self, blob: Blob) -> Iterator[Document]: """Lazily parse the blob.""" From 704059466aea48bb3076bd9013a8ad9c107c61bc Mon Sep 17 00:00:00 2001 From: Tomaz Bratanic Date: Tue, 10 Dec 2024 18:46:50 +0100 Subject: [PATCH 09/14] Fix graph example documentation (#28653) --- docs/docs/tutorials/graph.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/tutorials/graph.ipynb b/docs/docs/tutorials/graph.ipynb index 41960e0186b47..1bd434c89cd71 100644 --- a/docs/docs/tutorials/graph.ipynb +++ b/docs/docs/tutorials/graph.ipynb @@ -732,7 +732,7 @@ " ][0][\"type\"]\n", " == \"STRING\"\n", " ):\n", - " pass\n", + " continue\n", " mapping = enhanced_graph.query(\n", " f\"MATCH (n:{filter.node_label}) WHERE toLower(n.`{filter.property_key}`) = toLower($value) RETURN 'yes' LIMIT 1\",\n", " {\"value\": filter.property_value},\n", From bc4dc7f4b1c12203018a1f864e3ade5a09aa2607 Mon Sep 17 00:00:00 2001 From: ccurme Date: Tue, 10 Dec 2024 12:54:37 -0500 Subject: [PATCH 10/14] ollama[patch]: permit streaming for tool calls (#28654) Resolves https://github.com/langchain-ai/langchain/issues/28543 Ollama recently [released](https://github.com/ollama/ollama/releases/tag/v0.4.6) support for streaming tool calls. Previously we would override the `stream` parameter if tools were passed in. Covered in standard tests here: https://github.com/langchain-ai/langchain/blob/c1d348e95d0f89f8a7322d3458e5a39a73de63bf/libs/standard-tests/langchain_tests/integration_tests/chat_models.py#L893-L897 Before, the test generates one message chunk: ```python [ AIMessageChunk( content='', additional_kwargs={}, response_metadata={ 'model': 'llama3.1', 'created_at': '2024-12-10T17:49:04.468487Z', 'done': True, 'done_reason': 'stop', 'total_duration': 525471208, 'load_duration': 19701000, 'prompt_eval_count': 170, 'prompt_eval_duration': 31000000, 'eval_count': 17, 'eval_duration': 473000000, 'message': Message( role='assistant', content='', images=None, tool_calls=[ ToolCall( function=Function(name='magic_function', arguments={'input': 3}) ) ] ) }, id='run-552bbe0f-8fb2-4105-ada1-fa38c1db444d', tool_calls=[ { 'name': 'magic_function', 'args': {'input': 3}, 'id': 'b0a4dc07-7d7a-487b-bd7b-ad062c2363a2', 'type': 'tool_call', }, ], usage_metadata={ 'input_tokens': 170, 'output_tokens': 17, 'total_tokens': 187 }, tool_call_chunks=[ { 'name': 'magic_function', 'args': '{"input": 3}', 'id': 'b0a4dc07-7d7a-487b-bd7b-ad062c2363a2', 'index': None, 'type': 'tool_call_chunk', } ] ) ] ``` After, it generates two (tool call in one, response metadata in another): ```python [ AIMessageChunk( content='', additional_kwargs={}, response_metadata={}, id='run-9a3f0860-baa1-4bae-9562-13a61702de70', tool_calls=[ { 'name': 'magic_function', 'args': {'input': 3}, 'id': '5bbaee2d-c335-4709-8d67-0783c74bd2e0', 'type': 'tool_call', }, ], tool_call_chunks=[ { 'name': 'magic_function', 'args': '{"input": 3}', 'id': '5bbaee2d-c335-4709-8d67-0783c74bd2e0', 'index': None, 'type': 'tool_call_chunk', }, ], ), AIMessageChunk( content='', additional_kwargs={}, response_metadata={ 'model': 'llama3.1', 'created_at': '2024-12-10T17:46:43.278436Z', 'done': True, 'done_reason': 'stop', 'total_duration': 514282750, 'load_duration': 16894458, 'prompt_eval_count': 170, 'prompt_eval_duration': 31000000, 'eval_count': 17, 'eval_duration': 464000000, 'message': Message( role='assistant', content='', images=None, tool_calls=None ), }, id='run-9a3f0860-baa1-4bae-9562-13a61702de70', usage_metadata={ 'input_tokens': 170, 'output_tokens': 17, 'total_tokens': 187 } ), ] ``` --- libs/partners/ollama/langchain_ollama/chat_models.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/libs/partners/ollama/langchain_ollama/chat_models.py b/libs/partners/ollama/langchain_ollama/chat_models.py index 2565660a4c472..b4f8c0f2d9aab 100644 --- a/libs/partners/ollama/langchain_ollama/chat_models.py +++ b/libs/partners/ollama/langchain_ollama/chat_models.py @@ -306,8 +306,6 @@ class ChatOllama(BaseChatModel): '{"location": "Pune, India", "time_of_day": "morning"}' Tool Calling: - .. warning:: - Ollama currently does not support streaming for tools .. code-block:: python @@ -459,12 +457,9 @@ def _chat_params( }, ) - tools = kwargs.get("tools") - default_stream = not bool(tools) - params = { "messages": ollama_messages, - "stream": kwargs.pop("stream", default_stream), + "stream": kwargs.pop("stream", True), "model": kwargs.pop("model", self.model), "format": kwargs.pop("format", self.format), "options": Options(**options_dict), @@ -472,7 +467,7 @@ def _chat_params( **kwargs, } - if tools: + if tools := kwargs.get("tools"): params["tools"] = tools return params From e6a62d84228b97dfe37930145cc959dc9f4cec6a Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Tue, 10 Dec 2024 10:50:58 -0800 Subject: [PATCH 11/14] core,langchain,community[patch]: allow langsmith 0.2 (#28598) --- .../embeddings/fastembed.py | 6 +- .../langchain_community/embeddings/laser.py | 6 +- .../langchain_community/utilities/redis.py | 4 +- .../vectorstores/semadb.py | 6 +- .../vectorstores/usearch.py | 6 +- libs/community/poetry.lock | 185 ++++-- libs/community/pyproject.toml | 2 +- .../vectorstores/test_singlestoredb.py | 8 +- .../unit_tests/vectorstores/test_utils.py | 4 +- libs/core/langchain_core/tracers/context.py | 3 +- libs/core/poetry.lock | 587 ++++++++++-------- libs/core/pyproject.toml | 2 +- .../unit_tests/runnables/test_runnable.py | 6 +- .../document_compressors/embeddings_filter.py | 4 +- libs/langchain/poetry.lock | 183 ++++-- libs/langchain/pyproject.toml | 2 +- 16 files changed, 588 insertions(+), 426 deletions(-) diff --git a/libs/community/langchain_community/embeddings/fastembed.py b/libs/community/langchain_community/embeddings/fastembed.py index 28105dd72088b..e40a9d473ddc0 100644 --- a/libs/community/langchain_community/embeddings/fastembed.py +++ b/libs/community/langchain_community/embeddings/fastembed.py @@ -1,6 +1,6 @@ import importlib import importlib.metadata -from typing import Any, Dict, List, Literal, Optional +from typing import Any, Dict, List, Literal, Optional, cast import numpy as np from langchain_core.embeddings import Embeddings @@ -117,7 +117,7 @@ def embed_documents(self, texts: List[str]) -> List[List[float]]: embeddings = self.model.embed( texts, batch_size=self.batch_size, parallel=self.parallel ) - return [e.tolist() for e in embeddings] + return [cast(List[float], e.tolist()) for e in embeddings] def embed_query(self, text: str) -> List[float]: """Generate query embeddings using FastEmbed. @@ -133,4 +133,4 @@ def embed_query(self, text: str) -> List[float]: text, batch_size=self.batch_size, parallel=self.parallel ) ) - return query_embeddings.tolist() + return cast(List[float], query_embeddings.tolist()) diff --git a/libs/community/langchain_community/embeddings/laser.py b/libs/community/langchain_community/embeddings/laser.py index 1299e55e518c0..088ffbb4d1bd4 100644 --- a/libs/community/langchain_community/embeddings/laser.py +++ b/libs/community/langchain_community/embeddings/laser.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, List, Optional +from typing import Any, Dict, List, Optional, cast import numpy as np from langchain_core.embeddings import Embeddings @@ -73,7 +73,7 @@ def embed_documents(self, texts: List[str]) -> List[List[float]]: embeddings: np.ndarray embeddings = self._encoder_pipeline.encode_sentences(texts) - return embeddings.tolist() + return cast(List[List[float]], embeddings.tolist()) def embed_query(self, text: str) -> List[float]: """Generate single query text embeddings using LASER. @@ -86,4 +86,4 @@ def embed_query(self, text: str) -> List[float]: """ query_embeddings: np.ndarray query_embeddings = self._encoder_pipeline.encode_sentences([text]) - return query_embeddings.tolist()[0] + return cast(List[List[float]], query_embeddings.tolist())[0] diff --git a/libs/community/langchain_community/utilities/redis.py b/libs/community/langchain_community/utilities/redis.py index 09aa0d274461d..7877e6ae6cb6d 100644 --- a/libs/community/langchain_community/utilities/redis.py +++ b/libs/community/langchain_community/utilities/redis.py @@ -2,7 +2,7 @@ import logging import re -from typing import TYPE_CHECKING, Any, List, Optional, Pattern +from typing import TYPE_CHECKING, Any, List, Optional, Pattern, cast from urllib.parse import urlparse import numpy as np @@ -18,7 +18,7 @@ def _array_to_buffer(array: List[float], dtype: Any = np.float32) -> bytes: def _buffer_to_array(buffer: bytes, dtype: Any = np.float32) -> List[float]: - return np.frombuffer(buffer, dtype=dtype).tolist() + return cast(List[float], np.frombuffer(buffer, dtype=dtype).tolist()) class TokenEscaper: diff --git a/libs/community/langchain_community/vectorstores/semadb.py b/libs/community/langchain_community/vectorstores/semadb.py index b54f832cee6cf..b39d46eb6bd27 100644 --- a/libs/community/langchain_community/vectorstores/semadb.py +++ b/libs/community/langchain_community/vectorstores/semadb.py @@ -1,4 +1,4 @@ -from typing import Any, Iterable, List, Optional, Tuple +from typing import Any, Iterable, List, Optional, Tuple, cast from uuid import uuid4 import numpy as np @@ -111,7 +111,7 @@ def add_texts( embed_matrix = embed_matrix / np.linalg.norm( embed_matrix, axis=1, keepdims=True ) - embeddings = embed_matrix.tolist() + embeddings = cast(List[List[float]], embed_matrix.tolist()) # Create points ids: List[str] = [] points = [] @@ -186,7 +186,7 @@ def _search_points(self, embedding: List[float], k: int = 4) -> List[dict]: if self.distance_strategy == DistanceStrategy.COSINE: vec = np.array(embedding) vec = vec / np.linalg.norm(vec) - embedding = vec.tolist() + embedding = cast(List[float], vec.tolist()) # Perform search request payload = { "vector": embedding, diff --git a/libs/community/langchain_community/vectorstores/usearch.py b/libs/community/langchain_community/vectorstores/usearch.py index c59446de54da1..4f9d69d02f7ee 100644 --- a/libs/community/langchain_community/vectorstores/usearch.py +++ b/libs/community/langchain_community/vectorstores/usearch.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Any, Dict, Iterable, List, Optional, Tuple, Union +from typing import Any, Dict, Iterable, List, Optional, Tuple, Union, cast import numpy as np from langchain_core.documents import Document @@ -75,7 +75,7 @@ def add_texts( self.index.add(np.array(ids), np.array(embeddings)) self.docstore.add(dict(zip(ids, documents))) self.ids.extend(ids) - return ids.tolist() + return cast(List[str], ids.tolist()) def similarity_search_with_score( self, @@ -171,4 +171,4 @@ def from_texts( usearch = guard_import("usearch.index") index = usearch.Index(ndim=len(embeddings[0]), metric=metric) index.add(np.array(ids), np.array(embeddings)) - return cls(embedding, index, docstore, ids.tolist()) + return cls(embedding, index, docstore, cast(List[str], ids.tolist())) diff --git a/libs/community/poetry.lock b/libs/community/poetry.lock index 13f550948f4d7..2e558743cf910 100644 --- a/libs/community/poetry.lock +++ b/libs/community/poetry.lock @@ -1,4 +1,4 @@ -# 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" @@ -1827,7 +1827,7 @@ aiohttp = "^3.8.3" async-timeout = {version = "^4.0.0", markers = "python_version < \"3.11\""} langchain-core = "^0.3.22" langchain-text-splitters = "^0.3.0" -langsmith = "^0.1.17" +langsmith = ">=0.1.17,<0.3" numpy = [ {version = ">=1.22.4,<2", markers = "python_version < \"3.12\""}, {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, @@ -1853,7 +1853,7 @@ develop = true [package.dependencies] jsonpatch = "^1.33" -langsmith = "^0.1.125" +langsmith = ">=0.1.125,<0.3" packaging = ">=23.2,<25" pydantic = [ {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""}, @@ -1869,7 +1869,7 @@ url = "../core" [[package]] name = "langchain-tests" -version = "0.3.5" +version = "0.3.6" description = "Standard tests for LangChain implementations" optional = false python-versions = ">=3.9,<4.0" @@ -1878,7 +1878,7 @@ develop = true [package.dependencies] httpx = ">=0.25.0,<1" -langchain-core = "^0.3.21" +langchain-core = "^0.3.22" numpy = [ {version = ">=1.24.0,<2.0.0", markers = "python_version < \"3.12\""}, {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, @@ -1910,13 +1910,13 @@ url = "../text-splitters" [[package]] name = "langsmith" -version = "0.1.147" +version = "0.2.1" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false -python-versions = "<4.0,>=3.8.1" +python-versions = "<4.0,>=3.9" files = [ - {file = "langsmith-0.1.147-py3-none-any.whl", hash = "sha256:7166fc23b965ccf839d64945a78e9f1157757add228b086141eb03a60d699a15"}, - {file = "langsmith-0.1.147.tar.gz", hash = "sha256:2e933220318a4e73034657103b3b1a3a6109cc5db3566a7e8e03be8d6d7def7a"}, + {file = "langsmith-0.2.1-py3-none-any.whl", hash = "sha256:9619c2d82a6d35cb6e2ff4472686415bb5bc238b12e2ed95b3e87b134228d7b4"}, + {file = "langsmith-0.2.1.tar.gz", hash = "sha256:2374dfa98fb43bb17d3446889559df36573a7fe2dddc09420b514b183512125d"}, ] [package.dependencies] @@ -2425,66 +2425,66 @@ files = [ [[package]] name = "numpy" -version = "2.1.3" +version = "2.2.0" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" files = [ - {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"}, - {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"}, - {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"}, - {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"}, - {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, - {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, - {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, - {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, - {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, - {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, - {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"}, - {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31"}, + {file = "numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661"}, + {file = "numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d"}, + {file = "numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410"}, + {file = "numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef"}, + {file = "numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1"}, + {file = "numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742"}, + {file = "numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e"}, + {file = "numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72"}, + {file = "numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066"}, + {file = "numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221"}, + {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"}, ] [[package]] @@ -3852,14 +3852,61 @@ description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ + {file = "SQLAlchemy-2.0.36-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59b8f3adb3971929a3e660337f5dacc5942c2cdb760afcabb2614ffbda9f9f72"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37350015056a553e442ff672c2d20e6f4b6d0b2495691fa239d8aa18bb3bc908"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8318f4776c85abc3f40ab185e388bee7a6ea99e7fa3a30686580b209eaa35c08"}, {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c245b1fbade9c35e5bd3b64270ab49ce990369018289ecfde3f9c318411aaa07"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69f93723edbca7342624d09f6704e7126b152eaed3cdbb634cb657a54332a3c5"}, {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f9511d8dd4a6e9271d07d150fb2f81874a3c8c95e11ff9af3a2dfc35fe42ee44"}, {file = "SQLAlchemy-2.0.36-cp310-cp310-win32.whl", hash = "sha256:c3f3631693003d8e585d4200730616b78fafd5a01ef8b698f6967da5c605b3fa"}, {file = "SQLAlchemy-2.0.36-cp310-cp310-win_amd64.whl", hash = "sha256:a86bfab2ef46d63300c0f06936bd6e6c0105faa11d509083ba8f2f9d237fb5b5"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fd3a55deef00f689ce931d4d1b23fa9f04c880a48ee97af488fd215cf24e2a6c"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f5e9cd989b45b73bd359f693b935364f7e1f79486e29015813c338450aa5a71"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ddd9db6e59c44875211bc4c7953a9f6638b937b0a88ae6d09eb46cced54eff"}, {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2519f3a5d0517fc159afab1015e54bb81b4406c278749779be57a569d8d1bb0d"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59b1ee96617135f6e1d6f275bbe988f419c5178016f3d41d3c0abb0c819f75bb"}, {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:39769a115f730d683b0eb7b694db9789267bcd027326cccc3125e862eb03bfd8"}, {file = "SQLAlchemy-2.0.36-cp311-cp311-win32.whl", hash = "sha256:66bffbad8d6271bb1cc2f9a4ea4f86f80fe5e2e3e501a5ae2a3dc6a76e604e6f"}, {file = "SQLAlchemy-2.0.36-cp311-cp311-win_amd64.whl", hash = "sha256:23623166bfefe1487d81b698c423f8678e80df8b54614c2bf4b4cfcd7c711959"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7b64e6ec3f02c35647be6b4851008b26cff592a95ecb13b6788a54ef80bbdd4"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:46331b00096a6db1fdc052d55b101dbbfc99155a548e20a0e4a8e5e4d1362855"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdf3386a801ea5aba17c6410dd1dc8d39cf454ca2565541b5ac42a84e1e28f53"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9dfa18ff2a67b09b372d5db8743c27966abf0e5344c555d86cc7199f7ad83a"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:90812a8933df713fdf748b355527e3af257a11e415b613dd794512461eb8a686"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1bc330d9d29c7f06f003ab10e1eaced295e87940405afe1b110f2eb93a233588"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-win32.whl", hash = "sha256:79d2e78abc26d871875b419e1fd3c0bca31a1cb0043277d0d850014599626c2e"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-win_amd64.whl", hash = "sha256:b544ad1935a8541d177cb402948b94e871067656b3a0b9e91dbec136b06a2ff5"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5cc79df7f4bc3d11e4b542596c03826063092611e481fcf1c9dfee3c94355ef"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3c01117dd36800f2ecaa238c65365b7b16497adc1522bf84906e5710ee9ba0e8"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bc633f4ee4b4c46e7adcb3a9b5ec083bf1d9a97c1d3854b92749d935de40b9b"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e46ed38affdfc95d2c958de328d037d87801cfcbea6d421000859e9789e61c2"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2985c0b06e989c043f1dc09d4fe89e1616aadd35392aea2844f0458a989eacf"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a121d62ebe7d26fec9155f83f8be5189ef1405f5973ea4874a26fab9f1e262c"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-win32.whl", hash = "sha256:0572f4bd6f94752167adfd7c1bed84f4b240ee6203a95e05d1e208d488d0d436"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-win_amd64.whl", hash = "sha256:8c78ac40bde930c60e0f78b3cd184c580f89456dd87fc08f9e3ee3ce8765ce88"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:be9812b766cad94a25bc63bec11f88c4ad3629a0cec1cd5d4ba48dc23860486b"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aae840ebbd6cdd41af1c14590e5741665e5272d2fee999306673a1bb1fdb4d"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4557e1f11c5f653ebfdd924f3f9d5ebfc718283b0b9beebaa5dd6b77ec290971"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07b441f7d03b9a66299ce7ccf3ef2900abc81c0db434f42a5694a37bd73870f2"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:28120ef39c92c2dd60f2721af9328479516844c6b550b077ca450c7d7dc68575"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-win32.whl", hash = "sha256:b81ee3d84803fd42d0b154cb6892ae57ea6b7c55d8359a02379965706c7efe6c"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-win_amd64.whl", hash = "sha256:f942a799516184c855e1a32fbc7b29d7e571b52612647866d4ec1c3242578fcb"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3d6718667da04294d7df1670d70eeddd414f313738d20a6f1d1f379e3139a545"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:72c28b84b174ce8af8504ca28ae9347d317f9dba3999e5981a3cd441f3712e24"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b11d0cfdd2b095e7b0686cf5fabeb9c67fae5b06d265d8180715b8cfa86522e3"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e32092c47011d113dc01ab3e1d3ce9f006a47223b18422c5c0d150af13a00687"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6a440293d802d3011028e14e4226da1434b373cbaf4a4bbb63f845761a708346"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c54a1e53a0c308a8e8a7dffb59097bff7facda27c70c286f005327f21b2bd6b1"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-win32.whl", hash = "sha256:1e0d612a17581b6616ff03c8e3d5eff7452f34655c901f75d62bd86449d9750e"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-win_amd64.whl", hash = "sha256:8958b10490125124463095bbdadda5aa22ec799f91958e410438ad6c97a7b793"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc022184d3e5cacc9579e41805a681187650e170eb2fd70e28b86192a479dcaa"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b817d41d692bf286abc181f8af476c4fbef3fd05e798777492618378448ee689"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4e46a888b54be23d03a89be510f24a7652fe6ff660787b96cd0e57a4ebcb46d"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4ae3005ed83f5967f961fd091f2f8c5329161f69ce8480aa8168b2d7fe37f06"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:03e08af7a5f9386a43919eda9de33ffda16b44eb11f3b313e6822243770e9763"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3dbb986bad3ed5ceaf090200eba750b5245150bd97d3e67343a3cfed06feecf7"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-win32.whl", hash = "sha256:9fe53b404f24789b5ea9003fc25b9a3988feddebd7e7b369c8fac27ad6f52f28"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-win_amd64.whl", hash = "sha256:af148a33ff0349f53512a049c6406923e4e02bf2f26c5fb285f143faf4f0e46a"}, {file = "SQLAlchemy-2.0.36-py3-none-any.whl", hash = "sha256:fddbe92b4760c6f5d48162aef14824add991aeda8ddadb3c31d56eb15ca69f8e"}, {file = "sqlalchemy-2.0.36.tar.gz", hash = "sha256:7f2767680b6d2398aea7082e45a774b2b0767b5c8d8ffb9c8b683088ea9b29c5"}, ] @@ -4094,13 +4141,13 @@ files = [ [[package]] name = "types-protobuf" -version = "5.28.3.20241203" +version = "5.29.1.20241207" description = "Typing stubs for protobuf" optional = false python-versions = ">=3.8" files = [ - {file = "types_protobuf-5.28.3.20241203-py3-none-any.whl", hash = "sha256:5367632a4785394b0504e7c1e4d54a2dceeae9cd4f73a705d0f6499fc99cecb1"}, - {file = "types_protobuf-5.28.3.20241203.tar.gz", hash = "sha256:2e1c962bdf76c576506b5fc0678d28efa6652a54c04ae46562a6209e777bd789"}, + {file = "types_protobuf-5.29.1.20241207-py3-none-any.whl", hash = "sha256:92893c42083e9b718c678badc0af7a9a1307b92afe1599e5cba5f3d35b668b2f"}, + {file = "types_protobuf-5.29.1.20241207.tar.gz", hash = "sha256:2ebcadb8ab3ef2e3e2f067e0882906d64ba0dc65fc5b0fd7a8b692315b4a0be9"}, ] [[package]] @@ -4628,4 +4675,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "82c8110d73b618825af6b9083eb22ad670344dd4160bf2a13a71d447149f9059" +content-hash = "67b850cc68471b3b1fab7b3932cd9ddf29c96c220fd3c2657e773295413a8a3a" diff --git a/libs/community/pyproject.toml b/libs/community/pyproject.toml index 43a6fec431090..ef5e4924a5240 100644 --- a/libs/community/pyproject.toml +++ b/libs/community/pyproject.toml @@ -39,7 +39,7 @@ aiohttp = "^3.8.3" tenacity = ">=8.1.0,!=8.4.0,<10" dataclasses-json = ">= 0.5.7, < 0.7" pydantic-settings = "^2.4.0" -langsmith = "^0.1.125" +langsmith = ">=0.1.125,<0.3" httpx-sse = "^0.4.0" [[tool.poetry.dependencies.numpy]] version = ">=1.22.4,<2" diff --git a/libs/community/tests/integration_tests/vectorstores/test_singlestoredb.py b/libs/community/tests/integration_tests/vectorstores/test_singlestoredb.py index fe8e3ca3004bf..8308adaa7603f 100644 --- a/libs/community/tests/integration_tests/vectorstores/test_singlestoredb.py +++ b/libs/community/tests/integration_tests/vectorstores/test_singlestoredb.py @@ -3,7 +3,7 @@ import math import os import tempfile -from typing import List +from typing import List, cast import numpy as np import pytest @@ -60,13 +60,13 @@ class RandomEmbeddings(Embeddings): """Fake embeddings with random vectors. For testing purposes.""" def embed_documents(self, texts: List[str]) -> List[List[float]]: - return [np.random.rand(100).tolist() for _ in texts] + return [cast(list[float], np.random.rand(100).tolist()) for _ in texts] def embed_query(self, text: str) -> List[float]: - return np.random.rand(100).tolist() + return cast(list[float], np.random.rand(100).tolist()) def embed_image(self, uris: List[str]) -> List[List[float]]: - return [np.random.rand(100).tolist() for _ in uris] + return [cast(list[float], np.random.rand(100).tolist()) for _ in uris] class IncrementalEmbeddings(Embeddings): diff --git a/libs/community/tests/unit_tests/vectorstores/test_utils.py b/libs/community/tests/unit_tests/vectorstores/test_utils.py index c9714df6aa6e7..5d4e97d068b0e 100644 --- a/libs/community/tests/unit_tests/vectorstores/test_utils.py +++ b/libs/community/tests/unit_tests/vectorstores/test_utils.py @@ -1,5 +1,7 @@ """Test vector store utility functions.""" +from typing import cast + import numpy as np from langchain_core.documents import Document @@ -53,7 +55,7 @@ def test_maximal_marginal_relevance() -> None: def test_maximal_marginal_relevance_query_dim() -> None: query_embedding = np.random.random(size=5) query_embedding_2d = query_embedding.reshape((1, 5)) - embedding_list = np.random.random(size=(4, 5)).tolist() + embedding_list = cast(list[list[float]], np.random.random(size=(4, 5)).tolist()) first = maximal_marginal_relevance(query_embedding, embedding_list) second = maximal_marginal_relevance(query_embedding_2d, embedding_list) assert first == second diff --git a/libs/core/langchain_core/tracers/context.py b/libs/core/langchain_core/tracers/context.py index 295c68552a3a8..3694db7188b06 100644 --- a/libs/core/langchain_core/tracers/context.py +++ b/libs/core/langchain_core/tracers/context.py @@ -6,6 +6,7 @@ from typing import ( TYPE_CHECKING, Any, + Literal, Optional, Union, cast, @@ -141,7 +142,7 @@ def _get_trace_callbacks( return cb -def _tracing_v2_is_enabled() -> bool: +def _tracing_v2_is_enabled() -> Union[bool, Literal["local"]]: if tracing_v2_callback_var.get() is not None: return True return ls_utils.tracing_is_enabled() diff --git a/libs/core/poetry.lock b/libs/core/poetry.lock index dfc6f8a05c59f..5d5d379300867 100644 --- a/libs/core/poetry.lock +++ b/libs/core/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 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 = "annotated-types" @@ -13,24 +13,24 @@ files = [ [[package]] name = "anyio" -version = "4.6.2.post1" +version = "4.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, - {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, + {file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"}, + {file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"}, ] [package.dependencies] 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\""} +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -doc = ["Sphinx (>=7.4,<8.0)", "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", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +doc = ["Sphinx (>=7.4,<8.0)", "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", "truststore (>=0.9.1)", "uvloop (>=0.21)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -122,21 +122,18 @@ test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock [[package]] name = "asttokens" -version = "2.4.1" +version = "3.0.0" description = "Annotate AST trees with source code positions" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, - {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, ] -[package.dependencies] -six = ">=1.12.0" - [package.extras] -astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] -test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "async-lru" @@ -457,37 +454,37 @@ test = ["pytest"] [[package]] name = "debugpy" -version = "1.8.8" +version = "1.8.9" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.8-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e59b1607c51b71545cb3496876544f7186a7a27c00b436a62f285603cc68d1c6"}, - {file = "debugpy-1.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6531d952b565b7cb2fbd1ef5df3d333cf160b44f37547a4e7cf73666aca5d8d"}, - {file = "debugpy-1.8.8-cp310-cp310-win32.whl", hash = "sha256:b01f4a5e5c5fb1d34f4ccba99a20ed01eabc45a4684f4948b5db17a319dfb23f"}, - {file = "debugpy-1.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:535f4fb1c024ddca5913bb0eb17880c8f24ba28aa2c225059db145ee557035e9"}, - {file = "debugpy-1.8.8-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:c399023146e40ae373753a58d1be0a98bf6397fadc737b97ad612886b53df318"}, - {file = "debugpy-1.8.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09cc7b162586ea2171eea055985da2702b0723f6f907a423c9b2da5996ad67ba"}, - {file = "debugpy-1.8.8-cp311-cp311-win32.whl", hash = "sha256:eea8821d998ebeb02f0625dd0d76839ddde8cbf8152ebbe289dd7acf2cdc6b98"}, - {file = "debugpy-1.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:d4483836da2a533f4b1454dffc9f668096ac0433de855f0c22cdce8c9f7e10c4"}, - {file = "debugpy-1.8.8-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:0cc94186340be87b9ac5a707184ec8f36547fb66636d1029ff4f1cc020e53996"}, - {file = "debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9"}, - {file = "debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9"}, - {file = "debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864"}, - {file = "debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804"}, - {file = "debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f"}, - {file = "debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add"}, - {file = "debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b"}, - {file = "debugpy-1.8.8-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:143ef07940aeb8e7316de48f5ed9447644da5203726fca378f3a6952a50a9eae"}, - {file = "debugpy-1.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95651bdcbfd3b27a408869a53fbefcc2bcae13b694daee5f1365b1b83a00113"}, - {file = "debugpy-1.8.8-cp38-cp38-win32.whl", hash = "sha256:26b461123a030e82602a750fb24d7801776aa81cd78404e54ab60e8b5fecdad5"}, - {file = "debugpy-1.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3cbf1833e644a3100eadb6120f25be8a532035e8245584c4f7532937edc652a"}, - {file = "debugpy-1.8.8-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:53709d4ec586b525724819dc6af1a7703502f7e06f34ded7157f7b1f963bb854"}, - {file = "debugpy-1.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a9c013077a3a0000e83d97cf9cc9328d2b0bbb31f56b0e99ea3662d29d7a6a2"}, - {file = "debugpy-1.8.8-cp39-cp39-win32.whl", hash = "sha256:ffe94dd5e9a6739a75f0b85316dc185560db3e97afa6b215628d1b6a17561cb2"}, - {file = "debugpy-1.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5c0e5a38c7f9b481bf31277d2f74d2109292179081f11108e668195ef926c0f9"}, - {file = "debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f"}, - {file = "debugpy-1.8.8.zip", hash = "sha256:e6355385db85cbd666be703a96ab7351bc9e6c61d694893206f8001e22aee091"}, + {file = "debugpy-1.8.9-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:cfe1e6c6ad7178265f74981edf1154ffce97b69005212fbc90ca22ddfe3d017e"}, + {file = "debugpy-1.8.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada7fb65102a4d2c9ab62e8908e9e9f12aed9d76ef44880367bc9308ebe49a0f"}, + {file = "debugpy-1.8.9-cp310-cp310-win32.whl", hash = "sha256:c36856343cbaa448171cba62a721531e10e7ffb0abff838004701454149bc037"}, + {file = "debugpy-1.8.9-cp310-cp310-win_amd64.whl", hash = "sha256:17c5e0297678442511cf00a745c9709e928ea4ca263d764e90d233208889a19e"}, + {file = "debugpy-1.8.9-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:b74a49753e21e33e7cf030883a92fa607bddc4ede1aa4145172debc637780040"}, + {file = "debugpy-1.8.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d22dacdb0e296966d7d74a7141aaab4bec123fa43d1a35ddcb39bf9fd29d70"}, + {file = "debugpy-1.8.9-cp311-cp311-win32.whl", hash = "sha256:8138efff315cd09b8dcd14226a21afda4ca582284bf4215126d87342bba1cc66"}, + {file = "debugpy-1.8.9-cp311-cp311-win_amd64.whl", hash = "sha256:ff54ef77ad9f5c425398efb150239f6fe8e20c53ae2f68367eba7ece1e96226d"}, + {file = "debugpy-1.8.9-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:957363d9a7a6612a37458d9a15e72d03a635047f946e5fceee74b50d52a9c8e2"}, + {file = "debugpy-1.8.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e565fc54b680292b418bb809f1386f17081d1346dca9a871bf69a8ac4071afe"}, + {file = "debugpy-1.8.9-cp312-cp312-win32.whl", hash = "sha256:3e59842d6c4569c65ceb3751075ff8d7e6a6ada209ceca6308c9bde932bcef11"}, + {file = "debugpy-1.8.9-cp312-cp312-win_amd64.whl", hash = "sha256:66eeae42f3137eb428ea3a86d4a55f28da9bd5a4a3d369ba95ecc3a92c1bba53"}, + {file = "debugpy-1.8.9-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:957ecffff80d47cafa9b6545de9e016ae8c9547c98a538ee96ab5947115fb3dd"}, + {file = "debugpy-1.8.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1efbb3ff61487e2c16b3e033bc8595aea578222c08aaf3c4bf0f93fadbd662ee"}, + {file = "debugpy-1.8.9-cp313-cp313-win32.whl", hash = "sha256:7c4d65d03bee875bcb211c76c1d8f10f600c305dbd734beaed4077e902606fee"}, + {file = "debugpy-1.8.9-cp313-cp313-win_amd64.whl", hash = "sha256:e46b420dc1bea64e5bbedd678148be512442bc589b0111bd799367cde051e71a"}, + {file = "debugpy-1.8.9-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:472a3994999fe6c0756945ffa359e9e7e2d690fb55d251639d07208dbc37caea"}, + {file = "debugpy-1.8.9-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:365e556a4772d7d0d151d7eb0e77ec4db03bcd95f26b67b15742b88cacff88e9"}, + {file = "debugpy-1.8.9-cp38-cp38-win32.whl", hash = "sha256:54a7e6d3014c408eb37b0b06021366ee985f1539e12fe49ca2ee0d392d9ceca5"}, + {file = "debugpy-1.8.9-cp38-cp38-win_amd64.whl", hash = "sha256:8e99c0b1cc7bf86d83fb95d5ccdc4ad0586d4432d489d1f54e4055bcc795f693"}, + {file = "debugpy-1.8.9-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:7e8b079323a56f719977fde9d8115590cb5e7a1cba2fcee0986ef8817116e7c1"}, + {file = "debugpy-1.8.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6953b335b804a41f16a192fa2e7851bdcfd92173cbb2f9f777bb934f49baab65"}, + {file = "debugpy-1.8.9-cp39-cp39-win32.whl", hash = "sha256:7e646e62d4602bb8956db88b1e72fe63172148c1e25c041e03b103a25f36673c"}, + {file = "debugpy-1.8.9-cp39-cp39-win_amd64.whl", hash = "sha256:3d9755e77a2d680ce3d2c5394a444cf42be4a592caaf246dbfbdd100ffcf7ae5"}, + {file = "debugpy-1.8.9-py2.py3-none-any.whl", hash = "sha256:cc37a6c9987ad743d9c3a14fa1b1a14b7e4e6041f9dd0c8abf8895fe7a97b899"}, + {file = "debugpy-1.8.9.zip", hash = "sha256:1339e14c7d980407248f09824d1b25ff5c5616651689f1e0f0e51bdead3ea13e"}, ] [[package]] @@ -542,13 +539,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastjsonschema" -version = "2.20.0" +version = "2.21.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, - {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, + {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, + {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, ] [package.extras] @@ -630,13 +627,13 @@ trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" -version = "0.27.2" +version = "0.28.1" 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"}, + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, ] [package.dependencies] @@ -644,7 +641,6 @@ anyio = "*" certifi = "*" httpcore = "==1.*" idna = "*" -sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] @@ -844,13 +840,13 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.9.28" +version = "0.10.0" description = "A Python implementation of the JSON5 data format." optional = false python-versions = ">=3.8.0" files = [ - {file = "json5-0.9.28-py3-none-any.whl", hash = "sha256:29c56f1accdd8bc2e037321237662034a7e07921e2b7223281a5ce2c46f0c4df"}, - {file = "json5-0.9.28.tar.gz", hash = "sha256:1f82f36e615bc5b42f1bbd49dbc94b12563c56408c6ffa06414ea310890e9a6e"}, + {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"}, + {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"}, ] [package.extras] @@ -1107,18 +1103,18 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.3.0" +version = "4.3.2" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.3.0-py3-none-any.whl", hash = "sha256:f67e1095ad61ae04349024f0b40345062ab108a0c6998d9810fec6a3c1a70cd5"}, - {file = "jupyterlab-4.3.0.tar.gz", hash = "sha256:7c6835cbf8df0af0ec8a39332e85ff11693fb9a468205343b4fc0bfbc74817e5"}, + {file = "jupyterlab-4.3.2-py3-none-any.whl", hash = "sha256:e87100cbab8b886ff7a4f325c856100ba6fdfe916162a85409daf0e707e19d1d"}, + {file = "jupyterlab-4.3.2.tar.gz", hash = "sha256:3c0a6882dbddcc0a7bfdd5e2236f351b2b263e48780236e6996c2aca13ac5b22"}, ] [package.dependencies] async-lru = ">=1.0.0" -httpx = ">=0.25.0" +httpx = ">=0.28.0,<0.29.0" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} ipykernel = ">=6.5.0" jinja2 = ">=3.0.3" @@ -1128,7 +1124,7 @@ jupyter-server = ">=2.4.0,<3" jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2" packaging = "*" -setuptools = ">=40.1.0" +setuptools = ">=40.8.0" tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} tornado = ">=6.2.0" traitlets = "*" @@ -1190,7 +1186,7 @@ files = [ [[package]] name = "langchain-tests" -version = "0.3.4" +version = "0.3.5" description = "Standard tests for LangChain implementations" optional = false python-versions = ">=3.9,<4.0" @@ -1198,9 +1194,15 @@ files = [] develop = true [package.dependencies] -httpx = "^0.27.0" -langchain-core = "^0.3.19" +httpx = ">=0.25.0,<1" +langchain-core = "^0.3.21" +numpy = [ + {version = ">=1.24.0,<2.0.0", markers = "python_version < \"3.12\""}, + {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, +] pytest = ">=7,<9" +pytest-asyncio = ">=0.20,<1" +pytest-socket = ">=0.6.0,<1" syrupy = "^4" [package.source] @@ -1225,18 +1227,18 @@ url = "../text-splitters" [[package]] name = "langsmith" -version = "0.1.143" +version = "0.2.1" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false -python-versions = "<4.0,>=3.8.1" +python-versions = "<4.0,>=3.9" files = [ - {file = "langsmith-0.1.143-py3-none-any.whl", hash = "sha256:ba0d827269e9b03a90fababe41fa3e4e3f833300b95add10184f7e67167dde6f"}, - {file = "langsmith-0.1.143.tar.gz", hash = "sha256:4c5159e5cd84b3f8499433009e72d2076dd2daf6c044ac8a3611b30d0d0161c5"}, + {file = "langsmith-0.2.1-py3-none-any.whl", hash = "sha256:9619c2d82a6d35cb6e2ff4472686415bb5bc238b12e2ed95b3e87b134228d7b4"}, + {file = "langsmith-0.2.1.tar.gz", hash = "sha256:2374dfa98fb43bb17d3446889559df36573a7fe2dddc09420b514b183512125d"}, ] [package.dependencies] httpx = ">=0.23.0,<1" -orjson = ">=3.9.14,<4.0.0" +orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""} pydantic = [ {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, @@ -1244,6 +1246,9 @@ pydantic = [ requests = ">=2,<3" requests-toolbelt = ">=1.0.0,<2.0.0" +[package.extras] +langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"] + [[package]] name = "markupsafe" version = "3.0.2" @@ -1399,13 +1404,13 @@ files = [ [[package]] name = "nbclient" -version = "0.10.0" +version = "0.10.1" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, - {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, + {file = "nbclient-0.10.1-py3-none-any.whl", hash = "sha256:949019b9240d66897e442888cfb618f69ef23dc71c01cb5fced8499c2cfc084d"}, + {file = "nbclient-0.10.1.tar.gz", hash = "sha256:3e93e348ab27e712acd46fccd809139e356eb9a31aab641d1a7991a6eb4e6f68"}, ] [package.dependencies] @@ -1416,7 +1421,7 @@ traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] @@ -1491,26 +1496,26 @@ files = [ [[package]] name = "notebook" -version = "7.0.7" +version = "7.3.1" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.8" files = [ - {file = "notebook-7.0.7-py3-none-any.whl", hash = "sha256:289b606d7e173f75a18beb1406ef411b43f97f7a9c55ba03efa3622905a62346"}, - {file = "notebook-7.0.7.tar.gz", hash = "sha256:3bcff00c17b3ac142ef5f436d50637d936b274cfa0b41f6ac0175363de9b4e09"}, + {file = "notebook-7.3.1-py3-none-any.whl", hash = "sha256:212e1486b2230fe22279043f33c7db5cf9a01d29feb063a85cb139747b7c9483"}, + {file = "notebook-7.3.1.tar.gz", hash = "sha256:84381c2a82d867517fd25b86e986dae1fe113a70b98f03edff9b94e499fec8fa"}, ] [package.dependencies] jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.0.2,<5" -jupyterlab-server = ">=2.22.1,<3" +jupyterlab = ">=4.3.2,<4.4" +jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" [package.extras] dev = ["hatch", "pre-commit"] docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "notebook-shim" @@ -1640,69 +1645,86 @@ files = [ [[package]] name = "orjson" -version = "3.10.11" +version = "3.10.12" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, - {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, - {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, - {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, - {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, - {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, - {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, - {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, - {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, - {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, - {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, - {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, - {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, - {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, - {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, - {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, - {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, - {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, - {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, - {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, - {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, - {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, - {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, - {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, - {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, - {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, - {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, - {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, - {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, - {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, - {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, - {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, - {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, + {file = "orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2"}, + {file = "orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3"}, + {file = "orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509"}, + {file = "orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd"}, + {file = "orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79"}, + {file = "orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8"}, + {file = "orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c"}, + {file = "orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708"}, + {file = "orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb"}, + {file = "orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543"}, + {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296"}, + {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e"}, + {file = "orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc"}, + {file = "orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825"}, + {file = "orjson-3.10.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7d69af5b54617a5fac5c8e5ed0859eb798e2ce8913262eb522590239db6c6763"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ed119ea7d2953365724a7059231a44830eb6bbb0cfead33fcbc562f5fd8f935"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5fc1238ef197e7cad5c91415f524aaa51e004be5a9b35a1b8a84ade196f73f"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43509843990439b05f848539d6f6198d4ac86ff01dd024b2f9a795c0daeeab60"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f72e27a62041cfb37a3de512247ece9f240a561e6c8662276beaf4d53d406db4"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a904f9572092bb6742ab7c16c623f0cdccbad9eeb2d14d4aa06284867bddd31"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:855c0833999ed5dc62f64552db26f9be767434917d8348d77bacaab84f787d7b"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:897830244e2320f6184699f598df7fb9db9f5087d6f3f03666ae89d607e4f8ed"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0b32652eaa4a7539f6f04abc6243619c56f8530c53bf9b023e1269df5f7816dd"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:36b4aa31e0f6a1aeeb6f8377769ca5d125db000f05c20e54163aef1d3fe8e833"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5535163054d6cbf2796f93e4f0dbc800f61914c0e3c4ed8499cf6ece22b4a3da"}, + {file = "orjson-3.10.12-cp38-none-win32.whl", hash = "sha256:90a5551f6f5a5fa07010bf3d0b4ca2de21adafbbc0af6cb700b63cd767266cb9"}, + {file = "orjson-3.10.12-cp38-none-win_amd64.whl", hash = "sha256:703a2fb35a06cdd45adf5d733cf613cbc0cb3ae57643472b16bc22d325b5fb6c"}, + {file = "orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69"}, + {file = "orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b"}, + {file = "orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548"}, + {file = "orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff"}, ] [[package]] @@ -1800,13 +1822,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prometheus-client" -version = "0.21.0" +version = "0.21.1" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.21.0-py3-none-any.whl", hash = "sha256:4fa6b4dd0ac16d58bb587c04b1caae65b8c5043e85f778f42f5f632f6af2e166"}, - {file = "prometheus_client-0.21.0.tar.gz", hash = "sha256:96c83c606b71ff2b0a433c98889d275f51ffec6c5e267de37c7a2b5c9aa9233e"}, + {file = "prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"}, + {file = "prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb"}, ] [package.extras] @@ -1894,13 +1916,13 @@ files = [ [[package]] name = "pydantic" -version = "2.10.1" +version = "2.10.3" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.10.1-py3-none-any.whl", hash = "sha256:a8d20db84de64cf4a7d59e899c2caf0fe9d660c7cfc482528e7020d7dd189a7e"}, - {file = "pydantic-2.10.1.tar.gz", hash = "sha256:a4daca2dc0aa429555e0656d6bf94873a7dc5f54ee42b1f5873d666fb3f35560"}, + {file = "pydantic-2.10.3-py3-none-any.whl", hash = "sha256:be04d85bbc7b65651c5f8e6b9976ed9c6f41782a55524cef079a34a0bb82144d"}, + {file = "pydantic-2.10.3.tar.gz", hash = "sha256:cb5ac360ce894ceacd69c403187900a02c4b20b693a9dd1d643e1effab9eadf9"}, ] [package.dependencies] @@ -2054,13 +2076,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "8.3.3" +version = "8.3.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, - {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, + {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, + {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, ] [package.dependencies] @@ -2484,101 +2506,114 @@ files = [ [[package]] name = "rpds-py" -version = "0.21.0" +version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" files = [ - {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, - {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, - {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, - {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, - {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, - {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, - {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, - {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, - {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, - {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, - {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, - {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, - {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, - {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, - {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, - {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, - {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, - {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, - {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, - {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, - {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"}, + {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"}, + {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"}, + {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"}, + {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"}, + {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"}, + {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"}, + {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"}, + {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"}, + {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"}, + {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, + {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, ] [[package]] @@ -2642,13 +2677,13 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] @@ -2694,13 +2729,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "syrupy" -version = "4.7.2" +version = "4.8.0" description = "Pytest Snapshot Test Utility" optional = false python-versions = ">=3.8.1" files = [ - {file = "syrupy-4.7.2-py3-none-any.whl", hash = "sha256:eae7ba6be5aed190237caa93be288e97ca1eec5ca58760e4818972a10c4acc64"}, - {file = "syrupy-4.7.2.tar.gz", hash = "sha256:ea45e099f242de1bb53018c238f408a5bb6c82007bc687aefcbeaa0e1c2e935a"}, + {file = "syrupy-4.8.0-py3-none-any.whl", hash = "sha256:544f4ec6306f4b1c460fdab48fd60b2c7fe54a6c0a8243aeea15f9ad9c638c3f"}, + {file = "syrupy-4.8.0.tar.gz", hash = "sha256:648f0e9303aaa8387c8365d7314784c09a6bab0a407455c6a01d6a4f5c6a8ede"}, ] [package.dependencies] @@ -2762,33 +2797,63 @@ test = ["pytest", "ruff"] [[package]] name = "tomli" -version = "2.1.0" +version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, - {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] name = "tornado" -version = "6.4.1" +version = "6.4.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">=3.8" files = [ - {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, - {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, - {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, - {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, - {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c"}, + {file = "tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482"}, + {file = "tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38"}, + {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"}, ] [[package]] @@ -2833,13 +2898,13 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.9.0.20241003" +version = "2.9.0.20241206" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.9.0.20241003.tar.gz", hash = "sha256:58cb85449b2a56d6684e41aeefb4c4280631246a0da1a719bdbe6f3fb0317446"}, - {file = "types_python_dateutil-2.9.0.20241003-py3-none-any.whl", hash = "sha256:250e1d8e80e7bbc3a6c99b907762711d1a1cdd00e978ad39cb5940f6f0a87f3d"}, + {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, + {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, ] [[package]] @@ -3033,4 +3098,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "02bfef4d884d17f83dde79a4076a3d07f94a1b3dbf2414f07379dab64a78e183" +content-hash = "5accfdfd412486fbf7bb3ef18f00e75db40599034428651ef014b0bc3927ddfa" diff --git a/libs/core/pyproject.toml b/libs/core/pyproject.toml index ebb41501b275f..8b235195618af 100644 --- a/libs/core/pyproject.toml +++ b/libs/core/pyproject.toml @@ -27,7 +27,7 @@ target-version = "py39" [tool.poetry.dependencies] python = ">=3.9,<4.0" -langsmith = "^0.1.125" +langsmith = ">=0.1.125,<0.3" tenacity = ">=8.1.0,!=8.4.0,<10.0.0" jsonpatch = "^1.33" PyYAML = ">=5.3" diff --git a/libs/core/tests/unit_tests/runnables/test_runnable.py b/libs/core/tests/unit_tests/runnables/test_runnable.py index 828f4cafcabf9..b06cb381e80e6 100644 --- a/libs/core/tests/unit_tests/runnables/test_runnable.py +++ b/libs/core/tests/unit_tests/runnables/test_runnable.py @@ -4600,18 +4600,18 @@ async def af(x: int) -> int: assert repr(RunnableLambda(func=f, afunc=af)) == "RunnableLambda(f)" assert repr( - RunnableLambda(lambda x: x + 2) + RunnableLambda(lambda x: x * 2) | { "a": RunnableLambda(lambda x: x * 2), "b": RunnableLambda(lambda x: x * 3), } ) == ( - "RunnableLambda(...)\n" + "RunnableLambda(lambda x: x * 2)\n" "| {\n" " a: RunnableLambda(...),\n" " b: RunnableLambda(...)\n" " }" - ), "repr where code string contains multiple lambdas gives up" + ) async def test_tool_from_runnable() -> None: diff --git a/libs/langchain/langchain/retrievers/document_compressors/embeddings_filter.py b/libs/langchain/langchain/retrievers/document_compressors/embeddings_filter.py index d71e7f1b3c293..f7acd800ac1d6 100644 --- a/libs/langchain/langchain/retrievers/document_compressors/embeddings_filter.py +++ b/libs/langchain/langchain/retrievers/document_compressors/embeddings_filter.py @@ -75,7 +75,7 @@ def compress_documents( ) embedded_query = self.embeddings.embed_query(query) similarity = self.similarity_fn([embedded_query], embedded_documents)[0] - included_idxs = np.arange(len(embedded_documents)) + included_idxs: np.ndarray = np.arange(len(embedded_documents)) if self.k is not None: included_idxs = np.argsort(similarity)[::-1][: self.k] if self.similarity_threshold is not None: @@ -110,7 +110,7 @@ async def acompress_documents( ) embedded_query = await self.embeddings.aembed_query(query) similarity = self.similarity_fn([embedded_query], embedded_documents)[0] - included_idxs = np.arange(len(embedded_documents)) + included_idxs: np.ndarray = np.arange(len(embedded_documents)) if self.k is not None: included_idxs = np.argsort(similarity)[::-1][: self.k] if self.similarity_threshold is not None: diff --git a/libs/langchain/poetry.lock b/libs/langchain/poetry.lock index 6b965558b4b22..0fdeef5b2250b 100644 --- a/libs/langchain/poetry.lock +++ b/libs/langchain/poetry.lock @@ -1,4 +1,4 @@ -# 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" @@ -1984,7 +1984,7 @@ develop = true [package.dependencies] jsonpatch = "^1.33" -langsmith = "^0.1.125" +langsmith = ">=0.1.125,<0.3" packaging = ">=23.2,<25" pydantic = [ {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""}, @@ -2018,7 +2018,7 @@ url = "../partners/openai" [[package]] name = "langchain-tests" -version = "0.3.5" +version = "0.3.6" description = "Standard tests for LangChain implementations" optional = false python-versions = ">=3.9,<4.0" @@ -2027,7 +2027,7 @@ develop = true [package.dependencies] httpx = ">=0.25.0,<1" -langchain-core = "^0.3.21" +langchain-core = "^0.3.22" numpy = [ {version = ">=1.24.0,<2.0.0", markers = "python_version < \"3.12\""}, {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, @@ -2075,13 +2075,13 @@ types-requests = ">=2.31.0.2,<3.0.0.0" [[package]] name = "langsmith" -version = "0.1.147" +version = "0.2.1" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false -python-versions = "<4.0,>=3.8.1" +python-versions = "<4.0,>=3.9" files = [ - {file = "langsmith-0.1.147-py3-none-any.whl", hash = "sha256:7166fc23b965ccf839d64945a78e9f1157757add228b086141eb03a60d699a15"}, - {file = "langsmith-0.1.147.tar.gz", hash = "sha256:2e933220318a4e73034657103b3b1a3a6109cc5db3566a7e8e03be8d6d7def7a"}, + {file = "langsmith-0.2.1-py3-none-any.whl", hash = "sha256:9619c2d82a6d35cb6e2ff4472686415bb5bc238b12e2ed95b3e87b134228d7b4"}, + {file = "langsmith-0.2.1.tar.gz", hash = "sha256:2374dfa98fb43bb17d3446889559df36573a7fe2dddc09420b514b183512125d"}, ] [package.dependencies] @@ -2571,66 +2571,66 @@ files = [ [[package]] name = "numpy" -version = "2.1.3" +version = "2.2.0" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" files = [ - {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"}, - {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"}, - {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"}, - {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"}, - {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, - {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, - {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, - {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, - {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, - {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, - {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"}, - {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31"}, + {file = "numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661"}, + {file = "numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d"}, + {file = "numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410"}, + {file = "numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef"}, + {file = "numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1"}, + {file = "numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742"}, + {file = "numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e"}, + {file = "numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72"}, + {file = "numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066"}, + {file = "numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221"}, + {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"}, ] [[package]] @@ -4142,14 +4142,61 @@ description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ + {file = "SQLAlchemy-2.0.36-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59b8f3adb3971929a3e660337f5dacc5942c2cdb760afcabb2614ffbda9f9f72"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37350015056a553e442ff672c2d20e6f4b6d0b2495691fa239d8aa18bb3bc908"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8318f4776c85abc3f40ab185e388bee7a6ea99e7fa3a30686580b209eaa35c08"}, {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c245b1fbade9c35e5bd3b64270ab49ce990369018289ecfde3f9c318411aaa07"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69f93723edbca7342624d09f6704e7126b152eaed3cdbb634cb657a54332a3c5"}, {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f9511d8dd4a6e9271d07d150fb2f81874a3c8c95e11ff9af3a2dfc35fe42ee44"}, {file = "SQLAlchemy-2.0.36-cp310-cp310-win32.whl", hash = "sha256:c3f3631693003d8e585d4200730616b78fafd5a01ef8b698f6967da5c605b3fa"}, {file = "SQLAlchemy-2.0.36-cp310-cp310-win_amd64.whl", hash = "sha256:a86bfab2ef46d63300c0f06936bd6e6c0105faa11d509083ba8f2f9d237fb5b5"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fd3a55deef00f689ce931d4d1b23fa9f04c880a48ee97af488fd215cf24e2a6c"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f5e9cd989b45b73bd359f693b935364f7e1f79486e29015813c338450aa5a71"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ddd9db6e59c44875211bc4c7953a9f6638b937b0a88ae6d09eb46cced54eff"}, {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2519f3a5d0517fc159afab1015e54bb81b4406c278749779be57a569d8d1bb0d"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59b1ee96617135f6e1d6f275bbe988f419c5178016f3d41d3c0abb0c819f75bb"}, {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:39769a115f730d683b0eb7b694db9789267bcd027326cccc3125e862eb03bfd8"}, {file = "SQLAlchemy-2.0.36-cp311-cp311-win32.whl", hash = "sha256:66bffbad8d6271bb1cc2f9a4ea4f86f80fe5e2e3e501a5ae2a3dc6a76e604e6f"}, {file = "SQLAlchemy-2.0.36-cp311-cp311-win_amd64.whl", hash = "sha256:23623166bfefe1487d81b698c423f8678e80df8b54614c2bf4b4cfcd7c711959"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7b64e6ec3f02c35647be6b4851008b26cff592a95ecb13b6788a54ef80bbdd4"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:46331b00096a6db1fdc052d55b101dbbfc99155a548e20a0e4a8e5e4d1362855"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdf3386a801ea5aba17c6410dd1dc8d39cf454ca2565541b5ac42a84e1e28f53"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9dfa18ff2a67b09b372d5db8743c27966abf0e5344c555d86cc7199f7ad83a"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:90812a8933df713fdf748b355527e3af257a11e415b613dd794512461eb8a686"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1bc330d9d29c7f06f003ab10e1eaced295e87940405afe1b110f2eb93a233588"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-win32.whl", hash = "sha256:79d2e78abc26d871875b419e1fd3c0bca31a1cb0043277d0d850014599626c2e"}, + {file = "SQLAlchemy-2.0.36-cp312-cp312-win_amd64.whl", hash = "sha256:b544ad1935a8541d177cb402948b94e871067656b3a0b9e91dbec136b06a2ff5"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5cc79df7f4bc3d11e4b542596c03826063092611e481fcf1c9dfee3c94355ef"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3c01117dd36800f2ecaa238c65365b7b16497adc1522bf84906e5710ee9ba0e8"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bc633f4ee4b4c46e7adcb3a9b5ec083bf1d9a97c1d3854b92749d935de40b9b"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e46ed38affdfc95d2c958de328d037d87801cfcbea6d421000859e9789e61c2"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2985c0b06e989c043f1dc09d4fe89e1616aadd35392aea2844f0458a989eacf"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a121d62ebe7d26fec9155f83f8be5189ef1405f5973ea4874a26fab9f1e262c"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-win32.whl", hash = "sha256:0572f4bd6f94752167adfd7c1bed84f4b240ee6203a95e05d1e208d488d0d436"}, + {file = "SQLAlchemy-2.0.36-cp313-cp313-win_amd64.whl", hash = "sha256:8c78ac40bde930c60e0f78b3cd184c580f89456dd87fc08f9e3ee3ce8765ce88"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:be9812b766cad94a25bc63bec11f88c4ad3629a0cec1cd5d4ba48dc23860486b"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aae840ebbd6cdd41af1c14590e5741665e5272d2fee999306673a1bb1fdb4d"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4557e1f11c5f653ebfdd924f3f9d5ebfc718283b0b9beebaa5dd6b77ec290971"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07b441f7d03b9a66299ce7ccf3ef2900abc81c0db434f42a5694a37bd73870f2"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:28120ef39c92c2dd60f2721af9328479516844c6b550b077ca450c7d7dc68575"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-win32.whl", hash = "sha256:b81ee3d84803fd42d0b154cb6892ae57ea6b7c55d8359a02379965706c7efe6c"}, + {file = "SQLAlchemy-2.0.36-cp37-cp37m-win_amd64.whl", hash = "sha256:f942a799516184c855e1a32fbc7b29d7e571b52612647866d4ec1c3242578fcb"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3d6718667da04294d7df1670d70eeddd414f313738d20a6f1d1f379e3139a545"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:72c28b84b174ce8af8504ca28ae9347d317f9dba3999e5981a3cd441f3712e24"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b11d0cfdd2b095e7b0686cf5fabeb9c67fae5b06d265d8180715b8cfa86522e3"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e32092c47011d113dc01ab3e1d3ce9f006a47223b18422c5c0d150af13a00687"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6a440293d802d3011028e14e4226da1434b373cbaf4a4bbb63f845761a708346"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c54a1e53a0c308a8e8a7dffb59097bff7facda27c70c286f005327f21b2bd6b1"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-win32.whl", hash = "sha256:1e0d612a17581b6616ff03c8e3d5eff7452f34655c901f75d62bd86449d9750e"}, + {file = "SQLAlchemy-2.0.36-cp38-cp38-win_amd64.whl", hash = "sha256:8958b10490125124463095bbdadda5aa22ec799f91958e410438ad6c97a7b793"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc022184d3e5cacc9579e41805a681187650e170eb2fd70e28b86192a479dcaa"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b817d41d692bf286abc181f8af476c4fbef3fd05e798777492618378448ee689"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4e46a888b54be23d03a89be510f24a7652fe6ff660787b96cd0e57a4ebcb46d"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4ae3005ed83f5967f961fd091f2f8c5329161f69ce8480aa8168b2d7fe37f06"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:03e08af7a5f9386a43919eda9de33ffda16b44eb11f3b313e6822243770e9763"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3dbb986bad3ed5ceaf090200eba750b5245150bd97d3e67343a3cfed06feecf7"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-win32.whl", hash = "sha256:9fe53b404f24789b5ea9003fc25b9a3988feddebd7e7b369c8fac27ad6f52f28"}, + {file = "SQLAlchemy-2.0.36-cp39-cp39-win_amd64.whl", hash = "sha256:af148a33ff0349f53512a049c6406923e4e02bf2f26c5fb285f143faf4f0e46a"}, {file = "SQLAlchemy-2.0.36-py3-none-any.whl", hash = "sha256:fddbe92b4760c6f5d48162aef14824add991aeda8ddadb3c31d56eb15ca69f8e"}, {file = "sqlalchemy-2.0.36.tar.gz", hash = "sha256:7f2767680b6d2398aea7082e45a774b2b0767b5c8d8ffb9c8b683088ea9b29c5"}, ] @@ -4452,13 +4499,13 @@ files = [ [[package]] name = "types-protobuf" -version = "5.28.3.20241203" +version = "5.29.1.20241207" description = "Typing stubs for protobuf" optional = false python-versions = ">=3.8" files = [ - {file = "types_protobuf-5.28.3.20241203-py3-none-any.whl", hash = "sha256:5367632a4785394b0504e7c1e4d54a2dceeae9cd4f73a705d0f6499fc99cecb1"}, - {file = "types_protobuf-5.28.3.20241203.tar.gz", hash = "sha256:2e1c962bdf76c576506b5fc0678d28efa6652a54c04ae46562a6209e777bd789"}, + {file = "types_protobuf-5.29.1.20241207-py3-none-any.whl", hash = "sha256:92893c42083e9b718c678badc0af7a9a1307b92afe1599e5cba5f3d35b668b2f"}, + {file = "types_protobuf-5.29.1.20241207.tar.gz", hash = "sha256:2ebcadb8ab3ef2e3e2f067e0882906d64ba0dc65fc5b0fd7a8b692315b4a0be9"}, ] [[package]] @@ -4971,4 +5018,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "281ab0dd41e4fc73f4d91dab9dbfccf0282c4eb34068f3059f28b9b67aec40e0" +content-hash = "565689140fe21740c651e376da4a5ff2eaf687588aed8c2707d3ffb2a77df7e4" diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index 85bb4fc724e41..1419c93ac0d85 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -35,7 +35,7 @@ langchain-server = "langchain.server:main" python = ">=3.9,<4.0" langchain-core = "^0.3.22" langchain-text-splitters = "^0.3.0" -langsmith = "^0.1.17" +langsmith = ">=0.1.17,<0.3" pydantic = "^2.7.4" SQLAlchemy = ">=1.4,<3" requests = "^2" From 1fbd86a155ce11f5cf02269e77a9865f13fd4bcf Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:19:21 -0800 Subject: [PATCH 12/14] core[patch]: Release 0.3.24 (#28656) --- libs/core/poetry.lock | 124 +++++++++++++++++++-------------------- libs/core/pyproject.toml | 2 +- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/libs/core/poetry.lock b/libs/core/poetry.lock index 5d5d379300867..c2daa3902e5a6 100644 --- a/libs/core/poetry.lock +++ b/libs/core/poetry.lock @@ -1103,18 +1103,18 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.3.2" +version = "4.3.3" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.3.2-py3-none-any.whl", hash = "sha256:e87100cbab8b886ff7a4f325c856100ba6fdfe916162a85409daf0e707e19d1d"}, - {file = "jupyterlab-4.3.2.tar.gz", hash = "sha256:3c0a6882dbddcc0a7bfdd5e2236f351b2b263e48780236e6996c2aca13ac5b22"}, + {file = "jupyterlab-4.3.3-py3-none-any.whl", hash = "sha256:32a8fd30677e734ffcc3916a4758b9dab21b02015b668c60eb36f84357b7d4b1"}, + {file = "jupyterlab-4.3.3.tar.gz", hash = "sha256:76fa39e548fdac94dc1204af5956c556f54c785f70ee26aa47ea08eda4d5bbcd"}, ] [package.dependencies] async-lru = ">=1.0.0" -httpx = ">=0.28.0,<0.29.0" +httpx = ">=0.25.0" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} ipykernel = ">=6.5.0" jinja2 = ">=3.0.3" @@ -1186,7 +1186,7 @@ files = [ [[package]] name = "langchain-tests" -version = "0.3.5" +version = "0.3.7" description = "Standard tests for LangChain implementations" optional = false python-versions = ">=3.9,<4.0" @@ -1195,7 +1195,7 @@ develop = true [package.dependencies] httpx = ">=0.25.0,<1" -langchain-core = "^0.3.21" +langchain-core = "^0.3.22" numpy = [ {version = ">=1.24.0,<2.0.0", markers = "python_version < \"3.12\""}, {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, @@ -1581,66 +1581,66 @@ files = [ [[package]] name = "numpy" -version = "2.1.3" +version = "2.2.0" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" files = [ - {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"}, - {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"}, - {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"}, - {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"}, - {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, - {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, - {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, - {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, - {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, - {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, - {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"}, - {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31"}, + {file = "numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661"}, + {file = "numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d"}, + {file = "numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410"}, + {file = "numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef"}, + {file = "numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1"}, + {file = "numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742"}, + {file = "numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e"}, + {file = "numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72"}, + {file = "numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066"}, + {file = "numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221"}, + {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"}, ] [[package]] diff --git a/libs/core/pyproject.toml b/libs/core/pyproject.toml index 8b235195618af..0fce0ed19052a 100644 --- a/libs/core/pyproject.toml +++ b/libs/core/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "langchain-core" -version = "0.3.23" +version = "0.3.24" description = "Building applications with LLMs through composability" authors = [] license = "MIT" From 91227ad7fdb381434d7eb3ef4b5d0a602e794b6b Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:28:14 -0800 Subject: [PATCH 13/14] langchain[patch]: Release 0.3.11 (#28657) --- libs/langchain/poetry.lock | 193 +++++++++++++++++----------------- libs/langchain/pyproject.toml | 4 +- 2 files changed, 99 insertions(+), 98 deletions(-) diff --git a/libs/langchain/poetry.lock b/libs/langchain/poetry.lock index 0fdeef5b2250b..8006555408f27 100644 --- a/libs/langchain/poetry.lock +++ b/libs/langchain/poetry.lock @@ -1545,86 +1545,87 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jiter" -version = "0.8.0" +version = "0.8.2" description = "Fast iterable JSON parser." optional = true python-versions = ">=3.8" files = [ - {file = "jiter-0.8.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:dee4eeb293ffcd2c3b31ebab684dbf7f7b71fe198f8eddcdf3a042cc6e10205a"}, - {file = "jiter-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aad1e6e9b01cf0304dcee14db03e92e0073287a6297caf5caf2e9dbfea16a924"}, - {file = "jiter-0.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:504099fb7acdbe763e10690d560a25d4aee03d918d6a063f3a761d8a09fb833f"}, - {file = "jiter-0.8.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2373487caad7fe39581f588ab5c9262fc1ade078d448626fec93f4ffba528858"}, - {file = "jiter-0.8.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c341ecc3f9bccde952898b0c97c24f75b84b56a7e2f8bbc7c8e38cab0875a027"}, - {file = "jiter-0.8.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e48e7a336529b9419d299b70c358d4ebf99b8f4b847ed3f1000ec9f320e8c0c"}, - {file = "jiter-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5ee157a8afd2943be690db679f82fafb8d347a8342e8b9c34863de30c538d55"}, - {file = "jiter-0.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d7dceae3549b80087f913aad4acc2a7c1e0ab7cb983effd78bdc9c41cabdcf18"}, - {file = "jiter-0.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e29e9ecce53d396772590438214cac4ab89776f5e60bd30601f1050b34464019"}, - {file = "jiter-0.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fa1782f22d5f92c620153133f35a9a395d3f3823374bceddd3e7032e2fdfa0b1"}, - {file = "jiter-0.8.0-cp310-none-win32.whl", hash = "sha256:f754ef13b4e4f67a3bf59fe974ef4342523801c48bf422f720bd37a02a360584"}, - {file = "jiter-0.8.0-cp310-none-win_amd64.whl", hash = "sha256:796f750b65f5d605f5e7acaccc6b051675e60c41d7ac3eab40dbd7b5b81a290f"}, - {file = "jiter-0.8.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f6f4e645efd96b4690b9b6091dbd4e0fa2885ba5c57a0305c1916b75b4f30ff6"}, - {file = "jiter-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f61cf6d93c1ade9b8245c9f14b7900feadb0b7899dbe4aa8de268b705647df81"}, - {file = "jiter-0.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0396bc5cb1309c6dab085e70bb3913cdd92218315e47b44afe9eace68ee8adaa"}, - {file = "jiter-0.8.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62d0e42ec5dc772bd8554a304358220be5d97d721c4648b23f3a9c01ccc2cb26"}, - {file = "jiter-0.8.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec4b711989860705733fc59fb8c41b2def97041cea656b37cf6c8ea8dee1c3f4"}, - {file = "jiter-0.8.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:859cc35bf304ab066d88f10a44a3251a9cd057fb11ec23e00be22206db878f4f"}, - {file = "jiter-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5000195921aa293b39b9b5bc959d7fa658e7f18f938c0e52732da8e3cc70a278"}, - {file = "jiter-0.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36050284c0abde57aba34964d3920f3d6228211b65df7187059bb7c7f143759a"}, - {file = "jiter-0.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a88f608e050cfe45c48d771e86ecdbf5258314c883c986d4217cc79e1fb5f689"}, - {file = "jiter-0.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:646cf4237665b2e13b4159d8f26d53f59bc9f2e6e135e3a508a2e5dd26d978c6"}, - {file = "jiter-0.8.0-cp311-none-win32.whl", hash = "sha256:21fe5b8345db1b3023052b2ade9bb4d369417827242892051244af8fae8ba231"}, - {file = "jiter-0.8.0-cp311-none-win_amd64.whl", hash = "sha256:30c2161c5493acf6b6c3c909973fb64ae863747def01cc7574f3954e0a15042c"}, - {file = "jiter-0.8.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d91a52d8f49ada2672a4b808a0c5c25d28f320a2c9ca690e30ebd561eb5a1002"}, - {file = "jiter-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c38cf25cf7862f61410b7a49684d34eb3b5bcbd7ddaf4773eea40e0bd43de706"}, - {file = "jiter-0.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6189beb5c4b3117624be6b2e84545cff7611f5855d02de2d06ff68e316182be"}, - {file = "jiter-0.8.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e13fa849c0e30643554add089983caa82f027d69fad8f50acadcb21c462244ab"}, - {file = "jiter-0.8.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d7765ca159d0a58e8e0f8ca972cd6d26a33bc97b4480d0d2309856763807cd28"}, - {file = "jiter-0.8.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b0befe7c6e9fc867d5bed21bab0131dfe27d1fa5cd52ba2bced67da33730b7d"}, - {file = "jiter-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7d6363d4c6f1052b1d8b494eb9a72667c3ef5f80ebacfe18712728e85327000"}, - {file = "jiter-0.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a873e57009863eeac3e3969e4653f07031d6270d037d6224415074ac17e5505c"}, - {file = "jiter-0.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2582912473c0d9940791479fe1bf2976a34f212eb8e0a82ee9e645ac275c5d16"}, - {file = "jiter-0.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:646163201af42f55393ee6e8f6136b8df488253a6533f4230a64242ecbfe6048"}, - {file = "jiter-0.8.0-cp312-none-win32.whl", hash = "sha256:96e75c9abfbf7387cba89a324d2356d86d8897ac58c956017d062ad510832dae"}, - {file = "jiter-0.8.0-cp312-none-win_amd64.whl", hash = "sha256:ed6074552b4a32e047b52dad5ab497223721efbd0e9efe68c67749f094a092f7"}, - {file = "jiter-0.8.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:dd5e351cb9b3e676ec3360a85ea96def515ad2b83c8ae3a251ce84985a2c9a6f"}, - {file = "jiter-0.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ba9f12b0f801ecd5ed0cec29041dc425d1050922b434314c592fc30d51022467"}, - {file = "jiter-0.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7ba461c3681728d556392e8ae56fb44a550155a24905f01982317b367c21dd4"}, - {file = "jiter-0.8.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a15ed47ab09576db560dbc5c2c5a64477535beb056cd7d997d5dd0f2798770e"}, - {file = "jiter-0.8.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cef55042816d0737142b0ec056c0356a5f681fb8d6aa8499b158e87098f4c6f8"}, - {file = "jiter-0.8.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:549f170215adeb5e866f10617c3d019d8eb4e6d4e3c6b724b3b8c056514a3487"}, - {file = "jiter-0.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f867edeb279d22020877640d2ea728de5817378c60a51be8af731a8a8f525306"}, - {file = "jiter-0.8.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aef8845f463093799db4464cee2aa59d61aa8edcb3762aaa4aacbec3f478c929"}, - {file = "jiter-0.8.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:d0d6e22e4062c3d3c1bf3594baa2f67fc9dcdda8275abad99e468e0c6540bc54"}, - {file = "jiter-0.8.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:079e62e64696241ac3f408e337aaac09137ed760ccf2b72b1094b48745c13641"}, - {file = "jiter-0.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74d2b56ed3da5760544df53b5f5c39782e68efb64dc3aa0bba4cc08815e6fae8"}, - {file = "jiter-0.8.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:798dafe108cba58a7bb0a50d4d5971f98bb7f3c974e1373e750de6eb21c1a329"}, - {file = "jiter-0.8.0-cp313-none-win32.whl", hash = "sha256:ca6d3064dfc743eb0d3d7539d89d4ba886957c717567adc72744341c1e3573c9"}, - {file = "jiter-0.8.0-cp313-none-win_amd64.whl", hash = "sha256:38caedda64fe1f04b06d7011fc15e86b3b837ed5088657bf778656551e3cd8f9"}, - {file = "jiter-0.8.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:bb5c8a0a8d081c338db22e5b8d53a89a121790569cbb85f7d3cfb1fe0fbe9836"}, - {file = "jiter-0.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:202dbe8970bfb166fab950eaab8f829c505730a0b33cc5e1cfb0a1c9dd56b2f9"}, - {file = "jiter-0.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9046812e5671fdcfb9ae02881fff1f6a14d484b7e8b3316179a372cdfa1e8026"}, - {file = "jiter-0.8.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e6ac56425023e52d65150918ae25480d0a1ce2a6bf5ea2097f66a2cc50f6d692"}, - {file = "jiter-0.8.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7dfcf97210c6eab9d2a1c6af15dd39e1d5154b96a7145d0a97fa1df865b7b834"}, - {file = "jiter-0.8.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4e3c8444d418686f78c9a547b9b90031faf72a0a1a46bfec7fb31edbd889c0d"}, - {file = "jiter-0.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6507011a299b7f578559084256405a8428875540d8d13530e00b688e41b09493"}, - {file = "jiter-0.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0aae4738eafdd34f0f25c2d3668ce9e8fa0d7cb75a2efae543c9a69aebc37323"}, - {file = "jiter-0.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f5d782e790396b13f2a7b36bdcaa3736a33293bdda80a4bf1a3ce0cd5ef9f15"}, - {file = "jiter-0.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc7f993bc2c4e03015445adbb16790c303282fce2e8d9dc3a3905b1d40e50564"}, - {file = "jiter-0.8.0-cp38-none-win32.whl", hash = "sha256:d4a8a6eda018a991fa58ef707dd51524055d11f5acb2f516d70b1be1d15ab39c"}, - {file = "jiter-0.8.0-cp38-none-win_amd64.whl", hash = "sha256:4cca948a3eda8ea24ed98acb0ee19dc755b6ad2e570ec85e1527d5167f91ff67"}, - {file = "jiter-0.8.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ef89663678d8257063ce7c00d94638e05bd72f662c5e1eb0e07a172e6c1a9a9f"}, - {file = "jiter-0.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c402ddcba90b4cc71db3216e8330f4db36e0da2c78cf1d8a9c3ed8f272602a94"}, - {file = "jiter-0.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a6dfe795b7a173a9f8ba7421cdd92193d60c1c973bbc50dc3758a9ad0fa5eb6"}, - {file = "jiter-0.8.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ec29a31b9abd6be39453a2c45da067138a3005d65d2c0507c530e0f1fdcd9a4"}, - {file = "jiter-0.8.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a488f8c54bddc3ddefaf3bfd6de4a52c97fc265d77bc2dcc6ee540c17e8c342"}, - {file = "jiter-0.8.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aeb5561adf4d26ca0d01b5811b4d7b56a8986699a473d700757b4758ef787883"}, - {file = "jiter-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ab961858d7ad13132328517d29f121ae1b2d94502191d6bcf96bddcc8bb5d1c"}, - {file = "jiter-0.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a207e718d114d23acf0850a2174d290f42763d955030d9924ffa4227dbd0018f"}, - {file = "jiter-0.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:733bc9dc8ff718a0ae4695239e9268eb93e88b73b367dfac3ec227d8ce2f1e77"}, - {file = "jiter-0.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1ec27299e22d05e13a06e460bf7f75f26f9aaa0e0fb7d060f40e88df1d81faa"}, - {file = "jiter-0.8.0-cp39-none-win32.whl", hash = "sha256:e8dbfcb46553e6661d3fc1f33831598fcddf73d0f67834bce9fc3e9ebfe5c439"}, - {file = "jiter-0.8.0-cp39-none-win_amd64.whl", hash = "sha256:af2ce2487b3a93747e2cb5150081d4ae1e5874fce5924fc1a12e9e768e489ad8"}, - {file = "jiter-0.8.0.tar.gz", hash = "sha256:86fee98b569d4cc511ff2e3ec131354fafebd9348a487549c31ad371ae730310"}, + {file = "jiter-0.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ca8577f6a413abe29b079bc30f907894d7eb07a865c4df69475e868d73e71c7b"}, + {file = "jiter-0.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b25bd626bde7fb51534190c7e3cb97cee89ee76b76d7585580e22f34f5e3f393"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5c826a221851a8dc028eb6d7d6429ba03184fa3c7e83ae01cd6d3bd1d4bd17d"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d35c864c2dff13dfd79fb070fc4fc6235d7b9b359efe340e1261deb21b9fcb66"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f557c55bc2b7676e74d39d19bcb8775ca295c7a028246175d6a8b431e70835e5"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:580ccf358539153db147e40751a0b41688a5ceb275e6f3e93d91c9467f42b2e3"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af102d3372e917cffce49b521e4c32c497515119dc7bd8a75665e90a718bbf08"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cadcc978f82397d515bb2683fc0d50103acff2a180552654bb92d6045dec2c49"}, + {file = "jiter-0.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ba5bdf56969cad2019d4e8ffd3f879b5fdc792624129741d3d83fc832fef8c7d"}, + {file = "jiter-0.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3b94a33a241bee9e34b8481cdcaa3d5c2116f575e0226e421bed3f7a6ea71cff"}, + {file = "jiter-0.8.2-cp310-cp310-win32.whl", hash = "sha256:6e5337bf454abddd91bd048ce0dca5134056fc99ca0205258766db35d0a2ea43"}, + {file = "jiter-0.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:4a9220497ca0cb1fe94e3f334f65b9b5102a0b8147646118f020d8ce1de70105"}, + {file = "jiter-0.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2dd61c5afc88a4fda7d8b2cf03ae5947c6ac7516d32b7a15bf4b49569a5c076b"}, + {file = "jiter-0.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a6c710d657c8d1d2adbbb5c0b0c6bfcec28fd35bd6b5f016395f9ac43e878a15"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9584de0cd306072635fe4b89742bf26feae858a0683b399ad0c2509011b9dc0"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a90a923338531b7970abb063cfc087eebae6ef8ec8139762007188f6bc69a9f"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21974d246ed0181558087cd9f76e84e8321091ebfb3a93d4c341479a736f099"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32475a42b2ea7b344069dc1e81445cfc00b9d0e3ca837f0523072432332e9f74"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b9931fd36ee513c26b5bf08c940b0ac875de175341cbdd4fa3be109f0492586"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0820f4a3a59ddced7fce696d86a096d5cc48d32a4183483a17671a61edfddc"}, + {file = "jiter-0.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8ffc86ae5e3e6a93765d49d1ab47b6075a9c978a2b3b80f0f32628f39caa0c88"}, + {file = "jiter-0.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5127dc1abd809431172bc3fbe8168d6b90556a30bb10acd5ded41c3cfd6f43b6"}, + {file = "jiter-0.8.2-cp311-cp311-win32.whl", hash = "sha256:66227a2c7b575720c1871c8800d3a0122bb8ee94edb43a5685aa9aceb2782d44"}, + {file = "jiter-0.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:cde031d8413842a1e7501e9129b8e676e62a657f8ec8166e18a70d94d4682855"}, + {file = "jiter-0.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e6ec2be506e7d6f9527dae9ff4b7f54e68ea44a0ef6b098256ddf895218a2f8f"}, + {file = "jiter-0.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76e324da7b5da060287c54f2fabd3db5f76468006c811831f051942bf68c9d44"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:180a8aea058f7535d1c84183c0362c710f4750bef66630c05f40c93c2b152a0f"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:025337859077b41548bdcbabe38698bcd93cfe10b06ff66617a48ff92c9aec60"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecff0dc14f409599bbcafa7e470c00b80f17abc14d1405d38ab02e4b42e55b57"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffd9fee7d0775ebaba131f7ca2e2d83839a62ad65e8e02fe2bd8fc975cedeb9e"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14601dcac4889e0a1c75ccf6a0e4baf70dbc75041e51bcf8d0e9274519df6887"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92249669925bc1c54fcd2ec73f70f2c1d6a817928480ee1c65af5f6b81cdf12d"}, + {file = "jiter-0.8.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e725edd0929fa79f8349ab4ec7f81c714df51dc4e991539a578e5018fa4a7152"}, + {file = "jiter-0.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bf55846c7b7a680eebaf9c3c48d630e1bf51bdf76c68a5f654b8524335b0ad29"}, + {file = "jiter-0.8.2-cp312-cp312-win32.whl", hash = "sha256:7efe4853ecd3d6110301665a5178b9856be7e2a9485f49d91aa4d737ad2ae49e"}, + {file = "jiter-0.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:83c0efd80b29695058d0fd2fa8a556490dbce9804eac3e281f373bbc99045f6c"}, + {file = "jiter-0.8.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ca1f08b8e43dc3bd0594c992fb1fd2f7ce87f7bf0d44358198d6da8034afdf84"}, + {file = "jiter-0.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5672a86d55416ccd214c778efccf3266b84f87b89063b582167d803246354be4"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58dc9bc9767a1101f4e5e22db1b652161a225874d66f0e5cb8e2c7d1c438b587"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:37b2998606d6dadbb5ccda959a33d6a5e853252d921fec1792fc902351bb4e2c"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ab9a87f3784eb0e098f84a32670cfe4a79cb6512fd8f42ae3d0709f06405d18"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79aec8172b9e3c6d05fd4b219d5de1ac616bd8da934107325a6c0d0e866a21b6"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:711e408732d4e9a0208008e5892c2966b485c783cd2d9a681f3eb147cf36c7ef"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:653cf462db4e8c41995e33d865965e79641ef45369d8a11f54cd30888b7e6ff1"}, + {file = "jiter-0.8.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:9c63eaef32b7bebac8ebebf4dabebdbc6769a09c127294db6babee38e9f405b9"}, + {file = "jiter-0.8.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:eb21aaa9a200d0a80dacc7a81038d2e476ffe473ffdd9c91eb745d623561de05"}, + {file = "jiter-0.8.2-cp313-cp313-win32.whl", hash = "sha256:789361ed945d8d42850f919342a8665d2dc79e7e44ca1c97cc786966a21f627a"}, + {file = "jiter-0.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:ab7f43235d71e03b941c1630f4b6e3055d46b6cb8728a17663eaac9d8e83a865"}, + {file = "jiter-0.8.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b426f72cd77da3fec300ed3bc990895e2dd6b49e3bfe6c438592a3ba660e41ca"}, + {file = "jiter-0.8.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2dd880785088ff2ad21ffee205e58a8c1ddabc63612444ae41e5e4b321b39c0"}, + {file = "jiter-0.8.2-cp313-cp313t-win_amd64.whl", hash = "sha256:3ac9f578c46f22405ff7f8b1f5848fb753cc4b8377fbec8470a7dc3997ca7566"}, + {file = "jiter-0.8.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9e1fa156ee9454642adb7e7234a383884452532bc9d53d5af2d18d98ada1d79c"}, + {file = "jiter-0.8.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cf5dfa9956d96ff2efb0f8e9c7d055904012c952539a774305aaaf3abdf3d6c"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e52bf98c7e727dd44f7c4acb980cb988448faeafed8433c867888268899b298b"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a2ecaa3c23e7a7cf86d00eda3390c232f4d533cd9ddea4b04f5d0644faf642c5"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08d4c92bf480e19fc3f2717c9ce2aa31dceaa9163839a311424b6862252c943e"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99d9a1eded738299ba8e106c6779ce5c3893cffa0e32e4485d680588adae6db8"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d20be8b7f606df096e08b0b1b4a3c6f0515e8dac296881fe7461dfa0fb5ec817"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d33f94615fcaf872f7fd8cd98ac3b429e435c77619777e8a449d9d27e01134d1"}, + {file = "jiter-0.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:317b25e98a35ffec5c67efe56a4e9970852632c810d35b34ecdd70cc0e47b3b6"}, + {file = "jiter-0.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fc9043259ee430ecd71d178fccabd8c332a3bf1e81e50cae43cc2b28d19e4cb7"}, + {file = "jiter-0.8.2-cp38-cp38-win32.whl", hash = "sha256:fc5adda618205bd4678b146612ce44c3cbfdee9697951f2c0ffdef1f26d72b63"}, + {file = "jiter-0.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:cd646c827b4f85ef4a78e4e58f4f5854fae0caf3db91b59f0d73731448a970c6"}, + {file = "jiter-0.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e41e75344acef3fc59ba4765df29f107f309ca9e8eace5baacabd9217e52a5ee"}, + {file = "jiter-0.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f22b16b35d5c1df9dfd58843ab2cd25e6bf15191f5a236bed177afade507bfc"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7200b8f7619d36aa51c803fd52020a2dfbea36ffec1b5e22cab11fd34d95a6d"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70bf4c43652cc294040dbb62256c83c8718370c8b93dd93d934b9a7bf6c4f53c"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f9d471356dc16f84ed48768b8ee79f29514295c7295cb41e1133ec0b2b8d637d"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:859e8eb3507894093d01929e12e267f83b1d5f6221099d3ec976f0c995cb6bd9"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaa58399c01db555346647a907b4ef6d4f584b123943be6ed5588c3f2359c9f4"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f2d5ed877f089862f4c7aacf3a542627c1496f972a34d0474ce85ee7d939c27"}, + {file = "jiter-0.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:03c9df035d4f8d647f8c210ddc2ae0728387275340668fb30d2421e17d9a0841"}, + {file = "jiter-0.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8bd2a824d08d8977bb2794ea2682f898ad3d8837932e3a74937e93d62ecbb637"}, + {file = "jiter-0.8.2-cp39-cp39-win32.whl", hash = "sha256:ca29b6371ebc40e496995c94b988a101b9fbbed48a51190a4461fcb0a68b4a36"}, + {file = "jiter-0.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:1c0dfbd1be3cbefc7510102370d86e35d1d53e5a93d48519688b1bf0f761160a"}, + {file = "jiter-0.8.2.tar.gz", hash = "sha256:cd73d3e740666d0e639f678adb176fad25c1bcbdae88d8d7b857e1783bb4212d"}, ] [[package]] @@ -1892,18 +1893,18 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.3.2" +version = "4.3.3" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.3.2-py3-none-any.whl", hash = "sha256:e87100cbab8b886ff7a4f325c856100ba6fdfe916162a85409daf0e707e19d1d"}, - {file = "jupyterlab-4.3.2.tar.gz", hash = "sha256:3c0a6882dbddcc0a7bfdd5e2236f351b2b263e48780236e6996c2aca13ac5b22"}, + {file = "jupyterlab-4.3.3-py3-none-any.whl", hash = "sha256:32a8fd30677e734ffcc3916a4758b9dab21b02015b668c60eb36f84357b7d4b1"}, + {file = "jupyterlab-4.3.3.tar.gz", hash = "sha256:76fa39e548fdac94dc1204af5956c556f54c785f70ee26aa47ea08eda4d5bbcd"}, ] [package.dependencies] async-lru = ">=1.0.0" -httpx = ">=0.28.0,<0.29.0" +httpx = ">=0.25.0" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} ipykernel = ">=6.5.0" jinja2 = ">=3.0.3" @@ -1975,7 +1976,7 @@ files = [ [[package]] name = "langchain-core" -version = "0.3.22" +version = "0.3.24" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.9,<4.0" @@ -2000,7 +2001,7 @@ url = "../core" [[package]] name = "langchain-openai" -version = "0.2.11" +version = "0.2.12" description = "An integration package connecting OpenAI and LangChain" optional = true python-versions = ">=3.9,<4.0" @@ -2009,7 +2010,7 @@ develop = true [package.dependencies] langchain-core = "^0.3.21" -openai = "^1.54.0" +openai = "^1.55.3" tiktoken = ">=0.7,<1" [package.source] @@ -2018,7 +2019,7 @@ url = "../partners/openai" [[package]] name = "langchain-tests" -version = "0.3.6" +version = "0.3.7" description = "Standard tests for LangChain implementations" optional = false python-versions = ">=3.9,<4.0" @@ -2635,13 +2636,13 @@ files = [ [[package]] name = "openai" -version = "1.57.0" +version = "1.57.2" description = "The official Python library for the openai API" optional = true python-versions = ">=3.8" files = [ - {file = "openai-1.57.0-py3-none-any.whl", hash = "sha256:972e36960b821797952da3dc4532f486c28e28a2a332d7d0c5407f242e9d9c39"}, - {file = "openai-1.57.0.tar.gz", hash = "sha256:76f91971c4bdbd78380c9970581075e0337b5d497c2fbf7b5255078f4b31abf9"}, + {file = "openai-1.57.2-py3-none-any.whl", hash = "sha256:f7326283c156fdee875746e7e54d36959fb198eadc683952ee05e3302fbd638d"}, + {file = "openai-1.57.2.tar.gz", hash = "sha256:5f49fd0f38e9f2131cda7deb45dafdd1aee4f52a637e190ce0ecf40147ce8cee"}, ] [package.dependencies] @@ -2907,18 +2908,18 @@ type = ["mypy (>=1.11.2)"] [[package]] name = "playwright" -version = "1.49.0" +version = "1.49.1" description = "A high-level API to automate web browsers" optional = false python-versions = ">=3.9" files = [ - {file = "playwright-1.49.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:704532a2d8ba580ec9e1895bfeafddce2e3d52320d4eb8aa38e80376acc5cbb0"}, - {file = "playwright-1.49.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e453f02c4e5cc2db7e9759c47e7425f32e50ac76c76b7eb17c69eed72f01c4d8"}, - {file = "playwright-1.49.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:37ae985309184472946a6eb1a237e5d93c9e58a781fa73b75c8751325002a5d4"}, - {file = "playwright-1.49.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:68d94beffb3c9213e3ceaafa66171affd9a5d9162e0c8a3eed1b1132c2e57598"}, - {file = "playwright-1.49.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f12d2aecdb41fc25a624cb15f3e8391c252ebd81985e3d5c1c261fe93779345"}, - {file = "playwright-1.49.0-py3-none-win32.whl", hash = "sha256:91103de52d470594ad375b512d7143fa95d6039111ae11a93eb4fe2f2b4a4858"}, - {file = "playwright-1.49.0-py3-none-win_amd64.whl", hash = "sha256:34d28a2c2d46403368610be4339898dc9c34eb9f7c578207b4715c49743a072a"}, + {file = "playwright-1.49.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:1041ffb45a0d0bc44d698d3a5aa3ac4b67c9bd03540da43a0b70616ad52592b8"}, + {file = "playwright-1.49.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:9f38ed3d0c1f4e0a6d1c92e73dd9a61f8855133249d6f0cec28648d38a7137be"}, + {file = "playwright-1.49.1-py3-none-macosx_11_0_universal2.whl", hash = "sha256:3be48c6d26dc819ca0a26567c1ae36a980a0303dcd4249feb6f59e115aaddfb8"}, + {file = "playwright-1.49.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:753ca90ee31b4b03d165cfd36e477309ebf2b4381953f2a982ff612d85b147d2"}, + {file = "playwright-1.49.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd9bc8dab37aa25198a01f555f0a2e2c3813fe200fef018ac34dfe86b34994b9"}, + {file = "playwright-1.49.1-py3-none-win32.whl", hash = "sha256:43b304be67f096058e587dac453ece550eff87b8fbed28de30f4f022cc1745bb"}, + {file = "playwright-1.49.1-py3-none-win_amd64.whl", hash = "sha256:47b23cb346283278f5b4d1e1990bcb6d6302f80c0aa0ca93dd0601a1400191df"}, ] [package.dependencies] @@ -5018,4 +5019,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "565689140fe21740c651e376da4a5ff2eaf687588aed8c2707d3ffb2a77df7e4" +content-hash = "0f91cf959626002da09f26cd4ca1d06c453edbebe50510c21eef091032e38b52" diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index 1419c93ac0d85..09389ff9664c4 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "langchain" -version = "0.3.10" +version = "0.3.11" description = "Building applications with LLMs through composability" authors = [] license = "MIT" @@ -33,7 +33,7 @@ langchain-server = "langchain.server:main" [tool.poetry.dependencies] python = ">=3.9,<4.0" -langchain-core = "^0.3.22" +langchain-core = "^0.3.24" langchain-text-splitters = "^0.3.0" langsmith = ">=0.1.17,<0.3" pydantic = "^2.7.4" From d0e662e43b5affb2bad566e75a0dd110ea53e271 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:51:13 -0800 Subject: [PATCH 14/14] community[patch]: Release 0.3.11 (#28658) --- libs/community/poetry.lock | 18 +++++++++--------- libs/community/pyproject.toml | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/libs/community/poetry.lock b/libs/community/poetry.lock index 2e558743cf910..4f748842642d8 100644 --- a/libs/community/poetry.lock +++ b/libs/community/poetry.lock @@ -1732,18 +1732,18 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.3.2" +version = "4.3.3" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.3.2-py3-none-any.whl", hash = "sha256:e87100cbab8b886ff7a4f325c856100ba6fdfe916162a85409daf0e707e19d1d"}, - {file = "jupyterlab-4.3.2.tar.gz", hash = "sha256:3c0a6882dbddcc0a7bfdd5e2236f351b2b263e48780236e6996c2aca13ac5b22"}, + {file = "jupyterlab-4.3.3-py3-none-any.whl", hash = "sha256:32a8fd30677e734ffcc3916a4758b9dab21b02015b668c60eb36f84357b7d4b1"}, + {file = "jupyterlab-4.3.3.tar.gz", hash = "sha256:76fa39e548fdac94dc1204af5956c556f54c785f70ee26aa47ea08eda4d5bbcd"}, ] [package.dependencies] async-lru = ">=1.0.0" -httpx = ">=0.28.0,<0.29.0" +httpx = ">=0.25.0" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} ipykernel = ">=6.5.0" jinja2 = ">=3.0.3" @@ -1815,7 +1815,7 @@ files = [ [[package]] name = "langchain" -version = "0.3.10" +version = "0.3.11" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.9,<4.0" @@ -1825,7 +1825,7 @@ develop = true [package.dependencies] aiohttp = "^3.8.3" async-timeout = {version = "^4.0.0", markers = "python_version < \"3.11\""} -langchain-core = "^0.3.22" +langchain-core = "^0.3.24" langchain-text-splitters = "^0.3.0" langsmith = ">=0.1.17,<0.3" numpy = [ @@ -1844,7 +1844,7 @@ url = "../langchain" [[package]] name = "langchain-core" -version = "0.3.22" +version = "0.3.24" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.9,<4.0" @@ -1869,7 +1869,7 @@ url = "../core" [[package]] name = "langchain-tests" -version = "0.3.6" +version = "0.3.7" description = "Standard tests for LangChain implementations" optional = false python-versions = ">=3.9,<4.0" @@ -4675,4 +4675,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "67b850cc68471b3b1fab7b3932cd9ddf29c96c220fd3c2657e773295413a8a3a" +content-hash = "e568a316587981dd9d690ebd21fb490c40ef6292233592dcd6681f1c44ce91e8" diff --git a/libs/community/pyproject.toml b/libs/community/pyproject.toml index ef5e4924a5240..8a67c85756e3f 100644 --- a/libs/community/pyproject.toml +++ b/libs/community/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "langchain-community" -version = "0.3.10" +version = "0.3.11" description = "Community contributed LangChain integrations." authors = [] license = "MIT" @@ -30,8 +30,8 @@ ignore-words-list = "momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogy [tool.poetry.dependencies] python = ">=3.9,<4.0" -langchain-core = "^0.3.22" -langchain = "^0.3.10" +langchain-core = "^0.3.24" +langchain = "^0.3.11" SQLAlchemy = ">=1.4,<3" requests = "^2" PyYAML = ">=5.3"

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 z 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 K=AALW`TqdT0JdcS literal 0 HcmV?d00001 diff --git a/docs/static/img/memgraph_kg_2.png b/docs/static/img/memgraph_kg_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3b69ad9a9048f6f726b68e992fed428c540ca3b6 GIT binary patch literal 67141 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/memgraph_kg_3.png b/docs/static/img/memgraph_kg_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ba6ac94489a11d658ddd818b03ca116c37f66f50 GIT binary patch literal 140424 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