diff --git a/docs/cassettes/create-react-agent-manage-message-history_26c53429-90ba-4d0b-abb9-423d9120ad26.msgpack.zlib b/docs/cassettes/create-react-agent-manage-message-history_26c53429-90ba-4d0b-abb9-423d9120ad26.msgpack.zlib
new file mode 100644
index 000000000..3d5308cb6
--- /dev/null
+++ b/docs/cassettes/create-react-agent-manage-message-history_26c53429-90ba-4d0b-abb9-423d9120ad26.msgpack.zlib
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/docs/cassettes/create-react-agent-manage-message-history_831be36a-78a1-4885-9a03-8d085dfd7e37.msgpack.zlib b/docs/cassettes/create-react-agent-manage-message-history_831be36a-78a1-4885-9a03-8d085dfd7e37.msgpack.zlib
new file mode 100644
index 000000000..3e5c73787
--- /dev/null
+++ b/docs/cassettes/create-react-agent-manage-message-history_831be36a-78a1-4885-9a03-8d085dfd7e37.msgpack.zlib
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/docs/cassettes/create-react-agent-manage-message-history_8eccaaca-5d9c-4faf-b997-d4b8e84b59ac.msgpack.zlib b/docs/cassettes/create-react-agent-manage-message-history_8eccaaca-5d9c-4faf-b997-d4b8e84b59ac.msgpack.zlib
new file mode 100644
index 000000000..5e6a6273c
--- /dev/null
+++ b/docs/cassettes/create-react-agent-manage-message-history_8eccaaca-5d9c-4faf-b997-d4b8e84b59ac.msgpack.zlib
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/docs/cassettes/create-react-agent-manage-message-history_9ffff6c3-a4f5-47c9-b51d-97caaee85cd6.msgpack.zlib b/docs/cassettes/create-react-agent-manage-message-history_9ffff6c3-a4f5-47c9-b51d-97caaee85cd6.msgpack.zlib
new file mode 100644
index 000000000..e02242682
--- /dev/null
+++ b/docs/cassettes/create-react-agent-manage-message-history_9ffff6c3-a4f5-47c9-b51d-97caaee85cd6.msgpack.zlib
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/docs/docs/how-tos/create-react-agent-manage-message-history.ipynb b/docs/docs/how-tos/create-react-agent-manage-message-history.ipynb
new file mode 100644
index 000000000..a8e8be3e4
--- /dev/null
+++ b/docs/docs/how-tos/create-react-agent-manage-message-history.ipynb
@@ -0,0 +1,828 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "992c4695-ec4f-428d-bd05-fb3b5fbd70f4",
+ "metadata": {},
+ "source": [
+ "# How to manage conversation history in a ReAct Agent\n",
+ "\n",
+ "!!! info \"Prerequisites\"\n",
+ " This guide assumes familiarity with the following:\n",
+ "\n",
+ " - [Prebuilt create_react_agent](../create-react-agent)\n",
+ " - [Persistence](../../concepts/persistence)\n",
+ " - [Short-term Memory](../../concepts/memory/#short-term-memory)\n",
+ " - [Trimming Messages](https://python.langchain.com/docs/how_to/trim_messages/)\n",
+ "\n",
+ "Message history can grow quickly and exceed LLM context window size, whether you're building chatbots with many conversation turns or agentic systems with numerous tool calls. There are several strategies for managing the message history:\n",
+ "\n",
+ "* [message trimming](#keep-the-original-message-history-unmodified) - remove first or last N messages in the history\n",
+ "* [summarization](#summarizing-message-history) - summarize earlier messages in the history and replace them with a summary\n",
+ "* custom strategies (e.g., message filtering, etc.)\n",
+ "\n",
+ "To manage message history in `create_react_agent`, you need to define a `pre_model_hook` function or [runnable](https://python.langchain.com/docs/concepts/runnables/) that takes graph state an returns a state update:\n",
+ "\n",
+ "\n",
+ "* Trimming example:\n",
+ " ```python\n",
+ " # highlight-next-line\n",
+ " from langchain_core.messages.utils import (\n",
+ " # highlight-next-line\n",
+ " trim_messages, \n",
+ " # highlight-next-line\n",
+ " count_tokens_approximately\n",
+ " # highlight-next-line\n",
+ " )\n",
+ " from langgraph.prebuilt import create_react_agent\n",
+ " \n",
+ " # This function will be called every time before the node that calls LLM\n",
+ " def pre_model_hook(state):\n",
+ " trimmed_messages = trim_messages(\n",
+ " state[\"messages\"],\n",
+ " strategy=\"last\",\n",
+ " token_counter=count_tokens_approximately,\n",
+ " max_tokens=384,\n",
+ " start_on=\"human\",\n",
+ " end_on=(\"human\", \"tool\"),\n",
+ " )\n",
+ " # You can return updated messages either under `llm_input_messages` or \n",
+ " # `messages` key (see the note below)\n",
+ " # highlight-next-line\n",
+ " return {\"llm_input_messages\": trimmed_messages}\n",
+ "\n",
+ " checkpointer = InMemorySaver()\n",
+ " agent = create_react_agent(\n",
+ " model,\n",
+ " tools,\n",
+ " # highlight-next-line\n",
+ " pre_model_hook=pre_model_hook,\n",
+ " checkpointer=checkpointer,\n",
+ " )\n",
+ " ```\n",
+ "\n",
+ "* Summarization example:\n",
+ " ```python\n",
+ " # highlight-next-line\n",
+ " from langmem.short_term import SummarizationNode\n",
+ " from langchain_core.messages.utils import count_tokens_approximately\n",
+ " from langgraph.prebuilt.chat_agent_executor import AgentState\n",
+ " from langgraph.checkpoint.memory import InMemorySaver\n",
+ " from typing import Any\n",
+ " \n",
+ " model = ChatOpenAI(model=\"gpt-4o\")\n",
+ " \n",
+ " summarization_node = SummarizationNode(\n",
+ " token_counter=count_tokens_approximately,\n",
+ " model=model,\n",
+ " max_tokens=384,\n",
+ " max_summary_tokens=128,\n",
+ " output_messages_key=\"llm_input_messages\",\n",
+ " )\n",
+ "\n",
+ " class State(AgentState):\n",
+ " # NOTE: we're adding this key to keep track of previous summary information\n",
+ " # to make sure we're not summarizing on every LLM call\n",
+ " # highlight-next-line\n",
+ " context: dict[str, Any]\n",
+ " \n",
+ " \n",
+ " checkpointer = InMemorySaver()\n",
+ " graph = create_react_agent(\n",
+ " model,\n",
+ " tools,\n",
+ " # highlight-next-line\n",
+ " pre_model_hook=summarization_node,\n",
+ " # highlight-next-line\n",
+ " state_schema=State,\n",
+ " checkpointer=checkpointer,\n",
+ " )\n",
+ " ```\n",
+ "\n",
+ "!!! Important\n",
+ " \n",
+ " * To **keep the original message history unmodified** in the graph state and pass the updated history **only as the input to the LLM**, return updated messages under `llm_input_messages` key\n",
+ " * To **overwrite the original message history** in the graph state with the updated history, return updated messages under `messages` key\n",
+ " \n",
+ " To overwrite the `messages` key, you need to do the following:\n",
+ "\n",
+ " ```python\n",
+ " from langchain_core.messages import RemoveMessage\n",
+ " from langgraph.graph.message import REMOVE_ALL_MESSAGES\n",
+ "\n",
+ " def pre_model_hook(state):\n",
+ " updated_messages = ...\n",
+ " return {\n",
+ " \"messages\": [RemoveMessage(id=REMOVE_ALL_MESSAGES), *updated_messages]\n",
+ " ...\n",
+ " }\n",
+ " ```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7be3889f-3c17-4fa1-bd2b-84114a2c7247",
+ "metadata": {},
+ "source": [
+ "## Setup\n",
+ "\n",
+ "First, let's install the required packages and set our API keys"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "a213e11a-5c62-4ddb-a707-490d91add383",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%capture --no-stderr\n",
+ "%pip install -U langgraph langchain-openai langmem"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "23a1885c-04ab-4750-aefa-105891fddf3e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import getpass\n",
+ "import os\n",
+ "\n",
+ "\n",
+ "def _set_env(var: str):\n",
+ " if not os.environ.get(var):\n",
+ " os.environ[var] = getpass.getpass(f\"{var}: \")\n",
+ "\n",
+ "\n",
+ "_set_env(\"OPENAI_API_KEY\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "87a00ce9",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "
Set up LangSmith for LangGraph development
\n",
+ "
\n",
+ " Sign up for LangSmith to quickly spot issues and improve the performance of your LangGraph projects. LangSmith lets you use trace data to debug, test, and monitor your LLM apps built with LangGraph — read more about how to get started here. \n",
+ "
\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "03c0f089-070c-4cd4-87e0-6c51f2477b82",
+ "metadata": {},
+ "source": [
+ "## Keep the original message history unmodified"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cd6cbd3a-8632-47ae-9ec5-eec8d7b05cae",
+ "metadata": {},
+ "source": [
+ "Let's build a ReAct agent with a step that manages the conversation history: when the length of the history exceeds a specified number of tokens, we will call [`trim_messages`](https://python.langchain.com/api_reference/core/messages/langchain_core.messages.utils.trim_messages.html) utility that that will reduce the history while satisfying LLM provider constraints.\n",
+ "\n",
+ "There are two ways that the updated message history can be applied inside ReAct agent:\n",
+ "\n",
+ " * [**Keep the original message history unmodified**](#keep-the-original-message-history-unmodified) in the graph state and pass the updated history **only as the input to the LLM**\n",
+ " * [**Overwrite the original message history**](#overwrite-the-original-message-history) in the graph state with the updated history\n",
+ "\n",
+ "Let's start by implementing the first one. We'll need to first define model and tools for our agent:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "eaad19ee-e174-4c6c-b2b8-3530d7acea40",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from langchain_openai import ChatOpenAI\n",
+ "\n",
+ "model = ChatOpenAI(model=\"gpt-4o\", temperature=0)\n",
+ "\n",
+ "\n",
+ "def get_weather(location: str) -> str:\n",
+ " \"\"\"Use this to get weather information.\"\"\"\n",
+ " if any([city in location.lower() for city in [\"nyc\", \"new york city\"]]):\n",
+ " return \"It might be cloudy in nyc, with a chance of rain and temperatures up to 80 degrees.\"\n",
+ " elif any([city in location.lower() for city in [\"sf\", \"san francisco\"]]):\n",
+ " return \"It's always sunny in sf\"\n",
+ " else:\n",
+ " return f\"I am not sure what the weather is in {location}\"\n",
+ "\n",
+ "\n",
+ "tools = [get_weather]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "52402333-61ab-47d3-8549-6a70f6f1cf36",
+ "metadata": {},
+ "source": [
+ "Now let's implement `pre_model_hook` — a function that will be added as a new node and called every time **before** the node that calls the LLM (the `agent` node).\n",
+ "\n",
+ "Our implementation will wrap the `trim_messages` call and return the trimmed messages under `llm_input_messages`. This will **keep the original message history unmodified** in the graph state and pass the updated history **only as the input to the LLM**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "b507eb58-6e02-4ac6-b48b-ea4defdc11f0",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from langgraph.prebuilt import create_react_agent\n",
+ "from langgraph.checkpoint.memory import InMemorySaver\n",
+ "\n",
+ "# highlight-next-line\n",
+ "from langchain_core.messages.utils import (\n",
+ " # highlight-next-line\n",
+ " trim_messages,\n",
+ " # highlight-next-line\n",
+ " count_tokens_approximately,\n",
+ " # highlight-next-line\n",
+ ")\n",
+ "\n",
+ "\n",
+ "# This function will be added as a new node in ReAct agent graph\n",
+ "# that will run every time before the node that calls the LLM.\n",
+ "# The messages returned by this function will be the input to the LLM.\n",
+ "def pre_model_hook(state):\n",
+ " trimmed_messages = trim_messages(\n",
+ " state[\"messages\"],\n",
+ " strategy=\"last\",\n",
+ " token_counter=count_tokens_approximately,\n",
+ " max_tokens=384,\n",
+ " start_on=\"human\",\n",
+ " end_on=(\"human\", \"tool\"),\n",
+ " )\n",
+ " # highlight-next-line\n",
+ " return {\"llm_input_messages\": trimmed_messages}\n",
+ "\n",
+ "\n",
+ "checkpointer = InMemorySaver()\n",
+ "graph = create_react_agent(\n",
+ " model,\n",
+ " tools,\n",
+ " # highlight-next-line\n",
+ " pre_model_hook=pre_model_hook,\n",
+ " checkpointer=checkpointer,\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "8182ab45-86b3-4d6f-b75e-58862a14fa4e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from IPython.display import display, Image\n",
+ "\n",
+ "display(Image(graph.get_graph().draw_mermaid_png()))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d41e8e76-5d43-44cd-bf01-a39212cedd8d",
+ "metadata": {},
+ "source": [
+ "We'll also define a utility to render the agent outputs nicely:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "16636975-5f2d-4dc7-ab8e-d0bea0830a28",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def print_stream(stream, output_messages_key=\"llm_input_messages\"):\n",
+ " for chunk in stream:\n",
+ " for node, update in chunk.items():\n",
+ " print(f\"Update from node: {node}\")\n",
+ " messages_key = (\n",
+ " output_messages_key if node == \"pre_model_hook\" else \"messages\"\n",
+ " )\n",
+ " for message in update[messages_key]:\n",
+ " if isinstance(message, tuple):\n",
+ " print(message)\n",
+ " else:\n",
+ " message.pretty_print()\n",
+ "\n",
+ " print(\"\\n\\n\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "84448d29-b323-4833-80fc-4fff2f5a0950",
+ "metadata": {},
+ "source": [
+ "Now let's run the agent with a few different queries to reach the specified max tokens limit:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "9ffff6c3-a4f5-47c9-b51d-97caaee85cd6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "config = {\"configurable\": {\"thread_id\": \"1\"}}\n",
+ "\n",
+ "inputs = {\"messages\": [(\"user\", \"What's the weather in NYC?\")]}\n",
+ "result = graph.invoke(inputs, config=config)\n",
+ "\n",
+ "inputs = {\"messages\": [(\"user\", \"What's it known for?\")]}\n",
+ "result = graph.invoke(inputs, config=config)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fdb186da-b55d-4cb8-a237-e9e157ab0458",
+ "metadata": {},
+ "source": [
+ "Let's see how many tokens we have in the message history so far:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "41ba0253-5199-4d29-82ae-258cbbebddb4",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "415"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "messages = result[\"messages\"]\n",
+ "count_tokens_approximately(messages)"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "id": "812987ac-66ba-4122-8281-469cbdced7c7",
+ "metadata": {},
+ "source": [
+ "You can see that we are close to the `max_tokens` threshold, so on the next invocation we should see `pre_model_hook` kick-in and trim the message history. Let's run it again:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "26c53429-90ba-4d0b-abb9-423d9120ad26",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Update from node: pre_model_hook\n",
+ "================================\u001b[1m Human Message \u001b[0m=================================\n",
+ "\n",
+ "What's it known for?\n",
+ "==================================\u001b[1m Ai Message \u001b[0m==================================\n",
+ "\n",
+ "New York City is known for a variety of iconic landmarks, cultural institutions, and vibrant neighborhoods. Some of the most notable features include:\n",
+ "\n",
+ "1. **Statue of Liberty**: A symbol of freedom and democracy, located on Liberty Island.\n",
+ "2. **Times Square**: Known for its bright lights, Broadway theaters, and bustling atmosphere.\n",
+ "3. **Central Park**: A large public park offering a natural retreat in the middle of the city.\n",
+ "4. **Empire State Building**: An iconic skyscraper offering panoramic views of the city.\n",
+ "5. **Broadway**: Famous for its world-class theater productions.\n",
+ "6. **Wall Street**: The financial hub of the United States.\n",
+ "7. **Museums**: Including the Metropolitan Museum of Art, Museum of Modern Art (MoMA), and the American Museum of Natural History.\n",
+ "8. **Diverse Cuisine**: A melting pot of cultures offering a wide range of culinary experiences.\n",
+ "9. **Cultural Diversity**: A rich tapestry of cultures and communities from around the world.\n",
+ "10. **Fashion**: A global fashion capital, hosting events like New York Fashion Week.\n",
+ "\n",
+ "These are just a few highlights of what makes New York City a unique and vibrant place.\n",
+ "================================\u001b[1m Human Message \u001b[0m=================================\n",
+ "\n",
+ "where can i find the best bagel?\n",
+ "\n",
+ "\n",
+ "\n",
+ "Update from node: agent\n",
+ "==================================\u001b[1m Ai Message \u001b[0m==================================\n",
+ "\n",
+ "New York City is famous for its bagels, and there are several places renowned for serving some of the best. Here are a few top spots where you can find excellent bagels in NYC:\n",
+ "\n",
+ "1. **Ess-a-Bagel**: Known for their large, chewy bagels with a variety of spreads and toppings.\n",
+ "2. **Russ & Daughters**: A classic spot offering traditional bagels with high-quality smoked fish and cream cheese.\n",
+ "3. **H&H Bagels**: Famous for their fresh, hand-rolled bagels.\n",
+ "4. **Murray’s Bagels**: Offers a wide selection of bagels and spreads, with a no-toasting policy to preserve freshness.\n",
+ "5. **Absolute Bagels**: Known for their authentic, fluffy bagels and a variety of cream cheese options.\n",
+ "6. **Tompkins Square Bagels**: Offers creative bagel sandwiches and a wide range of spreads.\n",
+ "7. **Bagel Hole**: Known for their smaller, denser bagels with a crispy crust.\n",
+ "\n",
+ "Each of these places has its own unique style and flavor, so it might be worth trying a few to find your personal favorite!\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "inputs = {\"messages\": [(\"user\", \"where can i find the best bagel?\")]}\n",
+ "print_stream(graph.stream(inputs, config=config, stream_mode=\"updates\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "58fe0399-4e7d-4482-a4cb-5301311932d0",
+ "metadata": {},
+ "source": [
+ "You can see that the `pre_model_hook` node now only returned the last 3 messages, as expected. However, the existing message history is untouched:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "7ecfc310-8f9e-4aa0-9e58-17e71551639a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "updated_messages = graph.get_state(config).values[\"messages\"]\n",
+ "assert [(m.type, m.content) for m in updated_messages[: len(messages)]] == [\n",
+ " (m.type, m.content) for m in messages\n",
+ "]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "035864e3-0083-4dea-bf85-3a702fa5303f",
+ "metadata": {},
+ "source": [
+ "## Overwrite the original message history"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0b0a4fd5-a2ba-4eca-91a9-d294f4f2d884",
+ "metadata": {},
+ "source": [
+ "Let's now change the `pre_model_hook` to **overwrite** the message history in the graph state. To do this, we’ll return the updated messages under `messages` key. We’ll also include a special `RemoveMessage(REMOVE_ALL_MESSAGES)` object, which tells `create_react_agent` to remove previous messages from the graph state:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "48c2a65b-685a-4750-baa6-2d61efe76b5f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from langchain_core.messages import RemoveMessage\n",
+ "from langgraph.graph.message import REMOVE_ALL_MESSAGES\n",
+ "\n",
+ "\n",
+ "def pre_model_hook(state):\n",
+ " trimmed_messages = trim_messages(\n",
+ " state[\"messages\"],\n",
+ " strategy=\"last\",\n",
+ " token_counter=count_tokens_approximately,\n",
+ " max_tokens=384,\n",
+ " start_on=\"human\",\n",
+ " end_on=(\"human\", \"tool\"),\n",
+ " )\n",
+ " # NOTE that we're now returning the messages under the `messages` key\n",
+ " # We also remove the existing messages in the history to ensure we're overwriting the history\n",
+ " # highlight-next-line\n",
+ " return {\"messages\": [RemoveMessage(REMOVE_ALL_MESSAGES)] + trimmed_messages}\n",
+ "\n",
+ "\n",
+ "checkpointer = InMemorySaver()\n",
+ "graph = create_react_agent(\n",
+ " model,\n",
+ " tools,\n",
+ " # highlight-next-line\n",
+ " pre_model_hook=pre_model_hook,\n",
+ " checkpointer=checkpointer,\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cd061682-231c-4487-9c2f-a6820dfbcab7",
+ "metadata": {},
+ "source": [
+ "Now let's run the agent with the same queries as before:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "831be36a-78a1-4885-9a03-8d085dfd7e37",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Update from node: pre_model_hook\n",
+ "================================\u001b[1m Remove Message \u001b[0m================================\n",
+ "\n",
+ "\n",
+ "================================\u001b[1m Human Message \u001b[0m=================================\n",
+ "\n",
+ "What's it known for?\n",
+ "==================================\u001b[1m Ai Message \u001b[0m==================================\n",
+ "\n",
+ "New York City is known for a variety of iconic landmarks, cultural institutions, and vibrant neighborhoods. Some of the most notable features include:\n",
+ "\n",
+ "1. **Statue of Liberty**: A symbol of freedom and democracy, located on Liberty Island.\n",
+ "2. **Times Square**: Known for its bright lights, Broadway theaters, and bustling atmosphere.\n",
+ "3. **Central Park**: A large public park offering a natural oasis amidst the urban environment.\n",
+ "4. **Empire State Building**: An iconic skyscraper offering panoramic views of the city.\n",
+ "5. **Broadway**: Famous for its world-class theater productions and musicals.\n",
+ "6. **Wall Street**: The financial hub of the United States, located in the Financial District.\n",
+ "7. **Museums**: Including the Metropolitan Museum of Art, Museum of Modern Art (MoMA), and the American Museum of Natural History.\n",
+ "8. **Diverse Cuisine**: A melting pot of cultures, offering a wide range of international foods.\n",
+ "9. **Cultural Diversity**: Known for its diverse population and vibrant cultural scene.\n",
+ "10. **Brooklyn Bridge**: An iconic suspension bridge connecting Manhattan and Brooklyn.\n",
+ "\n",
+ "These are just a few highlights, as NYC is a city with endless attractions and activities.\n",
+ "================================\u001b[1m Human Message \u001b[0m=================================\n",
+ "\n",
+ "where can i find the best bagel?\n",
+ "\n",
+ "\n",
+ "\n",
+ "Update from node: agent\n",
+ "==================================\u001b[1m Ai Message \u001b[0m==================================\n",
+ "\n",
+ "New York City is famous for its bagels, and there are several places renowned for serving some of the best. Here are a few top spots where you can find delicious bagels in NYC:\n",
+ "\n",
+ "1. **Ess-a-Bagel**: Known for its large, chewy bagels and a wide variety of spreads and toppings. Locations in Midtown and the East Village.\n",
+ "\n",
+ "2. **Russ & Daughters**: A historic appetizing store on the Lower East Side, famous for its bagels with lox and cream cheese.\n",
+ "\n",
+ "3. **Absolute Bagels**: Located on the Upper West Side, this spot is popular for its fresh, fluffy bagels.\n",
+ "\n",
+ "4. **Murray’s Bagels**: Known for its traditional, hand-rolled bagels. Located in Greenwich Village.\n",
+ "\n",
+ "5. **Tompkins Square Bagels**: Offers a wide selection of bagels and creative cream cheese flavors. Located in the East Village.\n",
+ "\n",
+ "6. **Bagel Hole**: A small shop in Park Slope, Brooklyn, known for its classic, no-frills bagels.\n",
+ "\n",
+ "7. **Leo’s Bagels**: Located in the Financial District, known for its authentic New York-style bagels.\n",
+ "\n",
+ "Each of these places has its own unique style and flavor, so it might be worth trying a few to find your personal favorite!\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "config = {\"configurable\": {\"thread_id\": \"1\"}}\n",
+ "\n",
+ "inputs = {\"messages\": [(\"user\", \"What's the weather in NYC?\")]}\n",
+ "result = graph.invoke(inputs, config=config)\n",
+ "\n",
+ "inputs = {\"messages\": [(\"user\", \"What's it known for?\")]}\n",
+ "result = graph.invoke(inputs, config=config)\n",
+ "messages = result[\"messages\"]\n",
+ "\n",
+ "inputs = {\"messages\": [(\"user\", \"where can i find the best bagel?\")]}\n",
+ "print_stream(\n",
+ " graph.stream(inputs, config=config, stream_mode=\"updates\"),\n",
+ " output_messages_key=\"messages\",\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cc9a0604-3d2b-48ff-9eaf-d16ea351fb30",
+ "metadata": {},
+ "source": [
+ "You can see that the `pre_model_hook` node returned the last 3 messages again. However, this time, the message history is modified in the graph state as well:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "394f72f8-f817-472d-a193-e01509a86132",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "updated_messages = graph.get_state(config).values[\"messages\"]\n",
+ "assert (\n",
+ " # First 2 messages in the new history are the same as last 2 messages in the old\n",
+ " [(m.type, m.content) for m in updated_messages[:2]]\n",
+ " == [(m.type, m.content) for m in messages[-2:]]\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ee186d6d-4d07-404f-b236-f662db62339d",
+ "metadata": {},
+ "source": [
+ "## Summarizing message history"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a6e53e0f-9a1e-4188-8435-c23ad8148b4f",
+ "metadata": {},
+ "source": [
+ "Finally, let's apply a different strategy for managing message history — summarization. Just as with trimming, you can choose to keep original message history unmodified or overwrite it. The example below will only show the former.\n",
+ "\n",
+ "We will use the [`SummarizationNode`](https://langchain-ai.github.io/langmem/guides/summarization/#using-summarizationnode) from the prebuilt `langmem` library. Once the message history reaches the token limit, the summarization node will summarize earlier messages to make sure they fit into `max_tokens`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "b9540c1c-2eba-42da-ba4e-478521161a1f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# highlight-next-line\n",
+ "from langmem.short_term import SummarizationNode\n",
+ "from langgraph.prebuilt.chat_agent_executor import AgentState\n",
+ "from typing import Any\n",
+ "\n",
+ "model = ChatOpenAI(model=\"gpt-4o\")\n",
+ "summarization_model = model.bind(max_tokens=128)\n",
+ "\n",
+ "summarization_node = SummarizationNode(\n",
+ " token_counter=count_tokens_approximately,\n",
+ " model=summarization_model,\n",
+ " max_tokens=384,\n",
+ " max_summary_tokens=128,\n",
+ " output_messages_key=\"llm_input_messages\",\n",
+ ")\n",
+ "\n",
+ "\n",
+ "class State(AgentState):\n",
+ " # NOTE: we're adding this key to keep track of previous summary information\n",
+ " # to make sure we're not summarizing on every LLM call\n",
+ " # highlight-next-line\n",
+ " context: dict[str, Any]\n",
+ "\n",
+ "\n",
+ "checkpointer = InMemorySaver()\n",
+ "graph = create_react_agent(\n",
+ " model,\n",
+ " tools,\n",
+ " # highlight-next-line\n",
+ " pre_model_hook=summarization_node,\n",
+ " # highlight-next-line\n",
+ " state_schema=State,\n",
+ " checkpointer=checkpointer,\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "8eccaaca-5d9c-4faf-b997-d4b8e84b59ac",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Update from node: pre_model_hook\n",
+ "================================\u001b[1m System Message \u001b[0m================================\n",
+ "\n",
+ "Summary of the conversation so far: The user asked about the current weather in New York City. In response, the assistant provided information that it might be cloudy, with a chance of rain, and temperatures reaching up to 80 degrees.\n",
+ "================================\u001b[1m Human Message \u001b[0m=================================\n",
+ "\n",
+ "What's it known for?\n",
+ "==================================\u001b[1m Ai Message \u001b[0m==================================\n",
+ "\n",
+ "New York City, often referred to as NYC, is known for its:\n",
+ "\n",
+ "1. **Landmarks and Iconic Sites**:\n",
+ " - **Statue of Liberty**: A symbol of freedom and democracy.\n",
+ " - **Central Park**: A vast green oasis in the middle of the city.\n",
+ " - **Empire State Building**: Once the tallest building in the world, offering stunning views of the city.\n",
+ " - **Times Square**: Known for its bright lights and bustling atmosphere.\n",
+ "\n",
+ "2. **Cultural Institutions**:\n",
+ " - **Broadway**: Renowned for theatrical performances and musicals.\n",
+ " - **Metropolitan Museum of Art** and **Museum of Modern Art (MoMA)**: World-class art collections.\n",
+ " - **American Museum of Natural History**: Known for its extensive exhibits ranging from dinosaurs to space exploration.\n",
+ " \n",
+ "3. **Diverse Neighborhoods and Cuisine**:\n",
+ " - NYC is famous for having a melting pot of cultures, reflected in neighborhoods like Chinatown, Little Italy, and Harlem.\n",
+ " - The city offers a wide range of international cuisines, from street food to high-end dining.\n",
+ "\n",
+ "4. **Financial District**:\n",
+ " - Home to Wall Street, the New York Stock Exchange (NYSE), and other major financial institutions.\n",
+ "\n",
+ "5. **Media and Entertainment**:\n",
+ " - Major hub for television, film, and media, with numerous studios and networks based there.\n",
+ "\n",
+ "6. **Fashion**:\n",
+ " - Often referred to as one of the \"Big Four\" fashion capitals, hosting events like New York Fashion Week.\n",
+ "\n",
+ "7. **Sports**:\n",
+ " - Known for its passionate sports culture with teams like the Yankees (MLB), Mets (MLB), Knicks (NBA), and Rangers (NHL).\n",
+ "\n",
+ "These elements, among others, contribute to NYC's reputation as a vibrant and dynamic city.\n",
+ "================================\u001b[1m Human Message \u001b[0m=================================\n",
+ "\n",
+ "where can i find the best bagel?\n",
+ "\n",
+ "\n",
+ "\n",
+ "Update from node: agent\n",
+ "==================================\u001b[1m Ai Message \u001b[0m==================================\n",
+ "\n",
+ "Finding the best bagel in New York City can be subjective, as there are many beloved spots across the city. However, here are some renowned bagel shops you might want to try:\n",
+ "\n",
+ "1. **Ess-a-Bagel**: Known for its chewy and flavorful bagels, located in Midtown and Stuyvesant Town.\n",
+ "\n",
+ "2. **Bagel Hole**: A favorite for traditionalists, offering classic and dense bagels, located in Park Slope, Brooklyn.\n",
+ "\n",
+ "3. **Russ & Daughters**: A legendary appetizing store on the Lower East Side, famous for their bagels with lox.\n",
+ "\n",
+ "4. **Murray’s Bagels**: Located in Greenwich Village, known for their fresh and authentic New York bagels.\n",
+ "\n",
+ "5. **Absolute Bagels**: Located on the Upper West Side, they’re known for their fresh, fluffy bagels with a variety of spreads.\n",
+ "\n",
+ "6. **Tompkins Square Bagels**: In the East Village, famous for their creative cream cheese options and fresh bagels.\n",
+ "\n",
+ "7. **Zabar’s**: A landmark on the Upper West Side known for their classic bagels and smoked fish.\n",
+ "\n",
+ "Each of these spots offers a unique take on the classic New York bagel experience, and trying several might be the best way to discover your personal favorite!\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "config = {\"configurable\": {\"thread_id\": \"1\"}}\n",
+ "inputs = {\"messages\": [(\"user\", \"What's the weather in NYC?\")]}\n",
+ "\n",
+ "result = graph.invoke(inputs, config=config)\n",
+ "\n",
+ "inputs = {\"messages\": [(\"user\", \"What's it known for?\")]}\n",
+ "result = graph.invoke(inputs, config=config)\n",
+ "\n",
+ "inputs = {\"messages\": [(\"user\", \"where can i find the best bagel?\")]}\n",
+ "print_stream(graph.stream(inputs, config=config, stream_mode=\"updates\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7caaf2f7-281a-4421-bf98-c745d950c56f",
+ "metadata": {},
+ "source": [
+ "You can see that the earlier messages have now been replaced with the summary of the earlier conversation!"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/docs/how-tos/index.md b/docs/docs/how-tos/index.md
index 3eeb0d72d..baf8614ee 100644
--- a/docs/docs/how-tos/index.md
+++ b/docs/docs/how-tos/index.md
@@ -163,6 +163,7 @@ These guides show how to use the prebuilt ReAct agent:
- [How to add human-in-the-loop processes to a ReAct agent](create-react-agent-hitl.ipynb)
- [How to return structured output from a ReAct agent](create-react-agent-structured-output.ipynb)
- [How to add semantic search for long-term memory to a ReAct agent](memory/semantic-search.ipynb#using-in-create-react-agent)
+- [How to manage message history in a ReAct agent](create-react-agent-manage-message-history.ipynb)
Interested in further customizing the ReAct agent? This guide provides an
overview of its underlying implementation to help you customize for your own needs:
diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml
index e85a6133b..9782421b4 100644
--- a/docs/mkdocs.yml
+++ b/docs/mkdocs.yml
@@ -185,6 +185,7 @@ nav:
- how-tos/create-react-agent-system-prompt.ipynb
- how-tos/create-react-agent-hitl.ipynb
- how-tos/create-react-agent-structured-output.ipynb
+ - how-tos/create-react-agent-manage-message-history.ipynb
- how-tos/react-agent-from-scratch.ipynb
- how-tos/react-agent-from-scratch-functional.ipynb
- LangGraph Platform:
diff --git a/docs/poetry.lock b/docs/poetry.lock
index 3a28d8006..5fce3a064 100644
--- a/docs/poetry.lock
+++ b/docs/poetry.lock
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand.
[[package]]
name = "aiohappyeyeballs"
@@ -6,8 +6,6 @@ version = "2.4.3"
description = "Happy Eyeballs for asyncio"
optional = false
python-versions = ">=3.8"
-groups = ["main", "docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "aiohappyeyeballs-2.4.3-py3-none-any.whl", hash = "sha256:8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572"},
{file = "aiohappyeyeballs-2.4.3.tar.gz", hash = "sha256:75cf88a15106a5002a8eb1dab212525c00d1f4c0fa96e551c9fbe6f09a621586"},
@@ -19,8 +17,6 @@ version = "3.11.14"
description = "Async http client/server framework (asyncio)"
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "aiohttp-3.11.14-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e2bc827c01f75803de77b134afdbf74fa74b62970eafdf190f3244931d7a5c0d"},
{file = "aiohttp-3.11.14-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e365034c5cf6cf74f57420b57682ea79e19eb29033399dd3f40de4d0171998fa"},
@@ -116,7 +112,7 @@ propcache = ">=0.2.0"
yarl = ">=1.17.0,<2.0"
[package.extras]
-speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""]
+speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"]
[[package]]
name = "aiosignal"
@@ -124,8 +120,6 @@ version = "1.3.2"
description = "aiosignal: a list of registered asynchronous callbacks"
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"},
{file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"},
@@ -140,8 +134,6 @@ version = "0.21.0"
description = "asyncio bridge to the standard sqlite3 module"
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "aiosqlite-0.21.0-py3-none-any.whl", hash = "sha256:2549cf4057f95f53dcba16f2b64e8e2791d7e1adedb13197dd8ed77bb226d7d0"},
{file = "aiosqlite-0.21.0.tar.gz", hash = "sha256:131bb8056daa3bc875608c631c678cda73922a2d4ba8aec373b19f18c17e7aa3"},
@@ -160,8 +152,6 @@ version = "0.7.0"
description = "Reusable constraint types to use with typing.Annotated"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},
{file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
@@ -173,8 +163,6 @@ version = "0.49.0"
description = "The official Python library for the anthropic API"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "anthropic-0.49.0-py3-none-any.whl", hash = "sha256:bbc17ad4e7094988d2fa86b87753ded8dce12498f4b85fe5810f208f454a8375"},
{file = "anthropic-0.49.0.tar.gz", hash = "sha256:c09e885b0f674b9119b4f296d8508907f6cff0009bc20d5cf6b35936c40b4398"},
@@ -199,8 +187,6 @@ version = "4.9.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"},
{file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"},
@@ -214,7 +200,7 @@ typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""}
[package.extras]
doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"]
-test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""]
+test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"]
trio = ["trio (>=0.26.1)"]
[[package]]
@@ -223,8 +209,6 @@ version = "1.4.4"
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"},
{file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
@@ -236,8 +220,6 @@ version = "0.1.4"
description = "Disable App Nap on macOS >= 10.9"
optional = false
python-versions = ">=3.6"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\" and platform_system == \"Darwin\""
files = [
{file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"},
{file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"},
@@ -249,8 +231,6 @@ version = "23.1.0"
description = "Argon2 for Python"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"},
{file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"},
@@ -271,8 +251,6 @@ version = "21.2.0"
description = "Low-level CFFI bindings for Argon2"
optional = false
python-versions = ">=3.6"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"},
{file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"},
@@ -310,8 +288,6 @@ version = "1.3.0"
description = "Better dates & times for Python"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"},
{file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"},
@@ -331,8 +307,6 @@ version = "3.8.1"
description = "ASGI specs, helper code, and adapters"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"},
{file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"},
@@ -350,8 +324,6 @@ version = "3.0.0"
description = "Annotate AST trees with source code positions"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"},
{file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"},
@@ -367,8 +339,6 @@ version = "2.0.5"
description = "Simple LRU cache for asyncio"
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"},
{file = "async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb"},
@@ -383,12 +353,10 @@ version = "4.0.3"
description = "Timeout context manager for asyncio programs"
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
files = [
{file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"},
{file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"},
]
-markers = {docs = "python_version == \"3.10\" or python_version < \"3.11\" and platform_python_implementation == \"PyPy\"", test = "python_full_version < \"3.11.3\" and (python_version == \"3.10\" or python_version == \"3.11\" or platform_python_implementation == \"PyPy\")"}
[[package]]
name = "attrs"
@@ -396,20 +364,18 @@ version = "25.3.0"
description = "Classes Without Boilerplate"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"},
{file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"},
]
[package.extras]
-benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"]
-cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"]
-dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"]
+benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"]
-tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"]
-tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""]
+tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
[[package]]
name = "autogen"
@@ -417,8 +383,6 @@ version = "0.3.2"
description = "A programming framework for agentic AI"
optional = false
python-versions = "<3.13,>=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\" and python_version < \"3.13\""
files = [
{file = "autogen-0.3.2-py3-none-any.whl", hash = "sha256:e37a9df0ad84cde3429ec63298b8e9eb4e6306a28eec2627171e14b9a61ea64d"},
{file = "autogen-0.3.2.tar.gz", hash = "sha256:9f8a1170ac2e5a1fc9efc3cfa6e23261dd014db97b17c8c416f97ee14951bc7b"},
@@ -472,15 +436,13 @@ version = "2.17.0"
description = "Internationalization utilities"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"},
{file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"},
]
[package.extras]
-dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""]
+dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"]
[[package]]
name = "backoff"
@@ -488,8 +450,6 @@ version = "2.2.1"
description = "Function decoration for backoff and retry"
optional = false
python-versions = ">=3.7,<4.0"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"},
{file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"},
@@ -501,8 +461,6 @@ version = "5.8"
description = "A wrapper around re and regex that adds additional back references."
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "backrefs-5.8-py310-none-any.whl", hash = "sha256:c67f6638a34a5b8730812f5101376f9d41dc38c43f1fdc35cb54700f6ed4465d"},
{file = "backrefs-5.8-py311-none-any.whl", hash = "sha256:2e1c15e4af0e12e45c8701bd5da0902d326b2e200cafcd25e49d9f06d44bb61b"},
@@ -521,8 +479,6 @@ version = "4.3.0"
description = "Modern password hashing for your software and your servers"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "bcrypt-4.3.0-cp313-cp313t-macosx_10_12_universal2.whl", hash = "sha256:f01e060f14b6b57bbb72fc5b4a83ac21c443c9a2ee708e04a10e9192f90a6281"},
{file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5eeac541cefd0bb887a371ef73c62c3cd78535e4887b310626036a7c0a817bb"},
@@ -587,8 +543,6 @@ version = "4.13.3"
description = "Screen-scraping library"
optional = false
python-versions = ">=3.7.0"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"},
{file = "beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b"},
@@ -611,8 +565,6 @@ version = "6.2.0"
description = "An easy safelist-based HTML-sanitizing tool."
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"},
{file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"},
@@ -631,8 +583,6 @@ version = "1.2.2.post1"
description = "A simple, correct Python build frontend"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"},
{file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"},
@@ -647,7 +597,7 @@ tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
[package.extras]
docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"]
-test = ["build[uv,virtualenv]", "filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0) ; python_version < \"3.10\"", "setuptools (>=56.0.0) ; python_version == \"3.10\"", "setuptools (>=56.0.0) ; python_version == \"3.11\"", "setuptools (>=67.8.0) ; python_version >= \"3.12\"", "wheel (>=0.36.0)"]
+test = ["build[uv,virtualenv]", "filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0)", "setuptools (>=56.0.0)", "setuptools (>=56.0.0)", "setuptools (>=67.8.0)", "wheel (>=0.36.0)"]
typing = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", "tomli", "typing-extensions (>=3.7.4.3)"]
uv = ["uv (>=0.1.18)"]
virtualenv = ["virtualenv (>=20.0.35)"]
@@ -658,8 +608,6 @@ version = "0.14.2"
description = "httplib2 caching for requests"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "cachecontrol-0.14.2-py3-none-any.whl", hash = "sha256:ebad2091bf12d0d200dfc2464330db638c5deb41d546f6d7aca079e87290f3b0"},
{file = "cachecontrol-0.14.2.tar.gz", hash = "sha256:7d47d19f866409b98ff6025b6a0fca8e4c791fb31abbd95f622093894ce903a2"},
@@ -681,8 +629,6 @@ version = "5.5.2"
description = "Extensible memoizing collections and decorators"
optional = false
python-versions = ">=3.7"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"},
{file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"},
@@ -694,8 +640,6 @@ version = "1.7.1"
description = "cffi-based cairo bindings for Python"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f"},
{file = "cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b"},
@@ -715,8 +659,6 @@ version = "2.7.1"
description = "A Simple SVG Converter based on Cairo"
optional = false
python-versions = ">=3.5"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "CairoSVG-2.7.1-py3-none-any.whl", hash = "sha256:8a5222d4e6c3f86f1f7046b63246877a63b49923a1cd202184c3a634ef546b3b"},
{file = "CairoSVG-2.7.1.tar.gz", hash = "sha256:432531d72347291b9a9ebfb6777026b607563fd8719c46ee742db0aef7271ba0"},
@@ -739,8 +681,6 @@ version = "2025.1.31"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"},
{file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"},
@@ -752,7 +692,6 @@ version = "1.17.1"
description = "Foreign Function Interface for Python calling C code."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
files = [
{file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"},
{file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"},
@@ -822,7 +761,6 @@ files = [
{file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"},
{file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"},
]
-markers = {docs = "platform_python_implementation == \"PyPy\"", test = "platform_python_implementation == \"PyPy\" and implementation_name == \"pypy\""}
[package.dependencies]
pycparser = "*"
@@ -833,8 +771,6 @@ version = "3.4.1"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"},
{file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"},
@@ -936,8 +872,6 @@ version = "0.7.6"
description = "Chromas fork of hnswlib"
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "chroma_hnswlib-0.7.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f35192fbbeadc8c0633f0a69c3d3e9f1a4eab3a46b65458bbcbcabdd9e895c36"},
{file = "chroma_hnswlib-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f007b608c96362b8f0c8b6b2ac94f67f83fcbabd857c378ae82007ec92f4d82"},
@@ -979,8 +913,6 @@ version = "0.5.23"
description = "Chroma."
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "chromadb-0.5.23-py3-none-any.whl", hash = "sha256:ffe5bdd7276d12cb682df0d38a13aa37573e6a3678e71889ac45f539ae05ad7e"},
{file = "chromadb-0.5.23.tar.gz", hash = "sha256:360a12b9795c5a33cb1f839d14410ccbde662ef1accd36153b0ae22312edabd1"},
@@ -1022,8 +954,6 @@ version = "8.1.8"
description = "Composable command line interface toolkit"
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"},
{file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"},
@@ -1038,8 +968,6 @@ version = "5.14.0"
description = ""
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "cohere-5.14.0-py3-none-any.whl", hash = "sha256:286b4ff66f9a59c06a30b8819fb8b2aee3354dc2f7dc83f19519da771e598a5e"},
{file = "cohere-5.14.0.tar.gz", hash = "sha256:fdbf2d4c54049b74c8f79ff8ed6fd149c4c2055d3b5eae57b9c70716e65c78fd"},
@@ -1062,12 +990,10 @@ version = "0.4.6"
description = "Cross-platform colored terminal text."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
-groups = ["docs", "test"]
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
-markers = {docs = "platform_python_implementation == \"PyPy\"", test = "platform_python_implementation == \"PyPy\" and (platform_system == \"Windows\" or sys_platform == \"win32\" or os_name == \"nt\")"}
[[package]]
name = "coloredlogs"
@@ -1075,8 +1001,6 @@ version = "15.0.1"
description = "Colored terminal output for Python's logging module"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"},
{file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"},
@@ -1094,8 +1018,6 @@ version = "0.2.2"
description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"},
{file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"},
@@ -1113,8 +1035,6 @@ version = "1.3.1"
description = "Python library for calculating contours of 2D quadrilateral grids"
optional = false
python-versions = ">=3.10"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"},
{file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"},
@@ -1188,8 +1108,6 @@ version = "0.9.5"
description = "A python port of YUI CSS Compressor"
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05"},
]
@@ -1200,8 +1118,6 @@ version = "0.8.0"
description = "CSS selectors for Python ElementTree"
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "cssselect2-0.8.0-py3-none-any.whl", hash = "sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e"},
{file = "cssselect2-0.8.0.tar.gz", hash = "sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a"},
@@ -1221,8 +1137,6 @@ version = "0.12.1"
description = "Composable style cycles"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"},
{file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"},
@@ -1238,8 +1152,6 @@ version = "0.6.7"
description = "Easily serialize dataclasses to and from JSON."
optional = false
python-versions = "<4.0,>=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"},
{file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"},
@@ -1255,8 +1167,6 @@ version = "1.8.13"
description = "An implementation of the Debug Adapter Protocol for Python"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "debugpy-1.8.13-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:06859f68e817966723ffe046b896b1bd75c665996a77313370336ee9e1de3e90"},
{file = "debugpy-1.8.13-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c2db69fb8df3168bc857d7b7d2494fed295dfdbde9a45f27b4b152f37520"},
@@ -1292,8 +1202,6 @@ version = "5.2.1"
description = "Decorators for Humans"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"},
{file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"},
@@ -1305,8 +1213,6 @@ version = "4.1.15"
description = "Data Lake for Multi-Modal AI Search"
optional = false
python-versions = "*"
-groups = ["main"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "deeplake-4.1.15-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:775dfb39f99b6da2cd22f119d4b0196051b876988656152bd04318ac23f3e793"},
{file = "deeplake-4.1.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:698bf7df89e38380de0ca140a2d152600dd18a41f882409fddd916425327ea41"},
@@ -1343,8 +1249,6 @@ version = "0.7.1"
description = "XML bomb protection for Python stdlib modules"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"},
{file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
@@ -1356,8 +1260,6 @@ version = "1.2.18"
description = "Python @deprecated decorator to deprecate old python classes, functions or methods."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"},
{file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"},
@@ -1367,7 +1269,7 @@ files = [
wrapt = ">=1.10,<2"
[package.extras]
-dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"]
+dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools", "tox"]
[[package]]
name = "diskcache"
@@ -1375,8 +1277,6 @@ version = "5.6.3"
description = "Disk Cache -- Disk and file backed persistent cache."
optional = false
python-versions = ">=3"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\" and python_version < \"3.13\""
files = [
{file = "diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19"},
{file = "diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc"},
@@ -1388,8 +1288,6 @@ version = "1.9.0"
description = "Distro - an OS platform information API"
optional = false
python-versions = ">=3.6"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"},
{file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"},
@@ -1401,8 +1299,6 @@ version = "2.7.0"
description = "DNS toolkit"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"},
{file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"},
@@ -1423,8 +1319,6 @@ version = "7.1.0"
description = "A Python library for the Docker Engine API."
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\" and python_version < \"3.13\""
files = [
{file = "docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0"},
{file = "docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c"},
@@ -1447,8 +1341,6 @@ version = "0.21.2"
description = "Docutils -- Python Documentation Utilities"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"},
{file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"},
@@ -1460,21 +1352,34 @@ version = "0.9"
description = "Module for converting between datetime.timedelta and Go's Duration strings."
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "durationpy-0.9-py3-none-any.whl", hash = "sha256:e65359a7af5cedad07fb77a2dd3f390f8eb0b74cb845589fa6c057086834dd38"},
{file = "durationpy-0.9.tar.gz", hash = "sha256:fd3feb0a69a0057d582ef643c355c40d2fa1c942191f914d12203b1a01ac722a"},
]
+[[package]]
+name = "dydantic"
+version = "0.0.8"
+description = "Dynamically generate pydantic models from JSON schema."
+optional = false
+python-versions = "<4.0,>=3.9"
+files = [
+ {file = "dydantic-0.0.8-py3-none-any.whl", hash = "sha256:cd0a991f523bd8632699872f1c0c4278415dd04783e36adec5428defa0afb721"},
+ {file = "dydantic-0.0.8.tar.gz", hash = "sha256:14a31d4cdfce314ce3e69e8f8c7c46cbc26ce3ce4485de0832260386c612942f"},
+]
+
+[package.dependencies]
+pydantic = ">=2,<3"
+
+[package.extras]
+email = ["email-validator (>=2.1,<3.0)"]
+
[[package]]
name = "exceptiongroup"
version = "1.2.2"
description = "Backport of PEP 654 (exception groups)"
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "python_version == \"3.10\" or python_version < \"3.11\" and platform_python_implementation == \"PyPy\""
files = [
{file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
{file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
@@ -1489,15 +1394,13 @@ version = "2.2.0"
description = "Get the currently executing AST node of a frame, and other information"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"},
{file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"},
]
[package.extras]
-tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""]
+tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"]
[[package]]
name = "fastapi"
@@ -1505,8 +1408,6 @@ version = "0.115.12"
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d"},
{file = "fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681"},
@@ -1527,8 +1428,6 @@ version = "1.10.0"
description = "Fast read/write of AVRO files"
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "fastavro-1.10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1a9fe0672d2caf0fe54e3be659b13de3cad25a267f2073d6f4b9f8862acc31eb"},
{file = "fastavro-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86dd0410770e0c99363788f0584523709d85e57bb457372ec5c285a482c17fe6"},
@@ -1575,8 +1474,6 @@ version = "2.21.1"
description = "Fastest Python implementation of JSON schema"
optional = false
python-versions = "*"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"},
{file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"},
@@ -1591,8 +1488,6 @@ version = "3.18.0"
description = "A platform independent file lock."
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"},
{file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"},
@@ -1601,7 +1496,7 @@ files = [
[package.extras]
docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"]
testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"]
-typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""]
+typing = ["typing-extensions (>=4.12.2)"]
[[package]]
name = "fireworks-ai"
@@ -1609,8 +1504,6 @@ version = "0.15.12"
description = "Python client library for the Fireworks.ai Generative AI Platform"
optional = false
python-versions = ">=3.7"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "fireworks_ai-0.15.12-py3-none-any.whl", hash = "sha256:3fbf3f89e65ccfc46c88b71246b9d4fdf3301955ac4050193d8f4b4058cb193a"},
{file = "fireworks_ai-0.15.12.tar.gz", hash = "sha256:2380a53d92244c608fd398f8d97b97380d899f3ff710091f4b50917b75119ec2"},
@@ -1632,8 +1525,6 @@ version = "2.3.4"
description = "A fast library for automated machine learning and tuning"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\" and python_version < \"3.13\""
files = [
{file = "FLAML-2.3.4-py3-none-any.whl", hash = "sha256:dceab62194d469889c4584531049ac0a43480056f4f39c6ea207bfc12a157d76"},
{file = "flaml-2.3.4.tar.gz", hash = "sha256:308c3e769976d8a0272f2fd7d98258d7d4a4fd2e4525ba540d1ba149ae266c54"},
@@ -1649,8 +1540,8 @@ autozero = ["packaging", "pandas", "scikit-learn"]
azureml = ["azureml-mlflow"]
benchmark = ["catboost (>=0.26)", "pandas (==1.1.4)", "psutil (==5.8.0)", "xgboost (==1.3.3)"]
blendsearch = ["optuna (>=2.8.0,<=3.6.1)", "packaging"]
-catboost = ["catboost (>=0.26,<1.2) ; python_version < \"3.11\"", "catboost (>=0.26,<=1.2.5) ; python_version >= \"3.11\""]
-forecast = ["hcrystalball (==0.1.10)", "holidays (<0.14)", "prophet (>=1.0.1)", "pytorch-forecasting (>=0.9.0) ; python_version < \"3.11\"", "pytorch-lightning (==1.9.0)", "statsmodels (>=0.12.2)", "tensorboardX (==2.6)"]
+catboost = ["catboost (>=0.26,<1.2)", "catboost (>=0.26,<=1.2.5)"]
+forecast = ["hcrystalball (==0.1.10)", "holidays (<0.14)", "prophet (>=1.0.1)", "pytorch-forecasting (>=0.9.0)", "pytorch-lightning (==1.9.0)", "statsmodels (>=0.12.2)", "tensorboardX (==2.6)"]
hf = ["datasets", "nltk (<=3.8.1)", "rouge-score", "seqeval", "transformers[torch] (==4.26)"]
mathchat = ["diskcache", "openai (==0.27.8)", "pydantic (==1.10.9)", "sympy", "termcolor", "wolframalpha"]
nlp = ["datasets", "nltk (<=3.8.1)", "rouge-score", "seqeval", "transformers[torch] (==4.26)"]
@@ -1661,7 +1552,7 @@ ray = ["ray[tune] (>=1.13,<2.0)"]
retrievechat = ["chromadb", "diskcache", "openai (==0.27.8)", "sentence-transformers", "termcolor", "tiktoken"]
spark = ["joblib (<=1.3.2)", "joblibspark (>=0.5.0)", "pyspark (>=3.2.0)"]
synapse = ["joblibspark (>=0.5.0)", "optuna (>=2.8.0,<=3.6.1)", "pyspark (>=3.2.0)"]
-test = ["catboost (>=0.26) ; python_version >= \"3.11\"", "catboost (>=0.26,<1.2) ; python_version < \"3.11\"", "coverage (>=5.3)", "dataclasses", "datasets", "dill", "hcrystalball (==0.1.10)", "ipykernel", "joblib (<=1.3.2)", "joblibspark (>=0.5.0)", "jupyter", "lightgbm (>=2.3.1)", "mlflow (==2.15.1)", "nbconvert", "nbformat", "nltk (<=3.8.1)", "openml", "optuna (>=2.8.0,<=3.6.1)", "packaging", "pandas (>=1.1.4) ; python_version >= \"3.10\"", "pandas (>=1.1.4,<2.0.0) ; python_version < \"3.10\"", "pre-commit", "psutil (==5.8.0)", "pydantic (==1.10.9)", "pytest (>=6.1.1)", "pytorch-forecasting (>=0.9.0,<=0.10.1) ; python_version < \"3.11\"", "pytorch-lightning (<1.9.1)", "requests (<2.29.0)", "rgf-python", "rouge-score", "scikit-learn (>=1.0.0)", "scipy (>=1.4.1)", "seqeval", "statsmodels (>=0.12.2)", "sympy", "tensorboardX (==2.6)", "thop", "torch", "torchvision", "transformers[torch] (==4.26)", "wolframalpha", "xgboost (>=0.90,<2.0.0)"]
+test = ["catboost (>=0.26)", "catboost (>=0.26,<1.2)", "coverage (>=5.3)", "dataclasses", "datasets", "dill", "hcrystalball (==0.1.10)", "ipykernel", "joblib (<=1.3.2)", "joblibspark (>=0.5.0)", "jupyter", "lightgbm (>=2.3.1)", "mlflow (==2.15.1)", "nbconvert", "nbformat", "nltk (<=3.8.1)", "openml", "optuna (>=2.8.0,<=3.6.1)", "packaging", "pandas (>=1.1.4)", "pandas (>=1.1.4,<2.0.0)", "pre-commit", "psutil (==5.8.0)", "pydantic (==1.10.9)", "pytest (>=6.1.1)", "pytorch-forecasting (>=0.9.0,<=0.10.1)", "pytorch-lightning (<1.9.1)", "requests (<2.29.0)", "rgf-python", "rouge-score", "scikit-learn (>=1.0.0)", "scipy (>=1.4.1)", "seqeval", "statsmodels (>=0.12.2)", "sympy", "tensorboardX (==2.6)", "thop", "torch", "torchvision", "transformers[torch] (==4.26)", "wolframalpha", "xgboost (>=0.90,<2.0.0)"]
ts-forecast = ["hcrystalball (==0.1.10)", "holidays (<0.14)", "prophet (>=1.0.1)", "statsmodels (>=0.12.2)"]
vw = ["scikit-learn", "vowpalwabbit (>=8.10.0,<9.0.0)"]
@@ -1671,8 +1562,6 @@ version = "25.2.10"
description = "The FlatBuffers serialization format for Python"
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "flatbuffers-25.2.10-py2.py3-none-any.whl", hash = "sha256:ebba5f4d5ea615af3f7fd70fc310636fbb2bbd1f566ac0a23d98dd412de50051"},
{file = "flatbuffers-25.2.10.tar.gz", hash = "sha256:97e451377a41262f8d9bd4295cc836133415cc03d8cb966410a4af92eb00d26e"},
@@ -1684,8 +1573,6 @@ version = "4.56.0"
description = "Tools to manipulate font files"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "fonttools-4.56.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:331954d002dbf5e704c7f3756028e21db07097c19722569983ba4d74df014000"},
{file = "fonttools-4.56.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d1613abd5af2f93c05867b3a3759a56e8bf97eb79b1da76b2bc10892f96ff16"},
@@ -1740,18 +1627,18 @@ files = [
]
[package.extras]
-all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"]
+all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"]
graphite = ["lz4 (>=1.7.4.2)"]
-interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""]
+interpolatable = ["munkres", "pycairo", "scipy"]
lxml = ["lxml (>=4.0)"]
pathops = ["skia-pathops (>=0.5.0)"]
plot = ["matplotlib"]
repacker = ["uharfbuzz (>=0.23.0)"]
symfont = ["sympy"]
-type1 = ["xattr ; sys_platform == \"darwin\""]
+type1 = ["xattr"]
ufo = ["fs (>=2.2.0,<3)"]
-unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""]
-woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"]
+unicode = ["unicodedata2 (>=15.1.0)"]
+woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"]
[[package]]
name = "fqdn"
@@ -1759,8 +1646,6 @@ version = "1.5.1"
description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers"
optional = false
python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"},
{file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"},
@@ -1772,8 +1657,6 @@ version = "1.5.0"
description = "A list-like structure which implements collections.abc.MutableSequence"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"},
{file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"},
@@ -1875,8 +1758,6 @@ version = "2025.3.0"
description = "File-system specification"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "fsspec-2025.3.0-py3-none-any.whl", hash = "sha256:efb87af3efa9103f94ca91a7f8cb7a4df91af9f74fc106c9c7ea0efd7277c1b3"},
{file = "fsspec-2025.3.0.tar.gz", hash = "sha256:a935fd1ea872591f2b5148907d103488fc523295e6c64b835cfad8c3eca44972"},
@@ -1916,8 +1797,6 @@ version = "2.1.0"
description = "Copy your docs directly to the gh-pages branch."
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"},
{file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"},
@@ -1935,8 +1814,6 @@ version = "4.0.12"
description = "Git Object Database"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"},
{file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"},
@@ -1951,8 +1828,6 @@ version = "3.1.44"
description = "GitPython is a Python library used to interact with Git repositories"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110"},
{file = "gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269"},
@@ -1963,7 +1838,7 @@ gitdb = ">=4.0.1,<5"
[package.extras]
doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"]
-test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions ; python_version < \"3.11\""]
+test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"]
[[package]]
name = "google-auth"
@@ -1971,8 +1846,6 @@ version = "2.38.0"
description = "Google Authentication Library"
optional = false
python-versions = ">=3.7"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "google_auth-2.38.0-py2.py3-none-any.whl", hash = "sha256:e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a"},
{file = "google_auth-2.38.0.tar.gz", hash = "sha256:8285113607d3b80a3f1543b75962447ba8a09fe85783432a784fdeef6ac094c4"},
@@ -1997,8 +1870,6 @@ version = "1.69.2"
description = "Common protobufs used in Google APIs"
optional = false
python-versions = ">=3.7"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "googleapis_common_protos-1.69.2-py3-none-any.whl", hash = "sha256:0b30452ff9c7a27d80bfc5718954063e8ab53dd3697093d3bc99581f5fd24212"},
{file = "googleapis_common_protos-1.69.2.tar.gz", hash = "sha256:3e1b904a27a33c821b4b749fd31d334c0c9c30e6113023d495e48979a3dc9c5f"},
@@ -2016,8 +1887,6 @@ version = "2.8.2"
description = "Python bindings for GPT4All"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "gpt4all-2.8.2-py3-none-macosx_10_15_universal2.whl", hash = "sha256:41d6de60fe1f9c9a29bcbb585c5eb39083893cf00db0b836de1f2d88e2fbbb17"},
{file = "gpt4all-2.8.2-py3-none-manylinux1_x86_64.whl", hash = "sha256:c61e977afa72475c076211fd9b59a88334fc0062615be8c2f7716363a21fbafa"},
@@ -2030,7 +1899,7 @@ tqdm = "*"
typing-extensions = {version = ">=4.3.0", markers = "python_version >= \"3.9\" and python_version < \"3.11\""}
[package.extras]
-all = ["gpt4all[cuda] ; platform_system == \"Windows\" or platform_system == \"Linux\""]
+all = ["gpt4all[cuda]"]
cuda = ["nvidia-cublas-cu11", "nvidia-cuda-runtime-cu11"]
dev = ["black", "gpt4all[all]", "isort", "mkautodoc", "mkdocs-jupyter", "mkdocs-material", "mkdocs-material[imaging]", "mkdocstrings[python]", "pytest", "setuptools", "twine", "typing-extensions (>=3.10)", "wheel"]
@@ -2040,8 +1909,6 @@ version = "0.8"
description = "Graph and drawing algorithms framework"
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "grandalf-0.8-py3-none-any.whl", hash = "sha256:793ca254442f4a79252ea9ff1ab998e852c1e071b863593e5383afee906b4185"},
{file = "grandalf-0.8.tar.gz", hash = "sha256:2813f7aab87f0d20f334a3162ccfbcbf085977134a17a5b516940a93a77ea974"},
@@ -2059,8 +1926,6 @@ version = "3.1.1"
description = "Lightweight in-process concurrent programming"
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\") and python_version < \"3.14\""
files = [
{file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"},
{file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"},
@@ -2147,8 +2012,6 @@ version = "1.6.2"
description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API."
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "griffe-1.6.2-py3-none-any.whl", hash = "sha256:6399f7e663150e4278a312a8e8a14d2f3d7bd86e2ef2f8056a1058e38579c2ee"},
{file = "griffe-1.6.2.tar.gz", hash = "sha256:3a46fa7bd83280909b63c12b9a975732a927dd97809efe5b7972290b606c5d91"},
@@ -2163,8 +2026,6 @@ version = "1.71.0"
description = "HTTP/2-based RPC framework"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "grpcio-1.71.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:c200cb6f2393468142eb50ab19613229dcc7829b5ccee8b658a36005f6669fdd"},
{file = "grpcio-1.71.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:b2266862c5ad664a380fbbcdbdb8289d71464c42a8c29053820ee78ba0119e5d"},
@@ -2228,8 +2089,6 @@ version = "0.14.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
{file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
@@ -2241,8 +2100,6 @@ version = "1.1"
description = "HTML parser based on the WHATWG HTML specification"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"},
{file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"},
@@ -2253,10 +2110,10 @@ six = ">=1.9"
webencodings = "*"
[package.extras]
-all = ["chardet (>=2.2)", "genshi", "lxml ; platform_python_implementation == \"CPython\""]
+all = ["chardet (>=2.2)", "genshi", "lxml"]
chardet = ["chardet (>=2.2)"]
genshi = ["genshi"]
-lxml = ["lxml ; platform_python_implementation == \"CPython\""]
+lxml = ["lxml"]
[[package]]
name = "htmlmin2"
@@ -2264,8 +2121,6 @@ version = "0.1.13"
description = "An HTML Minifier"
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2"},
]
@@ -2276,8 +2131,6 @@ version = "1.0.7"
description = "A minimal low-level HTTP client."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"},
{file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"},
@@ -2299,8 +2152,6 @@ version = "0.6.4"
description = "A collection of framework independent HTTP protocol utils."
optional = false
python-versions = ">=3.8.0"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "httptools-0.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0"},
{file = "httptools-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da"},
@@ -2356,8 +2207,6 @@ version = "0.28.1"
description = "The next generation HTTP client."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"},
{file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"},
@@ -2370,7 +2219,7 @@ httpcore = "==1.*"
idna = "*"
[package.extras]
-brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""]
+brotli = ["brotli", "brotlicffi"]
cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
http2 = ["h2 (>=3,<5)"]
socks = ["socksio (==1.*)"]
@@ -2382,8 +2231,6 @@ version = "0.4.0"
description = "Consume Server-Sent Event (SSE) messages with HTTPX."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"},
{file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"},
@@ -2395,8 +2242,6 @@ version = "0.7.1"
description = "WebSockets support for HTTPX"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "httpx_ws-0.7.1-py3-none-any.whl", hash = "sha256:7970e470840d8e6c17bd45ed4e7af06f9144a4a9decab2ff226f3ff9accb65b4"},
{file = "httpx_ws-0.7.1.tar.gz", hash = "sha256:72f355d4b9b16d8fa59e5e68efdfcb1f3c7dca944901b373791245c8f67f9f95"},
@@ -2414,8 +2259,6 @@ version = "3.0.1"
description = "Activeloop Deep Lake"
optional = false
python-versions = "*"
-groups = ["main"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "hub-3.0.1-py3-none-any.whl", hash = "sha256:16d20fbf44700b438dc372d697ee683f0d7c58b178ad01d2daf81efe88bc692d"},
{file = "hub-3.0.1.tar.gz", hash = "sha256:3866425914ed522090f0634887f06ff77517e8e6d7b9370e42009d774b725514"},
@@ -2430,8 +2273,6 @@ version = "0.29.3"
description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
optional = false
python-versions = ">=3.8.0"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "huggingface_hub-0.29.3-py3-none-any.whl", hash = "sha256:0b25710932ac649c08cdbefa6c6ccb8e88eef82927cacdb048efb726429453aa"},
{file = "huggingface_hub-0.29.3.tar.gz", hash = "sha256:64519a25716e0ba382ba2d3fb3ca082e7c7eb4a2fc634d200e8380006e0760e5"},
@@ -2466,8 +2307,6 @@ version = "10.0"
description = "Human friendly output for text interfaces using Python"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"},
{file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"},
@@ -2482,8 +2321,6 @@ version = "3.10"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
python-versions = ">=3.6"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
{file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
@@ -2498,8 +2335,6 @@ version = "8.6.1"
description = "Read metadata from Python packages"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"},
{file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"},
@@ -2509,12 +2344,12 @@ files = [
zipp = ">=3.20"
[package.extras]
-check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
cover = ["pytest-cov"]
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
enabler = ["pytest-enabler (>=2.2)"]
perf = ["ipython"]
-test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
+test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
type = ["pytest-mypy"]
[[package]]
@@ -2523,15 +2358,13 @@ version = "6.5.2"
description = "Read resources from Python packages"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"},
{file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"},
]
[package.extras]
-check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
cover = ["pytest-cov"]
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
enabler = ["pytest-enabler (>=2.2)"]
@@ -2544,8 +2377,6 @@ version = "2.1.0"
description = "brain-dead simple config-ini parsing"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"},
{file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"},
@@ -2557,8 +2388,6 @@ version = "6.29.5"
description = "IPython Kernel for Jupyter"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"},
{file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"},
@@ -2592,8 +2421,6 @@ version = "8.34.0"
description = "IPython: Productive Interactive Computing"
optional = false
python-versions = ">=3.10"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "ipython-8.34.0-py3-none-any.whl", hash = "sha256:0419883fa46e0baa182c5d50ebb8d6b49df1889fdb70750ad6d8cfe678eda6e3"},
{file = "ipython-8.34.0.tar.gz", hash = "sha256:c31d658e754673ecc6514583e7dda8069e47136eb62458816b7d1e6625948b5a"},
@@ -2615,7 +2442,7 @@ typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""}
[package.extras]
all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"]
black = ["black"]
-doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli ; python_version < \"3.11\"", "typing_extensions"]
+doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing_extensions"]
kernel = ["ipykernel"]
matplotlib = ["matplotlib"]
nbconvert = ["nbconvert"]
@@ -2632,8 +2459,6 @@ version = "8.1.5"
description = "Jupyter interactive widgets"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245"},
{file = "ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17"},
@@ -2655,8 +2480,6 @@ version = "20.11.0"
description = "Operations with ISO 8601 durations"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"},
{file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"},
@@ -2671,8 +2494,6 @@ version = "0.19.2"
description = "An autocompletion tool for Python that can be used for text editors."
optional = false
python-versions = ">=3.6"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"},
{file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"},
@@ -2692,8 +2513,6 @@ version = "3.1.6"
description = "A very fast and expressive template engine."
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"},
{file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"},
@@ -2711,8 +2530,6 @@ version = "0.9.0"
description = "Fast iterable JSON parser."
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jiter-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:816ec9b60fdfd1fec87da1d7ed46c66c44ffec37ab2ef7de5b147b2fce3fd5ad"},
{file = "jiter-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b1d3086f8a3ee0194ecf2008cf81286a5c3e540d977fa038ff23576c023c0ea"},
@@ -2798,8 +2615,6 @@ version = "1.4.2"
description = "Lightweight pipelining with Python functions"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"},
{file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"},
@@ -2811,8 +2626,6 @@ version = "3.0.1"
description = "JavaScript minifier."
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc"},
]
@@ -2823,8 +2636,6 @@ version = "0.10.0"
description = "A Python implementation of the JSON5 data format."
optional = false
python-versions = ">=3.8.0"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"},
{file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"},
@@ -2839,8 +2650,6 @@ version = "4.0.0"
description = "Library with helpers for the jsonlines file format"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55"},
{file = "jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74"},
@@ -2855,8 +2664,6 @@ version = "1.33"
description = "Apply JSON-Patches (RFC 6902)"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"},
{file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"},
@@ -2871,8 +2678,6 @@ version = "3.0.0"
description = "Identify specific nodes in a JSON document (RFC 6901)"
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"},
{file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"},
@@ -2884,8 +2689,6 @@ version = "4.23.0"
description = "An implementation of JSON Schema validation for Python"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"},
{file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"},
@@ -2915,8 +2718,6 @@ version = "2024.10.1"
description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"},
{file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"},
@@ -2931,8 +2732,6 @@ version = "1.1.1"
description = "Jupyter metapackage. Install all the Jupyter components in one go."
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"},
{file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"},
@@ -2952,8 +2751,6 @@ version = "8.6.3"
description = "Jupyter protocol implementation and client libraries"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"},
{file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"},
@@ -2968,7 +2765,7 @@ traitlets = ">=5.3"
[package.extras]
docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
-test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"]
+test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"]
[[package]]
name = "jupyter-console"
@@ -2976,8 +2773,6 @@ version = "6.6.3"
description = "Jupyter terminal console"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"},
{file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"},
@@ -3002,8 +2797,6 @@ version = "5.7.2"
description = "Jupyter core package. A base package on which Jupyter projects rely."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"},
{file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"},
@@ -3024,8 +2817,6 @@ version = "0.12.0"
description = "Jupyter Event System library"
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"},
{file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"},
@@ -3052,8 +2843,6 @@ version = "2.2.5"
description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"},
{file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"},
@@ -3068,8 +2857,6 @@ version = "2.15.0"
description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications."
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"},
{file = "jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084"},
@@ -3106,8 +2893,6 @@ version = "0.5.3"
description = "A Jupyter Server Extension Providing Terminals."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"},
{file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"},
@@ -3127,8 +2912,6 @@ version = "4.3.6"
description = "JupyterLab computational environment"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyterlab-4.3.6-py3-none-any.whl", hash = "sha256:fc9eb0455562a56a9bd6d2977cf090842f321fa1a298fcee9bf8c19de353d5fd"},
{file = "jupyterlab-4.3.6.tar.gz", hash = "sha256:2900ffdbfca9ed37c4ad7fdda3eb76582fd945d46962af3ac64741ae2d6b2ff4"},
@@ -3163,8 +2946,6 @@ version = "0.3.0"
description = "Pygments theme using JupyterLab CSS variables"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"},
{file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"},
@@ -3176,8 +2957,6 @@ version = "2.27.3"
description = "A set of server components for JupyterLab and JupyterLab like applications."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"},
{file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"},
@@ -3203,8 +2982,6 @@ version = "3.0.13"
description = "Jupyter interactive widgets for JupyterLab"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54"},
{file = "jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed"},
@@ -3216,8 +2993,6 @@ version = "1.4.8"
description = "A fast implementation of the Cassowary constraint solver"
optional = false
python-versions = ">=3.10"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"},
{file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b"},
@@ -3307,8 +3082,6 @@ version = "32.0.1"
description = "Kubernetes python client"
optional = false
python-versions = ">=3.6"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "kubernetes-32.0.1-py2.py3-none-any.whl", hash = "sha256:35282ab8493b938b08ab5526c7ce66588232df00ef5e1dbe88a419107dc10998"},
{file = "kubernetes-32.0.1.tar.gz", hash = "sha256:42f43d49abd437ada79a79a16bd48a604d3471a117a8347e87db693f2ba0ba28"},
@@ -3336,8 +3109,6 @@ version = "0.3.21"
description = "Building applications with LLMs through composability"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain-0.3.21-py3-none-any.whl", hash = "sha256:c8bd2372440cc5d48cb50b2d532c2e24036124f1c467002ceb15bc7b86c92579"},
{file = "langchain-0.3.21.tar.gz", hash = "sha256:a10c81f8c450158af90bf37190298d996208cfd15dd3accc1c585f068473d619"},
@@ -3377,8 +3148,6 @@ version = "0.3.10"
description = "An integration package connecting AnthropicMessages and LangChain"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_anthropic-0.3.10-py3-none-any.whl", hash = "sha256:f4aa8ec03b1f5bcfbb73d2db516bddf009bc457e524f1ee8d651c1fe7338603f"},
{file = "langchain_anthropic-0.3.10.tar.gz", hash = "sha256:b4364434393476bf076c8326a51261a55d4e4cfefda01b8adf53533e8ebd8ec5"},
@@ -3395,8 +3164,6 @@ version = "0.4.3"
description = "An integration package connecting Cohere and LangChain"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_cohere-0.4.3-py3-none-any.whl", hash = "sha256:dc2b28f04b140771a0f78a8ae0a1e04f13eae9e43392b5d7066f022f11bf9924"},
{file = "langchain_cohere-0.4.3.tar.gz", hash = "sha256:b4e2c2ffaec93fae94bb04de6376dceb9b9d77f314030f120a1233d28018bb24"},
@@ -3415,8 +3182,6 @@ version = "0.3.20"
description = "Community contributed LangChain integrations."
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_community-0.3.20-py3-none-any.whl", hash = "sha256:ea3dbf37fbc21020eca8850627546f3c95a8770afc06c4142b40b9ba86b970f7"},
{file = "langchain_community-0.3.20.tar.gz", hash = "sha256:bd83b4f2f818338423439aff3b5be362e1d686342ffada0478cd34c6f5ef5969"},
@@ -3442,8 +3207,6 @@ version = "0.3.48"
description = "Building applications with LLMs through composability"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_core-0.3.48-py3-none-any.whl", hash = "sha256:21e4fe84262b9c7ad8aefe7816439ede130893f8a64b8c965cd9695c2be91c73"},
{file = "langchain_core-0.3.48.tar.gz", hash = "sha256:be4b2fe36d8a11fb4b6b13e0808b12aea9f25e345624ffafe1d606afb6059f21"},
@@ -3467,8 +3230,6 @@ version = "0.3.4"
description = "Building applications with LLMs through composability"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_experimental-0.3.4-py3-none-any.whl", hash = "sha256:2e587306aea36b60fa5e5fc05dc7281bee9f60a806f0bf9d30916e0ee096af80"},
{file = "langchain_experimental-0.3.4.tar.gz", hash = "sha256:937c4259ee4a639c618d19acf0e2c5c2898ef127050346edc5655259aa281a21"},
@@ -3484,8 +3245,6 @@ version = "0.2.8"
description = "An integration package connecting Fireworks and LangChain"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_fireworks-0.2.8-py3-none-any.whl", hash = "sha256:58b7cbbaa1e35d8a59efd37a461c1e54c20f563f2f8ecf7c23caf7d99e7132ee"},
{file = "langchain_fireworks-0.2.8.tar.gz", hash = "sha256:1ff168cf40b80f78b955a5f7d2e2e2b400510fab3dfc0a193fa2296f871e836a"},
@@ -3504,8 +3263,6 @@ version = "0.2.9"
description = "An integration package connecting Mistral and LangChain"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_mistralai-0.2.9-py3-none-any.whl", hash = "sha256:106a65f1771dc41c2c9a00a305f1d03fcbe16f0d4f640b6c634f35780b711aaf"},
{file = "langchain_mistralai-0.2.9.tar.gz", hash = "sha256:ad88a4ded5d53fef781309485da6c6bdf217fadb9dfb41f5c9ad0ea2835d2b74"},
@@ -3524,8 +3281,6 @@ version = "0.1.4"
description = "An integration package connecting Nomic and LangChain"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_nomic-0.1.4-py3-none-any.whl", hash = "sha256:64c12ad069db0d8368b039d40a20730981be5147e7c35a24d7f286477c53c290"},
{file = "langchain_nomic-0.1.4.tar.gz", hash = "sha256:fa3103f373e1f6b01abcaf23f9f746f66c29f43d593271e2be0b64a285b3ef36"},
@@ -3542,8 +3297,6 @@ version = "0.2.3"
description = "An integration package connecting Ollama and LangChain"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_ollama-0.2.3-py3-none-any.whl", hash = "sha256:c47700ca68b013358b1e954493ecafb3bd10fa2cda71a9f15ba7897587a9aab2"},
{file = "langchain_ollama-0.2.3.tar.gz", hash = "sha256:d13fe8735176b652ca6e6656d7902c1265e8c0601097569f7c95433f3d034b38"},
@@ -3559,8 +3312,6 @@ version = "0.3.9"
description = "An integration package connecting OpenAI and LangChain"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_openai-0.3.9-py3-none-any.whl", hash = "sha256:1ad95c09a620910c39a8eb826eb146bd96bfbc55e4fca78b1e28ffd5e4f5b261"},
{file = "langchain_openai-0.3.9.tar.gz", hash = "sha256:a2897d15765a435eff3fed7043235c25ec1e192e6c45a81e9e4fae2951335fb3"},
@@ -3577,8 +3328,6 @@ version = "0.3.7"
description = "LangChain text splitting utilities"
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langchain_text_splitters-0.3.7-py3-none-any.whl", hash = "sha256:31ba826013e3f563359d7c7f1e99b1cdb94897f665675ee505718c116e7e20ad"},
{file = "langchain_text_splitters-0.3.7.tar.gz", hash = "sha256:7dbf0fb98e10bb91792a1d33f540e2287f9cc1dc30ade45b7aedd2d5cd3dc70b"},
@@ -3589,12 +3338,10 @@ langchain-core = ">=0.3.45,<1.0.0"
[[package]]
name = "langgraph"
-version = "0.3.20"
+version = "0.3.23"
description = "Building stateful, multi-actor applications with LLMs"
optional = false
python-versions = ">=3.9.0,<4.0"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = []
develop = true
@@ -3615,8 +3362,6 @@ version = "2.0.23"
description = "Library with base interfaces for LangGraph checkpoint savers."
optional = false
python-versions = "^3.9.0,<4.0"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = []
develop = true
@@ -3634,8 +3379,6 @@ version = "0.1.1"
description = "Library with a MongoDB implementation of LangGraph checkpoint saver."
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "langgraph_checkpoint_mongodb-0.1.1-py3-none-any.whl", hash = "sha256:1ff2c3cb2a9139c38ea9cf398659b8b32d6bbfcc4999713b62014431477c5ac5"},
{file = "langgraph_checkpoint_mongodb-0.1.1.tar.gz", hash = "sha256:350d347b0458fb7977231ac1295095bef512458ee0debe09fd394d913b8d89d3"},
@@ -3652,8 +3395,6 @@ version = "2.0.19"
description = "Library with a Postgres implementation of LangGraph checkpoint saver."
optional = false
python-versions = "^3.9.0,<4.0"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = []
develop = true
@@ -3673,8 +3414,6 @@ version = "2.0.6"
description = "Library with a SQLite implementation of LangGraph checkpoint saver."
optional = false
python-versions = "^3.9.0"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = []
develop = true
@@ -3688,12 +3427,10 @@ url = "../libs/checkpoint-sqlite"
[[package]]
name = "langgraph-prebuilt"
-version = "0.1.4"
+version = "0.1.7"
description = "Library with high-level APIs for creating and executing LangGraph agents and tools."
optional = false
python-versions = "^3.9.0,<4.0"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = []
develop = true
@@ -3707,12 +3444,10 @@ url = "../libs/prebuilt"
[[package]]
name = "langgraph-sdk"
-version = "0.1.58"
+version = "0.1.60"
description = "SDK for interacting with LangGraph API"
optional = false
python-versions = "^3.9.0,<4.0"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = []
develop = true
@@ -3724,32 +3459,55 @@ orjson = ">=3.10.1"
type = "directory"
url = "../libs/sdk-py"
+[[package]]
+name = "langmem"
+version = "0.0.19"
+description = "Prebuilt utilities for memory management and retrieval."
+optional = false
+python-versions = ">=3.10"
+files = [
+ {file = "langmem-0.0.19-py3-none-any.whl", hash = "sha256:dfe4741a34491036f4ec2717f32660bda146be875cdc440dedb5af265afa8af8"},
+ {file = "langmem-0.0.19.tar.gz", hash = "sha256:502980334ab42e07ec082a462222bd8a1eb8ad83835a35bc07c5426903b28002"},
+]
+
+[package.dependencies]
+langchain = ">=0.3.15"
+langchain-anthropic = ">=0.3.3"
+langchain-core = ">=0.3.46"
+langchain-openai = ">=0.3.1"
+langgraph = ">=0.3.23"
+langgraph-checkpoint = ">=2.0.12"
+langsmith = ">=0.3.8"
+trustcall = ">=0.0.37"
+
[[package]]
name = "langsmith"
-version = "0.2.11"
+version = "0.3.23"
description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform."
optional = false
python-versions = "<4.0,>=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
- {file = "langsmith-0.2.11-py3-none-any.whl", hash = "sha256:084cf66a7f093c25e6b30fb4005008ec5fa9843110e2f0b265ce133c6a0225e6"},
- {file = "langsmith-0.2.11.tar.gz", hash = "sha256:edf070349dbfc63dc4fc30e22533a11d77768e99ef269399b221c48fee25c737"},
+ {file = "langsmith-0.3.23-py3-none-any.whl", hash = "sha256:c195868b42a6fc78e6d1dca760f674eb8bc9e8bf5c7cd417703edb5317bf1139"},
+ {file = "langsmith-0.3.23.tar.gz", hash = "sha256:d0a1807b62158c98e69b4c250d25b68fe3464a09c780ed4b2b597cd659d0164e"},
]
[package.dependencies]
httpx = ">=0.23.0,<1"
orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""}
+packaging = ">=23.2"
pydantic = [
{version = ">=1,<3", markers = "python_full_version < \"3.12.4\""},
{version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""},
]
requests = ">=2,<3"
requests-toolbelt = ">=1.0.0,<2.0.0"
+zstandard = ">=0.23.0,<0.24.0"
[package.extras]
-compression = ["zstandard (>=0.23.0,<0.24.0)"]
langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"]
+openai-agents = ["openai-agents (>=0.0.3,<0.1)"]
+otel = ["opentelemetry-api (>=1.30.0,<2.0.0)", "opentelemetry-exporter-otlp-proto-http (>=1.30.0,<2.0.0)", "opentelemetry-sdk (>=1.30.0,<2.0.0)"]
+pytest = ["pytest (>=7.0.0)", "rich (>=13.9.4,<14.0.0)"]
[[package]]
name = "loguru"
@@ -3757,8 +3515,6 @@ version = "0.7.3"
description = "Python logging made (stupidly) simple"
optional = false
python-versions = "<4.0,>=3.5"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c"},
{file = "loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6"},
@@ -3769,7 +3525,7 @@ colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""}
win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""}
[package.extras]
-dev = ["Sphinx (==8.1.3) ; python_version >= \"3.11\"", "build (==1.2.2) ; python_version >= \"3.11\"", "colorama (==0.4.5) ; python_version < \"3.8\"", "colorama (==0.4.6) ; python_version >= \"3.8\"", "exceptiongroup (==1.1.3) ; python_version >= \"3.7\" and python_version < \"3.11\"", "freezegun (==1.1.0) ; python_version < \"3.8\"", "freezegun (==1.5.0) ; python_version >= \"3.8\"", "mypy (==v0.910) ; python_version < \"3.6\"", "mypy (==v0.971) ; python_version == \"3.6\"", "mypy (==v1.13.0) ; python_version >= \"3.8\"", "mypy (==v1.4.1) ; python_version == \"3.7\"", "myst-parser (==4.0.0) ; python_version >= \"3.11\"", "pre-commit (==4.0.1) ; python_version >= \"3.9\"", "pytest (==6.1.2) ; python_version < \"3.8\"", "pytest (==8.3.2) ; python_version >= \"3.8\"", "pytest-cov (==2.12.1) ; python_version < \"3.8\"", "pytest-cov (==5.0.0) ; python_version == \"3.8\"", "pytest-cov (==6.0.0) ; python_version >= \"3.9\"", "pytest-mypy-plugins (==1.9.3) ; python_version >= \"3.6\" and python_version < \"3.8\"", "pytest-mypy-plugins (==3.1.0) ; python_version >= \"3.8\"", "sphinx-rtd-theme (==3.0.2) ; python_version >= \"3.11\"", "tox (==3.27.1) ; python_version < \"3.8\"", "tox (==4.23.2) ; python_version >= \"3.8\"", "twine (==6.0.1) ; python_version >= \"3.11\""]
+dev = ["Sphinx (==8.1.3)", "build (==1.2.2)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.5.0)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.13.0)", "mypy (==v1.4.1)", "myst-parser (==4.0.0)", "pre-commit (==4.0.1)", "pytest (==6.1.2)", "pytest (==8.3.2)", "pytest-cov (==2.12.1)", "pytest-cov (==5.0.0)", "pytest-cov (==6.0.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.1.0)", "sphinx-rtd-theme (==3.0.2)", "tox (==3.27.1)", "tox (==4.23.2)", "twine (==6.0.1)"]
[[package]]
name = "markdown"
@@ -3777,8 +3533,6 @@ version = "3.7"
description = "Python implementation of John Gruber's Markdown."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"},
{file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"},
@@ -3794,8 +3548,6 @@ version = "0.4.0"
description = "Markdown extension: a classier syntax for admonitions"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "markdown_callouts-0.4.0-py3-none-any.whl", hash = "sha256:ed0da38f29158d93116a0d0c6ecaf9df90b37e0d989b5337d678ee6e6d6550b7"},
{file = "markdown_callouts-0.4.0.tar.gz", hash = "sha256:7ed2c90486967058a73a547781121983839522d67041ae52c4979616f1b2b746"},
@@ -3810,8 +3562,6 @@ version = "0.8.1"
description = "A Python-Markdown extension which provides an 'include' function"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "markdown-include-0.8.1.tar.gz", hash = "sha256:1d0623e0fc2757c38d35df53752768356162284259d259c486b4ab6285cdbbe3"},
{file = "markdown_include-0.8.1-py3-none-any.whl", hash = "sha256:32f0635b9cfef46997b307e2430022852529f7a5b87c0075c504283e7cc7db53"},
@@ -3829,8 +3579,6 @@ version = "3.0.0"
description = "Python port of markdown-it. Markdown parsing, done right!"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"},
{file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"},
@@ -3855,8 +3603,6 @@ version = "3.0.2"
description = "Safely add untrusted strings to HTML/XML markup."
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"},
{file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"},
@@ -3927,8 +3673,6 @@ version = "3.26.1"
description = "A lightweight library for converting complex datatypes to and from native Python datatypes."
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c"},
{file = "marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6"},
@@ -3948,8 +3692,6 @@ version = "3.10.1"
description = "Python plotting package"
optional = false
python-versions = ">=3.10"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "matplotlib-3.10.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ff2ae14910be903f4a24afdbb6d7d3a6c44da210fc7d42790b87aeac92238a16"},
{file = "matplotlib-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0721a3fd3d5756ed593220a8b86808a36c5031fce489adb5b31ee6dbb47dd5b2"},
@@ -4007,8 +3749,6 @@ version = "0.1.7"
description = "Inline Matplotlib backend for Jupyter"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"},
{file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"},
@@ -4023,8 +3763,6 @@ version = "0.1.2"
description = "Markdown URL utilities"
optional = false
python-versions = ">=3.7"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
@@ -4036,8 +3774,6 @@ version = "1.3.4"
description = "A deep merge function for 🐍."
optional = false
python-versions = ">=3.6"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"},
{file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"},
@@ -4049,8 +3785,6 @@ version = "3.1.3"
description = "A sane and fast Markdown parser with useful plugins and renderers"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9"},
{file = "mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0"},
@@ -4065,8 +3799,6 @@ version = "1.6.1"
description = "Project documentation with Markdown."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"},
{file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"},
@@ -4089,7 +3821,7 @@ watchdog = ">=2.0"
[package.extras]
i18n = ["babel (>=2.9.0)"]
-min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4) ; platform_system == \"Windows\"", "ghp-import (==1.0)", "importlib-metadata (==4.4) ; python_version < \"3.10\"", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"]
+min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"]
[[package]]
name = "mkdocs-autorefs"
@@ -4097,8 +3829,6 @@ version = "1.0.1"
description = "Automatically link across pages in MkDocs."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocs_autorefs-1.0.1-py3-none-any.whl", hash = "sha256:aacdfae1ab197780fb7a2dac92ad8a3d8f7ca8049a9cbe56a4218cd52e8da570"},
{file = "mkdocs_autorefs-1.0.1.tar.gz", hash = "sha256:f684edf847eced40b570b57846b15f0bf57fb93ac2c510450775dcf16accb971"},
@@ -4115,8 +3845,6 @@ version = "1.0.2"
description = "A mkdocs plugin that lets you exclude files or trees."
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocs-exclude-1.0.2.tar.gz", hash = "sha256:ba6fab3c80ddbe3fd31d3e579861fd3124513708271180a5f81846da8c7e2a51"},
]
@@ -4130,8 +3858,6 @@ version = "0.2.0"
description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"},
{file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"},
@@ -4148,8 +3874,6 @@ version = "2.5.0"
description = "An MkDocs plugin to create a list of contributors on the page. The git-committers plugin will seed the template context with a list of GitHub or GitLab committers and other useful GIT info such as last modified date"
optional = false
python-versions = "<4,>=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocs_git_committers_plugin_2-2.5.0-py3-none-any.whl", hash = "sha256:1778becf98ccdc5fac809ac7b62cf01d3c67d6e8432723dffbb823307d1193c4"},
{file = "mkdocs_git_committers_plugin_2-2.5.0.tar.gz", hash = "sha256:a01f17369e79ca28651681cddf212770e646e6191954bad884ca3067316aae60"},
@@ -4166,8 +3890,6 @@ version = "9.6.9"
description = "Documentation that simply works"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocs_material-9.6.9-py3-none-any.whl", hash = "sha256:6e61b7fb623ce2aa4622056592b155a9eea56ff3487d0835075360be45a4c8d1"},
{file = "mkdocs_material-9.6.9.tar.gz", hash = "sha256:a4872139715a1f27b2aa3f3dc31a9794b7bbf36333c0ba4607cf04786c94f89c"},
@@ -4199,8 +3921,6 @@ version = "1.3.1"
description = "Extension pack for Python Markdown and MkDocs Material."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"},
{file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"},
@@ -4212,8 +3932,6 @@ version = "0.8.0"
description = "An MkDocs plugin to minify HTML, JS or CSS files prior to being written to disk"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d"},
{file = "mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6"},
@@ -4231,8 +3949,6 @@ version = "1.17.1"
description = "MkDocs plugin which generates a static RSS feed using git log and page.meta."
optional = false
python-versions = "<4,>=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocs_rss_plugin-1.17.1-py2.py3-none-any.whl", hash = "sha256:ff81f0ece33befd5a0152c196132e15eb93b4b9f7f53644c6d3db8e9a529e186"},
{file = "mkdocs_rss_plugin-1.17.1.tar.gz", hash = "sha256:9371d30afb0eda7288c946a89b419aa7a0b8e212d2219584c2dbd23ece93a991"},
@@ -4256,8 +3972,6 @@ version = "0.25.2"
description = "Automatic documentation from sources, for MkDocs."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocstrings-0.25.2-py3-none-any.whl", hash = "sha256:9e2cda5e2e12db8bb98d21e3410f3f27f8faab685a24b03b06ba7daa5b92abfc"},
{file = "mkdocstrings-0.25.2.tar.gz", hash = "sha256:5cf57ad7f61e8be3111a2458b4e49c2029c9cb35525393b179f9c916ca8042dc"},
@@ -4284,8 +3998,6 @@ version = "1.10.9"
description = "A Python handler for mkdocstrings."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mkdocstrings_python-1.10.9-py3-none-any.whl", hash = "sha256:cbe98710a6757dfd4dff79bf36cb9731908fb4c69dd2736b15270ae7a488243d"},
{file = "mkdocstrings_python-1.10.9.tar.gz", hash = "sha256:f344aaa47e727d8a2dc911e063025e58e2b7fb31a41110ccc3902aa6be7ca196"},
@@ -4302,8 +4014,6 @@ version = "5.1.0"
description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions."
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mmh3-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:eaf4ac5c6ee18ca9232238364d7f2a213278ae5ca97897cafaa123fcc7bb8bec"},
{file = "mmh3-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:48f9aa8ccb9ad1d577a16104834ac44ff640d8de8c0caed09a2300df7ce8460a"},
@@ -4402,8 +4112,6 @@ version = "1.6"
description = "An implementation of time.monotonic() for Python 2 & < 3.3"
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"},
{file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"},
@@ -4415,8 +4123,6 @@ version = "3.7.0"
description = "Non-blocking MongoDB driver for Tornado or asyncio"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "motor-3.7.0-py3-none-any.whl", hash = "sha256:61bdf1afded179f008d423f98066348157686f25a90776ea155db5f47f57d605"},
{file = "motor-3.7.0.tar.gz", hash = "sha256:0dfa1f12c812bd90819c519b78bed626b5a9dbb29bba079ccff2bfa8627e0fec"},
@@ -4432,7 +4138,7 @@ encryption = ["pymongo[encryption] (>=4.5,<5)"]
gssapi = ["pymongo[gssapi] (>=4.5,<5)"]
ocsp = ["pymongo[ocsp] (>=4.5,<5)"]
snappy = ["pymongo[snappy] (>=4.5,<5)"]
-test = ["aiohttp (>=3.8.7)", "cffi (>=1.17.0rc1) ; python_version == \"3.13\"", "mockupdb", "pymongo[encryption] (>=4.5,<5)", "pytest (>=7)", "pytest-asyncio", "tornado (>=5)"]
+test = ["aiohttp (>=3.8.7)", "cffi (>=1.17.0rc1)", "mockupdb", "pymongo[encryption] (>=4.5,<5)", "pytest (>=7)", "pytest-asyncio", "tornado (>=5)"]
zstd = ["pymongo[zstd] (>=4.5,<5)"]
[[package]]
@@ -4441,8 +4147,6 @@ version = "1.3.0"
description = "Python library for arbitrary-precision floating-point arithmetic"
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"},
{file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"},
@@ -4451,7 +4155,7 @@ files = [
[package.extras]
develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"]
docs = ["sphinx"]
-gmpy = ["gmpy2 (>=2.1.0a4) ; platform_python_implementation != \"PyPy\""]
+gmpy = ["gmpy2 (>=2.1.0a4)"]
tests = ["pytest (>=4.6)"]
[[package]]
@@ -4460,8 +4164,6 @@ version = "1.1.0"
description = "MessagePack serializer"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd"},
{file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d"},
@@ -4535,8 +4237,6 @@ version = "6.2.0"
description = "multidict implementation"
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "multidict-6.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b9f6392d98c0bd70676ae41474e2eecf4c7150cb419237a41f8f96043fcb81d1"},
{file = "multidict-6.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3501621d5e86f1a88521ea65d5cad0a0834c77b26f193747615b7c911e5422d2"},
@@ -4641,8 +4341,6 @@ version = "1.0.0"
description = "Type system extensions for programs checked with the mypy type checker."
optional = false
python-versions = ">=3.5"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
{file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
@@ -4654,8 +4352,6 @@ version = "0.10.2"
description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor."
optional = false
python-versions = ">=3.9.0"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"},
{file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"},
@@ -4678,8 +4374,6 @@ version = "7.16.6"
description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"},
{file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"},
@@ -4716,8 +4410,6 @@ version = "5.10.4"
description = "The Jupyter Notebook format"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"},
{file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"},
@@ -4739,8 +4431,6 @@ version = "1.6.0"
description = "Patch asyncio to allow nested event loops"
optional = false
python-versions = ">=3.5"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"},
{file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"},
@@ -4752,8 +4442,6 @@ version = "3.4.2"
description = "Python package for creating and manipulating graphs and networks"
optional = false
python-versions = ">=3.10"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"},
{file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"},
@@ -4773,8 +4461,6 @@ version = "3.4.1"
description = "The official Nomic python client."
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "nomic-3.4.1.tar.gz", hash = "sha256:509f152474834aac9c0931f4e5ed943c281359dd367ed765626c4ac802d383ba"},
]
@@ -4805,8 +4491,6 @@ version = "7.3.3"
description = "Jupyter Notebook - A web-based notebook environment for interactive computing"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "notebook-7.3.3-py3-none-any.whl", hash = "sha256:b193df0878956562d5171c8e25c9252b8e86c9fcc16163b8ee3fe6c5e3f422f7"},
{file = "notebook-7.3.3.tar.gz", hash = "sha256:707a313fb882d35f921989eb3d204de942ed5132a44e4aa1fe0e8f24bb9dc25d"},
@@ -4822,7 +4506,7 @@ tornado = ">=6.2.0"
[package.extras]
dev = ["hatch", "pre-commit"]
docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
-test = ["importlib-resources (>=5.0) ; python_version < \"3.10\"", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"]
+test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"]
[[package]]
name = "notebook-shim"
@@ -4830,8 +4514,6 @@ version = "0.2.4"
description = "A shim layer for notebook traits and config"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"},
{file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"},
@@ -4849,8 +4531,6 @@ version = "2.10.2"
description = "Fast numerical expression evaluator for NumPy"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "numexpr-2.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5b0e82d2109c1d9e63fcd5ea177d80a11b881157ab61178ddbdebd4c561ea46"},
{file = "numexpr-2.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3fc2b8035a0c2cdc352e58c3875cb668836018065cbf5752cb531015d9a568d8"},
@@ -4899,8 +4579,6 @@ version = "1.26.4"
description = "Fundamental package for array computing in Python"
optional = false
python-versions = ">=3.9"
-groups = ["main", "docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"},
{file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"},
@@ -4946,8 +4624,6 @@ version = "3.2.2"
description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"
optional = false
python-versions = ">=3.6"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"},
{file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"},
@@ -4964,8 +4640,6 @@ version = "0.4.7"
description = "The official Python client for Ollama."
optional = false
python-versions = "<4.0,>=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "ollama-0.4.7-py3-none-any.whl", hash = "sha256:85505663cca67a83707be5fb3aeff0ea72e67846cea5985529d8eca4366564a1"},
{file = "ollama-0.4.7.tar.gz", hash = "sha256:891dcbe54f55397d82d289c459de0ea897e103b86a3f1fad0fdb1895922a75ff"},
@@ -4981,8 +4655,6 @@ version = "1.21.0"
description = "ONNX Runtime is a runtime accelerator for Machine Learning models"
optional = false
python-versions = ">=3.10"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "onnxruntime-1.21.0-cp310-cp310-macosx_13_0_universal2.whl", hash = "sha256:95513c9302bc8dd013d84148dcf3168e782a80cdbf1654eddc948a23147ccd3d"},
{file = "onnxruntime-1.21.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:635d4ab13ae0f150dd4c6ff8206fd58f1c6600636ecc796f6f0c42e4c918585b"},
@@ -5018,8 +4690,6 @@ version = "1.68.2"
description = "The official Python library for the openai API"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "openai-1.68.2-py3-none-any.whl", hash = "sha256:24484cb5c9a33b58576fdc5acf0e5f92603024a4e39d0b99793dfa1eb14c2b36"},
{file = "openai-1.68.2.tar.gz", hash = "sha256:b720f0a95a1dbe1429c0d9bb62096a0d98057bcda82516f6e8af10284bdd5b19"},
@@ -5046,8 +4716,6 @@ version = "1.31.1"
description = "OpenTelemetry Python API"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "opentelemetry_api-1.31.1-py3-none-any.whl", hash = "sha256:1511a3f470c9c8a32eeea68d4ea37835880c0eed09dd1a0187acc8b1301da0a1"},
{file = "opentelemetry_api-1.31.1.tar.gz", hash = "sha256:137ad4b64215f02b3000a0292e077641c8611aab636414632a9b9068593b7e91"},
@@ -5063,8 +4731,6 @@ version = "1.31.1"
description = "OpenTelemetry Protobuf encoding"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "opentelemetry_exporter_otlp_proto_common-1.31.1-py3-none-any.whl", hash = "sha256:7cadf89dbab12e217a33c5d757e67c76dd20ce173f8203e7370c4996f2e9efd8"},
{file = "opentelemetry_exporter_otlp_proto_common-1.31.1.tar.gz", hash = "sha256:c748e224c01f13073a2205397ba0e415dcd3be9a0f95101ba4aace5fc730e0da"},
@@ -5079,8 +4745,6 @@ version = "1.31.1"
description = "OpenTelemetry Collector Protobuf over gRPC Exporter"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "opentelemetry_exporter_otlp_proto_grpc-1.31.1-py3-none-any.whl", hash = "sha256:f4055ad2c9a2ea3ae00cbb927d6253233478b3b87888e197d34d095a62305fae"},
{file = "opentelemetry_exporter_otlp_proto_grpc-1.31.1.tar.gz", hash = "sha256:c7f66b4b333c52248dc89a6583506222c896c74824d5d2060b818ae55510939a"},
@@ -5104,8 +4768,6 @@ version = "0.52b1"
description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "opentelemetry_instrumentation-0.52b1-py3-none-any.whl", hash = "sha256:8c0059c4379d77bbd8015c8d8476020efe873c123047ec069bb335e4b8717477"},
{file = "opentelemetry_instrumentation-0.52b1.tar.gz", hash = "sha256:739f3bfadbbeec04dd59297479e15660a53df93c131d907bb61052e3d3c1406f"},
@@ -5123,8 +4785,6 @@ version = "0.52b1"
description = "ASGI instrumentation for OpenTelemetry"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "opentelemetry_instrumentation_asgi-0.52b1-py3-none-any.whl", hash = "sha256:f7179f477ed665ba21871972f979f21e8534edb971232e11920c8a22f4759236"},
{file = "opentelemetry_instrumentation_asgi-0.52b1.tar.gz", hash = "sha256:a6dbce9cb5b2c2f45ce4817ad21f44c67fd328358ad3ab911eb46f0be67f82ec"},
@@ -5146,8 +4806,6 @@ version = "0.52b1"
description = "OpenTelemetry FastAPI Instrumentation"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "opentelemetry_instrumentation_fastapi-0.52b1-py3-none-any.whl", hash = "sha256:73c8804f053c5eb2fd2c948218bff9561f1ef65e89db326a6ab0b5bf829969f4"},
{file = "opentelemetry_instrumentation_fastapi-0.52b1.tar.gz", hash = "sha256:d26ab15dc49e041301d5c2571605b8f5c3a6ee4a85b60940338f56c120221e98"},
@@ -5169,8 +4827,6 @@ version = "1.31.1"
description = "OpenTelemetry Python Proto"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "opentelemetry_proto-1.31.1-py3-none-any.whl", hash = "sha256:1398ffc6d850c2f1549ce355744e574c8cd7c1dba3eea900d630d52c41d07178"},
{file = "opentelemetry_proto-1.31.1.tar.gz", hash = "sha256:d93e9c2b444e63d1064fb50ae035bcb09e5822274f1683886970d2734208e790"},
@@ -5185,8 +4841,6 @@ version = "1.31.1"
description = "OpenTelemetry Python SDK"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "opentelemetry_sdk-1.31.1-py3-none-any.whl", hash = "sha256:882d021321f223e37afaca7b4e06c1d8bbc013f9e17ff48a7aa017460a8e7dae"},
{file = "opentelemetry_sdk-1.31.1.tar.gz", hash = "sha256:c95f61e74b60769f8ff01ec6ffd3d29684743404603df34b20aa16a49dc8d903"},
@@ -5203,8 +4857,6 @@ version = "0.52b1"
description = "OpenTelemetry Semantic Conventions"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "opentelemetry_semantic_conventions-0.52b1-py3-none-any.whl", hash = "sha256:72b42db327e29ca8bb1b91e8082514ddf3bbf33f32ec088feb09526ade4bc77e"},
{file = "opentelemetry_semantic_conventions-0.52b1.tar.gz", hash = "sha256:7b3d226ecf7523c27499758a58b542b48a0ac8d12be03c0488ff8ec60c5bae5d"},
@@ -5220,8 +4872,6 @@ version = "0.52b1"
description = "Web util for OpenTelemetry"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "opentelemetry_util_http-0.52b1-py3-none-any.whl", hash = "sha256:6a6ab6bfa23fef96f4995233e874f67602adf9d224895981b4ab9d4dde23de78"},
{file = "opentelemetry_util_http-0.52b1.tar.gz", hash = "sha256:c03c8c23f1b75fadf548faece7ead3aecd50761c5593a2b2831b48730eee5b31"},
@@ -5233,8 +4883,6 @@ version = "3.10.15"
description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"},
{file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"},
@@ -5323,8 +4971,6 @@ version = "1.9.0"
description = "Fast, correct Python msgpack library supporting dataclasses, datetimes, and numpy"
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "ormsgpack-1.9.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:9c7cc221489aaf8bf394225a275edf068f3531529def415a8e6e32d6228ee138"},
{file = "ormsgpack-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42a5c5028417e710e5169c77d90b08891299f77ffd87abbb2855ffc62314740a"},
@@ -5360,8 +5006,6 @@ version = "7.7.0"
description = "A decorator to automatically detect mismatch when overriding a method."
optional = false
python-versions = ">=3.6"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"},
{file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"},
@@ -5373,8 +5017,6 @@ version = "24.2"
description = "Core utilities for Python packages"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"},
{file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
@@ -5386,8 +5028,6 @@ version = "0.5.7"
description = "Divides large result sets into pages for easier browsing"
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"},
{file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"},
@@ -5403,8 +5043,6 @@ version = "2.2.3"
description = "Powerful data structures for data analysis, time series, and statistics"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"},
{file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"},
@@ -5491,8 +5129,6 @@ version = "1.5.1"
description = "Utilities for writing pandoc filters in python"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"},
{file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"},
@@ -5504,8 +5140,6 @@ version = "0.8.4"
description = "A Python Parser"
optional = false
python-versions = ">=3.6"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"},
{file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"},
@@ -5521,8 +5155,6 @@ version = "0.12.1"
description = "Utility library for gitignore style pattern matching of file paths."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
{file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
@@ -5534,8 +5166,6 @@ version = "4.9.0"
description = "Pexpect allows easy control of interactive console applications."
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\" and sys_platform != \"win32\" and sys_platform != \"emscripten\""
files = [
{file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"},
{file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"},
@@ -5550,8 +5180,6 @@ version = "10.4.0"
description = "Python Imaging Library (Fork)"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"},
{file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"},
@@ -5640,7 +5268,7 @@ docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline
fpx = ["olefile"]
mic = ["olefile"]
tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
-typing = ["typing-extensions ; python_version < \"3.10\""]
+typing = ["typing-extensions"]
xmp = ["defusedxml"]
[[package]]
@@ -5649,8 +5277,6 @@ version = "4.3.7"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"},
{file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"},
@@ -5667,8 +5293,6 @@ version = "1.5.0"
description = "plugin and hook calling mechanisms for python"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
{file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
@@ -5684,8 +5308,6 @@ version = "3.21.0"
description = "Integrate PostHog into any python application."
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "posthog-3.21.0-py2.py3-none-any.whl", hash = "sha256:1e07626bb5219369dd36826881fa61711713e8175d3557db4657e64ecb351467"},
{file = "posthog-3.21.0.tar.gz", hash = "sha256:62e339789f6f018b6a892357f5703d1f1e63c97aee75061b3dc97c5e5c6a5304"},
@@ -5711,8 +5333,6 @@ version = "0.21.1"
description = "Python client for the Prometheus monitoring system."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"},
{file = "prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb"},
@@ -5727,8 +5347,6 @@ version = "3.0.50"
description = "Library for building powerful interactive command lines in Python"
optional = false
python-versions = ">=3.8.0"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"},
{file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"},
@@ -5743,8 +5361,6 @@ version = "0.3.0"
description = "Accelerated property cache"
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "propcache-0.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:efa44f64c37cc30c9f05932c740a8b40ce359f51882c70883cc95feac842da4d"},
{file = "propcache-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2383a17385d9800b6eb5855c2f05ee550f803878f344f58b6e194de08b96352c"},
@@ -5852,8 +5468,6 @@ version = "5.29.4"
description = ""
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "protobuf-5.29.4-cp310-abi3-win32.whl", hash = "sha256:13eb236f8eb9ec34e63fc8b1d6efd2777d062fa6aaa68268fb67cf77f6839ad7"},
{file = "protobuf-5.29.4-cp310-abi3-win_amd64.whl", hash = "sha256:bcefcdf3976233f8a502d265eb65ea740c989bacc6c30a58290ed0e519eb4b8d"},
@@ -5874,8 +5488,6 @@ version = "7.0.0"
description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7."
optional = false
python-versions = ">=3.6"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25"},
{file = "psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da"},
@@ -5899,8 +5511,6 @@ version = "3.2.6"
description = "PostgreSQL database adapter for Python"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "psycopg-3.2.6-py3-none-any.whl", hash = "sha256:f3ff5488525890abb0566c429146add66b329e20d6d4835662b920cbbf90ac58"},
{file = "psycopg-3.2.6.tar.gz", hash = "sha256:16fa094efa2698f260f2af74f3710f781e4a6f226efe9d1fd0c37f384639ed8a"},
@@ -5912,8 +5522,8 @@ typing-extensions = {version = ">=4.6", markers = "python_version < \"3.13\""}
tzdata = {version = "*", markers = "sys_platform == \"win32\""}
[package.extras]
-binary = ["psycopg-binary (==3.2.6) ; implementation_name != \"pypy\""]
-c = ["psycopg-c (==3.2.6) ; implementation_name != \"pypy\""]
+binary = ["psycopg-binary (==3.2.6)"]
+c = ["psycopg-c (==3.2.6)"]
dev = ["ast-comments (>=1.1.2)", "black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "isort-psycopg", "isort[colors] (>=6.0)", "mypy (>=1.14)", "pre-commit (>=4.0.1)", "types-setuptools (>=57.4)", "wheel (>=0.37)"]
docs = ["Sphinx (>=5.0)", "furo (==2022.6.21)", "sphinx-autobuild (>=2021.3.14)", "sphinx-autodoc-typehints (>=1.12)"]
pool = ["psycopg-pool"]
@@ -5925,8 +5535,6 @@ version = "3.2.6"
description = "PostgreSQL database adapter for Python -- C optimisation distribution"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\" and implementation_name != \"pypy\""
files = [
{file = "psycopg_binary-3.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1b639acb3e24243c23f75700bf6e3af7b76da92523ec7c3196a13aaf0b578453"},
{file = "psycopg_binary-3.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1b5c359173726b38d7acbb9f73270f269591d8031d099c1a70dd3f3d22b0e8a8"},
@@ -6001,8 +5609,6 @@ version = "3.2.6"
description = "Connection Pool for Psycopg"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "psycopg_pool-3.2.6-py3-none-any.whl", hash = "sha256:5887318a9f6af906d041a0b1dc1c60f8f0dda8340c2572b74e10907b51ed5da7"},
{file = "psycopg_pool-3.2.6.tar.gz", hash = "sha256:0f92a7817719517212fbfe2fd58b8c35c1850cdd2a80d36b581ba2085d9148e5"},
@@ -6017,8 +5623,6 @@ version = "0.7.0"
description = "Run a subprocess in a pseudo terminal"
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\" and (os_name != \"nt\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")"
files = [
{file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
{file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
@@ -6030,8 +5634,6 @@ version = "0.2.3"
description = "Safely evaluate AST nodes without side effects"
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"},
{file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"},
@@ -6046,8 +5648,6 @@ version = "19.0.1"
description = "Python library for Apache Arrow"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pyarrow-19.0.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:fc28912a2dc924dddc2087679cc8b7263accc71b9ff025a1362b004711661a69"},
{file = "pyarrow-19.0.1-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:fca15aabbe9b8355800d923cc2e82c8ef514af321e18b437c3d782aa884eaeec"},
@@ -6102,10 +5702,7 @@ version = "0.6.1"
description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
- {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"},
{file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"},
]
@@ -6115,10 +5712,7 @@ version = "0.4.1"
description = "A collection of ASN.1-based protocols modules"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
- {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"},
{file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"},
]
@@ -6131,12 +5725,10 @@ version = "2.22"
description = "C parser in Python"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
files = [
{file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"},
{file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
]
-markers = {docs = "platform_python_implementation == \"PyPy\"", test = "platform_python_implementation == \"PyPy\" and implementation_name == \"pypy\""}
[[package]]
name = "pydantic"
@@ -6144,8 +5736,6 @@ version = "2.10.6"
description = "Data validation using Python type hints"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"},
{file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"},
@@ -6158,7 +5748,7 @@ typing-extensions = ">=4.12.2"
[package.extras]
email = ["email-validator (>=2.0.0)"]
-timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""]
+timezone = ["tzdata"]
[[package]]
name = "pydantic-core"
@@ -6166,8 +5756,6 @@ version = "2.27.2"
description = "Core functionality for Pydantic validation and serialization"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"},
{file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"},
@@ -6280,8 +5868,6 @@ version = "2.8.1"
description = "Settings management using Pydantic"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pydantic_settings-2.8.1-py3-none-any.whl", hash = "sha256:81942d5ac3d905f7f3ee1a70df5dfb62d5569c12f51a5a647defc1c3d9ee2e9c"},
{file = "pydantic_settings-2.8.1.tar.gz", hash = "sha256:d5c663dfbe9db9d5e1c646b2e161da12f0d734d422ee56f567d0ea2cee4e8585"},
@@ -6302,8 +5888,6 @@ version = "11.1.1"
description = "A rough port of Node.js's EventEmitter to Python with a few tricks of its own"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pyee-11.1.1-py3-none-any.whl", hash = "sha256:9e4cdd7c2f9fcf247db94bad39a260aceffefdbe52286ce71be01959de34a5c2"},
{file = "pyee-11.1.1.tar.gz", hash = "sha256:82e1eb1853f8497c4ff1a0c7fa26b9cd2f1253e2b6ffb93b4700fda907017302"},
@@ -6313,7 +5897,7 @@ files = [
typing-extensions = "*"
[package.extras]
-dev = ["black", "build", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio ; python_version >= \"3.4\"", "pytest-trio ; python_version >= \"3.7\"", "sphinx", "toml", "tox", "trio", "trio ; python_version > \"3.6\"", "trio-typing ; python_version > \"3.6\"", "twine", "twisted", "validate-pyproject[all]"]
+dev = ["black", "build", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio", "pytest-trio", "sphinx", "toml", "tox", "trio", "trio", "trio-typing", "twine", "twisted", "validate-pyproject[all]"]
[[package]]
name = "pygments"
@@ -6321,8 +5905,6 @@ version = "2.19.1"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"},
{file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"},
@@ -6337,8 +5919,6 @@ version = "0.3.0"
description = ""
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pygments-ansi-color-0.3.0.tar.gz", hash = "sha256:7018954cf5b11d1e734383a1bafab5af613213f246109417fee3f76da26d5431"},
{file = "pygments_ansi_color-0.3.0-py3-none-any.whl", hash = "sha256:7eb063feaecadad9d4d1fd3474cbfeadf3486b64f760a8f2a00fc25392180aba"},
@@ -6353,8 +5933,6 @@ version = "2.10.1"
description = "JSON Web Token implementation in Python"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"},
{file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"},
@@ -6372,8 +5950,6 @@ version = "10.14.3"
description = "Extension pack for Python Markdown."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pymdown_extensions-10.14.3-py3-none-any.whl", hash = "sha256:05e0bee73d64b9c71a4ae17c72abc2f700e8bc8403755a00580b49a4e9f189e9"},
{file = "pymdown_extensions-10.14.3.tar.gz", hash = "sha256:41e576ce3f5d650be59e900e4ceff231e0aed2a88cf30acaee41e02f063a061b"},
@@ -6392,8 +5968,6 @@ version = "4.11.3"
description = "Python driver for MongoDB "
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pymongo-4.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78f19598246dd61ba2a4fc4dddfa6a4f9af704fff7d81cb4fe0d02c7b17b1f68"},
{file = "pymongo-4.11.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c9cbe81184ec81ad8c76ccedbf5b743639448008d68f51f9a3c8a9abe6d9a46"},
@@ -6460,9 +6034,9 @@ dnspython = ">=1.16.0,<3.0.0"
[package.extras]
aws = ["pymongo-auth-aws (>=1.1.0,<2.0.0)"]
docs = ["furo (==2024.8.6)", "readthedocs-sphinx-search (>=0.3,<1.0)", "sphinx (>=5.3,<9)", "sphinx-autobuild (>=2020.9.1)", "sphinx-rtd-theme (>=2,<4)", "sphinxcontrib-shellcheck (>=1,<2)"]
-encryption = ["certifi ; os_name == \"nt\" or sys_platform == \"darwin\"", "pymongo-auth-aws (>=1.1.0,<2.0.0)", "pymongocrypt (>=1.12.0,<2.0.0)"]
-gssapi = ["pykerberos ; os_name != \"nt\"", "winkerberos (>=0.5.0) ; os_name == \"nt\""]
-ocsp = ["certifi ; os_name == \"nt\" or sys_platform == \"darwin\"", "cryptography (>=2.5)", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"]
+encryption = ["certifi", "pymongo-auth-aws (>=1.1.0,<2.0.0)", "pymongocrypt (>=1.12.0,<2.0.0)"]
+gssapi = ["pykerberos", "winkerberos (>=0.5.0)"]
+ocsp = ["certifi", "cryptography (>=2.5)", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"]
snappy = ["python-snappy"]
test = ["pytest (>=8.2)", "pytest-asyncio (>=0.24.0)"]
zstd = ["zstandard"]
@@ -6473,8 +6047,6 @@ version = "3.2.2"
description = "pyparsing module - Classes and methods to define and execute parsing grammars"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pyparsing-3.2.2-py3-none-any.whl", hash = "sha256:6ab05e1cb111cc72acc8ed811a3ca4c2be2af8d7b6df324347f04fd057d8d793"},
{file = "pyparsing-3.2.2.tar.gz", hash = "sha256:2a857aee851f113c2de9d4bfd9061baea478cb0f1c7ca6cbf594942d6d111575"},
@@ -6489,8 +6061,6 @@ version = "0.48.9"
description = "A SQL query builder API for Python"
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"},
]
@@ -6501,8 +6071,6 @@ version = "2.0.0"
description = "Headless chrome/chromium automation library (unofficial port of puppeteer)"
optional = false
python-versions = ">=3.8,<4.0"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pyppeteer-2.0.0-py3-none-any.whl", hash = "sha256:96f4c574fb36f1d15e02746303ab742b98941f0da58337187e7c1d2ef982adea"},
{file = "pyppeteer-2.0.0.tar.gz", hash = "sha256:4af63473ff36a746a53347b2336a49efda669bcd781e400bc1799b81838358d9"},
@@ -6523,8 +6091,6 @@ version = "1.2.0"
description = "Wrappers to call pyproject.toml-based build backend hooks."
optional = false
python-versions = ">=3.7"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"},
{file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"},
@@ -6536,8 +6102,6 @@ version = "3.5.4"
description = "A python implementation of GNU readline."
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "sys_platform == \"win32\" and platform_python_implementation == \"PyPy\""
files = [
{file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"},
{file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"},
@@ -6552,8 +6116,6 @@ version = "8.3.5"
description = "pytest: simple powerful testing with Python"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"},
{file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"},
@@ -6576,8 +6138,6 @@ version = "0.10.1"
description = "Check links in files"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pytest_check_links-0.10.1-py3-none-any.whl", hash = "sha256:0e4a4313d08d6c5b81a72e133fd8513a3bb0b89d54dec3565da7ae01b74f603e"},
{file = "pytest_check_links-0.10.1.tar.gz", hash = "sha256:7358dd92c8e6c737c8749ec87f5a27c32390445d43182673f89247a1a34d776d"},
@@ -6601,8 +6161,6 @@ version = "2.9.0.post0"
description = "Extensions to the standard Python datetime module"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
{file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
@@ -6617,8 +6175,6 @@ version = "1.0.1"
description = "Read key-value pairs from a .env file and set them as environment variables"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"},
{file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"},
@@ -6633,15 +6189,13 @@ version = "3.3.0"
description = "JSON Log Formatter for the Python Logging Package"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7"},
{file = "python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84"},
]
[package.extras]
-dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"]
+dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"]
[[package]]
name = "pytz"
@@ -6649,8 +6203,6 @@ version = "2025.1"
description = "World timezone definitions, modern and historical"
optional = false
python-versions = "*"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"},
{file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"},
@@ -6662,7 +6214,6 @@ version = "310"
description = "Python for Window Extensions"
optional = false
python-versions = "*"
-groups = ["docs", "test"]
files = [
{file = "pywin32-310-cp310-cp310-win32.whl", hash = "sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1"},
{file = "pywin32-310-cp310-cp310-win_amd64.whl", hash = "sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d"},
@@ -6681,7 +6232,6 @@ files = [
{file = "pywin32-310-cp39-cp39-win32.whl", hash = "sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a"},
{file = "pywin32-310-cp39-cp39-win_amd64.whl", hash = "sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475"},
]
-markers = {docs = "platform_python_implementation != \"PyPy\" and sys_platform == \"win32\"", test = "sys_platform == \"win32\" and platform_python_implementation == \"PyPy\" and (python_version < \"3.13\" or platform_python_implementation != \"PyPy\")"}
[[package]]
name = "pywinpty"
@@ -6689,8 +6239,6 @@ version = "2.0.15"
description = "Pseudo terminal support for Windows from Python."
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\" and os_name == \"nt\""
files = [
{file = "pywinpty-2.0.15-cp310-cp310-win_amd64.whl", hash = "sha256:8e7f5de756a615a38b96cd86fa3cd65f901ce54ce147a3179c45907fa11b4c4e"},
{file = "pywinpty-2.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:9a6bcec2df2707aaa9d08b86071970ee32c5026e10bcc3cc5f6f391d85baf7ca"},
@@ -6707,8 +6255,6 @@ version = "6.0.2"
description = "YAML parser and emitter for Python"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
{file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
@@ -6771,8 +6317,6 @@ version = "0.1"
description = "A custom YAML tag for referencing environment variables in YAML files. "
optional = false
python-versions = ">=3.6"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"},
{file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"},
@@ -6787,8 +6331,6 @@ version = "26.3.0"
description = "Python bindings for 0MQ"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "pyzmq-26.3.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1586944f4736515af5c6d3a5b150c7e8ca2a2d6e46b23057320584d6f2438f4a"},
{file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa7efc695d1fc9f72d91bf9b6c6fe2d7e1b4193836ec530a98faf7d7a7577a58"},
@@ -6894,8 +6436,6 @@ version = "5.2.1"
description = "Python client for Redis database and key-value store"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "redis-5.2.1-py3-none-any.whl", hash = "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4"},
{file = "redis-5.2.1.tar.gz", hash = "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f"},
@@ -6914,8 +6454,6 @@ version = "0.36.2"
description = "JSON Referencing + Python"
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"},
{file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"},
@@ -6932,8 +6470,6 @@ version = "2024.11.6"
description = "Alternative regular expression module, to replace re."
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"},
{file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"},
@@ -7037,8 +6573,6 @@ version = "2.32.3"
description = "Python HTTP for Humans."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"},
{file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"},
@@ -7060,8 +6594,6 @@ version = "2.0.0"
description = "OAuthlib authentication support for Requests."
optional = false
python-versions = ">=3.4"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"},
{file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"},
@@ -7080,8 +6612,6 @@ version = "1.0.0"
description = "A utility belt for advanced users of python-requests"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"},
{file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"},
@@ -7096,8 +6626,6 @@ version = "0.1.4"
description = "A pure python RFC3339 validator"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"},
{file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"},
@@ -7112,8 +6640,6 @@ version = "0.1.1"
description = "Pure python rfc3986 validator"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"},
{file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"},
@@ -7125,8 +6651,6 @@ version = "13.9.4"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
optional = false
python-versions = ">=3.8.0"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"},
{file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"},
@@ -7146,8 +6670,6 @@ version = "0.23.1"
description = "Python bindings to Rust's persistent data structures (rpds)"
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "rpds_py-0.23.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed"},
{file = "rpds_py-0.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c"},
@@ -7260,8 +6782,6 @@ version = "4.9"
description = "Pure-Python RSA implementation"
optional = false
python-versions = ">=3.6,<4"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"},
{file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"},
@@ -7276,8 +6796,6 @@ version = "0.6.9"
description = "An extremely fast Python linter and code formatter, written in Rust."
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "ruff-0.6.9-py3-none-linux_armv6l.whl", hash = "sha256:064df58d84ccc0ac0fcd63bc3090b251d90e2a372558c0f057c3f75ed73e1ccd"},
{file = "ruff-0.6.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:140d4b5c9f5fc7a7b074908a78ab8d384dd7f6510402267bc76c37195c02a7ec"},
@@ -7305,8 +6823,6 @@ version = "1.6.1"
description = "A set of python modules for machine learning and data mining"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "scikit_learn-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d056391530ccd1e501056160e3c9673b4da4805eb67eb2bdf4e983e1f9c9204e"},
{file = "scikit_learn-1.6.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0c8d036eb937dbb568c6242fa598d551d88fb4399c0344d95c001980ec1c7d36"},
@@ -7361,8 +6877,6 @@ version = "1.15.2"
description = "Fundamental algorithms for scientific computing in Python"
optional = false
python-versions = ">=3.10"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "scipy-1.15.2-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a2ec871edaa863e8213ea5df811cd600734f6400b4af272e1c011e69401218e9"},
{file = "scipy-1.15.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:6f223753c6ea76983af380787611ae1291e3ceb23917393079dcc746ba60cfb5"},
@@ -7418,7 +6932,7 @@ numpy = ">=1.23.5,<2.5"
[package.extras]
dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"]
doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"]
-test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
+test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
[[package]]
name = "send2trash"
@@ -7426,17 +6940,15 @@ version = "1.8.3"
description = "Send file to trash natively under Mac OS X, Windows and Linux"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"},
{file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"},
]
[package.extras]
-nativelib = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\"", "pywin32 ; sys_platform == \"win32\""]
-objc = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\""]
-win32 = ["pywin32 ; sys_platform == \"win32\""]
+nativelib = ["pyobjc-framework-Cocoa", "pywin32"]
+objc = ["pyobjc-framework-Cocoa"]
+win32 = ["pywin32"]
[[package]]
name = "setuptools"
@@ -7444,21 +6956,19 @@ version = "78.0.1"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "setuptools-78.0.1-py3-none-any.whl", hash = "sha256:1cc9b32ee94f93224d6c80193cbb768004667aa2f2732a473d6949b0236c1d4e"},
{file = "setuptools-78.0.1.tar.gz", hash = "sha256:4321d2dc2157b976dee03e1037c9f2bc5fea503c0c47d3c9458e0e8e49e659ce"},
]
[package.extras]
-check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""]
-core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"]
+core = ["importlib_metadata (>=6)", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"]
cover = ["pytest-cov"]
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
enabler = ["pytest-enabler (>=2.2)"]
-test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
-type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"]
+test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
+type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"]
[[package]]
name = "shellingham"
@@ -7466,8 +6976,6 @@ version = "1.5.4"
description = "Tool to Detect Surrounding Shell"
optional = false
python-versions = ">=3.7"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"},
{file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"},
@@ -7479,8 +6987,6 @@ version = "1.17.0"
description = "Python 2 and 3 compatibility utilities"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
{file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
@@ -7492,8 +6998,6 @@ version = "5.0.2"
description = "A pure Python implementation of a sliding window memory map manager"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"},
{file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"},
@@ -7505,8 +7009,6 @@ version = "1.3.1"
description = "Sniff out which async library your code is running under"
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"},
{file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"},
@@ -7518,8 +7020,6 @@ version = "2.6"
description = "A modern CSS selector implementation for Beautiful Soup."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"},
{file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"},
@@ -7531,8 +7031,6 @@ version = "2.0.39"
description = "Database Abstraction Library"
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "SQLAlchemy-2.0.39-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:66a40003bc244e4ad86b72abb9965d304726d05a939e8c09ce844d27af9e6d37"},
{file = "SQLAlchemy-2.0.39-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67de057fbcb04a066171bd9ee6bcb58738d89378ee3cabff0bffbf343ae1c787"},
@@ -7628,8 +7126,6 @@ version = "0.6.3"
description = "Extract data from python stack frames and tracebacks for informative displays"
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"},
{file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"},
@@ -7649,8 +7145,6 @@ version = "0.46.1"
description = "The little ASGI library that shines."
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "starlette-0.46.1-py3-none-any.whl", hash = "sha256:77c74ed9d2720138b25875133f3a2dae6d854af2ec37dceb56aef370c1d8a227"},
{file = "starlette-0.46.1.tar.gz", hash = "sha256:3c88d58ee4bd1bb807c0d1acb381838afc7752f9ddaec81bbe4383611d833230"},
@@ -7668,8 +7162,6 @@ version = "1.13.3"
description = "Computer algebra system (CAS) in Python"
optional = false
python-versions = ">=3.8"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"},
{file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"},
@@ -7687,8 +7179,6 @@ version = "9.0.0"
description = "Retry code until it succeeds"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"},
{file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"},
@@ -7704,8 +7194,6 @@ version = "2.5.0"
description = "ANSI color formatting for output in terminal"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\" and python_version < \"3.13\""
files = [
{file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"},
{file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"},
@@ -7720,8 +7208,6 @@ version = "0.18.1"
description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library."
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"},
{file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"},
@@ -7743,8 +7229,6 @@ version = "3.6.0"
description = "threadpoolctl"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"},
{file = "threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e"},
@@ -7756,8 +7240,6 @@ version = "0.9.0"
description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "tiktoken-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:586c16358138b96ea804c034b8acf3f5d3f0258bd2bc3b0227af4af5d622e382"},
{file = "tiktoken-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9c59ccc528c6c5dd51820b3474402f69d9a9e1d656226848ad68a8d5b2e5108"},
@@ -7805,8 +7287,6 @@ version = "1.4.0"
description = "A tiny CSS parser"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"},
{file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"},
@@ -7825,8 +7305,6 @@ version = "0.20.3"
description = ""
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"},
{file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"},
@@ -7956,8 +7434,6 @@ version = "2.2.1"
description = "A lil' TOML parser"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "python_version == \"3.10\" or python_version < \"3.11\" and platform_python_implementation == \"PyPy\""
files = [
{file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"},
{file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"},
@@ -7999,8 +7475,6 @@ version = "6.4.2"
description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"},
{file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"},
@@ -8021,8 +7495,6 @@ version = "4.67.1"
description = "Fast, Extensible Progress Meter"
optional = false
python-versions = ">=3.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"},
{file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"},
@@ -8044,8 +7516,6 @@ version = "5.14.3"
description = "Traitlets Python configuration system"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"},
{file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"},
@@ -8055,14 +7525,29 @@ files = [
docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"]
+[[package]]
+name = "trustcall"
+version = "0.0.38"
+description = "Tenacious & trustworthy tool calling built on LangGraph."
+optional = false
+python-versions = "<4.0,>=3.10"
+files = [
+ {file = "trustcall-0.0.38-py3-none-any.whl", hash = "sha256:90d5441f792059a6d5a08f90d306818363be7aa0f096002e30cfbcceee706351"},
+ {file = "trustcall-0.0.38.tar.gz", hash = "sha256:318d451737d88188254c468ae813d16b7c7b1d19da17d402a52629a0198f4646"},
+]
+
+[package.dependencies]
+dydantic = ">=0.0.8,<1.0.0"
+jsonpatch = ">=1.33,<2.0"
+langgraph = ">=0.2.25"
+langgraph-prebuilt = ">=0.1.2"
+
[[package]]
name = "typer"
version = "0.15.2"
description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
optional = false
python-versions = ">=3.7"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "typer-0.15.2-py3-none-any.whl", hash = "sha256:46a499c6107d645a9c13f7ee46c5d5096cae6f5fc57dd11eccbbb9ae3e44ddfc"},
{file = "typer-0.15.2.tar.gz", hash = "sha256:ab2fab47533a813c49fe1f16b1a370fd5819099c00b119e0633df65f22144ba5"},
@@ -8080,8 +7565,6 @@ version = "2.9.0.20241206"
description = "Typing stubs for python-dateutil"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"},
{file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"},
@@ -8093,8 +7576,6 @@ version = "6.0.12.20241230"
description = "Typing stubs for PyYAML"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6"},
{file = "types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c"},
@@ -8106,8 +7587,6 @@ version = "2.31.0.6"
description = "Typing stubs for requests"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "types-requests-2.31.0.6.tar.gz", hash = "sha256:cd74ce3b53c461f1228a9b783929ac73a666658f223e28ed29753771477b3bd0"},
{file = "types_requests-2.31.0.6-py3-none-any.whl", hash = "sha256:a2db9cb228a81da8348b49ad6db3f5519452dd20a9c1e1a868c83c5fe88fd1a9"},
@@ -8122,8 +7601,6 @@ version = "1.26.25.14"
description = "Typing stubs for urllib3"
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"},
{file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"},
@@ -8135,8 +7612,6 @@ version = "4.12.2"
description = "Backported and Experimental Type Hints for Python 3.8+"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
@@ -8148,8 +7623,6 @@ version = "0.9.0"
description = "Runtime inspection utilities for typing module."
optional = false
python-versions = "*"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"},
{file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"},
@@ -8165,12 +7638,10 @@ version = "2024.2"
description = "Provider of IANA time zone data"
optional = false
python-versions = ">=2"
-groups = ["docs", "test"]
files = [
{file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"},
{file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"},
]
-markers = {docs = "platform_python_implementation == \"PyPy\" and sys_platform == \"win32\"", test = "platform_python_implementation == \"PyPy\""}
[[package]]
name = "uri-template"
@@ -8178,8 +7649,6 @@ version = "1.3.0"
description = "RFC 6570 URI Template Processor"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"},
{file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"},
@@ -8194,16 +7663,14 @@ version = "1.26.20"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"},
{file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"},
]
[package.extras]
-brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""]
-secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
+brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
+secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
@@ -8212,8 +7679,6 @@ version = "0.34.0"
description = "The lightning-fast ASGI server."
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4"},
{file = "uvicorn-0.34.0.tar.gz", hash = "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9"},
@@ -8227,12 +7692,12 @@ httptools = {version = ">=0.6.3", optional = true, markers = "extra == \"standar
python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""}
typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
-uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
+uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""}
[package.extras]
-standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"]
+standard = ["colorama (>=0.4)", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
[[package]]
name = "uvloop"
@@ -8240,8 +7705,6 @@ version = "0.21.0"
description = "Fast implementation of asyncio event loop on top of libuv"
optional = false
python-versions = ">=3.8.0"
-groups = ["test"]
-markers = "platform_python_implementation != \"PyPy\" and sys_platform != \"win32\" and sys_platform != \"cygwin\""
files = [
{file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"},
{file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"},
@@ -8293,8 +7756,6 @@ version = "6.0.2"
description = "Automatically mock your HTTP interactions to simplify and speed up testing"
optional = false
python-versions = ">=3.8"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "vcrpy-6.0.2-py2.py3-none-any.whl", hash = "sha256:40370223861181bc76a5e5d4b743a95058bb1ad516c3c08570316ab592f56cad"},
{file = "vcrpy-6.0.2.tar.gz", hash = "sha256:88e13d9111846745898411dbc74a75ce85870af96dd320d75f1ee33158addc09"},
@@ -8318,8 +7779,6 @@ version = "6.0.0"
description = "Filesystem events monitoring"
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"},
{file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"},
@@ -8362,8 +7821,6 @@ version = "1.0.4"
description = "Simple, modern and high performance file watching and code reload in python."
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "watchfiles-1.0.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ba5bb3073d9db37c64520681dd2650f8bd40902d991e7b4cfaeece3e32561d08"},
{file = "watchfiles-1.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f25d0ba0fe2b6d2c921cf587b2bf4c451860086534f40c384329fb96e2044d1"},
@@ -8447,8 +7904,6 @@ version = "0.2.13"
description = "Measures the displayed width of unicode strings in a terminal"
optional = false
python-versions = "*"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"},
{file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"},
@@ -8460,8 +7915,6 @@ version = "24.11.1"
description = "A library for working with the color formats defined by HTML and CSS."
optional = false
python-versions = ">=3.9"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"},
{file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"},
@@ -8473,8 +7926,6 @@ version = "0.5.1"
description = "Character encoding aliases for legacy web content"
optional = false
python-versions = "*"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
{file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
@@ -8486,8 +7937,6 @@ version = "1.8.0"
description = "WebSocket client for Python with low level API options"
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"},
{file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"},
@@ -8504,8 +7953,6 @@ version = "10.4"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
optional = false
python-versions = ">=3.7"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"},
{file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"},
@@ -8584,8 +8031,6 @@ version = "4.0.13"
description = "Jupyter interactive widgets for Jupyter Notebook"
optional = false
python-versions = ">=3.7"
-groups = ["docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71"},
{file = "widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6"},
@@ -8597,15 +8042,13 @@ version = "1.2.0"
description = "A small Python utility to set file creation time on Windows"
optional = false
python-versions = ">=3.5"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\" and sys_platform == \"win32\""
files = [
{file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"},
{file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"},
]
[package.extras]
-dev = ["black (>=19.3b0) ; python_version >= \"3.6\"", "pytest (>=4.6.2)"]
+dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
[[package]]
name = "wrapt"
@@ -8613,8 +8056,6 @@ version = "1.17.2"
description = "Module for decorators, wrappers and monkey patching."
optional = false
python-versions = ">=3.8"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"},
{file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"},
@@ -8703,8 +8144,6 @@ version = "1.2.0"
description = "WebSockets state-machine based protocol implementation"
optional = false
python-versions = ">=3.7.0"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"},
{file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"},
@@ -8719,8 +8158,6 @@ version = "3.5.0"
description = "Python binding for xxHash"
optional = false
python-versions = ">=3.7"
-groups = ["main", "docs"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"},
{file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"},
@@ -8853,8 +8290,6 @@ version = "1.18.3"
description = "Yet another URL library"
optional = false
python-versions = ">=3.9"
-groups = ["docs", "test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"},
{file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"},
@@ -8951,22 +8386,132 @@ version = "3.21.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
optional = false
python-versions = ">=3.9"
-groups = ["test"]
-markers = "platform_python_implementation == \"PyPy\""
files = [
{file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"},
{file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"},
]
[package.extras]
-check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
cover = ["pytest-cov"]
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
enabler = ["pytest-enabler (>=2.2)"]
-test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"]
+test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"]
type = ["pytest-mypy"]
+[[package]]
+name = "zstandard"
+version = "0.23.0"
+description = "Zstandard bindings for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"},
+ {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"},
+ {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc"},
+ {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573"},
+ {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391"},
+ {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e"},
+ {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd"},
+ {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4"},
+ {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea"},
+ {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2"},
+ {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9"},
+ {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a"},
+ {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0"},
+ {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c"},
+ {file = "zstandard-0.23.0-cp310-cp310-win32.whl", hash = "sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813"},
+ {file = "zstandard-0.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4"},
+ {file = "zstandard-0.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e"},
+ {file = "zstandard-0.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23"},
+ {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a"},
+ {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db"},
+ {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2"},
+ {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca"},
+ {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c"},
+ {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e"},
+ {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5"},
+ {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48"},
+ {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c"},
+ {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003"},
+ {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78"},
+ {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473"},
+ {file = "zstandard-0.23.0-cp311-cp311-win32.whl", hash = "sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160"},
+ {file = "zstandard-0.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0"},
+ {file = "zstandard-0.23.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094"},
+ {file = "zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8"},
+ {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1"},
+ {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072"},
+ {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20"},
+ {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373"},
+ {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db"},
+ {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772"},
+ {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105"},
+ {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba"},
+ {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd"},
+ {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a"},
+ {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90"},
+ {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35"},
+ {file = "zstandard-0.23.0-cp312-cp312-win32.whl", hash = "sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d"},
+ {file = "zstandard-0.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b"},
+ {file = "zstandard-0.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9"},
+ {file = "zstandard-0.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a"},
+ {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2"},
+ {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5"},
+ {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f"},
+ {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed"},
+ {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea"},
+ {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847"},
+ {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171"},
+ {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840"},
+ {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690"},
+ {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b"},
+ {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057"},
+ {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33"},
+ {file = "zstandard-0.23.0-cp313-cp313-win32.whl", hash = "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd"},
+ {file = "zstandard-0.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b"},
+ {file = "zstandard-0.23.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc"},
+ {file = "zstandard-0.23.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740"},
+ {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54"},
+ {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8"},
+ {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045"},
+ {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152"},
+ {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26"},
+ {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db"},
+ {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512"},
+ {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e"},
+ {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d"},
+ {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d"},
+ {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b"},
+ {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e"},
+ {file = "zstandard-0.23.0-cp38-cp38-win32.whl", hash = "sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9"},
+ {file = "zstandard-0.23.0-cp38-cp38-win_amd64.whl", hash = "sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f"},
+ {file = "zstandard-0.23.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb"},
+ {file = "zstandard-0.23.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916"},
+ {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a"},
+ {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259"},
+ {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4"},
+ {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58"},
+ {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15"},
+ {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269"},
+ {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700"},
+ {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9"},
+ {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69"},
+ {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70"},
+ {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2"},
+ {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5"},
+ {file = "zstandard-0.23.0-cp39-cp39-win32.whl", hash = "sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274"},
+ {file = "zstandard-0.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58"},
+ {file = "zstandard-0.23.0.tar.gz", hash = "sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09"},
+]
+
+[package.dependencies]
+cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\""}
+
+[package.extras]
+cffi = ["cffi (>=1.11)"]
+
[metadata]
-lock-version = "2.1"
+lock-version = "2.0"
python-versions = "^3.10"
-content-hash = "7b095e50d27f4889270fe6a58f00a9cf70de874b205e98a581ed7f846f4dbaed"
+content-hash = "2e0bb610ec5a07c2a8c639c05f26b260dabbaa542f572b998e3439d286a532f7"
diff --git a/docs/pyproject.toml b/docs/pyproject.toml
index b01cf3363..f49da1c25 100644
--- a/docs/pyproject.toml
+++ b/docs/pyproject.toml
@@ -50,7 +50,8 @@ langchain-community = "^0.3.0"
langchain-experimental = "^0.3.2"
langchain-mistralai = "^0.2.6"
langgraph-checkpoint-mongodb = "^0.1.0"
-langsmith = "^0.2.0"
+langmem = "^0.0.19"
+langsmith = "^0.3.0"
chromadb = "^0.5.5"
gpt4all = "^2.8.2"
scikit-learn = "^1.5.2"