diff --git a/samples/multi-agent-supervisor-researcher-coder/README.md b/samples/multi-agent-supervisor-researcher-coder/README.md index 1784268..0e7e453 100644 --- a/samples/multi-agent-supervisor-researcher-coder/README.md +++ b/samples/multi-agent-supervisor-researcher-coder/README.md @@ -19,36 +19,37 @@ graph TD; __start__([
__start__
]):::first input(input) supervisor(supervisor) + __end__([__end__
]):::last __start__ --> input; + coder\3a__end__ -.-> supervisor; input --> supervisor; - supervisor -.-> researcher___start__; - supervisor -.-> coder___start__; - researcher___end__ -.-> supervisor; - coder___end__ -.-> supervisor; + researcher\3a__end__ -.-> supervisor; + supervisor -.-> coder\3a__start__; + supervisor -.-> researcher\3a__start__; + supervisor -.-> __end__; subgraph researcher - researcher___start__(__start__
) - researcher_agent(agent) - researcher_tools(tools) - researcher___end__(__end__
) - researcher___start__ --> researcher_agent; - researcher_tools --> researcher_agent; - researcher_agent -.-> researcher_tools; - researcher_agent -.-> researcher___end__; + researcher\3a__start__(__start__
) + researcher\3aagent(agent) + researcher\3atools(tools) + researcher\3a__end__(__end__
) + researcher\3a__start__ --> researcher\3aagent; + researcher\3aagent -.-> researcher\3a__end__; + researcher\3aagent -.-> researcher\3atools; + researcher\3atools --> researcher\3aagent; end subgraph coder - coder___start__(__start__
) - coder_agent(agent) - coder_tools(tools) - coder___end__(__end__
) - coder___start__ --> coder_agent; - coder_tools --> coder_agent; - coder_agent -.-> coder_tools; - coder_agent -.-> coder___end__; + coder\3a__start__(__start__
) + coder\3aagent(agent) + coder\3atools(tools) + coder\3a__end__(__end__
) + coder\3a__start__ --> coder\3aagent; + coder\3aagent -.-> coder\3a__end__; + coder\3aagent -.-> coder\3atools; + coder\3atools --> coder\3aagent; end classDef default fill:#f2f0ff,line-height:1.2 classDef first fill-opacity:0 classDef last fill:#bfb6fc - ``` ## How It Works @@ -68,7 +69,7 @@ graph TD; ## Requirements -- Python 3.10+ +- Python 3.11+ - LangGraph - Anthropic API key (for Claude) - Tavily API key (for web search) diff --git a/samples/multi-agent-supervisor-researcher-coder/agent.mermaid b/samples/multi-agent-supervisor-researcher-coder/agent.mermaid index 9adf1bb..4790d99 100644 --- a/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +++ b/samples/multi-agent-supervisor-researcher-coder/agent.mermaid @@ -7,31 +7,33 @@ graph TD; __start__([__start__
]):::first input(input) supervisor(supervisor) + __end__([__end__
]):::last __start__ --> input; + coder\3a__end__ -.-> supervisor; input --> supervisor; - supervisor -.-> researcher___start__; - supervisor -.-> coder___start__; - researcher___end__ -.-> supervisor; - coder___end__ -.-> supervisor; + researcher\3a__end__ -.-> supervisor; + supervisor -.-> coder\3a__start__; + supervisor -.-> researcher\3a__start__; + supervisor -.-> __end__; subgraph researcher - researcher___start__(__start__
) - researcher_agent(agent) - researcher_tools(tools) - researcher___end__(__end__
) - researcher___start__ --> researcher_agent; - researcher_tools --> researcher_agent; - researcher_agent -.-> researcher_tools; - researcher_agent -.-> researcher___end__; + researcher\3a__start__(__start__
) + researcher\3aagent(agent) + researcher\3atools(tools) + researcher\3a__end__(__end__
) + researcher\3a__start__ --> researcher\3aagent; + researcher\3aagent -.-> researcher\3a__end__; + researcher\3aagent -.-> researcher\3atools; + researcher\3atools --> researcher\3aagent; end subgraph coder - coder___start__(__start__
) - coder_agent(agent) - coder_tools(tools) - coder___end__(__end__
) - coder___start__ --> coder_agent; - coder_tools --> coder_agent; - coder_agent -.-> coder_tools; - coder_agent -.-> coder___end__; + coder\3a__start__(__start__
) + coder\3aagent(agent) + coder\3atools(tools) + coder\3a__end__(__end__
) + coder\3a__start__ --> coder\3aagent; + coder\3aagent -.-> coder\3a__end__; + coder\3aagent -.-> coder\3atools; + coder\3atools --> coder\3aagent; end classDef default fill:#f2f0ff,line-height:1.2 classDef first fill-opacity:0 diff --git a/samples/multi-agent-supervisor-researcher-coder/graph.py b/samples/multi-agent-supervisor-researcher-coder/graph.py index ea2fb1d..4e0b8d4 100644 --- a/samples/multi-agent-supervisor-researcher-coder/graph.py +++ b/samples/multi-agent-supervisor-researcher-coder/graph.py @@ -1,8 +1,8 @@ from typing import Annotated, Literal from langchain_anthropic import ChatAnthropic -from langchain_community.tools.tavily_search import TavilySearchResults -from langchain_core.messages import HumanMessage, SystemMessage +from langchain_tavily import TavilySearch +from langchain_core.messages import HumanMessage, SystemMessage, BaseMessage from langchain_core.tools import tool from langchain_experimental.utilities import PythonREPL from langgraph.graph import END, START, MessagesState, StateGraph @@ -11,7 +11,8 @@ from pydantic import BaseModel from typing_extensions import TypedDict -tavily_tool = TavilySearchResults(max_results=5) + +tavily_tool = TavilySearch(max_results=5) # This executes code locally, which can be unsafe repl = PythonREPL() @@ -28,7 +29,7 @@ def python_repl_tool( result = repl.run(code) except BaseException as e: return f"Failed to execute. Error: {repr(e)}" - result_str = f"Successfully executed:\n\`\`\`python\n{code}\n\`\`\`\nStdout: {result}" + result_str = f"Successfully executed:\n```python\n{code}\n```\nStdout: {result}" return result_str members = ["researcher", "coder"] @@ -62,6 +63,16 @@ class GraphOutput(BaseModel): class State(MessagesState): next: str +def get_message_text(msg: BaseMessage) -> str: + """LangChain-style safe message text extractor.""" + if isinstance(msg.content, str): + return msg.content + if isinstance(msg.content, list): + return "".join( + block.get("text", "") for block in msg.content if block.get("type") == "text" + ) + return "" + def input(state: GraphInput): return { "messages": [ @@ -75,7 +86,7 @@ async def supervisor_node(state: State) -> Command[Literal[*members]] | GraphOut response = await llm.with_structured_output(Router).ainvoke(state["messages"]) goto = response["next"] if goto == "FINISH": - return GraphOutput(answer=state["messages"][-1].content) + return GraphOutput(answer=get_message_text(state["messages"][-1])) else: return Command(goto=goto, update={"next": goto}) diff --git a/samples/multi-agent-supervisor-researcher-coder/pyproject.toml b/samples/multi-agent-supervisor-researcher-coder/pyproject.toml index e3e5069..f6f38c2 100644 --- a/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +++ b/samples/multi-agent-supervisor-researcher-coder/pyproject.toml @@ -5,11 +5,12 @@ description = "Multi-agent system where a supervisor coordinates between a resea authors = [{ name = "John Doe", email = "john.doe@myemail.com" }] requires-python = ">=3.10" dependencies = [ - "langgraph>=0.2.55", - "langchain-anthropic>=0.3.8", + "langgraph>=0.6.11", + "langchain-anthropic>=0.3.22", "langchain-experimental>=0.3.4", - "tavily-python>=0.5.0", - "uipath-langchain==0.0.124" + "tavily-python>=0.7.12", + "uipath-langchain==0.0.141", + "langchain-tavily>=0.2.12", ] [project.optional-dependencies] diff --git a/samples/multi-agent-supervisor-researcher-coder/uipath.json b/samples/multi-agent-supervisor-researcher-coder/uipath.json index 72ab393..800719f 100644 --- a/samples/multi-agent-supervisor-researcher-coder/uipath.json +++ b/samples/multi-agent-supervisor-researcher-coder/uipath.json @@ -1,2659 +1,36 @@ { - "entryPoints": [ - { - "filePath": "agent", - "uniqueId": "3a24ec20-0c58-4a02-838c-3076bb8e3fe8", - "type": "agent", - "input": { - "type": "object", - "properties": { - "messages": { - "items": { - "oneOf": [ - { - "additionalProperties": true, - "description": "Message from an AI.\n\nAIMessage is returned from a chat model as a response to a prompt.\n\nThis message represents the output of the model and consists of both\nthe raw output as returned by the model together standardized fields\n(e.g., tool calls, usage metadata) added by the LangChain framework.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "ai", - "default": "ai", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "example": { - "default": false, - "title": "Example", - "type": "boolean" - }, - "tool_calls": { - "default": [], - "items": { - "description": "Represents a request to call a tool.\n\nExample:\n\n .. code-block:: python\n\n {\n \"name\": \"foo\",\n \"args\": {\"a\": 1},\n \"id\": \"123\"\n }\n\n This represents a request to call the tool named \"foo\" with arguments {\"a\": 1}\n and an identifier of \"123\".", - "properties": { - "name": { - "title": "Name", - "type": "string" - }, - "args": { - "title": "Args", - "type": "object" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "type": { - "const": "tool_call", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name", - "args", - "id" - ], - "title": "ToolCall", - "type": "object" - }, - "title": "Tool Calls", - "type": "array" - }, - "invalid_tool_calls": { - "default": [], - "items": { - "description": "Allowance for errors made by LLM.\n\nHere we add an `error` key to surface errors made during generation\n(e.g., invalid JSON arguments.)", - "properties": { - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "args": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Args" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Error" - }, - "type": { - "const": "invalid_tool_call", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name", - "args", - "id", - "error" - ], - "title": "InvalidToolCall", - "type": "object" - }, - "title": "Invalid Tool Calls", - "type": "array" - }, - "usage_metadata": { - "anyOf": [ - { - "description": "Usage metadata for a message, such as token counts.\n\nThis is a standard representation of token usage that is consistent across models.\n\nExample:\n\n .. code-block:: python\n\n {\n \"input_tokens\": 350,\n \"output_tokens\": 240,\n \"total_tokens\": 590,\n \"input_token_details\": {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n },\n \"output_token_details\": {\n \"audio\": 10,\n \"reasoning\": 200,\n }\n }\n\n.. versionchanged:: 0.3.9\n\n Added ``input_token_details`` and ``output_token_details``.", - "properties": { - "input_tokens": { - "title": "Input Tokens", - "type": "integer" - }, - "output_tokens": { - "title": "Output Tokens", - "type": "integer" - }, - "total_tokens": { - "title": "Total Tokens", - "type": "integer" - }, - "input_token_details": { - "description": "Breakdown of input token counts.\n\nDoes *not* need to sum to full input token count. Does *not* need to have all keys.\n\nExample:\n\n .. code-block:: python\n\n {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n }\n\n.. versionadded:: 0.3.9", - "properties": { - "audio": { - "title": "Audio", - "type": "integer" - }, - "cache_creation": { - "title": "Cache Creation", - "type": "integer" - }, - "cache_read": { - "title": "Cache Read", - "type": "integer" - } - }, - "title": "InputTokenDetails", - "type": "object" - }, - "output_token_details": { - "description": "Breakdown of output token counts.\n\nDoes *not* need to sum to full output token count. Does *not* need to have all keys.\n\nExample:\n\n .. code-block:: python\n\n {\n \"audio\": 10,\n \"reasoning\": 200,\n }\n\n.. versionadded:: 0.3.9", - "properties": { - "audio": { - "title": "Audio", - "type": "integer" - }, - "reasoning": { - "title": "Reasoning", - "type": "integer" - } - }, - "title": "OutputTokenDetails", - "type": "object" - } - }, - "required": [ - "input_tokens", - "output_tokens", - "total_tokens" - ], - "title": "UsageMetadata", - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "content" - ], - "title": "AIMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message from a human.\n\nHumanMessages are messages that are passed in from a human to the model.\n\nExample:\n\n .. code-block:: python\n\n from langchain_core.messages import HumanMessage, SystemMessage\n\n messages = [\n SystemMessage(\n content=\"You are a helpful assistant! Your name is Bob.\"\n ),\n HumanMessage(\n content=\"What is your name?\"\n )\n ]\n\n # Instantiate a chat model and invoke it with the messages\n model = ...\n print(model.invoke(messages))", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "human", - "default": "human", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "example": { - "default": false, - "title": "Example", - "type": "boolean" - } - }, - "required": [ - "content" - ], - "title": "HumanMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message that can be assigned an arbitrary speaker (i.e. role).", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "chat", - "default": "chat", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "role": { - "title": "Role", - "type": "string" - } - }, - "required": [ - "content", - "role" - ], - "title": "ChatMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message for priming AI behavior.\n\nThe system message is usually passed in as the first of a sequence\nof input messages.\n\nExample:\n\n .. code-block:: python\n\n from langchain_core.messages import HumanMessage, SystemMessage\n\n messages = [\n SystemMessage(\n content=\"You are a helpful assistant! Your name is Bob.\"\n ),\n HumanMessage(\n content=\"What is your name?\"\n )\n ]\n\n # Define a chat model and invoke it with the messages\n print(model.invoke(messages))", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "system", - "default": "system", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - } - }, - "required": [ - "content" - ], - "title": "SystemMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message for passing the result of executing a tool back to a model.\n\nFunctionMessage are an older version of the ToolMessage schema, and\ndo not contain the tool_call_id field.\n\nThe tool_call_id field is used to associate the tool call request with the\ntool call response. This is useful in situations where a chat model is able\nto request multiple tool calls in parallel.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "function", - "default": "function", - "title": "Type", - "type": "string" - }, - "name": { - "title": "Name", - "type": "string" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - } - }, - "required": [ - "content", - "name" - ], - "title": "FunctionMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message for passing the result of executing a tool back to a model.\n\nToolMessages contain the result of a tool invocation. Typically, the result\nis encoded inside the `content` field.\n\nExample: A ToolMessage representing a result of 42 from a tool call with id\n\n .. code-block:: python\n\n from langchain_core.messages import ToolMessage\n\n ToolMessage(content='42', tool_call_id='call_Jja7J89XsjrOLA5r!MEOW!SL')\n\n\nExample: A ToolMessage where only part of the tool output is sent to the model\n and the full output is passed in to artifact.\n\n .. versionadded:: 0.2.17\n\n .. code-block:: python\n\n from langchain_core.messages import ToolMessage\n\n tool_output = {\n \"stdout\": \"From the graph we can see that the correlation between x and y is ...\",\n \"stderr\": None,\n \"artifacts\": {\"type\": \"image\", \"base64_data\": \"/9j/4gIcSU...\"},\n }\n\n ToolMessage(\n content=tool_output[\"stdout\"],\n artifact=tool_output,\n tool_call_id='call_Jja7J89XsjrOLA5r!MEOW!SL',\n )\n\nThe tool_call_id field is used to associate the tool call request with the\ntool call response. This is useful in situations where a chat model is able\nto request multiple tool calls in parallel.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "tool", - "default": "tool", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "tool_call_id": { - "title": "Tool Call Id", - "type": "string" - }, - "artifact": { - "default": null, - "title": "Artifact" - }, - "status": { - "default": "success", - "enum": [ - "success", - "error" - ], - "title": "Status", - "type": "string" - } - }, - "required": [ - "content", - "tool_call_id" - ], - "title": "ToolMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message chunk from an AI.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "AIMessageChunk", - "default": "AIMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "example": { - "default": false, - "title": "Example", - "type": "boolean" - }, - "tool_calls": { - "default": [], - "items": { - "description": "Represents a request to call a tool.\n\nExample:\n\n .. code-block:: python\n\n {\n \"name\": \"foo\",\n \"args\": {\"a\": 1},\n \"id\": \"123\"\n }\n\n This represents a request to call the tool named \"foo\" with arguments {\"a\": 1}\n and an identifier of \"123\".", - "properties": { - "name": { - "title": "Name", - "type": "string" - }, - "args": { - "title": "Args", - "type": "object" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "type": { - "const": "tool_call", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name", - "args", - "id" - ], - "title": "ToolCall", - "type": "object" - }, - "title": "Tool Calls", - "type": "array" - }, - "invalid_tool_calls": { - "default": [], - "items": { - "description": "Allowance for errors made by LLM.\n\nHere we add an `error` key to surface errors made during generation\n(e.g., invalid JSON arguments.)", - "properties": { - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "args": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Args" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Error" - }, - "type": { - "const": "invalid_tool_call", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name", - "args", - "id", - "error" - ], - "title": "InvalidToolCall", - "type": "object" - }, - "title": "Invalid Tool Calls", - "type": "array" - }, - "usage_metadata": { - "anyOf": [ - { - "description": "Usage metadata for a message, such as token counts.\n\nThis is a standard representation of token usage that is consistent across models.\n\nExample:\n\n .. code-block:: python\n\n {\n \"input_tokens\": 350,\n \"output_tokens\": 240,\n \"total_tokens\": 590,\n \"input_token_details\": {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n },\n \"output_token_details\": {\n \"audio\": 10,\n \"reasoning\": 200,\n }\n }\n\n.. versionchanged:: 0.3.9\n\n Added ``input_token_details`` and ``output_token_details``.", - "properties": { - "input_tokens": { - "title": "Input Tokens", - "type": "integer" - }, - "output_tokens": { - "title": "Output Tokens", - "type": "integer" - }, - "total_tokens": { - "title": "Total Tokens", - "type": "integer" - }, - "input_token_details": { - "description": "Breakdown of input token counts.\n\nDoes *not* need to sum to full input token count. Does *not* need to have all keys.\n\nExample:\n\n .. code-block:: python\n\n {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n }\n\n.. versionadded:: 0.3.9", - "properties": { - "audio": { - "title": "Audio", - "type": "integer" - }, - "cache_creation": { - "title": "Cache Creation", - "type": "integer" - }, - "cache_read": { - "title": "Cache Read", - "type": "integer" - } - }, - "title": "InputTokenDetails", - "type": "object" - }, - "output_token_details": { - "description": "Breakdown of output token counts.\n\nDoes *not* need to sum to full output token count. Does *not* need to have all keys.\n\nExample:\n\n .. code-block:: python\n\n {\n \"audio\": 10,\n \"reasoning\": 200,\n }\n\n.. versionadded:: 0.3.9", - "properties": { - "audio": { - "title": "Audio", - "type": "integer" - }, - "reasoning": { - "title": "Reasoning", - "type": "integer" - } - }, - "title": "OutputTokenDetails", - "type": "object" - } - }, - "required": [ - "input_tokens", - "output_tokens", - "total_tokens" - ], - "title": "UsageMetadata", - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "tool_call_chunks": { - "default": [], - "items": { - "description": "A chunk of a tool call (e.g., as part of a stream).\n\nWhen merging ToolCallChunks (e.g., via AIMessageChunk.__add__),\nall string attributes are concatenated. Chunks are only merged if their\nvalues of `index` are equal and not None.\n\nExample:\n\n.. code-block:: python\n\n left_chunks = [ToolCallChunk(name=\"foo\", args='{\"a\":', index=0)]\n right_chunks = [ToolCallChunk(name=None, args='1}', index=0)]\n\n (\n AIMessageChunk(content=\"\", tool_call_chunks=left_chunks)\n + AIMessageChunk(content=\"\", tool_call_chunks=right_chunks)\n ).tool_call_chunks == [ToolCallChunk(name='foo', args='{\"a\":1}', index=0)]", - "properties": { - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "args": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Args" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Index" - }, - "type": { - "const": "tool_call_chunk", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name", - "args", - "id", - "index" - ], - "title": "ToolCallChunk", - "type": "object" - }, - "title": "Tool Call Chunks", - "type": "array" - } - }, - "required": [ - "content" - ], - "title": "AIMessageChunk", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Human Message chunk.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "HumanMessageChunk", - "default": "HumanMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "example": { - "default": false, - "title": "Example", - "type": "boolean" - } - }, - "required": [ - "content" - ], - "title": "HumanMessageChunk", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Chat Message chunk.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "ChatMessageChunk", - "default": "ChatMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "role": { - "title": "Role", - "type": "string" - } - }, - "required": [ - "content", - "role" - ], - "title": "ChatMessageChunk", - "type": "object" - }, - { - "additionalProperties": true, - "description": "System Message chunk.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "SystemMessageChunk", - "default": "SystemMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - } - }, - "required": [ - "content" - ], - "title": "SystemMessageChunk", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Function Message chunk.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "FunctionMessageChunk", - "default": "FunctionMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "title": "Name", - "type": "string" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - } - }, - "required": [ - "content", - "name" - ], - "title": "FunctionMessageChunk", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Tool Message chunk.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "ToolMessageChunk", - "default": "ToolMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "tool_call_id": { - "title": "Tool Call Id", - "type": "string" - }, - "artifact": { - "default": null, - "title": "Artifact" - }, - "status": { - "default": "success", - "enum": [ - "success", - "error" - ], - "title": "Status", - "type": "string" - } - }, - "required": [ - "content", - "tool_call_id" - ], - "title": "ToolMessageChunk", - "type": "object" - } - ] - }, - "title": "Messages", - "type": "array" - } - }, - "required": [ - "messages" - ] - }, - "output": { - "type": "object", - "properties": { - "messages": { - "items": { - "oneOf": [ - { - "additionalProperties": true, - "description": "Message from an AI.\n\nAIMessage is returned from a chat model as a response to a prompt.\n\nThis message represents the output of the model and consists of both\nthe raw output as returned by the model together standardized fields\n(e.g., tool calls, usage metadata) added by the LangChain framework.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "ai", - "default": "ai", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "example": { - "default": false, - "title": "Example", - "type": "boolean" - }, - "tool_calls": { - "default": [], - "items": { - "description": "Represents a request to call a tool.\n\nExample:\n\n .. code-block:: python\n\n {\n \"name\": \"foo\",\n \"args\": {\"a\": 1},\n \"id\": \"123\"\n }\n\n This represents a request to call the tool named \"foo\" with arguments {\"a\": 1}\n and an identifier of \"123\".", - "properties": { - "name": { - "title": "Name", - "type": "string" - }, - "args": { - "title": "Args", - "type": "object" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "type": { - "const": "tool_call", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name", - "args", - "id" - ], - "title": "ToolCall", - "type": "object" - }, - "title": "Tool Calls", - "type": "array" - }, - "invalid_tool_calls": { - "default": [], - "items": { - "description": "Allowance for errors made by LLM.\n\nHere we add an `error` key to surface errors made during generation\n(e.g., invalid JSON arguments.)", - "properties": { - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "args": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Args" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Error" - }, - "type": { - "const": "invalid_tool_call", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name", - "args", - "id", - "error" - ], - "title": "InvalidToolCall", - "type": "object" - }, - "title": "Invalid Tool Calls", - "type": "array" - }, - "usage_metadata": { - "anyOf": [ - { - "description": "Usage metadata for a message, such as token counts.\n\nThis is a standard representation of token usage that is consistent across models.\n\nExample:\n\n .. code-block:: python\n\n {\n \"input_tokens\": 350,\n \"output_tokens\": 240,\n \"total_tokens\": 590,\n \"input_token_details\": {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n },\n \"output_token_details\": {\n \"audio\": 10,\n \"reasoning\": 200,\n }\n }\n\n.. versionchanged:: 0.3.9\n\n Added ``input_token_details`` and ``output_token_details``.", - "properties": { - "input_tokens": { - "title": "Input Tokens", - "type": "integer" - }, - "output_tokens": { - "title": "Output Tokens", - "type": "integer" - }, - "total_tokens": { - "title": "Total Tokens", - "type": "integer" - }, - "input_token_details": { - "description": "Breakdown of input token counts.\n\nDoes *not* need to sum to full input token count. Does *not* need to have all keys.\n\nExample:\n\n .. code-block:: python\n\n {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n }\n\n.. versionadded:: 0.3.9", - "properties": { - "audio": { - "title": "Audio", - "type": "integer" - }, - "cache_creation": { - "title": "Cache Creation", - "type": "integer" - }, - "cache_read": { - "title": "Cache Read", - "type": "integer" - } - }, - "title": "InputTokenDetails", - "type": "object" - }, - "output_token_details": { - "description": "Breakdown of output token counts.\n\nDoes *not* need to sum to full output token count. Does *not* need to have all keys.\n\nExample:\n\n .. code-block:: python\n\n {\n \"audio\": 10,\n \"reasoning\": 200,\n }\n\n.. versionadded:: 0.3.9", - "properties": { - "audio": { - "title": "Audio", - "type": "integer" - }, - "reasoning": { - "title": "Reasoning", - "type": "integer" - } - }, - "title": "OutputTokenDetails", - "type": "object" - } - }, - "required": [ - "input_tokens", - "output_tokens", - "total_tokens" - ], - "title": "UsageMetadata", - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "content" - ], - "title": "AIMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message from a human.\n\nHumanMessages are messages that are passed in from a human to the model.\n\nExample:\n\n .. code-block:: python\n\n from langchain_core.messages import HumanMessage, SystemMessage\n\n messages = [\n SystemMessage(\n content=\"You are a helpful assistant! Your name is Bob.\"\n ),\n HumanMessage(\n content=\"What is your name?\"\n )\n ]\n\n # Instantiate a chat model and invoke it with the messages\n model = ...\n print(model.invoke(messages))", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "human", - "default": "human", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "example": { - "default": false, - "title": "Example", - "type": "boolean" - } - }, - "required": [ - "content" - ], - "title": "HumanMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message that can be assigned an arbitrary speaker (i.e. role).", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "chat", - "default": "chat", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "role": { - "title": "Role", - "type": "string" - } - }, - "required": [ - "content", - "role" - ], - "title": "ChatMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message for priming AI behavior.\n\nThe system message is usually passed in as the first of a sequence\nof input messages.\n\nExample:\n\n .. code-block:: python\n\n from langchain_core.messages import HumanMessage, SystemMessage\n\n messages = [\n SystemMessage(\n content=\"You are a helpful assistant! Your name is Bob.\"\n ),\n HumanMessage(\n content=\"What is your name?\"\n )\n ]\n\n # Define a chat model and invoke it with the messages\n print(model.invoke(messages))", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "system", - "default": "system", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - } - }, - "required": [ - "content" - ], - "title": "SystemMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message for passing the result of executing a tool back to a model.\n\nFunctionMessage are an older version of the ToolMessage schema, and\ndo not contain the tool_call_id field.\n\nThe tool_call_id field is used to associate the tool call request with the\ntool call response. This is useful in situations where a chat model is able\nto request multiple tool calls in parallel.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "function", - "default": "function", - "title": "Type", - "type": "string" - }, - "name": { - "title": "Name", - "type": "string" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - } - }, - "required": [ - "content", - "name" - ], - "title": "FunctionMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message for passing the result of executing a tool back to a model.\n\nToolMessages contain the result of a tool invocation. Typically, the result\nis encoded inside the `content` field.\n\nExample: A ToolMessage representing a result of 42 from a tool call with id\n\n .. code-block:: python\n\n from langchain_core.messages import ToolMessage\n\n ToolMessage(content='42', tool_call_id='call_Jja7J89XsjrOLA5r!MEOW!SL')\n\n\nExample: A ToolMessage where only part of the tool output is sent to the model\n and the full output is passed in to artifact.\n\n .. versionadded:: 0.2.17\n\n .. code-block:: python\n\n from langchain_core.messages import ToolMessage\n\n tool_output = {\n \"stdout\": \"From the graph we can see that the correlation between x and y is ...\",\n \"stderr\": None,\n \"artifacts\": {\"type\": \"image\", \"base64_data\": \"/9j/4gIcSU...\"},\n }\n\n ToolMessage(\n content=tool_output[\"stdout\"],\n artifact=tool_output,\n tool_call_id='call_Jja7J89XsjrOLA5r!MEOW!SL',\n )\n\nThe tool_call_id field is used to associate the tool call request with the\ntool call response. This is useful in situations where a chat model is able\nto request multiple tool calls in parallel.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "tool", - "default": "tool", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "tool_call_id": { - "title": "Tool Call Id", - "type": "string" - }, - "artifact": { - "default": null, - "title": "Artifact" - }, - "status": { - "default": "success", - "enum": [ - "success", - "error" - ], - "title": "Status", - "type": "string" - } - }, - "required": [ - "content", - "tool_call_id" - ], - "title": "ToolMessage", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Message chunk from an AI.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "AIMessageChunk", - "default": "AIMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "example": { - "default": false, - "title": "Example", - "type": "boolean" - }, - "tool_calls": { - "default": [], - "items": { - "description": "Represents a request to call a tool.\n\nExample:\n\n .. code-block:: python\n\n {\n \"name\": \"foo\",\n \"args\": {\"a\": 1},\n \"id\": \"123\"\n }\n\n This represents a request to call the tool named \"foo\" with arguments {\"a\": 1}\n and an identifier of \"123\".", - "properties": { - "name": { - "title": "Name", - "type": "string" - }, - "args": { - "title": "Args", - "type": "object" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "type": { - "const": "tool_call", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name", - "args", - "id" - ], - "title": "ToolCall", - "type": "object" - }, - "title": "Tool Calls", - "type": "array" - }, - "invalid_tool_calls": { - "default": [], - "items": { - "description": "Allowance for errors made by LLM.\n\nHere we add an `error` key to surface errors made during generation\n(e.g., invalid JSON arguments.)", - "properties": { - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "args": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Args" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Error" - }, - "type": { - "const": "invalid_tool_call", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name", - "args", - "id", - "error" - ], - "title": "InvalidToolCall", - "type": "object" - }, - "title": "Invalid Tool Calls", - "type": "array" - }, - "usage_metadata": { - "anyOf": [ - { - "description": "Usage metadata for a message, such as token counts.\n\nThis is a standard representation of token usage that is consistent across models.\n\nExample:\n\n .. code-block:: python\n\n {\n \"input_tokens\": 350,\n \"output_tokens\": 240,\n \"total_tokens\": 590,\n \"input_token_details\": {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n },\n \"output_token_details\": {\n \"audio\": 10,\n \"reasoning\": 200,\n }\n }\n\n.. versionchanged:: 0.3.9\n\n Added ``input_token_details`` and ``output_token_details``.", - "properties": { - "input_tokens": { - "title": "Input Tokens", - "type": "integer" - }, - "output_tokens": { - "title": "Output Tokens", - "type": "integer" - }, - "total_tokens": { - "title": "Total Tokens", - "type": "integer" - }, - "input_token_details": { - "description": "Breakdown of input token counts.\n\nDoes *not* need to sum to full input token count. Does *not* need to have all keys.\n\nExample:\n\n .. code-block:: python\n\n {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n }\n\n.. versionadded:: 0.3.9", - "properties": { - "audio": { - "title": "Audio", - "type": "integer" - }, - "cache_creation": { - "title": "Cache Creation", - "type": "integer" - }, - "cache_read": { - "title": "Cache Read", - "type": "integer" - } - }, - "title": "InputTokenDetails", - "type": "object" - }, - "output_token_details": { - "description": "Breakdown of output token counts.\n\nDoes *not* need to sum to full output token count. Does *not* need to have all keys.\n\nExample:\n\n .. code-block:: python\n\n {\n \"audio\": 10,\n \"reasoning\": 200,\n }\n\n.. versionadded:: 0.3.9", - "properties": { - "audio": { - "title": "Audio", - "type": "integer" - }, - "reasoning": { - "title": "Reasoning", - "type": "integer" - } - }, - "title": "OutputTokenDetails", - "type": "object" - } - }, - "required": [ - "input_tokens", - "output_tokens", - "total_tokens" - ], - "title": "UsageMetadata", - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "tool_call_chunks": { - "default": [], - "items": { - "description": "A chunk of a tool call (e.g., as part of a stream).\n\nWhen merging ToolCallChunks (e.g., via AIMessageChunk.__add__),\nall string attributes are concatenated. Chunks are only merged if their\nvalues of `index` are equal and not None.\n\nExample:\n\n.. code-block:: python\n\n left_chunks = [ToolCallChunk(name=\"foo\", args='{\"a\":', index=0)]\n right_chunks = [ToolCallChunk(name=None, args='1}', index=0)]\n\n (\n AIMessageChunk(content=\"\", tool_call_chunks=left_chunks)\n + AIMessageChunk(content=\"\", tool_call_chunks=right_chunks)\n ).tool_call_chunks == [ToolCallChunk(name='foo', args='{\"a\":1}', index=0)]", - "properties": { - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "args": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Args" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Index" - }, - "type": { - "const": "tool_call_chunk", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name", - "args", - "id", - "index" - ], - "title": "ToolCallChunk", - "type": "object" - }, - "title": "Tool Call Chunks", - "type": "array" - } - }, - "required": [ - "content" - ], - "title": "AIMessageChunk", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Human Message chunk.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "HumanMessageChunk", - "default": "HumanMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "example": { - "default": false, - "title": "Example", - "type": "boolean" - } - }, - "required": [ - "content" - ], - "title": "HumanMessageChunk", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Chat Message chunk.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "ChatMessageChunk", - "default": "ChatMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "role": { - "title": "Role", - "type": "string" - } - }, - "required": [ - "content", - "role" - ], - "title": "ChatMessageChunk", - "type": "object" - }, - { - "additionalProperties": true, - "description": "System Message chunk.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "SystemMessageChunk", - "default": "SystemMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - } - }, - "required": [ - "content" - ], - "title": "SystemMessageChunk", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Function Message chunk.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "FunctionMessageChunk", - "default": "FunctionMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "title": "Name", - "type": "string" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - } - }, - "required": [ - "content", - "name" - ], - "title": "FunctionMessageChunk", - "type": "object" - }, - { - "additionalProperties": true, - "description": "Tool Message chunk.", - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "title": "Additional Kwargs", - "type": "object" - }, - "response_metadata": { - "title": "Response Metadata", - "type": "object" - }, - "type": { - "const": "ToolMessageChunk", - "default": "ToolMessageChunk", - "title": "Type", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Id" - }, - "tool_call_id": { - "title": "Tool Call Id", - "type": "string" - }, - "artifact": { - "default": null, - "title": "Artifact" - }, - "status": { - "default": "success", - "enum": [ - "success", - "error" - ], - "title": "Status", - "type": "string" - } - }, - "required": [ - "content", - "tool_call_id" - ], - "title": "ToolMessageChunk", - "type": "object" - } - ] + "entryPoints": [ + { + "filePath": "agent", + "uniqueId": "4e7d1db4-7679-4889-9074-abbff0e52737", + "type": "agent", + "input": { + "type": "object", + "properties": { + "question": { + "title": "Question", + "type": "string" + } + }, + "required": [ + "question" + ] }, - "title": "Messages", - "type": "array" - } - }, - "required": [ - "messages" - ] - } + "output": { + "type": "object", + "properties": { + "answer": { + "default": null, + "title": "Answer", + "type": "string" + } + }, + "required": [] + } + } + ], + "bindings": { + "version": "2.0", + "resources": [] } - ], - "bindings": { - "version": "2.0", - "resources": [] - } } \ No newline at end of file diff --git a/samples/multi-agent-supervisor-researcher-coder/uv.lock b/samples/multi-agent-supervisor-researcher-coder/uv.lock index 5cd45b5..e3f7f4b 100644 --- a/samples/multi-agent-supervisor-researcher-coder/uv.lock +++ b/samples/multi-agent-supervisor-researcher-coder/uv.lock @@ -138,22 +138,29 @@ wheels = [ [[package]] name = "anthropic" -version = "0.65.0" +version = "0.71.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "distro" }, + { name = "docstring-parser" }, { name = "httpx" }, { name = "jiter" }, { name = "pydantic" }, { name = "sniffio" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/14/492482f0144674ef39096de6e075cdd71712401082b43cfafa06ef33ada3/anthropic-0.65.0.tar.gz", hash = "sha256:6b6b6942574e54342050dfd42b8d856a8366b171daec147df3b80be4722733b9", size = 436875, upload-time = "2025-09-02T16:12:27.711Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/4f/70682b068d897841f43223df82d96ec1d617435a8b759c4a2d901a50158b/anthropic-0.71.0.tar.gz", hash = "sha256:eb8e6fa86d049061b3ef26eb4cbae0174ebbff21affa6de7b3098da857d8de6a", size = 489102, upload-time = "2025-10-16T15:54:40.08Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/07/dc63af4b1dec4dc8b162beafbdec9aa7fbb7d4a00e8ddbbb5347a5a9224d/anthropic-0.65.0-py3-none-any.whl", hash = "sha256:ba9d9f82678046c74ddf5698ca06d9f5b0f599cfac922ab0d5921638eb448d98", size = 307994, upload-time = "2025-09-02T16:12:26.366Z" }, + { url = "https://files.pythonhosted.org/packages/5d/77/073e8ac488f335aec7001952825275582fb8f433737e90f24eeef9d878f6/anthropic-0.71.0-py3-none-any.whl", hash = "sha256:85c5015fcdbdc728390f11b17642a65a4365d03b12b799b18b6cc57e71fdb327", size = 355035, upload-time = "2025-10-16T15:54:38.238Z" }, ] +[[package]] +name = "antlr4-python3-runtime" +version = "4.9.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b", size = 117034, upload-time = "2021-11-06T17:52:23.524Z" } + [[package]] name = "anyio" version = "4.10.0" @@ -503,12 +510,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, ] +[[package]] +name = "docstring-parser" +version = "0.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/9d/c3b43da9515bd270df0f80548d9944e389870713cc1fe2b8fb35fe2bcefd/docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912", size = 27442, upload-time = "2025-07-21T07:35:01.868Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708", size = 36896, upload-time = "2025-07-21T07:35:00.684Z" }, +] + [[package]] name = "exceptiongroup" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [ @@ -715,6 +731,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/25/0a/6269e3473b09aed2dab8aa1a600c70f31f00ae1349bee30658f7e358a159/httpx_sse-0.4.1-py3-none-any.whl", hash = "sha256:cba42174344c3a5b06f255ce65b350880f962d99ead85e776f23c6618a377a37", size = 8054, upload-time = "2025-06-24T13:21:04.772Z" }, ] +[[package]] +name = "hydra-core" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "antlr4-python3-runtime" }, + { name = "omegaconf" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/8e/07e42bc434a847154083b315779b0a81d567154504624e181caf2c71cd98/hydra-core-1.3.2.tar.gz", hash = "sha256:8a878ed67216997c3e9d88a8e72e7b4767e81af37afb4ea3334b269a4390a824", size = 3263494, upload-time = "2023-02-23T18:33:43.03Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl", hash = "sha256:fa0238a9e31df3373b35b0bfb672c34cc92718d21f81311d8996a16de1141d8b", size = 154547, upload-time = "2023-02-23T18:33:40.801Z" }, +] + [[package]] name = "idna" version = "3.10" @@ -838,6 +868,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" }, ] +[[package]] +name = "jsonschema-pydantic" +version = "0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d4/3e/088097e87f6b24b162cd42b090b1d3891b68e9dac96ceeac8ed5dff94db7/jsonschema_pydantic-0.6.tar.gz", hash = "sha256:6069a8929a333a7c7ea8510e9de50f062e747e655e6ba106da5af1981f995270", size = 6227, upload-time = "2024-02-03T21:50:23.285Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/67/cbb63be985519b51d13499e726db2c960069588d5c2c479859856158b4de/jsonschema_pydantic-0.6-py3-none-any.whl", hash = "sha256:98385ed53ab87598665956b43756746350e2b60411a38381231f9703d36e40eb", size = 4154, upload-time = "2024-02-03T21:50:20.622Z" }, +] + [[package]] name = "langchain" version = "0.3.27" @@ -859,16 +901,16 @@ wheels = [ [[package]] name = "langchain-anthropic" -version = "0.3.19" +version = "0.3.22" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anthropic" }, { name = "langchain-core" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1f/ab/bdaefa42fdab238efff45eb28c6cd74c011979092408decdae22c0bf7e66/langchain_anthropic-0.3.19.tar.gz", hash = "sha256:e62259382586ee5c44e9a9459d00b74a7e191550e5fadfad28f0daa5d143d745", size = 281502, upload-time = "2025-08-18T18:33:36.811Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b8/ac/4791e4451e1972f80cb517e19d003678239921fc0685a4c4b265fe47e216/langchain_anthropic-0.3.22.tar.gz", hash = "sha256:6c440278bd8012bc94ae341f416bfc724fdc5d2d2b69630fe6e82fa6ee9682ac", size = 471312, upload-time = "2025-10-09T18:39:26.983Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/69/64473db52d02715f3815df3b25c9816b5801a58762a5ae62a3e5b84169a0/langchain_anthropic-0.3.19-py3-none-any.whl", hash = "sha256:5b5372ef7e10ee32b4308b4d9e1ed623c360b7d0a233c017e5209ad8118d5ab7", size = 31775, upload-time = "2025-08-18T18:33:35.596Z" }, + { url = "https://files.pythonhosted.org/packages/d1/ac/019fd9d45716a4d74c154f160665074ae49885ff4764c8313737f5fda348/langchain_anthropic-0.3.22-py3-none-any.whl", hash = "sha256:17721b240342a1a3f70bf0b2ff33520ba60d69008e3b9433190a62a52ff87cf6", size = 32592, upload-time = "2025-10-09T18:39:25.766Z" }, ] [[package]] @@ -897,7 +939,7 @@ wheels = [ [[package]] name = "langchain-core" -version = "0.3.75" +version = "0.3.79" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonpatch" }, @@ -908,9 +950,9 @@ dependencies = [ { name = "tenacity" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/63/270b71a23e849984505ddc7c5c9fd3f4bd9cb14b1a484ee44c4e51c33cc2/langchain_core-0.3.75.tar.gz", hash = "sha256:ab0eb95a06ed6043f76162e6086b45037690cb70b7f090bd83b5ebb8a05b70ed", size = 570876, upload-time = "2025-08-26T15:24:12.246Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c8/99/f926495f467e0f43289f12e951655d267d1eddc1136c3cf4dd907794a9a7/langchain_core-0.3.79.tar.gz", hash = "sha256:024ba54a346dd9b13fb8b2342e0c83d0111e7f26fa01f545ada23ad772b55a60", size = 580895, upload-time = "2025-10-09T21:59:08.359Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/42/0d0221cce6f168f644d7d96cb6c87c4e42fc55d2941da7a36e970e3ab8ab/langchain_core-0.3.75-py3-none-any.whl", hash = "sha256:03ca1fadf955ee3c7d5806a841f4b3a37b816acea5e61a7e6ba1298c05eea7f5", size = 443986, upload-time = "2025-08-26T15:24:10.883Z" }, + { url = "https://files.pythonhosted.org/packages/fc/71/46b0efaf3fc6ad2c2bd600aef500f1cb2b7038a4042f58905805630dd29d/langchain_core-0.3.79-py3-none-any.whl", hash = "sha256:92045bfda3e741f8018e1356f83be203ec601561c6a7becfefe85be5ddc58fdb", size = 449779, upload-time = "2025-10-09T21:59:06.493Z" }, ] [[package]] @@ -940,6 +982,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e6/3d/e22ee65fff79afe7bdfbd67844243eb279b440c882dad9e4262dcc87131f/langchain_openai-0.3.32-py3-none-any.whl", hash = "sha256:3354f76822f7cc76d8069831fe2a77f9bc7ff3b4f13af788bd94e4c6e853b400", size = 74531, upload-time = "2025-08-26T14:25:26.542Z" }, ] +[[package]] +name = "langchain-tavily" +version = "0.2.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "langchain" }, + { name = "langchain-core" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/b7/03f62ffc504990712cefdc722a46c3be80d6e0407833edb0f3a785f840c3/langchain_tavily-0.2.12.tar.gz", hash = "sha256:e73ef2149b7a4e751fce75c47003d04628222b12d073dae4af2dc7f58d589e30", size = 21744, upload-time = "2025-10-06T22:06:40.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/e1/71774530175512c49f7004790b669726c07ad7f797ebc0166ee99ea16d63/langchain_tavily-0.2.12-py3-none-any.whl", hash = "sha256:d243a53f60048a18b55f5a7efd5e2dcdde6a9dbc9f84c45e5f349210303e95a3", size = 25864, upload-time = "2025-10-06T22:06:39.354Z" }, +] + [[package]] name = "langchain-text-splitters" version = "0.3.11" @@ -954,7 +1011,7 @@ wheels = [ [[package]] name = "langgraph" -version = "0.6.6" +version = "0.6.11" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-core" }, @@ -964,9 +1021,9 @@ dependencies = [ { name = "pydantic" }, { name = "xxhash" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/02/2b/59f0b2985467ec84b006dd41ec31c0aae43a7f16722d5514292500b871c9/langgraph-0.6.6.tar.gz", hash = "sha256:e7d3cefacf356f8c01721b166b67b3bf581659d5361a3530f59ecd9b8448eca7", size = 465452, upload-time = "2025-08-20T04:02:13.915Z" } +sdist = { url = "https://files.pythonhosted.org/packages/87/4d/8dfe5e0f9c69655dfb1f450922699ab683b3abbc038cfe38f769eaf871c2/langgraph-0.6.11.tar.gz", hash = "sha256:cd5373d0a59701ab39c9f8af33a33c5704553de815318387fa7f240511e0efd7", size = 492075, upload-time = "2025-10-21T00:04:14.608Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/ef/81fce0a80925cd89987aa641ff01573e3556a24f2d205112862a69df7fd3/langgraph-0.6.6-py3-none-any.whl", hash = "sha256:a2283a5236abba6c8307c1a485c04e8a0f0ffa2be770878782a7bf2deb8d7954", size = 153274, upload-time = "2025-08-20T04:02:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/df/94/430f0341c5c2fe3e3b9f5ab2622f35e2bda12c4a7d655c519468e853d1b0/langgraph-0.6.11-py3-none-any.whl", hash = "sha256:49268de69d85b7db3da9e2ca582a474516421c1c44be5cff390416cfa6967faa", size = 155424, upload-time = "2025-10-21T00:04:12.89Z" }, ] [[package]] @@ -1105,6 +1162,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] +[[package]] +name = "mockito" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/f5/52acd91a437530992c24ec00c223a1dba1ac51041fea430d28e16a0adb16/mockito-1.5.4.tar.gz", hash = "sha256:f00ed587c32966df3293c294cadb31769460adfc4154f52b90672946aa4b32df", size = 59915, upload-time = "2025-01-22T22:10:03.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/1c/3eb92175fc541abeefcf135f14df4c4a9568e9f44b7d68b376867a39089a/mockito-1.5.4-py3-none-any.whl", hash = "sha256:ba7fbea6ede6ebc180f376bc5d97a4b95c7ccf54a57f12d2af740c440d35d553", size = 30293, upload-time = "2025-01-22T22:10:00.935Z" }, +] + [[package]] name = "msal" version = "1.33.0" @@ -1131,6 +1197,67 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5e/75/bd9b7bb966668920f06b200e84454c8f3566b102183bc55c5473d96cb2b9/msal_extensions-1.3.1-py3-none-any.whl", hash = "sha256:96d3de4d034504e969ac5e85bae8106c8373b5c6568e4c8fa7af2eca9dbe6bca", size = 20583, upload-time = "2025-03-14T23:51:03.016Z" }, ] +[[package]] +name = "msgpack" +version = "1.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4d/f2/bfb55a6236ed8725a96b0aa3acbd0ec17588e6a2c3b62a93eb513ed8783f/msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e", size = 173581, upload-time = "2025-10-08T09:15:56.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/a2/3b68a9e769db68668b25c6108444a35f9bd163bb848c0650d516761a59c0/msgpack-1.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0051fffef5a37ca2cd16978ae4f0aef92f164df86823871b5162812bebecd8e2", size = 81318, upload-time = "2025-10-08T09:14:38.722Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e1/2b720cc341325c00be44e1ed59e7cfeae2678329fbf5aa68f5bda57fe728/msgpack-1.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a605409040f2da88676e9c9e5853b3449ba8011973616189ea5ee55ddbc5bc87", size = 83786, upload-time = "2025-10-08T09:14:40.082Z" }, + { url = "https://files.pythonhosted.org/packages/71/e5/c2241de64bfceac456b140737812a2ab310b10538a7b34a1d393b748e095/msgpack-1.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b696e83c9f1532b4af884045ba7f3aa741a63b2bc22617293a2c6a7c645f251", size = 398240, upload-time = "2025-10-08T09:14:41.151Z" }, + { url = "https://files.pythonhosted.org/packages/b7/09/2a06956383c0fdebaef5aa9246e2356776f12ea6f2a44bd1368abf0e46c4/msgpack-1.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:365c0bbe981a27d8932da71af63ef86acc59ed5c01ad929e09a0b88c6294e28a", size = 406070, upload-time = "2025-10-08T09:14:42.821Z" }, + { url = "https://files.pythonhosted.org/packages/0e/74/2957703f0e1ef20637d6aead4fbb314330c26f39aa046b348c7edcf6ca6b/msgpack-1.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:41d1a5d875680166d3ac5c38573896453bbbea7092936d2e107214daf43b1d4f", size = 393403, upload-time = "2025-10-08T09:14:44.38Z" }, + { url = "https://files.pythonhosted.org/packages/a5/09/3bfc12aa90f77b37322fc33e7a8a7c29ba7c8edeadfa27664451801b9860/msgpack-1.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354e81bcdebaab427c3df4281187edc765d5d76bfb3a7c125af9da7a27e8458f", size = 398947, upload-time = "2025-10-08T09:14:45.56Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4f/05fcebd3b4977cb3d840f7ef6b77c51f8582086de5e642f3fefee35c86fc/msgpack-1.1.2-cp310-cp310-win32.whl", hash = "sha256:e64c8d2f5e5d5fda7b842f55dec6133260ea8f53c4257d64494c534f306bf7a9", size = 64769, upload-time = "2025-10-08T09:14:47.334Z" }, + { url = "https://files.pythonhosted.org/packages/d0/3e/b4547e3a34210956382eed1c85935fff7e0f9b98be3106b3745d7dec9c5e/msgpack-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:db6192777d943bdaaafb6ba66d44bf65aa0e9c5616fa1d2da9bb08828c6b39aa", size = 71293, upload-time = "2025-10-08T09:14:48.665Z" }, + { url = "https://files.pythonhosted.org/packages/2c/97/560d11202bcd537abca693fd85d81cebe2107ba17301de42b01ac1677b69/msgpack-1.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e86a607e558d22985d856948c12a3fa7b42efad264dca8a3ebbcfa2735d786c", size = 82271, upload-time = "2025-10-08T09:14:49.967Z" }, + { url = "https://files.pythonhosted.org/packages/83/04/28a41024ccbd67467380b6fb440ae916c1e4f25e2cd4c63abe6835ac566e/msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:283ae72fc89da59aa004ba147e8fc2f766647b1251500182fac0350d8af299c0", size = 84914, upload-time = "2025-10-08T09:14:50.958Z" }, + { url = "https://files.pythonhosted.org/packages/71/46/b817349db6886d79e57a966346cf0902a426375aadc1e8e7a86a75e22f19/msgpack-1.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61c8aa3bd513d87c72ed0b37b53dd5c5a0f58f2ff9f26e1555d3bd7948fb7296", size = 416962, upload-time = "2025-10-08T09:14:51.997Z" }, + { url = "https://files.pythonhosted.org/packages/da/e0/6cc2e852837cd6086fe7d8406af4294e66827a60a4cf60b86575a4a65ca8/msgpack-1.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:454e29e186285d2ebe65be34629fa0e8605202c60fbc7c4c650ccd41870896ef", size = 426183, upload-time = "2025-10-08T09:14:53.477Z" }, + { url = "https://files.pythonhosted.org/packages/25/98/6a19f030b3d2ea906696cedd1eb251708e50a5891d0978b012cb6107234c/msgpack-1.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7bc8813f88417599564fafa59fd6f95be417179f76b40325b500b3c98409757c", size = 411454, upload-time = "2025-10-08T09:14:54.648Z" }, + { url = "https://files.pythonhosted.org/packages/b7/cd/9098fcb6adb32187a70b7ecaabf6339da50553351558f37600e53a4a2a23/msgpack-1.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bafca952dc13907bdfdedfc6a5f579bf4f292bdd506fadb38389afa3ac5b208e", size = 422341, upload-time = "2025-10-08T09:14:56.328Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ae/270cecbcf36c1dc85ec086b33a51a4d7d08fc4f404bdbc15b582255d05ff/msgpack-1.1.2-cp311-cp311-win32.whl", hash = "sha256:602b6740e95ffc55bfb078172d279de3773d7b7db1f703b2f1323566b878b90e", size = 64747, upload-time = "2025-10-08T09:14:57.882Z" }, + { url = "https://files.pythonhosted.org/packages/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:d198d275222dc54244bf3327eb8cbe00307d220241d9cec4d306d49a44e85f68", size = 71633, upload-time = "2025-10-08T09:14:59.177Z" }, + { url = "https://files.pythonhosted.org/packages/73/4d/7c4e2b3d9b1106cd0aa6cb56cc57c6267f59fa8bfab7d91df5adc802c847/msgpack-1.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:86f8136dfa5c116365a8a651a7d7484b65b13339731dd6faebb9a0242151c406", size = 64755, upload-time = "2025-10-08T09:15:00.48Z" }, + { url = "https://files.pythonhosted.org/packages/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa", size = 81939, upload-time = "2025-10-08T09:15:01.472Z" }, + { url = "https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:446abdd8b94b55c800ac34b102dffd2f6aa0ce643c55dfc017ad89347db3dbdb", size = 85064, upload-time = "2025-10-08T09:15:03.764Z" }, + { url = "https://files.pythonhosted.org/packages/f2/60/a064b0345fc36c4c3d2c743c82d9100c40388d77f0b48b2f04d6041dbec1/msgpack-1.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c63eea553c69ab05b6747901b97d620bb2a690633c77f23feb0c6a947a8a7b8f", size = 417131, upload-time = "2025-10-08T09:15:05.136Z" }, + { url = "https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42", size = 427556, upload-time = "2025-10-08T09:15:06.837Z" }, + { url = "https://files.pythonhosted.org/packages/f5/87/ffe21d1bf7d9991354ad93949286f643b2bb6ddbeab66373922b44c3b8cc/msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9", size = 404920, upload-time = "2025-10-08T09:15:08.179Z" }, + { url = "https://files.pythonhosted.org/packages/ff/41/8543ed2b8604f7c0d89ce066f42007faac1eaa7d79a81555f206a5cdb889/msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620", size = 415013, upload-time = "2025-10-08T09:15:09.83Z" }, + { url = "https://files.pythonhosted.org/packages/41/0d/2ddfaa8b7e1cee6c490d46cb0a39742b19e2481600a7a0e96537e9c22f43/msgpack-1.1.2-cp312-cp312-win32.whl", hash = "sha256:1fff3d825d7859ac888b0fbda39a42d59193543920eda9d9bea44d958a878029", size = 65096, upload-time = "2025-10-08T09:15:11.11Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1de460f0403172cff81169a30b9a92b260cb809c4cb7e2fc79ae8d0510c78b6b", size = 72708, upload-time = "2025-10-08T09:15:12.554Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/5b1a1f70eb0e87d1678e9624908f86317787b536060641d6798e3cf70ace/msgpack-1.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:be5980f3ee0e6bd44f3a9e9dea01054f175b50c3e6cdb692bc9424c0bbb8bf69", size = 64119, upload-time = "2025-10-08T09:15:13.589Z" }, + { url = "https://files.pythonhosted.org/packages/6b/31/b46518ecc604d7edf3a4f94cb3bf021fc62aa301f0cb849936968164ef23/msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4efd7b5979ccb539c221a4c4e16aac1a533efc97f3b759bb5a5ac9f6d10383bf", size = 81212, upload-time = "2025-10-08T09:15:14.552Z" }, + { url = "https://files.pythonhosted.org/packages/92/dc/c385f38f2c2433333345a82926c6bfa5ecfff3ef787201614317b58dd8be/msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42eefe2c3e2af97ed470eec850facbe1b5ad1d6eacdbadc42ec98e7dcf68b4b7", size = 84315, upload-time = "2025-10-08T09:15:15.543Z" }, + { url = "https://files.pythonhosted.org/packages/d3/68/93180dce57f684a61a88a45ed13047558ded2be46f03acb8dec6d7c513af/msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999", size = 412721, upload-time = "2025-10-08T09:15:16.567Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e", size = 424657, upload-time = "2025-10-08T09:15:17.825Z" }, + { url = "https://files.pythonhosted.org/packages/38/f8/4398c46863b093252fe67368b44edc6c13b17f4e6b0e4929dbf0bdb13f23/msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162", size = 402668, upload-time = "2025-10-08T09:15:19.003Z" }, + { url = "https://files.pythonhosted.org/packages/28/ce/698c1eff75626e4124b4d78e21cca0b4cc90043afb80a507626ea354ab52/msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794", size = 419040, upload-time = "2025-10-08T09:15:20.183Z" }, + { url = "https://files.pythonhosted.org/packages/67/32/f3cd1667028424fa7001d82e10ee35386eea1408b93d399b09fb0aa7875f/msgpack-1.1.2-cp313-cp313-win32.whl", hash = "sha256:a7787d353595c7c7e145e2331abf8b7ff1e6673a6b974ded96e6d4ec09f00c8c", size = 65037, upload-time = "2025-10-08T09:15:21.416Z" }, + { url = "https://files.pythonhosted.org/packages/74/07/1ed8277f8653c40ebc65985180b007879f6a836c525b3885dcc6448ae6cb/msgpack-1.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:a465f0dceb8e13a487e54c07d04ae3ba131c7c5b95e2612596eafde1dccf64a9", size = 72631, upload-time = "2025-10-08T09:15:22.431Z" }, + { url = "https://files.pythonhosted.org/packages/e5/db/0314e4e2db56ebcf450f277904ffd84a7988b9e5da8d0d61ab2d057df2b6/msgpack-1.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:e69b39f8c0aa5ec24b57737ebee40be647035158f14ed4b40e6f150077e21a84", size = 64118, upload-time = "2025-10-08T09:15:23.402Z" }, + { url = "https://files.pythonhosted.org/packages/22/71/201105712d0a2ff07b7873ed3c220292fb2ea5120603c00c4b634bcdafb3/msgpack-1.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e23ce8d5f7aa6ea6d2a2b326b4ba46c985dbb204523759984430db7114f8aa00", size = 81127, upload-time = "2025-10-08T09:15:24.408Z" }, + { url = "https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939", size = 84981, upload-time = "2025-10-08T09:15:25.812Z" }, + { url = "https://files.pythonhosted.org/packages/8e/a9/3536e385167b88c2cc8f4424c49e28d49a6fc35206d4a8060f136e71f94c/msgpack-1.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e2cb7b9031568a2a5c73aa077180f93dd2e95b4f8d3b8e14a73ae94a9e667e", size = 411885, upload-time = "2025-10-08T09:15:27.22Z" }, + { url = "https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931", size = 419658, upload-time = "2025-10-08T09:15:28.4Z" }, + { url = "https://files.pythonhosted.org/packages/3b/ef/2b92e286366500a09a67e03496ee8b8ba00562797a52f3c117aa2b29514b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:04fb995247a6e83830b62f0b07bf36540c213f6eac8e851166d8d86d83cbd014", size = 403290, upload-time = "2025-10-08T09:15:29.764Z" }, + { url = "https://files.pythonhosted.org/packages/78/90/e0ea7990abea5764e4655b8177aa7c63cdfa89945b6e7641055800f6c16b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e22ab046fa7ede9e36eeb4cfad44d46450f37bb05d5ec482b02868f451c95e2", size = 415234, upload-time = "2025-10-08T09:15:31.022Z" }, + { url = "https://files.pythonhosted.org/packages/72/4e/9390aed5db983a2310818cd7d3ec0aecad45e1f7007e0cda79c79507bb0d/msgpack-1.1.2-cp314-cp314-win32.whl", hash = "sha256:80a0ff7d4abf5fecb995fcf235d4064b9a9a8a40a3ab80999e6ac1e30b702717", size = 66391, upload-time = "2025-10-08T09:15:32.265Z" }, + { url = "https://files.pythonhosted.org/packages/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b", size = 73787, upload-time = "2025-10-08T09:15:33.219Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b0/9d9f667ab48b16ad4115c1935d94023b82b3198064cb84a123e97f7466c1/msgpack-1.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:59415c6076b1e30e563eb732e23b994a61c159cec44deaf584e5cc1dd662f2af", size = 66453, upload-time = "2025-10-08T09:15:34.225Z" }, + { url = "https://files.pythonhosted.org/packages/16/67/93f80545eb1792b61a217fa7f06d5e5cb9e0055bed867f43e2b8e012e137/msgpack-1.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:897c478140877e5307760b0ea66e0932738879e7aa68144d9b78ea4c8302a84a", size = 85264, upload-time = "2025-10-08T09:15:35.61Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/33c8a24959cf193966ef11a6f6a2995a65eb066bd681fd085afd519a57ce/msgpack-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a668204fa43e6d02f89dbe79a30b0d67238d9ec4c5bd8a940fc3a004a47b721b", size = 89076, upload-time = "2025-10-08T09:15:36.619Z" }, + { url = "https://files.pythonhosted.org/packages/fc/6b/62e85ff7193663fbea5c0254ef32f0c77134b4059f8da89b958beb7696f3/msgpack-1.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5559d03930d3aa0f3aacb4c42c776af1a2ace2611871c84a75afe436695e6245", size = 435242, upload-time = "2025-10-08T09:15:37.647Z" }, + { url = "https://files.pythonhosted.org/packages/c1/47/5c74ecb4cc277cf09f64e913947871682ffa82b3b93c8dad68083112f412/msgpack-1.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70c5a7a9fea7f036b716191c29047374c10721c389c21e9ffafad04df8c52c90", size = 432509, upload-time = "2025-10-08T09:15:38.794Z" }, + { url = "https://files.pythonhosted.org/packages/24/a4/e98ccdb56dc4e98c929a3f150de1799831c0a800583cde9fa022fa90602d/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2cb069d8b981abc72b41aea1c580ce92d57c673ec61af4c500153a626cb9e20", size = 415957, upload-time = "2025-10-08T09:15:40.238Z" }, + { url = "https://files.pythonhosted.org/packages/da/28/6951f7fb67bc0a4e184a6b38ab71a92d9ba58080b27a77d3e2fb0be5998f/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d62ce1f483f355f61adb5433ebfd8868c5f078d1a52d042b0a998682b4fa8c27", size = 422910, upload-time = "2025-10-08T09:15:41.505Z" }, + { url = "https://files.pythonhosted.org/packages/f0/03/42106dcded51f0a0b5284d3ce30a671e7bd3f7318d122b2ead66ad289fed/msgpack-1.1.2-cp314-cp314t-win32.whl", hash = "sha256:1d1418482b1ee984625d88aa9585db570180c286d942da463533b238b98b812b", size = 75197, upload-time = "2025-10-08T09:15:42.954Z" }, + { url = "https://files.pythonhosted.org/packages/15/86/d0071e94987f8db59d4eeb386ddc64d0bb9b10820a8d82bcd3e53eeb2da6/msgpack-1.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5a46bf7e831d09470ad92dff02b8b1ac92175ca36b087f904a0519857c6be3ff", size = 85772, upload-time = "2025-10-08T09:15:43.954Z" }, + { url = "https://files.pythonhosted.org/packages/81/f2/08ace4142eb281c12701fc3b93a10795e4d4dc7f753911d836675050f886/msgpack-1.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d99ef64f349d5ec3293688e91486c5fdb925ed03807f64d98d205d2713c60b46", size = 70868, upload-time = "2025-10-08T09:15:44.959Z" }, +] + [[package]] name = "msrest" version = "0.7.1" @@ -1154,6 +1281,7 @@ source = { editable = "." } dependencies = [ { name = "langchain-anthropic" }, { name = "langchain-experimental" }, + { name = "langchain-tavily" }, { name = "langgraph" }, { name = "tavily-python" }, { name = "uipath-langchain" }, @@ -1167,13 +1295,14 @@ dev = [ [package.metadata] requires-dist = [ - { name = "langchain-anthropic", specifier = ">=0.3.8" }, + { name = "langchain-anthropic", specifier = ">=0.3.22" }, { name = "langchain-experimental", specifier = ">=0.3.4" }, - { name = "langgraph", specifier = ">=0.2.55" }, + { name = "langchain-tavily", specifier = ">=0.2.12" }, + { name = "langgraph", specifier = ">=0.6.11" }, { name = "mypy", marker = "extra == 'dev'", specifier = ">=1.11.1" }, { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.6.1" }, - { name = "tavily-python", specifier = ">=0.5.0" }, - { name = "uipath-langchain", specifier = "==0.0.124" }, + { name = "tavily-python", specifier = ">=0.7.12" }, + { name = "uipath-langchain", specifier = "==0.0.141" }, ] provides-extras = ["dev"] @@ -1492,6 +1621,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, ] +[[package]] +name = "omegaconf" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "antlr4-python3-runtime" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/48/6388f1bb9da707110532cb70ec4d2822858ddfb44f1cdf1233c20a80ea4b/omegaconf-2.3.0.tar.gz", hash = "sha256:d5d4b6d29955cc50ad50c46dc269bcd92c6e00f5f90d23ab5fee7bfca4ba4cc7", size = 3298120, upload-time = "2022-12-08T20:59:22.753Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl", hash = "sha256:7b4df175cdb08ba400f45cae3bdcae7ba8365db4d165fc65fd04b050ab63b46b", size = 79500, upload-time = "2022-12-08T20:59:19.686Z" }, +] + [[package]] name = "openai" version = "1.104.2" @@ -2151,6 +2293,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, ] +[[package]] +name = "pydantic-function-models" +version = "0.1.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/83/dc9cf4c16159266e643a16b14dd90c24e859670fbe2611140c0cd5503cae/pydantic_function_models-0.1.10.tar.gz", hash = "sha256:d88e37c19bc2b9d88850a6f00f0227212aae1b0d55de45c9de7af65373844027", size = 9150, upload-time = "2025-02-17T16:53:34.769Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/c6/c8412c88f4113b7cf3b33ae08f4abcd94fe0413d09ec49780f35f8f9e790/pydantic_function_models-0.1.10-py3-none-any.whl", hash = "sha256:9c1b0be9537a48f3ad9e3d9dd6c4e9ebcce98dd79a1bb329868b576cf50452c1", size = 8061, upload-time = "2025-02-17T16:53:28.904Z" }, +] + [[package]] name = "pydantic-settings" version = "2.10.1" @@ -2188,6 +2342,30 @@ crypto = [ { name = "cryptography" }, ] +[[package]] +name = "pyperclip" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/52/d87eba7cb129b81563019d1679026e7a112ef76855d6159d24754dbd2a51/pyperclip-1.11.0.tar.gz", hash = "sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6", size = 12185, upload-time = "2025-09-26T14:40:37.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063, upload-time = "2025-09-26T14:40:36.069Z" }, +] + +[[package]] +name = "pysignalr" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "msgpack" }, + { name = "orjson" }, + { name = "websockets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/a6/ac80bd4972604c6930050e8b0eba41d6fde41cb3286087be0188a8865f55/pysignalr-1.3.0.tar.gz", hash = "sha256:ca2e4372f213d82148fa2f060f0fefd096f1f66fca1107ac05e76ec6abd4cf52", size = 16790, upload-time = "2025-04-29T21:23:38.931Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/54/74e35563927ab8538e1bd1404b35027861434aecf2bcc945ff30c188e56d/pysignalr-1.3.0-py3-none-any.whl", hash = "sha256:423c91b0d1dc8387f37118ac2d1dc87ed6b9e01993a04612eab8452193f40344", size = 19966, upload-time = "2025-04-29T21:23:37.513Z" }, +] + [[package]] name = "python-dotenv" version = "1.1.1" @@ -2476,16 +2654,16 @@ wheels = [ [[package]] name = "tavily-python" -version = "0.7.11" +version = "0.7.12" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "httpx" }, { name = "requests" }, { name = "tiktoken" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bb/a4/2b816cbb287c6417e7997195a2b8ce32200ea2acc7099fba1ddf37d0d051/tavily_python-0.7.11.tar.gz", hash = "sha256:58c3ab71bb62820ade5498acc17bc372f436e88151389912672add6bf6d31aed", size = 19278, upload-time = "2025-08-18T23:56:57.899Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/42/ce2329635b844dda548110a5dfa0ab5631cdc1085e15c2d68b1850a2d112/tavily_python-0.7.12.tar.gz", hash = "sha256:661945bbc9284cdfbe70fb50de3951fd656bfd72e38e352481d333a36ae91f5a", size = 17282, upload-time = "2025-09-10T17:02:01.281Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/53/371a39e17f02e3df8ab3493c77453b0f8f0d2783bd23d6e0fc879d211217/tavily_python-0.7.11-py3-none-any.whl", hash = "sha256:50559d8b605b6854fd85b1b785c603851b86eb4d0e9fd29154f81b54b734dd6e", size = 15826, upload-time = "2025-08-18T23:56:52.203Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e2/dbc246d9fb24433f77b17d9ee4e750a1e2718432ebde2756589c9154cbad/tavily_python-0.7.12-py3-none-any.whl", hash = "sha256:00d09b9de3ca02ef9a994cf4e7ae43d4ec9d199f0566ba6e52cbfcbd07349bd1", size = 15473, upload-time = "2025-09-10T17:01:59.859Z" }, ] [[package]] @@ -2654,16 +2832,21 @@ wheels = [ [[package]] name = "uipath" -version = "2.1.31" +version = "2.1.97" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "azure-monitor-opentelemetry" }, { name = "click" }, { name = "httpx" }, + { name = "hydra-core" }, + { name = "mockito" }, { name = "opentelemetry-instrumentation" }, { name = "opentelemetry-sdk" }, { name = "pathlib" }, { name = "pydantic" }, + { name = "pydantic-function-models" }, + { name = "pyperclip" }, + { name = "pysignalr" }, { name = "python-dotenv" }, { name = "rich" }, { name = "tenacity" }, @@ -2671,17 +2854,18 @@ dependencies = [ { name = "tomli" }, { name = "truststore" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/77/19a3f63200e908ecc5eeb05b239a51ceb864a95b8dc82727419336aba6b5/uipath-2.1.31.tar.gz", hash = "sha256:41c64bee1601452bd7dea112a2ceb9d933e249ba9a4f42be2b09cae32b7a0dd1", size = 1975661, upload-time = "2025-09-02T17:56:04.306Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/fd/c1b4bcba0ad51f3afb571ca00dfed708ddaf80602b1f3deb8313c96b850d/uipath-2.1.97.tar.gz", hash = "sha256:c2d46462b6adc537731083e9e7d384971549f90ea3cb99a27468cb6892840461", size = 2218985, upload-time = "2025-10-21T12:59:01.294Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/10/2c3069a686be324f3d680a94a81c9edb4a7b5806abb5590885c1f4bb1135/uipath-2.1.31-py3-none-any.whl", hash = "sha256:dae6b6cd493dace8b0e897957d1514014e006ec973a1a0b592866868afbb2aab", size = 198727, upload-time = "2025-09-02T17:56:01.985Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ae/4a6ab5c413a1bbae7b122e04fcba57ab8a6ea1b407a4fcd92f176623f0c8/uipath-2.1.97-py3-none-any.whl", hash = "sha256:665511135d951389eb611116ba630e709c68df99e03caa9041211434af1be712", size = 287252, upload-time = "2025-10-21T12:58:59.459Z" }, ] [[package]] name = "uipath-langchain" -version = "0.0.124" +version = "0.0.141" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "httpx" }, + { name = "jsonschema-pydantic" }, { name = "langchain" }, { name = "langchain-community" }, { name = "langchain-core" }, @@ -2694,9 +2878,9 @@ dependencies = [ { name = "python-dotenv" }, { name = "uipath" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3e/95/1fb67318aee62d518a12fda62645da51e15155b61a7b27e3e1847706826e/uipath_langchain-0.0.124.tar.gz", hash = "sha256:27ada0a7599d56db53bb4ff8cfb77e2f6bdd1381f5af0cbefcfe95c2ffe6b036", size = 5748139, upload-time = "2025-09-02T15:22:02.604Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a4/6c/b1559efa8f80a5f791f1299099016e4910e04831e7854d4ef0c9a23fc7fb/uipath_langchain-0.0.141.tar.gz", hash = "sha256:85f4fbdccf91abff7dbb179bd336195a508fff665fb85279081eba7d6ee809c1", size = 6519656, upload-time = "2025-10-21T12:37:13.511Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/e6/50531134cc6a87101c6baf89af0726a206540fae40f9972338af5dd397dd/uipath_langchain-0.0.124-py3-none-any.whl", hash = "sha256:aa08b8c1ac7aa7ed0d249526177d3e61765bb4bdc33f16a1549778ad181a8025", size = 44360, upload-time = "2025-09-02T15:22:01.139Z" }, + { url = "https://files.pythonhosted.org/packages/82/9d/395d232c58d2bc72205dd4f0f74c0e669cab7256cb3716084e88d9f90c96/uipath_langchain-0.0.141-py3-none-any.whl", hash = "sha256:ad8b7c6575583137189a756018a667dedbe0ac12c361b246052c9978b53308af", size = 51009, upload-time = "2025-10-21T12:37:11.758Z" }, ] [[package]] @@ -2708,6 +2892,65 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, ] +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/da/6462a9f510c0c49837bbc9345aca92d767a56c1fb2939e1579df1e1cdcf7/websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b", size = 175423, upload-time = "2025-03-05T20:01:35.363Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9f/9d11c1a4eb046a9e106483b9ff69bce7ac880443f00e5ce64261b47b07e7/websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205", size = 173080, upload-time = "2025-03-05T20:01:37.304Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4f/b462242432d93ea45f297b6179c7333dd0402b855a912a04e7fc61c0d71f/websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a", size = 173329, upload-time = "2025-03-05T20:01:39.668Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0c/6afa1f4644d7ed50284ac59cc70ef8abd44ccf7d45850d989ea7310538d0/websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e", size = 182312, upload-time = "2025-03-05T20:01:41.815Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d4/ffc8bd1350b229ca7a4db2a3e1c482cf87cea1baccd0ef3e72bc720caeec/websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf", size = 181319, upload-time = "2025-03-05T20:01:43.967Z" }, + { url = "https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb", size = 181631, upload-time = "2025-03-05T20:01:46.104Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cc/1aeb0f7cee59ef065724041bb7ed667b6ab1eeffe5141696cccec2687b66/websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d", size = 182016, upload-time = "2025-03-05T20:01:47.603Z" }, + { url = "https://files.pythonhosted.org/packages/79/f9/c86f8f7af208e4161a7f7e02774e9d0a81c632ae76db2ff22549e1718a51/websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9", size = 181426, upload-time = "2025-03-05T20:01:48.949Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b9/828b0bc6753db905b91df6ae477c0b14a141090df64fb17f8a9d7e3516cf/websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c", size = 181360, upload-time = "2025-03-05T20:01:50.938Z" }, + { url = "https://files.pythonhosted.org/packages/89/fb/250f5533ec468ba6327055b7d98b9df056fb1ce623b8b6aaafb30b55d02e/websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256", size = 176388, upload-time = "2025-03-05T20:01:52.213Z" }, + { url = "https://files.pythonhosted.org/packages/1c/46/aca7082012768bb98e5608f01658ff3ac8437e563eca41cf068bd5849a5e/websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41", size = 176830, upload-time = "2025-03-05T20:01:53.922Z" }, + { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, + { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, + { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, + { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, + { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, + { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/d40f779fa16f74d3468357197af8d6ad07e7c5a27ea1ca74ceb38986f77a/websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", size = 173109, upload-time = "2025-03-05T20:03:17.769Z" }, + { url = "https://files.pythonhosted.org/packages/bc/cd/5b887b8585a593073fd92f7c23ecd3985cd2c3175025a91b0d69b0551372/websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", size = 173343, upload-time = "2025-03-05T20:03:19.094Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" }, + { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" }, + { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" }, + { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, +] + [[package]] name = "wrapt" version = "1.17.3"