From 905a5e886900888584aeac24edc7b07d6533f48f Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Thu, 28 Mar 2024 19:17:40 -0300 Subject: [PATCH 01/17] initial notebook --- crewai_multiple_agent.ipynb | 602 ++++++++++ poetry.lock | 2106 ++++++++++++++++++++++++++++++++++- pyproject.toml | 2 +- 3 files changed, 2699 insertions(+), 11 deletions(-) create mode 100644 crewai_multiple_agent.ipynb diff --git a/crewai_multiple_agent.ipynb b/crewai_multiple_agent.ipynb new file mode 100644 index 00000000..37ebb5da --- /dev/null +++ b/crewai_multiple_agent.ipynb @@ -0,0 +1,602 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "10a61ab9-30de-49f0-ac39-9ab6186f7d64", + "metadata": {}, + "outputs": [], + "source": [ + "import crewai\n", + "import json\n", + "import os\n", + "from crewai import Agent\n", + "from crewai_tools import SerperDevTool\n", + "from dotenv import load_dotenv" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "0c1b1f7b-6759-4235-afc2-facc894b39d6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "load_dotenv()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c190d470-ab75-4843-8aa7-ad99ac5013ac", + "metadata": {}, + "outputs": [], + "source": [ + "from crewai import Crew, Process, Agent, Task\n", + "search_tool = SerperDevTool()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "79d8bd8f-7098-4287-b4ad-c5bd89c1fba5", + "metadata": {}, + "outputs": [], + "source": [ + "# Define your agents\n", + "researcher = Agent(\n", + " role='Researcher',\n", + " goal='Conduct foundational research',\n", + " backstory='An experienced researcher with a passion for uncovering insights'\n", + ")\n", + "\n", + "analyst = Agent(\n", + " role='Data Analyst',\n", + " goal='Analyze research findings',\n", + " backstory='A meticulous analyst with a knack for uncovering patterns'\n", + ")\n", + "\n", + "writer = Agent(\n", + " role='Writer',\n", + " goal='Draft the final report',\n", + " backstory='A skilled writer with a talent for crafting compelling narratives'\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9c03eaaa-41e1-450c-a5e5-08e10dd58261", + "metadata": {}, + "outputs": [], + "source": [ + "# Define the tasks in sequence\n", + "# Research task\n", + "research_task = Task(\n", + " description=(\n", + " \"\"\"\n", + " Interpret the question, marked by [QUESTION], and generate mutually exclusive questions. This means that one of\n", + " the questions must be true and the other answer must necessarily be false.\n", + " \n", + " Example 1:\n", + "\n", + " Question - \"Will Instagram achieve 100,000 users by the end of 2025?\"\n", + " Output - '''\n", + " 1 - Will Instagram achieve 100,000 or more users by the end of 2025?\n", + " 2 - Will Instagram achieve less than 100,000 users by the end of 2025?\n", + "\n", + " \n", + " '''\n", + " \n", + " [QUESTION]\n", + " {{question}}\n", + " \"\"\"\n", + " ),\n", + " expected_output='''\n", + " A list containing 2 bullet points. Each bullet point should contain one question. \n", + " The two questions must be mutually exclusive.\n", + " ''',\n", + " #tools=[search_tool],\n", + " tools = [],\n", + " agent=researcher,\n", + ")\n", + "#analysis_task = Task(description='Analyze the data...', agent=analyst)\n", + "#writing_task = Task(description='Compose the report...', agent=writer)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8e4e7f91-bcf9-423c-9f76-8891739b260c", + "metadata": {}, + "outputs": [], + "source": [ + "# Form the crew with a sequential process\n", + "report_crew = Crew(\n", + " agents=[researcher],\n", + " #tasks=[research_task, analysis_task, writing_task],\n", + " tasks=[research_task],\n", + " process=Process.sequential\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "05dd3975-b123-4369-a43b-e04613b7d65e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I regret to inform that I can't provide the final answer without the original question to interpret. Please provide the original question so that I can generate the mutually exclusive questions.\n" + ] + } + ], + "source": [ + "# Starting the task execution process with enhanced feedback\n", + "result = report_crew.kickoff(inputs={'question': 'Will Gnosis Pay reach 100k users by 2024?'})\n", + "print(result)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8b5518bb-edcf-40ba-ae98-2ecdbed757d5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 - Will the price of crypto increase in the next 2 months?\n", + "2 - Will the price of crypto not increase in the next 2 months?\n" + ] + } + ], + "source": [ + "question = 'Will the price of crypto go up again in the next 2 months?'\n", + "result = report_crew.kickoff(inputs={'question': question})\n", + "print(result)" + ] + }, + { + "cell_type": "markdown", + "id": "7b939c1f-a658-458e-b88c-87a27e76595b", + "metadata": {}, + "source": [ + "# Other approach" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "c4152d0b-7a0e-424b-9c24-a8b97d97441e", + "metadata": {}, + "outputs": [], + "source": [ + "# Define the tasks in sequence\n", + "# Research task\n", + "research_prompt = \"\"\"\n", + " You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes.\n", + " You should break down the SCENARIO into a list of possible outcomes.\n", + " \n", + " Example 1:\n", + " - SCENARIO: Will Gnosis Pay reach 100,000 users by 2025?\n", + " - Answer: '''\n", + " - Gnosis Pay reaches less than 25,000 users by 2025\n", + " - Gnosis Pay reaches more than 25,000 users but less than 50,000 users by 2025\n", + " - Gnosis Pay reaches more than 50,000 users but less than 75,000 users by 2025\n", + " - Gnosis Pay reaches 100,000 users or more by 2025\n", + " '''\n", + "\n", + " Example 2:\n", + " - SCENARIO: Will the price of Bitcoin go up again in the next 2 months?\n", + " - Answer: '''\n", + " - The price of crypto will go up in the next 2 months\n", + " - The price of crypto will not go up in the next 2 months\n", + " '''\n", + " \n", + " [SCENARIO]\n", + " {scenario}\n", + " \"\"\"\n", + "expected_output = '''\n", + " A list containing multiple bullet points. Each bullet point should contain a possible outcome resulting from the\n", + " provided SCENARIO. The produced outcomes should be mutually exclusive, i.e. only one of them should be true whereas\n", + " the remaining ones should be false.\n", + " '''\n", + "#analysis_task = Task(description='Analyze the data...', agent=analyst)\n", + "#writing_task = Task(description='Compose the report...', agent=writer)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3420ddae-85be-4ba5-81b8-be8543ea26ce", + "metadata": {}, + "outputs": [], + "source": [ + "def print_outcomes(question:str) -> None:\n", + " research_task = Task(\n", + " description=(research_prompt),\n", + " expected_output=expected_output,\n", + " #tools=[search_tool],\n", + " tools = [],\n", + " agent=researcher,\n", + ")\n", + "\n", + "\n", + " report_crew = Crew(\n", + " agents=[researcher],\n", + " tasks=[research_task],\n", + " process=Process.sequential\n", + " )\n", + " result = report_crew.kickoff(inputs={'scenario': question})\n", + " print(result)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "b2675c76-fba3-45eb-b29c-dd407fd98cac", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-28 18:13:54,197 - 140148875154688 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- Smart accounts fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + "- Smart accounts partially replace EOAs in the EVM ecosystem within the next 3-5 years, but EOAs still maintain a significant presence\n", + "- Smart accounts are adopted by a small minority within the EVM ecosystem, with the majority continuing to use EOAs within the next 3-5 years\n", + "- Smart accounts are not adopted at all within the EVM ecosystem in the next 3-5 years, with EOAs maintaining full dominance.\n" + ] + } + ], + "source": [ + "question = 'Will smart accounts replace EOAs in the EVM ecosystem in the next 3-5 years?'\n", + "print_outcomes(question)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "500a0dfe-233b-4a90-9183-e39e799a023d", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-28 18:14:07,577 - 140148875154688 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- The temperature will be above 20C on May 24, 2024 in Berlin.\n", + "- The temperature will be exactly 20C on May 24, 2024 in Berlin.\n", + "- The temperature will be below 20C but above 10C on May 24, 2024 in Berlin.\n", + "- The temperature will be below 10C but above 0C on May 24, 2024 in Berlin.\n", + "- The temperature will be below 0C on May 24, 2024 in Berlin.\n" + ] + } + ], + "source": [ + "question = 'Will the temperature be above 20C on May 24, 2024 in Berlin?'\n", + "print_outcomes(question)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "2e1cb34b-3913-4af3-a07b-623eef09c270", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-28 18:14:19,996 - 140148875154688 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- The exchange rate between Euro and Dollar will reach parity (1€ equals 1$) before 2027\n", + "- The exchange rate between Euro and Dollar will not reach parity before 2027, but will come close (1€ equals between 1.01$ - 1.10$)\n", + "- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Euro remaining stronger (1€ equals more than 1.10$)\n", + "- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Dollar remaining stronger (1€ equals less than 0.90$)\n" + ] + } + ], + "source": [ + "question = 'Will there be a period in the currency market where 1€ equals 1$ before 2027?'\n", + "print_outcomes(question)" + ] + }, + { + "cell_type": "markdown", + "id": "d17b1602-f3ee-4f52-8e34-a7c034cebe4b", + "metadata": {}, + "source": [ + "## Return probability of each affirmation" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "10307714-e445-4c09-a2a3-18884b46941a", + "metadata": {}, + "outputs": [], + "source": [ + "researcher = Agent(\n", + " role=\"Research Analyst\",\n", + " goal=\"Research and report on some future event, giving high quality and nuanced analysis\",\n", + " backstory=\"You are a senior research analyst who is adept at researching and reporting on future events.\",\n", + " verbose=True,\n", + " allow_delegation=False,\n", + " tools=[search_tool],\n", + " )\n", + "predictor = Agent(\n", + " role=\"Professional Gambler\",\n", + " goal=\"Predict, based on some research you are presented with, whether or not a given event will occur\",\n", + " backstory=\"You are a professional gambler who is adept at predicting and betting on the outcomes of future events.\",\n", + " verbose=True,\n", + " allow_delegation=False,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "ce8c6c61-23e5-43bb-833a-4d2fb40a48dd", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-28 18:50:54,294 - 140148875154688 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + } + ], + "source": [ + "\n", + "task1 = Task(\n", + " description=(\"\"\"\n", + " Research and report on the following sentence:\n", + " {sentence}\n", + " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", + " \"\"\"\n", + " ),\n", + " tools=[search_tool],\n", + " agent=researcher,\n", + " expected_output=(\"\"\"\n", + " Return your answer in raw JSON format, with no special formatting such as newlines, as follows:\n", + " {{\"report\": }}\n", + " where is a free text field that contains a well though out justification \n", + " for the predicition based on the summary of your findings.\n", + " \"\"\"),\n", + " )\n", + "task2 = Task(\n", + " description=(\"\"\"\n", + " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", + "Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", + "* Focus on the affirmation inside double quotes in 'SENTENCE'.\n", + "* The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", + "* Use the tools provided to aid your estimation.\n", + "* Evaluate recent information more heavily than older information.\n", + "* Your response should include:\n", + " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", + " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + " \n", + " Ensure p_yes + p_no equals 1.\n", + "\n", + " SENTENCE: {sentence}\n", + " \"\"\"\n", + " ),\n", + " expected_output=\"\"\"\n", + " Your response should include:\n", + "- \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + "- \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + "- \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + "- \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to \n", + "1 (maximum confidence). Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + " \"\"\",\n", + " agent=predictor,\n", + " )\n", + "crew = Crew(\n", + " agents=[researcher, predictor],\n", + " tasks=[task1, task2],\n", + " verbose=2,\n", + " )\n" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "7af9ade5-e35e-4239-9610-9f0a14ec8cc4", + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'\"report\"'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[61], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m sentence \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mThe temperature will be above 20C on May 24, 2024 in Berlin.\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m----> 2\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mcrew\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkickoff\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msentence\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43msentence\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniconda3/envs/PMA/lib/python3.10/site-packages/crewai/crew.py:189\u001b[0m, in \u001b[0;36mCrew.kickoff\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 187\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Starts the crew to work on its assigned tasks.\"\"\"\u001b[39;00m\n\u001b[1;32m 188\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_execution_span \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_telemetry\u001b[38;5;241m.\u001b[39mcrew_execution_span(\u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m--> 189\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_interpolate_inputs\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 191\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m agent \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39magents:\n\u001b[1;32m 192\u001b[0m agent\u001b[38;5;241m.\u001b[39mi18n \u001b[38;5;241m=\u001b[39m I18N(language\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlanguage)\n", + "File \u001b[0;32m~/miniconda3/envs/PMA/lib/python3.10/site-packages/crewai/crew.py:279\u001b[0m, in \u001b[0;36mCrew._interpolate_inputs\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_interpolate_inputs\u001b[39m(\u001b[38;5;28mself\u001b[39m, inputs: Dict[\u001b[38;5;28mstr\u001b[39m, Any]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[1;32m 278\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Interpolates the inputs in the tasks and agents.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 279\u001b[0m [task\u001b[38;5;241m.\u001b[39minterpolate_inputs(inputs) \u001b[38;5;28;01mfor\u001b[39;00m task \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtasks]\n\u001b[1;32m 280\u001b[0m [agent\u001b[38;5;241m.\u001b[39minterpolate_inputs(inputs) \u001b[38;5;28;01mfor\u001b[39;00m agent \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39magents]\n", + "File \u001b[0;32m~/miniconda3/envs/PMA/lib/python3.10/site-packages/crewai/crew.py:279\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_interpolate_inputs\u001b[39m(\u001b[38;5;28mself\u001b[39m, inputs: Dict[\u001b[38;5;28mstr\u001b[39m, Any]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[1;32m 278\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Interpolates the inputs in the tasks and agents.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 279\u001b[0m [\u001b[43mtask\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minterpolate_inputs\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m task \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtasks]\n\u001b[1;32m 280\u001b[0m [agent\u001b[38;5;241m.\u001b[39minterpolate_inputs(inputs) \u001b[38;5;28;01mfor\u001b[39;00m agent \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39magents]\n", + "File \u001b[0;32m~/miniconda3/envs/PMA/lib/python3.10/site-packages/crewai/task.py:194\u001b[0m, in \u001b[0;36mTask.interpolate_inputs\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 192\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inputs:\n\u001b[1;32m 193\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdescription \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdescription\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39minputs)\n\u001b[0;32m--> 194\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexpected_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexpected_output\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mformat\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mKeyError\u001b[0m: '\"report\"'" + ] + } + ], + "source": [ + "sentence = 'The temperature will be above 20C on May 24, 2024 in Berlin.'\n", + "result = crew.kickoff(inputs={'sentence': sentence})" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "15e8eb0b-e4cc-4760-ac05-31d05c699b6f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result {'decision': 'y', 'p_yes': 0.6, 'p_no': 0.4, 'confidence': 0.5}\n", + "True\n" + ] + } + ], + "source": [ + "#assert \"report\" in report\n", + "loaded_result = json.loads(result)\n", + "#assert \"prediction\" in result\n", + "print (f'result {loaded_result}')\n", + "print(True if loaded_result[\"decision\"] == \"y\" else False)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "dedfcae4-2907-4f08-a17b-08c91a12f2ff", + "metadata": {}, + "outputs": [], + "source": [ + "report = json.loads(task1.output.result())" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "cd0a9365-cb7b-4761-8e74-3804043fcaf1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'report': \"Historical weather data indicates that the average high temperatures in Berlin during May range between 63°F (17.2°C) to 69°F (20.5°C). Therefore, it's possible that the temperature could exceed 20°C on May 24, 2024. However, without specific long-term forecasts for this date, a definitive prediction cannot be made. The actual temperature will depend on a variety of factors including global weather patterns and local conditions closer to the date.\"}" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "report" + ] + }, + { + "cell_type": "markdown", + "id": "531c4d44-486d-402b-b75d-dcd415b624ac", + "metadata": {}, + "source": [ + "# Next steps\n", + "'''\n", + "- Improve sentence generation - tell LLM to generate correct outcome first, then\n", + "alternate outcomes afterwards.\n", + "- Run script for each sentence\n", + "- For each sentence, get highest probability (p_yes or p_no), multiply by confidence\n", + "- Get sentence which makes the question be true and get likelihood from that\n", + "'''\n" + ] + }, + { + "cell_type": "markdown", + "id": "12d898db-780a-41ad-8a29-f0c4553daa3f", + "metadata": {}, + "source": [ + "Example\n", + "\n", + "Q - Will the temperature be above 20C on May 24, 2024 in Berlin?\n", + "\n", + "Outcomes:\n", + "1 - The temperature will be above 20C on May 24, 2024 in Berlin.\n", + "2 - The temperature will be exactly 20C on May 24, 2024 in Berlin.\n", + "3 - The temperature will be below 20C but above 10C on May 24, 2024 in Berlin.\n", + "4 - The temperature will be below 10C but above 0C on May 24, 2024 in Berlin.\n", + "5 - The temperature will be below 0C on May 24, 2024 in Berlin.\n", + "\n", + "We process the LLMs for each outcome, and we get the following\n", + "\n", + "1 - {confidence: 0.5, p_yes: 0.6, p_no: 0.4} -> p_yes selected (p_yes > p_no) -> 0.6 * 0.5 = 0.3 \n", + "2 - {confidence: 0.9, p_yes: 0.9, p_no: 0.1} -> \n", + "3 - {confidence: 0.4, p_yes: 0.8, p_no: 0.2}\n", + "4 - {confidence: 0.3, p_yes: 0.7, p_no: 0.3}\n", + "5 - {confidence: 0.4, p_yes: 0.7, p_no: 0.3}\n", + "\n", + "Note that outcome 1 is always a rephrase of the question. So we are only interUested in that outcome.\n", + "The idea is, however, that we can \"normalize\" that outcome by the other probabilities and confidences.\n", + "\n", + "I have 2 ideas I would like to suggest:\n", + "-> Get highest probability (max(p_yes,p_no)), normalize by the other probabilities, return that as probability that\n", + "the question is true\n", + "-> Use confidence as a \"weight\" for the probability before normalizing like above, i.e. \n", + "\n", + "$\\sum(w_i * p_i) = 1$\n", + "\n", + "and we return the normalized $(w_i * p_i)$ as the probability." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f45ce677-95a3-4018-9ae1-7bad121098aa", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/poetry.lock b/poetry.lock index a783fc6d..edaaf890 100644 --- a/poetry.lock +++ b/poetry.lock @@ -110,6 +110,25 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "alembic" +version = "1.13.1" +description = "A database migration tool for SQLAlchemy." +optional = false +python-versions = ">=3.8" +files = [ + {file = "alembic-1.13.1-py3-none-any.whl", hash = "sha256:2edcc97bed0bd3272611ce3a98d98279e9c209e7186e43e75bbb1b2bdfdbcc43"}, + {file = "alembic-1.13.1.tar.gz", hash = "sha256:4932c8558bf68f2ee92b9bbcb8218671c627064d5b08939437af6d77dc05e595"}, +] + +[package.dependencies] +Mako = "*" +SQLAlchemy = ">=1.3.0" +typing-extensions = ">=4" + +[package.extras] +tz = ["backports.zoneinfo"] + [[package]] name = "altair" version = "5.2.0" @@ -167,6 +186,23 @@ doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphin test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (>=0.23)"] +[[package]] +name = "asgiref" +version = "3.8.1" +description = "ASGI specs, helper code, and adapters" +optional = false +python-versions = ">=3.8" +files = [ + {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, + {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} + +[package.extras] +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] + [[package]] name = "async-timeout" version = "4.0.3" @@ -212,6 +248,57 @@ files = [ pyflakes = ">=3.0.0" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + +[[package]] +name = "bcrypt" +version = "4.1.2" +description = "Modern password hashing for your software and your servers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "bcrypt-4.1.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ac621c093edb28200728a9cca214d7e838529e557027ef0581685909acd28b5e"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea505c97a5c465ab8c3ba75c0805a102ce526695cd6818c6de3b1a38f6f60da1"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57fa9442758da926ed33a91644649d3e340a71e2d0a5a8de064fb621fd5a3326"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb3bd3321517916696233b5e0c67fd7d6281f0ef48e66812db35fc963a422a1c"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6cad43d8c63f34b26aef462b6f5e44fdcf9860b723d2453b5d391258c4c8e966"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:44290ccc827d3a24604f2c8bcd00d0da349e336e6503656cb8192133e27335e2"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:732b3920a08eacf12f93e6b04ea276c489f1c8fb49344f564cca2adb663b3e4c"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c28973decf4e0e69cee78c68e30a523be441972c826703bb93099868a8ff5b5"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b8df79979c5bae07f1db22dcc49cc5bccf08a0380ca5c6f391cbb5790355c0b0"}, + {file = "bcrypt-4.1.2-cp37-abi3-win32.whl", hash = "sha256:fbe188b878313d01b7718390f31528be4010fed1faa798c5a1d0469c9c48c369"}, + {file = "bcrypt-4.1.2-cp37-abi3-win_amd64.whl", hash = "sha256:9800ae5bd5077b13725e2e3934aa3c9c37e49d3ea3d06318010aa40f54c63551"}, + {file = "bcrypt-4.1.2-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:71b8be82bc46cedd61a9f4ccb6c1a493211d031415a34adde3669ee1b0afbb63"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e3c6642077b0c8092580c819c1684161262b2e30c4f45deb000c38947bf483"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:387e7e1af9a4dd636b9505a465032f2f5cb8e61ba1120e79a0e1cd0b512f3dfc"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f70d9c61f9c4ca7d57f3bfe88a5ccf62546ffbadf3681bb1e268d9d2e41c91a7"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2a298db2a8ab20056120b45e86c00a0a5eb50ec4075b6142db35f593b97cb3fb"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ba55e40de38a24e2d78d34c2d36d6e864f93e0d79d0b6ce915e4335aa81d01b1"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3566a88234e8de2ccae31968127b0ecccbb4cddb629da744165db72b58d88ca4"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b90e216dc36864ae7132cb151ffe95155a37a14e0de3a8f64b49655dd959ff9c"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:69057b9fc5093ea1ab00dd24ede891f3e5e65bee040395fb1e66ee196f9c9b4a"}, + {file = "bcrypt-4.1.2-cp39-abi3-win32.whl", hash = "sha256:02d9ef8915f72dd6daaef40e0baeef8a017ce624369f09754baf32bb32dba25f"}, + {file = "bcrypt-4.1.2-cp39-abi3-win_amd64.whl", hash = "sha256:be3ab1071662f6065899fe08428e45c16aa36e28bc42921c4901a191fda6ee42"}, + {file = "bcrypt-4.1.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d75fc8cd0ba23f97bae88a6ec04e9e5351ff3c6ad06f38fe32ba50cbd0d11946"}, + {file = "bcrypt-4.1.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a97e07e83e3262599434816f631cc4c7ca2aa8e9c072c1b1a7fec2ae809a1d2d"}, + {file = "bcrypt-4.1.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e51c42750b7585cee7892c2614be0d14107fad9581d1738d954a262556dd1aab"}, + {file = "bcrypt-4.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba4e4cc26610581a6329b3937e02d319f5ad4b85b074846bf4fef8a8cf51e7bb"}, + {file = "bcrypt-4.1.2.tar.gz", hash = "sha256:33313a1200a3ae90b75587ceac502b048b840fc69e7f7a0905b5f87fac7a1258"}, +] + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -421,6 +508,137 @@ files = [ {file = "blinker-1.7.0.tar.gz", hash = "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"}, ] +[[package]] +name = "brotli" +version = "1.1.0" +description = "Python bindings for the Brotli compression library" +optional = false +python-versions = "*" +files = [ + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, + {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, + {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, + {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, + {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, + {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, + {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, + {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, + {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, + {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, +] + +[[package]] +name = "brotlicffi" +version = "1.1.0.0" +description = "Python CFFI bindings to the Brotli library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"}, + {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, +] + +[package.dependencies] +cffi = ">=1.0.0" + [[package]] name = "build" version = "1.1.1" @@ -651,6 +869,84 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] +[[package]] +name = "chroma-hnswlib" +version = "0.7.3" +description = "Chromas fork of hnswlib" +optional = false +python-versions = "*" +files = [ + {file = "chroma-hnswlib-0.7.3.tar.gz", hash = "sha256:b6137bedde49fffda6af93b0297fe00429fc61e5a072b1ed9377f909ed95a932"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59d6a7c6f863c67aeb23e79a64001d537060b6995c3eca9a06e349ff7b0998ca"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d71a3f4f232f537b6152947006bd32bc1629a8686df22fd97777b70f416c127a"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c92dc1ebe062188e53970ba13f6b07e0ae32e64c9770eb7f7ffa83f149d4210"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49da700a6656fed8753f68d44b8cc8ae46efc99fc8a22a6d970dc1697f49b403"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:108bc4c293d819b56476d8f7865803cb03afd6ca128a2a04d678fffc139af029"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:11e7ca93fb8192214ac2b9c0943641ac0daf8f9d4591bb7b73be808a83835667"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6f552e4d23edc06cdeb553cdc757d2fe190cdeb10d43093d6a3319f8d4bf1c6b"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f96f4d5699e486eb1fb95849fe35ab79ab0901265805be7e60f4eaa83ce263ec"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:368e57fe9ebae05ee5844840fa588028a023d1182b0cfdb1d13f607c9ea05756"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:b7dca27b8896b494456db0fd705b689ac6b73af78e186eb6a42fea2de4f71c6f"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:70f897dc6218afa1d99f43a9ad5eb82f392df31f57ff514ccf4eeadecd62f544"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aef10b4952708f5a1381c124a29aead0c356f8d7d6e0b520b778aaa62a356f4"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee2d8d1529fca3898d512079144ec3e28a81d9c17e15e0ea4665697a7923253"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:a4021a70e898783cd6f26e00008b494c6249a7babe8774e90ce4766dd288c8ba"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a8f61fa1d417fda848e3ba06c07671f14806a2585272b175ba47501b066fe6b1"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d7563be58bc98e8f0866907368e22ae218d6060601b79c42f59af4eccbbd2e0a"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51b8d411486ee70d7b66ec08cc8b9b6620116b650df9c19076d2d8b6ce2ae914"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d706782b628e4f43f1b8a81e9120ac486837fbd9bcb8ced70fe0d9b95c72d77"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:54f053dedc0e3ba657f05fec6e73dd541bc5db5b09aa8bc146466ffb734bdc86"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e607c5a71c610a73167a517062d302c0827ccdd6e259af6e4869a5c1306ffb5d"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2358a795870156af6761890f9eb5ca8cade57eb10c5f046fe94dae1faa04b9e"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cea425df2e6b8a5e201fff0d922a1cc1d165b3cfe762b1408075723c8892218"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:454df3dd3e97aa784fba7cf888ad191e0087eef0fd8c70daf28b753b3b591170"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:df587d15007ca701c6de0ee7d5585dd5e976b7edd2b30ac72bc376b3c3f85882"}, +] + +[package.dependencies] +numpy = "*" + +[[package]] +name = "chromadb" +version = "0.4.24" +description = "Chroma." +optional = false +python-versions = ">=3.8" +files = [ + {file = "chromadb-0.4.24-py3-none-any.whl", hash = "sha256:3a08e237a4ad28b5d176685bd22429a03717fe09d35022fb230d516108da01da"}, + {file = "chromadb-0.4.24.tar.gz", hash = "sha256:a5c80b4e4ad9b236ed2d4899a5b9e8002b489293f2881cb2cadab5b199ee1c72"}, +] + +[package.dependencies] +bcrypt = ">=4.0.1" +build = ">=1.0.3" +chroma-hnswlib = "0.7.3" +fastapi = ">=0.95.2" +grpcio = ">=1.58.0" +importlib-resources = "*" +kubernetes = ">=28.1.0" +mmh3 = ">=4.0.1" +numpy = ">=1.22.5" +onnxruntime = ">=1.14.1" +opentelemetry-api = ">=1.2.0" +opentelemetry-exporter-otlp-proto-grpc = ">=1.2.0" +opentelemetry-instrumentation-fastapi = ">=0.41b0" +opentelemetry-sdk = ">=1.2.0" +orjson = ">=3.9.12" +overrides = ">=7.3.1" +posthog = ">=2.4.0" +pulsar-client = ">=3.1.0" +pydantic = ">=1.9" +pypika = ">=0.48.9" +PyYAML = ">=6.0.0" +requests = ">=2.28" +tenacity = ">=8.2.3" +tokenizers = ">=0.13.2" +tqdm = ">=4.65.0" +typer = ">=0.9.0" +typing-extensions = ">=4.5.0" +uvicorn = {version = ">=0.18.3", extras = ["standard"]} + [[package]] name = "cleo" version = "2.1.0" @@ -708,6 +1004,34 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "coloredlogs" +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.*" +files = [ + {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, + {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, +] + +[package.dependencies] +humanfriendly = ">=9.1" + +[package.extras] +cron = ["capturer (>=2.4)"] + +[[package]] +name = "contextlib2" +version = "21.6.0" +description = "Backports and enhancements for the contextlib module" +optional = false +python-versions = ">=3.6" +files = [ + {file = "contextlib2-21.6.0-py2.py3-none-any.whl", hash = "sha256:3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f"}, + {file = "contextlib2-21.6.0.tar.gz", hash = "sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869"}, +] + [[package]] name = "crashtest" version = "0.4.1" @@ -721,17 +1045,18 @@ files = [ [[package]] name = "crewai" -version = "0.22.2" +version = "0.22.5" description = "Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks." optional = false python-versions = ">=3.10,<=3.13" files = [ - {file = "crewai-0.22.2-py3-none-any.whl", hash = "sha256:ce1e902403a728d57797eda51a8ba7520f9ad00e3c3c6ed4f61d981ad3edb846"}, - {file = "crewai-0.22.2.tar.gz", hash = "sha256:9d5c6e34879ef01fa54ef2a8f33999d464360d605aec4b623bf229040c598131"}, + {file = "crewai-0.22.5-py3-none-any.whl", hash = "sha256:9f254d8b2ebd7fae9a43d0ebab116a3f536c6620ca3bc955cb796fc8bb9beb7d"}, + {file = "crewai-0.22.5.tar.gz", hash = "sha256:03c76a04f46a432a1c3d9e5e0c8e039f983b25019194b0ab2ec594762ac380cf"}, ] [package.dependencies] click = ">=8.1.7,<9.0.0" +crewai-tools = {version = ">=0.0.15,<0.0.16", optional = true, markers = "extra == \"tools\""} instructor = ">=0.5.2,<0.6.0" langchain = ">=0.1.10,<0.2.0" langchain-openai = ">=0.0.5,<0.0.6" @@ -740,11 +1065,37 @@ opentelemetry-api = ">=1.22.0,<2.0.0" opentelemetry-exporter-otlp-proto-http = ">=1.22.0,<2.0.0" opentelemetry-sdk = ">=1.22.0,<2.0.0" pydantic = ">=2.4.2,<3.0.0" +python-dotenv = "1.0.0" regex = ">=2023.12.25,<2024.0.0" [package.extras] tools = ["crewai-tools (>=0.0.15,<0.0.16)"] +[[package]] +name = "crewai-tools" +version = "0.0.15" +description = "Set of tools for the crewAI framework" +optional = false +python-versions = ">=3.10,<=3.13" +files = [ + {file = "crewai_tools-0.0.15-py3-none-any.whl", hash = "sha256:555e5576b97e2bec381dc0280ef30c10eaa655ce4c0c5f586c0703d7f8212066"}, + {file = "crewai_tools-0.0.15.tar.gz", hash = "sha256:011441285a38348b28d92df06a85752e13f2c405d5707eb9e871981e9fc6cb35"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.12.3,<5.0.0" +chromadb = ">=0.4.22,<0.5.0" +embedchain = {version = ">=0.1.85,<0.2.0", extras = ["github", "youtube"]} +lancedb = ">=0.5.4,<0.6.0" +langchain = ">=0.1.4,<0.2.0" +openai = ">=1.12.0,<2.0.0" +pydantic = ">=2.6.1,<3.0.0" +pyright = ">=1.1.350,<2.0.0" +pytest = ">=8.0.0,<9.0.0" +pytube = ">=15.0.0,<16.0.0" +requests = ">=2.31.0,<3.0.0" +selenium = ">=4.18.1,<5.0.0" + [[package]] name = "cron-validator" version = "1.0.8" @@ -973,6 +1324,17 @@ files = [ marshmallow = ">=3.18.0,<4.0.0" typing-inspect = ">=0.4.0,<1" +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + [[package]] name = "deprecated" version = "1.2.14" @@ -1186,6 +1548,69 @@ https = ["urllib3 (>=1.24.1)"] paramiko = ["paramiko"] pgp = ["gpg"] +[[package]] +name = "embedchain" +version = "0.1.99" +description = "Simplest open source retrieval (RAG) framework" +optional = false +python-versions = "<=3.13,>=3.9" +files = [ + {file = "embedchain-0.1.99-py3-none-any.whl", hash = "sha256:1614f580005d7edecd5fa1651013df0dc7f0aabc2ac7b61cefb041f4e92a8769"}, + {file = "embedchain-0.1.99.tar.gz", hash = "sha256:df4b7c59c1bc6b36fae9de04736ca90609e86d8fdea55771dbc052709a7680a3"}, +] + +[package.dependencies] +alembic = ">=1.13.1,<2.0.0" +beautifulsoup4 = ">=4.12.2,<5.0.0" +chromadb = ">=0.4.17,<0.5.0" +gitpython = {version = ">=3.1.38,<4.0.0", optional = true, markers = "extra == \"github\""} +google-cloud-aiplatform = ">=1.26.1,<2.0.0" +gptcache = ">=0.1.43,<0.2.0" +langchain = ">=0.1.4,<0.2.0" +langchain-openai = ">=0.0.5,<0.0.6" +openai = ">=1.1.1" +posthog = ">=3.0.2,<4.0.0" +PyGithub = {version = ">=1.59.1,<2.0.0", optional = true, markers = "extra == \"github\""} +pypdf = ">=3.11.0,<4.0.0" +pysbd = ">=0.3.4,<0.4.0" +python-dotenv = ">=1.0.0,<2.0.0" +rich = ">=13.7.0,<14.0.0" +schema = ">=0.7.5,<0.8.0" +sqlalchemy = ">=2.0.27,<3.0.0" +tiktoken = ">=0.5.2,<0.6.0" +youtube-transcript-api = {version = ">=0.6.1,<0.7.0", optional = true, markers = "extra == \"dataloaders\" or extra == \"youtube\""} +yt_dlp = {version = ">=2023.11.14,<2024.0.0", optional = true, markers = "extra == \"youtube\""} + +[package.extras] +aws-bedrock = ["boto3 (>=1.34.20,<2.0.0)"] +cohere = ["cohere (>=4.27,<5.0)"] +dataloaders = ["docx2txt (>=0.8,<0.9)", "duckduckgo-search (>=3.8.5,<4.0.0)", "pytube (>=15.0.0,<16.0.0)", "sentence-transformers (>=2.2.2,<3.0.0)", "unstructured[all-docs,local-inference] (>=0.10.18,<0.11.0)", "youtube-transcript-api (>=0.6.1,<0.7.0)"] +discord = ["discord (>=2.3.2,<3.0.0)"] +dropbox = ["dropbox (>=11.36.2,<12.0.0)"] +elasticsearch = ["elasticsearch (>=8.9.0,<9.0.0)"] +github = ["PyGithub (>=1.59.1,<2.0.0)", "gitpython (>=3.1.38,<4.0.0)"] +gmail = ["google-api-core (>=2.15.0,<3.0.0)", "google-api-python-client (>=2.111.0,<3.0.0)", "google-auth (>=2.25.2,<3.0.0)", "google-auth-httplib2 (>=0.2.0,<0.3.0)", "google-auth-oauthlib (>=1.2.0,<2.0.0)", "requests (>=2.31.0,<3.0.0)"] +google = ["google-generativeai (>=0.3.0,<0.4.0)"] +googledrive = ["google-api-python-client (>=2.111.0,<3.0.0)", "google-auth-httplib2 (>=0.2.0,<0.3.0)", "google-auth-oauthlib (>=1.2.0,<2.0.0)"] +huggingface-hub = ["huggingface_hub (>=0.17.3,<0.18.0)"] +llama2 = ["replicate (>=0.15.4,<0.16.0)"] +milvus = ["pymilvus (==2.3.1)"] +mistralai = ["langchain-mistralai (>=0.0.3,<0.0.4)"] +modal = ["modal (>=0.56.4329,<0.57.0)"] +mysql = ["mysql-connector-python (>=8.1.0,<9.0.0)"] +opensearch = ["opensearch-py (==2.3.1)"] +opensource = ["gpt4all (==2.0.2)", "sentence-transformers (>=2.2.2,<3.0.0)", "torch (==2.0.0)"] +poe = ["fastapi-poe (==0.0.16)"] +postgres = ["psycopg (>=3.1.12,<4.0.0)", "psycopg-binary (>=3.1.12,<4.0.0)", "psycopg-pool (>=3.1.8,<4.0.0)"] +qdrant = ["qdrant-client (>=1.6.3,<2.0.0)"] +rss-feed = ["feedparser (>=6.0.10,<7.0.0)", "listparser (>=0.19,<0.20)", "newspaper3k (>=0.2.8,<0.3.0)"] +slack = ["flask (>=2.3.3,<3.0.0)", "slack-sdk (==3.21.3)"] +together = ["together (>=0.2.8,<0.3.0)"] +vertexai = ["langchain-google-vertexai (>=0.0.5,<0.0.6)"] +weaviate = ["weaviate-client (>=3.24.1,<4.0.0)"] +whatsapp = ["flask (>=2.3.3,<3.0.0)", "twilio (>=8.5.0,<9.0.0)"] +youtube = ["youtube-transcript-api (>=0.6.1,<0.7.0)", "yt_dlp (>=2023.11.14,<2024.0.0)"] + [[package]] name = "eth-abi" version = "5.0.1" @@ -1371,6 +1796,25 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "fastapi" +version = "0.110.0" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.110.0-py3-none-any.whl", hash = "sha256:87a1f6fb632a218222c5984be540055346a8f5d8a68e8f6fb647b1dc9934de4b"}, + {file = "fastapi-0.110.0.tar.gz", hash = "sha256:266775f0dcc95af9d3ef39bad55cff525329a931d5fd51930aadd4f428bf7ff3"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.36.3,<0.37.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + [[package]] name = "fastjsonschema" version = "2.19.1" @@ -1460,6 +1904,17 @@ Werkzeug = ">=3.0.0" async = ["asgiref (>=3.2)"] dotenv = ["python-dotenv"] +[[package]] +name = "flatbuffers" +version = "24.3.25" +description = "The FlatBuffers serialization format for Python" +optional = false +python-versions = "*" +files = [ + {file = "flatbuffers-24.3.25-py2.py3-none-any.whl", hash = "sha256:8dbdec58f935f3765e4f7f3cf635ac3a77f83568138d6a2311f524ec96364812"}, + {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"}, +] + [[package]] name = "frozenlist" version = "1.4.1" @@ -1677,6 +2132,98 @@ pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0.dev0)"] +[[package]] +name = "google-cloud-aiplatform" +version = "1.45.0" +description = "Vertex AI API client library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "google-cloud-aiplatform-1.45.0.tar.gz", hash = "sha256:8fdc5f79fe9211ccbb9191b92db883798dffdd63995c12cc734bc17fcdbb3846"}, + {file = "google_cloud_aiplatform-1.45.0-py2.py3-none-any.whl", hash = "sha256:40bf5e2baa9cdb453689c4276eee5e7fe12db2e7723c133f000d35bcca964fb2"}, +] + +[package.dependencies] +docstring-parser = "<1" +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.8.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0dev" +google-cloud-bigquery = ">=1.15.0,<3.20.0 || >3.20.0,<4.0.0dev" +google-cloud-resource-manager = ">=1.3.3,<3.0.0dev" +google-cloud-storage = ">=1.32.0,<3.0.0dev" +packaging = ">=14.3" +proto-plus = ">=1.22.0,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +pydantic = "<3" +shapely = "<3.0.0dev" + +[package.extras] +autologging = ["mlflow (>=1.27.0,<=2.1.1)"] +cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] +datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)"] +endpoint = ["requests (>=2.28.1)"] +full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<2.15.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"] +lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"] +metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"] +pipelines = ["pyyaml (==5.3.1)"] +prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<0.103.1)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"] +preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)"] +private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"] +ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)"] +ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "ray[train] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "scikit-learn", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] +tensorboard = ["tensorflow (>=2.3.0,<2.15.0)"] +testing = ["bigframes", "cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (==2.13.0)", "tensorflow (>=2.3.0,<2.15.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost", "xgboost-ray"] +vizier = ["google-vizier (>=0.1.6)"] +xai = ["tensorflow (>=2.3.0,<3.0.0dev)"] + +[[package]] +name = "google-cloud-bigquery" +version = "3.19.0" +description = "Google BigQuery API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-bigquery-3.19.0.tar.gz", hash = "sha256:8e311dae49768e1501fcdc5e916bff4b7e169471e5707919f4a6f78a02b3b5a6"}, + {file = "google_cloud_bigquery-3.19.0-py2.py3-none-any.whl", hash = "sha256:c6b8850247a4b132066e49f6e45f850c22824482838688d744a4398eea1120ed"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0dev" +google-cloud-core = ">=1.6.0,<3.0.0dev" +google-resumable-media = ">=0.6.0,<3.0dev" +packaging = ">=20.0.0" +python-dateutil = ">=2.7.2,<3.0dev" +requests = ">=2.21.0,<3.0.0dev" + +[package.extras] +all = ["Shapely (>=1.8.4,<3.0.0dev)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] +bigquery-v2 = ["proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)"] +bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"] +geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"] +ipython = ["ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)"] +ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"] +opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"] +pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] +tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] + +[[package]] +name = "google-cloud-core" +version = "2.4.1" +description = "Google Cloud API client core library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, + {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, +] + +[package.dependencies] +google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0dev" +google-auth = ">=1.25.0,<3.0dev" + +[package.extras] +grpc = ["grpcio (>=1.38.0,<2.0dev)", "grpcio-status (>=1.38.0,<2.0.dev0)"] + [[package]] name = "google-cloud-functions" version = "1.16.3" @@ -1731,6 +2278,126 @@ grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" proto-plus = ">=1.22.3,<2.0.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +[[package]] +name = "google-cloud-storage" +version = "2.16.0" +description = "Google Cloud Storage API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-storage-2.16.0.tar.gz", hash = "sha256:dda485fa503710a828d01246bd16ce9db0823dc51bbca742ce96a6817d58669f"}, + {file = "google_cloud_storage-2.16.0-py2.py3-none-any.whl", hash = "sha256:91a06b96fb79cf9cdfb4e759f178ce11ea885c79938f89590344d079305f5852"}, +] + +[package.dependencies] +google-api-core = ">=2.15.0,<3.0.0dev" +google-auth = ">=2.26.1,<3.0dev" +google-cloud-core = ">=2.3.0,<3.0dev" +google-crc32c = ">=1.0,<2.0dev" +google-resumable-media = ">=2.6.0" +requests = ">=2.18.0,<3.0.0dev" + +[package.extras] +protobuf = ["protobuf (<5.0.0dev)"] + +[[package]] +name = "google-crc32c" +version = "1.5.0" +description = "A python wrapper of the C library 'Google CRC32C'" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-crc32c-1.5.0.tar.gz", hash = "sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win32.whl", hash = "sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win32.whl", hash = "sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win32.whl", hash = "sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win32.whl", hash = "sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93"}, +] + +[package.extras] +testing = ["pytest"] + +[[package]] +name = "google-resumable-media" +version = "2.7.0" +description = "Utilities for Google Media Downloads and Resumable Uploads" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "google-resumable-media-2.7.0.tar.gz", hash = "sha256:5f18f5fa9836f4b083162064a1c2c98c17239bfda9ca50ad970ccf905f3e625b"}, + {file = "google_resumable_media-2.7.0-py2.py3-none-any.whl", hash = "sha256:79543cfe433b63fd81c0844b7803aba1bb8950b47bedf7d980c38fa123937e08"}, +] + +[package.dependencies] +google-crc32c = ">=1.0,<2.0dev" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"] +requests = ["requests (>=2.18.0,<3.0.0dev)"] + [[package]] name = "google-search-results" version = "2.4.2" @@ -1762,6 +2429,22 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4 [package.extras] grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] +[[package]] +name = "gptcache" +version = "0.1.43" +description = "GPTCache, a powerful caching library that can be used to speed up and lower the cost of chat applications that rely on the LLM service. GPTCache works as a memcache for AIGC applications, similar to how Redis works for traditional applications." +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "gptcache-0.1.43-py3-none-any.whl", hash = "sha256:9c557ec9cc14428942a0ebf1c838520dc6d2be801d67bb6964807043fc2feaf5"}, + {file = "gptcache-0.1.43.tar.gz", hash = "sha256:cebe7ec5e32a3347bf839e933a34e67c7fcae620deaa7cb8c6d7d276c8686f1a"}, +] + +[package.dependencies] +cachetools = "*" +numpy = "*" +requests = "*" + [[package]] name = "greenlet" version = "3.0.3" @@ -2000,6 +2683,54 @@ http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] trio = ["trio (>=0.22.0,<0.25.0)"] +[[package]] +name = "httptools" +version = "0.6.1" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, + {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, + {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, + {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, + {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, + {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, + {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, +] + +[package.extras] +test = ["Cython (>=0.29.24,<0.30.0)"] + [[package]] name = "httpx" version = "0.27.0" @@ -2024,6 +2755,54 @@ cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +[[package]] +name = "huggingface-hub" +version = "0.22.1" +description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "huggingface_hub-0.22.1-py3-none-any.whl", hash = "sha256:eac63947923d15c9a68681d7ed2d9599e058860617064e3ee6bd91a4b954faaf"}, + {file = "huggingface_hub-0.22.1.tar.gz", hash = "sha256:5b8aaee5f3618cd432f49886da9935bbe8fab92d719011826430907b93171dd8"}, +] + +[package.dependencies] +filelock = "*" +fsspec = ">=2023.5.0" +packaging = ">=20.9" +pyyaml = ">=5.1" +requests = "*" +tqdm = ">=4.42.1" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +cli = ["InquirerPy (==0.3.4)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] +hf-transfer = ["hf-transfer (>=0.1.4)"] +inference = ["aiohttp", "minijinja (>=1.0)"] +quality = ["mypy (==1.5.1)", "ruff (>=0.3.0)"] +tensorflow = ["graphviz", "pydot", "tensorflow"] +tensorflow-testing = ["keras (<3.0)", "tensorflow"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["safetensors", "torch"] +typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] + +[[package]] +name = "humanfriendly" +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.*" +files = [ + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, +] + +[package.dependencies] +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} + [[package]] name = "idna" version = "3.6" @@ -2054,6 +2833,21 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +[[package]] +name = "importlib-resources" +version = "6.4.0" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, + {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -2265,6 +3059,65 @@ completion = ["shtab (>=1.1.0)"] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +[[package]] +name = "kubernetes" +version = "29.0.0" +description = "Kubernetes python client" +optional = false +python-versions = ">=3.6" +files = [ + {file = "kubernetes-29.0.0-py2.py3-none-any.whl", hash = "sha256:ab8cb0e0576ccdfb71886366efb102c6a20f268d817be065ce7f9909c631e43e"}, + {file = "kubernetes-29.0.0.tar.gz", hash = "sha256:c4812e227ae74d07d53c88293e564e54b850452715a59a927e7e1bc6b9a60459"}, +] + +[package.dependencies] +certifi = ">=14.05.14" +google-auth = ">=1.0.1" +oauthlib = ">=3.2.2" +python-dateutil = ">=2.5.3" +pyyaml = ">=5.4.1" +requests = "*" +requests-oauthlib = "*" +six = ">=1.9.0" +urllib3 = ">=1.24.2" +websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" + +[package.extras] +adal = ["adal (>=1.0.2)"] + +[[package]] +name = "lancedb" +version = "0.5.7" +description = "lancedb" +optional = false +python-versions = ">=3.8" +files = [ + {file = "lancedb-0.5.7-py3-none-any.whl", hash = "sha256:6169966f715ef530be545950e1aaf9f3f160967e4ba7456cd67c9f30f678095d"}, + {file = "lancedb-0.5.7.tar.gz", hash = "sha256:878914b493f91d09a77b14f1528104741f273234cbdd6671be705f447701fd51"}, +] + +[package.dependencies] +attrs = ">=21.3.0" +cachetools = "*" +click = ">=8.1.7" +deprecation = "*" +overrides = ">=0.7" +pydantic = ">=1.10" +pylance = "0.9.18" +pyyaml = ">=6.0" +ratelimiter = ">=1.0,<2.0" +requests = ">=2.31.0" +retry = ">=0.9.2" +semver = ">=3.0" +tqdm = ">=4.27.0" + +[package.extras] +clip = ["open-clip", "pillow", "torch"] +dev = ["pre-commit", "ruff"] +docs = ["mkdocs", "mkdocs-jupyter", "mkdocs-material", "mkdocs-ultralytics-plugin (==0.0.44)", "mkdocstrings[python]"] +embeddings = ["InstructorEmbedding", "awscli (>=1.29.57)", "boto3 (>=1.28.57)", "botocore (>=1.31.57)", "cohere", "google.generativeai", "huggingface-hub", "open-clip-torch", "openai (>=1.6.1)", "pillow", "sentence-transformers", "torch"] +tests = ["aiohttp", "duckdb", "pandas (>=1.4)", "polars (>=0.19)", "pytest", "pytest-asyncio", "pytest-mock", "pytz"] + [[package]] name = "langchain" version = "0.1.12" @@ -2651,9 +3504,28 @@ htmlsoup = ["BeautifulSoup4"] source = ["Cython (>=3.0.7)"] [[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" +name = "mako" +version = "1.3.2" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Mako-1.3.2-py3-none-any.whl", hash = "sha256:32a99d70754dfce237019d17ffe4a282d2d3351b9c476e90d8a60e63f133b80c"}, + {file = "Mako-1.3.2.tar.gz", hash = "sha256:2a0c8ad7f6274271b3bb7467dd37cf9cc6dab4bc19cb69a4ef10669402de698e"}, +] + +[package.dependencies] +MarkupSafe = ">=0.9.2" + +[package.extras] +babel = ["Babel"] +lingua = ["lingua"] +testing = ["pytest"] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" files = [ @@ -2788,6 +3660,109 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mmh3" +version = "4.1.0" +description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." +optional = false +python-versions = "*" +files = [ + {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be5ac76a8b0cd8095784e51e4c1c9c318c19edcd1709a06eb14979c8d850c31a"}, + {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98a49121afdfab67cd80e912b36404139d7deceb6773a83620137aaa0da5714c"}, + {file = "mmh3-4.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5259ac0535874366e7d1a5423ef746e0d36a9e3c14509ce6511614bdc5a7ef5b"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5950827ca0453a2be357696da509ab39646044e3fa15cad364eb65d78797437"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1dd0f652ae99585b9dd26de458e5f08571522f0402155809fd1dc8852a613a39"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99d25548070942fab1e4a6f04d1626d67e66d0b81ed6571ecfca511f3edf07e6"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53db8d9bad3cb66c8f35cbc894f336273f63489ce4ac416634932e3cbe79eb5b"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75da0f615eb55295a437264cc0b736753f830b09d102aa4c2a7d719bc445ec05"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b926b07fd678ea84b3a2afc1fa22ce50aeb627839c44382f3d0291e945621e1a"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c5b053334f9b0af8559d6da9dc72cef0a65b325ebb3e630c680012323c950bb6"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bf33dc43cd6de2cb86e0aa73a1cc6530f557854bbbe5d59f41ef6de2e353d7b"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fa7eacd2b830727ba3dd65a365bed8a5c992ecd0c8348cf39a05cc77d22f4970"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42dfd6742b9e3eec599f85270617debfa0bbb913c545bb980c8a4fa7b2d047da"}, + {file = "mmh3-4.1.0-cp310-cp310-win32.whl", hash = "sha256:2974ad343f0d39dcc88e93ee6afa96cedc35a9883bc067febd7ff736e207fa47"}, + {file = "mmh3-4.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:74699a8984ded645c1a24d6078351a056f5a5f1fe5838870412a68ac5e28d865"}, + {file = "mmh3-4.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:f0dc874cedc23d46fc488a987faa6ad08ffa79e44fb08e3cd4d4cf2877c00a00"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3280a463855b0eae64b681cd5b9ddd9464b73f81151e87bb7c91a811d25619e6"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:97ac57c6c3301769e757d444fa7c973ceb002cb66534b39cbab5e38de61cd896"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7b6502cdb4dbd880244818ab363c8770a48cdccecf6d729ade0241b736b5ec0"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52ba2da04671a9621580ddabf72f06f0e72c1c9c3b7b608849b58b11080d8f14"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a5fef4c4ecc782e6e43fbeab09cff1bac82c998a1773d3a5ee6a3605cde343e"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5135358a7e00991f73b88cdc8eda5203bf9de22120d10a834c5761dbeb07dd13"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cff9ae76a54f7c6fe0167c9c4028c12c1f6de52d68a31d11b6790bb2ae685560"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f02576a4d106d7830ca90278868bf0983554dd69183b7bbe09f2fcd51cf54f"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:073d57425a23721730d3ff5485e2da489dd3c90b04e86243dd7211f889898106"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:71e32ddec7f573a1a0feb8d2cf2af474c50ec21e7a8263026e8d3b4b629805db"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7cbb20b29d57e76a58b40fd8b13a9130db495a12d678d651b459bf61c0714cea"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a42ad267e131d7847076bb7e31050f6c4378cd38e8f1bf7a0edd32f30224d5c9"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a013979fc9390abadc445ea2527426a0e7a4495c19b74589204f9b71bcaafeb"}, + {file = "mmh3-4.1.0-cp311-cp311-win32.whl", hash = "sha256:1d3b1cdad7c71b7b88966301789a478af142bddcb3a2bee563f7a7d40519a00f"}, + {file = "mmh3-4.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0dc6dc32eb03727467da8e17deffe004fbb65e8b5ee2b502d36250d7a3f4e2ec"}, + {file = "mmh3-4.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:9ae3a5c1b32dda121c7dc26f9597ef7b01b4c56a98319a7fe86c35b8bc459ae6"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0033d60c7939168ef65ddc396611077a7268bde024f2c23bdc283a19123f9e9c"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d6af3e2287644b2b08b5924ed3a88c97b87b44ad08e79ca9f93d3470a54a41c5"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d82eb4defa245e02bb0b0dc4f1e7ee284f8d212633389c91f7fba99ba993f0a2"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba245e94b8d54765e14c2d7b6214e832557e7856d5183bc522e17884cab2f45d"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb04e2feeabaad6231e89cd43b3d01a4403579aa792c9ab6fdeef45cc58d4ec0"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e3b1a27def545ce11e36158ba5d5390cdbc300cfe456a942cc89d649cf7e3b2"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce0ab79ff736d7044e5e9b3bfe73958a55f79a4ae672e6213e92492ad5e734d5"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b02268be6e0a8eeb8a924d7db85f28e47344f35c438c1e149878bb1c47b1cd3"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:deb887f5fcdaf57cf646b1e062d56b06ef2f23421c80885fce18b37143cba828"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99dd564e9e2b512eb117bd0cbf0f79a50c45d961c2a02402787d581cec5448d5"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:08373082dfaa38fe97aa78753d1efd21a1969e51079056ff552e687764eafdfe"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:54b9c6a2ea571b714e4fe28d3e4e2db37abfd03c787a58074ea21ee9a8fd1740"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a7b1edf24c69e3513f879722b97ca85e52f9032f24a52284746877f6a7304086"}, + {file = "mmh3-4.1.0-cp312-cp312-win32.whl", hash = "sha256:411da64b951f635e1e2284b71d81a5a83580cea24994b328f8910d40bed67276"}, + {file = "mmh3-4.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:bebc3ecb6ba18292e3d40c8712482b4477abd6981c2ebf0e60869bd90f8ac3a9"}, + {file = "mmh3-4.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:168473dd608ade6a8d2ba069600b35199a9af837d96177d3088ca91f2b3798e3"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:372f4b7e1dcde175507640679a2a8790185bb71f3640fc28a4690f73da986a3b"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:438584b97f6fe13e944faf590c90fc127682b57ae969f73334040d9fa1c7ffa5"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6e27931b232fc676675fac8641c6ec6b596daa64d82170e8597f5a5b8bdcd3b6"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:571a92bad859d7b0330e47cfd1850b76c39b615a8d8e7aa5853c1f971fd0c4b1"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a69d6afe3190fa08f9e3a58e5145549f71f1f3fff27bd0800313426929c7068"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afb127be0be946b7630220908dbea0cee0d9d3c583fa9114a07156f98566dc28"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:940d86522f36348ef1a494cbf7248ab3f4a1638b84b59e6c9e90408bd11ad729"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3dcccc4935686619a8e3d1f7b6e97e3bd89a4a796247930ee97d35ea1a39341"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01bb9b90d61854dfc2407c5e5192bfb47222d74f29d140cb2dd2a69f2353f7cc"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bcb1b8b951a2c0b0fb8a5426c62a22557e2ffc52539e0a7cc46eb667b5d606a9"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6477a05d5e5ab3168e82e8b106e316210ac954134f46ec529356607900aea82a"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:da5892287e5bea6977364b15712a2573c16d134bc5fdcdd4cf460006cf849278"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:99180d7fd2327a6fffbaff270f760576839dc6ee66d045fa3a450f3490fda7f5"}, + {file = "mmh3-4.1.0-cp38-cp38-win32.whl", hash = "sha256:9b0d4f3949913a9f9a8fb1bb4cc6ecd52879730aab5ff8c5a3d8f5b593594b73"}, + {file = "mmh3-4.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:598c352da1d945108aee0c3c3cfdd0e9b3edef74108f53b49d481d3990402169"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:475d6d1445dd080f18f0f766277e1237fa2914e5fe3307a3b2a3044f30892103"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5ca07c41e6a2880991431ac717c2a049056fff497651a76e26fc22224e8b5732"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ebe052fef4bbe30c0548d12ee46d09f1b69035ca5208a7075e55adfe091be44"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaefd42e85afb70f2b855a011f7b4d8a3c7e19c3f2681fa13118e4d8627378c5"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0ae43caae5a47afe1b63a1ae3f0986dde54b5fb2d6c29786adbfb8edc9edfb"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6218666f74c8c013c221e7f5f8a693ac9cf68e5ac9a03f2373b32d77c48904de"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac59294a536ba447b5037f62d8367d7d93b696f80671c2c45645fa9f1109413c"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086844830fcd1e5c84fec7017ea1ee8491487cfc877847d96f86f68881569d2e"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e42b38fad664f56f77f6fbca22d08450f2464baa68acdbf24841bf900eb98e87"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d08b790a63a9a1cde3b5d7d733ed97d4eb884bfbc92f075a091652d6bfd7709a"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:73ea4cc55e8aea28c86799ecacebca09e5f86500414870a8abaedfcbaf74d288"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f90938ff137130e47bcec8dc1f4ceb02f10178c766e2ef58a9f657ff1f62d124"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:aa1f13e94b8631c8cd53259250556edcf1de71738936b60febba95750d9632bd"}, + {file = "mmh3-4.1.0-cp39-cp39-win32.whl", hash = "sha256:a3b680b471c181490cf82da2142029edb4298e1bdfcb67c76922dedef789868d"}, + {file = "mmh3-4.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:fefef92e9c544a8dbc08f77a8d1b6d48006a750c4375bbcd5ff8199d761e263b"}, + {file = "mmh3-4.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:8e2c1f6a2b41723a4f82bd5a762a777836d29d664fc0095f17910bea0adfd4a6"}, + {file = "mmh3-4.1.0.tar.gz", hash = "sha256:a1cf25348b9acd229dda464a094d6170f47d2850a1fcb762a3b6172d2ce6ca4a"}, +] + +[package.extras] +test = ["mypy (>=1.0)", "pytest (>=7.0.0)"] + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + [[package]] name = "more-itertools" version = "10.2.0" @@ -2799,6 +3774,23 @@ files = [ {file = "more_itertools-10.2.0-py3-none-any.whl", hash = "sha256:686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684"}, ] +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + [[package]] name = "msgpack" version = "1.0.8" @@ -2963,6 +3955,17 @@ files = [ {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] +[[package]] +name = "mutagen" +version = "1.47.0" +description = "read and write audio tags for many formats" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719"}, + {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, +] + [[package]] name = "mypy" version = "1.9.0" @@ -3075,6 +4078,20 @@ plot = ["matplotlib"] tgrep = ["pyparsing"] twitter = ["twython"] +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + [[package]] name = "numexpr" version = "2.9.0" @@ -3161,6 +4178,64 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "onnxruntime" +version = "1.17.1" +description = "ONNX Runtime is a runtime accelerator for Machine Learning models" +optional = false +python-versions = "*" +files = [ + {file = "onnxruntime-1.17.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d43ac17ac4fa3c9096ad3c0e5255bb41fd134560212dc124e7f52c3159af5d21"}, + {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55b5e92a4c76a23981c998078b9bf6145e4fb0b016321a8274b1607bd3c6bd35"}, + {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebbcd2bc3a066cf54e6f18c75708eb4d309ef42be54606d22e5bdd78afc5b0d7"}, + {file = "onnxruntime-1.17.1-cp310-cp310-win32.whl", hash = "sha256:5e3716b5eec9092e29a8d17aab55e737480487deabfca7eac3cd3ed952b6ada9"}, + {file = "onnxruntime-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:fbb98cced6782ae1bb799cc74ddcbbeeae8819f3ad1d942a74d88e72b6511337"}, + {file = "onnxruntime-1.17.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:36fd6f87a1ecad87e9c652e42407a50fb305374f9a31d71293eb231caae18784"}, + {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99a8bddeb538edabc524d468edb60ad4722cff8a49d66f4e280c39eace70500b"}, + {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd7fddb4311deb5a7d3390cd8e9b3912d4d963efbe4dfe075edbaf18d01c024e"}, + {file = "onnxruntime-1.17.1-cp311-cp311-win32.whl", hash = "sha256:606a7cbfb6680202b0e4f1890881041ffc3ac6e41760a25763bd9fe146f0b335"}, + {file = "onnxruntime-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:53e4e06c0a541696ebdf96085fd9390304b7b04b748a19e02cf3b35c869a1e76"}, + {file = "onnxruntime-1.17.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:40f08e378e0f85929712a2b2c9b9a9cc400a90c8a8ca741d1d92c00abec60843"}, + {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac79da6d3e1bb4590f1dad4bb3c2979d7228555f92bb39820889af8b8e6bd472"}, + {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ae9ba47dc099004e3781f2d0814ad710a13c868c739ab086fc697524061695ea"}, + {file = "onnxruntime-1.17.1-cp312-cp312-win32.whl", hash = "sha256:2dff1a24354220ac30e4a4ce2fb1df38cb1ea59f7dac2c116238d63fe7f4c5ff"}, + {file = "onnxruntime-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:6226a5201ab8cafb15e12e72ff2a4fc8f50654e8fa5737c6f0bd57c5ff66827e"}, + {file = "onnxruntime-1.17.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:cd0c07c0d1dfb8629e820b05fda5739e4835b3b82faf43753d2998edf2cf00aa"}, + {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:617ebdf49184efa1ba6e4467e602fbfa029ed52c92f13ce3c9f417d303006381"}, + {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dae9071e3facdf2920769dceee03b71c684b6439021defa45b830d05e148924"}, + {file = "onnxruntime-1.17.1-cp38-cp38-win32.whl", hash = "sha256:835d38fa1064841679433b1aa8138b5e1218ddf0cfa7a3ae0d056d8fd9cec713"}, + {file = "onnxruntime-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:96621e0c555c2453bf607606d08af3f70fbf6f315230c28ddea91754e17ad4e6"}, + {file = "onnxruntime-1.17.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:7a9539935fb2d78ebf2cf2693cad02d9930b0fb23cdd5cf37a7df813e977674d"}, + {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45c6a384e9d9a29c78afff62032a46a993c477b280247a7e335df09372aedbe9"}, + {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4e19f966450f16863a1d6182a685ca33ae04d7772a76132303852d05b95411ea"}, + {file = "onnxruntime-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e2ae712d64a42aac29ed7a40a426cb1e624a08cfe9273dcfe681614aa65b07dc"}, + {file = "onnxruntime-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7e9f7fb049825cdddf4a923cfc7c649d84d63c0134315f8e0aa9e0c3004672c"}, +] + +[package.dependencies] +coloredlogs = "*" +flatbuffers = "*" +numpy = ">=1.21.6" +packaging = "*" +protobuf = "*" +sympy = "*" + [[package]] name = "openai" version = "1.14.0" @@ -3213,6 +4288,29 @@ files = [ [package.dependencies] opentelemetry-proto = "1.23.0" +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.23.0" +description = "OpenTelemetry Collector Protobuf over gRPC Exporter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_exporter_otlp_proto_grpc-1.23.0-py3-none-any.whl", hash = "sha256:40f9e3e7761eb34f2a1001f4543028783ac26e2db27e420d5374f2cca0182dad"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.23.0.tar.gz", hash = "sha256:aa1a012eea5342bfef51fcf3f7f22601dcb0f0984a07ffe6025b2fbb6d91a2a9"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +googleapis-common-protos = ">=1.52,<2.0" +grpcio = ">=1.0.0,<2.0.0" +opentelemetry-api = ">=1.15,<2.0" +opentelemetry-exporter-otlp-proto-common = "1.23.0" +opentelemetry-proto = "1.23.0" +opentelemetry-sdk = ">=1.23.0,<1.24.0" + +[package.extras] +test = ["pytest-grpc"] + [[package]] name = "opentelemetry-exporter-otlp-proto-http" version = "1.23.0" @@ -3236,6 +4334,66 @@ requests = ">=2.7,<3.0" [package.extras] test = ["responses (>=0.22.0,<0.25)"] +[[package]] +name = "opentelemetry-instrumentation" +version = "0.44b0" +description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation-0.44b0-py3-none-any.whl", hash = "sha256:79560f386425176bcc60c59190064597096114c4a8e5154f1cb281bb4e47d2fc"}, + {file = "opentelemetry_instrumentation-0.44b0.tar.gz", hash = "sha256:8213d02d8c0987b9b26386ae3e091e0477d6331673123df736479322e1a50b48"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.4,<2.0" +setuptools = ">=16.0" +wrapt = ">=1.0.0,<2.0.0" + +[[package]] +name = "opentelemetry-instrumentation-asgi" +version = "0.44b0" +description = "ASGI instrumentation for OpenTelemetry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_asgi-0.44b0-py3-none-any.whl", hash = "sha256:0d95c84a8991008c8a8ac35e15d43cc7768a5bb46f95f129e802ad2990d7c366"}, + {file = "opentelemetry_instrumentation_asgi-0.44b0.tar.gz", hash = "sha256:72d4d28ec7ccd551eac11edc5ae8cac3586c0a228467d6a95fad7b6d4edd597a"}, +] + +[package.dependencies] +asgiref = ">=3.0,<4.0" +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.44b0" +opentelemetry-semantic-conventions = "0.44b0" +opentelemetry-util-http = "0.44b0" + +[package.extras] +instruments = ["asgiref (>=3.0,<4.0)"] +test = ["opentelemetry-instrumentation-asgi[instruments]", "opentelemetry-test-utils (==0.44b0)"] + +[[package]] +name = "opentelemetry-instrumentation-fastapi" +version = "0.44b0" +description = "OpenTelemetry FastAPI Instrumentation" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_fastapi-0.44b0-py3-none-any.whl", hash = "sha256:4441482944bea6676816668d56deb94af990e8c6e9582c581047e5d84c91d3c9"}, + {file = "opentelemetry_instrumentation_fastapi-0.44b0.tar.gz", hash = "sha256:67ed10b93ad9d35238ae0be73cf8acbbb65a4a61fb7444d0aee5b0c492e294db"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.44b0" +opentelemetry-instrumentation-asgi = "0.44b0" +opentelemetry-semantic-conventions = "0.44b0" +opentelemetry-util-http = "0.44b0" + +[package.extras] +instruments = ["fastapi (>=0.58,<1.0)"] +test = ["httpx (>=0.22,<1.0)", "opentelemetry-instrumentation-fastapi[instruments]", "opentelemetry-test-utils (==0.44b0)", "requests (>=2.23,<3.0)"] + [[package]] name = "opentelemetry-proto" version = "1.23.0" @@ -3277,6 +4435,17 @@ files = [ {file = "opentelemetry_semantic_conventions-0.44b0.tar.gz", hash = "sha256:2e997cb28cd4ca81a25a9a43365f593d0c2b76be0685015349a89abdf1aa4ffa"}, ] +[[package]] +name = "opentelemetry-util-http" +version = "0.44b0" +description = "Web util for OpenTelemetry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_util_http-0.44b0-py3-none-any.whl", hash = "sha256:ff018ab6a2fa349537ff21adcef99a294248b599be53843c44f367aef6bccea5"}, + {file = "opentelemetry_util_http-0.44b0.tar.gz", hash = "sha256:75896dffcbbeb5df5429ad4526e22307fc041a27114e0c5bfd90bb219381e68f"}, +] + [[package]] name = "orjson" version = "3.9.15" @@ -3336,6 +4505,31 @@ files = [ {file = "orjson-3.9.15.tar.gz", hash = "sha256:95cae920959d772f30ab36d3b25f83bb0f3be671e986c72ce22f8fa700dae061"}, ] +[[package]] +name = "outcome" +version = "1.3.0.post0" +description = "Capture the outcome of Python function calls." +optional = false +python-versions = ">=3.7" +files = [ + {file = "outcome-1.3.0.post0-py2.py3-none-any.whl", hash = "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"}, + {file = "outcome-1.3.0.post0.tar.gz", hash = "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8"}, +] + +[package.dependencies] +attrs = ">=19.2.0" + +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + [[package]] name = "packaging" version = "23.2" @@ -3645,6 +4839,29 @@ files = [ poetry = ">=1.6.0,<2.0.0" poetry-core = ">=1.7.0,<2.0.0" +[[package]] +name = "posthog" +version = "3.5.0" +description = "Integrate PostHog into any python application." +optional = false +python-versions = "*" +files = [ + {file = "posthog-3.5.0-py2.py3-none-any.whl", hash = "sha256:3c672be7ba6f95d555ea207d4486c171d06657eb34b3ce25eb043bfe7b6b5b76"}, + {file = "posthog-3.5.0.tar.gz", hash = "sha256:8f7e3b2c6e8714d0c0c542a2109b83a7549f63b7113a133ab2763a89245ef2ef"}, +] + +[package.dependencies] +backoff = ">=1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] +sentry = ["django", "sentry-sdk"] +test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] + [[package]] name = "prediction-market-agent-tooling" version = "0.5.0" @@ -3729,6 +4946,64 @@ files = [ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] +[[package]] +name = "pulsar-client" +version = "3.4.0" +description = "Apache Pulsar Python client library" +optional = false +python-versions = "*" +files = [ + {file = "pulsar_client-3.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ebf99db5244ff69479283b25621b070492acc4bb643d162d86b90387cb6fdb2a"}, + {file = "pulsar_client-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6cb5d8e1482a8aea758633be23717e0c4bb7dc53784e37915c0048c0382f134"}, + {file = "pulsar_client-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a7592e42c76034e9a8d64d42dd5bab361425f869de562e9ccad698e19cd88"}, + {file = "pulsar_client-3.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5963090a78a5644ba25f41da3a6d49ea3f00c972b095baff365916dc246426a"}, + {file = "pulsar_client-3.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:419cdcf577f755e3f31bf264300d9ba158325edb2ee9cee555d81ba1909c094e"}, + {file = "pulsar_client-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:4c93c35ee97307dae153e748b33dcd3d4f06da34bca373321aa2df73f1535705"}, + {file = "pulsar_client-3.4.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:11952fb022ee72debf53b169f4482f9dc5c890be0149ae98779864b3a21f1bd3"}, + {file = "pulsar_client-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8743c320aa96798d20cafa98ea97a68c4295fc4872c23acd5e012fd36cb06ba"}, + {file = "pulsar_client-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33571de99cd898349f17978ba62e2b839ea0275fb7067f31bf5f6ebfeae0987d"}, + {file = "pulsar_client-3.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a60c03c3e70f018538e7cd3fa84d95e283b610272b744166dbc48960a809fa07"}, + {file = "pulsar_client-3.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c47041267b5843ffec54352d842156c279945f3e976d7025ffa89875ff76390"}, + {file = "pulsar_client-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:49fe4ab04004b476c87ab3ad22fe87346fca564a3e3ca9c0ac58fee45a895d81"}, + {file = "pulsar_client-3.4.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:1e077a4839be3ead3de3f05b4c244269dca2df07f47cea0b90544c7e9dc1642f"}, + {file = "pulsar_client-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f202b84e1f683d64672dd1971114600ae2e5c3735587286ff9bfb431385f08e8"}, + {file = "pulsar_client-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c606c04f357341042fa6c75477de7d2204f7ae50aa29c2f74b24e54c85f47f96"}, + {file = "pulsar_client-3.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c67b25ede3a578f5a7dc30230e52609ef38191f74b47e5cbdbc98c42df556927"}, + {file = "pulsar_client-3.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b7f8211cc9460cdf4d06e4e1cb878689d2aa4a7e4027bd2a2f1419a79ade16a6"}, + {file = "pulsar_client-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:c5399e9780d6951c69808c0b6175311a966af82fb08addf6e741ae37b1bee7ef"}, + {file = "pulsar_client-3.4.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:a2d6c850b60106dc915d3476a490fba547c6748a5f742b68abd30d1a35355b82"}, + {file = "pulsar_client-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a52ea8294a9f30eb6f0a2db5dc16e3aad7ff2284f818c48ad3a6b601723be02b"}, + {file = "pulsar_client-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eeeede40108be12222e009285c971e5b8f6433d9f0f8ef934d6a131585921c4"}, + {file = "pulsar_client-3.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9409066c600f2b6f220552c5dfe08aeeabcf07fe0e76367aa5816b2e87a5cf72"}, + {file = "pulsar_client-3.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:58e2f886e6dab43e66c3ce990fe96209e55ab46350506829a637b77b74125fb9"}, + {file = "pulsar_client-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:b57dfa5063b0d9dc7664896c55605eac90753e35e80db5a959d3be2be0ab0d48"}, + {file = "pulsar_client-3.4.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:7704c664aa2c801af4c2d3a58e9d8ffaeef12ce8a0f71712e9187f9a96da856f"}, + {file = "pulsar_client-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0364db563e27442053bdbb8655e7ffb420f491690bc2c78da5a58bd35c658ad"}, + {file = "pulsar_client-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3e34de19e0744d8aa3538cb2172076bccd0761b3e94ebadb7bd59765ae3d1ed"}, + {file = "pulsar_client-3.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:dc8be41dec8cb052fb1837550f495e9b73a8b3cf85e07157904ec84832758a65"}, + {file = "pulsar_client-3.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b49d669bed15b7edb9c936704310d57808f1d01c511b94d866f54fe8ffe1752d"}, + {file = "pulsar_client-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:88c93e5fbfc349f3967e931f7a908d15fd4fd725ebdd842423ac9cd961fe293f"}, +] + +[package.dependencies] +certifi = "*" + +[package.extras] +all = ["apache-bookkeeper-client (>=4.16.1)", "fastavro (>=1.9.2)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] +avro = ["fastavro (>=1.9.2)"] +functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + [[package]] name = "pyarrow" version = "15.0.1" @@ -3889,6 +5164,47 @@ files = [ {file = "pycryptodome-3.20.0.tar.gz", hash = "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"}, ] +[[package]] +name = "pycryptodomex" +version = "3.20.0" +description = "Cryptographic library for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodomex-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win32.whl", hash = "sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427"}, + {file = "pycryptodomex-3.20.0.tar.gz", hash = "sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"}, +] + [[package]] name = "pydantic" version = "2.6.4" @@ -4048,6 +5364,23 @@ files = [ {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, ] +[[package]] +name = "pygithub" +version = "1.59.1" +description = "Use the full Github API v3" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyGithub-1.59.1-py3-none-any.whl", hash = "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9"}, + {file = "PyGithub-1.59.1.tar.gz", hash = "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217"}, +] + +[package.dependencies] +deprecated = "*" +pyjwt = {version = ">=2.4.0", extras = ["crypto"]} +pynacl = ">=1.4.0" +requests = ">=2.14.0" + [[package]] name = "pygments" version = "2.17.2" @@ -4063,6 +5396,104 @@ files = [ plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyjwt" +version = "2.8.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pylance" +version = "0.9.18" +description = "python wrapper for Lance columnar format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pylance-0.9.18-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:fe2445d922c594d90e89111385106f6b152caab27996217db7bb4b8947eb0bea"}, + {file = "pylance-0.9.18-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a2c424c50f5186edbbcc5a26f34063ed09d9a7390e28033395728ce02b5658f0"}, + {file = "pylance-0.9.18-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10af06edfde3e8451bf2251381d3980a0a164eab9d4c3d4dc8b6318969e958a6"}, + {file = "pylance-0.9.18-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:d8bb9045d7163cc966b9fe34a917044192be37a90915475b77461e5b7d89e442"}, + {file = "pylance-0.9.18-cp38-abi3-win_amd64.whl", hash = "sha256:5ea80b7bf70d992f3fe63bce2d2f064f742124c04eaedeb76baca408ded85a2c"}, +] + +[package.dependencies] +numpy = ">=1.22" +pyarrow = ">=12" + +[package.extras] +benchmarks = ["pytest-benchmark"] +dev = ["ruff (==0.2.2)"] +tests = ["datasets", "duckdb", "ml_dtypes", "pandas", "pillow", "polars[pandas,pyarrow]", "pytest", "tensorflow", "tqdm"] +torch = ["torch"] + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + +[[package]] +name = "pypdf" +version = "3.17.4" +description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pypdf-3.17.4-py3-none-any.whl", hash = "sha256:6aa0f61b33779b64486de3f42835d3668badd48dac4a536aeb87da187a5eacd2"}, + {file = "pypdf-3.17.4.tar.gz", hash = "sha256:ec96e2e4fc9648ac609d19c00d41e9d606e0ae2ce5a0bbe7691426f5f157166a"}, +] + +[package.extras] +crypto = ["PyCryptodome", "cryptography"] +dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "pytest-socket", "pytest-timeout", "pytest-xdist", "wheel"] +docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"] +full = ["Pillow (>=8.0.0)", "PyCryptodome", "cryptography"] +image = ["Pillow (>=8.0.0)"] + +[[package]] +name = "pypika" +version = "0.48.9" +description = "A SQL query builder API for Python" +optional = false +python-versions = "*" +files = [ + {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, +] + [[package]] name = "pyproject-hooks" version = "1.0.0" @@ -4077,6 +5508,57 @@ files = [ [package.dependencies] tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +[[package]] +name = "pyreadline3" +version = "3.4.1" +description = "A python implementation of GNU readline." +optional = false +python-versions = "*" +files = [ + {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, + {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, +] + +[[package]] +name = "pyright" +version = "1.1.356" +description = "Command line wrapper for pyright" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyright-1.1.356-py3-none-any.whl", hash = "sha256:a101b0f375f93d7082f9046cfaa7ba15b7cf8e1939ace45e984c351f6e8feb99"}, + {file = "pyright-1.1.356.tar.gz", hash = "sha256:f05b8b29d06b96ed4a0885dad5a31d9dff691ca12b2f658249f583d5f2754021"}, +] + +[package.dependencies] +nodeenv = ">=1.6.0" + +[package.extras] +all = ["twine (>=3.4.1)"] +dev = ["twine (>=3.4.1)"] + +[[package]] +name = "pysbd" +version = "0.3.4" +description = "pysbd (Python Sentence Boundary Disambiguation) is a rule-based sentence boundary detection that works out-of-the-box across many languages." +optional = false +python-versions = ">=3" +files = [ + {file = "pysbd-0.3.4-py3-none-any.whl", hash = "sha256:cd838939b7b0b185fcf86b0baf6636667dfb6e474743beeff878e9f42e022953"}, +] + +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] + [[package]] name = "pytest" version = "8.1.1" @@ -4115,18 +5597,29 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.0.1" +version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" 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"}, + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, ] [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "pytube" +version = "15.0.0" +description = "Python 3 library for downloading YouTube Videos." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytube-15.0.0-py3-none-any.whl", hash = "sha256:07b9904749e213485780d7eb606e5e5b8e4341aa4dccf699160876da00e12d78"}, + {file = "pytube-15.0.0.tar.gz", hash = "sha256:076052efe76f390dfa24b1194ff821d4e86c17d41cb5562f3a276a8bcbfc9d1d"}, +] + [[package]] name = "pytz" version = "2024.1" @@ -4344,6 +5837,20 @@ files = [ [package.extras] full = ["numpy"] +[[package]] +name = "ratelimiter" +version = "1.2.0.post0" +description = "Simple python rate limiting object" +optional = false +python-versions = "*" +files = [ + {file = "ratelimiter-1.2.0.post0-py3-none-any.whl", hash = "sha256:a52be07bc0bb0b3674b4b304550f10c769bbb00fead3072e035904474259809f"}, + {file = "ratelimiter-1.2.0.post0.tar.gz", hash = "sha256:5c395dcabdbbde2e5178ef3f89b568a3066454a6ddc223b76473dac22f89b4f7"}, +] + +[package.extras] +test = ["pytest (>=3.0)", "pytest-asyncio"] + [[package]] name = "referencing" version = "0.33.0" @@ -4502,6 +6009,24 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=3.4" +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"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + [[package]] name = "requests-toolbelt" version = "1.0.0" @@ -4516,6 +6041,21 @@ files = [ [package.dependencies] requests = ">=2.0.1,<3.0.0" +[[package]] +name = "retry" +version = "0.9.2" +description = "Easy to use retry decorator." +optional = false +python-versions = "*" +files = [ + {file = "retry-0.9.2-py2.py3-none-any.whl", hash = "sha256:ccddf89761fa2c726ab29391837d4327f819ea14d244c232a1d24c67a2f98606"}, + {file = "retry-0.9.2.tar.gz", hash = "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4"}, +] + +[package.dependencies] +decorator = ">=3.4.2" +py = ">=1.4.26,<2.0.0" + [[package]] name = "rich" version = "13.7.1" @@ -4676,6 +6216,20 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" +[[package]] +name = "schema" +version = "0.7.5" +description = "Simple data validation library" +optional = false +python-versions = "*" +files = [ + {file = "schema-0.7.5-py2.py3-none-any.whl", hash = "sha256:f3ffdeeada09ec34bf40d7d79996d9f7175db93b7a5065de0faa7f41083c1e6c"}, + {file = "schema-0.7.5.tar.gz", hash = "sha256:f06717112c61895cabc4707752b88716e8420a8819d71404501e114f91043197"}, +] + +[package.dependencies] +contextlib2 = ">=0.5.5" + [[package]] name = "scikit-learn" version = "1.4.1.post1" @@ -4775,6 +6329,35 @@ files = [ cryptography = ">=2.0" jeepney = ">=0.6" +[[package]] +name = "selenium" +version = "4.19.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "selenium-4.19.0-py3-none-any.whl", hash = "sha256:5b4f49240d61e687a73f7968ae2517d403882aae3550eae2a229c745e619f1d9"}, + {file = "selenium-4.19.0.tar.gz", hash = "sha256:d9dfd6d0b021d71d0a48b865fe7746490ba82b81e9c87b212360006629eb1853"}, +] + +[package.dependencies] +certifi = ">=2021.10.8" +trio = ">=0.17,<1.0" +trio-websocket = ">=0.9,<1.0" +typing_extensions = ">=4.9.0" +urllib3 = {version = ">=1.26,<3", extras = ["socks"]} + +[[package]] +name = "semver" +version = "3.0.2" +description = "Python helper for Semantic Versioning (https://semver.org)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"}, + {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"}, +] + [[package]] name = "serpapi" version = "0.1.5" @@ -4793,6 +6376,79 @@ requests = "*" color = ["pygments"] test = ["pytest"] +[[package]] +name = "setuptools" +version = "69.2.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, + {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "shapely" +version = "2.0.3" +description = "Manipulation and analysis of geometric objects" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:af7e9abe180b189431b0f490638281b43b84a33a960620e6b2e8d3e3458b61a1"}, + {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98040462b36ced9671e266b95c326b97f41290d9d17504a1ee4dc313a7667b9c"}, + {file = "shapely-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71eb736ef2843f23473c6e37f6180f90f0a35d740ab284321548edf4e55d9a52"}, + {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:881eb9dbbb4a6419667e91fcb20313bfc1e67f53dbb392c6840ff04793571ed1"}, + {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f10d2ccf0554fc0e39fad5886c839e47e207f99fdf09547bc687a2330efda35b"}, + {file = "shapely-2.0.3-cp310-cp310-win32.whl", hash = "sha256:6dfdc077a6fcaf74d3eab23a1ace5abc50c8bce56ac7747d25eab582c5a2990e"}, + {file = "shapely-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:64c5013dacd2d81b3bb12672098a0b2795c1bf8190cfc2980e380f5ef9d9e4d9"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:56cee3e4e8159d6f2ce32e421445b8e23154fd02a0ac271d6a6c0b266a8e3cce"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:619232c8276fded09527d2a9fd91a7885ff95c0ff9ecd5e3cb1e34fbb676e2ae"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2a7d256db6f5b4b407dc0c98dd1b2fcf1c9c5814af9416e5498d0a2e4307a4b"}, + {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45f0c8cd4583647db3216d965d49363e6548c300c23fd7e57ce17a03f824034"}, + {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13cb37d3826972a82748a450328fe02a931dcaed10e69a4d83cc20ba021bc85f"}, + {file = "shapely-2.0.3-cp311-cp311-win32.whl", hash = "sha256:9302d7011e3e376d25acd30d2d9e70d315d93f03cc748784af19b00988fc30b1"}, + {file = "shapely-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6b464f2666b13902835f201f50e835f2f153f37741db88f68c7f3b932d3505fa"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e86e7cb8e331a4850e0c2a8b2d66dc08d7a7b301b8d1d34a13060e3a5b4b3b55"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c91981c99ade980fc49e41a544629751a0ccd769f39794ae913e53b07b2f78b9"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd45d456983dc60a42c4db437496d3f08a4201fbf662b69779f535eb969660af"}, + {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:882fb1ffc7577e88c1194f4f1757e277dc484ba096a3b94844319873d14b0f2d"}, + {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9f2d93bff2ea52fa93245798cddb479766a18510ea9b93a4fb9755c79474889"}, + {file = "shapely-2.0.3-cp312-cp312-win32.whl", hash = "sha256:99abad1fd1303b35d991703432c9481e3242b7b3a393c186cfb02373bf604004"}, + {file = "shapely-2.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:6f555fe3304a1f40398977789bc4fe3c28a11173196df9ece1e15c5bc75a48db"}, + {file = "shapely-2.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983cc418c1fa160b7d797cfef0e0c9f8c6d5871e83eae2c5793fce6a837fad9"}, + {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18bddb8c327f392189a8d5d6b9a858945722d0bb95ccbd6a077b8e8fc4c7890d"}, + {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:442f4dcf1eb58c5a4e3428d88e988ae153f97ab69a9f24e07bf4af8038536325"}, + {file = "shapely-2.0.3-cp37-cp37m-win32.whl", hash = "sha256:31a40b6e3ab00a4fd3a1d44efb2482278642572b8e0451abdc8e0634b787173e"}, + {file = "shapely-2.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:59b16976c2473fec85ce65cc9239bef97d4205ab3acead4e6cdcc72aee535679"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:705efbce1950a31a55b1daa9c6ae1c34f1296de71ca8427974ec2f27d57554e3"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:601c5c0058a6192df704cb889439f64994708563f57f99574798721e9777a44b"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f24ecbb90a45c962b3b60d8d9a387272ed50dc010bfe605f1d16dfc94772d8a1"}, + {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c2a2989222c6062f7a0656e16276c01bb308bc7e5d999e54bf4e294ce62e76"}, + {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42bceb9bceb3710a774ce04908fda0f28b291323da2688f928b3f213373b5aee"}, + {file = "shapely-2.0.3-cp38-cp38-win32.whl", hash = "sha256:54d925c9a311e4d109ec25f6a54a8bd92cc03481a34ae1a6a92c1fe6729b7e01"}, + {file = "shapely-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:300d203b480a4589adefff4c4af0b13919cd6d760ba3cbb1e56275210f96f654"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:083d026e97b6c1f4a9bd2a9171c7692461092ed5375218170d91705550eecfd5"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27b6e1910094d93e9627f2664121e0e35613262fc037051680a08270f6058daf"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:71b2de56a9e8c0e5920ae5ddb23b923490557ac50cb0b7fa752761bf4851acde"}, + {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d279e56bbb68d218d63f3efc80c819cedcceef0e64efbf058a1df89dc57201b"}, + {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88566d01a30f0453f7d038db46bc83ce125e38e47c5f6bfd4c9c287010e9bf74"}, + {file = "shapely-2.0.3-cp39-cp39-win32.whl", hash = "sha256:58afbba12c42c6ed44c4270bc0e22f3dadff5656d711b0ad335c315e02d04707"}, + {file = "shapely-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:5026b30433a70911979d390009261b8c4021ff87c7c3cbd825e62bb2ffa181bc"}, + {file = "shapely-2.0.3.tar.gz", hash = "sha256:4d65d0aa7910af71efa72fd6447e02a8e5dd44da81a983de9d736d6e6ccbe674"}, +] + +[package.dependencies] +numpy = ">=1.14,<2" + +[package.extras] +docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +test = ["pytest", "pytest-cov"] + [[package]] name = "shellingham" version = "1.5.4" @@ -4837,6 +6493,17 @@ files = [ {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + [[package]] name = "soupsieve" version = "2.5" @@ -4935,6 +6602,23 @@ postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] pymysql = ["pymysql"] sqlcipher = ["sqlcipher3_binary"] +[[package]] +name = "starlette" +version = "0.36.3" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.36.3-py3-none-any.whl", hash = "sha256:13d429aa93a61dc40bf503e8c801db1f1bca3dc706b10ef2434a36123568f044"}, + {file = "starlette-0.36.3.tar.gz", hash = "sha256:90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] + [[package]] name = "streamlit" version = "1.32.1" @@ -4970,6 +6654,20 @@ watchdog = {version = ">=2.1.5", markers = "platform_system != \"Darwin\""} [package.extras] snowflake = ["snowflake-connector-python (>=2.8.0)", "snowflake-snowpark-python (>=0.9.0)"] +[[package]] +name = "sympy" +version = "1.12" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, + {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, +] + +[package.dependencies] +mpmath = ">=0.19" + [[package]] name = "tabulate" version = "0.9.0" @@ -5090,6 +6788,133 @@ requests = ">=2.26.0" [package.extras] blobfile = ["blobfile (>=2)"] +[[package]] +name = "tokenizers" +version = "0.15.2" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tokenizers-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:52f6130c9cbf70544287575a985bf44ae1bda2da7e8c24e97716080593638012"}, + {file = "tokenizers-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:054c1cc9c6d68f7ffa4e810b3d5131e0ba511b6e4be34157aa08ee54c2f8d9ee"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9b9b070fdad06e347563b88c278995735292ded1132f8657084989a4c84a6d5"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea621a7eef4b70e1f7a4e84dd989ae3f0eeb50fc8690254eacc08acb623e82f1"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf7fd9a5141634fa3aa8d6b7be362e6ae1b4cda60da81388fa533e0b552c98fd"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44f2a832cd0825295f7179eaf173381dc45230f9227ec4b44378322d900447c9"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b9ec69247a23747669ec4b0ca10f8e3dfb3545d550258129bd62291aabe8605"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b6a4c78da863ff26dbd5ad9a8ecc33d8a8d97b535172601cf00aee9d7ce9ce"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5ab2a4d21dcf76af60e05af8063138849eb1d6553a0d059f6534357bce8ba364"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a47acfac7e511f6bbfcf2d3fb8c26979c780a91e06fb5b9a43831b2c0153d024"}, + {file = "tokenizers-0.15.2-cp310-none-win32.whl", hash = "sha256:064ff87bb6acdbd693666de9a4b692add41308a2c0ec0770d6385737117215f2"}, + {file = "tokenizers-0.15.2-cp310-none-win_amd64.whl", hash = "sha256:3b919afe4df7eb6ac7cafd2bd14fb507d3f408db7a68c43117f579c984a73843"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:89cd1cb93e4b12ff39bb2d626ad77e35209de9309a71e4d3d4672667b4b256e7"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cfed5c64e5be23d7ee0f0e98081a25c2a46b0b77ce99a4f0605b1ec43dd481fa"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a907d76dcfda37023ba203ab4ceeb21bc5683436ebefbd895a0841fd52f6f6f2"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20ea60479de6fc7b8ae756b4b097572372d7e4032e2521c1bbf3d90c90a99ff0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:48e2b9335be2bc0171df9281385c2ed06a15f5cf121c44094338306ab7b33f2c"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:112a1dd436d2cc06e6ffdc0b06d55ac019a35a63afd26475205cb4b1bf0bfbff"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4620cca5c2817177ee8706f860364cc3a8845bc1e291aaf661fb899e5d1c45b0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccd73a82751c523b3fc31ff8194702e4af4db21dc20e55b30ecc2079c5d43cb7"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:107089f135b4ae7817affe6264f8c7a5c5b4fd9a90f9439ed495f54fcea56fb4"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0ff110ecc57b7aa4a594396525a3451ad70988e517237fe91c540997c4e50e29"}, + {file = "tokenizers-0.15.2-cp311-none-win32.whl", hash = "sha256:6d76f00f5c32da36c61f41c58346a4fa7f0a61be02f4301fd30ad59834977cc3"}, + {file = "tokenizers-0.15.2-cp311-none-win_amd64.whl", hash = "sha256:cc90102ed17271cf0a1262babe5939e0134b3890345d11a19c3145184b706055"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f86593c18d2e6248e72fb91c77d413a815153b8ea4e31f7cd443bdf28e467670"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0774bccc6608eca23eb9d620196687c8b2360624619623cf4ba9dc9bd53e8b51"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d0222c5b7c9b26c0b4822a82f6a7011de0a9d3060e1da176f66274b70f846b98"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3835738be1de66624fff2f4f6f6684775da4e9c00bde053be7564cbf3545cc66"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0143e7d9dcd811855c1ce1ab9bf5d96d29bf5e528fd6c7824d0465741e8c10fd"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db35825f6d54215f6b6009a7ff3eedee0848c99a6271c870d2826fbbedf31a38"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f5e64b0389a2be47091d8cc53c87859783b837ea1a06edd9d8e04004df55a5c"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e0480c452217edd35eca56fafe2029fb4d368b7c0475f8dfa3c5c9c400a7456"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a33ab881c8fe70474980577e033d0bc9a27b7ab8272896e500708b212995d834"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a308a607ca9de2c64c1b9ba79ec9a403969715a1b8ba5f998a676826f1a7039d"}, + {file = "tokenizers-0.15.2-cp312-none-win32.whl", hash = "sha256:b8fcfa81bcb9447df582c5bc96a031e6df4da2a774b8080d4f02c0c16b42be0b"}, + {file = "tokenizers-0.15.2-cp312-none-win_amd64.whl", hash = "sha256:38d7ab43c6825abfc0b661d95f39c7f8af2449364f01d331f3b51c94dcff7221"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:38bfb0204ff3246ca4d5e726e8cc8403bfc931090151e6eede54d0e0cf162ef0"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c861d35e8286a53e06e9e28d030b5a05bcbf5ac9d7229e561e53c352a85b1fc"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:936bf3842db5b2048eaa53dade907b1160f318e7c90c74bfab86f1e47720bdd6"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:620beacc3373277700d0e27718aa8b25f7b383eb8001fba94ee00aeea1459d89"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2735ecbbf37e52db4ea970e539fd2d450d213517b77745114f92867f3fc246eb"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:473c83c5e2359bb81b0b6fde870b41b2764fcdd36d997485e07e72cc3a62264a"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968fa1fb3c27398b28a4eca1cbd1e19355c4d3a6007f7398d48826bbe3a0f728"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:865c60ae6eaebdde7da66191ee9b7db52e542ed8ee9d2c653b6d190a9351b980"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7c0d8b52664ab2d4a8d6686eb5effc68b78608a9008f086a122a7b2996befbab"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f33dfbdec3784093a9aebb3680d1f91336c56d86cc70ddf88708251da1fe9064"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d44ba80988ff9424e33e0a49445072ac7029d8c0e1601ad25a0ca5f41ed0c1d6"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:dce74266919b892f82b1b86025a613956ea0ea62a4843d4c4237be2c5498ed3a"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0ef06b9707baeb98b316577acb04f4852239d856b93e9ec3a299622f6084e4be"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73e2e74bbb07910da0d37c326869f34113137b23eadad3fc00856e6b3d9930c"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eeb12daf02a59e29f578a865f55d87cd103ce62bd8a3a5874f8fdeaa82e336b"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ba9f6895af58487ca4f54e8a664a322f16c26bbb442effd01087eba391a719e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccec77aa7150e38eec6878a493bf8c263ff1fa8a62404e16c6203c64c1f16a26"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f40604f5042ff210ba82743dda2b6aa3e55aa12df4e9f2378ee01a17e2855e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5645938a42d78c4885086767c70923abad047163d809c16da75d6b290cb30bbe"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05a77cbfebe28a61ab5c3891f9939cc24798b63fa236d84e5f29f3a85a200c00"}, + {file = "tokenizers-0.15.2-cp37-none-win32.whl", hash = "sha256:361abdc068e8afe9c5b818769a48624687fb6aaed49636ee39bec4e95e1a215b"}, + {file = "tokenizers-0.15.2-cp37-none-win_amd64.whl", hash = "sha256:7ef789f83eb0f9baeb4d09a86cd639c0a5518528f9992f38b28e819df397eb06"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4fe1f74a902bee74a3b25aff180fbfbf4f8b444ab37c4d496af7afd13a784ed2"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c4b89038a684f40a6b15d6b09f49650ac64d951ad0f2a3ea9169687bbf2a8ba"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d05a1b06f986d41aed5f2de464c003004b2df8aaf66f2b7628254bcbfb72a438"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:508711a108684111ec8af89d3a9e9e08755247eda27d0ba5e3c50e9da1600f6d"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:daa348f02d15160cb35439098ac96e3a53bacf35885072611cd9e5be7d333daa"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:494fdbe5932d3416de2a85fc2470b797e6f3226c12845cadf054dd906afd0442"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2d60f5246f4da9373f75ff18d64c69cbf60c3bca597290cea01059c336d2470"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93268e788825f52de4c7bdcb6ebc1fcd4a5442c02e730faa9b6b08f23ead0e24"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6fc7083ab404019fc9acafe78662c192673c1e696bd598d16dc005bd663a5cf9"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e39b41e5531d6b2122a77532dbea60e171ef87a3820b5a3888daa847df4153"}, + {file = "tokenizers-0.15.2-cp38-none-win32.whl", hash = "sha256:06cd0487b1cbfabefb2cc52fbd6b1f8d4c37799bd6c6e1641281adaa6b2504a7"}, + {file = "tokenizers-0.15.2-cp38-none-win_amd64.whl", hash = "sha256:5179c271aa5de9c71712e31cb5a79e436ecd0d7532a408fa42a8dbfa4bc23fd9"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:82f8652a74cc107052328b87ea8b34291c0f55b96d8fb261b3880216a9f9e48e"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:02458bee6f5f3139f1ebbb6d042b283af712c0981f5bc50edf771d6b762d5e4f"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9a09cd26cca2e1c349f91aa665309ddb48d71636370749414fbf67bc83c5343"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158be8ea8554e5ed69acc1ce3fbb23a06060bd4bbb09029431ad6b9a466a7121"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ddba9a2b0c8c81633eca0bb2e1aa5b3a15362b1277f1ae64176d0f6eba78ab1"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ef5dd1d39797044642dbe53eb2bc56435308432e9c7907728da74c69ee2adca"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:454c203164e07a860dbeb3b1f4a733be52b0edbb4dd2e5bd75023ffa8b49403a"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cf6b7f1d4dc59af960e6ffdc4faffe6460bbfa8dce27a58bf75755ffdb2526d"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2ef09bbc16519f6c25d0c7fc0c6a33a6f62923e263c9d7cca4e58b8c61572afb"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c9a2ebdd2ad4ec7a68e7615086e633857c85e2f18025bd05d2a4399e6c5f7169"}, + {file = "tokenizers-0.15.2-cp39-none-win32.whl", hash = "sha256:918fbb0eab96fe08e72a8c2b5461e9cce95585d82a58688e7f01c2bd546c79d0"}, + {file = "tokenizers-0.15.2-cp39-none-win_amd64.whl", hash = "sha256:524e60da0135e106b254bd71f0659be9f89d83f006ea9093ce4d1fab498c6d0d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6a9b648a58281c4672212fab04e60648fde574877d0139cd4b4f93fe28ca8944"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7c7d18b733be6bbca8a55084027f7be428c947ddf871c500ee603e375013ffba"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:13ca3611de8d9ddfbc4dc39ef54ab1d2d4aaa114ac8727dfdc6a6ec4be017378"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:237d1bf3361cf2e6463e6c140628e6406766e8b27274f5fcc62c747ae3c6f094"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67a0fe1e49e60c664915e9fb6b0cb19bac082ab1f309188230e4b2920230edb3"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4e022fe65e99230b8fd89ebdfea138c24421f91c1a4f4781a8f5016fd5cdfb4d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d857be2df69763362ac699f8b251a8cd3fac9d21893de129bc788f8baaef2693"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:708bb3e4283177236309e698da5fcd0879ce8fd37457d7c266d16b550bcbbd18"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c35e09e9899b72a76e762f9854e8750213f67567787d45f37ce06daf57ca78"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1257f4394be0d3b00de8c9e840ca5601d0a4a8438361ce9c2b05c7d25f6057b"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02272fe48280e0293a04245ca5d919b2c94a48b408b55e858feae9618138aeda"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dc3ad9ebc76eabe8b1d7c04d38be884b8f9d60c0cdc09b0aa4e3bcf746de0388"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:32e16bdeffa7c4f46bf2152172ca511808b952701d13e7c18833c0b73cb5c23f"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fb16ba563d59003028b678d2361a27f7e4ae0ab29c7a80690efa20d829c81fdb"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:2277c36d2d6cdb7876c274547921a42425b6810d38354327dd65a8009acf870c"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cf75d32e8d250781940d07f7eece253f2fe9ecdb1dc7ba6e3833fa17b82fcbc"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1b3b31884dc8e9b21508bb76da80ebf7308fdb947a17affce815665d5c4d028"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10122d8d8e30afb43bb1fe21a3619f62c3e2574bff2699cf8af8b0b6c5dc4a3"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d88b96ff0fe8e91f6ef01ba50b0d71db5017fa4e3b1d99681cec89a85faf7bf7"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:37aaec5a52e959892870a7c47cef80c53797c0db9149d458460f4f31e2fb250e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e2ea752f2b0fe96eb6e2f3adbbf4d72aaa1272079b0dfa1145507bd6a5d537e6"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b19a808d8799fda23504a5cd31d2f58e6f52f140380082b352f877017d6342b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c86e5e068ac8b19204419ed8ca90f9d25db20578f5881e337d203b314f4104"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de19c4dc503c612847edf833c82e9f73cd79926a384af9d801dcf93f110cea4e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea09acd2fe3324174063d61ad620dec3bcf042b495515f27f638270a7d466e8b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cf27fd43472e07b57cf420eee1e814549203d56de00b5af8659cb99885472f1f"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7ca22bd897537a0080521445d91a58886c8c04084a6a19e6c78c586e0cfa92a5"}, + {file = "tokenizers-0.15.2.tar.gz", hash = "sha256:e6e9c6e019dd5484be5beafc775ae6c925f4c69a3487040ed09b45e13df2cb91"}, +] + +[package.dependencies] +huggingface_hub = ">=0.16.4,<1.0" + +[package.extras] +dev = ["tokenizers[testing]"] +docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"] +testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] + [[package]] name = "toml" version = "0.10.2" @@ -5174,6 +6999,42 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "trio" +version = "0.25.0" +description = "A friendly Python library for async concurrency and I/O" +optional = false +python-versions = ">=3.8" +files = [ + {file = "trio-0.25.0-py3-none-any.whl", hash = "sha256:e6458efe29cc543e557a91e614e2b51710eba2961669329ce9c862d50c6e8e81"}, + {file = "trio-0.25.0.tar.gz", hash = "sha256:9b41f5993ad2c0e5f62d0acca320ec657fdb6b2a2c22b8c7aed6caf154475c4e"}, +] + +[package.dependencies] +attrs = ">=23.2.0" +cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""} +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = "*" +outcome = "*" +sniffio = ">=1.3.0" +sortedcontainers = "*" + +[[package]] +name = "trio-websocket" +version = "0.11.1" +description = "WebSocket library for Trio" +optional = false +python-versions = ">=3.7" +files = [ + {file = "trio-websocket-0.11.1.tar.gz", hash = "sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f"}, + {file = "trio_websocket-0.11.1-py3-none-any.whl", hash = "sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +trio = ">=0.11" +wsproto = ">=0.14" + [[package]] name = "trove-classifiers" version = "2024.3.3" @@ -5279,12 +7140,85 @@ files = [ {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] +[package.dependencies] +pysocks = {version = ">=1.5.6,<1.5.7 || >1.5.7,<2.0", optional = true, markers = "extra == \"socks\""} + [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "uvicorn" +version = "0.29.0" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, + {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} +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\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "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" +version = "0.19.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, + {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, +] + +[package.extras] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + [[package]] name = "virtualenv" version = "20.25.1" @@ -5346,6 +7280,93 @@ files = [ [package.extras] watchmedo = ["PyYAML (>=3.10)"] +[[package]] +name = "watchfiles" +version = "0.21.0" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, + {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, + {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, + {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, + {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, + {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, + {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, + {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, + {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, + {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, + {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, + {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, + {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, + {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, +] + +[package.dependencies] +anyio = ">=3.0.0" + [[package]] name = "web3" version = "6.15.1" @@ -5381,6 +7402,22 @@ ipfs = ["ipfshttpclient (==0.8.0a2)"] linter = ["black (>=22.1.0)", "flake8 (==3.8.3)", "isort (>=5.11.0)", "mypy (==1.4.1)", "types-protobuf (==3.19.13)", "types-requests (>=2.26.1)", "types-setuptools (>=57.4.4)"] tester = ["eth-tester[py-evm] (==v0.9.1-b.2)", "py-geth (>=3.14.0)"] +[[package]] +name = "websocket-client" +version = "1.7.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + [[package]] name = "websockets" version = "12.0" @@ -5558,6 +7595,20 @@ files = [ {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] +[[package]] +name = "wsproto" +version = "1.2.0" +description = "WebSockets state-machine based protocol implementation" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, + {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, +] + +[package.dependencies] +h11 = ">=0.9.0,<1" + [[package]] name = "xattr" version = "1.1.0" @@ -5734,6 +7785,41 @@ files = [ idna = ">=2.0" multidict = ">=4.0" +[[package]] +name = "youtube-transcript-api" +version = "0.6.2" +description = "This is an python API which allows you to get the transcripts/subtitles for a given YouTube video. It also works for automatically generated subtitles, supports translating subtitles and it does not require a headless browser, like other selenium based solutions do!" +optional = false +python-versions = "*" +files = [ + {file = "youtube_transcript_api-0.6.2-py3-none-any.whl", hash = "sha256:019dbf265c6a68a0591c513fff25ed5a116ce6525832aefdfb34d4df5567121c"}, + {file = "youtube_transcript_api-0.6.2.tar.gz", hash = "sha256:cad223d7620633cec44f657646bffc8bbc5598bd8e70b1ad2fa8277dec305eb7"}, +] + +[package.dependencies] +requests = "*" + +[[package]] +name = "yt-dlp" +version = "2023.12.30" +description = "A youtube-dl fork with additional features and patches" +optional = false +python-versions = ">=3.8" +files = [ + {file = "yt-dlp-2023.12.30.tar.gz", hash = "sha256:a11862e57721b0a0f0883dfeb5a4d79ba213a2d4c45e1880e9fd70f8e6570c38"}, + {file = "yt_dlp-2023.12.30-py2.py3-none-any.whl", hash = "sha256:c00d9a71d64472ad441bcaa1ec0c3797d6e60c9f934f270096a96fe51657e7b3"}, +] + +[package.dependencies] +brotli = {version = "*", markers = "implementation_name == \"cpython\""} +brotlicffi = {version = "*", markers = "implementation_name != \"cpython\""} +certifi = "*" +mutagen = "*" +pycryptodomex = "*" +requests = ">=2.31.0,<3" +urllib3 = ">=1.26.17,<3" +websockets = ">=12.0" + [[package]] name = "zipp" version = "3.18.0" @@ -5752,4 +7838,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "~3.10.0" -content-hash = "cb59b50824d38e37378e1575d1c49a895408abbd5727a7d778dc12ae1a9e75c2" +content-hash = "00c740468f31251c9e7aa74a78b96b4f508aa7f45377103381f2445978bffb00" diff --git a/pyproject.toml b/pyproject.toml index 4b758f66..bda64a36 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,7 @@ google-search-results = "*" pytest = "*" llama-index = "~0.9.0" duckduckgo-search = "*" -crewai = "*" +crewai = {extras = ["tools"], version = "^0.22.5"} # metagpt = "*" # Commented out because requires super old version of langchain, and conflicts with crewai. replicate = "*" typer = "^0.9.0" From a3100f56fa4b5147f186e1ee25ef97934ff99f74 Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Wed, 3 Apr 2024 19:31:32 -0300 Subject: [PATCH 02/17] Added agent that asks subsequential questions --- agent_thinks_more.ipynb | 2009 +++++++++++++++++ crewai_multiple_agent.ipynb | 532 ++++- poetry.lock | 2 +- .../crewai_agent_subquestions.py | 140 ++ .../crewai_subsequential_agent/prompts.py | 106 + pyproject.toml | 1 + 6 files changed, 2723 insertions(+), 67 deletions(-) create mode 100644 agent_thinks_more.ipynb create mode 100644 prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py create mode 100644 prediction_market_agent/agents/crewai_subsequential_agent/prompts.py diff --git a/agent_thinks_more.ipynb b/agent_thinks_more.ipynb new file mode 100644 index 00000000..e822b0a3 --- /dev/null +++ b/agent_thinks_more.ipynb @@ -0,0 +1,2009 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a0d07b7d-b093-4104-a1e4-12f2184f0644", + "metadata": {}, + "source": [ + "# Intro\n", + "\n", + "- We need to complete 3 tasks\n", + "- Task1: divide question into multiple outcomes\n", + "- Task2: return a dictionary containing outcome as key and decision, p_yes, p_no, ... as value\n", + "- Task3: having the above values, return yes/no for the given question." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "be934b33-46f6-475b-b0c3-373b87635de3", + "metadata": {}, + "outputs": [], + "source": [ + "import crewai\n", + "import json\n", + "import os\n", + "from crewai import Agent\n", + "from crewai_tools import SerperDevTool\n", + "from dotenv import load_dotenv\n", + "from pydantic import BaseModel\n", + "from crewai import Crew, Process, Agent, Task\n", + "search_tool = SerperDevTool()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "15f1966a-a891-4667-b65d-4f2db40a0214", + "metadata": {}, + "outputs": [], + "source": [ + "class Outcomes(BaseModel):\n", + " outcomes: list[str]\n", + "\n", + "class ProbabilityOutput(BaseModel):\n", + " decision: str\n", + " p_yes: float\n", + " p_no: float\n", + " confidence: float" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ef09caeb-79de-413a-877b-436e3d601e0f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "load_dotenv()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "42967b8a-ea5f-466b-9022-ab469d08de02", + "metadata": {}, + "outputs": [], + "source": [ + "# Define your agents\n", + "researcher = Agent(\n", + " role=\"Research Analyst\",\n", + " goal=\"Research and report on some future event, giving high quality and nuanced analysis\",\n", + " backstory=\"You are a senior research analyst who is adept at researching and reporting on future events.\",\n", + " verbose=True,\n", + " allow_delegation=False,\n", + " tools=[search_tool],\n", + " )\n", + "\n", + "analyst = Agent(\n", + " role='Data Analyst',\n", + " goal='Analyze research findings',\n", + " backstory='A meticulous analyst with a knack for uncovering patterns'\n", + ")\n", + "\n", + "writer = Agent(\n", + " role='Writer',\n", + " goal='Draft the final report',\n", + " backstory='A skilled writer with a talent for crafting compelling narratives'\n", + ")\n", + "\n", + "predictor = Agent(\n", + " role=\"Professional Gambler\",\n", + " goal=\"Predict, based on some research you are presented with, whether or not a given event will occur\",\n", + " backstory=\"You are a professional gambler who is adept at predicting and betting on the outcomes of future events.\",\n", + " verbose=True,\n", + " allow_delegation=False,\n", + " tools=[]\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "9525e0a9-b9df-4b59-a71d-32f7de0eeef5", + "metadata": {}, + "outputs": [], + "source": [ + "# ToDo - Test both research prompts\n", + "CREATE_OUTCOMES_FROM_SCENARIO_PROMPT = \"\"\"\n", + " You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes.\n", + " You should break down the SCENARIO into a list of possible outcomes.\n", + " \n", + " Example 1:\n", + " - SCENARIO: Will Gnosis Pay reach 100,000 users by 2025?\n", + " - Answer: '''\n", + " - Gnosis Pay reaches less than 25,000 users by 2025\n", + " - Gnosis Pay reaches more than 25,000 users but less than 50,000 users by 2025\n", + " - Gnosis Pay reaches more than 50,000 users but less than 75,000 users by 2025\n", + " - Gnosis Pay reaches 100,000 users or more by 2025\n", + " '''\n", + "\n", + " Example 2:\n", + " - SCENARIO: Will the price of Bitcoin go up again in the next 2 months?\n", + " - Answer: '''\n", + " - The price of crypto will go up in the next 2 months\n", + " - The price of crypto will not go up in the next 2 months\n", + " '''\n", + " \n", + " [SCENARIO]\n", + " {scenario}\n", + " \"\"\"\n", + "# research_prompt2 = \"\"\"\n", + "# You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes.\n", + "# You should break down the SCENARIO into a list of possible outcomes.\n", + " \n", + "# [SCENARIO]\n", + "# {scenario}\n", + "# \"\"\"\n", + "\n", + "CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT = '''\n", + " A list containing multiple bullet points. Each bullet point should start with '-'.\n", + " Each bullet point should contain a possible outcome resulting from the\n", + " provided SCENARIO. The produced outcomes should be mutually exclusive, i.e. only one of them should be true whereas\n", + " the remaining ones should be false.\n", + " '''" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "128836b6-6f7e-4b7a-a2ef-4fb83d1d2e37", + "metadata": {}, + "outputs": [], + "source": [ + "def print_outcomes(question:str) -> None:\n", + " create_outcomes_task = Task(\n", + " description=(CREATE_OUTCOMES_FROM_SCENARIO_PROMPT),\n", + " expected_output=CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT,\n", + " #tools=[search_tool],\n", + " tools = [],\n", + " output_json=Outcomes,\n", + " agent=researcher,\n", + " )\n", + "\n", + " report_crew = Crew(\n", + " agents=[researcher],\n", + " tasks=[create_outcomes_task],\n", + " )\n", + " result = report_crew.kickoff(inputs={'scenario': question})\n", + " print(result)\n", + " return result" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "177eb8be-4f31-4fa6-8aa3-36035bcad720", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-03 18:11:11,015 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mSince it is a future event, I need to research the current trends and opinions around the use of smart accounts in the EVM ecosystem. This will help me identify the possible outcomes for the next 3-5 years. \n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\n", + "\"search_query\": \"future of smart accounts in EVM ecosystem\"\n", + "}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Ethereum devs debate future of account abstraction - Blockworks\n", + "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", + "Snippet: Ethereum devs debate future of account abstraction ... EVM ecosystem towards smart contract accounts (SCAs). ... future trajectory of the network.\n", + "---\n", + "Title: State of Wallets - Part 2: Smart Accounts (Account Abstraction\n", + "Link: https://www.coinbase.com/blog/state-of-wallets-2\n", + "Snippet: Account Abstraction (“AA”) launched in the EVM ecosystem in Q1-2023 and is beginning to see an uptick in adoption.\n", + "---\n", + "Title: Future of Smart Accounts: Modular, Specialised & Multichain\n", + "Link: https://longhashvc.medium.com/future-of-smart-accounts-modular-specialised-multichain-d04f083375a6\n", + "Snippet: In the more distant future, we expect smart accounts to incorporate intents and LLMs. We envision the future smart wallet to be able to: Use ...\n", + "---\n", + "Title: Smart Accounts Adoption Accelerated in Q4 2023 - Alchemy\n", + "Link: https://www.alchemy.com/blog/smart-accounts-adoption-accelerated-in-q4-2023\n", + "Snippet: ERC-4337 smart account adoption saw major growth in the fourth quarter of 2024, surpassing 1 million total deployed accounts!\n", + "---\n", + "Title: The Future of the Ethereum Virtual Machine (EVM) in 2023 - CoinDesk\n", + "Link: https://www.coindesk.com/consensus-magazine/2022/12/12/ethereum-virtual-machine-evm-future/\n", + "Snippet: A growing collection of EVMs will become increasingly specialized. The EVM is by far the most popular execution environment among smart contract ...\n", + "---\n", + "Title: The Future of Web3 Account Abstraction with Oasis\n", + "Link: https://oasisprotocol.org/blog/web3-account-abstraction\n", + "Snippet: Oasis Sapphire proposes a simpler solution to account abstraction for the entire EVM ecosystem. By design, every smart contract on Oasis ...\n", + "---\n", + "Title: Coinbase: The Current State of Smart Account Wallets - Coinlive\n", + "Link: https://www.coinlive.com/news/coinbase-the-current-state-of-smart-account-wallets\n", + "Snippet: The \"Account Abstraction\" (or ERC-4337) will be released within the ETH/EVM ecosystem in Q1 2023. AA defines a standard so that users can ...\n", + "---\n", + "Title: The Year of Transformation with Account Abstraction - LinkedIn\n", + "Link: https://www.linkedin.com/pulse/year-transformation-account-abstraction-actalink-28off\n", + "Snippet: It enabled the creation of smart accounts\", on Ethereum and other EVM ... Future of Account Abstraction in 2024. The ... Monetization models within ...\n", + "---\n", + "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", + "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", + "Snippet: Smart accounts offer a range of advanced features, such as multi-signature authorization, time-based unlocking, and threshold-based transaction ...\n", + "---\n", + "Title: Making Biconomy Smart Accounts Modular\n", + "Link: https://www.biconomy.io/post/making-biconomy-smart-accounts-modular\n", + "Snippet: With our new modular architecture, Biconomy is evolving Smart Account from wallet layer to a platform! The Smart Account Platform enables ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results indicate that there is an ongoing debate about the role of smart accounts in the EVM ecosystem. They also show that smart accounts have seen an uptick in adoption and have reached over a million total deployed accounts. Given this information, I can now outline several possible outcomes for the next 3-5 years.\n", + "\n", + "Final Answer: \n", + "'''\n", + "- Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases\n", + "- Smart accounts will coexist with EOAs, with each type of account being used for different applications\n", + "- Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account\n", + "- Smart accounts will not gain further adoption and EOAs will remain the dominant type of account\n", + "'''\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "{\n", + " \"outcomes\": [\n", + " \"Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases\",\n", + " \"Smart accounts will coexist with EOAs, with each type of account being used for different applications\",\n", + " \"Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account\",\n", + " \"Smart accounts will not gain further adoption and EOAs will remain the dominant type of account\"\n", + " ]\n", + "}\n" + ] + } + ], + "source": [ + "question = 'Will smart accounts replace EOAs in the EVM ecosystem in the next 3-5 years?'\n", + "result = print_outcomes(question)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "dfea9fe6-5ff9-45a1-a5e9-03fed99b9b78", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years',\n", + " 'Smart accounts will become the dominant form of accounts, but EOAs will still be used in the EVM ecosystem within the next 3-5 years',\n", + " 'Both smart accounts and EOAs will continue to coexist with no dominant form in the EVM ecosystem within the next 3-5 years',\n", + " 'EOAs will remain the dominant form of accounts while smart accounts adoption grows in the EVM ecosystem within the next 3-5 years',\n", + " 'EOAs will continue to be the dominant form of accounts, and smart accounts will not gain significant traction in the EVM ecosystem within the next 3-5 years']" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "json.loads(result)['outcomes']" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "4f46f468-5f01-4277-8db4-4c359dde96e9", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "b7c3e5f6-3eaa-4b46-a91d-27b997fc8408", + "metadata": {}, + "outputs": [], + "source": [ + "# ToDo - Test both research prompts\n", + "RESEARCH_OUTCOME_PROMPT = \"\"\"\n", + " Research and report on the following sentence:\n", + " {sentence}\n", + " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", + " \"\"\"\n", + "RESEARCH_OUTCOME_OUTPUT = \"\"\"\n", + " Return your answer in raw JSON format, with no special formatting such as newlines, as follows:\n", + " {{\"report\": }}\n", + " where is a free text field that contains a well though out justification \n", + " for the predicition based on the summary of your findings.\n", + " \"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "687efd9f-e0c2-4386-9a75-88b85cda1710", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "def generate_prediction_for_one_outcome(sentence: str):\n", + "\n", + " task_research_one_outcome = Task(\n", + " description=(RESEARCH_OUTCOME_PROMPT),\n", + " tools=[search_tool],\n", + " agent=researcher,\n", + " expected_output=(RESEARCH_OUTCOME_OUTPUT),\n", + " )\n", + " task_create_probability_for_one_outcome = Task(\n", + " description=(\"\"\"\n", + " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", + " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", + " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", + " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", + " * Use the tools provided to aid your estimation.\n", + " * Evaluate recent information more heavily than older information.\n", + " * Your response should include:\n", + " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", + " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + " \n", + " Ensure p_yes + p_no equals 1.\n", + " \n", + " SENTENCE: {sentence}\n", + " \"\"\"\n", + " ),\n", + " expected_output=\"\"\"\n", + " Your response should include:\n", + " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to \n", + " 1 (maximum confidence). Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + " \n", + " Format your response in JSON format, including the keys \"decision\", \"p_yes\", \"p_no\" and \"confidence\".\n", + " \"\"\",\n", + " agent=predictor,\n", + " output_json=ProbabilityOutput,\n", + " context=[task_research_one_outcome]\n", + " )\n", + " crew = Crew(\n", + " agents=[researcher, predictor],\n", + " tasks=[task_research_one_outcome, task_create_probability_for_one_outcome],\n", + " verbose=2,\n", + " process=Process.sequential \n", + " )\n", + " \n", + " #sentence = 'The temperature will be above 20C on May 24, 2024 in Berlin.'\n", + " sentence = 'Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years'\n", + " result = crew.kickoff(inputs={'sentence': sentence})\n", + " return result" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "376ec60d-a44b-4211-bc68-8e9e95172a0a", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-03 18:14:18,407 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Research and report on the following sentence:\n", + " Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mI need to research whether smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years. This requires an understanding of what smart accounts and EOAs are, how they function in the EVM ecosystem currently, and any potential developments that could lead to smart accounts replacing EOAs. To gather this information, I'll need to search the internet.\n", + "\n", + "Action: Search the internet\n", + "Action Input: {\"search_query\": \"Smart accounts vs EOAs in the EVM ecosystem\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: EOA vs. Smart Contract Account: What Is the Difference?\n", + "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", + "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", + "---\n", + "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", + "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", + "Snippet: The key difference between EOAs and smart accounts is that smart accounts are programmable and can execute code, while EOAs are simply accounts ...\n", + "---\n", + "Title: Understanding the Ethereum Virtual Machine (EVM), Transaction ...\n", + "Link: https://medium.com/coinmonks/understanding-the-ethereum-virtual-machine-evm-transaction-structure-and-account-types-52bcdb3e4d99\n", + "Snippet: Contract accounts are distinct from EOAs as they are not controlled by private keys but by the code of a smart contract. These accounts hold ...\n", + "---\n", + "Title: EOAs vs Contracts: Understanding the Two Types of Ethereum ...\n", + "Link: https://medium.com/@tanish_gupta/eoas-vs-contracts-understanding-the-two-types-of-ethereum-accounts-378f9402d0e8\n", + "Snippet: Contract accounts are used on the Ethereum network to create and execute smart ... EOAs, whereas contract accounts are used to execute smart ...\n", + "---\n", + "Title: ERC 4337: Understanding Account Abstraction - HackerNoon\n", + "Link: https://hackernoon.com/erc-4337-understanding-account-abstraction\n", + "Snippet: Two types of accounts exist on EVM-based blockchain platforms: EOMs or Externally Owned Accounts and Smart Contract Accounts, also referred to ...\n", + "---\n", + "Title: Understanding Ethereum Account Abstraction - CoinsBench\n", + "Link: https://coinsbench.com/understanding-ethereum-account-abstraction-revolutionizing-smart-contract-interactions-6de9c91af39b\n", + "Snippet: Traditionally, the EVM interacts with two types of accounts: externally owned accounts (EOAs) and contract accounts. EOAs are controlled by ...\n", + "---\n", + "Title: Account Abstraction Explained: The Role And Impact In Ethereum\n", + "Link: https://hacken.io/discover/account-abstraction/\n", + "Snippet: Externally owned accounts (EOAs) are accounts that are controlled by private keys, typically generated using a seed phrase. Unlike smart ...\n", + "---\n", + "Title: Ethereum devs debate future of account abstraction - Blockworks\n", + "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", + "Snippet: The first two goals are clearly not satisfied by Ethereum's “end user account” (EOA) model, hence the need to move the entire EVM ecosystem ...\n", + "---\n", + "Title: Introductory Guide to Account Abstraction (ERC-4337) - Blocknative\n", + "Link: https://www.blocknative.com/blog/account-abstraction-erc-4337-guide\n", + "Snippet: Unlike EOAs, smart contract accounts contain programmable logic that defines and automatically enforces rules via their code—IF this THEN that.\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results indicate that the key difference between EOAs and smart accounts is that smart accounts are programmable and can execute code, while EOAs are not. There seems to be a discussion in the Ethereum community about something called \"account abstraction,\" which may be relevant to the question of whether smart accounts could replace EOAs. I need to understand account abstraction and its potential impact on the EVM ecosystem.\n", + "\n", + "Action: Search the internet\n", + "Action Input: {\"search_query\": \"Account abstraction in EVM\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", + "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", + "Snippet: Account abstraction (ERC-4337) is an Ethereum update that lets you create non-custodial wallets as programmable smart contracts. It unlocks many ...\n", + "---\n", + "Title: Account abstraction - Ethereum.org\n", + "Link: https://ethereum.org/en/roadmap/account-abstraction/\n", + "Snippet: Account abstraction enables smart contracts to initiate transactions themselves, so that any logic that the user wishes to implement can be ...\n", + "---\n", + "Title: Account abstraction: A beginner's guide to Ethereum's ERC-4337 ...\n", + "Link: https://cointelegraph.com/learn/account-abstraction-guide-to-ethereums-erc-4337-standard\n", + "Snippet: Ethereum account abstraction is a new paradigm to allow for a more user-friendly experience when interacting with decentralized applications ...\n", + "---\n", + "Title: Account Abstraction at the Protocol Level - Hedera\n", + "Link: https://hedera.com/blog/account-abstraction-at-the-protocol-level\n", + "Snippet: In a nutshell, account abstraction is the ability to separate cryptographic keys from an account. In Ethereum, the account model is such ...\n", + "---\n", + "Title: Account Abstraction: Past, Present, Future | MetaMask News\n", + "Link: https://metamask.io/news/latest/account-abstraction-past-present-future/\n", + "Snippet: Account abstraction is a proposal to increase flexibility in the management and behavior of Ethereum accounts. We achieve this by introducing ...\n", + "---\n", + "Title: Account Abstraction and ERC 4337: Exploring the Future of Ethereum\n", + "Link: https://medium.com/@denniswon/account-abstraction-and-erc-4337-exploring-the-future-of-ethereum-56514ab34308\n", + "Snippet: Account abstraction is a concept in blockchain technology that allows for the use of smart contract accounts, also known as contract wallets ...\n", + "---\n", + "Title: Introduction to Account Abstraction - Alchemy Docs\n", + "Link: https://docs.alchemy.com/docs/introduction-to-account-abstraction\n", + "Snippet: Account abstraction aims to make the end user experience of interacting with EVM-based blockchains more flexible and user-friendly.\n", + "---\n", + "Title: Account Abstraction - The Starknet Book\n", + "Link: https://book.starknet.io/ch04-00-account-abstraction.html\n", + "Snippet: Account Abstraction (AA) represents an approach to managing accounts and transactions in blockchain networks. It involves two key concepts: Transaction ...\n", + "---\n", + "Title: What is Account Abstraction - Full Guide\n", + "Link: https://moralis.io/what-is-account-abstraction-full-guide/\n", + "Snippet: Account abstraction increases flexibility in the behavior and management of blockchain user accounts, making it significantly easier to create ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "Account abstraction (ERC-4337) is an Ethereum update that allows the creation of non-custodial wallets as programmable smart contracts. It separates cryptographic keys from an account, enabling smart contracts to initiate transactions themselves. This adds flexibility and user-friendliness to the management and behavior of Ethereum accounts. However, I still need to understand how this update might affect the role of EOAs in the EVM ecosystem.\n", + "\n", + "Action: Search the internet\n", + "Action Input: {\"search_query\": \"Impact of account abstraction on EOAs in EVM\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Account Abstraction Explained: The Role And Impact In Ethereum\n", + "Link: https://hacken.io/discover/account-abstraction/\n", + "Snippet: Account abstraction is an enhancement to the Ethereum protocol that allows for greater flexibility in user interactions. Instead of relying ...\n", + "---\n", + "Title: Account Abstraction: Revolutionizing The Payments Industry - LinkedIn\n", + "Link: https://www.linkedin.com/pulse/account-abstraction-revolutionizing-payments-industry-fuseio\n", + "Snippet: By unifying Contract Accounts and EOAs, while eliminating unnecessary logic, this transformative concept enhances the programmability of user ...\n", + "---\n", + "Title: Account Abstraction at the Protocol Level - Hedera\n", + "Link: https://hedera.com/blog/account-abstraction-at-the-protocol-level\n", + "Snippet: In a nutshell, account abstraction is the ability to separate cryptographic keys from an account. In Ethereum, the account model is such ...\n", + "---\n", + "Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", + "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", + "Snippet: Account abstraction enables the creation of smart accounts, which are independent smart contracts that can initiate and execute transactions ...\n", + "---\n", + "Title: Account Abstraction: A Comprehensive Guide - Halborn\n", + "Link: https://www.halborn.com/blog/post/account-abstraction-a-comprehensive-guide\n", + "Snippet: Web3 security firm Halborn provides an in-depth guide to Account Abstraction and its impacts on the Ethereum ecosystem.\n", + "---\n", + "Title: Exploring the Benefits of Account Abstraction on Ethereum - Reddit\n", + "Link: https://www.reddit.com/r/ethereum/comments/12kf9tx/exploring_the_benefits_of_account_abstraction_on/\n", + "Snippet: Account abstraction would allow smart contract wallets to accept gasless meta-transactions from users and pay for their gas without relying on ...\n", + "---\n", + "Title: Account Abstraction - Starknet\n", + "Link: https://www.starknet.io/en/content/account-abstraction\n", + "Snippet: Account abstraction entails abstracting the hard-coded authorization logic away from EOAs, turning each account into a programmable smart ...\n", + "---\n", + "Title: The Road to Account Abstraction on Ethereum | Galaxy\n", + "Link: https://www.galaxy.com/insights/research/the-road-to-account-abstraction-on-ethereum/\n", + "Snippet: This report dives into what account abstraction is and the solutions being proposed to enable the technology on Ethereum.\n", + "---\n", + "Title: Account Abstraction & Why it's a Big Deal for Wallet Security\n", + "Link: https://world.webacy.com/account-abstraction-why-its-a-big-deal-for-wallet-security/\n", + "Snippet: Account abstraction aims to eliminate EOAs by enabling all users to use smart contract wallets as their primary accounts. Decentralization: ...\n", + "---\n", + "Title: Account Abstraction at the Protocol Level - Brendan Graetz\n", + "Link: http://blog.bguiz.com/2023/account-abstraction-protocol-level/\n", + "Snippet: The account is thus inseparable from its private key, public key, and address. Almost all other EVM-compatible networks have followed Ethereum, ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "Account abstraction aims to unify Contract Accounts and EOAs. It enhances the programmability of user interactions and enables the creation of smart accounts, which are independent smart contracts that can initiate and execute transactions. This could significantly impact the role of EOAs in the EVM ecosystem. The key point is that account abstraction could potentially eliminate the need for EOAs by enabling all users to use smart contract wallets as their primary accounts. However, it's worth noting that the implementation of such a significant change in the Ethereum protocol would likely encounter challenges and take time to realize fully.\n", + "\n", + "Final Answer: \n", + "{\"report\": \"Account abstraction (ERC-4337) is an Ethereum update that allows for the creation of non-custodial wallets as programmable smart contracts. It separates cryptographic keys from an account and enables smart contracts to initiate transactions themselves, adding flexibility and user-friendliness to the management and behavior of Ethereum accounts. The key impact of account abstraction on EOAs is that it could potentially eliminate the need for EOAs by enabling all users to use smart contract wallets as their primary accounts. This would suggest that smart accounts could fully replace EOAs in the EVM ecosystem within the next 3-5 years. However, it's worth noting that the implementation of such a significant change in the Ethereum protocol would likely encounter challenges and take time to realize fully. Thus, while the move towards smart accounts appears to be a trend in the evolution of the EVM ecosystem, the timeline for full replacement of EOAs by smart accounts is uncertain and will depend on how quickly and smoothly the Ethereum community can implement and adapt to the changes brought about by account abstraction.\"}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\"report\": \"Account abstraction (ERC-4337) is an Ethereum update that allows for the creation of non-custodial wallets as programmable smart contracts. It separates cryptographic keys from an account and enables smart contracts to initiate transactions themselves, adding flexibility and user-friendliness to the management and behavior of Ethereum accounts. The key impact of account abstraction on EOAs is that it could potentially eliminate the need for EOAs by enabling all users to use smart contract wallets as their primary accounts. This would suggest that smart accounts could fully replace EOAs in the EVM ecosystem within the next 3-5 years. However, it's worth noting that the implementation of such a significant change in the Ethereum protocol would likely encounter challenges and take time to realize fully. Thus, while the move towards smart accounts appears to be a trend in the evolution of the EVM ecosystem, the timeline for full replacement of EOAs by smart accounts is uncertain and will depend on how quickly and smoothly the Ethereum community can implement and adapt to the changes brought about by account abstraction.\"}\n", + "\n", + "\u001b[00m\n", + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", + " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", + " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", + " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", + " * Use the tools provided to aid your estimation.\n", + " * Evaluate recent information more heavily than older information.\n", + " * Your response should include:\n", + " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", + " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + " \n", + " Ensure p_yes + p_no equals 1.\n", + " \n", + " SENTENCE: Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mLooking at the information provided in the report, it seems clear that there is a strong trend towards the use of smart accounts and a move away from EOAs in the EVM ecosystem. The introduction of account abstraction (ERC-4337) is a major factor in this, as it allows for greater flexibility and user-friendliness in the management of Ethereum accounts. However, it's also noted in the report that the implementation of such a significant change in the Ethereum protocol would likely face challenges and take time to fully realize. This introduces a level of uncertainty into the timeline for the full replacement of EOAs by smart accounts. Based on this, I'm led to believe that while the shift towards smart accounts is likely, it may not occur within the next 3-5 years as suggested in the sentence provided.\n", + "\n", + "Final Answer:\n", + " {\n", + " \"decision\": \"n\",\n", + " \"p_yes\": 0.4,\n", + " \"p_no\": 0.6,\n", + " \"confidence\": 0.7\n", + " }\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", + " \"decision\": \"n\",\n", + " \"p_yes\": 0.4,\n", + " \"p_no\": 0.6,\n", + " \"confidence\": 0.7\n", + "}\n", + "\n", + "\u001b[00m\n" + ] + } + ], + "source": [ + "#sentence = 'The temperature will be above 20C on May 24, 2024 in Berlin.'\n", + "sentence = 'Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years'\n", + "result = generate_prediction_for_one_outcome(sentence)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "6682b2b7-12a9-42bc-9c8a-16113395f14e", + "metadata": {}, + "outputs": [], + "source": [ + "prediction_for_outcome = ProbabilityOutput.parse_obj(json.loads(result))" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "f1bb390b-4f95-40ae-b4f3-d03582354746", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Outcomes(outcomes=['Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases', 'Smart accounts will coexist with EOAs, with each type of account being used for different applications', 'Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account', 'Smart accounts will not gain further adoption and EOAs will remain the dominant type of account'])" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "outcomes" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "4d72ab32-4e38-4adf-aafe-3049ad6267ab", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ProbabilityOutput(decision='n', p_yes=0.4, p_no=0.6, confidence=0.7)" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prediction_for_outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "c25ef289-0da0-40b7-8ba9-48b581442ab6", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-03 18:27:46,758 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Research and report on the following sentence:\n", + " Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mI first need to understand the context and the key terms in the sentence. Specifically, I need to understand the meaning of \"Smart accounts\", \"EOAs\", and \"EVM ecosystem\". I will then research the current trends and predictions about the future of these terms in the next 3-5 years. \n", + "\n", + "Action: \n", + "Search the internet \n", + "\n", + "Action Input: \n", + "{\"search_query\": \"What are Smart accounts, EOAs, and EVM ecosystem\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: EOA vs. Smart Contract Account: What Is the Difference?\n", + "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", + "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", + "---\n", + "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", + "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", + "Snippet: EOAs are the most basic type of Ethereum account. They are controlled by private keys, and transactions can be initiated only by the account ...\n", + "---\n", + "Title: Understanding the Ethereum Virtual Machine (EVM), Transaction ...\n", + "Link: https://medium.com/coinmonks/understanding-the-ethereum-virtual-machine-evm-transaction-structure-and-account-types-52bcdb3e4d99\n", + "Snippet: Contract accounts are distinct from EOAs as they are not controlled by private keys but by the code of a smart contract. These accounts hold ...\n", + "---\n", + "Title: ERC 4337: Understanding Account Abstraction - HackerNoon\n", + "Link: https://hackernoon.com/erc-4337-understanding-account-abstraction\n", + "Snippet: Account abstraction allows users to use smart contracts as their primary accounts. It essentially turns EOAs into smart contract-enabled ...\n", + "---\n", + "Title: What Are Ethereum Smart Accounts? - E-Crypto News\n", + "Link: https://e-cryptonews.com/what-are-ethereum-smart-accounts/\n", + "Snippet: Smart accounts are described as a kind of accounts that can be readily controlled by programmable smart contracts instead of private keys. Hence ...\n", + "---\n", + "Title: What are Ethereum Accounts? - QuickNode\n", + "Link: https://www.quicknode.com/guides/ethereum-development/getting-started/what-are-ethereum-accounts\n", + "Snippet: Smart contract accounts (SCA) are different than EOAs as they cost transaction fees to be created and do not contain a private key pair. Instead ...\n", + "---\n", + "Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", + "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", + "Snippet: The operation of smart accounts, or account abstracted wallets, is fairly simple. Instead of sending regular transactions as EOAs do, smart ...\n", + "---\n", + "Title: EOS EVM\n", + "Link: https://eosnetwork.com/eos-evm/\n", + "Snippet: The EOS EVM is an emulation of the EVM, housed within an EOS smart contract. EOS EVM bridges the EOS ecosystem to the Ethereum ecosystem by allowing developers ...\n", + "---\n", + "Title: What Are Smart Contracts? - Stackup\n", + "Link: https://www.stackup.sh/blog/what-are-smart-contracts\n", + "Snippet: On Ethereum, there are two types of accounts: externally owned accounts (EOAs) and smart contract accounts. Blockchain accounts are often called wallets. EOAs ...\n", + "---\n", + "Title: Account Abstraction | Welcome to our Docs - zkSync Documentation\n", + "Link: https://docs.zksync.io/build/developer-reference/account-abstraction.html\n", + "Snippet: Accounts in zkSync Era can initiate transactions, like an EOA, but can also have arbitrary logic implemented in them, like a smart contract.\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results indicate that Smart Accounts and EOAs (Externally Owned Accounts) are types of accounts in the Ethereum blockchain. Smart contracts control smart accounts, while private keys control EOAs. The Ethereum Virtual Machine (EVM) is an environment for executing these smart contracts. The concept of \"Account Abstraction\" seems to be a key trend in the Ethereum ecosystem, where users can use smart contracts as primary accounts, effectively turning EOAs into smart contract-enabled accounts. \n", + "\n", + "Now, I need to research the future trends and predictions about these terms in the next 3-5 years. \n", + "\n", + "Action: \n", + "Search the internet \n", + "\n", + "Action Input: \n", + "{\"search_query\": \"Future of Smart accounts, EOAs, and EVM ecosystem 3-5 years\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: The Evolving Landscape of Blockchain: Cutting-Edge Concepts ...\n", + "Link: https://m-tiesler.medium.com/the-evolving-landscape-of-blockchain-cutting-edge-concepts-shaping-2024-992e4e3b4b71\n", + "Snippet: In this blog post, we'll explore 10 groundbreaking concepts that are shaping the future of blockchain ecosystems. From Account Abstraction to ...\n", + "---\n", + "Title: The Future of Web3 Account Abstraction with Oasis\n", + "Link: https://oasisprotocol.org/blog/web3-account-abstraction\n", + "Snippet: Oasis Sapphire proposes a simpler solution to account abstraction for the entire EVM ecosystem. By design, every smart contract on Oasis ...\n", + "---\n", + "Title: Ethereum devs debate future of account abstraction - Blockworks\n", + "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", + "Snippet: The first two goals are clearly not satisfied by Ethereum's “end user account” (EOA) model, hence the need to move the entire EVM ecosystem ...\n", + "---\n", + "Title: Future of Smart Accounts: Modular, Specialised & Multichain\n", + "Link: https://longhashvc.medium.com/future-of-smart-accounts-modular-specialised-multichain-d04f083375a6\n", + "Snippet: Beyond customer access, we expect the leading ecosystems to be built by a factor of perceived security, developer experience, and importantly, ...\n", + "---\n", + "Title: Account Abstraction Proposals Comparison\n", + "Link: https://forum.polygon.technology/t/account-abstraction-proposals-comparison/13595\n", + "Snippet: ... EVM ecosystems might become reality. In such a ... ecosystem and reduce complexity for future upgrades. ... EOAs to upgrade to smart contract ...\n", + "---\n", + "Title: Onboarding Users to Ethereum Ecosystem via Account Abstraction ...\n", + "Link: https://www.youtube.com/watch?v=kcZA2XrjCyw\n", + "Snippet: Onboarding Users to Ethereum Ecosystem via Account Abstraction and EVM-L2s | Will ...\n", + "---\n", + "Title: The Future of Wallets: MPC vs Smart Wallets - Devcon Archive\n", + "Link: https://archive.devcon.org/archive/watch/6/the-future-of-wallets-mpc-vs-smart-wallets/?playlist=Devcon%206\n", + "Snippet: Let's explore the relative strenghts and weaknesses of each, as well as the protocol upgrades ...\n", + "---\n", + "Title: Making Biconomy Smart Accounts Modular\n", + "Link: https://www.biconomy.io/post/making-biconomy-smart-accounts-modular\n", + "Snippet: With our new modular architecture, Biconomy is evolving Smart Account from wallet layer to a platform! The Smart Account Platform enables ...\n", + "---\n", + "Title: 2023 EOS Ecosystem Recap: An Epic Year of Growth ...\n", + "Link: https://eosnetwork.com/blog/2023-eos-ecosystem-recap/\n", + "Snippet: This article will get you up to speed on the biggest milestones and achievements for EOS over the course of 2023.\n", + "---\n", + "Title: What's next in EVM - Devcon Archive\n", + "Link: https://archive.devcon.org/archive/watch/6/whats-next-in-evm/\n", + "Snippet: What is the future of the EVM? This talk will include an overview of proposals to the EVM, many ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results indicate that there is ongoing debate and development in the Ethereum ecosystem regarding the future of Smart Accounts and EOAs. The concept of Account Abstraction continues to be a major focus, with discussions about making the EVM ecosystem simpler and more user-friendly. Smart Accounts are expected to evolve and become more modular and specialized. There are also discussions about EOAs upgrading to smart contract accounts, which implies a gradual shift from EOAs to Smart Accounts. However, the timing and extent of this shift are not clear from the search results. \n", + "\n", + "To give a more nuanced answer, I need more specific information about the likelihood of Smart Accounts fully replacing EOAs in the EVM ecosystem within the next 3-5 years. \n", + "\n", + "Action: \n", + "Search the internet \n", + "\n", + "Action Input: \n", + "{\"search_query\": \"Will Smart accounts fully replace EOAs in the EVM ecosystem within the next 3-5 years\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: The unspoken Ethereum revolution: Are EOAs becoming obsolete?\n", + "Link: https://cryptoslate.com/op-ed-the-unspoken-ethereum-revolution-are-eoas-becoming-obsolete/\n", + "Snippet: The silent discussion on removing Externally Owned Accounts (EOAs) and private keys from the Ethereum ecosystem.\n", + "---\n", + "Title: Reflection on EOS ecosystem, Concept of EOS Lab - Dalio - Medium\n", + "Link: https://dalio.medium.com/reflection-on-eos-ecosystem-concept-of-eos-lab-50fcc76a10a7\n", + "Snippet: It is a question worth pondering what value transformation EOS blockchain can bring to society in the coming years, as it will determine the ...\n", + "---\n", + "Title: Smart Accounts Adoption Accelerated in Q4 2023 - Alchemy\n", + "Link: https://www.alchemy.com/blog/smart-accounts-adoption-accelerated-in-q4-2023\n", + "Snippet: ERC-4337 smart account adoption saw major growth in the fourth quarter of 2024, surpassing 1 million total deployed accounts!\n", + "---\n", + "Title: We should be moving beyond EOAs, not enshrining them even ...\n", + "Link: https://ethereum-magicians.org/t/we-should-be-moving-beyond-eoas-not-enshrining-them-even-further-eip-3074-related/6538\n", + "Snippet: This can be done by making a hard fork that edits all existing and new EOAs in-place, replacing them with smart contract wallets that have the ...\n", + "---\n", + "Title: 2023 EOS Ecosystem Recap: An Epic Year of Growth ...\n", + "Link: https://eosnetwork.com/blog/2023-eos-ecosystem-recap/\n", + "Snippet: This article will get you up to speed on the biggest milestones and achievements for EOS over the course of 2023.\n", + "---\n", + "Title: Account Abstraction Proposals Comparison\n", + "Link: https://forum.polygon.technology/t/account-abstraction-proposals-comparison/13595\n", + "Snippet: Basically saying that allowing to send these transactions from an EOA is an intermediary step until there is a path for EOAs to upgrade to smart ...\n", + "---\n", + "Title: Onboarding Users to Ethereum Ecosystem via Account Abstraction ...\n", + "Link: https://www.youtube.com/watch?v=kcZA2XrjCyw\n", + "Snippet: ... next wave of users to crypto, especially as the market begins to heat up. That makes ...\n", + "---\n", + "Title: Ethereum Improvement Proposals to watch in 2024 - Blockworks\n", + "Link: https://blockworks.co/news/ethereum-improvement-proposals-2024\n", + "Snippet: This proposal, part of Dencun, aims to introduce a new mechanism for handling temporary or transient storage during smart contract execution.\n", + "---\n", + "Title: ERC-4337: A Complete Guide To Account Abstraction - BeInCrypto\n", + "Link: https://beincrypto.com/learn/erc-4337/\n", + "Snippet: The only way users could interact with the blockchain-specific smart contracts was by using their EOAs, or Externally Owned Accounts like ...\n", + "---\n", + "Title: Batch Transactions for EOAs - by foobar - The Variable - Substack\n", + "Link: https://0xfoobar.substack.com/p/batch-transactions-for-eoas\n", + "Snippet: Smart contract wallets are welcome infrastructure, but EOAs remain >90% of all addresses. Several reasons for this - cheaper gas, familiarity, ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results show that there is a growing trend of Smart Accounts adoption and discussions about moving away from EOAs. However, as of now, EOAs still constitute the majority of all addresses due in part to cheaper gas costs and familiarity. There are also proposals for EOAs to upgrade to Smart Accounts, suggesting a gradual transition rather than an abrupt replacement. Therefore, it seems unlikely that Smart Accounts will fully replace EOAs within the next 3-5 years, although the trend is towards a greater role for Smart Accounts in the EVM ecosystem.\n", + "\n", + "Final Answer: \n", + "{\"report\": \"Smart Accounts and EOAs (Externally Owned Accounts) are both types of accounts in the Ethereum blockchain, with Smart Accounts being controlled by smart contracts and EOAs being controlled by private keys. The Ethereum Virtual Machine (EVM) is an environment for executing these smart contracts. There is a growing trend in the Ethereum ecosystem towards Account Abstraction, which allows users to use smart contracts as their primary accounts, effectively turning EOAs into smart contract-enabled accounts. However, as of now, EOAs still constitute the majority of all addresses due to factors such as cheaper gas costs and familiarity among users. There are also discussions and proposals for EOAs to upgrade to Smart Accounts, suggesting a gradual transition rather than an abrupt replacement. Therefore, while the role of Smart Accounts in the EVM ecosystem is expected to grow in the next 3-5 years, it seems unlikely that they will fully replace EOAs within this timeframe.\"}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\"report\": \"Smart Accounts and EOAs (Externally Owned Accounts) are both types of accounts in the Ethereum blockchain, with Smart Accounts being controlled by smart contracts and EOAs being controlled by private keys. The Ethereum Virtual Machine (EVM) is an environment for executing these smart contracts. There is a growing trend in the Ethereum ecosystem towards Account Abstraction, which allows users to use smart contracts as their primary accounts, effectively turning EOAs into smart contract-enabled accounts. However, as of now, EOAs still constitute the majority of all addresses due to factors such as cheaper gas costs and familiarity among users. There are also discussions and proposals for EOAs to upgrade to Smart Accounts, suggesting a gradual transition rather than an abrupt replacement. Therefore, while the role of Smart Accounts in the EVM ecosystem is expected to grow in the next 3-5 years, it seems unlikely that they will fully replace EOAs within this timeframe.\"}\n", + "\n", + "\u001b[00m\n", + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", + " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", + " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", + " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", + " * Use the tools provided to aid your estimation.\n", + " * Evaluate recent information more heavily than older information.\n", + " * Your response should include:\n", + " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", + " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + " \n", + " Ensure p_yes + p_no equals 1.\n", + " \n", + " SENTENCE: Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mBased on the information provided, it seems that there is a trend towards using Smart Accounts in the Ethereum ecosystem due to their advantages such as the ability to use smart contracts as primary accounts. However, there are also factors working against this trend such as the lower gas costs associated with EOAs and the familiarity that users have with this type of account. Additionally, the report mentions that there are discussions and proposals for a gradual transition from EOAs to Smart Accounts rather than a sudden replacement. Therefore, the likelihood of Smart Accounts fully replacing EOAs in the next 3-5 years seems low. \n", + "\n", + "Final Answer: \n", + "{\n", + " \"decision\": \"n\",\n", + " \"p_yes\": 0.2,\n", + " \"p_no\": 0.8,\n", + " \"confidence\": 0.85\n", + "}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-03 18:28:35,141 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", + " \"decision\": \"n\",\n", + " \"p_yes\": 0.2,\n", + " \"p_no\": 0.8,\n", + " \"confidence\": 0.85\n", + "}\n", + "\n", + "\u001b[00m\n", + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Research and report on the following sentence:\n", + " Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mI need to understand more about the terms \"Smart accounts\", \"EOAs\", and \"EVM ecosystem\" in order to answer this question effectively. I will start my research by searching for these terms on the internet. \n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\"search_query\": \"What are Smart accounts in EVM ecosystem\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", + "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", + "Snippet: Smart accounts are a type of accounts that can be controlled by programmable smart contracts rather than private keys, allowing for more ...\n", + "---\n", + "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", + "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", + "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", + "---\n", + "Title: What Are Ethereum Smart Accounts? - E-Crypto News\n", + "Link: https://e-cryptonews.com/what-are-ethereum-smart-accounts/\n", + "Snippet: Smart accounts are a kind of account hosted on the Ethereum blockchain. They can be controlled using programmable smart contracts instead of ...\n", + "---\n", + "Title: Making Biconomy Smart Accounts Modular\n", + "Link: https://www.biconomy.io/post/making-biconomy-smart-accounts-modular\n", + "Snippet: The Smart Account Platform enables developers to easily & securely plug-in programmable modules to endlessly extend smart account capabilities.\n", + "---\n", + "Title: Safe — Ethereum Smart Accounts\n", + "Link: https://safe.global/\n", + "Snippet: Safe accounts hold and protect billions of $$$ in assets · Available on 14+ networks · Trusted by the best · Safe CORE powers 190+ ecosystem projects in every ...\n", + "---\n", + "Title: ERC 4337: Understanding Account Abstraction - HackerNoon\n", + "Link: https://hackernoon.com/erc-4337-understanding-account-abstraction\n", + "Snippet: Smart contract accounts are the second type of account on Ethereum. Smart contracts are one of the most powerful features of blockchain ...\n", + "---\n", + "Title: Understanding the Ethereum Virtual Machine (EVM), Transaction ...\n", + "Link: https://medium.com/coinmonks/understanding-the-ethereum-virtual-machine-evm-transaction-structure-and-account-types-52bcdb3e4d99\n", + "Snippet: When a smart contract is deployed to the Ethereum network, a contract account is created, and it has its address. Contract accounts play a ...\n", + "---\n", + "Title: What is a Smart Contract Wallet? ERC-4337 Explained - thirdweb blog\n", + "Link: https://blog.thirdweb.com/smart-contract-wallet-erc4337/\n", + "Snippet: As the name implies, a smart contract wallet uses smart contracts to automate transactions, enforce rules, and manage assets. Learn more.\n", + "---\n", + "Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", + "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", + "Snippet: ERC-4337 is the Ethereum standard for account abstraction, which enables smart contract wallets with powerful features. Learn more.\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search result provided me with information about Smart accounts. They are a type of accounts that can be controlled by programmable smart contracts rather than private keys. Now I will research more about EOAs (Externally Owned Accounts) and the EVM (Ethereum Virtual Machine) ecosystem.\n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\"search_query\": \"What are EOAs in EVM ecosystem\"} \n", + "\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: EOS EVM\n", + "Link: https://eosnetwork.com/eos-evm/\n", + "Snippet: EVM stands for Ethereum Virtual Machine, the original EVM is an engine made up of a series of Solidity smart contracts that powers the Ethereum ecosystem. It ...\n", + "---\n", + "Title: EOS Network - An Enterprise-Grade Blockchain Operating System\n", + "Link: https://blockonomi.com/eos-network-an-enterprise-grade-blockchain-operating-system/\n", + "Snippet: EOS EVM promotes greater interoperability between EOS and Ethereum, further expanding the range of applications that can be built on EOS.”.\n", + "---\n", + "Title: EOS EVM: A Bridge Between EOS and Ethereum Ecosystems\n", + "Link: https://www.eosgo.io/news/eos-evm-a-bridge-between-eos-and-eth-ecosystems/\n", + "Snippet: EOS EVM stems from the initial goal to connect EOS to the Ethereum ecosystem using Metamask, a popular Ethereum wallet that enables users to ...\n", + "---\n", + "Title: Supercharged EOAs will save cost and cement the EVM's network ...\n", + "Link: https://www.tekedia.com/supercharged-eoas-will-save-cost-and-cement-the-evms-network-effects/\n", + "Snippet: Supercharged EOAs are a game-changer for the Ethereum ecosystem. They will save millions of dollars for users and developers and cement the ...\n", + "---\n", + "Title: EOS EVM v0.6.0: Innovating the DeFi Experience with Trustless ...\n", + "Link: https://eosnetwork.com/blog/eos-evm-v060-innovating-defi-usdt-bridging/\n", + "Snippet: This release will mark a key milestone in the EOS ecosystem's journey, as seamless interaction between EOS Native and EOS EVM is enabled. EOS ...\n", + "---\n", + "Title: What Is EOS Blockchain? - Ledger\n", + "Link: https://www.ledger.com/academy/what-is-eos-blockchain\n", + "Snippet: The EOS blockchain ecosystem is an open-source platform designed to address scalability issues for decentralized apps - Learn how it works.\n", + "---\n", + "Title: Reflection on EOS ecosystem, Concept of EOS Lab - Dalio - Medium\n", + "Link: https://dalio.medium.com/reflection-on-eos-ecosystem-concept-of-eos-lab-50fcc76a10a7\n", + "Snippet: In short, EOS can only thrive by using limited funds, facilitating external asset circulation, activating internal development capabilities, and ...\n", + "---\n", + "Title: EOS EVM v0.6.0: A Major Upgrade for the EOS Ecosystem\n", + "Link: https://coincodex.com/article/33359/eos-evm-v060-a-major-upgrade-for-the-eos-ecosystem/\n", + "Snippet: This upgrade enhances EOS's interoperability and scalability. EOS, one of the leading blockchain platforms for decentralized applications (DApps) ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search result didn't provide specific information about EOAs. EOAs (Externally Owned Accounts) are a type of account in the EVM ecosystem. I need to find more specific information about EOAs.\n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\"search_query\": \"What are Externally Owned Accounts in Ethereum\"}\n", + "\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Ethereum accounts\n", + "Link: https://ethereum.org/en/developers/docs/accounts/\n", + "Snippet: Externally-owned account (EOA) – controlled by anyone with the private keys; Contract account – a smart contract deployed to the network, ...\n", + "---\n", + "Title: What are Ethereum Accounts? - GeeksforGeeks\n", + "Link: https://www.geeksforgeeks.org/what-are-ethereum-accounts/\n", + "Snippet: Externally Owned Accounts and Key Pairs ... An Ethereum account is a private-public key pair that may be linked to a blockchain address.\n", + "---\n", + "Title: What's Externally Owned Accounts (EOA)? - OKX\n", + "Link: https://www.okx.com/help/whats-externally-owned-accounts-eoa\n", + "Snippet: Externally owned account (EOA) is secured by private key, not smart contract. For example, when you create a new account in Ethereum wallet, you ...\n", + "---\n", + "Title: What Are Externally Owned Accounts (EAO)? - Metatime\n", + "Link: https://metatime.com/en/blog/what-are-externally-owned-accounts-eao\n", + "Snippet: EAO refers to the types of accounts on blockchain networks that are managed by a private key instead of smart contracts.\n", + "---\n", + "Title: What are the types of accounts in Ethereum? - Educative.io\n", + "Link: https://www.educative.io/answers/what-are-the-types-of-accounts-in-ethereum\n", + "Snippet: Externally owned account (EOA) ... EOA accounts are created by using the public-private keys. These accounts are controlled by a private key. A private key is ...\n", + "---\n", + "Title: What are Ethereum Accounts? - QuickNode\n", + "Link: https://www.quicknode.com/guides/ethereum-development/getting-started/what-are-ethereum-accounts\n", + "Snippet: Ethereum features two distinct types of accounts: externally owned accounts (EOA) and smart contract accounts. Both account types can send and ...\n", + "---\n", + "Title: What are Ethereum Accounts? - Alchemy Docs\n", + "Link: https://docs.alchemy.com/docs/ethereum-accounts\n", + "Snippet: Ethereum has two types of accounts: externally owned accounts (EOAs) and contract accounts. EOAs are like Bitcoin key pairs, while contract accounts are for ...\n", + "---\n", + "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", + "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", + "Snippet: An Externally Owned Account, or EOA for short, works with the user having control of the account via a private key. This key is your unique ...\n", + "---\n", + "Title: Externally owned account - Learn Ethereum [Book] - O'Reilly\n", + "Link: https://www.oreilly.com/library/view/learn-ethereum/9781789954111/4dca3cec-ef6b-449e-a42a-881ed64f2252.xhtml\n", + "Snippet: In the world state, the account is linked to a public address, which is generated based on the owner's public key. We will talk about the address in detail in ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "Externally Owned Accounts (EOAs) are controlled by private keys, and not by smart contracts. These accounts are created using the public-private keys. Now that I have information about Smart accounts and EOAs, I need to understand the current state and projected future of the EVM ecosystem to determine if Smart accounts will fully replace EOAs in the next 3-5 years.\n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\"search_query\": \"Future of EVM ecosystem\"}\n", + "\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: 2023 EVM Network Landscape Report - Blog | Tenderly\n", + "Link: https://blog.tenderly.co/2023-evm-network-landscape-report/\n", + "Snippet: The exponential growth of EVM networks since 2015 can be attributed to a mature ecosystem of developer tools and significantly lower barriers to ...\n", + "---\n", + "Title: The Future of EVM Technology: A Journey Beyond Ethereum's ...\n", + "Link: https://www.blog.bitfinity.network/exploring-the-future-of-evm-ethereum-virtual-machine-technology-beyond/\n", + "Snippet: As the blockchain ecosystem continues to evolve, interoperability will remain a crucial concern, and EVM technology will play an instrumental ...\n", + "---\n", + "Title: Injective EVM: The Future of Multi-VM Development - Medium\n", + "Link: https://medium.com/@chukwunelo007/injective-evm-the-future-of-multi-vm-development-9d1ac8ae918d\n", + "Snippet: Injective has developed compatibility across the Ethereum ecosystem over the years. This includes a unique signing mechanism whereby Ethereum ...\n", + "---\n", + "Title: Unlock the Future: EVM vs. L1 Networks in DeFi's New Era - Lunu\n", + "Link: https://lunu.io/news/unlock-the-future-evm-vs-l1-networks-in-defis-new-era/\n", + "Snippet: This rivalry highlights the ongoing evolution of the blockchain ecosystem, where innovation is constant, and the quest for a scalable, secure, and user-friendly ...\n", + "---\n", + "Title: Ethereum Virtual Machine (EVM): A Comprehensive 2024 Guide\n", + "Link: https://www.ankr.com/blog/what-is-evm-ethereum-virtual-machine/?page=1\n", + "Snippet: In the evolving landscape of blockchain technology, the Ethereum Virtual Machine (EVM) stands as a cornerstone of the Ethereum ecosystem.\n", + "---\n", + "Title: EVMs in 2024: Vitalik's ZK-EVM Proposal and the Developer Shift to ...\n", + "Link: https://hackernoon.com/evms-in-2024-vitaliks-zk-evm-proposal-and-the-developer-shift-to-evm-chains\n", + "Snippet: The expanding EVM ecosystem is like a vast playground for the tech wizards out there. Innovations like ZK-EVM are making Ethereum more scalable ...\n", + "---\n", + "Title: Unveiling the Future of Blockchain: EVM vs. ZK-EVM - Medium\n", + "Link: https://medium.com/@gameficolumn/unveiling-the-future-of-blockchain-evm-vs-zk-evm-8bafd39b1259\n", + "Snippet: The coexistence of EVM and ZK-EVM underscores Ethereum's commitment to innovation and its adaptive ecosystem that caters to diverse needs.\n", + "---\n", + "Title: The Rise of Parallel EVM, which projects are worth focusing on?\n", + "Link: https://www.gate.io/learn/articles/plan-ahead-for-the-next-narrative/1355\n", + "Snippet: Representative projects: Neon, Eclipse, Lumio. Neon: Introducing EVM into L2 of Solana ecosystem. Neon EVM is the first parallelized Ethereum ...\n", + "---\n", + "Title: What Is the Ethereum Virtual Machine? A 101 Guide - Worldcoin\n", + "Link: https://worldcoin.org/articles/what-is-the-ethereum-virtual-machine\n", + "Snippet: What's the future of EVM? Wrapping up ... EVM performs many essential functions in the Ethereum ecosystem. ... EVM works, it may pave the way for ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The EVM ecosystem is projected to experience continuous growth and innovation. Technologies like ZK-EVM are making Ethereum more scalable, which could influence the adoption of Smart accounts. However, it's not clear from the search results whether Smart accounts will fully replace EOAs within the next 3-5 years. I will conduct one more search to gather any available predictions or analysis about this specific topic.\n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\"search_query\": \"Will Smart accounts replace EOAs in EVM ecosystem\"}\n", + "\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Ethereum devs debate future of account abstraction - Blockworks\n", + "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", + "Snippet: The first two goals are clearly not satisfied by Ethereum's “end user account” (EOA) model, hence the need to move the entire EVM ecosystem ...\n", + "---\n", + "Title: The unspoken Ethereum revolution: Are EOAs becoming obsolete?\n", + "Link: https://cryptoslate.com/op-ed-the-unspoken-ethereum-revolution-are-eoas-becoming-obsolete/\n", + "Snippet: The silent discussion on removing Externally Owned Accounts (EOAs) and private keys from the Ethereum ecosystem.\n", + "---\n", + "Title: ERC 4337: Understanding Account Abstraction - HackerNoon\n", + "Link: https://hackernoon.com/erc-4337-understanding-account-abstraction\n", + "Snippet: Account abstraction is a blockchain technology that enables users to replace their traditional blockchain accounts with smart contracts.\n", + "---\n", + "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", + "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", + "Snippet: The key difference between EOAs and smart accounts is that smart accounts are programmable and can execute code, while EOAs are simply accounts ...\n", + "---\n", + "Title: EIP-3074 Explained\n", + "Link: https://domothy.com/eip3074/\n", + "Snippet: Externally Owned Accounts (EOAs) are simple enough to describe: A private key resolves to the address of the account where assets are sent to and held, and the ...\n", + "---\n", + "Title: Making Biconomy Smart Accounts Modular\n", + "Link: https://www.biconomy.io/post/making-biconomy-smart-accounts-modular\n", + "Snippet: It's a basic Validation Module, that allows EOAs to become authorized to sign userOps for the given Smart Account. In fact, it works exactly ...\n", + "---\n", + "Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", + "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", + "Snippet: The operation of smart accounts, or account abstracted wallets, is fairly simple. Instead of sending regular transactions as EOAs do, smart ...\n", + "---\n", + "Title: The potential issues with EIP-4337 and the future direction ... - Medium\n", + "Link: https://medium.com/@intuofficial/the-potential-issues-with-eip-4337-and-the-future-direction-of-account-abstraction-3f195943ac1d\n", + "Snippet: Finally, removing EOAs could enable the development of more privacy-preserving applications, as smart contract wallets could be designed to hide ...\n", + "---\n", + "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", + "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", + "Snippet: A: A smart contract is fundamentally different from an EOA. Smart contracts are programs (code) that run on-chain, while EOAs are basic account ...\n", + "---\n", + "Title: Introductory Guide to Account Abstraction (ERC-4337) - Blocknative\n", + "Link: https://www.blocknative.com/blog/account-abstraction-erc-4337-guide\n", + "Snippet: Unlike EOAs, smart contract accounts contain programmable logic that defines and automatically enforces rules via their code—IF this THEN that.\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results provide some insight into the ongoing discussion about whether Smart accounts could replace EOAs in the EVM ecosystem. Some sources suggest that the programmable nature of Smart accounts offers advantages over EOAs. However, it's not clear whether there is a definitive prediction that this replacement will happen within the next 3-5 years. \n", + "\n", + "I will analyze the information I have gathered and formulate a final answer.\n", + "\n", + "Final Answer: \n", + "{\"report\": \"Smart accounts and Externally Owned Accounts (EOAs) serve different purposes in the Ethereum Virtual Machine (EVM) ecosystem. Smart accounts are programmable accounts controlled by smart contracts, while EOAs are controlled by private keys. There is ongoing discussion in the blockchain community about the potential for Smart accounts to replace EOAs due to their programmable nature and ability to execute code. However, no definitive prediction can be made at this point about whether this transition will fully take place within the next 3-5 years. Factors such as the continuous evolution and innovation within the EVM ecosystem, including the development of technologies like ZK-EVM, will likely influence the future role of Smart accounts.\"}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\"report\": \"Smart accounts and Externally Owned Accounts (EOAs) serve different purposes in the Ethereum Virtual Machine (EVM) ecosystem. Smart accounts are programmable accounts controlled by smart contracts, while EOAs are controlled by private keys. There is ongoing discussion in the blockchain community about the potential for Smart accounts to replace EOAs due to their programmable nature and ability to execute code. However, no definitive prediction can be made at this point about whether this transition will fully take place within the next 3-5 years. Factors such as the continuous evolution and innovation within the EVM ecosystem, including the development of technologies like ZK-EVM, will likely influence the future role of Smart accounts.\"}\n", + "\n", + "\u001b[00m\n", + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", + " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", + " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", + " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", + " * Use the tools provided to aid your estimation.\n", + " * Evaluate recent information more heavily than older information.\n", + " * Your response should include:\n", + " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", + " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + " \n", + " Ensure p_yes + p_no equals 1.\n", + " \n", + " SENTENCE: Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mBased on the context provided, it's clear that there is a discussion in the blockchain community about the potential for Smart accounts to fully replace EOAs in the EVM ecosystem within the next 3-5 years. This is due to the programmable nature of Smart accounts and their ability to execute code. However, there is no definitive prediction that can be made at this point about whether this transition will fully take place within the given timeframe. It's important to consider factors such as the continuous evolution and innovation within the EVM ecosystem, including the development of technologies like ZK-EVM, which will likely influence the future role of Smart accounts.\n", + "\n", + "Final Answer: \n", + "{\n", + "\"decision\": \"n\",\n", + "\"p_yes\": 0.4,\n", + "\"p_no\": 0.6,\n", + "\"confidence\": 0.7\n", + "}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-03 18:29:24,860 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", + " \"decision\": \"n\",\n", + " \"p_yes\": 0.4,\n", + " \"p_no\": 0.6,\n", + " \"confidence\": 0.7\n", + "}\n", + "\n", + "\u001b[00m\n", + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Research and report on the following sentence:\n", + " Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mTo give a well-rounded analysis, I need to understand what Smart Accounts and EOAs (Externally Owned Accounts) are, and their current state in the EVM (Ethereum Virtual Machine) ecosystem. I also need to find any trends, predictions, or expert opinions on their future use and advancements within the next 3-5 years. I will begin by researching these topics.\n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\"search_query\": \"Smart accounts vs EOAs in EVM ecosystem\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: EOA vs. Smart Contract Account: What Is the Difference?\n", + "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", + "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", + "---\n", + "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", + "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", + "Snippet: The key difference between EOAs and smart accounts is that smart accounts are programmable and can execute code, while EOAs are simply accounts ...\n", + "---\n", + "Title: Smart Contract Wallets vs EOAs - Vishal Kumar Singh\n", + "Link: https://thisvishalsingh.medium.com/smart-contract-wallets-vs-eoas-7720fdca7141\n", + "Snippet: The most common is by using an Externally Owned Account (EOA), which is a wallet that is secured with a private key.\n", + "---\n", + "Title: Understanding the Ethereum Virtual Machine (EVM), Transaction ...\n", + "Link: https://medium.com/coinmonks/understanding-the-ethereum-virtual-machine-evm-transaction-structure-and-account-types-52bcdb3e4d99\n", + "Snippet: Contract accounts are distinct from EOAs as they are not controlled by private keys but by the code of a smart contract. These accounts hold ...\n", + "---\n", + "Title: ERC 4337: Understanding Account Abstraction - HackerNoon\n", + "Link: https://hackernoon.com/erc-4337-understanding-account-abstraction\n", + "Snippet: Two types of accounts exist on EVM-based blockchain platforms: EOMs or Externally Owned Accounts and Smart Contract Accounts, also referred to ...\n", + "---\n", + "Title: Understanding Ethereum Account Abstraction - CoinsBench\n", + "Link: https://coinsbench.com/understanding-ethereum-account-abstraction-revolutionizing-smart-contract-interactions-6de9c91af39b\n", + "Snippet: Traditionally, the EVM interacts with two types of accounts: externally owned accounts (EOAs) and contract accounts. EOAs are controlled by ...\n", + "---\n", + "Title: Introductory Guide to Account Abstraction (ERC-4337) - Blocknative\n", + "Link: https://www.blocknative.com/blog/account-abstraction-erc-4337-guide\n", + "Snippet: Unlike EOAs, smart contract accounts contain programmable logic that defines and automatically enforces rules via their code—IF this THEN that.\n", + "---\n", + "Title: Account Abstraction: Past, Present, Future | MetaMask News\n", + "Link: https://metamask.io/news/latest/account-abstraction-past-present-future/\n", + "Snippet: Hence, you'll find that many account abstraction proposals either want EOAs to behave as smart contracts or contract accounts to act as EOAs.\n", + "---\n", + "Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", + "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", + "Snippet: Unlike EOAs, a smart account's security does not rely on a seed phrase or private key. A smart account owner can assign multiple devices, people ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results have provided some insights into the difference between EOAs and Smart Accounts. EOAs are secured with a private key and can't execute code, while Smart Accounts are programmable and can execute code. There's also mention of account abstraction, which seems to be a significant development in the EVM ecosystem. Now, I need to find information on trends, predictions, and expert opinions about the future of Smart Accounts and EOAs in the EVM ecosystem.\n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\"search_query\": \"Future of Smart Accounts and EOAs in EVM ecosystem\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Ethereum devs debate future of account abstraction - Blockworks\n", + "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", + "Snippet: The first two goals are clearly not satisfied by Ethereum's “end user account” (EOA) model, hence the need to move the entire EVM ecosystem ...\n", + "---\n", + "Title: The Future of Ethereum: Account Abstraction and Modular Smart ...\n", + "Link: https://medium.com/@denniswon/the-future-of-ethereum-account-abstraction-and-modular-smart-contract-accounts-8ffb618f0c15\n", + "Snippet: ERC 6900 is a new standard that introduces modular smart contract accounts to the Ethereum ecosystem. This standard aims to maximize ...\n", + "---\n", + "Title: Future of Smart Accounts: Modular, Specialised & Multichain\n", + "Link: https://longhashvc.medium.com/future-of-smart-accounts-modular-specialised-multichain-d04f083375a6\n", + "Snippet: Beyond customer access, we expect the leading ecosystems to be built by a factor of perceived security, developer experience, and importantly, ...\n", + "---\n", + "Title: State of Wallets - Part 2: Smart Accounts (Account Abstraction\n", + "Link: https://www.coinbase.com/blog/state-of-wallets-2\n", + "Snippet: Account Abstraction (“AA”) launched in the EVM ecosystem in Q1-2023 and is beginning to see an uptick in adoption. This document explains the ...\n", + "---\n", + "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", + "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", + "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", + "---\n", + "Title: The unspoken Ethereum revolution: Are EOAs becoming obsolete?\n", + "Link: https://www.binance.com/en/square/post/336701\n", + "Snippet: ... EOAs in the ecosystem's future, favoring smart contract wallets as the default account model for users. EIP-4337 & Account Abstraction. Security Fellow for ...\n", + "---\n", + "Title: The EOS Network's Vision for an Interoperable Future\n", + "Link: https://eosnetwork.com/blog/eos-interoperable-future-vision/\n", + "Snippet: The EOS EVM operates as a smart contract running on the EOS blockchain. This provides an opportunity to, in many cases, execute the full process ...\n", + "---\n", + "Title: The Future of the Ethereum Virtual Machine (EVM) in 2023 - CoinDesk\n", + "Link: https://www.coindesk.com/consensus-magazine/2022/12/12/ethereum-virtual-machine-evm-future/\n", + "Snippet: A growing collection of EVMs will become increasingly specialized. The EVM is by far the most popular execution environment among smart contract ...\n", + "---\n", + "Title: EVMs in 2024: Vitalik's ZK-EVM Proposal and the Developer Shift to ...\n", + "Link: https://hackernoon.com/evms-in-2024-vitaliks-zk-evm-proposal-and-the-developer-shift-to-evm-chains\n", + "Snippet: The state of Ethereum Virutal Machines in 2024, from Vitaliks proposal to zero knowledge tech to the core of Ethereum to developer ...\n", + "---\n", + "Title: The Future of Web3 Account Abstraction with Oasis\n", + "Link: https://oasisprotocol.org/blog/web3-account-abstraction\n", + "Snippet: Oasis Sapphire proposes a simpler solution to account abstraction for the entire EVM ecosystem. By design, every smart contract on Oasis ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results suggest that there is a debate among Ethereum developers about the future of EOAs and Smart Accounts in the EVM ecosystem. Some believe that the EOA model is not sufficient for the future needs of the ecosystem. Account Abstraction is a significant development in the EVM ecosystem and is seeing increased adoption. There may be a trend towards Smart Contract Accounts becoming the default account model for users. Now I need to understand more about account abstraction and its impact on the EVM ecosystem.\n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\"search_query\": \"Impact of account abstraction on EVM ecosystem\"}\n", + "\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Account Abstraction Explained: The Role And Impact In Ethereum\n", + "Link: https://hacken.io/discover/account-abstraction/\n", + "Snippet: Account abstraction allows for more opportunities for dApps and wallet developers to innovate on user experiences. Now, in the account ...\n", + "---\n", + "Title: Account Abstraction: A Comprehensive Guide - Halborn\n", + "Link: https://www.halborn.com/blog/post/account-abstraction-a-comprehensive-guide\n", + "Snippet: This guide aims to go deeper, providing a clearer understanding of Account Abstraction and its impacts on the Ethereum ecosystem. How Ethereum ...\n", + "---\n", + "Title: How 'Account Abstraction' Could Impact The Crypto Landscape?\n", + "Link: https://www.ledger.com/blog/how-account-abstraction-could-impact-the-crypto-landscape\n", + "Snippet: In this article, I delve into the concept of Account Abstraction and explore how it could underpin the future of blockchain technologies.\n", + "---\n", + "Title: Account Abstraction: Revolutionizing The Payments Industry - LinkedIn\n", + "Link: https://www.linkedin.com/pulse/account-abstraction-revolutionizing-payments-industry-fuseio\n", + "Snippet: One of the critical advantages of Account Abstraction is eliminating unnecessary logic within the cryptocurrency system. By removing redundant ...\n", + "---\n", + "Title: Account Abstraction at the Protocol Level - Hedera\n", + "Link: https://hedera.com/blog/account-abstraction-at-the-protocol-level\n", + "Snippet: In a nutshell, account abstraction is the ability to separate cryptographic keys from an account. In Ethereum, the account model is such ...\n", + "---\n", + "Title: Account Abstraction Use Cases That Will Redefine Web3\n", + "Link: https://blog.quicknode.com/account-abstraction-use-cases/\n", + "Snippet: Account abstraction primarily relates to Ethereum and Ethereum virtual machine (EVM). However, the idea can be conceptually extended to non-EVM ...\n", + "---\n", + "Title: Account Abstraction - Plena Finance\n", + "Link: https://www.plena.finance/blog/account-abstraction\n", + "Snippet: Account Abstraction (ERC-4337) is a proposal that started in Ethereum that allows users and developers to customize how they send and manage ...\n", + "---\n", + "Title: Account Abstraction Ecosystem Growth - Data & Statistics - Nextrope\n", + "Link: https://nextrope.com/account-abstraction-ecosystem-growth-data-statistics/\n", + "Snippet: Account Abstraction (AA) has emerged as a pivotal innovation in the realm of blockchain and cryptocurrencies, redefining user interactions and ...\n", + "---\n", + "Title: Exploring ERC-4337 Account Abstraction — Part 1 | by Eden Network\n", + "Link: https://medium.com/edennetwork/the-next-billion-users-exploring-erc-4337-account-abstraction-part-1-1cf5888565a3\n", + "Snippet: Account abstraction became part of Ethereum's execution layer in March. It unlocks the potential to create a user experience that harnesses the ...\n", + "---\n", + "Title: Account Abstraction & Why it's a Big Deal for Wallet Security\n", + "Link: https://world.webacy.com/account-abstraction-why-its-a-big-deal-for-wallet-security/\n", + "Snippet: Account abstraction will likely prove to be an important addition to the Ethereum ecosystem that enables further scalability and evolution in ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results indicate that account abstraction is seen as a significant innovation in the Ethereum ecosystem. It allows for more opportunities for innovation in user experiences and is expected to impact the future of blockchain technologies. It eliminates unnecessary logic within the cryptocurrency system and enables further scalability and evolution of the Ethereum ecosystem. Now I have enough information to draft a report on the future of Smart Accounts and EOAs in the EVM ecosystem.\n", + "\n", + "Final Answer: \n", + "{\"report\": \"Smart Accounts and EOAs are the two fundamental operators of the Ethereum blockchain. EOAs are secured with a private key and cannot execute code, whereas Smart Accounts are programmable and can execute code. However, there's a growing belief among the Ethereum developer community that the EOA model isn't sufficient for the future needs of the EVM ecosystem. This is where account abstraction comes into play. Account abstraction is seen as a significant development and innovation in the EVM ecosystem. It allows for more opportunities for dApps and wallet developers to innovate on user experiences. Furthermore, it eliminates unnecessary logic within the cryptocurrency system, enabling further scalability and evolution of the EVM ecosystem. Account Abstraction has seen an uptick in adoption since its launch and is expected to redefine user interactions and experiences in the blockchain and cryptocurrency realm. Based on these developments and trends, it's reasonable to predict that Smart Accounts could fully replace EOAs in the EVM ecosystem within the next 3-5 years. However, this transition highly depends on the continued development and adoption of technologies like account abstraction, which will allow Smart Accounts to effectively take on the roles currently performed by EOAs.\"}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\"report\": \"Smart Accounts and EOAs are the two fundamental operators of the Ethereum blockchain. EOAs are secured with a private key and cannot execute code, whereas Smart Accounts are programmable and can execute code. However, there's a growing belief among the Ethereum developer community that the EOA model isn't sufficient for the future needs of the EVM ecosystem. This is where account abstraction comes into play. Account abstraction is seen as a significant development and innovation in the EVM ecosystem. It allows for more opportunities for dApps and wallet developers to innovate on user experiences. Furthermore, it eliminates unnecessary logic within the cryptocurrency system, enabling further scalability and evolution of the EVM ecosystem. Account Abstraction has seen an uptick in adoption since its launch and is expected to redefine user interactions and experiences in the blockchain and cryptocurrency realm. Based on these developments and trends, it's reasonable to predict that Smart Accounts could fully replace EOAs in the EVM ecosystem within the next 3-5 years. However, this transition highly depends on the continued development and adoption of technologies like account abstraction, which will allow Smart Accounts to effectively take on the roles currently performed by EOAs.\"}\n", + "\n", + "\u001b[00m\n", + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", + " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", + " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", + " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", + " * Use the tools provided to aid your estimation.\n", + " * Evaluate recent information more heavily than older information.\n", + " * Your response should include:\n", + " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", + " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + " \n", + " Ensure p_yes + p_no equals 1.\n", + " \n", + " SENTENCE: Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mAfter analyzing the report provided, it is apparent that there is a notable trend towards the adoption of Smart Accounts in the Ethereum blockchain. The functionality of Smart Accounts, especially with the advent of account abstraction, provides a significant advantage over EOAs in terms of programmability and scalability. Furthermore, the report suggests that the Ethereum developer community is increasingly recognizing these advantages, which could drive the transition from EOAs to Smart Accounts over the next 3-5 years.\n", + "\n", + "However, it is also important to consider the challenges associated with this transition. The successful replacement of EOAs with Smart Accounts hinges on the ongoing development and adoption of account abstraction, which may face unforeseen obstacles or delays. Additionally, the inherent resistance to change in established systems should also be taken into account.\n", + "\n", + "Taking all these factors into consideration, I would lean towards the prediction that Smart Accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years, but with a moderate level of confidence due to the potential challenges involved in this transition.\n", + "\n", + "Final Answer:\n", + "{\n", + "\"decision\": \"y\",\n", + "\"p_yes\": 0.7,\n", + "\"p_no\": 0.3,\n", + "\"confidence\": 0.6\n", + "}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-03 18:30:16,658 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", + " \"decision\": \"y\",\n", + " \"p_yes\": 0.7,\n", + " \"p_no\": 0.3,\n", + " \"confidence\": 0.6\n", + "}\n", + "\n", + "\u001b[00m\n", + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Research and report on the following sentence:\n", + " Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mFirst, I need to understand the key terms in the task. Smart Accounts and EOAs (Externally Owned Accounts) are terms related to Ethereum's blockchain technology. EVM refers to Ethereum Virtual Machine. I need to find out what smart accounts are, how they compare to EOAs, and what trends or changes are expected in the next 3-5 years regarding their usage in the EVM ecosystem. I'll start by researching each of these key terms individually, then I'll search for future predictions or expert opinions regarding the transition from EOAs to smart accounts. \n", + "\n", + "Action: Search the internet\n", + "Action Input: {\"search_query\": \"What are smart accounts in Ethereum\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", + "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", + "Snippet: As said above, smart accounts are a type of account on the Ethereum blockchain that can be controlled by programmable smart contracts rather ...\n", + "---\n", + "Title: Ethereum 'smart account' adoption is low — the first rollup proposal ...\n", + "Link: https://blockworks.co/news/ethereum-smart-account-adoption-proposal\n", + "Snippet: The standard turns Ethereum accounts into “smart accounts,” which are much more flexible to suit the needs of wallet holders.\n", + "---\n", + "Title: How smart accounts and account abstraction can unlock Ethereum's ...\n", + "Link: https://cointelegraph.com/news/ethereum-smart-accounts-utility\n", + "Snippet: Smart account features include the ability to batch transactions, which Schor says can create more seamless decentralized application (DApp) ...\n", + "---\n", + "Title: What are Ethereum Accounts? - QuickNode\n", + "Link: https://www.quicknode.com/guides/ethereum-development/getting-started/what-are-ethereum-accounts\n", + "Snippet: Ethereum features two distinct types of accounts: externally owned accounts (EOA) and smart contract accounts. Both account types can send and ...\n", + "---\n", + "Title: What are Ethereum Accounts? - Alchemy Docs\n", + "Link: https://docs.alchemy.com/docs/ethereum-accounts\n", + "Snippet: EOAs are like Bitcoin key pairs, while contract accounts are for smart contracts ... There are two types of accounts in Ethereum: externally owned accounts and ...\n", + "---\n", + "Title: Safe — Ethereum Smart Accounts\n", + "Link: https://safe.global/\n", + "Snippet: Accelerating the transition to Smart Accounts · Safe accounts hold and protect billions of $$$ in assets · Available on 14+ networks · Trusted by the best.\n", + "---\n", + "Title: Safe and Base Team Up To Promote Ethereum Smart Accounts\n", + "Link: https://thedefiant.io/safe-and-base-team-up-to-promote-ethereum-smart-accounts\n", + "Snippet: “This initiative aims to empower more developers to tap into the benefits of smart accounts and make decentralized applications more accessible, ...\n", + "---\n", + "Title: The Future of Ethereum: Account Abstraction and Modular Smart ...\n", + "Link: https://medium.com/@denniswon/the-future-of-ethereum-account-abstraction-and-modular-smart-contract-accounts-8ffb618f0c15\n", + "Snippet: The account abstraction infrastructure is a set of protocols and frameworks that enable the use of smart contract accounts. It allows developers ...\n", + "---\n", + "Title: 'Smart accounts' can bring crypto to the masses - DL News\n", + "Link: https://www.dlnews.com/articles/defi/smart-accounts-could-bring-crypto-to-the-masses/\n", + "Snippet: Smart accounts give crypto users a familiar, web2-like experience. With smart accounts, users can regain access to their crypto even if they ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "From the search results, I can infer that smart accounts are a type of account on the Ethereum blockchain that can be controlled by programmable smart contracts. They are more flexible and might enable a more seamless decentralized application (DApp) experience. They also seem to give crypto users a familiar, web2-like experience. Now, I need to understand what Externally Owned Accounts (EOAs) are and how they differ from smart accounts.\n", + "\n", + "Action: Search the internet\n", + "Action Input: {\"search_query\": \"What are Externally Owned Accounts in Ethereum\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Ethereum accounts\n", + "Link: https://ethereum.org/en/developers/docs/accounts/\n", + "Snippet: Externally-owned account (EOA) – controlled by anyone with the private keys; Contract account – a smart contract deployed to the network, ...\n", + "---\n", + "Title: What are Ethereum Accounts? - GeeksforGeeks\n", + "Link: https://www.geeksforgeeks.org/what-are-ethereum-accounts/\n", + "Snippet: Externally Owned Accounts and Key Pairs ... An Ethereum account is a private-public key pair that may be linked to a blockchain address.\n", + "---\n", + "Title: What's Externally Owned Accounts (EOA)? - OKX\n", + "Link: https://www.okx.com/help/whats-externally-owned-accounts-eoa\n", + "Snippet: Externally owned account (EOA) is secured by private key, not smart contract. For example, when you create a new account in Ethereum wallet, you ...\n", + "---\n", + "Title: What Are Externally Owned Accounts (EAO)? - Metatime\n", + "Link: https://metatime.com/en/blog/what-are-externally-owned-accounts-eao\n", + "Snippet: EAO refers to the types of accounts on blockchain networks that are managed by a private key instead of smart contracts.\n", + "---\n", + "Title: What are the types of accounts in Ethereum? - Educative.io\n", + "Link: https://www.educative.io/answers/what-are-the-types-of-accounts-in-ethereum\n", + "Snippet: Externally owned account (EOA) ... EOA accounts are created by using the public-private keys. These accounts are controlled by a private key. A private key is ...\n", + "---\n", + "Title: What are Ethereum Accounts? - QuickNode\n", + "Link: https://www.quicknode.com/guides/ethereum-development/getting-started/what-are-ethereum-accounts\n", + "Snippet: Ethereum features two distinct types of accounts: externally owned accounts (EOA) and smart contract accounts. Both account types can send and ...\n", + "---\n", + "Title: What are Ethereum Accounts? - Alchemy Docs\n", + "Link: https://docs.alchemy.com/docs/ethereum-accounts\n", + "Snippet: Ethereum has two types of accounts: externally owned accounts (EOAs) and contract accounts. EOAs are like Bitcoin key pairs, while contract accounts are for ...\n", + "---\n", + "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", + "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", + "Snippet: An Externally Owned Account, or EOA for short, works with the user having control of the account via a private key. This key is your unique ...\n", + "---\n", + "Title: Externally owned account - Learn Ethereum [Book] - O'Reilly\n", + "Link: https://www.oreilly.com/library/view/learn-ethereum/9781789954111/4dca3cec-ef6b-449e-a42a-881ed64f2252.xhtml\n", + "Snippet: In the world state, the account is linked to a public address, which is generated based on the owner's public key. We will talk about the address in detail in ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results indicate that an Externally Owned Account (EOA) is controlled by a private key and not by a smart contract. It seems like the main difference between EOAs and smart accounts is that EOAs are controlled directly by a private key, while smart accounts are controlled by programmable smart contracts. Now that I understand the differences between these two types of accounts, I need to research if and how smart accounts might replace EOAs in the EVM ecosystem within the next 3-5 years.\n", + "\n", + "Action: Search the internet\n", + "Action Input: {\"search_query\": \"Will smart accounts replace EOAs in the Ethereum ecosystem in the next 3-5 years\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: The Future of Ethereum: Account Abstraction and Modular Smart ...\n", + "Link: https://medium.com/@denniswon/the-future-of-ethereum-account-abstraction-and-modular-smart-contract-accounts-8ffb618f0c15\n", + "Snippet: The second transition identified by Vitalik Buterin is the move from EOA to contract accounts. Currently, all blockchain activity on Ethereum ...\n", + "---\n", + "Title: Where Will Ethereum Be in 5 Years? | The Motley Fool\n", + "Link: https://www.fool.com/investing/2024/01/28/where-will-ethereum-be-in-5-years/\n", + "Snippet: Currently, Ethereum executes every smart contract by referring to externally owned accounts (EOAs). This architecture helps developers pull ...\n", + "---\n", + "Title: Is there a new blockchain that will replace Ethereum? - Quora\n", + "Link: https://www.quora.com/Is-there-a-new-blockchain-that-will-replace-Ethereum\n", + "Snippet: Several projects, like EOS and TRON, are already competing with Ethereum as a platform for smart contracts and decentralized applications.\n", + "---\n", + "Title: The unspoken Ethereum revolution: Are EOAs becoming obsolete?\n", + "Link: https://cryptoslate.com/op-ed-the-unspoken-ethereum-revolution-are-eoas-becoming-obsolete/\n", + "Snippet: The silent discussion on removing Externally Owned Accounts (EOAs) and private keys from the Ethereum ecosystem.\n", + "---\n", + "Title: What Is the Ethereum Roadmap: Upgrades in 2024 and Beyond\n", + "Link: https://www.ledger.com/academy/what-is-the-ethereum-roadmap-next-upgrades\n", + "Snippet: The Ethereum roadmap ensures the network's constant progress, enabling protocol improvements and addressing new developments in crypto.\n", + "---\n", + "Title: We should be moving beyond EOAs, not enshrining them even ...\n", + "Link: https://ethereum-magicians.org/t/we-should-be-moving-beyond-eoas-not-enshrining-them-even-further-eip-3074-related/6538\n", + "Snippet: This can be done by making a hard fork that edits all existing and new EOAs in-place, replacing them with smart contract wallets that have the ...\n", + "---\n", + "Title: Smart Accounts on Ethereum set to Simplify Crypto for Newcomers\n", + "Link: https://www.bsc.news/post/smart-accounts-on-ethereum-set-to-simplify-crypto-for-newcomers\n", + "Snippet: Smart accounts will upgrade standard smartphone security modules to de facto hardware wallets, allowing for secure storage of unique ...\n", + "---\n", + "Title: Upcoming Upgrades That Will Shape the Ethereum Ecosystem\n", + "Link: https://www.coindesk.com/tech/2023/03/01/upcoming-upgrades-that-will-shape-the-ethereum-ecosystem/\n", + "Snippet: The upgrade, known as “Bedrock,” will be a major upgrade to the network. Some have said the upgrade will help Optimism compete with its main ...\n", + "---\n", + "Title: Ethereum Upgrade Could Make It Harder to Lose All Your Crypto\n", + "Link: https://finance.yahoo.com/news/ethereum-upgrade-could-harder-lose-121500207.html\n", + "Snippet: Accounts on Ethereum: EOAs and CAs. On ... The proposal would just add a new account abstraction layer atop Ethereum's ... accounts that use smart ...\n", + "---\n", + "Title: EOAs to Smart Contract Wallets: Ethereum's Technological Shift\n", + "Link: https://medium.com/@cresowallet/eoas-to-smart-contract-wallets-ethereums-technological-shift-2784679898b6\n", + "Snippet: Traditional Ethereum wallets have revolved around Externally Owned Accounts (EOAs) secured by private keys. However, the advent of smart ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results indicate that there is indeed a transition happening from EOAs to smart accounts in the Ethereum ecosystem. Some sources suggest that this process is part of the Ethereum's future roadmap. However, it's not clear if this transition will be completed within the next 3-5 years. There are discussions about replacing EOAs with smart contract wallets, and it seems that this change is seen as a way to simplify the crypto experience for newcomers and provide better security. However, the exact timeline for this change isn't clear from the search results. I'll try to refine my search to find more specific predictions or timelines.\n", + "\n", + "Action: Search the internet\n", + "Action Input: {\"search_query\": \"Timeline for transition from EOAs to smart accounts in Ethereum\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: The History and Future of Account Abstraction | by Ismael Darwish\n", + "Link: https://medium.com/nethermind-eth/the-history-and-future-of-account-abstraction-10cb097ebdc8\n", + "Snippet: The goal of “account abstraction” is to reduce the number of account types from 2 (EOA and contract) to 1 (just contract) and to move ...\n", + "---\n", + "Title: 'Account abstraction' supercharges Ethereum wallets: Dummies guide\n", + "Link: https://cointelegraph.com/magazine/account-abstraction-supercharges-ethereum-wallets-dummies-guide/\n", + "Snippet: Your guide to why 'account abstraction' and 'smart accounts' are the hottest thing on Ethereum right now and will help bring about mainstream ...\n", + "---\n", + "Title: The Road to Account Abstraction on Ethereum | Galaxy\n", + "Link: https://www.galaxy.com/insights/research/the-road-to-account-abstraction-on-ethereum/\n", + "Snippet: This report dives into what account abstraction is and the solutions being proposed to enable the technology on Ethereum.\n", + "---\n", + "Title: Ethereum Improvement Proposals to watch in 2024 - Blockworks\n", + "Link: https://blockworks.co/news/ethereum-improvement-proposals-2024\n", + "Snippet: Here are some of the improvements to watch in 2024 in the wake of Dencun.\n", + "---\n", + "Title: The history and the future of Account Abstraction - LinkedIn\n", + "Link: https://www.linkedin.com/pulse/history-future-account-abstraction-getclave\n", + "Snippet: EIP 7377 allows EOAs to transition to smart wallets using a new transaction type. We have accomplished the history of AA in our Account ...\n", + "---\n", + "Title: How Does Account Abstraction Change Ethereum ... - Halborn\n", + "Link: https://www.halborn.com/blog/post/how-does-account-abstraction-change-ethereum-account-management\n", + "Snippet: Halborn discusses how ERC-4337 introduces account abstraction on Ethereum, eliminating the need for private keys and EOAs.\n", + "---\n", + "Title: What to Expect From the Ethereum Roadmap in 2024 - HackerNoon\n", + "Link: https://hackernoon.com/ethereum-is-making-itself-future-proof-what-to-expect-from-the-ethereum-roadmap-in-2024\n", + "Snippet: While EIP-3074 authorizes smart contracts, EIP-5003 completely migrates the signing key of Ethereum EOAs accounts to smart contract accounts.\n", + "---\n", + "Title: Account abstraction: A beginner's guide to Ethereum's ERC-4337 ...\n", + "Link: https://cointelegraph.com/learn/account-abstraction-guide-to-ethereums-erc-4337-standard\n", + "Snippet: This article is focused Ethereum account abstraction, exploring how account abstraction is redefining user-experience with smart contract ...\n", + "---\n", + "Title: How do EOAs work and what is their interaction with smart contracts?\n", + "Link: https://ethereum.stackexchange.com/questions/93082/how-do-eoas-work-and-what-is-their-interaction-with-smart-contracts\n", + "Snippet: Now, only the EOAs owner can transfer Ether (=\"withdraw or wire money\") from that account - by using the private key in the process. In short, ...\n", + "---\n", + "Title: The Transformation of Ethereum Wallet: The Potential and ... - Medium\n", + "Link: https://medium.com/@sevenxventures/the-transformation-of-ethereum-wallet-the-potential-and-challenges-of-account-abstraction-and-c0dbdb384c7e\n", + "Snippet: As Ethereum's use cases become increasingly diverse, the drawbacks of using traditional externally owned accounts (EOA) on Ethereum wallets ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results still don't provide a clear timeline for the transition from EOAs to smart accounts. However, they indicate that this process is part of Ethereum's future plans, and the concept of 'account abstraction' seems to be key to this transition. Account abstraction aims to reduce the number of account types from 2 (EOA and contract) to just 1 (contract), which would essentially mean replacing EOAs with smart accounts. This transition is seen as a way to simplify and improve the user experience with Ethereum wallets. Given these findings, it seems plausible that smart accounts could fully replace EOAs in the EVM ecosystem within the next 3-5 years, but the exact timeline is still uncertain.\n", + "\n", + "Final Answer: \n", + "{\"report\": \"Research indicates a trend in the Ethereum ecosystem towards 'account abstraction', a process that aims to simplify the types of accounts from two (Externally Owned Accounts (EOAs) and contract) to just one (contract), essentially replacing EOAs with smart contract controlled accounts. These smart accounts are seen as more flexible and able to provide a better user experience. Various sources suggest that this transition is part of Ethereum's future plans. However, while the transition seems plausible within the next 3-5 years, no definitive timeline was found in the research. It's also important to note that such a transition likely depends on various factors, including technological advancements, user acceptance, and the overall evolution of the Ethereum ecosystem.\"}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\"report\": \"Research indicates a trend in the Ethereum ecosystem towards 'account abstraction', a process that aims to simplify the types of accounts from two (Externally Owned Accounts (EOAs) and contract) to just one (contract), essentially replacing EOAs with smart contract controlled accounts. These smart accounts are seen as more flexible and able to provide a better user experience. Various sources suggest that this transition is part of Ethereum's future plans. However, while the transition seems plausible within the next 3-5 years, no definitive timeline was found in the research. It's also important to note that such a transition likely depends on various factors, including technological advancements, user acceptance, and the overall evolution of the Ethereum ecosystem.\"}\n", + "\n", + "\u001b[00m\n", + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", + " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", + " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", + " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", + " * Use the tools provided to aid your estimation.\n", + " * Evaluate recent information more heavily than older information.\n", + " * Your response should include:\n", + " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", + " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + " \n", + " Ensure p_yes + p_no equals 1.\n", + " \n", + " SENTENCE: Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mBased on the research provided, there seems to be a trend towards 'account abstraction' in the Ethereum ecosystem. This means that the transition from Externally Owned Accounts (EOAs) to smart accounts could potentially occur within the next 3-5 years. However, no concrete timeline is given in the research and the transition depends on factors such as technological advancements, user acceptance, and the overall evolution of the Ethereum ecosystem.\n", + "\n", + "Final Answer: \n", + "{\n", + " \"decision\": \"y\",\n", + " \"p_yes\": 0.6,\n", + " \"p_no\": 0.4,\n", + " \"confidence\": 0.7\n", + "}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", + " \"decision\": \"y\",\n", + " \"p_yes\": 0.6,\n", + " \"p_no\": 0.4,\n", + " \"confidence\": 0.7\n", + "}\n", + "\n", + "\u001b[00m\n" + ] + } + ], + "source": [ + "outcomes_with_probs = []\n", + "for outcome in outcomes.outcomes:\n", + " prediction = generate_prediction_for_one_outcome(outcome)\n", + " probability_output = ProbabilityOutput.parse_raw(prediction)\n", + " outcomes_with_probs.append((outcome, probability_output))" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "c5add121-ddfb-4ffc-8538-08b86eaf97df", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases',\n", + " ProbabilityOutput(decision='n', p_yes=0.2, p_no=0.8, confidence=0.85)),\n", + " ('Smart accounts will coexist with EOAs, with each type of account being used for different applications',\n", + " ProbabilityOutput(decision='n', p_yes=0.4, p_no=0.6, confidence=0.7)),\n", + " ('Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account',\n", + " ProbabilityOutput(decision='y', p_yes=0.7, p_no=0.3, confidence=0.6)),\n", + " ('Smart accounts will not gain further adoption and EOAs will remain the dominant type of account',\n", + " ProbabilityOutput(decision='y', p_yes=0.6, p_no=0.4, confidence=0.7))]" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "outcomes_with_probs" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "b96f5191-a309-453e-a0ee-c2b7206d2842", + "metadata": {}, + "outputs": [], + "source": [ + "# Finally, final LLM that makes a decision" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "id": "d006d08f-82bd-4a87-a147-98b32fbfc9b8", + "metadata": {}, + "outputs": [], + "source": [ + "FINAL_DECISION_PROMPT = \"\"\"\n", + "Your task is to determine the probability of a given outcome being true.\n", + "Below you can find the , a list of tuples where the first element\n", + "is an outcome\n", + "\n", + "[Outcomes with probabilities]\n", + "\"\"\"\n", + "\n", + "FINAL_DECISION_PROMPT = \"\"\"\n", + "Your task is to determine the probability of a binary outcome being answered 'Yes' or 'No'.\n", + "OUTCOMES_WITH_PROBABILITIES is provided, which contains a set of {number_of_outcomes} outcomes.\n", + "The object OUTCOMES_WITH_PROBABILITIES contains a list of tuple, where each tuple contains, as its\n", + "first element, an outcome, and as its second entry, a probability dictionary, having properties such\n", + " as p_yes (probability that the outcome is true), p_no (probability that the outcome is false),\n", + "confidence (confidence level in the values of p_yes and p_no).\n", + "Observe that the outcomes contained inside OUTCOMES_WITH_PROBABILITIES are mutually exclusive, i.e.\n", + "only one of them can be true. \n", + "You should determine the probability of the outcome OUTCOME_TO_ASSESS being true, \n", + "considering the probabilities of the other related outcomes.\n", + "\n", + "OUTCOME_TO_ASSESS: {outcome_to_assess}\n", + "OUTCOMES_WITH_PROBABILITIES: {outcomes_with_probabilities}\n", + "\"\"\" \n", + "FINAL_DECISION_OUTPUT=\"\"\"\n", + " Your response should include:\n", + " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to \n", + " 1 (maximum confidence). Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + "\n", + " Ensure p_yes + p_no equals 1.\n", + " \n", + " Format your response in JSON format, including the keys \"decision\", \"p_yes\", \"p_no\" and \"confidence\".\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "id": "e0fc72da-58fc-492a-81ba-eb3d68a42473", + "metadata": {}, + "outputs": [], + "source": [ + "def generate_final_decision(outcomes_with_probabilities):\n", + "\n", + " task_final_decision = Task(\n", + " description=(FINAL_DECISION_PROMPT),\n", + " tools=[],\n", + " agent=predictor,\n", + " expected_output=(FINAL_DECISION_OUTPUT),\n", + " output_json=ProbabilityOutput,\n", + " )\n", + " crew = Crew(\n", + " agents=[predictor],\n", + " tasks=[task_final_decision],\n", + " verbose=2,\n", + " process=Process.sequential \n", + " )\n", + " \n", + " sentence = 'Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years'\n", + " result = crew.kickoff(inputs={'outcomes_with_probabilities': \n", + " [(i[0],i[1].dict()) for i in outcomes_with_probabilities],\n", + " 'number_of_outcomes': len(outcomes_with_probabilities),\n", + " 'outcome_to_assess': outcomes_with_probabilities[0][0]})\n", + " return result" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "id": "43298716-bf76-48bd-9f4c-806d02f533ba", + "metadata": {}, + "outputs": [], + "source": [ + "# Run LLM to get these values again\n", + "b = [('Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases',\n", + " ProbabilityOutput(decision='n', p_yes=0.2, p_no=0.8, confidence=0.85)),\n", + " ('Smart accounts will coexist with EOAs, with each type of account being used for different applications',\n", + " ProbabilityOutput(decision='n', p_yes=0.4, p_no=0.6, confidence=0.7)),\n", + " ('Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account',\n", + " ProbabilityOutput(decision='y', p_yes=0.7, p_no=0.3, confidence=0.6)),\n", + " ('Smart accounts will not gain further adoption and EOAs will remain the dominant type of account',\n", + " ProbabilityOutput(decision='y', p_yes=0.6, p_no=0.4, confidence=0.7))]" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "id": "8b085ebb-f11a-4656-8481-534e04672872", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-03 19:15:41,257 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + "Your task is to determine the probability of a binary outcome being answered 'Yes' or 'No'.\n", + "OUTCOMES_WITH_PROBABILITIES is provided, which contains a set of 4 outcomes.\n", + "The object OUTCOMES_WITH_PROBABILITIES contains a list of tuple, where each tuple contains, as its\n", + "first element, an outcome, and as its second entry, a probability dictionary, having properties such\n", + " as p_yes (probability that the outcome is true), p_no (probability that the outcome is false),\n", + "confidence (confidence level in the values of p_yes and p_no).\n", + "Observe that the outcomes contained inside OUTCOMES_WITH_PROBABILITIES are mutually exclusive, i.e.\n", + "only one of them can be true. \n", + "You should determine the probability of the outcome OUTCOME_TO_ASSESS being true, \n", + "considering the probabilities of the other related outcomes.\n", + "\n", + "OUTCOME_TO_ASSESS: Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases\n", + "OUTCOMES_WITH_PROBABILITIES: [('Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases', {'decision': 'n', 'p_yes': 0.2, 'p_no': 0.8, 'confidence': 0.85}), ('Smart accounts will coexist with EOAs, with each type of account being used for different applications', {'decision': 'n', 'p_yes': 0.4, 'p_no': 0.6, 'confidence': 0.7}), ('Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account', {'decision': 'y', 'p_yes': 0.7, 'p_no': 0.3, 'confidence': 0.6}), ('Smart accounts will not gain further adoption and EOAs will remain the dominant type of account', {'decision': 'y', 'p_yes': 0.6, 'p_no': 0.4, 'confidence': 0.7})]\n", + "\u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mFirst, I need to analyze the given probabilities for each outcome. I can see that the OUTCOME_TO_ASSESS has a low probability of becoming true (0.2), and the confidence level in this probability is fairly high (0.85). This means that, based on the available data, it's quite unlikely that smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases.\n", + "\n", + "However, I also need to consider the probabilities of the other outcomes. If the other outcomes have a higher likelihood of occurring, this could affect my confidence in the low probability of the OUTCOME_TO_ASSESS.\n", + "\n", + "The second outcome, that smart accounts will coexist with EOAs, has a higher probability of occurring (0.4), but the confidence level in this probability is lower (0.7). The third outcome, that smart accounts will only be used in specialized applications, has the highest probability of all (0.7), but again, the confidence level in this probability is not very high (0.6). Finally, the fourth outcome, that smart accounts will not gain further adoption and EOAs will remain the dominant type of account, has a probability of 0.6 with a confidence level of 0.7.\n", + "\n", + "From this analysis, I can conclude that the OUTCOME_TO_ASSESS is not likely to occur. However, there is still some uncertainty due to the confidence levels of the probabilities.\n", + "\n", + "Final Answer:\n", + "{\n", + " \"decision\": \"n\",\n", + " \"p_yes\": 0.2,\n", + " \"p_no\": 0.8,\n", + " \"confidence\": 0.85\n", + "}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", + " \"decision\": \"n\",\n", + " \"p_yes\": 0.2,\n", + " \"p_no\": 0.8,\n", + " \"confidence\": 0.85\n", + "}\n", + "\n", + "\u001b[00m\n" + ] + } + ], + "source": [ + "final_decision = generate_final_decision(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "id": "47f05c28-1295-4a8d-b195-953d01165af3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ProbabilityOutput(decision='n', p_yes=0.4, p_no=0.6, confidence=0.7)" + ] + }, + "execution_count": 137, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ProbabilityOutput.parse_raw(result)" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "id": "fe66ab7e-7b84-4c93-bc6d-7b0bf497f779", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ProbabilityOutput(decision='n', p_yes=0.4, p_no=0.6, confidence=0.7)" + ] + }, + "execution_count": 141, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ProbabilityOutput.model_validate_json(result)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "349ce099-06bd-403f-ad92-6a310fc0ae5b", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/crewai_multiple_agent.ipynb b/crewai_multiple_agent.ipynb index 37ebb5da..6c4cef24 100644 --- a/crewai_multiple_agent.ipynb +++ b/crewai_multiple_agent.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "10a61ab9-30de-49f0-ac39-9ab6186f7d64", "metadata": {}, "outputs": [], @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "0c1b1f7b-6759-4235-afc2-facc894b39d6", "metadata": {}, "outputs": [ @@ -27,7 +27,7 @@ "True" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "c190d470-ab75-4843-8aa7-ad99ac5013ac", "metadata": {}, "outputs": [], @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "79d8bd8f-7098-4287-b4ad-c5bd89c1fba5", "metadata": {}, "outputs": [], @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "id": "9c03eaaa-41e1-450c-a5e5-08e10dd58261", "metadata": {}, "outputs": [], @@ -117,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "8e4e7f91-bcf9-423c-9f76-8891739b260c", "metadata": {}, "outputs": [], @@ -133,7 +133,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "05dd3975-b123-4369-a43b-e04613b7d65e", "metadata": {}, "outputs": [ @@ -141,7 +141,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "I regret to inform that I can't provide the final answer without the original question to interpret. Please provide the original question so that I can generate the mutually exclusive questions.\n" + "1 - Will the new iPhone model be released in or before September?\n", + "2 - Will the new iPhone model be released after September?\n" ] } ], @@ -153,7 +154,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "8b5518bb-edcf-40ba-ae98-2ecdbed757d5", "metadata": {}, "outputs": [ @@ -182,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 28, "id": "c4152d0b-7a0e-424b-9c24-a8b97d97441e", "metadata": {}, "outputs": [], @@ -212,8 +213,16 @@ " [SCENARIO]\n", " {scenario}\n", " \"\"\"\n", + "research_prompt = \"\"\"\n", + " You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes.\n", + " You should break down the SCENARIO into a list of possible outcomes.\n", + " \n", + " [SCENARIO]\n", + " {scenario}\n", + " \"\"\"\n", "expected_output = '''\n", - " A list containing multiple bullet points. Each bullet point should contain a possible outcome resulting from the\n", + " A list containing multiple bullet points. Each bullet point should start with '-'.\n", + " Each bullet point should contain a possible outcome resulting from the\n", " provided SCENARIO. The produced outcomes should be mutually exclusive, i.e. only one of them should be true whereas\n", " the remaining ones should be false.\n", " '''\n", @@ -223,7 +232,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 29, "id": "3420ddae-85be-4ba5-81b8-be8543ea26ce", "metadata": {}, "outputs": [], @@ -237,7 +246,6 @@ " agent=researcher,\n", ")\n", "\n", - "\n", " report_crew = Crew(\n", " agents=[researcher],\n", " tasks=[research_task],\n", @@ -249,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 30, "id": "b2675c76-fba3-45eb-b29c-dd407fd98cac", "metadata": {}, "outputs": [ @@ -257,17 +265,20 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-03-28 18:13:54,197 - 140148875154688 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + "2024-04-03 15:14:24,080 - 128867878282496 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "- Smart accounts fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - "- Smart accounts partially replace EOAs in the EVM ecosystem within the next 3-5 years, but EOAs still maintain a significant presence\n", - "- Smart accounts are adopted by a small minority within the EVM ecosystem, with the majority continuing to use EOAs within the next 3-5 years\n", - "- Smart accounts are not adopted at all within the EVM ecosystem in the next 3-5 years, with EOAs maintaining full dominance.\n" + "- Outcome 1: Smart accounts fully replace EOAs in the EVM ecosystem. This could occur if the benefits of smart accounts, such as increased security and functionality, outweigh the costs and challenges of implementing them. This would require significant technological advancements and widespread adoption among developers and users.\n", + "\n", + "- Outcome 2: Smart accounts and EOAs coexist in the EVM ecosystem. This could happen if both types of accounts offer unique advantages that make them suitable for different use cases. For instance, EOAs might remain the preferred choice for simple transactions, while smart accounts might be used for more complex operations that require programmable logic.\n", + "\n", + "- Outcome 3: Smart accounts fail to gain traction and EOAs remain the dominant type of accounts in the EVM ecosystem. This could be the case if the drawbacks of smart accounts, such as potential security risks and higher complexity, deter their adoption. It could also happen if the Ethereum community decides to prioritize other developments over the integration of smart accounts.\n", + "\n", + "- Outcome 4: A new type of account, different from both smart accounts and EOAs, emerges and becomes the new standard in the EVM ecosystem. This could occur if there are significant innovations in blockchain technology that render both smart accounts and EOAs obsolete.\n" ] } ], @@ -278,7 +289,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 31, "id": "500a0dfe-233b-4a90-9183-e39e799a023d", "metadata": {}, "outputs": [ @@ -286,18 +297,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-03-28 18:14:07,577 - 140148875154688 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + "2024-04-03 15:14:38,621 - 128867878282496 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "- The temperature will be above 20C on May 24, 2024 in Berlin.\n", - "- The temperature will be exactly 20C on May 24, 2024 in Berlin.\n", - "- The temperature will be below 20C but above 10C on May 24, 2024 in Berlin.\n", - "- The temperature will be below 10C but above 0C on May 24, 2024 in Berlin.\n", - "- The temperature will be below 0C on May 24, 2024 in Berlin.\n" + "- The temperature will be above 20C on May 24, 2024, in Berlin.\n", + "- The temperature will be exactly 20C on May 24, 2024, in Berlin.\n", + "- The temperature will be below 20C on May 24, 2024, in Berlin.\n" ] } ], @@ -308,7 +317,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 32, "id": "2e1cb34b-3913-4af3-a07b-623eef09c270", "metadata": {}, "outputs": [ @@ -316,23 +325,87 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-03-28 18:14:19,996 - 140148875154688 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + "2024-04-03 15:15:48,216 - 128867878282496 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "- The exchange rate between Euro and Dollar will reach parity (1€ equals 1$) before 2027\n", - "- The exchange rate between Euro and Dollar will not reach parity before 2027, but will come close (1€ equals between 1.01$ - 1.10$)\n", - "- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Euro remaining stronger (1€ equals more than 1.10$)\n", - "- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Dollar remaining stronger (1€ equals less than 0.90$)\n" + "- The exchange rate will reach parity (1€ = 1$) before 2027: This scenario could occur if the European economy strengthens significantly or if the US economy weakens. Factors that could influence this scenario include unexpected economic growth in the Eurozone, a significant increase in European interest rates, or a major economic crisis in the United States.\n", + "\n", + "- The exchange rate will not reach parity (1€ ≠ 1$) before 2027: This could happen if the US economy continues to strengthen, or if the European economy weakens. Factors that could contribute to this scenario include continued economic growth in the United States, an increase in US interest rates, or a major economic crisis in Europe.\n", + "\n", + "- The exchange rate will fluctuate, but never exactly reach parity (1€ ≠ 1$) before 2027: This scenario could happen due to the inherent volatility of currency markets. Rates might come close to parity but not meet it exactly. This would be influenced by ongoing changes in both the European and US economies, as well as geopolitical events and market speculation.\n", + "\n", + "These are all possible scenarios, but it's important to note that currency market predictions are notoriously difficult and uncertain, and the actual outcome might be influenced by unpredictable events and factors.\n" ] + }, + { + "data": { + "text/plain": [ + "'\\n- The exchange rate between Euro and Dollar will reach parity (1€ equals 1$) before 2027\\n- The exchange rate between Euro and Dollar will not reach parity before 2027, but will come close (1€ equals between 1.01$ - 1.10$)\\n- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Euro remaining stronger (1€ equals more than 1.10$)\\n- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Dollar remaining stronger (1€ equals less than 0.90$)\\n'" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "question = 'Will there be a period in the currency market where 1€ equals 1$ before 2027?'\n", - "print_outcomes(question)" + "print_outcomes(question)\n", + "'''\n", + "- The exchange rate between Euro and Dollar will reach parity (1€ equals 1$) before 2027\n", + "- The exchange rate between Euro and Dollar will not reach parity before 2027, but will come close (1€ equals between 1.01$ - 1.10$)\n", + "- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Euro remaining stronger (1€ equals more than 1.10$)\n", + "- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Dollar remaining stronger (1€ equals less than 0.90$)\n", + "'''" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "1f57657b-04ca-41da-9160-1f5e7df52b89", + "metadata": {}, + "outputs": [], + "source": [ + "from pydantic import BaseModel" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "6318ecc5-c0f1-4835-84a5-bc08fb0ae4ae", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'```\\n{\\n\"decision\": \"n\",\\n\"p_yes\": 0.2,\\n\"p_no\": 0.8,\\n\"confidence\": 0.85\\n}\\n```'" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "0e013f79-c011-4cff-9a77-00f947df503a", + "metadata": {}, + "outputs": [], + "source": [ + "class ProbabilityOutput(BaseModel):\n", + " decision: str\n", + " p_yes: float\n", + " p_no: float\n", + " confidence: float" ] }, { @@ -345,7 +418,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 33, "id": "10307714-e445-4c09-a2a3-18884b46941a", "metadata": {}, "outputs": [], @@ -369,7 +442,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 60, "id": "ce8c6c61-23e5-43bb-833a-4d2fb40a48dd", "metadata": {}, "outputs": [ @@ -377,7 +450,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-03-28 18:50:54,294 - 140148875154688 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + "2024-04-03 15:28:45,913 - 128867878282496 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" ] } ], @@ -426,8 +499,11 @@ "- \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", "- \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to \n", "1 (maximum confidence). Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + "\n", + "Format your response in JSON format, including the keys \"decision\", \"p_yes\", \"p_no\" and \"confidence\".\n", " \"\"\",\n", " agent=predictor,\n", + " output_json=ProbabilityOutput\n", " )\n", "crew = Crew(\n", " agents=[researcher, predictor],\n", @@ -443,29 +519,361 @@ "metadata": {}, "outputs": [ { - "ename": "KeyError", - "evalue": "'\"report\"'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[61], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m sentence \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mThe temperature will be above 20C on May 24, 2024 in Berlin.\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m----> 2\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mcrew\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkickoff\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msentence\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43msentence\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniconda3/envs/PMA/lib/python3.10/site-packages/crewai/crew.py:189\u001b[0m, in \u001b[0;36mCrew.kickoff\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 187\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Starts the crew to work on its assigned tasks.\"\"\"\u001b[39;00m\n\u001b[1;32m 188\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_execution_span \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_telemetry\u001b[38;5;241m.\u001b[39mcrew_execution_span(\u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m--> 189\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_interpolate_inputs\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 191\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m agent \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39magents:\n\u001b[1;32m 192\u001b[0m agent\u001b[38;5;241m.\u001b[39mi18n \u001b[38;5;241m=\u001b[39m I18N(language\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlanguage)\n", - "File \u001b[0;32m~/miniconda3/envs/PMA/lib/python3.10/site-packages/crewai/crew.py:279\u001b[0m, in \u001b[0;36mCrew._interpolate_inputs\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_interpolate_inputs\u001b[39m(\u001b[38;5;28mself\u001b[39m, inputs: Dict[\u001b[38;5;28mstr\u001b[39m, Any]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[1;32m 278\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Interpolates the inputs in the tasks and agents.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 279\u001b[0m [task\u001b[38;5;241m.\u001b[39minterpolate_inputs(inputs) \u001b[38;5;28;01mfor\u001b[39;00m task \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtasks]\n\u001b[1;32m 280\u001b[0m [agent\u001b[38;5;241m.\u001b[39minterpolate_inputs(inputs) \u001b[38;5;28;01mfor\u001b[39;00m agent \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39magents]\n", - "File \u001b[0;32m~/miniconda3/envs/PMA/lib/python3.10/site-packages/crewai/crew.py:279\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_interpolate_inputs\u001b[39m(\u001b[38;5;28mself\u001b[39m, inputs: Dict[\u001b[38;5;28mstr\u001b[39m, Any]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[1;32m 278\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Interpolates the inputs in the tasks and agents.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 279\u001b[0m [\u001b[43mtask\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minterpolate_inputs\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m task \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtasks]\n\u001b[1;32m 280\u001b[0m [agent\u001b[38;5;241m.\u001b[39minterpolate_inputs(inputs) \u001b[38;5;28;01mfor\u001b[39;00m agent \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39magents]\n", - "File \u001b[0;32m~/miniconda3/envs/PMA/lib/python3.10/site-packages/crewai/task.py:194\u001b[0m, in \u001b[0;36mTask.interpolate_inputs\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 192\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inputs:\n\u001b[1;32m 193\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdescription \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdescription\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39minputs)\n\u001b[0;32m--> 194\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexpected_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexpected_output\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mformat\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[0;31mKeyError\u001b[0m: '\"report\"'" + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Research and report on the following sentence:\n", + " - The exchange rate will reach parity (1€ = 1$) before 2027: \n", + "This scenario could occur if the European economy strengthens significantly or if \n", + "the US economy weakens. Factors that could influence this scenario include \n", + "unexpected economic growth in the Eurozone, a significant increase in European \n", + "interest rates, or a major economic crisis in the United States.\n", + " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mFirst, I'll need to research current trends and forecasts for the European and US economies, as well as factors that could influence the exchange rate such as interest rates and economic crises. I'll start by searching for recent predictions and analyses of the European economy. \n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\n", + "\"search_query\": \"European economy forecast 2027\"\n", + "}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Spring 2023 Economic Forecast: an improved outlook amid ...\n", + "Link: https://economy-finance.ec.europa.eu/economic-forecast-and-surveys/economic-forecasts/spring-2023-economic-forecast-improved-outlook-amid-persistent-challenges_en\n", + "Snippet: EU GDP growth is revised up to 1.0% in 2023 (from 0.8%) and 1.7% in 2024 (from 1.6%), virtually closing the gap with potential output by the end ...\n", + "---\n", + "Title: European Union - gross domestic product 2018-2028 - Statista\n", + "Link: https://www.statista.com/statistics/527869/european-union-gross-domestic-product-forecast/\n", + "Snippet: European Union: Gross domestic product (GDP) from 2018 to 2028 (in billion U.S. dollars) ; 2027, 20,612.93 ; 2026, 19,989.96 ; 2025, 19,282.98.\n", + "---\n", + "Title: [PDF] European Economic Forecast. Autumn 2023 - Economy and Finance\n", + "Link: https://economy-finance.ec.europa.eu/system/files/2023-12/ip258_en.pdf\n", + "Snippet: ... GDP target in 2027. Still, the scale of fiscal support is likely to decline within the forecast horizon and the fiscal deficit is expected ...\n", + "---\n", + "Title: Gross domestic product (GDP) growth in EU and Euro area 2028\n", + "Link: https://www.statista.com/statistics/267898/gross-domestic-product-gdp-growth-in-eu-and-euro-area/\n", + "Snippet: Growth of the real gross domestic product (GDP) in the European Union and the Euro area from 2018 to 2028 (compared to the previous year) ; 2027* ...\n", + "---\n", + "Title: [PDF] November 2023 Regional Economic Outlook: Europe\n", + "Link: https://www.imf.org/-/media/Files/Publications/REO/EUR/2023/November/English/text.ashx\n", + "Snippet: Growth in the region overall is expected to slow to 1.3 percent in 2023 from 2.7 percent last year, and improve to 1.5 percent in 2024.\n", + "---\n", + "Title: European Union - IMF Data Mapper ®\n", + "Link: https://www.imf.org/external/datamapper/profile/EU\n", + "Snippet: European Union. European Union. Datasets. World Economic Outlook (October 2023) 15 indicator s , 1980 - 2028. Collapse all. Real GDP growth. Annual percent ...\n", + "---\n", + "Title: Global Economic Outlook - The Conference Board\n", + "Link: https://www.conference-board.org/topics/global-economic-outlook\n", + "Snippet: Our Europe forecast continues to point to very modest improvement in 2024 after barely avoiding recession in 2023. The Euro Area did experience a recession in ...\n", + "---\n", + "Title: Economy of the European Union - Wikipedia\n", + "Link: https://en.wikipedia.org/wiki/Economy_of_the_European_Union\n", + "Snippet: The European Union's GDP is estimated to be $19.35 trillion (nominal) in 2024 or $26.64 trillion (PPP), representing around one-sixth of the global economy.\n", + "---\n", + "Title: EU Commission cuts 2024 euro zone growth forecast, sees smaller ...\n", + "Link: https://www.reuters.com/markets/europe/eu-commission-cuts-2024-euro-zone-growth-forecast-sees-smaller-inflation-2024-02-15/\n", + "Snippet: The euro zone economy will grow slower than expected this year after price growth eroded purchasing power and high ECB interest rates curbed ...\n", + "---\n", + "Title: GDP and spending - Real GDP long-term forecast - OECD Data\n", + "Link: https://data.oecd.org/gdp/real-gdp-long-term-forecast.htm\n", + "Snippet: Indicators. Gross domestic product (GDP) · Quarterly GDP · Real GDP forecast ... 2027: 32 746 700 Million US dollars China ... European Union; Euro Area; G7; G20\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results provide information on the forecast of the European economy up to 2027. The GDP growth is expected to be modest, with some challenges expected. The European Union's GDP is projected to increase annually, which could strengthen the Euro. Next, I will research the forecast for the US economy. \n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\n", + "\"search_query\": \"US economy forecast 2027\"\n", + "}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: [PDF] The Economic Outlook for 2017 to 2027 in 16 Slides\n", + "Link: https://www.cbo.gov/sites/default/files/115th-congress-2017-2018/presentation/52375-2017economicoutlook.pdf\n", + "Snippet: The growth of aggregate demand for goods and services in the economy will increase the demand for labor, eliminating the shortfall between actual and potential ...\n", + "---\n", + "Title: GDP and spending - Real GDP long-term forecast - OECD Data\n", + "Link: https://data.oecd.org/gdp/real-gdp-long-term-forecast.htm\n", + "Snippet: Real GDP long-term forecastTotal, Million US dollars, 2020 – 2060 2020 – 2060Source: Long-term baseline projections, No. 114 (Edition 2023). Show: Chart; Map ...\n", + "---\n", + "Title: AI may start to boost US GDP in 2027 - Goldman Sachs\n", + "Link: https://www.goldmansachs.com/intelligence/pages/ai-may-start-to-boost-us-gdp-in-2027.html\n", + "Snippet: In the baseline scenario, the Goldman Sachs Research economists estimate AI could increase US productivity growth by 1.5 percentage points ...\n", + "---\n", + "Title: Budget and Economic Outlook 2017 to 2027\n", + "Link: https://bookstore.gpo.gov/products/budget-and-economic-outlook-2017-2027\n", + "Snippet: The Budget Deficit for 2017 Is Projected to Be Similar to Last Year's. Growing Deficits Through 2027 Are Projected to Drive Up Federal Debt. The Projected ...\n", + "---\n", + "Title: GDP forecast U.S. 2034 - Statista\n", + "Link: https://www.statista.com/statistics/216985/forecast-of-us-gross-domestic-product/\n", + "Snippet: According to the CBO, the United States GDP will increase steadily over the next decade from 28.18 trillion U.S. dollars in 2023 to 41.65 ...\n", + "---\n", + "Title: U.S. Economic Forecast Update: A Sturdy Job Market Keeps Growth ...\n", + "Link: https://www.spglobal.com/ratings/en/research/articles/240221-u-s-economic-forecast-update-a-sturdy-job-market-keeps-growth-going-13011286\n", + "Snippet: We now expect U.S. real GDP growth of 2.4% in 2024 as the labor market remains sturdy. This is up from our previous forecast of 1.5% ...\n", + "---\n", + "Title: Economic Forecast for the US Economy - The Conference Board\n", + "Link: https://www.conference-board.org/research/us-forecast\n", + "Snippet: The US economy entered 2024 on strong footing. Various indicators of business activity, labor markets, sentiment, and inflation have generally been moving ...\n", + "---\n", + "Title: Gross domestic product (GDP) growth rate in the United States 2028\n", + "Link: https://www.statista.com/statistics/263614/gross-domestic-product-gdp-growth-rate-in-the-united-states/\n", + "Snippet: Real gross domestic product (GDP) growth rate in the United States from 2018 to 2028 (compared to the previous year) ; 2027*, 2.12% ; 2026*, 2.06%.\n", + "---\n", + "Title: The Top 10 Economies in 2027 - Nasdaq\n", + "Link: https://www.nasdaq.com/articles/the-top-10-economies-in-2027\n", + "Snippet: The size of the U.S., which is poised to be $25.03 trillion in 2022, will be $30.28 trillion by 2027. 2. China. 2021: 2. 2022: 2. 2027: 2. China ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results indicate that the US economy is also expected to grow moderately, with GDP forecasts indicating steady increases. The impact of AI on productivity growth could also play a role. To understand how these economy forecasts could influence the Euro-Dollar exchange rate, I need to research recent predictions and analyses of the Euro-Dollar exchange rate, as well as the factors that could influence it, such as interest rates and economic crises. \n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\n", + "\"search_query\": \"Euro-Dollar exchange rate forecast 2027\"\n", + "} \n", + "\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: EURO TO DOLLAR FORECAST 2024, 2025, 2026 - 2028\n", + "Link: https://longforecast.com/euro-to-dollar-eur-usd-forecast-2017-2018-2019-2020\n", + "Snippet: EUR to USD forecast for September 2027. In the beginning rate at 0.929 Dollars. High exchange rate 0.966 and low 0.929. The average for the month 0.944. EUR to ...\n", + "---\n", + "Title: Euro to Dollar (EURUSD) Forecast for 2024-2025 and Beyond till 2030\n", + "Link: https://www.litefinance.org/blog/analysts-opinions/eurusd-forecast-and-price-prediction/\n", + "Snippet: The rate can reach 1.296 before 2027 if an optimistic scenario plays out. It's worth noting that the euro price may fall below $1 while correcting. The currency ...\n", + "---\n", + "Title: Euro to Dollar (EUR/USD) Forecast & Price Predictions 2024, 2025 ...\n", + "Link: https://capex.com/en/overview/eurusd-price-prediction\n", + "Snippet: Commerzbank analysts forecast the Euro to Dollar exchange rate (EUR/USD) to strengthen to 1.12 by June 2024 before fading to 1.08 by March 2025. The bank ...\n", + "---\n", + "Title: Euro to dollar history Mar 29, 2024 - Statista\n", + "Link: https://www.statista.com/statistics/412794/euro-to-u-s-dollar-annual-average-exchange-rate/\n", + "Snippet: The euro-to-dollar exchange rate fluctuated significantly in 2022, reaching its lowest recorded value since 2008 during that time.\n", + "---\n", + "Title: EUR to USD Forecast: Euro vs US Dollar 2024, 2025-2030\n", + "Link: https://coincodex.com/forex/eur-usd/forecast/\n", + "Snippet: The EUR to USD forecast for the next 5 year indicates that the EUR/USD exchange rate will be $ 0.860958 5 years from now. This would be a -20.05% decrease ...\n", + "---\n", + "Title: USD to EUR Forecast: US Dollar vs Euro 2024, 2025-2030\n", + "Link: https://coincodex.com/forex/usd-eur/forecast/\n", + "Snippet: The forecast for EUR to USD in 2030 is that the exchange rate will be € 1.188264 6 years from now. This would be 27.96% higher than the current exchange rate.\n", + "---\n", + "Title: USD/EUR Forecast, United States Dollar / Euro currency rate ...\n", + "Link: https://gov.capital/forex/usd-eur/\n", + "Snippet: United States Dollar / Euro (USDEUR) rate forecast is 1.5982958910033. The (USDEUR) currency rate prediction is 1.5982958910033 USD for 2025 April 03, ...\n", + "---\n", + "Title: Long-Term Foreign Exchange Rate Predictions 2023-2028: Euro ...\n", + "Link: https://www.exchangerates.org.uk/news/37832/2023-03-29-foreign-exchange-rate-forecast-2023-2024-2025-2026-2027-2028-euro-pound-sterling-dollar.html\n", + "Snippet: According to HSBC, the potential fair-value estimates for the Euro to dollar (EUR/USD) exchange rate range from 1.1230 - 1.2850. For the dollar ...\n", + "---\n", + "Title: USD to EUR Forecast: up to 0.957! Dollar to Euro Analysis ...\n", + "Link: https://walletinvestor.com/forex-forecast/usd-eur-prediction\n", + "Snippet: USD/EUR rate equal to 0.931 at 2024-04-02 (today's range: 0.931 - 0.932). Based on our forecasts, a long-term increase is expected, the Forex rate prognosis for ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results provide a range of forecasts for the Euro-Dollar exchange rate, with some predicting the rate to reach near parity and others predicting it to remain below 1. However, the rate could potentially reach 1.296 before 2027 in an optimistic scenario. It's also worth noting that the exchange rate is influenced by a number of unpredictable factors, including economic growth, interest rates, and economic crises in both the Eurozone and the US. To provide a comprehensive report, I'll also search for information on interest rates and potential economic crises in both regions. \n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\n", + "\"search_query\": \"European and US interest rates forecast 2027\"\n", + "} \n", + "\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Long-term interest rates forecast - OECD Data\n", + "Link: https://data.oecd.org/interest/long-term-interest-rates-forecast.htm\n", + "Snippet: Long-term interest rates forecast refers to projected values of government bonds maturing in ten years. It is measured as a percentage. Forecast data are ...\n", + "---\n", + "Title: Projected ECB Interest Rates in 5 Years - Capital.com\n", + "Link: https://capital.com/projected-ecb-rate-rise-in-5-years\n", + "Snippet: The survey respondents saw inflation at 2.1% in 2025, and the longer-term forecast for 2027 was revised down by 0.1 points to average at 2.1%. ECB's survey of ...\n", + "---\n", + "Title: Charted: IMF Forecasts for International Interest Rates\n", + "Link: https://www.visualcapitalist.com/international-interest-rates-forecast/\n", + "Snippet: Interest Rates Forecasts for 4 Major Economies (2024‒2028) ; 2027Q2, 2.6%, 2.7%, 0.1%, 4.4% ; 2027Q3, 2.6%, 2.6%, 0.1%, 4.4%.\n", + "---\n", + "Title: Markets bet strength of US economy will limit scale of Fed rate cuts\n", + "Link: https://www.ft.com/content/d5ea31c5-36f6-449e-aa2b-2eea391fc5d9\n", + "Snippet: The market-implied probability of the Fed's benchmark interest rate is about 3.6 per cent from 2027, making traders' predictions for the so- ...\n", + "---\n", + "Title: Projected US Interest Rates in 5 Years: When Will the Fed Cuts Start?\n", + "Link: https://www.ccn.com/analysis/projected-us-interest-rates-in-5-years/\n", + "Snippet: It is now anticipated to reach 2.6% for 2024, surpassing the 2.4% projection from December. Forecasts for 2025 and 2026 remained unchanged at 2.2% and 2.0%, ...\n", + "---\n", + "Title: Projected interest rates in 5 years: Is the central bank done hiking?\n", + "Link: https://capital.com/projected-interest-rates-in-5-years\n", + "Snippet: The rate is then predicted to fall back to 3.75% in 2024 and 3.25% in 2025, according to our econometric models.\n", + "---\n", + "Title: The ECB Survey of Professional Forecasters - First quarter of 2023\n", + "Link: https://www.ecb.europa.eu/stats/ecb_surveys/survey_of_professional_forecasters/html/ecb.spf2023q1~af876c4cfb.en.html\n", + "Snippet: Longer-term inflation expectations (for 2027) were revised down by 0.1 percentage points to stand at 2.1%. When excluding (trimming) the two ...\n", + "---\n", + "Title: World Economic Outlook - International Monetary Fund\n", + "Link: https://www.imf.org/en/Publications/WEO\n", + "Snippet: Description: Global growth is projected to stay at 3.1 percent in 2024 and rise to 3.2 percent in 2025. Elevated central bank rates to fight ...\n", + "---\n", + "Title: US economic outlook: peak interest rates are applying the brakes to ...\n", + "Link: https://www.swissre.com/institute/research/sigma-research/Economic-Outlook/us-economic-outlook-december-2023.html\n", + "Snippet: We expect US real GDP growth to slow materially to 1.1% in 2024 from 2.4% this year. Further slack is needed in the labour market next year for ...\n", + "---\n", + "Title: Prices - Inflation forecast - OECD Data\n", + "Link: https://data.oecd.org/price/inflation-forecast.htm\n", + "Snippet: Inflation forecastTotal, Annual growth rate ... European Union (27 countries, 2020), 0.830, 0.828 ... Total. Data table for: Exchange rates, Total, National ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results provide information on the forecasted interest rates for both the European and US economies. The interest rates are expected to fluctuate, which could potentially impact the Euro-Dollar exchange rate. The ECB's interest rate for 2027 is anticipated to average at 2.1%, while the Fed's benchmark interest rate is predicted to be about 3.6% from 2027. To further understand the potential impact on the exchange rate, I'll now research potential economic crises that could occur in the Eurozone and the US. \n", + "\n", + "Action: \n", + "Search the internet\n", + "\n", + "Action Input: \n", + "{\n", + "\"search_query\": \"Potential economic crisis Eurozone and US 2027\"\n", + "} \n", + "\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Europe's problems are far bigger than a shallow recession - Reuters\n", + "Link: https://www.reuters.com/markets/europe/europes-problems-are-far-bigger-than-shallow-recession-2023-11-14/\n", + "Snippet: The European Commission now puts the bloc's potential growth at less than 1.5%, shrinking to 1.2% by 2027, a decline from 2%-2.5% at the turn ...\n", + "---\n", + "Title: Risk of 'lost decade' as EU countries face economic cliff edge\n", + "Link: https://www.politico.eu/article/eu-countries-economy-spending-rules-budget-pandemic-funds/\n", + "Snippet: Southern European economies were mired in long recessions after the eurozone crisis ... Countries could avoid the economic cliff edge in 2027 ...\n", + "---\n", + "Title: United States Economic Forecast - Deloitte\n", + "Link: https://www2.deloitte.com/us/en/insights/economy/us-economic-forecast/united-states-outlook-analysis.html\n", + "Snippet: In this scenario, Eurozone GDP is flat in 2024 and declines by 0.3% in 2025. This, in turn, impacts the US trade balance as fewer American exports flow to one ...\n", + "---\n", + "Title: Who Is the Ultimate European Taxpayer? Understanding the ... - CSIS\n", + "Link: https://www.csis.org/analysis/who-ultimate-european-taxpayer-understanding-problem-european-sovereign-debt\n", + "Snippet: Total debt issued by the European Union will peak at less than €1 trillion at some point before 2027; in comparison, outstanding U.S. debt is ...\n", + "---\n", + "Title: World Economic Outlook - International Monetary Fund\n", + "Link: https://www.imf.org/en/Publications/WEO\n", + "Snippet: Advanced economies are expected to see an especially pronounced growth slowdown, from 2.7 percent in 2022 to 1.3 percent in 2023. In a plausible ...\n", + "---\n", + "Title: The Eurozone Crisis and Implications for the United States | Brookings\n", + "Link: https://www.brookings.edu/articles/the-eurozone-crisis-and-implications-for-the-united-states/\n", + "Snippet: If Europe were to be shaken by a series of nations defaulting on their government debt, I am convinced that the continent would plunge into a severe recession.\n", + "---\n", + "Title: Timeline - EU long-term budget 2021-2027 - Consilium\n", + "Link: https://www.consilium.europa.eu/en/policies/eu-long-term-budget/timeline-long-term-eu-budget-2021-2027/\n", + "Snippet: EU leaders discussed via video conference the 2021-2027 EU budget and a recovery plan to respond to the COVID-19 crisis. European Council President Michel ...\n", + "---\n", + "Title: Global Economic Outlook - The Conference Board\n", + "Link: https://www.conference-board.org/topics/global-economic-outlook\n", + "Snippet: Our Europe forecast continues to point to very modest improvement in 2024 after barely avoiding recession in 2023. The Euro Area did experience a recession in ...\n", + "---\n", + "Title: European debt crisis - Wikipedia\n", + "Link: https://en.wikipedia.org/wiki/European_debt_crisis\n", + "Snippet: The European debt crisis erupted in the wake of the Great Recession around late 2009, and was characterized by an environment of overly high government ...\n", + "---\n", + "Title: Mid-term revision of the EU long-term budget 2021-2027 - Consilium\n", + "Link: https://www.consilium.europa.eu/en/policies/eu-long-term-budget/mid-term-revision-of-the-eu-long-term-budget-2021-2027/\n", + "Snippet: The mid-term revision builds on a Commission proposal from June 2023. EU leaders greenlit the additional funding at a special European Council meeting on 1 ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results indicate potential economic crises in both the Eurozone and the US. The Eurozone could face a potential economic cliff edge in 2027, and the European Commission forecasts a decline in the bloc's potential growth. Meanwhile, the US could be impacted by a decrease in exports due to a recession in the Eurozone. However, these events are predictive and depend on various factors, making it challenging to accurately forecast their impact on the Euro-Dollar exchange rate. Now, I have a comprehensive view of the influencing factors and can formulate a well-thought-out report. \n", + "\n", + "Final Answer: \n", + "{\n", + "\"report\": \"The Euro-Dollar exchange rate reaching parity (1€ = 1$) before 2027 depends on several influencing factors. The European and US economies are both projected to grow moderately, which could strengthen their respective currencies. However, the potential impact of interest rates and economic crises could disrupt this trend. The European Central Bank's interest rate for 2027 is anticipated to average at 2.1%, while the Federal Reserve's benchmark interest rate is predicted to be about 3.6% from 2027. These interest rates could influence the exchange rate, with higher rates potentially strengthening the respective currencies. Furthermore, potential economic crises, such as an economic cliff edge in the Eurozone and a decrease in US exports due to a Eurozone recession, could impact the exchange rate. However, due to the unpredictable nature of these factors, it is challenging to accurately forecast whether the Euro-Dollar exchange rate will reach parity before 2027. It is important to monitor these factors and adjust predictions as new information becomes available.\"\n", + "}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\n", + "\"report\": \"The Euro-Dollar exchange rate reaching parity (1€ = 1$) before 2027 depends on several influencing factors. The European and US economies are both projected to grow moderately, which could strengthen their respective currencies. However, the potential impact of interest rates and economic crises could disrupt this trend. The European Central Bank's interest rate for 2027 is anticipated to average at 2.1%, while the Federal Reserve's benchmark interest rate is predicted to be about 3.6% from 2027. These interest rates could influence the exchange rate, with higher rates potentially strengthening the respective currencies. Furthermore, potential economic crises, such as an economic cliff edge in the Eurozone and a decrease in US exports due to a Eurozone recession, could impact the exchange rate. However, due to the unpredictable nature of these factors, it is challenging to accurately forecast whether the Euro-Dollar exchange rate will reach parity before 2027. It is important to monitor these factors and adjust predictions as new information becomes available.\"\n", + "}\n", + "\n", + "\u001b[00m\n", + "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", + "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", + " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", + "Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", + "* Focus on the affirmation inside double quotes in 'SENTENCE'.\n", + "* The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", + "* Use the tools provided to aid your estimation.\n", + "* Evaluate recent information more heavily than older information.\n", + "* Your response should include:\n", + " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", + " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", + " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", + " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", + " \n", + " Ensure p_yes + p_no equals 1.\n", + "\n", + " SENTENCE: - The exchange rate will reach parity (1€ = 1$) before 2027: \n", + "This scenario could occur if the European economy strengthens significantly or if \n", + "the US economy weakens. Factors that could influence this scenario include \n", + "unexpected economic growth in the Eurozone, a significant increase in European \n", + "interest rates, or a major economic crisis in the United States.\n", + " \u001b[00m\n", + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mGiven the context and the report, it is clear that there are several influencing factors that could potentially affect whether the Euro-Dollar exchange rate will reach parity before 2027. These factors include the projected growth of the European and US economies, the potential impact of interest rates, and the possibility of an economic crisis. While the European Central Bank's interest rate for 2027 is anticipated to average at 2.1% and the Federal Reserve's benchmark interest rate is predicted to be about 3.6% from 2027, it is difficult to accurately predict the impact these rates will have on the exchange rate. Furthermore, potential economic crises could significantly disrupt the exchange rate. However, due to the unpredictable nature of these factors, it is challenging to accurately forecast the outcome.\n", + "\n", + "Final Answer: \n", + "{\n", + "\"decision\": \"n\",\n", + "\"p_yes\": 0.4,\n", + "\"p_no\": 0.6,\n", + "\"confidence\": 0.7\n", + "}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", + " \"decision\": \"n\",\n", + " \"p_yes\": 0.4,\n", + " \"p_no\": 0.6,\n", + " \"confidence\": 0.7\n", + "}\n", + "\n", + "\u001b[00m\n" ] } ], "source": [ - "sentence = 'The temperature will be above 20C on May 24, 2024 in Berlin.'\n", + "#sentence = 'The temperature will be above 20C on May 24, 2024 in Berlin.'\n", + "sentence = \"\"\"- The exchange rate will reach parity (1€ = 1$) before 2027: \n", + "This scenario could occur if the European economy strengthens significantly or if \n", + "the US economy weakens. Factors that could influence this scenario include \n", + "unexpected economic growth in the Eurozone, a significant increase in European \n", + "interest rates, or a major economic crisis in the United States.\"\"\"\n", "result = crew.kickoff(inputs={'sentence': sentence})" ] }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 62, "id": "15e8eb0b-e4cc-4760-ac05-31d05c699b6f", "metadata": {}, "outputs": [ @@ -473,14 +881,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "result {'decision': 'y', 'p_yes': 0.6, 'p_no': 0.4, 'confidence': 0.5}\n", - "True\n" + "loaded result {'decision': 'n', 'p_yes': 0.4, 'p_no': 0.6, 'confidence': 0.7}\n", + "result {'decision': 'n', 'p_yes': 0.4, 'p_no': 0.6, 'confidence': 0.7}\n", + "False\n" ] } ], "source": [ "#assert \"report\" in report\n", "loaded_result = json.loads(result)\n", + "print (f'loaded result {loaded_result}')\n", "#assert \"prediction\" in result\n", "print (f'result {loaded_result}')\n", "print(True if loaded_result[\"decision\"] == \"y\" else False)" @@ -488,27 +898,17 @@ }, { "cell_type": "code", - "execution_count": 64, - "id": "dedfcae4-2907-4f08-a17b-08c91a12f2ff", - "metadata": {}, - "outputs": [], - "source": [ - "report = json.loads(task1.output.result())" - ] - }, - { - "cell_type": "code", - "execution_count": 68, + "execution_count": 39, "id": "cd0a9365-cb7b-4761-8e74-3804043fcaf1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'report': \"Historical weather data indicates that the average high temperatures in Berlin during May range between 63°F (17.2°C) to 69°F (20.5°C). Therefore, it's possible that the temperature could exceed 20°C on May 24, 2024. However, without specific long-term forecasts for this date, a definitive prediction cannot be made. The actual temperature will depend on a variety of factors including global weather patterns and local conditions closer to the date.\"}" + "{'report': \"The research suggests that it is unlikely for the exchange rate to reach parity (1€ = 1$) before 2027. The projected economic conditions in the Eurozone and the US do not align with the scenario where this could occur. The Eurozone's economic growth is expected to be modest, not indicating a significant strengthening. The US economy, while predicted to slow down, is still expected to grow, not pointing to a major crisis. Unexpected economic growth in the Eurozone and a significant increase in European interest rates do not seem to be on the horizon either. Therefore, based on the current and projected economic conditions in both regions, reaching parity in the given time frame seems improbable.\"}" ] }, - "execution_count": 68, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } diff --git a/poetry.lock b/poetry.lock index edaaf890..2d6ebca6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -7838,4 +7838,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "~3.10.0" -content-hash = "00c740468f31251c9e7aa74a78b96b4f508aa7f45377103381f2445978bffb00" +content-hash = "83456d8a7ffe7f676ee805195c0b54c69cbb3a25b879c600eb136bf5aa495237" diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py new file mode 100644 index 00000000..6fd84e0d --- /dev/null +++ b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py @@ -0,0 +1,140 @@ +import json + +from langchain_community.tools import DuckDuckGoSearchRun +from prediction_market_agent_tooling.markets.agent_market import AgentMarket + +from prediction_market_agent.agents.abstract import AbstractAgent +import crewai +import json +import os +from crewai import Agent +from crewai_tools import SerperDevTool +from dotenv import load_dotenv +from pydantic import BaseModel +from crewai import Crew, Process, Agent, Task +from tqdm import tqdm + +from prediction_market_agent.agents.crewai_subsequential_agent.prompts import * +search_tool = SerperDevTool() + +# TODO can use langchain's @tool decorator on our own tool methods to create a +# tool useable by a crew agent + +class Outcomes(BaseModel): + outcomes: list[str] + +class ProbabilityOutput(BaseModel): + decision: str + p_yes: float + p_no: float + confidence: float + +class CrewAIAgent(AbstractAgent): + def __init__(self) -> None: + + self.researcher = Agent( + role="Research Analyst", + goal="Research and report on some future event, giving high quality and nuanced analysis", + backstory="You are a senior research analyst who is adept at researching and reporting on future events.", + verbose=True, + allow_delegation=False, + tools=[search_tool], + ) + + self.analyst = Agent( + role='Data Analyst', + goal='Analyze research findings', + backstory='A meticulous analyst with a knack for uncovering patterns' + ) + + self.writer = Agent( + role='Writer', + goal='Draft the final report', + backstory='A skilled writer with a talent for crafting compelling narratives' + ) + + self.predictor = Agent( + role="Professional Gambler", + goal="Predict, based on some research you are presented with, whether or not a given event will occur", + backstory="You are a professional gambler who is adept at predicting and betting on the outcomes of future events.", + verbose=True, + allow_delegation=False, + tools=[] + ) + + def split_research_into_outcomes(self, question: str) -> Outcomes: + create_outcomes_task = Task( + description=(CREATE_OUTCOMES_FROM_SCENARIO_PROMPT), + expected_output=CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT, + tools = [], + output_json=Outcomes, + agent=self.researcher, + ) + + report_crew = Crew( + agents=[self.researcher], + tasks=[create_outcomes_task], + ) + result = report_crew.kickoff(inputs={'scenario': question}) + return result + + def generate_prediction_for_one_outcome(self, sentence: str) -> ProbabilityOutput: + + task_research_one_outcome = Task( + description=(RESEARCH_OUTCOME_PROMPT), + tools=[search_tool], + agent=self.researcher, + expected_output=(RESEARCH_OUTCOME_OUTPUT), + ) + task_create_probability_for_one_outcome = Task( + description=(PROBABILITY_FOR_ONE_OUTCOME_PROMPT), + expected_output=PROBABILITY_CLASS_OUTPUT, + agent=self.predictor, + output_json=ProbabilityOutput, + context=[task_research_one_outcome] + ) + crew = Crew( + agents=[self.researcher, self.predictor], + tasks=[task_research_one_outcome, task_create_probability_for_one_outcome], + verbose=2, + process=Process.sequential + ) + + result = crew.kickoff(inputs={'sentence': sentence}) + return result + + def generate_final_decision(self, outcomes_with_probabilities) -> ProbabilityOutput: + + task_final_decision = Task( + description=(FINAL_DECISION_PROMPT), + tools=[], + agent=self.predictor, + expected_output=(PROBABILITY_CLASS_OUTPUT), + output_json=ProbabilityOutput, + ) + + crew = Crew( + agents=[self.predictor], + tasks=[task_final_decision], + verbose=2, + ) + + result = crew.kickoff(inputs={'outcomes_with_probabilities': + [(i[0],i[1].dict()) for i in outcomes_with_probabilities], + 'number_of_outcomes': len(outcomes_with_probabilities), + 'outcome_to_assess': outcomes_with_probabilities[0][0]}) + return result + + def answer_binary_market(self, market: AgentMarket) -> bool: + + outcomes = self.split_research_into_outcomes(market.question) + + outcomes_with_probs = [] + for outcome in tqdm(outcomes.outcomes): + prediction = self.generate_prediction_for_one_outcome(outcome) + probability_output = ProbabilityOutput.model_validate_json(prediction) + outcomes_with_probs.append((outcome, probability_output)) + + + final_answer = self.generate_final_decision(outcomes_with_probs) + return True if final_answer.decision == "y" else False \ No newline at end of file diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py b/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py new file mode 100644 index 00000000..69bf8675 --- /dev/null +++ b/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py @@ -0,0 +1,106 @@ +# ToDo - Test both research prompts +CREATE_OUTCOMES_FROM_SCENARIO_PROMPT = """ + You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes. + You should break down the SCENARIO into a list of possible outcomes. + + Example 1: + - SCENARIO: Will Gnosis Pay reach 100,000 users by 2025? + - Answer: ''' + - Gnosis Pay reaches less than 25,000 users by 2025 + - Gnosis Pay reaches more than 25,000 users but less than 50,000 users by 2025 + - Gnosis Pay reaches more than 50,000 users but less than 75,000 users by 2025 + - Gnosis Pay reaches 100,000 users or more by 2025 + ''' + + Example 2: + - SCENARIO: Will the price of Bitcoin go up again in the next 2 months? + - Answer: ''' + - The price of crypto will go up in the next 2 months + - The price of crypto will not go up in the next 2 months + ''' + + [SCENARIO] + {scenario} + """ +# research_prompt2 = """ +# You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes. +# You should break down the SCENARIO into a list of possible outcomes. + +# [SCENARIO] +# {scenario} +# """ + +CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT = ''' + A list containing multiple bullet points. Each bullet point should start with '-'. + Each bullet point should contain a possible outcome resulting from the + provided SCENARIO. The produced outcomes should be mutually exclusive, i.e. only one of them should be true whereas + the remaining ones should be false. + ''' + +PROBABILITY_FOR_ONE_OUTCOME_PROMPT = """ + Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'. + Use the sentence provided in 'SENTENCE' and follow these guidelines: + * Focus on the affirmation inside double quotes in 'SENTENCE'. + * The question must have only 'Yes' or 'No' outcomes. If not, respond with "Error". + * Use the tools provided to aid your estimation. + * Evaluate recent information more heavily than older information. + * Your response should include: + - "decision": The decision you made. Either `y` (for `Yes`) or `n` (for `No`). + - "p_yes": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability). + - "p_no": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability). + - "confidence": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). + Confidence can be calculated based on the quality and quantity of data used for the estimation. + + Ensure p_yes + p_no equals 1. + + SENTENCE: {sentence} +""" + +# ToDo - Test both research prompts +RESEARCH_OUTCOME_PROMPT = """ + Research and report on the following sentence: + {sentence} + Search and scrape the web for information that will help you give a high quality, nuanced answer to the question. + """ +RESEARCH_OUTCOME_OUTPUT = """ + Return your answer in raw JSON format, with no special formatting such as newlines, as follows: + {{"report": }} + where is a free text field that contains a well though out justification + for the predicition based on the summary of your findings. + """ + +FINAL_DECISION_PROMPT = """ +Your task is to determine the probability of a given outcome being true. +Below you can find the , a list of tuples where the first element +is an outcome + +[Outcomes with probabilities] +""" + +FINAL_DECISION_PROMPT = """ +Your task is to determine the probability of a binary outcome being answered 'Yes' or 'No'. +OUTCOMES_WITH_PROBABILITIES is provided, which contains a set of {number_of_outcomes} outcomes. +The object OUTCOMES_WITH_PROBABILITIES contains a list of tuple, where each tuple contains, as its +first element, an outcome, and as its second entry, a probability dictionary, having properties such + as p_yes (probability that the outcome is true), p_no (probability that the outcome is false), +confidence (confidence level in the values of p_yes and p_no). +Observe that the outcomes contained inside OUTCOMES_WITH_PROBABILITIES are mutually exclusive, i.e. +only one of them can be true. +You should determine the probability of the outcome OUTCOME_TO_ASSESS being true, +considering the probabilities of the other related outcomes. + +OUTCOME_TO_ASSESS: {outcome_to_assess} +OUTCOMES_WITH_PROBABILITIES: {outcomes_with_probabilities} +""" +PROBABILITY_CLASS_OUTPUT=""" + Your response should include: + - "decision": The decision you made. Either `y` (for `Yes`) or `n` (for `No`). + - "p_yes": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability). + - "p_no": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability). + - "confidence": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to + 1 (maximum confidence). Confidence can be calculated based on the quality and quantity of data used for the estimation. + + Ensure p_yes + p_no equals 1. + + Format your response in JSON format, including the keys "decision", "p_yes", "p_no" and "confidence". +""" \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index bda64a36..a012e0f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,7 @@ autoflake = "^2.2.1" isort = "^5.13.2" markdownify = "^0.11.6" tavily-python = "^0.3.1" +tqdm = "^4.66.2" [build-system] requires = ["poetry-core"] From 5767944ebbdfc0f0828fa044f7f5aec5d175959f Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Thu, 4 Apr 2024 17:06:45 -0300 Subject: [PATCH 03/17] Agent working locally --- agent_thinks_more.ipynb | 206 ++++++++++++++---- .../crewai_agent_subquestions.py | 186 +++++++++------- .../crewai_subsequential_agent/deploy.py | 78 +++++++ .../crewai_subsequential_agent/prompts.py | 3 +- 4 files changed, 341 insertions(+), 132 deletions(-) create mode 100644 prediction_market_agent/agents/crewai_subsequential_agent/deploy.py diff --git a/agent_thinks_more.ipynb b/agent_thinks_more.ipynb index e822b0a3..3f869473 100644 --- a/agent_thinks_more.ipynb +++ b/agent_thinks_more.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 10, "id": "be934b33-46f6-475b-b0c3-373b87635de3", "metadata": {}, "outputs": [], @@ -25,6 +25,7 @@ "import os\n", "from crewai import Agent\n", "from crewai_tools import SerperDevTool\n", + "from langchain_community.callbacks.manager import get_openai_callback\n", "from dotenv import load_dotenv\n", "from pydantic import BaseModel\n", "from crewai import Crew, Process, Agent, Task\n", @@ -33,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 3, "id": "15f1966a-a891-4667-b65d-4f2db40a0214", "metadata": {}, "outputs": [], @@ -50,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "ef09caeb-79de-413a-877b-436e3d601e0f", "metadata": {}, "outputs": [ @@ -60,7 +61,7 @@ "True" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -71,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 5, "id": "42967b8a-ea5f-466b-9022-ab469d08de02", "metadata": {}, "outputs": [], @@ -110,7 +111,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 6, "id": "9525e0a9-b9df-4b59-a71d-32f7de0eeef5", "metadata": {}, "outputs": [], @@ -157,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 8, "id": "128836b6-6f7e-4b7a-a2ef-4fb83d1d2e37", "metadata": {}, "outputs": [], @@ -176,14 +177,20 @@ " agents=[researcher],\n", " tasks=[create_outcomes_task],\n", " )\n", - " result = report_crew.kickoff(inputs={'scenario': question})\n", - " print(result)\n", - " return result" + " with get_openai_callback() as cb:\n", + " result = report_crew.kickoff(inputs={'scenario': question})\n", + "\n", + " print(f\"Total Tokens: {cb.total_tokens}\")\n", + " print(f\"Prompt Tokens: {cb.prompt_tokens}\")\n", + " print(f\"Completion Tokens: {cb.completion_tokens}\")\n", + " print(f\"Total Cost (USD): ${cb.total_cost}\")\n", + " print(result)\n", + " return result" ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 11, "id": "177eb8be-4f31-4fa6-8aa3-36035bcad720", "metadata": { "scrolled": true @@ -193,7 +200,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-04-03 18:11:11,015 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + "2024-04-04 14:38:16,337 - 131350216197376 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" ] }, { @@ -203,84 +210,187 @@ "\n", "\n", "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mSince it is a future event, I need to research the current trends and opinions around the use of smart accounts in the EVM ecosystem. This will help me identify the possible outcomes for the next 3-5 years. \n", + "\u001b[32;1m\u001b[1;3mI need to consider the various possible outcomes for the scenario: \"Will smart accounts replace EOAs (Externally Owned Accounts) in the EVM (Ethereum Virtual Machine) ecosystem in the next 3-5 years?\" To provide an accurate and detailed list of potential outcomes, I will research the current state and future predictions of smart accounts and EOAs in the EVM ecosystem. \n", "\n", "Action: \n", "Search the internet\n", "\n", "Action Input: \n", "{\n", - "\"search_query\": \"future of smart accounts in EVM ecosystem\"\n", + "\"search_query\": \"future of smart accounts and EOAs in EVM ecosystem\"\n", "}\u001b[0m\u001b[93m \n", "\n", "\n", "Search results: Title: Ethereum devs debate future of account abstraction - Blockworks\n", "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", - "Snippet: Ethereum devs debate future of account abstraction ... EVM ecosystem towards smart contract accounts (SCAs). ... future trajectory of the network.\n", - "---\n", - "Title: State of Wallets - Part 2: Smart Accounts (Account Abstraction\n", - "Link: https://www.coinbase.com/blog/state-of-wallets-2\n", - "Snippet: Account Abstraction (“AA”) launched in the EVM ecosystem in Q1-2023 and is beginning to see an uptick in adoption.\n", + "Snippet: The first two goals are clearly not satisfied by Ethereum's “end user account” (EOA) model, hence the need to move the entire EVM ecosystem ...\n", "---\n", - "Title: Future of Smart Accounts: Modular, Specialised & Multichain\n", - "Link: https://longhashvc.medium.com/future-of-smart-accounts-modular-specialised-multichain-d04f083375a6\n", - "Snippet: In the more distant future, we expect smart accounts to incorporate intents and LLMs. We envision the future smart wallet to be able to: Use ...\n", + "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", + "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", + "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", "---\n", - "Title: Smart Accounts Adoption Accelerated in Q4 2023 - Alchemy\n", - "Link: https://www.alchemy.com/blog/smart-accounts-adoption-accelerated-in-q4-2023\n", - "Snippet: ERC-4337 smart account adoption saw major growth in the fourth quarter of 2024, surpassing 1 million total deployed accounts!\n", + "Title: The unspoken Ethereum revolution: Are EOAs becoming obsolete?\n", + "Link: https://www.binance.com/en/square/post/336701\n", + "Snippet: ... EOAs in the ecosystem's future, favoring smart contract wallets as the default account model for users. EIP-4337 & Account Abstraction. Security Fellow for ...\n", "---\n", - "Title: The Future of the Ethereum Virtual Machine (EVM) in 2023 - CoinDesk\n", - "Link: https://www.coindesk.com/consensus-magazine/2022/12/12/ethereum-virtual-machine-evm-future/\n", - "Snippet: A growing collection of EVMs will become increasingly specialized. The EVM is by far the most popular execution environment among smart contract ...\n", + "Title: The EOS Network's Vision for an Interoperable Future\n", + "Link: https://eosnetwork.com/blog/eos-interoperable-future-vision/\n", + "Snippet: The EOS EVM operates as a smart contract running on the EOS blockchain. This provides an opportunity to, in many cases, execute the full process ...\n", "---\n", "Title: The Future of Web3 Account Abstraction with Oasis\n", "Link: https://oasisprotocol.org/blog/web3-account-abstraction\n", "Snippet: Oasis Sapphire proposes a simpler solution to account abstraction for the entire EVM ecosystem. By design, every smart contract on Oasis ...\n", "---\n", - "Title: Coinbase: The Current State of Smart Account Wallets - Coinlive\n", - "Link: https://www.coinlive.com/news/coinbase-the-current-state-of-smart-account-wallets\n", - "Snippet: The \"Account Abstraction\" (or ERC-4337) will be released within the ETH/EVM ecosystem in Q1 2023. AA defines a standard so that users can ...\n", + "Title: Future of Smart Accounts: Modular, Specialised & Multichain\n", + "Link: https://longhashvc.medium.com/future-of-smart-accounts-modular-specialised-multichain-d04f083375a6\n", + "Snippet: Beyond customer access, we expect the leading ecosystems to be built by a factor of perceived security, developer experience, and importantly, ...\n", "---\n", - "Title: The Year of Transformation with Account Abstraction - LinkedIn\n", - "Link: https://www.linkedin.com/pulse/year-transformation-account-abstraction-actalink-28off\n", - "Snippet: It enabled the creation of smart accounts\", on Ethereum and other EVM ... Future of Account Abstraction in 2024. The ... Monetization models within ...\n", + "Title: The Future of Account Abstraction with Oasis\n", + "Link: https://oasisrose.garden/the-future-of-account-abstraction-with-oasis/\n", + "Snippet: Improving user experiences through account abstraction elevates the utility that can be offered by both network native applications and cross- ...\n", + "---\n", + "Title: Account Abstraction: Revolutionizing The Payments Industry - LinkedIn\n", + "Link: https://www.linkedin.com/pulse/account-abstraction-revolutionizing-payments-industry-fuseio\n", + "Snippet: ... EVM ecosystem. ... By merging Contract Accounts and EOAs, developers have greater flexibility in designing and implementing smart contracts.\n", "---\n", "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", - "Snippet: Smart accounts offer a range of advanced features, such as multi-signature authorization, time-based unlocking, and threshold-based transaction ...\n", + "Snippet: Smart accounts on the Ethereum blockchain can be controlled by programmable smart contracts rather than private keys.\n", "---\n", - "Title: Making Biconomy Smart Accounts Modular\n", - "Link: https://www.biconomy.io/post/making-biconomy-smart-accounts-modular\n", - "Snippet: With our new modular architecture, Biconomy is evolving Smart Account from wallet layer to a platform! The Smart Account Platform enables ...\n", + "Title: The Evolving Landscape of Blockchain: Cutting-Edge Concepts ...\n", + "Link: https://m-tiesler.medium.com/the-evolving-landscape-of-blockchain-cutting-edge-concepts-shaping-2024-992e4e3b4b71\n", + "Snippet: In this blog post, we'll explore 10 groundbreaking concepts that are shaping the future of blockchain ecosystems. From Account Abstraction to ...\n", + "---\n", + "\n", + "\u001b[00m\n", + "\u001b[32;1m\u001b[1;3mThought: \n", + "The search results show that there is an ongoing debate about the future of EOAs and smart accounts in the EVM ecosystem. Some developers are favoring smart contract wallets as the default account model for users. Others are working on merging Contract Accounts and EOAs for greater flexibility. This information will help me to identify several potential outcomes for the scenario.\n", + "\n", + "Final Answer: \n", + "- Smart accounts completely replace EOAs in the EVM ecosystem within the next 3-5 years.\n", + "- Smart accounts and EOAs co-exist in the EVM ecosystem, with a significant increase in the use of smart accounts.\n", + "- EOAs remain the dominant account model in the EVM ecosystem, with smart accounts used only for specific applications.\n", + "- EOAs and smart accounts merge, creating a hybrid account model that benefits from the advantages of both types.\n", + "- The EVM ecosystem evolves to use a different kind of account model not yet widely discussed or anticipated.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "Total Tokens: 0\n", + "Prompt Tokens: 0\n", + "Completion Tokens: 0\n", + "Total Cost (USD): $0.0\n", + "{\n", + " \"outcomes\": [\n", + " \"Smart accounts completely replace EOAs in the EVM ecosystem within the next 3-5 years.\",\n", + " \"Smart accounts and EOAs co-exist in the EVM ecosystem, with a significant increase in the use of smart accounts.\",\n", + " \"EOAs remain the dominant account model in the EVM ecosystem, with smart accounts used only for specific applications.\",\n", + " \"EOAs and smart accounts merge, creating a hybrid account model that benefits from the advantages of both types.\",\n", + " \"The EVM ecosystem evolves to use a different kind of account model not yet widely discussed or anticipated.\"\n", + " ]\n", + "}\n" + ] + } + ], + "source": [ + "question = 'Will smart accounts replace EOAs in the EVM ecosystem in the next 3-5 years?'\n", + "result = print_outcomes(question)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "3cae6652-c2ac-4121-8b22-2da28b651ee4", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-04 14:51:06,936 - 131350216197376 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mThe scenario asks whether the situation with the Baltimore Bridge will be resolved by 5 April 2024. The outcomes for this scenario will be dependent on the specifics of the \"situation\" mentioned. Therefore, I need to first understand what the Baltimore Bridge situation is. I will use my tool to search the internet. \n", + "\n", + "Action: Search the internet\n", + "Action Input: {\"search_query\": \"Baltimore Bridge situation\"}\u001b[0m\u001b[93m \n", + "\n", + "\n", + "Search results: Title: Baltimore Bridge Collapse LIVE: Clean-up Efforts Underway\n", + "Link: https://www.youtube.com/watch?v=qy2cs0F5KZA\n", + "Snippet: Baltimore Bridge Collapse LIVE: Clean-up Efforts Underway | New Channel Opened Around Fallen Bridge A second channel has been opened around ...\n", + "---\n", + "Title: CNN rides along with Coast Guard after Baltimore bridge collapse\n", + "Link: https://www.cnn.com/videos/us/2024/04/04/baltimore-bridge-collapse-coast-guard-ride-along-cohen-pkg-cnntm-vpx.cnn\n", + "Snippet: CNN's Gabe Cohen speaks with Coast Guard officials about the complex salvage operation of removing wreckage following Baltimore's Francis ...\n", + "---\n", + "Title: Baltimore Bridge Collapse Update: Emergency Declaration ...\n", + "Link: https://www.fmcsa.dot.gov/newsroom/baltimore-bridge-collapse-update-emergency-declaration-extension-issued-fmcsa\n", + "Snippet: Francis Scott Key Bridge News and Updates At approximately 1:30 a.m. ET on March 26, 2024, a cargo ship leaving the Port of Baltimore in ...\n", + "---\n", + "Title: Baltimore bridge: New channel to bypass collapse site now in use\n", + "Link: https://apnews.com/article/baltimore-bridge-collapse-04-02-2024-a533659d18ddd8a8befa80c41141e41d\n", + "Snippet: AP AUDIO: Second channel opened allowing some vessels to bypass wreckage at the Baltimore bridge collapse site. At a news conference, Maryland ...\n", + "---\n", + "Title: Key Bridge News | MDTA - Maryland.gov\n", + "Link: http://mdta.maryland.gov/keybridgenews\n", + "Snippet: At approximately 1:30 a.m. on March 26, 2024, a cargo ship leaving the Port of Baltimore struck the (I-695) Francis Scott Key Bridge.\n", + "---\n", + "Title: Workers create narrow channel through destroyed Baltimore bridge\n", + "Link: https://www.youtube.com/watch?v=dNg28mPtmmg\n", + "Snippet: A narrow channel through the destroyed Francis Scott Key Bridge was created by workers. The channel will be used by work boats and comes the ...\n", + "---\n", + "Title: Baltimore bridge collapse: What will happen to the 21 sailors ... - BBC\n", + "Link: https://www.bbc.com/news/world-us-canada-68708593\n", + "Snippet: Only one crew member on-board the Dali was injured when Baltimore's Key Bridge collapsed. Nearly a week after Baltimore's Francis Scott Key ...\n", + "---\n", + "Title: Baltimore Key Bridge collapse: Temporary channel opens for boats ...\n", + "Link: https://abcnews.go.com/US/live-updates/baltimore-key-bridge-collapse/?id=108500215\n", + "Snippet: A cargo ship crashed into Baltimore's Francis Scott Key Bridge early Tuesday morning, causing a near-total collapse of the span and halting ...\n", + "---\n", + "Title: In wake of Baltimore bridge crash, questions arise about pier ...\n", + "Link: https://www.cbsnews.com/newyork/news/in-wake-of-baltimore-bridge-crash-questions-arise-about-pier-protection-for-nyc-spans/\n", + "Snippet: Local researchers are studying what a similar impact would mean for area bridges and shared their findings with CBS New York.\n", "---\n", "\n", "\u001b[00m\n", "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results indicate that there is an ongoing debate about the role of smart accounts in the EVM ecosystem. They also show that smart accounts have seen an uptick in adoption and have reached over a million total deployed accounts. Given this information, I can now outline several possible outcomes for the next 3-5 years.\n", + "From the search results, it appears that the \"Baltimore Bridge situation\" refers to a recent collapse of the Francis Scott Key Bridge in Baltimore, caused by a cargo ship. The outcomes of the scenario will depend on how quickly and effectively the cleanup and reconstruction efforts progress. \n", + "\n", + "Here are the possible outcomes:\n", "\n", + "Action: \n", "Final Answer: \n", "'''\n", - "- Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases\n", - "- Smart accounts will coexist with EOAs, with each type of account being used for different applications\n", - "- Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account\n", - "- Smart accounts will not gain further adoption and EOAs will remain the dominant type of account\n", + "- The Baltimore Bridge situation is fully resolved by 5 April 2024, with the bridge being fully repaired and reopened. \n", + "- The Baltimore Bridge situation is partially resolved by 5 April 2024, with cleanup efforts completed but reconstruction still in progress.\n", + "- The Baltimore Bridge situation is not resolved by 5 April 2024, with cleanup and reconstruction efforts still ongoing.\n", + "- The Baltimore Bridge situation worsens by 5 April 2024, due to additional damage or complications arising during the cleanup and reconstruction process.\n", "'''\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n", + "Total Tokens: 0\n", + "Prompt Tokens: 0\n", + "Completion Tokens: 0\n", + "Total Cost (USD): $0.0\n", "{\n", " \"outcomes\": [\n", - " \"Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases\",\n", - " \"Smart accounts will coexist with EOAs, with each type of account being used for different applications\",\n", - " \"Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account\",\n", - " \"Smart accounts will not gain further adoption and EOAs will remain the dominant type of account\"\n", + " \"The Baltimore Bridge situation is fully resolved by 5 April 2024, with the bridge being fully repaired and reopened.\",\n", + " \"The Baltimore Bridge situation is partially resolved by 5 April 2024, with cleanup efforts completed but reconstruction still in progress.\",\n", + " \"The Baltimore Bridge situation is not resolved by 5 April 2024, with cleanup and reconstruction efforts still ongoing.\",\n", + " \"The Baltimore Bridge situation worsens by 5 April 2024, due to additional damage or complications arising during the cleanup and reconstruction process.\"\n", " ]\n", "}\n" ] } ], "source": [ - "question = 'Will smart accounts replace EOAs in the EVM ecosystem in the next 3-5 years?'\n", + "question = 'Will the Baltimore Bridge situation be resolved by 5 April 2024?'\n", "result = print_outcomes(question)" ] }, diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py index 6fd84e0d..cd112f41 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py @@ -1,37 +1,33 @@ -import json - -from langchain_community.tools import DuckDuckGoSearchRun -from prediction_market_agent_tooling.markets.agent_market import AgentMarket - -from prediction_market_agent.agents.abstract import AbstractAgent -import crewai -import json -import os -from crewai import Agent +from crewai import Agent, Task, Process, Crew from crewai_tools import SerperDevTool -from dotenv import load_dotenv +from langchain_community.callbacks.manager import get_openai_callback +from prediction_market_agent_tooling.markets.agent_market import AgentMarket from pydantic import BaseModel -from crewai import Crew, Process, Agent, Task from tqdm import tqdm +import typing as t +from prediction_market_agent.agents.abstract import AbstractAgent from prediction_market_agent.agents.crewai_subsequential_agent.prompts import * + search_tool = SerperDevTool() -# TODO can use langchain's @tool decorator on our own tool methods to create a -# tool useable by a crew agent class Outcomes(BaseModel): outcomes: list[str] + class ProbabilityOutput(BaseModel): decision: str p_yes: float p_no: float confidence: float -class CrewAIAgent(AbstractAgent): + +get_openai_callback() + + +class CrewAIAgentSubquestions(AbstractAgent): def __init__(self) -> None: - self.researcher = Agent( role="Research Analyst", goal="Research and report on some future event, giving high quality and nuanced analysis", @@ -41,34 +37,20 @@ def __init__(self) -> None: tools=[search_tool], ) - self.analyst = Agent( - role='Data Analyst', - goal='Analyze research findings', - backstory='A meticulous analyst with a knack for uncovering patterns' - ) - - self.writer = Agent( - role='Writer', - goal='Draft the final report', - backstory='A skilled writer with a talent for crafting compelling narratives' - ) - self.predictor = Agent( - role="Professional Gambler", - goal="Predict, based on some research you are presented with, whether or not a given event will occur", - backstory="You are a professional gambler who is adept at predicting and betting on the outcomes of future events.", - verbose=True, - allow_delegation=False, - tools=[] - ) + role="Professional Gambler", + goal="Predict, based on some research you are presented with, whether or not a given event will occur", + backstory="You are a professional gambler who is adept at predicting and betting on the outcomes of future events.", + verbose=True, + allow_delegation=False, + ) def split_research_into_outcomes(self, question: str) -> Outcomes: create_outcomes_task = Task( - description=(CREATE_OUTCOMES_FROM_SCENARIO_PROMPT), - expected_output=CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT, - tools = [], - output_json=Outcomes, - agent=self.researcher, + description=CREATE_OUTCOMES_FROM_SCENARIO_PROMPT, + expected_output=CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT, + output_json=Outcomes, + agent=self.researcher, ) report_crew = Crew( @@ -76,65 +58,103 @@ def split_research_into_outcomes(self, question: str) -> Outcomes: tasks=[create_outcomes_task], ) result = report_crew.kickoff(inputs={'scenario': question}) - return result + return Outcomes.model_validate_json(result) - def generate_prediction_for_one_outcome(self, sentence: str) -> ProbabilityOutput: + def build_tasks_for_outcome(self, input_dict: dict[str, t.Any] = {}) -> list[Task]: + task_research_one_outcome = Task( + description=RESEARCH_OUTCOME_PROMPT.format(**input_dict), + agent=self.researcher, + expected_output=RESEARCH_OUTCOME_OUTPUT, + async_execution=True + ) + task_create_probability_for_one_outcome = Task( + description=PROBABILITY_FOR_ONE_OUTCOME_PROMPT, + expected_output=PROBABILITY_CLASS_OUTPUT, + agent=self.predictor, + output_json=ProbabilityOutput, + async_execution=True, + context=[task_research_one_outcome] + ) + return [task_research_one_outcome, task_create_probability_for_one_outcome] + + def generate_prediction_for_one_outcome(self, sentence: str) -> ProbabilityOutput: task_research_one_outcome = Task( - description=(RESEARCH_OUTCOME_PROMPT), - tools=[search_tool], - agent=self.researcher, - expected_output=(RESEARCH_OUTCOME_OUTPUT), - ) + description=RESEARCH_OUTCOME_PROMPT, + agent=self.researcher, + expected_output=RESEARCH_OUTCOME_OUTPUT, + ) task_create_probability_for_one_outcome = Task( - description=(PROBABILITY_FOR_ONE_OUTCOME_PROMPT), - expected_output=PROBABILITY_CLASS_OUTPUT, - agent=self.predictor, - output_json=ProbabilityOutput, + description=PROBABILITY_FOR_ONE_OUTCOME_PROMPT, + expected_output=PROBABILITY_CLASS_OUTPUT, + agent=self.predictor, + output_json=ProbabilityOutput, context=[task_research_one_outcome] - ) + ) crew = Crew( - agents=[self.researcher, self.predictor], - tasks=[task_research_one_outcome, task_create_probability_for_one_outcome], - verbose=2, - process=Process.sequential - ) - + agents=[self.researcher, self.predictor], + tasks=[task_research_one_outcome, task_create_probability_for_one_outcome], + verbose=2, + process=Process.sequential + ) + result = crew.kickoff(inputs={'sentence': sentence}) - return result + return ProbabilityOutput.model_validate_json(result) def generate_final_decision(self, outcomes_with_probabilities) -> ProbabilityOutput: - task_final_decision = Task( - description=(FINAL_DECISION_PROMPT), - tools=[], - agent=self.predictor, - expected_output=(PROBABILITY_CLASS_OUTPUT), - output_json=ProbabilityOutput, - ) - + description=(FINAL_DECISION_PROMPT), + agent=self.predictor, + expected_output=(PROBABILITY_CLASS_OUTPUT), + output_json=ProbabilityOutput, + ) + crew = Crew( - agents=[self.predictor], - tasks=[task_final_decision], - verbose=2, - ) - - result = crew.kickoff(inputs={'outcomes_with_probabilities': - [(i[0],i[1].dict()) for i in outcomes_with_probabilities], - 'number_of_outcomes': len(outcomes_with_probabilities), - 'outcome_to_assess': outcomes_with_probabilities[0][0]}) - return result + agents=[self.predictor], + tasks=[task_final_decision], + verbose=2, + ) + + result = crew.kickoff(inputs={'outcomes_with_probabilities': + [(i[0], i[1].dict()) for i in outcomes_with_probabilities], + 'number_of_outcomes': len(outcomes_with_probabilities), + 'outcome_to_assess': outcomes_with_probabilities[0][0]}) + return ProbabilityOutput.model_validate_json(result) def answer_binary_market(self, market: AgentMarket) -> bool: - - outcomes = self.split_research_into_outcomes(market.question) + + # outcomes = self.split_research_into_outcomes(market.question) + + outcomes = Outcomes(outcomes=['Donald Trump wins the 2024 presidential election', + 'Joe Biden wins the 2024 presidential election', + 'An independent candidate wins the 2024 presidential election', + 'None of the above candidates win the 2024 presidential election, and someone else comes forward as the winner']) outcomes_with_probs = [] + task_map = {} for outcome in tqdm(outcomes.outcomes): - prediction = self.generate_prediction_for_one_outcome(outcome) - probability_output = ProbabilityOutput.model_validate_json(prediction) - outcomes_with_probs.append((outcome, probability_output)) + tasks_for_outcome = self.build_tasks_for_outcome(input_dict={"sentence": outcome}) + task_map[outcome] = tasks_for_outcome + + # flatten nested list + all_tasks = sum(task_map.values(), []) + crew = Crew( + agents=[self.researcher, self.predictor], + tasks=all_tasks, + verbose=2, + ) + + crew.kickoff() + + # We parse individual task results to build outcomes_with_probs + for outcome, tasks in task_map.items(): + try: + prediction_result = ProbabilityOutput.model_validate_json(tasks[1].output.raw_output) + except Exception as e: + print("Could not parse result as ProbabilityOutput ", e) + prediction_result = ProbabilityOutput(p_yes=0.5, p_no=0.5, confidence=0, decision="") + outcomes_with_probs.append((outcome, prediction_result)) final_answer = self.generate_final_decision(outcomes_with_probs) - return True if final_answer.decision == "y" else False \ No newline at end of file + return True if final_answer.decision == "y" else False diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py new file mode 100644 index 00000000..f13e237f --- /dev/null +++ b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py @@ -0,0 +1,78 @@ +from decimal import Decimal +import random +from prediction_market_agent_tooling.deploy.agent import DeployableAgent +from prediction_market_agent_tooling.markets.agent_market import AgentMarket +from prediction_market_agent_tooling.markets.data_models import BetAmount, Currency +from prediction_market_agent_tooling.markets.markets import MarketType + +from prediction_market_agent.agents.crewai_subsequential_agent.crewai_agent_subquestions import CrewAIAgentSubquestions +from prediction_market_agent.agents.known_outcome_agent.known_outcome_agent import ( + Result, +) + + +def market_is_saturated(market: AgentMarket) -> bool: + return market.p_yes > 0.95 or market.p_no > 0.95 + + +class DeployableThinkThoroughlyAgent(DeployableAgent): + # For cheaper credits at this experimental stage + model = "gpt-3.5-turbo" + + def load(self) -> None: + self.markets_with_known_outcomes: dict[str, Result] = {} + + def pick_markets(self, markets: list[AgentMarket]) -> list[AgentMarket]: + # We simply pick 5 random markets to bet on + picked_markets: list[AgentMarket] = [] + random.shuffle(markets) + for market in markets: + # Assume very high probability markets are already known, and have + # been correctly bet on, and therefore the value of betting on them + # is low. + if not market_is_saturated(market=market): + picked_markets.append(market) + if len(picked_markets) == 5: + break + + return picked_markets + + def answer_binary_market(self, market: AgentMarket) -> bool: + # The answer has already been determined in `pick_markets` so we just + # return it here. + agent = CrewAIAgentSubquestions() + result = agent.answer_binary_market(market) + return result + + def calculate_bet_amount(self, answer: bool, market: AgentMarket) -> BetAmount: + if market.currency == Currency.xDai: + return BetAmount(amount=Decimal(0.1), currency=Currency.xDai) + else: + raise NotImplementedError("This agent only supports xDai markets") + + +if __name__ == "__main__": + agent = DeployableThinkThoroughlyAgent() + agent.deploy_local(market_type=MarketType.OMEN, + sleep_time=540, + timeout=180, + place_bet=False) + # agent.deploy_gcp( + # repository=f"git+{get_current_git_url()}@{get_current_git_commit_sha()}", + # market_type=MarketType.OMEN, + # labels={OWNER_KEY: getpass.getuser()}, + # secrets={ + # "TAVILY_API_KEY": "GNOSIS_AI_TAVILY_API_KEY:latest", + # }, + # memory=1024, + # api_keys=APIKeys( + # BET_FROM_ADDRESS=verify_address( + # "0xb611A9f02B318339049264c7a66ac3401281cc3c" + # ), + # BET_FROM_PRIVATE_KEY=private_key_type("EVAN_OMEN_BETTER_0_PKEY:latest"), + # OPENAI_API_KEY=SecretStr("EVAN_OPENAI_API_KEY:latest"), + # MANIFOLD_API_KEY=None, + # ), + # cron_schedule="0 */12 * * *", + # timeout=540, + # ) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py b/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py index 69bf8675..ddf23849 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py @@ -93,7 +93,7 @@ OUTCOMES_WITH_PROBABILITIES: {outcomes_with_probabilities} """ PROBABILITY_CLASS_OUTPUT=""" - Your response should include: + Your response should be a JSON string containing the following keys: - "decision": The decision you made. Either `y` (for `Yes`) or `n` (for `No`). - "p_yes": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability). - "p_no": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability). @@ -103,4 +103,5 @@ Ensure p_yes + p_no equals 1. Format your response in JSON format, including the keys "decision", "p_yes", "p_no" and "confidence". + Only output the JSON-formatted string, nothing else. """ \ No newline at end of file From a552ececeb8d2c2b189398ec85f6d25bd07f7da5 Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Thu, 4 Apr 2024 17:11:57 -0300 Subject: [PATCH 04/17] Updated poetry.lock --- poetry.lock | 2346 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 2262 insertions(+), 84 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4d7689b9..c609f05d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -110,6 +110,25 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "alembic" +version = "1.13.1" +description = "A database migration tool for SQLAlchemy." +optional = false +python-versions = ">=3.8" +files = [ + {file = "alembic-1.13.1-py3-none-any.whl", hash = "sha256:2edcc97bed0bd3272611ce3a98d98279e9c209e7186e43e75bbb1b2bdfdbcc43"}, + {file = "alembic-1.13.1.tar.gz", hash = "sha256:4932c8558bf68f2ee92b9bbcb8218671c627064d5b08939437af6d77dc05e595"}, +] + +[package.dependencies] +Mako = "*" +SQLAlchemy = ">=1.3.0" +typing-extensions = ">=4" + +[package.extras] +tz = ["backports.zoneinfo"] + [[package]] name = "altair" version = "5.3.0" @@ -168,6 +187,23 @@ doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphin test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (>=0.23)"] +[[package]] +name = "asgiref" +version = "3.8.1" +description = "ASGI specs, helper code, and adapters" +optional = false +python-versions = ">=3.8" +files = [ + {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, + {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} + +[package.extras] +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] + [[package]] name = "async-timeout" version = "4.0.3" @@ -213,6 +249,57 @@ files = [ pyflakes = ">=3.0.0" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + +[[package]] +name = "bcrypt" +version = "4.1.2" +description = "Modern password hashing for your software and your servers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "bcrypt-4.1.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ac621c093edb28200728a9cca214d7e838529e557027ef0581685909acd28b5e"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea505c97a5c465ab8c3ba75c0805a102ce526695cd6818c6de3b1a38f6f60da1"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57fa9442758da926ed33a91644649d3e340a71e2d0a5a8de064fb621fd5a3326"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb3bd3321517916696233b5e0c67fd7d6281f0ef48e66812db35fc963a422a1c"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6cad43d8c63f34b26aef462b6f5e44fdcf9860b723d2453b5d391258c4c8e966"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:44290ccc827d3a24604f2c8bcd00d0da349e336e6503656cb8192133e27335e2"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:732b3920a08eacf12f93e6b04ea276c489f1c8fb49344f564cca2adb663b3e4c"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c28973decf4e0e69cee78c68e30a523be441972c826703bb93099868a8ff5b5"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b8df79979c5bae07f1db22dcc49cc5bccf08a0380ca5c6f391cbb5790355c0b0"}, + {file = "bcrypt-4.1.2-cp37-abi3-win32.whl", hash = "sha256:fbe188b878313d01b7718390f31528be4010fed1faa798c5a1d0469c9c48c369"}, + {file = "bcrypt-4.1.2-cp37-abi3-win_amd64.whl", hash = "sha256:9800ae5bd5077b13725e2e3934aa3c9c37e49d3ea3d06318010aa40f54c63551"}, + {file = "bcrypt-4.1.2-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:71b8be82bc46cedd61a9f4ccb6c1a493211d031415a34adde3669ee1b0afbb63"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e3c6642077b0c8092580c819c1684161262b2e30c4f45deb000c38947bf483"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:387e7e1af9a4dd636b9505a465032f2f5cb8e61ba1120e79a0e1cd0b512f3dfc"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f70d9c61f9c4ca7d57f3bfe88a5ccf62546ffbadf3681bb1e268d9d2e41c91a7"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2a298db2a8ab20056120b45e86c00a0a5eb50ec4075b6142db35f593b97cb3fb"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ba55e40de38a24e2d78d34c2d36d6e864f93e0d79d0b6ce915e4335aa81d01b1"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3566a88234e8de2ccae31968127b0ecccbb4cddb629da744165db72b58d88ca4"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b90e216dc36864ae7132cb151ffe95155a37a14e0de3a8f64b49655dd959ff9c"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:69057b9fc5093ea1ab00dd24ede891f3e5e65bee040395fb1e66ee196f9c9b4a"}, + {file = "bcrypt-4.1.2-cp39-abi3-win32.whl", hash = "sha256:02d9ef8915f72dd6daaef40e0baeef8a017ce624369f09754baf32bb32dba25f"}, + {file = "bcrypt-4.1.2-cp39-abi3-win_amd64.whl", hash = "sha256:be3ab1071662f6065899fe08428e45c16aa36e28bc42921c4901a191fda6ee42"}, + {file = "bcrypt-4.1.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d75fc8cd0ba23f97bae88a6ec04e9e5351ff3c6ad06f38fe32ba50cbd0d11946"}, + {file = "bcrypt-4.1.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a97e07e83e3262599434816f631cc4c7ca2aa8e9c072c1b1a7fec2ae809a1d2d"}, + {file = "bcrypt-4.1.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e51c42750b7585cee7892c2614be0d14107fad9581d1738d954a262556dd1aab"}, + {file = "bcrypt-4.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba4e4cc26610581a6329b3937e02d319f5ad4b85b074846bf4fef8a8cf51e7bb"}, + {file = "bcrypt-4.1.2.tar.gz", hash = "sha256:33313a1200a3ae90b75587ceac502b048b840fc69e7f7a0905b5f87fac7a1258"}, +] + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -422,6 +509,137 @@ files = [ {file = "blinker-1.7.0.tar.gz", hash = "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"}, ] +[[package]] +name = "brotli" +version = "1.1.0" +description = "Python bindings for the Brotli compression library" +optional = false +python-versions = "*" +files = [ + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, + {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, + {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, + {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, + {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, + {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, + {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, + {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, + {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, + {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, +] + +[[package]] +name = "brotlicffi" +version = "1.1.0.0" +description = "Python CFFI bindings to the Brotli library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"}, + {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, +] + +[package.dependencies] +cffi = ">=1.0.0" + [[package]] name = "build" version = "1.2.1" @@ -653,6 +871,177 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] +[[package]] +name = "chroma-hnswlib" +version = "0.7.3" +description = "Chromas fork of hnswlib" +optional = false +python-versions = "*" +files = [ + {file = "chroma-hnswlib-0.7.3.tar.gz", hash = "sha256:b6137bedde49fffda6af93b0297fe00429fc61e5a072b1ed9377f909ed95a932"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59d6a7c6f863c67aeb23e79a64001d537060b6995c3eca9a06e349ff7b0998ca"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d71a3f4f232f537b6152947006bd32bc1629a8686df22fd97777b70f416c127a"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c92dc1ebe062188e53970ba13f6b07e0ae32e64c9770eb7f7ffa83f149d4210"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49da700a6656fed8753f68d44b8cc8ae46efc99fc8a22a6d970dc1697f49b403"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:108bc4c293d819b56476d8f7865803cb03afd6ca128a2a04d678fffc139af029"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:11e7ca93fb8192214ac2b9c0943641ac0daf8f9d4591bb7b73be808a83835667"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6f552e4d23edc06cdeb553cdc757d2fe190cdeb10d43093d6a3319f8d4bf1c6b"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f96f4d5699e486eb1fb95849fe35ab79ab0901265805be7e60f4eaa83ce263ec"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:368e57fe9ebae05ee5844840fa588028a023d1182b0cfdb1d13f607c9ea05756"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:b7dca27b8896b494456db0fd705b689ac6b73af78e186eb6a42fea2de4f71c6f"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:70f897dc6218afa1d99f43a9ad5eb82f392df31f57ff514ccf4eeadecd62f544"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aef10b4952708f5a1381c124a29aead0c356f8d7d6e0b520b778aaa62a356f4"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee2d8d1529fca3898d512079144ec3e28a81d9c17e15e0ea4665697a7923253"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:a4021a70e898783cd6f26e00008b494c6249a7babe8774e90ce4766dd288c8ba"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a8f61fa1d417fda848e3ba06c07671f14806a2585272b175ba47501b066fe6b1"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d7563be58bc98e8f0866907368e22ae218d6060601b79c42f59af4eccbbd2e0a"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51b8d411486ee70d7b66ec08cc8b9b6620116b650df9c19076d2d8b6ce2ae914"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d706782b628e4f43f1b8a81e9120ac486837fbd9bcb8ced70fe0d9b95c72d77"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:54f053dedc0e3ba657f05fec6e73dd541bc5db5b09aa8bc146466ffb734bdc86"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e607c5a71c610a73167a517062d302c0827ccdd6e259af6e4869a5c1306ffb5d"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2358a795870156af6761890f9eb5ca8cade57eb10c5f046fe94dae1faa04b9e"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cea425df2e6b8a5e201fff0d922a1cc1d165b3cfe762b1408075723c8892218"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:454df3dd3e97aa784fba7cf888ad191e0087eef0fd8c70daf28b753b3b591170"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:df587d15007ca701c6de0ee7d5585dd5e976b7edd2b30ac72bc376b3c3f85882"}, +] + +[package.dependencies] +numpy = "*" + +[[package]] +name = "chromadb" +version = "0.4.24" +description = "Chroma." +optional = false +python-versions = ">=3.8" +files = [ + {file = "chromadb-0.4.24-py3-none-any.whl", hash = "sha256:3a08e237a4ad28b5d176685bd22429a03717fe09d35022fb230d516108da01da"}, + {file = "chromadb-0.4.24.tar.gz", hash = "sha256:a5c80b4e4ad9b236ed2d4899a5b9e8002b489293f2881cb2cadab5b199ee1c72"}, +] + +[package.dependencies] +bcrypt = ">=4.0.1" +build = ">=1.0.3" +chroma-hnswlib = "0.7.3" +fastapi = ">=0.95.2" +grpcio = ">=1.58.0" +importlib-resources = "*" +kubernetes = ">=28.1.0" +mmh3 = ">=4.0.1" +numpy = ">=1.22.5" +onnxruntime = ">=1.14.1" +opentelemetry-api = ">=1.2.0" +opentelemetry-exporter-otlp-proto-grpc = ">=1.2.0" +opentelemetry-instrumentation-fastapi = ">=0.41b0" +opentelemetry-sdk = ">=1.2.0" +orjson = ">=3.9.12" +overrides = ">=7.3.1" +posthog = ">=2.4.0" +pulsar-client = ">=3.1.0" +pydantic = ">=1.9" +pypika = ">=0.48.9" +PyYAML = ">=6.0.0" +requests = ">=2.28" +tenacity = ">=8.2.3" +tokenizers = ">=0.13.2" +tqdm = ">=4.65.0" +typer = ">=0.9.0" +typing-extensions = ">=4.5.0" +uvicorn = {version = ">=0.18.3", extras = ["standard"]} + +[[package]] +name = "ckzg" +version = "1.0.0" +description = "Python bindings for C-KZG-4844" +optional = false +python-versions = "*" +files = [ + {file = "ckzg-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f40731759b608d74b240fe776853b7b081100d8fc06ac35e22fd0db760b7bcaa"}, + {file = "ckzg-1.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8b5d08189ffda2f869711c4149dc41012f73656bc20606f69b174d15488f6ed1"}, + {file = "ckzg-1.0.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c37af3d01a4b0c3f0a4f51cd0b85df44e30d3686f90c2a7cc84530e4e9d7a00e"}, + {file = "ckzg-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1272db9cf5cdd6f564b3de48dae4646d9e04aa10432c0f278ca7c752cf6a333c"}, + {file = "ckzg-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5a464900627b66848f4187dd415bea5edf78f3918927bd27461749e75730459"}, + {file = "ckzg-1.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d4abc0d58cb04678915ef7c4236834e58774ef692194b9bca15f837a0aaff8"}, + {file = "ckzg-1.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9205a6ea38c5e030f6f719b8f8ea6207423378e0339d45db81c946a0818d0f31"}, + {file = "ckzg-1.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9d8c45cd427f34682add5715360b358ffc2cbd9533372470eae12cbb74960042"}, + {file = "ckzg-1.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:91868e2aa17497ea864bb9408269176d961ba56d89543af292556549b18a03b7"}, + {file = "ckzg-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cffc3a23ccc967fd7993a9839aa0c133579bfcfd9f124c1ad8916a21c40ed594"}, + {file = "ckzg-1.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9936e5adf2030fc2747aaadc0cbfee6b5a06507e2b74e70998ac4e37cd7203a6"}, + {file = "ckzg-1.0.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a8d97acb5f84cf2c4db0c962ce3aefa2819b10c5b6b9dccf55e83f2a999676"}, + {file = "ckzg-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a49bd5dcf288a40df063f7ebd88476fa96a5d22dcbafc843193964993f36e26"}, + {file = "ckzg-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1495b5bb9016160a71d5f2727b935cb532d5578b7d29b280f0531b50c5ef1ee"}, + {file = "ckzg-1.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ad39d0549237d136e32263a71182833e26fab8fe8ab62db4d6161b9a7f74623e"}, + {file = "ckzg-1.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d5a838b4de4cc0b01a84531a115cf19aa508049c20256e493a2cca98cf806e3e"}, + {file = "ckzg-1.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dfadf8aab3f5a9a94796ba2b688f3679d1d681afe92dfa223da7d4f751fe487d"}, + {file = "ckzg-1.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:6aff64ce8eae856bb5684c76f8e07d4ac31ff07ad46a24bf62c9ea2104975bc9"}, + {file = "ckzg-1.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7b1eed4e35a3fb35f867770eee12018098bd261fa66b768f75b343e0198ff258"}, + {file = "ckzg-1.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3d7f609e943880303ea3f60b0426c9b53a596c74bb09ceed00c917618b519373"}, + {file = "ckzg-1.0.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8c422673236ea67608c434956181b050039b2f57b1006503eeec574b1af8467"}, + {file = "ckzg-1.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9321226e65868e66edbe18301b8f76f3298d316e6d3a1261371c7fdbc913816"}, + {file = "ckzg-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f6fd5bc8c2362483c61adbd00188f7448c968807f00ee067666355c63cf45e0"}, + {file = "ckzg-1.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be79e3c4a735f5bf4c71cc07a89500448555f2d4f4f765da5867194c7e46ec5c"}, + {file = "ckzg-1.0.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2896c108425b64f6b741cc389beee2b8467a41f8d4f901f4a4ecc037311dc681"}, + {file = "ckzg-1.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd3f0db4cf514054c386d1a38f9a144725b5109379dd9d2c1b4b0736119f848e"}, + {file = "ckzg-1.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:7a864097cb88be5b7aeff6103bf03d7dfb1c6dda6c8ef82378838ce32e158a15"}, + {file = "ckzg-1.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0404db8ded404b36617d60d678d5671652798952571ae4993d4d379ef6563f4f"}, + {file = "ckzg-1.0.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3aee88b228a9ca81d677d57d8d3f6ee483165d8b3955ea408bda674d0f9b4ee5"}, + {file = "ckzg-1.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef6b4d15188803602afc56e113fc588617219a6316789766fc95e0fa010a93ab"}, + {file = "ckzg-1.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ae6d24e83af8c097b62fdc2183378b9f2d8253fa14ccfc07d075a579f98d876"}, + {file = "ckzg-1.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8facda4eafc451bb5f6019a2b779f1b6da7f91322aef0eab1f1d9f542220de1c"}, + {file = "ckzg-1.0.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4f552fa3b654bc376fcb73e975d521eacff324dba111fa2f0c80c84ad586a0b1"}, + {file = "ckzg-1.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:851b7eaca0034b51b6867623b0fae2260466126d8fc669646890464812afd932"}, + {file = "ckzg-1.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:df63d78d9a3d1ffcf32ccb262512c780de42798543affc1209f6fd0cddac49b4"}, + {file = "ckzg-1.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3aefd29f6d339358904ed88e5a642e5bf338fd85151a982a040d4352ae95e53f"}, + {file = "ckzg-1.0.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f2bbbcd24f5ac7f29a0f3f3f51d8934764f5d579e63601a415ace4dad0c2785"}, + {file = "ckzg-1.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ed54765a3067f20786a0c6ee24a8440cfedfe39c5865744c99f605e6ec4249"}, + {file = "ckzg-1.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5101500009a8851843b5aab44bc320b281cfe46ffbbab35f29fa763dc2ac4a2"}, + {file = "ckzg-1.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a35e0f027749a131a5086dcb3f094ec424280cdf7708c24e0c45421a0e9bebf"}, + {file = "ckzg-1.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:71860eda6019cc57b197037427ad4078466de232a768fa7c77c7094585689a8d"}, + {file = "ckzg-1.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87729a2e861093d9ee4667dcf047a0073644da7f9de5b9c269821e3c9c3f7164"}, + {file = "ckzg-1.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1d1bd47cfa82f92f14ec77fffee6480b03144f414861fc6664190e89d3aa542d"}, + {file = "ckzg-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4644e6e0d66d4a36dc37c2ef64807d1db39bf76b10a933b2f7fbb0b4ee9d991"}, + {file = "ckzg-1.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:96d88c6ea2fd49ecfa16767d05a2d056f1bd1a42b0cf10ab99fb4f88fefab5d7"}, + {file = "ckzg-1.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c921b9172aa155ede173abe9d3495c04a55b1afde317339443451e889b531891"}, + {file = "ckzg-1.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a09cce801a20929d49337bd0f1df6d079d5a2ebaa58f58ab8649c706485c759"}, + {file = "ckzg-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a02d21ceda0c3bec82342f050de5b22eb4a928be00913fa8992ab0f717095f8"}, + {file = "ckzg-1.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bf751e989a428be569e27010c98192451af4c729d5c27a6e0132647fe93b6e84"}, + {file = "ckzg-1.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37192e9fcbced22e64cd00785ea082bd22254ce7d9cfdfd5364683bea8e1d043"}, + {file = "ckzg-1.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:54808ba5b3692ff31713de6d57c30c21060f11916d2e233f5554fcc85790fcda"}, + {file = "ckzg-1.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:d3b343a4a26d5994bdb39216f5b03bf2345bb6e37ae90fcf7181df37c244217a"}, + {file = "ckzg-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:481dfd101acc8a473146b35e61c11cee2ef41210b77775f306c4f1f7f8bdbf28"}, + {file = "ckzg-1.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bd392f3ae05a851f9aa1fc114b565cb7e6744cec39790af56af2adf9dd400f3d"}, + {file = "ckzg-1.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2ca50b9d0e947d3b5530dacf25cc00391d041e861751c4872eba4a4567a2efe"}, + {file = "ckzg-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91dafec4f72e30176fb9861d0e2ed46cd506f6837ed70066f2136378f5cd84df"}, + {file = "ckzg-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c72b07d5cac293d7e49a5510d56163f18cdbf9c7a6c6446422964d5667097c2"}, + {file = "ckzg-1.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:67144d1b545cdd6cb5af38ed2c03b234a24f72b6021ea095b70f0cfe11181bd6"}, + {file = "ckzg-1.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43935d730a9ee13ca264455356bdd01055c55c241508f5682d67265379b29dcf"}, + {file = "ckzg-1.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5911419a785c732f0f5edcda89ecc489e7880191b8c0147f629025cb910f913"}, + {file = "ckzg-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:8a00c295c5657162c24b162ca9a030fbfbc6930e0782378ce3e3d64b14cf470e"}, + {file = "ckzg-1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8d272107d63500ba9c62adef39f01835390ee467c2583fd96c78f05773d87b0d"}, + {file = "ckzg-1.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:52bfcad99cc0f5611c3a7e452de4d7fa66ce020327c1c1de425b84b20794687b"}, + {file = "ckzg-1.0.0-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ae70915d41702d33775d9b81c106b2bff5aa7981f82b06e0c5892daa921ff55"}, + {file = "ckzg-1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5deaae9151215d1fad3934fa423a87ee752345f665448a30f58bf5c3177c4623"}, + {file = "ckzg-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f7e8861174fe26e6bb0f13655aa1f07fd7c3300852748b0f6e47b998153b56b"}, + {file = "ckzg-1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dc6c211e16ef7750b2579346eaa05e4f1e7f1726effa55c2cb42354603800b01"}, + {file = "ckzg-1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d392ef8281f306a0377f4e5fe816e03e4dce2754a4b2ab209b16d9628b7a0bac"}, + {file = "ckzg-1.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52cbe279f5d3ec9dd7745de8e796383ba201302606edaa9838b5dd5a34218241"}, + {file = "ckzg-1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a5d3367cee7ebb48131acc78ca3fb0565e3af3fd8fa8eb4ca25bb88577692c4"}, + {file = "ckzg-1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55e8c6d8df9dc1bdd3862114e239c292f9bdd92d67055ca4e0e7503826e6524f"}, + {file = "ckzg-1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b040396df453b51cd5f1461bec9b942173b95ca181c7f65caa10c0204cb6144a"}, + {file = "ckzg-1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7951c53321136aabdab64dc389c92ffeda5859d59304b97092e893a6b09e9722"}, + {file = "ckzg-1.0.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:56256067d31eb6eed1a42c9f3038936aeb7decee322aa13a3224b51cfa3e8026"}, + {file = "ckzg-1.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c166f254ce3434dd0d56ef64788fc9637d60721f4e7e126b15a847abb9a44962"}, + {file = "ckzg-1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab02c7ad64fb8616a430b05ad2f8fa4f3fc0a22e3dd4ea7a5d5fa4362534bb21"}, + {file = "ckzg-1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63bb5e6bc4822c732270c70ef12522b0215775ff61cae04fb54983973aef32e3"}, + {file = "ckzg-1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:409f1f18dbc92df5ddbf1ff0d154dc2280a495ec929a4fa27abc69eeacf31ff0"}, + {file = "ckzg-1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2eceae0ef7189d47bd89fd9efd9d8f54c5b06bc92c435ec00c62815363cd9d79"}, + {file = "ckzg-1.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e189c00a0030d1a593b020264d7f9b30fa0b980d108923f353c565c206a99147"}, + {file = "ckzg-1.0.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36735543ce3aec4730e7128690265ef90781d28e9b56c039c72b6b2ce9b06839"}, + {file = "ckzg-1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fef5f276e24f4bdd19e28ddcc5212e9b6c8514d3c7426bd443c9221f348c176f"}, + {file = "ckzg-1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d02164a0d84e55965c14132f6d43cc367be3d12eb318f79ba2f262dac47665c2"}, + {file = "ckzg-1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:88fafab3493a12d5212374889783352bb4b59dddc9e61c86d063358eff6da7bb"}, +] + [[package]] name = "cleo" version = "2.1.0" @@ -710,6 +1099,34 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "coloredlogs" +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.*" +files = [ + {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, + {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, +] + +[package.dependencies] +humanfriendly = ">=9.1" + +[package.extras] +cron = ["capturer (>=2.4)"] + +[[package]] +name = "contextlib2" +version = "21.6.0" +description = "Backports and enhancements for the contextlib module" +optional = false +python-versions = ">=3.6" +files = [ + {file = "contextlib2-21.6.0-py2.py3-none-any.whl", hash = "sha256:3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f"}, + {file = "contextlib2-21.6.0.tar.gz", hash = "sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869"}, +] + [[package]] name = "crashtest" version = "0.4.1" @@ -723,17 +1140,18 @@ files = [ [[package]] name = "crewai" -version = "0.22.2" +version = "0.22.5" description = "Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks." optional = false python-versions = ">=3.10,<=3.13" files = [ - {file = "crewai-0.22.2-py3-none-any.whl", hash = "sha256:ce1e902403a728d57797eda51a8ba7520f9ad00e3c3c6ed4f61d981ad3edb846"}, - {file = "crewai-0.22.2.tar.gz", hash = "sha256:9d5c6e34879ef01fa54ef2a8f33999d464360d605aec4b623bf229040c598131"}, + {file = "crewai-0.22.5-py3-none-any.whl", hash = "sha256:9f254d8b2ebd7fae9a43d0ebab116a3f536c6620ca3bc955cb796fc8bb9beb7d"}, + {file = "crewai-0.22.5.tar.gz", hash = "sha256:03c76a04f46a432a1c3d9e5e0c8e039f983b25019194b0ab2ec594762ac380cf"}, ] [package.dependencies] click = ">=8.1.7,<9.0.0" +crewai-tools = {version = ">=0.0.15,<0.0.16", optional = true, markers = "extra == \"tools\""} instructor = ">=0.5.2,<0.6.0" langchain = ">=0.1.10,<0.2.0" langchain-openai = ">=0.0.5,<0.0.6" @@ -742,11 +1160,37 @@ opentelemetry-api = ">=1.22.0,<2.0.0" opentelemetry-exporter-otlp-proto-http = ">=1.22.0,<2.0.0" opentelemetry-sdk = ">=1.22.0,<2.0.0" pydantic = ">=2.4.2,<3.0.0" +python-dotenv = "1.0.0" regex = ">=2023.12.25,<2024.0.0" [package.extras] tools = ["crewai-tools (>=0.0.15,<0.0.16)"] +[[package]] +name = "crewai-tools" +version = "0.0.15" +description = "Set of tools for the crewAI framework" +optional = false +python-versions = ">=3.10,<=3.13" +files = [ + {file = "crewai_tools-0.0.15-py3-none-any.whl", hash = "sha256:555e5576b97e2bec381dc0280ef30c10eaa655ce4c0c5f586c0703d7f8212066"}, + {file = "crewai_tools-0.0.15.tar.gz", hash = "sha256:011441285a38348b28d92df06a85752e13f2c405d5707eb9e871981e9fc6cb35"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.12.3,<5.0.0" +chromadb = ">=0.4.22,<0.5.0" +embedchain = {version = ">=0.1.85,<0.2.0", extras = ["github", "youtube"]} +lancedb = ">=0.5.4,<0.6.0" +langchain = ">=0.1.4,<0.2.0" +openai = ">=1.12.0,<2.0.0" +pydantic = ">=2.6.1,<3.0.0" +pyright = ">=1.1.350,<2.0.0" +pytest = ">=8.0.0,<9.0.0" +pytube = ">=15.0.0,<16.0.0" +requests = ">=2.31.0,<3.0.0" +selenium = ">=4.18.1,<5.0.0" + [[package]] name = "cron-validator" version = "1.0.8" @@ -975,6 +1419,17 @@ files = [ marshmallow = ">=3.18.0,<4.0.0" typing-inspect = ">=0.4.0,<1" +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + [[package]] name = "deprecated" version = "1.2.14" @@ -1189,6 +1644,69 @@ https = ["urllib3 (>=1.24.1)"] paramiko = ["paramiko"] pgp = ["gpg"] +[[package]] +name = "embedchain" +version = "0.1.99" +description = "Simplest open source retrieval (RAG) framework" +optional = false +python-versions = "<=3.13,>=3.9" +files = [ + {file = "embedchain-0.1.99-py3-none-any.whl", hash = "sha256:1614f580005d7edecd5fa1651013df0dc7f0aabc2ac7b61cefb041f4e92a8769"}, + {file = "embedchain-0.1.99.tar.gz", hash = "sha256:df4b7c59c1bc6b36fae9de04736ca90609e86d8fdea55771dbc052709a7680a3"}, +] + +[package.dependencies] +alembic = ">=1.13.1,<2.0.0" +beautifulsoup4 = ">=4.12.2,<5.0.0" +chromadb = ">=0.4.17,<0.5.0" +gitpython = {version = ">=3.1.38,<4.0.0", optional = true, markers = "extra == \"github\""} +google-cloud-aiplatform = ">=1.26.1,<2.0.0" +gptcache = ">=0.1.43,<0.2.0" +langchain = ">=0.1.4,<0.2.0" +langchain-openai = ">=0.0.5,<0.0.6" +openai = ">=1.1.1" +posthog = ">=3.0.2,<4.0.0" +PyGithub = {version = ">=1.59.1,<2.0.0", optional = true, markers = "extra == \"github\""} +pypdf = ">=3.11.0,<4.0.0" +pysbd = ">=0.3.4,<0.4.0" +python-dotenv = ">=1.0.0,<2.0.0" +rich = ">=13.7.0,<14.0.0" +schema = ">=0.7.5,<0.8.0" +sqlalchemy = ">=2.0.27,<3.0.0" +tiktoken = ">=0.5.2,<0.6.0" +youtube-transcript-api = {version = ">=0.6.1,<0.7.0", optional = true, markers = "extra == \"dataloaders\" or extra == \"youtube\""} +yt_dlp = {version = ">=2023.11.14,<2024.0.0", optional = true, markers = "extra == \"youtube\""} + +[package.extras] +aws-bedrock = ["boto3 (>=1.34.20,<2.0.0)"] +cohere = ["cohere (>=4.27,<5.0)"] +dataloaders = ["docx2txt (>=0.8,<0.9)", "duckduckgo-search (>=3.8.5,<4.0.0)", "pytube (>=15.0.0,<16.0.0)", "sentence-transformers (>=2.2.2,<3.0.0)", "unstructured[all-docs,local-inference] (>=0.10.18,<0.11.0)", "youtube-transcript-api (>=0.6.1,<0.7.0)"] +discord = ["discord (>=2.3.2,<3.0.0)"] +dropbox = ["dropbox (>=11.36.2,<12.0.0)"] +elasticsearch = ["elasticsearch (>=8.9.0,<9.0.0)"] +github = ["PyGithub (>=1.59.1,<2.0.0)", "gitpython (>=3.1.38,<4.0.0)"] +gmail = ["google-api-core (>=2.15.0,<3.0.0)", "google-api-python-client (>=2.111.0,<3.0.0)", "google-auth (>=2.25.2,<3.0.0)", "google-auth-httplib2 (>=0.2.0,<0.3.0)", "google-auth-oauthlib (>=1.2.0,<2.0.0)", "requests (>=2.31.0,<3.0.0)"] +google = ["google-generativeai (>=0.3.0,<0.4.0)"] +googledrive = ["google-api-python-client (>=2.111.0,<3.0.0)", "google-auth-httplib2 (>=0.2.0,<0.3.0)", "google-auth-oauthlib (>=1.2.0,<2.0.0)"] +huggingface-hub = ["huggingface_hub (>=0.17.3,<0.18.0)"] +llama2 = ["replicate (>=0.15.4,<0.16.0)"] +milvus = ["pymilvus (==2.3.1)"] +mistralai = ["langchain-mistralai (>=0.0.3,<0.0.4)"] +modal = ["modal (>=0.56.4329,<0.57.0)"] +mysql = ["mysql-connector-python (>=8.1.0,<9.0.0)"] +opensearch = ["opensearch-py (==2.3.1)"] +opensource = ["gpt4all (==2.0.2)", "sentence-transformers (>=2.2.2,<3.0.0)", "torch (==2.0.0)"] +poe = ["fastapi-poe (==0.0.16)"] +postgres = ["psycopg (>=3.1.12,<4.0.0)", "psycopg-binary (>=3.1.12,<4.0.0)", "psycopg-pool (>=3.1.8,<4.0.0)"] +qdrant = ["qdrant-client (>=1.6.3,<2.0.0)"] +rss-feed = ["feedparser (>=6.0.10,<7.0.0)", "listparser (>=0.19,<0.20)", "newspaper3k (>=0.2.8,<0.3.0)"] +slack = ["flask (>=2.3.3,<3.0.0)", "slack-sdk (==3.21.3)"] +together = ["together (>=0.2.8,<0.3.0)"] +vertexai = ["langchain-google-vertexai (>=0.0.5,<0.0.6)"] +weaviate = ["weaviate-client (>=3.24.1,<4.0.0)"] +whatsapp = ["flask (>=2.3.3,<3.0.0)", "twilio (>=8.5.0,<9.0.0)"] +youtube = ["youtube-transcript-api (>=0.6.1,<0.7.0)", "yt_dlp (>=2023.11.14,<2024.0.0)"] + [[package]] name = "eth-abi" version = "5.1.0" @@ -1213,23 +1731,25 @@ tools = ["hypothesis (>=4.18.2,<5.0.0)"] [[package]] name = "eth-account" -version = "0.11.0" +version = "0.11.1" description = "eth-account: Sign Ethereum transactions and messages with local private keys" optional = false -python-versions = ">=3.8, <4" +python-versions = "<4,>=3.8" files = [ - {file = "eth-account-0.11.0.tar.gz", hash = "sha256:2ffc7a0c7538053a06a7d11495c16c7ad9897dd42be0f64ca7551e9f6e0738c3"}, - {file = "eth_account-0.11.0-py3-none-any.whl", hash = "sha256:76dd261ea096ee09e51455b0a4c99f22185516fdc062f63df0817c28f605e430"}, + {file = "eth-account-0.11.1.tar.gz", hash = "sha256:df28f49c6c98fa8b513d7bbf4eae07cc1ff7e379474a957369febfde60e9f520"}, + {file = "eth_account-0.11.1-py3-none-any.whl", hash = "sha256:f832fa1d814e8f2a43d257a5f7b0149f35a9bd8e2d1ab894760a17dedc654777"}, ] [package.dependencies] bitarray = ">=2.4.0" +ckzg = ">=0.4.3" eth-abi = ">=4.0.0-b.2" eth-keyfile = ">=0.6.0" eth-keys = ">=0.4.0" eth-rlp = ">=0.3.0" eth-utils = ">=2.0.0" hexbytes = ">=0.1.0,<0.4.0" +pydantic = ">=2.4.0" rlp = ">=1.0.0" [package.extras] @@ -1374,6 +1894,25 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "fastapi" +version = "0.110.1" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.110.1-py3-none-any.whl", hash = "sha256:5df913203c482f820d31f48e635e022f8cbfe7350e4830ef05a3163925b1addc"}, + {file = "fastapi-0.110.1.tar.gz", hash = "sha256:6feac43ec359dfe4f45b2c18ec8c94edb8dc2dfc461d417d9e626590c071baad"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.37.2,<0.38.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + [[package]] name = "fastjsonschema" version = "2.19.1" @@ -1463,6 +2002,17 @@ Werkzeug = ">=3.0.0" async = ["asgiref (>=3.2)"] dotenv = ["python-dotenv"] +[[package]] +name = "flatbuffers" +version = "24.3.25" +description = "The FlatBuffers serialization format for Python" +optional = false +python-versions = "*" +files = [ + {file = "flatbuffers-24.3.25-py2.py3-none-any.whl", hash = "sha256:8dbdec58f935f3765e4f7f3cf635ac3a77f83568138d6a2311f524ec96364812"}, + {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"}, +] + [[package]] name = "frozenlist" version = "1.4.1" @@ -1682,6 +2232,98 @@ pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0.dev0)"] +[[package]] +name = "google-cloud-aiplatform" +version = "1.46.0" +description = "Vertex AI API client library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "google-cloud-aiplatform-1.46.0.tar.gz", hash = "sha256:9eeefcd34dbad2a1ade830d025154189d257e8dcfea45771dcac6e34a2783782"}, + {file = "google_cloud_aiplatform-1.46.0-py2.py3-none-any.whl", hash = "sha256:a30a64f8bcefa0646340cf57abca192bb9ca9c456a47b842651a9564bba0534a"}, +] + +[package.dependencies] +docstring-parser = "<1" +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.8.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0dev" +google-cloud-bigquery = ">=1.15.0,<3.20.0 || >3.20.0,<4.0.0dev" +google-cloud-resource-manager = ">=1.3.3,<3.0.0dev" +google-cloud-storage = ">=1.32.0,<3.0.0dev" +packaging = ">=14.3" +proto-plus = ">=1.22.0,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +pydantic = "<3" +shapely = "<3.0.0dev" + +[package.extras] +autologging = ["mlflow (>=1.27.0,<=2.1.1)"] +cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] +datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)"] +endpoint = ["requests (>=2.28.1)"] +full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<2.15.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"] +lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"] +metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"] +pipelines = ["pyyaml (==5.3.1)"] +prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<0.103.1)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"] +preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)"] +private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"] +ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)"] +ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "ray[train] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "scikit-learn", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] +tensorboard = ["tensorflow (>=2.3.0,<2.15.0)"] +testing = ["bigframes", "cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (==2.13.0)", "tensorflow (>=2.3.0,<2.15.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost", "xgboost-ray"] +vizier = ["google-vizier (>=0.1.6)"] +xai = ["tensorflow (>=2.3.0,<3.0.0dev)"] + +[[package]] +name = "google-cloud-bigquery" +version = "3.20.1" +description = "Google BigQuery API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-bigquery-3.20.1.tar.gz", hash = "sha256:318aa3abab5f1900ee24f63ba8bd02b9cdafaa942d738b4dc14a4ef2cc2d925f"}, + {file = "google_cloud_bigquery-3.20.1-py2.py3-none-any.whl", hash = "sha256:d3e62fe61138c658b8853c402e2d8fb9346c84e602e21e3a26584be10fc5b0a4"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0dev" +google-cloud-core = ">=1.6.0,<3.0.0dev" +google-resumable-media = ">=0.6.0,<3.0dev" +packaging = ">=20.0.0" +python-dateutil = ">=2.7.2,<3.0dev" +requests = ">=2.21.0,<3.0.0dev" + +[package.extras] +all = ["Shapely (>=1.8.4,<3.0.0dev)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] +bigquery-v2 = ["proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)"] +bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"] +geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"] +ipython = ["ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)"] +ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"] +opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"] +pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] +tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] + +[[package]] +name = "google-cloud-core" +version = "2.4.1" +description = "Google Cloud API client core library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, + {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, +] + +[package.dependencies] +google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0dev" +google-auth = ">=1.25.0,<3.0dev" + +[package.extras] +grpc = ["grpcio (>=1.38.0,<2.0dev)", "grpcio-status (>=1.38.0,<2.0.dev0)"] + [[package]] name = "google-cloud-functions" version = "1.16.3" @@ -1736,6 +2378,126 @@ grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" proto-plus = ">=1.22.3,<2.0.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +[[package]] +name = "google-cloud-storage" +version = "2.16.0" +description = "Google Cloud Storage API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-storage-2.16.0.tar.gz", hash = "sha256:dda485fa503710a828d01246bd16ce9db0823dc51bbca742ce96a6817d58669f"}, + {file = "google_cloud_storage-2.16.0-py2.py3-none-any.whl", hash = "sha256:91a06b96fb79cf9cdfb4e759f178ce11ea885c79938f89590344d079305f5852"}, +] + +[package.dependencies] +google-api-core = ">=2.15.0,<3.0.0dev" +google-auth = ">=2.26.1,<3.0dev" +google-cloud-core = ">=2.3.0,<3.0dev" +google-crc32c = ">=1.0,<2.0dev" +google-resumable-media = ">=2.6.0" +requests = ">=2.18.0,<3.0.0dev" + +[package.extras] +protobuf = ["protobuf (<5.0.0dev)"] + +[[package]] +name = "google-crc32c" +version = "1.5.0" +description = "A python wrapper of the C library 'Google CRC32C'" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-crc32c-1.5.0.tar.gz", hash = "sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win32.whl", hash = "sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win32.whl", hash = "sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win32.whl", hash = "sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win32.whl", hash = "sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93"}, +] + +[package.extras] +testing = ["pytest"] + +[[package]] +name = "google-resumable-media" +version = "2.7.0" +description = "Utilities for Google Media Downloads and Resumable Uploads" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "google-resumable-media-2.7.0.tar.gz", hash = "sha256:5f18f5fa9836f4b083162064a1c2c98c17239bfda9ca50ad970ccf905f3e625b"}, + {file = "google_resumable_media-2.7.0-py2.py3-none-any.whl", hash = "sha256:79543cfe433b63fd81c0844b7803aba1bb8950b47bedf7d980c38fa123937e08"}, +] + +[package.dependencies] +google-crc32c = ">=1.0,<2.0dev" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"] +requests = ["requests (>=2.18.0,<3.0.0dev)"] + [[package]] name = "google-search-results" version = "2.4.2" @@ -1767,6 +2529,22 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4 [package.extras] grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] +[[package]] +name = "gptcache" +version = "0.1.43" +description = "GPTCache, a powerful caching library that can be used to speed up and lower the cost of chat applications that rely on the LLM service. GPTCache works as a memcache for AIGC applications, similar to how Redis works for traditional applications." +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "gptcache-0.1.43-py3-none-any.whl", hash = "sha256:9c557ec9cc14428942a0ebf1c838520dc6d2be801d67bb6964807043fc2feaf5"}, + {file = "gptcache-0.1.43.tar.gz", hash = "sha256:cebe7ec5e32a3347bf839e933a34e67c7fcae620deaa7cb8c6d7d276c8686f1a"}, +] + +[package.dependencies] +cachetools = "*" +numpy = "*" +requests = "*" + [[package]] name = "greenlet" version = "3.0.3" @@ -2031,6 +2809,54 @@ sniffio = "==1.*" http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +[[package]] +name = "httptools" +version = "0.6.1" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, + {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, + {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, + {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, + {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, + {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, + {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, +] + +[package.extras] +test = ["Cython (>=0.29.24,<0.30.0)"] + [[package]] name = "httpx" version = "0.24.1" @@ -2055,6 +2881,54 @@ cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +[[package]] +name = "huggingface-hub" +version = "0.22.2" +description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "huggingface_hub-0.22.2-py3-none-any.whl", hash = "sha256:3429e25f38ccb834d310804a3b711e7e4953db5a9e420cc147a5e194ca90fd17"}, + {file = "huggingface_hub-0.22.2.tar.gz", hash = "sha256:32e9a9a6843c92f253ff9ca16b9985def4d80a93fb357af5353f770ef74a81be"}, +] + +[package.dependencies] +filelock = "*" +fsspec = ">=2023.5.0" +packaging = ">=20.9" +pyyaml = ">=5.1" +requests = "*" +tqdm = ">=4.42.1" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +cli = ["InquirerPy (==0.3.4)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] +hf-transfer = ["hf-transfer (>=0.1.4)"] +inference = ["aiohttp", "minijinja (>=1.0)"] +quality = ["mypy (==1.5.1)", "ruff (>=0.3.0)"] +tensorflow = ["graphviz", "pydot", "tensorflow"] +tensorflow-testing = ["keras (<3.0)", "tensorflow"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["safetensors", "torch"] +typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] + +[[package]] +name = "humanfriendly" +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.*" +files = [ + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, +] + +[package.dependencies] +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} + [[package]] name = "hyperframe" version = "6.0.1" @@ -2096,6 +2970,21 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +[[package]] +name = "importlib-resources" +version = "6.4.0" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, + {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -2308,28 +3197,87 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [[package]] -name = "langchain" -version = "0.1.14" -description = "Building applications with LLMs through composability" +name = "kubernetes" +version = "29.0.0" +description = "Kubernetes python client" optional = false -python-versions = "<4.0,>=3.8.1" +python-versions = ">=3.6" files = [ - {file = "langchain-0.1.14-py3-none-any.whl", hash = "sha256:94f9b5df2421faaf762d4f43b9d65c270c2f701934580d281e4c6226deef7234"}, - {file = "langchain-0.1.14.tar.gz", hash = "sha256:124c6244cf3957616b98f2df07dc2992fc40dff6ed1a62d8ee8a40f1e0260a40"}, + {file = "kubernetes-29.0.0-py2.py3-none-any.whl", hash = "sha256:ab8cb0e0576ccdfb71886366efb102c6a20f268d817be065ce7f9909c631e43e"}, + {file = "kubernetes-29.0.0.tar.gz", hash = "sha256:c4812e227ae74d07d53c88293e564e54b850452715a59a927e7e1bc6b9a60459"}, ] [package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -dataclasses-json = ">=0.5.7,<0.7" -jsonpatch = ">=1.33,<2.0" -langchain-community = ">=0.0.30,<0.1" -langchain-core = ">=0.1.37,<0.2.0" -langchain-text-splitters = ">=0.0.1,<0.1" -langsmith = ">=0.1.17,<0.2.0" -numpy = ">=1,<2" -pydantic = ">=1,<3" -PyYAML = ">=5.3" +certifi = ">=14.05.14" +google-auth = ">=1.0.1" +oauthlib = ">=3.2.2" +python-dateutil = ">=2.5.3" +pyyaml = ">=5.4.1" +requests = "*" +requests-oauthlib = "*" +six = ">=1.9.0" +urllib3 = ">=1.24.2" +websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" + +[package.extras] +adal = ["adal (>=1.0.2)"] + +[[package]] +name = "lancedb" +version = "0.5.7" +description = "lancedb" +optional = false +python-versions = ">=3.8" +files = [ + {file = "lancedb-0.5.7-py3-none-any.whl", hash = "sha256:6169966f715ef530be545950e1aaf9f3f160967e4ba7456cd67c9f30f678095d"}, + {file = "lancedb-0.5.7.tar.gz", hash = "sha256:878914b493f91d09a77b14f1528104741f273234cbdd6671be705f447701fd51"}, +] + +[package.dependencies] +attrs = ">=21.3.0" +cachetools = "*" +click = ">=8.1.7" +deprecation = "*" +overrides = ">=0.7" +pydantic = ">=1.10" +pylance = "0.9.18" +pyyaml = ">=6.0" +ratelimiter = ">=1.0,<2.0" +requests = ">=2.31.0" +retry = ">=0.9.2" +semver = ">=3.0" +tqdm = ">=4.27.0" + +[package.extras] +clip = ["open-clip", "pillow", "torch"] +dev = ["pre-commit", "ruff"] +docs = ["mkdocs", "mkdocs-jupyter", "mkdocs-material", "mkdocs-ultralytics-plugin (==0.0.44)", "mkdocstrings[python]"] +embeddings = ["InstructorEmbedding", "awscli (>=1.29.57)", "boto3 (>=1.28.57)", "botocore (>=1.31.57)", "cohere", "google.generativeai", "huggingface-hub", "open-clip-torch", "openai (>=1.6.1)", "pillow", "sentence-transformers", "torch"] +tests = ["aiohttp", "duckdb", "pandas (>=1.4)", "polars (>=0.19)", "pytest", "pytest-asyncio", "pytest-mock", "pytz"] + +[[package]] +name = "langchain" +version = "0.1.14" +description = "Building applications with LLMs through composability" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain-0.1.14-py3-none-any.whl", hash = "sha256:94f9b5df2421faaf762d4f43b9d65c270c2f701934580d281e4c6226deef7234"}, + {file = "langchain-0.1.14.tar.gz", hash = "sha256:124c6244cf3957616b98f2df07dc2992fc40dff6ed1a62d8ee8a40f1e0260a40"}, +] + +[package.dependencies] +aiohttp = ">=3.8.3,<4.0.0" +async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} +dataclasses-json = ">=0.5.7,<0.7" +jsonpatch = ">=1.33,<2.0" +langchain-community = ">=0.0.30,<0.1" +langchain-core = ">=0.1.37,<0.2.0" +langchain-text-splitters = ">=0.0.1,<0.1" +langsmith = ">=0.1.17,<0.2.0" +numpy = ">=1,<2" +pydantic = ">=1,<3" +PyYAML = ">=5.3" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" tenacity = ">=8.1.0,<9.0.0" @@ -2376,13 +3324,13 @@ extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15. [[package]] name = "langchain-core" -version = "0.1.38" +version = "0.1.40" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_core-0.1.38-py3-none-any.whl", hash = "sha256:d881b2754254cb4bdb0d5bb56e5c138d032b6e75e5cb21f151b01224b322e02b"}, - {file = "langchain_core-0.1.38.tar.gz", hash = "sha256:ee8da6d061c06cce7dc22fec224b6ecbc3a8de106d6dd9f409c7fe448ea41861"}, + {file = "langchain_core-0.1.40-py3-none-any.whl", hash = "sha256:618dbb7ab44d8b263b91e384db1ff07d0db256ae5bdafa0123a115b6a75a13f1"}, + {file = "langchain_core-0.1.40.tar.gz", hash = "sha256:34c06fc0e6d3534b738c63f85403446b4be71161665b7e091f9bb19c914ec100"}, ] [package.dependencies] @@ -2391,7 +3339,6 @@ langsmith = ">=0.1.0,<0.2.0" packaging = ">=23.2,<24.0" pydantic = ">=1,<3" PyYAML = ">=5.3" -requests = ">=2,<3" tenacity = ">=8.1.0,<9.0.0" [package.extras] @@ -2451,13 +3398,13 @@ extended-testing = ["lxml (>=5.1.0,<6.0.0)"] [[package]] name = "langsmith" -version = "0.1.38" +version = "0.1.40" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.38-py3-none-any.whl", hash = "sha256:f36479f82cf537cf40d129ac2e485e72a3981360c7b6cf2549dad77d98eafd8f"}, - {file = "langsmith-0.1.38.tar.gz", hash = "sha256:2c1f98ac0a8c02e43b625650a6e13c65b09523551bfc21a59d20963f46f7d265"}, + {file = "langsmith-0.1.40-py3-none-any.whl", hash = "sha256:aa47d0f5a1eabd5c05ac6ce2cd3e28ccfc554d366e856a27b7c3c17c443881cb"}, + {file = "langsmith-0.1.40.tar.gz", hash = "sha256:50fdf313741cf94e978de06025fd180b56acf1d1a4549b0fd5453ef23d5461ef"}, ] [package.dependencies] @@ -2616,6 +3563,25 @@ files = [ [package.extras] test = ["pytest"] +[[package]] +name = "mako" +version = "1.3.2" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Mako-1.3.2-py3-none-any.whl", hash = "sha256:32a99d70754dfce237019d17ffe4a282d2d3351b9c476e90d8a60e63f133b80c"}, + {file = "Mako-1.3.2.tar.gz", hash = "sha256:2a0c8ad7f6274271b3bb7467dd37cf9cc6dab4bc19cb69a4ef10669402de698e"}, +] + +[package.dependencies] +MarkupSafe = ">=0.9.2" + +[package.extras] +babel = ["Babel"] +lingua = ["lingua"] +testing = ["pytest"] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -2754,6 +3720,109 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mmh3" +version = "4.1.0" +description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." +optional = false +python-versions = "*" +files = [ + {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be5ac76a8b0cd8095784e51e4c1c9c318c19edcd1709a06eb14979c8d850c31a"}, + {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98a49121afdfab67cd80e912b36404139d7deceb6773a83620137aaa0da5714c"}, + {file = "mmh3-4.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5259ac0535874366e7d1a5423ef746e0d36a9e3c14509ce6511614bdc5a7ef5b"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5950827ca0453a2be357696da509ab39646044e3fa15cad364eb65d78797437"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1dd0f652ae99585b9dd26de458e5f08571522f0402155809fd1dc8852a613a39"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99d25548070942fab1e4a6f04d1626d67e66d0b81ed6571ecfca511f3edf07e6"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53db8d9bad3cb66c8f35cbc894f336273f63489ce4ac416634932e3cbe79eb5b"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75da0f615eb55295a437264cc0b736753f830b09d102aa4c2a7d719bc445ec05"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b926b07fd678ea84b3a2afc1fa22ce50aeb627839c44382f3d0291e945621e1a"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c5b053334f9b0af8559d6da9dc72cef0a65b325ebb3e630c680012323c950bb6"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bf33dc43cd6de2cb86e0aa73a1cc6530f557854bbbe5d59f41ef6de2e353d7b"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fa7eacd2b830727ba3dd65a365bed8a5c992ecd0c8348cf39a05cc77d22f4970"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42dfd6742b9e3eec599f85270617debfa0bbb913c545bb980c8a4fa7b2d047da"}, + {file = "mmh3-4.1.0-cp310-cp310-win32.whl", hash = "sha256:2974ad343f0d39dcc88e93ee6afa96cedc35a9883bc067febd7ff736e207fa47"}, + {file = "mmh3-4.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:74699a8984ded645c1a24d6078351a056f5a5f1fe5838870412a68ac5e28d865"}, + {file = "mmh3-4.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:f0dc874cedc23d46fc488a987faa6ad08ffa79e44fb08e3cd4d4cf2877c00a00"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3280a463855b0eae64b681cd5b9ddd9464b73f81151e87bb7c91a811d25619e6"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:97ac57c6c3301769e757d444fa7c973ceb002cb66534b39cbab5e38de61cd896"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7b6502cdb4dbd880244818ab363c8770a48cdccecf6d729ade0241b736b5ec0"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52ba2da04671a9621580ddabf72f06f0e72c1c9c3b7b608849b58b11080d8f14"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a5fef4c4ecc782e6e43fbeab09cff1bac82c998a1773d3a5ee6a3605cde343e"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5135358a7e00991f73b88cdc8eda5203bf9de22120d10a834c5761dbeb07dd13"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cff9ae76a54f7c6fe0167c9c4028c12c1f6de52d68a31d11b6790bb2ae685560"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f02576a4d106d7830ca90278868bf0983554dd69183b7bbe09f2fcd51cf54f"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:073d57425a23721730d3ff5485e2da489dd3c90b04e86243dd7211f889898106"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:71e32ddec7f573a1a0feb8d2cf2af474c50ec21e7a8263026e8d3b4b629805db"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7cbb20b29d57e76a58b40fd8b13a9130db495a12d678d651b459bf61c0714cea"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a42ad267e131d7847076bb7e31050f6c4378cd38e8f1bf7a0edd32f30224d5c9"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a013979fc9390abadc445ea2527426a0e7a4495c19b74589204f9b71bcaafeb"}, + {file = "mmh3-4.1.0-cp311-cp311-win32.whl", hash = "sha256:1d3b1cdad7c71b7b88966301789a478af142bddcb3a2bee563f7a7d40519a00f"}, + {file = "mmh3-4.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0dc6dc32eb03727467da8e17deffe004fbb65e8b5ee2b502d36250d7a3f4e2ec"}, + {file = "mmh3-4.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:9ae3a5c1b32dda121c7dc26f9597ef7b01b4c56a98319a7fe86c35b8bc459ae6"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0033d60c7939168ef65ddc396611077a7268bde024f2c23bdc283a19123f9e9c"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d6af3e2287644b2b08b5924ed3a88c97b87b44ad08e79ca9f93d3470a54a41c5"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d82eb4defa245e02bb0b0dc4f1e7ee284f8d212633389c91f7fba99ba993f0a2"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba245e94b8d54765e14c2d7b6214e832557e7856d5183bc522e17884cab2f45d"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb04e2feeabaad6231e89cd43b3d01a4403579aa792c9ab6fdeef45cc58d4ec0"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e3b1a27def545ce11e36158ba5d5390cdbc300cfe456a942cc89d649cf7e3b2"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce0ab79ff736d7044e5e9b3bfe73958a55f79a4ae672e6213e92492ad5e734d5"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b02268be6e0a8eeb8a924d7db85f28e47344f35c438c1e149878bb1c47b1cd3"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:deb887f5fcdaf57cf646b1e062d56b06ef2f23421c80885fce18b37143cba828"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99dd564e9e2b512eb117bd0cbf0f79a50c45d961c2a02402787d581cec5448d5"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:08373082dfaa38fe97aa78753d1efd21a1969e51079056ff552e687764eafdfe"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:54b9c6a2ea571b714e4fe28d3e4e2db37abfd03c787a58074ea21ee9a8fd1740"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a7b1edf24c69e3513f879722b97ca85e52f9032f24a52284746877f6a7304086"}, + {file = "mmh3-4.1.0-cp312-cp312-win32.whl", hash = "sha256:411da64b951f635e1e2284b71d81a5a83580cea24994b328f8910d40bed67276"}, + {file = "mmh3-4.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:bebc3ecb6ba18292e3d40c8712482b4477abd6981c2ebf0e60869bd90f8ac3a9"}, + {file = "mmh3-4.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:168473dd608ade6a8d2ba069600b35199a9af837d96177d3088ca91f2b3798e3"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:372f4b7e1dcde175507640679a2a8790185bb71f3640fc28a4690f73da986a3b"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:438584b97f6fe13e944faf590c90fc127682b57ae969f73334040d9fa1c7ffa5"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6e27931b232fc676675fac8641c6ec6b596daa64d82170e8597f5a5b8bdcd3b6"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:571a92bad859d7b0330e47cfd1850b76c39b615a8d8e7aa5853c1f971fd0c4b1"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a69d6afe3190fa08f9e3a58e5145549f71f1f3fff27bd0800313426929c7068"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afb127be0be946b7630220908dbea0cee0d9d3c583fa9114a07156f98566dc28"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:940d86522f36348ef1a494cbf7248ab3f4a1638b84b59e6c9e90408bd11ad729"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3dcccc4935686619a8e3d1f7b6e97e3bd89a4a796247930ee97d35ea1a39341"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01bb9b90d61854dfc2407c5e5192bfb47222d74f29d140cb2dd2a69f2353f7cc"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bcb1b8b951a2c0b0fb8a5426c62a22557e2ffc52539e0a7cc46eb667b5d606a9"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6477a05d5e5ab3168e82e8b106e316210ac954134f46ec529356607900aea82a"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:da5892287e5bea6977364b15712a2573c16d134bc5fdcdd4cf460006cf849278"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:99180d7fd2327a6fffbaff270f760576839dc6ee66d045fa3a450f3490fda7f5"}, + {file = "mmh3-4.1.0-cp38-cp38-win32.whl", hash = "sha256:9b0d4f3949913a9f9a8fb1bb4cc6ecd52879730aab5ff8c5a3d8f5b593594b73"}, + {file = "mmh3-4.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:598c352da1d945108aee0c3c3cfdd0e9b3edef74108f53b49d481d3990402169"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:475d6d1445dd080f18f0f766277e1237fa2914e5fe3307a3b2a3044f30892103"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5ca07c41e6a2880991431ac717c2a049056fff497651a76e26fc22224e8b5732"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ebe052fef4bbe30c0548d12ee46d09f1b69035ca5208a7075e55adfe091be44"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaefd42e85afb70f2b855a011f7b4d8a3c7e19c3f2681fa13118e4d8627378c5"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0ae43caae5a47afe1b63a1ae3f0986dde54b5fb2d6c29786adbfb8edc9edfb"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6218666f74c8c013c221e7f5f8a693ac9cf68e5ac9a03f2373b32d77c48904de"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac59294a536ba447b5037f62d8367d7d93b696f80671c2c45645fa9f1109413c"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086844830fcd1e5c84fec7017ea1ee8491487cfc877847d96f86f68881569d2e"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e42b38fad664f56f77f6fbca22d08450f2464baa68acdbf24841bf900eb98e87"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d08b790a63a9a1cde3b5d7d733ed97d4eb884bfbc92f075a091652d6bfd7709a"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:73ea4cc55e8aea28c86799ecacebca09e5f86500414870a8abaedfcbaf74d288"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f90938ff137130e47bcec8dc1f4ceb02f10178c766e2ef58a9f657ff1f62d124"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:aa1f13e94b8631c8cd53259250556edcf1de71738936b60febba95750d9632bd"}, + {file = "mmh3-4.1.0-cp39-cp39-win32.whl", hash = "sha256:a3b680b471c181490cf82da2142029edb4298e1bdfcb67c76922dedef789868d"}, + {file = "mmh3-4.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:fefef92e9c544a8dbc08f77a8d1b6d48006a750c4375bbcd5ff8199d761e263b"}, + {file = "mmh3-4.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:8e2c1f6a2b41723a4f82bd5a762a777836d29d664fc0095f17910bea0adfd4a6"}, + {file = "mmh3-4.1.0.tar.gz", hash = "sha256:a1cf25348b9acd229dda464a094d6170f47d2850a1fcb762a3b6172d2ce6ca4a"}, +] + +[package.extras] +test = ["mypy (>=1.0)", "pytest (>=7.0.0)"] + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + [[package]] name = "more-itertools" version = "10.2.0" @@ -2765,6 +3834,23 @@ files = [ {file = "more_itertools-10.2.0-py3-none-any.whl", hash = "sha256:686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684"}, ] +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + [[package]] name = "msgpack" version = "1.0.8" @@ -2929,6 +4015,17 @@ files = [ {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] +[[package]] +name = "mutagen" +version = "1.47.0" +description = "read and write audio tags for many formats" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719"}, + {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, +] + [[package]] name = "mypy" version = "1.9.0" @@ -3041,6 +4138,20 @@ plot = ["matplotlib"] tgrep = ["pyparsing"] twitter = ["twython"] +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + [[package]] name = "numexpr" version = "2.10.0" @@ -3127,15 +4238,73 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "onnxruntime" +version = "1.17.1" +description = "ONNX Runtime is a runtime accelerator for Machine Learning models" +optional = false +python-versions = "*" +files = [ + {file = "onnxruntime-1.17.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d43ac17ac4fa3c9096ad3c0e5255bb41fd134560212dc124e7f52c3159af5d21"}, + {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55b5e92a4c76a23981c998078b9bf6145e4fb0b016321a8274b1607bd3c6bd35"}, + {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebbcd2bc3a066cf54e6f18c75708eb4d309ef42be54606d22e5bdd78afc5b0d7"}, + {file = "onnxruntime-1.17.1-cp310-cp310-win32.whl", hash = "sha256:5e3716b5eec9092e29a8d17aab55e737480487deabfca7eac3cd3ed952b6ada9"}, + {file = "onnxruntime-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:fbb98cced6782ae1bb799cc74ddcbbeeae8819f3ad1d942a74d88e72b6511337"}, + {file = "onnxruntime-1.17.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:36fd6f87a1ecad87e9c652e42407a50fb305374f9a31d71293eb231caae18784"}, + {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99a8bddeb538edabc524d468edb60ad4722cff8a49d66f4e280c39eace70500b"}, + {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd7fddb4311deb5a7d3390cd8e9b3912d4d963efbe4dfe075edbaf18d01c024e"}, + {file = "onnxruntime-1.17.1-cp311-cp311-win32.whl", hash = "sha256:606a7cbfb6680202b0e4f1890881041ffc3ac6e41760a25763bd9fe146f0b335"}, + {file = "onnxruntime-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:53e4e06c0a541696ebdf96085fd9390304b7b04b748a19e02cf3b35c869a1e76"}, + {file = "onnxruntime-1.17.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:40f08e378e0f85929712a2b2c9b9a9cc400a90c8a8ca741d1d92c00abec60843"}, + {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac79da6d3e1bb4590f1dad4bb3c2979d7228555f92bb39820889af8b8e6bd472"}, + {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ae9ba47dc099004e3781f2d0814ad710a13c868c739ab086fc697524061695ea"}, + {file = "onnxruntime-1.17.1-cp312-cp312-win32.whl", hash = "sha256:2dff1a24354220ac30e4a4ce2fb1df38cb1ea59f7dac2c116238d63fe7f4c5ff"}, + {file = "onnxruntime-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:6226a5201ab8cafb15e12e72ff2a4fc8f50654e8fa5737c6f0bd57c5ff66827e"}, + {file = "onnxruntime-1.17.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:cd0c07c0d1dfb8629e820b05fda5739e4835b3b82faf43753d2998edf2cf00aa"}, + {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:617ebdf49184efa1ba6e4467e602fbfa029ed52c92f13ce3c9f417d303006381"}, + {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dae9071e3facdf2920769dceee03b71c684b6439021defa45b830d05e148924"}, + {file = "onnxruntime-1.17.1-cp38-cp38-win32.whl", hash = "sha256:835d38fa1064841679433b1aa8138b5e1218ddf0cfa7a3ae0d056d8fd9cec713"}, + {file = "onnxruntime-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:96621e0c555c2453bf607606d08af3f70fbf6f315230c28ddea91754e17ad4e6"}, + {file = "onnxruntime-1.17.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:7a9539935fb2d78ebf2cf2693cad02d9930b0fb23cdd5cf37a7df813e977674d"}, + {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45c6a384e9d9a29c78afff62032a46a993c477b280247a7e335df09372aedbe9"}, + {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4e19f966450f16863a1d6182a685ca33ae04d7772a76132303852d05b95411ea"}, + {file = "onnxruntime-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e2ae712d64a42aac29ed7a40a426cb1e624a08cfe9273dcfe681614aa65b07dc"}, + {file = "onnxruntime-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7e9f7fb049825cdddf4a923cfc7c649d84d63c0134315f8e0aa9e0c3004672c"}, +] + +[package.dependencies] +coloredlogs = "*" +flatbuffers = "*" +numpy = ">=1.21.6" +packaging = "*" +protobuf = "*" +sympy = "*" + [[package]] name = "openai" -version = "1.16.1" +version = "1.16.2" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.16.1-py3-none-any.whl", hash = "sha256:77ef3db6110071f7154859e234250fb945a36554207a30a4491092eadb73fcb5"}, - {file = "openai-1.16.1.tar.gz", hash = "sha256:58922c785d167458b46e3c76e7b1bc2306f313ee9b71791e84cbf590abe160f2"}, + {file = "openai-1.16.2-py3-none-any.whl", hash = "sha256:46a435380921e42dae218d04d6dd0e89a30d7f3b9d8a778d5887f78003cf9354"}, + {file = "openai-1.16.2.tar.gz", hash = "sha256:c93d5efe5b73b6cb72c4cd31823852d2e7c84a138c0af3cbe4a8eb32b1164ab2"}, ] [package.dependencies] @@ -3179,6 +4348,29 @@ files = [ [package.dependencies] opentelemetry-proto = "1.24.0" +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.24.0" +description = "OpenTelemetry Collector Protobuf over gRPC Exporter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_exporter_otlp_proto_grpc-1.24.0-py3-none-any.whl", hash = "sha256:f40d62aa30a0a43cc1657428e59fcf82ad5f7ea8fff75de0f9d9cb6f739e0a3b"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.24.0.tar.gz", hash = "sha256:217c6e30634f2c9797999ea9da29f7300479a94a610139b9df17433f915e7baa"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +googleapis-common-protos = ">=1.52,<2.0" +grpcio = ">=1.0.0,<2.0.0" +opentelemetry-api = ">=1.15,<2.0" +opentelemetry-exporter-otlp-proto-common = "1.24.0" +opentelemetry-proto = "1.24.0" +opentelemetry-sdk = ">=1.24.0,<1.25.0" + +[package.extras] +test = ["pytest-grpc"] + [[package]] name = "opentelemetry-exporter-otlp-proto-http" version = "1.24.0" @@ -3199,6 +4391,64 @@ opentelemetry-proto = "1.24.0" opentelemetry-sdk = ">=1.24.0,<1.25.0" requests = ">=2.7,<3.0" +[[package]] +name = "opentelemetry-instrumentation" +version = "0.45b0" +description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation-0.45b0-py3-none-any.whl", hash = "sha256:06c02e2c952c1b076e8eaedf1b82f715e2937ba7eeacab55913dd434fbcec258"}, + {file = "opentelemetry_instrumentation-0.45b0.tar.gz", hash = "sha256:6c47120a7970bbeb458e6a73686ee9ba84b106329a79e4a4a66761f933709c7e"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.4,<2.0" +setuptools = ">=16.0" +wrapt = ">=1.0.0,<2.0.0" + +[[package]] +name = "opentelemetry-instrumentation-asgi" +version = "0.45b0" +description = "ASGI instrumentation for OpenTelemetry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_asgi-0.45b0-py3-none-any.whl", hash = "sha256:8be1157ed62f0db24e45fdf7933c530c4338bd025c5d4af7830e903c0756021b"}, + {file = "opentelemetry_instrumentation_asgi-0.45b0.tar.gz", hash = "sha256:97f55620f163fd3d20323e9fd8dc3aacc826c03397213ff36b877e0f4b6b08a6"}, +] + +[package.dependencies] +asgiref = ">=3.0,<4.0" +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.45b0" +opentelemetry-semantic-conventions = "0.45b0" +opentelemetry-util-http = "0.45b0" + +[package.extras] +instruments = ["asgiref (>=3.0,<4.0)"] + +[[package]] +name = "opentelemetry-instrumentation-fastapi" +version = "0.45b0" +description = "OpenTelemetry FastAPI Instrumentation" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_fastapi-0.45b0-py3-none-any.whl", hash = "sha256:77d9c123a363129148f5f66d44094f3d67aaaa2b201396d94782b4a7f9ce4314"}, + {file = "opentelemetry_instrumentation_fastapi-0.45b0.tar.gz", hash = "sha256:5a6b91e1c08a01601845fcfcfdefd0a2aecdb3c356d4a436a3210cb58c21487e"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.45b0" +opentelemetry-instrumentation-asgi = "0.45b0" +opentelemetry-semantic-conventions = "0.45b0" +opentelemetry-util-http = "0.45b0" + +[package.extras] +instruments = ["fastapi (>=0.58,<1.0)"] + [[package]] name = "opentelemetry-proto" version = "1.24.0" @@ -3240,6 +4490,17 @@ files = [ {file = "opentelemetry_semantic_conventions-0.45b0.tar.gz", hash = "sha256:7c84215a44ac846bc4b8e32d5e78935c5c43482e491812a0bb8aaf87e4d92118"}, ] +[[package]] +name = "opentelemetry-util-http" +version = "0.45b0" +description = "Web util for OpenTelemetry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_util_http-0.45b0-py3-none-any.whl", hash = "sha256:6628868b501b3004e1860f976f410eeb3d3499e009719d818000f24ce17b6e33"}, + {file = "opentelemetry_util_http-0.45b0.tar.gz", hash = "sha256:4ce08b6a7d52dd7c96b7705b5b4f06fdb6aa3eac1233b3b0bfef8a0cab9a92cd"}, +] + [[package]] name = "orjson" version = "3.10.0" @@ -3300,6 +4561,31 @@ files = [ {file = "orjson-3.10.0.tar.gz", hash = "sha256:ba4d8cac5f2e2cff36bea6b6481cdb92b38c202bcec603d6f5ff91960595a1ed"}, ] +[[package]] +name = "outcome" +version = "1.3.0.post0" +description = "Capture the outcome of Python function calls." +optional = false +python-versions = ">=3.7" +files = [ + {file = "outcome-1.3.0.post0-py2.py3-none-any.whl", hash = "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"}, + {file = "outcome-1.3.0.post0.tar.gz", hash = "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8"}, +] + +[package.dependencies] +attrs = ">=19.2.0" + +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + [[package]] name = "packaging" version = "23.2" @@ -3507,13 +4793,13 @@ xmp = ["defusedxml"] [[package]] name = "pipe" -version = "2.1" +version = "2.2" description = "Module enabling a sh like infix syntax (using pipes)" optional = false python-versions = ">=3.8" files = [ - {file = "pipe-2.1-py3-none-any.whl", hash = "sha256:d44390a97b6c18d7e5cf5d3a6b50f7aabd1622a81dfcac48252246fcafaa5461"}, - {file = "pipe-2.1.tar.gz", hash = "sha256:e0ee44d7a17b4cbed2fd31839d59a3409638fc2d6daa6a714e1c062ef57956db"}, + {file = "pipe-2.2-py3-none-any.whl", hash = "sha256:0a5c3202ff35122f69a34ccbd40c9658646f033cc941055304fe8bfa7e13376e"}, + {file = "pipe-2.2.tar.gz", hash = "sha256:6a253198e3bc542ffaf0a4222376586bce8583b27a9ddbc2cfbaa554c049230d"}, ] [[package]] @@ -3622,6 +4908,29 @@ files = [ poetry = ">=1.8.0,<2.0.0" poetry-core = ">=1.7.0,<2.0.0" +[[package]] +name = "posthog" +version = "3.5.0" +description = "Integrate PostHog into any python application." +optional = false +python-versions = "*" +files = [ + {file = "posthog-3.5.0-py2.py3-none-any.whl", hash = "sha256:3c672be7ba6f95d555ea207d4486c171d06657eb34b3ce25eb043bfe7b6b5b76"}, + {file = "posthog-3.5.0.tar.gz", hash = "sha256:8f7e3b2c6e8714d0c0c542a2109b83a7549f63b7113a133ab2763a89245ef2ef"}, +] + +[package.dependencies] +backoff = ">=1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] +sentry = ["django", "sentry-sdk"] +test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] + [[package]] name = "prediction-market-agent-tooling" version = "0.8.0" @@ -3709,6 +5018,64 @@ files = [ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] +[[package]] +name = "pulsar-client" +version = "3.4.0" +description = "Apache Pulsar Python client library" +optional = false +python-versions = "*" +files = [ + {file = "pulsar_client-3.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ebf99db5244ff69479283b25621b070492acc4bb643d162d86b90387cb6fdb2a"}, + {file = "pulsar_client-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6cb5d8e1482a8aea758633be23717e0c4bb7dc53784e37915c0048c0382f134"}, + {file = "pulsar_client-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a7592e42c76034e9a8d64d42dd5bab361425f869de562e9ccad698e19cd88"}, + {file = "pulsar_client-3.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5963090a78a5644ba25f41da3a6d49ea3f00c972b095baff365916dc246426a"}, + {file = "pulsar_client-3.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:419cdcf577f755e3f31bf264300d9ba158325edb2ee9cee555d81ba1909c094e"}, + {file = "pulsar_client-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:4c93c35ee97307dae153e748b33dcd3d4f06da34bca373321aa2df73f1535705"}, + {file = "pulsar_client-3.4.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:11952fb022ee72debf53b169f4482f9dc5c890be0149ae98779864b3a21f1bd3"}, + {file = "pulsar_client-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8743c320aa96798d20cafa98ea97a68c4295fc4872c23acd5e012fd36cb06ba"}, + {file = "pulsar_client-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33571de99cd898349f17978ba62e2b839ea0275fb7067f31bf5f6ebfeae0987d"}, + {file = "pulsar_client-3.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a60c03c3e70f018538e7cd3fa84d95e283b610272b744166dbc48960a809fa07"}, + {file = "pulsar_client-3.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c47041267b5843ffec54352d842156c279945f3e976d7025ffa89875ff76390"}, + {file = "pulsar_client-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:49fe4ab04004b476c87ab3ad22fe87346fca564a3e3ca9c0ac58fee45a895d81"}, + {file = "pulsar_client-3.4.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:1e077a4839be3ead3de3f05b4c244269dca2df07f47cea0b90544c7e9dc1642f"}, + {file = "pulsar_client-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f202b84e1f683d64672dd1971114600ae2e5c3735587286ff9bfb431385f08e8"}, + {file = "pulsar_client-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c606c04f357341042fa6c75477de7d2204f7ae50aa29c2f74b24e54c85f47f96"}, + {file = "pulsar_client-3.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c67b25ede3a578f5a7dc30230e52609ef38191f74b47e5cbdbc98c42df556927"}, + {file = "pulsar_client-3.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b7f8211cc9460cdf4d06e4e1cb878689d2aa4a7e4027bd2a2f1419a79ade16a6"}, + {file = "pulsar_client-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:c5399e9780d6951c69808c0b6175311a966af82fb08addf6e741ae37b1bee7ef"}, + {file = "pulsar_client-3.4.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:a2d6c850b60106dc915d3476a490fba547c6748a5f742b68abd30d1a35355b82"}, + {file = "pulsar_client-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a52ea8294a9f30eb6f0a2db5dc16e3aad7ff2284f818c48ad3a6b601723be02b"}, + {file = "pulsar_client-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eeeede40108be12222e009285c971e5b8f6433d9f0f8ef934d6a131585921c4"}, + {file = "pulsar_client-3.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9409066c600f2b6f220552c5dfe08aeeabcf07fe0e76367aa5816b2e87a5cf72"}, + {file = "pulsar_client-3.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:58e2f886e6dab43e66c3ce990fe96209e55ab46350506829a637b77b74125fb9"}, + {file = "pulsar_client-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:b57dfa5063b0d9dc7664896c55605eac90753e35e80db5a959d3be2be0ab0d48"}, + {file = "pulsar_client-3.4.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:7704c664aa2c801af4c2d3a58e9d8ffaeef12ce8a0f71712e9187f9a96da856f"}, + {file = "pulsar_client-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0364db563e27442053bdbb8655e7ffb420f491690bc2c78da5a58bd35c658ad"}, + {file = "pulsar_client-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3e34de19e0744d8aa3538cb2172076bccd0761b3e94ebadb7bd59765ae3d1ed"}, + {file = "pulsar_client-3.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:dc8be41dec8cb052fb1837550f495e9b73a8b3cf85e07157904ec84832758a65"}, + {file = "pulsar_client-3.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b49d669bed15b7edb9c936704310d57808f1d01c511b94d866f54fe8ffe1752d"}, + {file = "pulsar_client-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:88c93e5fbfc349f3967e931f7a908d15fd4fd725ebdd842423ac9cd961fe293f"}, +] + +[package.dependencies] +certifi = "*" + +[package.extras] +all = ["apache-bookkeeper-client (>=4.16.1)", "fastavro (>=1.9.2)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] +avro = ["fastavro (>=1.9.2)"] +functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + [[package]] name = "pyarrow" version = "15.0.2" @@ -3871,6 +5238,47 @@ files = [ {file = "pycryptodome-3.20.0.tar.gz", hash = "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"}, ] +[[package]] +name = "pycryptodomex" +version = "3.20.0" +description = "Cryptographic library for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodomex-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win32.whl", hash = "sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427"}, + {file = "pycryptodomex-3.20.0.tar.gz", hash = "sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"}, +] + [[package]] name = "pydantic" version = "2.6.4" @@ -4030,6 +5438,23 @@ files = [ {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, ] +[[package]] +name = "pygithub" +version = "1.59.1" +description = "Use the full Github API v3" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyGithub-1.59.1-py3-none-any.whl", hash = "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9"}, + {file = "PyGithub-1.59.1.tar.gz", hash = "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217"}, +] + +[package.dependencies] +deprecated = "*" +pyjwt = {version = ">=2.4.0", extras = ["crypto"]} +pynacl = ">=1.4.0" +requests = ">=2.14.0" + [[package]] name = "pygments" version = "2.17.2" @@ -4045,6 +5470,104 @@ files = [ plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyjwt" +version = "2.8.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pylance" +version = "0.9.18" +description = "python wrapper for Lance columnar format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pylance-0.9.18-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:fe2445d922c594d90e89111385106f6b152caab27996217db7bb4b8947eb0bea"}, + {file = "pylance-0.9.18-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a2c424c50f5186edbbcc5a26f34063ed09d9a7390e28033395728ce02b5658f0"}, + {file = "pylance-0.9.18-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10af06edfde3e8451bf2251381d3980a0a164eab9d4c3d4dc8b6318969e958a6"}, + {file = "pylance-0.9.18-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:d8bb9045d7163cc966b9fe34a917044192be37a90915475b77461e5b7d89e442"}, + {file = "pylance-0.9.18-cp38-abi3-win_amd64.whl", hash = "sha256:5ea80b7bf70d992f3fe63bce2d2f064f742124c04eaedeb76baca408ded85a2c"}, +] + +[package.dependencies] +numpy = ">=1.22" +pyarrow = ">=12" + +[package.extras] +benchmarks = ["pytest-benchmark"] +dev = ["ruff (==0.2.2)"] +tests = ["datasets", "duckdb", "ml_dtypes", "pandas", "pillow", "polars[pandas,pyarrow]", "pytest", "tensorflow", "tqdm"] +torch = ["torch"] + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + +[[package]] +name = "pypdf" +version = "3.17.4" +description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pypdf-3.17.4-py3-none-any.whl", hash = "sha256:6aa0f61b33779b64486de3f42835d3668badd48dac4a536aeb87da187a5eacd2"}, + {file = "pypdf-3.17.4.tar.gz", hash = "sha256:ec96e2e4fc9648ac609d19c00d41e9d606e0ae2ce5a0bbe7691426f5f157166a"}, +] + +[package.extras] +crypto = ["PyCryptodome", "cryptography"] +dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "pytest-socket", "pytest-timeout", "pytest-xdist", "wheel"] +docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"] +full = ["Pillow (>=8.0.0)", "PyCryptodome", "cryptography"] +image = ["Pillow (>=8.0.0)"] + +[[package]] +name = "pypika" +version = "0.48.9" +description = "A SQL query builder API for Python" +optional = false +python-versions = "*" +files = [ + {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, +] + [[package]] name = "pyproject-hooks" version = "1.0.0" @@ -4059,6 +5582,57 @@ files = [ [package.dependencies] tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +[[package]] +name = "pyreadline3" +version = "3.4.1" +description = "A python implementation of GNU readline." +optional = false +python-versions = "*" +files = [ + {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, + {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, +] + +[[package]] +name = "pyright" +version = "1.1.357" +description = "Command line wrapper for pyright" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyright-1.1.357-py3-none-any.whl", hash = "sha256:1cf29ee38e4928131895cd8e90eef37b5b77e2ed72a14e6e8e2405266f5f0aca"}, + {file = "pyright-1.1.357.tar.gz", hash = "sha256:7c66261116c78c5fa9629134fe85c54cc5302ab73e376be4b0a99d89c80a9403"}, +] + +[package.dependencies] +nodeenv = ">=1.6.0" + +[package.extras] +all = ["twine (>=3.4.1)"] +dev = ["twine (>=3.4.1)"] + +[[package]] +name = "pysbd" +version = "0.3.4" +description = "pysbd (Python Sentence Boundary Disambiguation) is a rule-based sentence boundary detection that works out-of-the-box across many languages." +optional = false +python-versions = ">=3" +files = [ + {file = "pysbd-0.3.4-py3-none-any.whl", hash = "sha256:cd838939b7b0b185fcf86b0baf6636667dfb6e474743beeff878e9f42e022953"}, +] + +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] + [[package]] name = "pytest" version = "8.1.1" @@ -4115,18 +5689,29 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.0.1" +version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" 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"}, + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, ] [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "pytube" +version = "15.0.0" +description = "Python 3 library for downloading YouTube Videos." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytube-15.0.0-py3-none-any.whl", hash = "sha256:07b9904749e213485780d7eb606e5e5b8e4341aa4dccf699160876da00e12d78"}, + {file = "pytube-15.0.0.tar.gz", hash = "sha256:076052efe76f390dfa24b1194ff821d4e86c17d41cb5562f3a276a8bcbfc9d1d"}, +] + [[package]] name = "pytz" version = "2024.1" @@ -4344,6 +5929,20 @@ files = [ [package.extras] full = ["numpy"] +[[package]] +name = "ratelimiter" +version = "1.2.0.post0" +description = "Simple python rate limiting object" +optional = false +python-versions = "*" +files = [ + {file = "ratelimiter-1.2.0.post0-py3-none-any.whl", hash = "sha256:a52be07bc0bb0b3674b4b304550f10c769bbb00fead3072e035904474259809f"}, + {file = "ratelimiter-1.2.0.post0.tar.gz", hash = "sha256:5c395dcabdbbde2e5178ef3f89b568a3066454a6ddc223b76473dac22f89b4f7"}, +] + +[package.extras] +test = ["pytest (>=3.0)", "pytest-asyncio"] + [[package]] name = "referencing" version = "0.34.0" @@ -4502,6 +6101,24 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=3.4" +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"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + [[package]] name = "requests-toolbelt" version = "1.0.0" @@ -4516,6 +6133,21 @@ files = [ [package.dependencies] requests = ">=2.0.1,<3.0.0" +[[package]] +name = "retry" +version = "0.9.2" +description = "Easy to use retry decorator." +optional = false +python-versions = "*" +files = [ + {file = "retry-0.9.2-py2.py3-none-any.whl", hash = "sha256:ccddf89761fa2c726ab29391837d4327f819ea14d244c232a1d24c67a2f98606"}, + {file = "retry-0.9.2.tar.gz", hash = "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4"}, +] + +[package.dependencies] +decorator = ">=3.4.2" +py = ">=1.4.26,<2.0.0" + [[package]] name = "rich" version = "13.7.1" @@ -4676,6 +6308,20 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" +[[package]] +name = "schema" +version = "0.7.5" +description = "Simple data validation library" +optional = false +python-versions = "*" +files = [ + {file = "schema-0.7.5-py2.py3-none-any.whl", hash = "sha256:f3ffdeeada09ec34bf40d7d79996d9f7175db93b7a5065de0faa7f41083c1e6c"}, + {file = "schema-0.7.5.tar.gz", hash = "sha256:f06717112c61895cabc4707752b88716e8420a8819d71404501e114f91043197"}, +] + +[package.dependencies] +contextlib2 = ">=0.5.5" + [[package]] name = "scikit-learn" version = "1.4.1.post1" @@ -4720,45 +6366,45 @@ tests = ["black (>=23.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.3)", "numpydoc ( [[package]] name = "scipy" -version = "1.12.0" +version = "1.13.0" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, - {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, - {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, - {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, - {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, - {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, - {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, - {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, - {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, - {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, - {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, -] - -[package.dependencies] -numpy = ">=1.22.4,<1.29.0" - -[package.extras] -dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, + {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, + {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, + {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, + {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, + {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, + {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, + {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, + {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, + {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, +] + +[package.dependencies] +numpy = ">=1.22.4,<2.3" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "secretstorage" @@ -4775,6 +6421,35 @@ files = [ cryptography = ">=2.0" jeepney = ">=0.6" +[[package]] +name = "selenium" +version = "4.19.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "selenium-4.19.0-py3-none-any.whl", hash = "sha256:5b4f49240d61e687a73f7968ae2517d403882aae3550eae2a229c745e619f1d9"}, + {file = "selenium-4.19.0.tar.gz", hash = "sha256:d9dfd6d0b021d71d0a48b865fe7746490ba82b81e9c87b212360006629eb1853"}, +] + +[package.dependencies] +certifi = ">=2021.10.8" +trio = ">=0.17,<1.0" +trio-websocket = ">=0.9,<1.0" +typing_extensions = ">=4.9.0" +urllib3 = {version = ">=1.26,<3", extras = ["socks"]} + +[[package]] +name = "semver" +version = "3.0.2" +description = "Python helper for Semantic Versioning (https://semver.org)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"}, + {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"}, +] + [[package]] name = "serpapi" version = "0.1.5" @@ -4793,6 +6468,79 @@ requests = "*" color = ["pygments"] test = ["pytest"] +[[package]] +name = "setuptools" +version = "69.2.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, + {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "shapely" +version = "2.0.3" +description = "Manipulation and analysis of geometric objects" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:af7e9abe180b189431b0f490638281b43b84a33a960620e6b2e8d3e3458b61a1"}, + {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98040462b36ced9671e266b95c326b97f41290d9d17504a1ee4dc313a7667b9c"}, + {file = "shapely-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71eb736ef2843f23473c6e37f6180f90f0a35d740ab284321548edf4e55d9a52"}, + {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:881eb9dbbb4a6419667e91fcb20313bfc1e67f53dbb392c6840ff04793571ed1"}, + {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f10d2ccf0554fc0e39fad5886c839e47e207f99fdf09547bc687a2330efda35b"}, + {file = "shapely-2.0.3-cp310-cp310-win32.whl", hash = "sha256:6dfdc077a6fcaf74d3eab23a1ace5abc50c8bce56ac7747d25eab582c5a2990e"}, + {file = "shapely-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:64c5013dacd2d81b3bb12672098a0b2795c1bf8190cfc2980e380f5ef9d9e4d9"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:56cee3e4e8159d6f2ce32e421445b8e23154fd02a0ac271d6a6c0b266a8e3cce"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:619232c8276fded09527d2a9fd91a7885ff95c0ff9ecd5e3cb1e34fbb676e2ae"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2a7d256db6f5b4b407dc0c98dd1b2fcf1c9c5814af9416e5498d0a2e4307a4b"}, + {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45f0c8cd4583647db3216d965d49363e6548c300c23fd7e57ce17a03f824034"}, + {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13cb37d3826972a82748a450328fe02a931dcaed10e69a4d83cc20ba021bc85f"}, + {file = "shapely-2.0.3-cp311-cp311-win32.whl", hash = "sha256:9302d7011e3e376d25acd30d2d9e70d315d93f03cc748784af19b00988fc30b1"}, + {file = "shapely-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6b464f2666b13902835f201f50e835f2f153f37741db88f68c7f3b932d3505fa"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e86e7cb8e331a4850e0c2a8b2d66dc08d7a7b301b8d1d34a13060e3a5b4b3b55"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c91981c99ade980fc49e41a544629751a0ccd769f39794ae913e53b07b2f78b9"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd45d456983dc60a42c4db437496d3f08a4201fbf662b69779f535eb969660af"}, + {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:882fb1ffc7577e88c1194f4f1757e277dc484ba096a3b94844319873d14b0f2d"}, + {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9f2d93bff2ea52fa93245798cddb479766a18510ea9b93a4fb9755c79474889"}, + {file = "shapely-2.0.3-cp312-cp312-win32.whl", hash = "sha256:99abad1fd1303b35d991703432c9481e3242b7b3a393c186cfb02373bf604004"}, + {file = "shapely-2.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:6f555fe3304a1f40398977789bc4fe3c28a11173196df9ece1e15c5bc75a48db"}, + {file = "shapely-2.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983cc418c1fa160b7d797cfef0e0c9f8c6d5871e83eae2c5793fce6a837fad9"}, + {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18bddb8c327f392189a8d5d6b9a858945722d0bb95ccbd6a077b8e8fc4c7890d"}, + {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:442f4dcf1eb58c5a4e3428d88e988ae153f97ab69a9f24e07bf4af8038536325"}, + {file = "shapely-2.0.3-cp37-cp37m-win32.whl", hash = "sha256:31a40b6e3ab00a4fd3a1d44efb2482278642572b8e0451abdc8e0634b787173e"}, + {file = "shapely-2.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:59b16976c2473fec85ce65cc9239bef97d4205ab3acead4e6cdcc72aee535679"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:705efbce1950a31a55b1daa9c6ae1c34f1296de71ca8427974ec2f27d57554e3"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:601c5c0058a6192df704cb889439f64994708563f57f99574798721e9777a44b"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f24ecbb90a45c962b3b60d8d9a387272ed50dc010bfe605f1d16dfc94772d8a1"}, + {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c2a2989222c6062f7a0656e16276c01bb308bc7e5d999e54bf4e294ce62e76"}, + {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42bceb9bceb3710a774ce04908fda0f28b291323da2688f928b3f213373b5aee"}, + {file = "shapely-2.0.3-cp38-cp38-win32.whl", hash = "sha256:54d925c9a311e4d109ec25f6a54a8bd92cc03481a34ae1a6a92c1fe6729b7e01"}, + {file = "shapely-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:300d203b480a4589adefff4c4af0b13919cd6d760ba3cbb1e56275210f96f654"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:083d026e97b6c1f4a9bd2a9171c7692461092ed5375218170d91705550eecfd5"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27b6e1910094d93e9627f2664121e0e35613262fc037051680a08270f6058daf"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:71b2de56a9e8c0e5920ae5ddb23b923490557ac50cb0b7fa752761bf4851acde"}, + {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d279e56bbb68d218d63f3efc80c819cedcceef0e64efbf058a1df89dc57201b"}, + {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88566d01a30f0453f7d038db46bc83ce125e38e47c5f6bfd4c9c287010e9bf74"}, + {file = "shapely-2.0.3-cp39-cp39-win32.whl", hash = "sha256:58afbba12c42c6ed44c4270bc0e22f3dadff5656d711b0ad335c315e02d04707"}, + {file = "shapely-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:5026b30433a70911979d390009261b8c4021ff87c7c3cbd825e62bb2ffa181bc"}, + {file = "shapely-2.0.3.tar.gz", hash = "sha256:4d65d0aa7910af71efa72fd6447e02a8e5dd44da81a983de9d736d6e6ccbe674"}, +] + +[package.dependencies] +numpy = ">=1.14,<2" + +[package.extras] +docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +test = ["pytest", "pytest-cov"] + [[package]] name = "shellingham" version = "1.5.4" @@ -4837,6 +6585,17 @@ files = [ {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + [[package]] name = "soupsieve" version = "2.5" @@ -4935,15 +6694,32 @@ postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] pymysql = ["pymysql"] sqlcipher = ["sqlcipher3_binary"] +[[package]] +name = "starlette" +version = "0.37.2" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.37.2-py3-none-any.whl", hash = "sha256:6fe59f29268538e5d0d182f2791a479a0c64638e6935d1c6989e63fb2699c6ee"}, + {file = "starlette-0.37.2.tar.gz", hash = "sha256:9af890290133b79fc3db55474ade20f6220a364a0402e0b556e7cd5e1e093823"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] + [[package]] name = "streamlit" -version = "1.32.2" +version = "1.33.0" description = "A faster way to build and share data apps" optional = false -python-versions = ">=3.8, !=3.9.7" +python-versions = "!=3.9.7,>=3.8" files = [ - {file = "streamlit-1.32.2-py2.py3-none-any.whl", hash = "sha256:a0b8044e76fec364b07be145f8b40dbd8d083e20ebbb189ceb1fa9423f3dedea"}, - {file = "streamlit-1.32.2.tar.gz", hash = "sha256:1258b9cbc3ff957bf7d09b1bfc85cedc308f1065b30748545295a9af8d5577ab"}, + {file = "streamlit-1.33.0-py2.py3-none-any.whl", hash = "sha256:bfacb5d1edefcf803c2040b051a21b4c81317a9865448e6767d0a0c6aae7edae"}, + {file = "streamlit-1.33.0.tar.gz", hash = "sha256:a8da8ff46f5b948c56d2dc7aca7a61cf8d995f4f21744cf82258ae75e63004ba"}, ] [package.dependencies] @@ -4953,7 +6729,7 @@ cachetools = ">=4.0,<6" click = ">=7.0,<9" gitpython = ">=3.0.7,<3.1.19 || >3.1.19,<4" numpy = ">=1.19.3,<2" -packaging = ">=16.8,<24" +packaging = ">=16.8,<25" pandas = ">=1.3.0,<3" pillow = ">=7.1.0,<11" protobuf = ">=3.20,<5" @@ -4993,6 +6769,20 @@ all = ["dash (>=2.3.1,<3.0.0)", "plotly (>=5.14.1,<6.0.0)"] dash = ["dash (>=2.3.1,<3.0.0)"] plotly = ["plotly (>=5.14.1,<6.0.0)"] +[[package]] +name = "sympy" +version = "1.12" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, + {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, +] + +[package.dependencies] +mpmath = ">=0.19" + [[package]] name = "tabulate" version = "0.9.0" @@ -5113,6 +6903,133 @@ requests = ">=2.26.0" [package.extras] blobfile = ["blobfile (>=2)"] +[[package]] +name = "tokenizers" +version = "0.15.2" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tokenizers-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:52f6130c9cbf70544287575a985bf44ae1bda2da7e8c24e97716080593638012"}, + {file = "tokenizers-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:054c1cc9c6d68f7ffa4e810b3d5131e0ba511b6e4be34157aa08ee54c2f8d9ee"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9b9b070fdad06e347563b88c278995735292ded1132f8657084989a4c84a6d5"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea621a7eef4b70e1f7a4e84dd989ae3f0eeb50fc8690254eacc08acb623e82f1"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf7fd9a5141634fa3aa8d6b7be362e6ae1b4cda60da81388fa533e0b552c98fd"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44f2a832cd0825295f7179eaf173381dc45230f9227ec4b44378322d900447c9"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b9ec69247a23747669ec4b0ca10f8e3dfb3545d550258129bd62291aabe8605"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b6a4c78da863ff26dbd5ad9a8ecc33d8a8d97b535172601cf00aee9d7ce9ce"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5ab2a4d21dcf76af60e05af8063138849eb1d6553a0d059f6534357bce8ba364"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a47acfac7e511f6bbfcf2d3fb8c26979c780a91e06fb5b9a43831b2c0153d024"}, + {file = "tokenizers-0.15.2-cp310-none-win32.whl", hash = "sha256:064ff87bb6acdbd693666de9a4b692add41308a2c0ec0770d6385737117215f2"}, + {file = "tokenizers-0.15.2-cp310-none-win_amd64.whl", hash = "sha256:3b919afe4df7eb6ac7cafd2bd14fb507d3f408db7a68c43117f579c984a73843"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:89cd1cb93e4b12ff39bb2d626ad77e35209de9309a71e4d3d4672667b4b256e7"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cfed5c64e5be23d7ee0f0e98081a25c2a46b0b77ce99a4f0605b1ec43dd481fa"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a907d76dcfda37023ba203ab4ceeb21bc5683436ebefbd895a0841fd52f6f6f2"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20ea60479de6fc7b8ae756b4b097572372d7e4032e2521c1bbf3d90c90a99ff0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:48e2b9335be2bc0171df9281385c2ed06a15f5cf121c44094338306ab7b33f2c"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:112a1dd436d2cc06e6ffdc0b06d55ac019a35a63afd26475205cb4b1bf0bfbff"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4620cca5c2817177ee8706f860364cc3a8845bc1e291aaf661fb899e5d1c45b0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccd73a82751c523b3fc31ff8194702e4af4db21dc20e55b30ecc2079c5d43cb7"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:107089f135b4ae7817affe6264f8c7a5c5b4fd9a90f9439ed495f54fcea56fb4"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0ff110ecc57b7aa4a594396525a3451ad70988e517237fe91c540997c4e50e29"}, + {file = "tokenizers-0.15.2-cp311-none-win32.whl", hash = "sha256:6d76f00f5c32da36c61f41c58346a4fa7f0a61be02f4301fd30ad59834977cc3"}, + {file = "tokenizers-0.15.2-cp311-none-win_amd64.whl", hash = "sha256:cc90102ed17271cf0a1262babe5939e0134b3890345d11a19c3145184b706055"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f86593c18d2e6248e72fb91c77d413a815153b8ea4e31f7cd443bdf28e467670"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0774bccc6608eca23eb9d620196687c8b2360624619623cf4ba9dc9bd53e8b51"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d0222c5b7c9b26c0b4822a82f6a7011de0a9d3060e1da176f66274b70f846b98"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3835738be1de66624fff2f4f6f6684775da4e9c00bde053be7564cbf3545cc66"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0143e7d9dcd811855c1ce1ab9bf5d96d29bf5e528fd6c7824d0465741e8c10fd"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db35825f6d54215f6b6009a7ff3eedee0848c99a6271c870d2826fbbedf31a38"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f5e64b0389a2be47091d8cc53c87859783b837ea1a06edd9d8e04004df55a5c"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e0480c452217edd35eca56fafe2029fb4d368b7c0475f8dfa3c5c9c400a7456"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a33ab881c8fe70474980577e033d0bc9a27b7ab8272896e500708b212995d834"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a308a607ca9de2c64c1b9ba79ec9a403969715a1b8ba5f998a676826f1a7039d"}, + {file = "tokenizers-0.15.2-cp312-none-win32.whl", hash = "sha256:b8fcfa81bcb9447df582c5bc96a031e6df4da2a774b8080d4f02c0c16b42be0b"}, + {file = "tokenizers-0.15.2-cp312-none-win_amd64.whl", hash = "sha256:38d7ab43c6825abfc0b661d95f39c7f8af2449364f01d331f3b51c94dcff7221"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:38bfb0204ff3246ca4d5e726e8cc8403bfc931090151e6eede54d0e0cf162ef0"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c861d35e8286a53e06e9e28d030b5a05bcbf5ac9d7229e561e53c352a85b1fc"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:936bf3842db5b2048eaa53dade907b1160f318e7c90c74bfab86f1e47720bdd6"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:620beacc3373277700d0e27718aa8b25f7b383eb8001fba94ee00aeea1459d89"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2735ecbbf37e52db4ea970e539fd2d450d213517b77745114f92867f3fc246eb"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:473c83c5e2359bb81b0b6fde870b41b2764fcdd36d997485e07e72cc3a62264a"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968fa1fb3c27398b28a4eca1cbd1e19355c4d3a6007f7398d48826bbe3a0f728"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:865c60ae6eaebdde7da66191ee9b7db52e542ed8ee9d2c653b6d190a9351b980"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7c0d8b52664ab2d4a8d6686eb5effc68b78608a9008f086a122a7b2996befbab"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f33dfbdec3784093a9aebb3680d1f91336c56d86cc70ddf88708251da1fe9064"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d44ba80988ff9424e33e0a49445072ac7029d8c0e1601ad25a0ca5f41ed0c1d6"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:dce74266919b892f82b1b86025a613956ea0ea62a4843d4c4237be2c5498ed3a"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0ef06b9707baeb98b316577acb04f4852239d856b93e9ec3a299622f6084e4be"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73e2e74bbb07910da0d37c326869f34113137b23eadad3fc00856e6b3d9930c"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eeb12daf02a59e29f578a865f55d87cd103ce62bd8a3a5874f8fdeaa82e336b"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ba9f6895af58487ca4f54e8a664a322f16c26bbb442effd01087eba391a719e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccec77aa7150e38eec6878a493bf8c263ff1fa8a62404e16c6203c64c1f16a26"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f40604f5042ff210ba82743dda2b6aa3e55aa12df4e9f2378ee01a17e2855e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5645938a42d78c4885086767c70923abad047163d809c16da75d6b290cb30bbe"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05a77cbfebe28a61ab5c3891f9939cc24798b63fa236d84e5f29f3a85a200c00"}, + {file = "tokenizers-0.15.2-cp37-none-win32.whl", hash = "sha256:361abdc068e8afe9c5b818769a48624687fb6aaed49636ee39bec4e95e1a215b"}, + {file = "tokenizers-0.15.2-cp37-none-win_amd64.whl", hash = "sha256:7ef789f83eb0f9baeb4d09a86cd639c0a5518528f9992f38b28e819df397eb06"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4fe1f74a902bee74a3b25aff180fbfbf4f8b444ab37c4d496af7afd13a784ed2"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c4b89038a684f40a6b15d6b09f49650ac64d951ad0f2a3ea9169687bbf2a8ba"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d05a1b06f986d41aed5f2de464c003004b2df8aaf66f2b7628254bcbfb72a438"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:508711a108684111ec8af89d3a9e9e08755247eda27d0ba5e3c50e9da1600f6d"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:daa348f02d15160cb35439098ac96e3a53bacf35885072611cd9e5be7d333daa"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:494fdbe5932d3416de2a85fc2470b797e6f3226c12845cadf054dd906afd0442"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2d60f5246f4da9373f75ff18d64c69cbf60c3bca597290cea01059c336d2470"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93268e788825f52de4c7bdcb6ebc1fcd4a5442c02e730faa9b6b08f23ead0e24"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6fc7083ab404019fc9acafe78662c192673c1e696bd598d16dc005bd663a5cf9"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e39b41e5531d6b2122a77532dbea60e171ef87a3820b5a3888daa847df4153"}, + {file = "tokenizers-0.15.2-cp38-none-win32.whl", hash = "sha256:06cd0487b1cbfabefb2cc52fbd6b1f8d4c37799bd6c6e1641281adaa6b2504a7"}, + {file = "tokenizers-0.15.2-cp38-none-win_amd64.whl", hash = "sha256:5179c271aa5de9c71712e31cb5a79e436ecd0d7532a408fa42a8dbfa4bc23fd9"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:82f8652a74cc107052328b87ea8b34291c0f55b96d8fb261b3880216a9f9e48e"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:02458bee6f5f3139f1ebbb6d042b283af712c0981f5bc50edf771d6b762d5e4f"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9a09cd26cca2e1c349f91aa665309ddb48d71636370749414fbf67bc83c5343"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158be8ea8554e5ed69acc1ce3fbb23a06060bd4bbb09029431ad6b9a466a7121"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ddba9a2b0c8c81633eca0bb2e1aa5b3a15362b1277f1ae64176d0f6eba78ab1"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ef5dd1d39797044642dbe53eb2bc56435308432e9c7907728da74c69ee2adca"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:454c203164e07a860dbeb3b1f4a733be52b0edbb4dd2e5bd75023ffa8b49403a"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cf6b7f1d4dc59af960e6ffdc4faffe6460bbfa8dce27a58bf75755ffdb2526d"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2ef09bbc16519f6c25d0c7fc0c6a33a6f62923e263c9d7cca4e58b8c61572afb"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c9a2ebdd2ad4ec7a68e7615086e633857c85e2f18025bd05d2a4399e6c5f7169"}, + {file = "tokenizers-0.15.2-cp39-none-win32.whl", hash = "sha256:918fbb0eab96fe08e72a8c2b5461e9cce95585d82a58688e7f01c2bd546c79d0"}, + {file = "tokenizers-0.15.2-cp39-none-win_amd64.whl", hash = "sha256:524e60da0135e106b254bd71f0659be9f89d83f006ea9093ce4d1fab498c6d0d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6a9b648a58281c4672212fab04e60648fde574877d0139cd4b4f93fe28ca8944"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7c7d18b733be6bbca8a55084027f7be428c947ddf871c500ee603e375013ffba"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:13ca3611de8d9ddfbc4dc39ef54ab1d2d4aaa114ac8727dfdc6a6ec4be017378"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:237d1bf3361cf2e6463e6c140628e6406766e8b27274f5fcc62c747ae3c6f094"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67a0fe1e49e60c664915e9fb6b0cb19bac082ab1f309188230e4b2920230edb3"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4e022fe65e99230b8fd89ebdfea138c24421f91c1a4f4781a8f5016fd5cdfb4d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d857be2df69763362ac699f8b251a8cd3fac9d21893de129bc788f8baaef2693"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:708bb3e4283177236309e698da5fcd0879ce8fd37457d7c266d16b550bcbbd18"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c35e09e9899b72a76e762f9854e8750213f67567787d45f37ce06daf57ca78"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1257f4394be0d3b00de8c9e840ca5601d0a4a8438361ce9c2b05c7d25f6057b"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02272fe48280e0293a04245ca5d919b2c94a48b408b55e858feae9618138aeda"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dc3ad9ebc76eabe8b1d7c04d38be884b8f9d60c0cdc09b0aa4e3bcf746de0388"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:32e16bdeffa7c4f46bf2152172ca511808b952701d13e7c18833c0b73cb5c23f"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fb16ba563d59003028b678d2361a27f7e4ae0ab29c7a80690efa20d829c81fdb"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:2277c36d2d6cdb7876c274547921a42425b6810d38354327dd65a8009acf870c"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cf75d32e8d250781940d07f7eece253f2fe9ecdb1dc7ba6e3833fa17b82fcbc"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1b3b31884dc8e9b21508bb76da80ebf7308fdb947a17affce815665d5c4d028"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10122d8d8e30afb43bb1fe21a3619f62c3e2574bff2699cf8af8b0b6c5dc4a3"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d88b96ff0fe8e91f6ef01ba50b0d71db5017fa4e3b1d99681cec89a85faf7bf7"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:37aaec5a52e959892870a7c47cef80c53797c0db9149d458460f4f31e2fb250e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e2ea752f2b0fe96eb6e2f3adbbf4d72aaa1272079b0dfa1145507bd6a5d537e6"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b19a808d8799fda23504a5cd31d2f58e6f52f140380082b352f877017d6342b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c86e5e068ac8b19204419ed8ca90f9d25db20578f5881e337d203b314f4104"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de19c4dc503c612847edf833c82e9f73cd79926a384af9d801dcf93f110cea4e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea09acd2fe3324174063d61ad620dec3bcf042b495515f27f638270a7d466e8b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cf27fd43472e07b57cf420eee1e814549203d56de00b5af8659cb99885472f1f"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7ca22bd897537a0080521445d91a58886c8c04084a6a19e6c78c586e0cfa92a5"}, + {file = "tokenizers-0.15.2.tar.gz", hash = "sha256:e6e9c6e019dd5484be5beafc775ae6c925f4c69a3487040ed09b45e13df2cb91"}, +] + +[package.dependencies] +huggingface_hub = ">=0.16.4,<1.0" + +[package.extras] +dev = ["tokenizers[testing]"] +docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"] +testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] + [[package]] name = "toml" version = "0.10.2" @@ -5197,6 +7114,42 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "trio" +version = "0.25.0" +description = "A friendly Python library for async concurrency and I/O" +optional = false +python-versions = ">=3.8" +files = [ + {file = "trio-0.25.0-py3-none-any.whl", hash = "sha256:e6458efe29cc543e557a91e614e2b51710eba2961669329ce9c862d50c6e8e81"}, + {file = "trio-0.25.0.tar.gz", hash = "sha256:9b41f5993ad2c0e5f62d0acca320ec657fdb6b2a2c22b8c7aed6caf154475c4e"}, +] + +[package.dependencies] +attrs = ">=23.2.0" +cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""} +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = "*" +outcome = "*" +sniffio = ">=1.3.0" +sortedcontainers = "*" + +[[package]] +name = "trio-websocket" +version = "0.11.1" +description = "WebSocket library for Trio" +optional = false +python-versions = ">=3.7" +files = [ + {file = "trio-websocket-0.11.1.tar.gz", hash = "sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f"}, + {file = "trio_websocket-0.11.1-py3-none-any.whl", hash = "sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +trio = ">=0.11" +wsproto = ">=0.14" + [[package]] name = "trove-classifiers" version = "2024.3.25" @@ -5242,13 +7195,13 @@ files = [ [[package]] name = "types-requests" -version = "2.31.0.20240402" +version = "2.31.0.20240403" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.31.0.20240402.tar.gz", hash = "sha256:e5c09a202f8ae79cd6ffbbba2203b6c3775a83126283bb2a6abbc129abc02a12"}, - {file = "types_requests-2.31.0.20240402-py3-none-any.whl", hash = "sha256:bd7eb7102168d4b5b489f15cdd9842b63ab7fe56aa82a0589fa595b94195acf4"}, + {file = "types-requests-2.31.0.20240403.tar.gz", hash = "sha256:e1e0cd0b655334f39d9f872b68a1310f0e343647688bf2cee932ec4c2b04de59"}, + {file = "types_requests-2.31.0.20240403-py3-none-any.whl", hash = "sha256:06abf6a68f5c4f2a62f6bb006672dfb26ed50ccbfddb281e1ee6f09a65707d5d"}, ] [package.dependencies] @@ -5302,12 +7255,85 @@ files = [ {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] +[package.dependencies] +pysocks = {version = ">=1.5.6,<1.5.7 || >1.5.7,<2.0", optional = true, markers = "extra == \"socks\""} + [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "uvicorn" +version = "0.29.0" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, + {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} +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\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "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" +version = "0.19.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, + {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, +] + +[package.extras] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + [[package]] name = "virtualenv" version = "20.25.1" @@ -5369,6 +7395,93 @@ files = [ [package.extras] watchmedo = ["PyYAML (>=3.10)"] +[[package]] +name = "watchfiles" +version = "0.21.0" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, + {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, + {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, + {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, + {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, + {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, + {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, + {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, + {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, + {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, + {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, + {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, + {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, + {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, +] + +[package.dependencies] +anyio = ">=3.0.0" + [[package]] name = "web3" version = "6.16.0" @@ -5404,6 +7517,22 @@ ipfs = ["ipfshttpclient (==0.8.0a2)"] linter = ["black (>=22.1.0)", "flake8 (==3.8.3)", "isort (>=5.11.0)", "mypy (==1.4.1)", "types-protobuf (==3.19.13)", "types-requests (>=2.26.1)", "types-setuptools (>=57.4.4)"] tester = ["eth-tester[py-evm] (==v0.9.1-b.2)", "py-geth (>=3.14.0)"] +[[package]] +name = "websocket-client" +version = "1.7.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + [[package]] name = "websockets" version = "12.0" @@ -5595,6 +7724,20 @@ files = [ {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] +[[package]] +name = "wsproto" +version = "1.2.0" +description = "WebSockets state-machine based protocol implementation" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, + {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, +] + +[package.dependencies] +h11 = ">=0.9.0,<1" + [[package]] name = "xattr" version = "1.1.0" @@ -5771,6 +7914,41 @@ files = [ idna = ">=2.0" multidict = ">=4.0" +[[package]] +name = "youtube-transcript-api" +version = "0.6.2" +description = "This is an python API which allows you to get the transcripts/subtitles for a given YouTube video. It also works for automatically generated subtitles, supports translating subtitles and it does not require a headless browser, like other selenium based solutions do!" +optional = false +python-versions = "*" +files = [ + {file = "youtube_transcript_api-0.6.2-py3-none-any.whl", hash = "sha256:019dbf265c6a68a0591c513fff25ed5a116ce6525832aefdfb34d4df5567121c"}, + {file = "youtube_transcript_api-0.6.2.tar.gz", hash = "sha256:cad223d7620633cec44f657646bffc8bbc5598bd8e70b1ad2fa8277dec305eb7"}, +] + +[package.dependencies] +requests = "*" + +[[package]] +name = "yt-dlp" +version = "2023.12.30" +description = "A youtube-dl fork with additional features and patches" +optional = false +python-versions = ">=3.8" +files = [ + {file = "yt-dlp-2023.12.30.tar.gz", hash = "sha256:a11862e57721b0a0f0883dfeb5a4d79ba213a2d4c45e1880e9fd70f8e6570c38"}, + {file = "yt_dlp-2023.12.30-py2.py3-none-any.whl", hash = "sha256:c00d9a71d64472ad441bcaa1ec0c3797d6e60c9f934f270096a96fe51657e7b3"}, +] + +[package.dependencies] +brotli = {version = "*", markers = "implementation_name == \"cpython\""} +brotlicffi = {version = "*", markers = "implementation_name != \"cpython\""} +certifi = "*" +mutagen = "*" +pycryptodomex = "*" +requests = ">=2.31.0,<3" +urllib3 = ">=1.26.17,<3" +websockets = ">=12.0" + [[package]] name = "zipp" version = "3.18.1" @@ -5789,4 +7967,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "~3.10.0" -content-hash = "831d26b74a2fe003a9b9085da4bb442c53a25c2cf2bf0cd6f35bbba98d7191ec" +content-hash = "65159b3a3a831990ec60713ab37d9f45e90f932fdcf00b3ff0cc8b7b08d5ad21" From 3f18c0ccfc1d5e06efec61b11a09a4acf70b9edc Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Thu, 4 Apr 2024 18:33:46 -0300 Subject: [PATCH 05/17] Added benchmark to agent_subquestions --- .../crewai_subsequential_agent/benchmark.py | 157 ++++++++++++++++++ .../crewai_agent_subquestions.py | 8 +- .../crewai_subsequential_agent/deploy.py | 5 +- .../crewai_subsequential_agent/prompts.py | 17 +- .../agents/known_outcome_agent/deploy.py | 5 +- prediction_market_agent/agents/utils.py | 5 + 6 files changed, 170 insertions(+), 27 deletions(-) create mode 100644 prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py create mode 100644 prediction_market_agent/agents/utils.py diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py new file mode 100644 index 00000000..8c4e2d8f --- /dev/null +++ b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py @@ -0,0 +1,157 @@ +import time +from datetime import timedelta, datetime + +from dotenv import load_dotenv +from prediction_market_agent_tooling.benchmark.agents import AbstractBenchmarkedAgent +from prediction_market_agent_tooling.benchmark.benchmark import Benchmarker +from prediction_market_agent_tooling.benchmark.utils import ( + OutcomePrediction, + Prediction, Market, +) +from prediction_market_agent_tooling.gtypes import Probability +from prediction_market_agent_tooling.markets.markets import AgentMarket +from prediction_market_agent_tooling.tools.utils import utcnow +from pydantic import BaseModel + +from prediction_market_agent.agents.crewai_subsequential_agent.crewai_agent_subquestions import CrewAIAgentSubquestions +from prediction_market_agent.agents.known_outcome_agent.known_outcome_agent import ( + Result, + get_known_outcome, +) + + +def build_market_from_question_without_validation(question: str) -> Market: + return Market.model_construct(url=question,question=question, p_yes = 0.5) + + +def build_binary_agent_market_from_question(question: str) -> AgentMarket: + return AgentMarket( + url="", + id=question, + question=question, + p_yes=Probability(0.5), + volume=None, + created_time=datetime(2024,1,1), + close_time=None, + resolution=None, + outcomes=["YES", "NO"], + ) + +class QuestionAndAnswer(BaseModel): + question: str + result: Result + bet_correct: bool + + + +class CrewAIAgentSubquestionsBenchmark(AbstractBenchmarkedAgent): + def __init__( + self, + agent_name: str, + max_workers: int, + model: str, + max_tries: int, + ) -> None: + self.model = model + self.max_tries = max_tries + self.agent = CrewAIAgentSubquestions() + super().__init__(agent_name=agent_name, max_workers=max_workers) + + + def predict(self, market_question: str) -> Prediction: + + market = build_binary_agent_market_from_question(market_question) + result = self.agent.answer_binary_market(market) + + answer = get_known_outcome( + model=self.model, + question=market_question, + max_tries=self.max_tries, + ) + print(f"Answered {market_question=} with {answer.result=}, {answer.reasoning=}") + if not answer.has_known_result(): + return Prediction( + is_predictable=False, + outcome_prediction=None, + ) + else: + return Prediction( + is_predictable=True, + outcome_prediction=OutcomePrediction( + p_yes=answer.result.to_p_yes(), + confidence=1.0, + info_utility=None, + ), + ) + + +if __name__ == "__main__": + load_dotenv() + tomorrow_str = (utcnow() + timedelta(days=1)).strftime("%d %B %Y") + + # Fetch example questions which our agents answered in the past. + questions = [ + QuestionAndAnswer( + question="Will the stock price of Donald Trump's media company exceed $100 on 1 April 2024?", + result=Result.NO, + bet_correct=True + ), + QuestionAndAnswer( + question="Will Andy Murray return to professional tennis from his ankle injury on or before 31 March 2024?", + result=Result.NO, + bet_correct=True + ), + QuestionAndAnswer( + question="Will any legislation be signed by President Biden that could potentially lead to the ban of TikTok by 1 April 2024?", + result=Result.YES, + bet_correct=False + ), + QuestionAndAnswer( + question="Will the United States v. Apple case have a verdict by 1 April 2024?", + result=Result.NO, + bet_correct=True + ), + QuestionAndAnswer( + question="Will Microsoft Teams launch the announced Copilot AI features by 1 April 2024?", + result=Result.YES, + bet_correct=True + ), + QuestionAndAnswer( + question="Will the Francis Scott Key Bridge in Baltimore be fully rebuilt by 2 April 2024?", + result=Result.NO, + bet_correct=True + ), + QuestionAndAnswer( + question="Will iOS 18 break the iPhone's iconic app grid by 1 April 2024?", + result=Result.YES, + bet_correct=False + ), + QuestionAndAnswer( + question="Will a winner of the Mega Millions jackpot be announced by 26 March 2024?", + result=Result.YES, + bet_correct=False + ), + ] + + benchmarker = Benchmarker( + markets=[build_market_from_question_without_validation(q.question) for q in questions][:1], + agents=[ + CrewAIAgentSubquestionsBenchmark( + agent_name="subsequential_questions", + model="gpt-3.5-turbo-0125", + max_tries=3, + max_workers=1, + ), + ], + ) + benchmarker.run_agents() + md = benchmarker.generate_markdown_report() + + output = f"./subsequential_questions_agent_benchmark_report.{int(time.time())}.md" + with open(output, "w") as f: + print(f"Writing benchmark report to: {output}") + f.write(md) + + # Check all predictions are correct, i.e. mean-squared-error == 0 + metrics = benchmarker.compute_metrics() + assert metrics["MSE for `p_yes`"][0] == 0.0 diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py index cd112f41..da1f9126 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py @@ -123,12 +123,8 @@ def generate_final_decision(self, outcomes_with_probabilities) -> ProbabilityOut def answer_binary_market(self, market: AgentMarket) -> bool: - # outcomes = self.split_research_into_outcomes(market.question) - - outcomes = Outcomes(outcomes=['Donald Trump wins the 2024 presidential election', - 'Joe Biden wins the 2024 presidential election', - 'An independent candidate wins the 2024 presidential election', - 'None of the above candidates win the 2024 presidential election, and someone else comes forward as the winner']) + outcomes = self.split_research_into_outcomes(market.question) + print ("outcomes ", outcomes) outcomes_with_probs = [] task_map = {} diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py index f13e237f..e65a0337 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py @@ -9,10 +9,7 @@ from prediction_market_agent.agents.known_outcome_agent.known_outcome_agent import ( Result, ) - - -def market_is_saturated(market: AgentMarket) -> bool: - return market.p_yes > 0.95 or market.p_no > 0.95 +from prediction_market_agent.agents.utils import market_is_saturated class DeployableThinkThoroughlyAgent(DeployableAgent): diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py b/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py index ddf23849..948495eb 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py @@ -1,5 +1,4 @@ -# ToDo - Test both research prompts -CREATE_OUTCOMES_FROM_SCENARIO_PROMPT = """ +CREATE_OUTCOMES_FROM_SCENARIO_PROMPT = """ You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes. You should break down the SCENARIO into a list of possible outcomes. @@ -22,13 +21,6 @@ [SCENARIO] {scenario} """ -# research_prompt2 = """ -# You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes. -# You should break down the SCENARIO into a list of possible outcomes. - -# [SCENARIO] -# {scenario} -# """ CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT = ''' A list containing multiple bullet points. Each bullet point should start with '-'. @@ -56,7 +48,6 @@ SENTENCE: {sentence} """ -# ToDo - Test both research prompts RESEARCH_OUTCOME_PROMPT = """ Research and report on the following sentence: {sentence} @@ -91,8 +82,8 @@ OUTCOME_TO_ASSESS: {outcome_to_assess} OUTCOMES_WITH_PROBABILITIES: {outcomes_with_probabilities} -""" -PROBABILITY_CLASS_OUTPUT=""" +""" +PROBABILITY_CLASS_OUTPUT = """ Your response should be a JSON string containing the following keys: - "decision": The decision you made. Either `y` (for `Yes`) or `n` (for `No`). - "p_yes": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability). @@ -104,4 +95,4 @@ Format your response in JSON format, including the keys "decision", "p_yes", "p_no" and "confidence". Only output the JSON-formatted string, nothing else. -""" \ No newline at end of file +""" diff --git a/prediction_market_agent/agents/known_outcome_agent/deploy.py b/prediction_market_agent/agents/known_outcome_agent/deploy.py index deb96296..926894df 100644 --- a/prediction_market_agent/agents/known_outcome_agent/deploy.py +++ b/prediction_market_agent/agents/known_outcome_agent/deploy.py @@ -19,10 +19,7 @@ Result, get_known_outcome, ) - - -def market_is_saturated(market: AgentMarket) -> bool: - return market.p_yes > 0.95 or market.p_no > 0.95 +from prediction_market_agent.agents.utils import market_is_saturated class DeployableKnownOutcomeAgent(DeployableAgent): diff --git a/prediction_market_agent/agents/utils.py b/prediction_market_agent/agents/utils.py new file mode 100644 index 00000000..d6e5ef5a --- /dev/null +++ b/prediction_market_agent/agents/utils.py @@ -0,0 +1,5 @@ +from prediction_market_agent_tooling.markets.agent_market import AgentMarket + + +def market_is_saturated(market: AgentMarket) -> bool: + return market.p_yes > 0.95 or market.p_no > 0.95 From a89ec316172ae20e6e1616827b81ffac25751b4c Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Thu, 4 Apr 2024 18:52:35 -0300 Subject: [PATCH 06/17] Finishing touches --- poetry.lock | 2 +- .../crewai_subsequential_agent/benchmark.py | 30 ++++++++++--------- .../crewai_agent_subquestions.py | 12 +++----- .../agents/known_outcome_agent/benchmark.py | 1 + .../agents/known_outcome_agent/deploy.py | 1 + pyproject.toml | 1 - 6 files changed, 23 insertions(+), 24 deletions(-) diff --git a/poetry.lock b/poetry.lock index c609f05d..802cc96a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -7967,4 +7967,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "~3.10.0" -content-hash = "65159b3a3a831990ec60713ab37d9f45e90f932fdcf00b3ff0cc8b7b08d5ad21" +content-hash = "9fc751ad88a4010f1df6a07363cfa7dcf9a7334e0e72bad987156c9385692eec" diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py index 8c4e2d8f..30971597 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py @@ -6,9 +6,9 @@ from prediction_market_agent_tooling.benchmark.benchmark import Benchmarker from prediction_market_agent_tooling.benchmark.utils import ( OutcomePrediction, - Prediction, Market, + Prediction, ) -from prediction_market_agent_tooling.gtypes import Probability +from prediction_market_agent_tooling.gtypes import Probability, DatetimeWithTimezone from prediction_market_agent_tooling.markets.markets import AgentMarket from prediction_market_agent_tooling.tools.utils import utcnow from pydantic import BaseModel @@ -21,43 +21,45 @@ def build_market_from_question_without_validation(question: str) -> Market: - return Market.model_construct(url=question,question=question, p_yes = 0.5) + return Market(url=question, + question=question, p_yes=0.5, + source=MarketSource.MANIFOLD, + volume=0, + created_time=DatetimeWithTimezone(datetime(2024, 1, 1)), + close_time=DatetimeWithTimezone(datetime(2024, 3, 15)) + ) def build_binary_agent_market_from_question(question: str) -> AgentMarket: return AgentMarket( - url="", id=question, question=question, p_yes=Probability(0.5), - volume=None, - created_time=datetime(2024,1,1), - close_time=None, + created_time=datetime(2024, 1, 1), resolution=None, outcomes=["YES", "NO"], ) + class QuestionAndAnswer(BaseModel): question: str result: Result bet_correct: bool - class CrewAIAgentSubquestionsBenchmark(AbstractBenchmarkedAgent): def __init__( - self, - agent_name: str, - max_workers: int, - model: str, - max_tries: int, + self, + agent_name: str, + max_workers: int, + model: str, + max_tries: int, ) -> None: self.model = model self.max_tries = max_tries self.agent = CrewAIAgentSubquestions() super().__init__(agent_name=agent_name, max_workers=max_workers) - def predict(self, market_question: str) -> Prediction: market = build_binary_agent_market_from_question(market_question) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py index da1f9126..bbc4509c 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py @@ -1,10 +1,9 @@ +import typing as t + from crewai import Agent, Task, Process, Crew from crewai_tools import SerperDevTool -from langchain_community.callbacks.manager import get_openai_callback from prediction_market_agent_tooling.markets.agent_market import AgentMarket from pydantic import BaseModel -from tqdm import tqdm -import typing as t from prediction_market_agent.agents.abstract import AbstractAgent from prediction_market_agent.agents.crewai_subsequential_agent.prompts import * @@ -23,9 +22,6 @@ class ProbabilityOutput(BaseModel): confidence: float -get_openai_callback() - - class CrewAIAgentSubquestions(AbstractAgent): def __init__(self) -> None: self.researcher = Agent( @@ -101,7 +97,7 @@ def generate_prediction_for_one_outcome(self, sentence: str) -> ProbabilityOutpu result = crew.kickoff(inputs={'sentence': sentence}) return ProbabilityOutput.model_validate_json(result) - def generate_final_decision(self, outcomes_with_probabilities) -> ProbabilityOutput: + def generate_final_decision(self, outcomes_with_probabilities: list[t.Tuple[str, ProbabilityOutput]]) -> ProbabilityOutput: task_final_decision = Task( description=(FINAL_DECISION_PROMPT), agent=self.predictor, @@ -128,7 +124,7 @@ def answer_binary_market(self, market: AgentMarket) -> bool: outcomes_with_probs = [] task_map = {} - for outcome in tqdm(outcomes.outcomes): + for outcome in outcomes.outcomes: tasks_for_outcome = self.build_tasks_for_outcome(input_dict={"sentence": outcome}) task_map[outcome] = tasks_for_outcome diff --git a/prediction_market_agent/agents/known_outcome_agent/benchmark.py b/prediction_market_agent/agents/known_outcome_agent/benchmark.py index 5fe9008b..6d9f68a2 100644 --- a/prediction_market_agent/agents/known_outcome_agent/benchmark.py +++ b/prediction_market_agent/agents/known_outcome_agent/benchmark.py @@ -1,3 +1,4 @@ +# type: ignore import time import typing as t from datetime import timedelta diff --git a/prediction_market_agent/agents/known_outcome_agent/deploy.py b/prediction_market_agent/agents/known_outcome_agent/deploy.py index 926894df..2df0592c 100644 --- a/prediction_market_agent/agents/known_outcome_agent/deploy.py +++ b/prediction_market_agent/agents/known_outcome_agent/deploy.py @@ -1,3 +1,4 @@ +# type: ignore import getpass import random from decimal import Decimal diff --git a/pyproject.toml b/pyproject.toml index e02f2895..c7caf642 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,7 +41,6 @@ autoflake = "^2.2.1" isort = "^5.13.2" markdownify = "^0.11.6" tavily-python = "^0.3.1" -tqdm = "^4.66.2" [build-system] requires = ["poetry-core"] From 996f94a3d1e900f5f929023b0f682664065dcb7f Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Fri, 5 Apr 2024 15:29:39 -0300 Subject: [PATCH 07/17] Fixing model gpt-4-turbo-preview --- .../crewai_agent_subquestions.py | 20 ++++++++----- .../crewai_subsequential_agent/deploy.py | 4 +++ prediction_market_agent/tools/crewai_tools.py | 30 +++++++++++++++++++ 3 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 prediction_market_agent/tools/crewai_tools.py diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py index bbc4509c..81dcb245 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py @@ -2,13 +2,16 @@ from crewai import Agent, Task, Process, Crew from crewai_tools import SerperDevTool +from langchain_openai import OpenAI from prediction_market_agent_tooling.markets.agent_market import AgentMarket from pydantic import BaseModel from prediction_market_agent.agents.abstract import AbstractAgent from prediction_market_agent.agents.crewai_subsequential_agent.prompts import * +from prediction_market_agent.tools.crewai_tools import TavilyDevTool -search_tool = SerperDevTool() +#search_tool = SerperDevTool() +tavily_search = TavilyDevTool() class Outcomes(BaseModel): @@ -24,13 +27,14 @@ class ProbabilityOutput(BaseModel): class CrewAIAgentSubquestions(AbstractAgent): def __init__(self) -> None: + # openai_model_name as str automatically interpreted by CrewAI, else create LLM object. self.researcher = Agent( role="Research Analyst", goal="Research and report on some future event, giving high quality and nuanced analysis", backstory="You are a senior research analyst who is adept at researching and reporting on future events.", verbose=True, allow_delegation=False, - tools=[search_tool], + tools=[tavily_search], ) self.predictor = Agent( @@ -68,7 +72,7 @@ def build_tasks_for_outcome(self, input_dict: dict[str, t.Any] = {}) -> list[Tas expected_output=PROBABILITY_CLASS_OUTPUT, agent=self.predictor, output_json=ProbabilityOutput, - async_execution=True, + async_execution=False, context=[task_research_one_outcome] ) @@ -99,9 +103,9 @@ def generate_prediction_for_one_outcome(self, sentence: str) -> ProbabilityOutpu def generate_final_decision(self, outcomes_with_probabilities: list[t.Tuple[str, ProbabilityOutput]]) -> ProbabilityOutput: task_final_decision = Task( - description=(FINAL_DECISION_PROMPT), + description=FINAL_DECISION_PROMPT, agent=self.predictor, - expected_output=(PROBABILITY_CLASS_OUTPUT), + expected_output=PROBABILITY_CLASS_OUTPUT, output_json=ProbabilityOutput, ) @@ -111,11 +115,11 @@ def generate_final_decision(self, outcomes_with_probabilities: list[t.Tuple[str, verbose=2, ) - result = crew.kickoff(inputs={'outcomes_with_probabilities': + crew.kickoff(inputs={'outcomes_with_probabilities': [(i[0], i[1].dict()) for i in outcomes_with_probabilities], 'number_of_outcomes': len(outcomes_with_probabilities), 'outcome_to_assess': outcomes_with_probabilities[0][0]}) - return ProbabilityOutput.model_validate_json(result) + return ProbabilityOutput.model_validate_json(task_final_decision.output.raw_output) def answer_binary_market(self, market: AgentMarket) -> bool: @@ -134,8 +138,10 @@ def answer_binary_market(self, market: AgentMarket) -> bool: agents=[self.researcher, self.predictor], tasks=all_tasks, verbose=2, + process=Process.sequential ) + # crew.kickoff doesn't finish all async tasks when done. crew.kickoff() # We parse individual task results to build outcomes_with_probs diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py index e65a0337..356859c0 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py @@ -1,5 +1,8 @@ +import os from decimal import Decimal import random + +from langchain_openai import OpenAI from prediction_market_agent_tooling.deploy.agent import DeployableAgent from prediction_market_agent_tooling.markets.agent_market import AgentMarket from prediction_market_agent_tooling.markets.data_models import BetAmount, Currency @@ -37,6 +40,7 @@ def pick_markets(self, markets: list[AgentMarket]) -> list[AgentMarket]: def answer_binary_market(self, market: AgentMarket) -> bool: # The answer has already been determined in `pick_markets` so we just # return it here. + os.environ["OPENAI_MODEL_NAME"]="gpt-4-turbo-preview" agent = CrewAIAgentSubquestions() result = agent.answer_binary_market(market) return result diff --git a/prediction_market_agent/tools/crewai_tools.py b/prediction_market_agent/tools/crewai_tools.py new file mode 100644 index 00000000..82fd64aa --- /dev/null +++ b/prediction_market_agent/tools/crewai_tools.py @@ -0,0 +1,30 @@ +import os +from typing import Type, Any + +from crewai_tools.tools.base_tool import BaseTool +from langchain_community.utilities.tavily_search import TavilySearchAPIWrapper +from pydantic.v1 import BaseModel, Field + + +class TavilyDevToolSchema(BaseModel): + """Input for TXTSearchTool.""" + search_query: str = Field(..., description="Mandatory search query you want to use to search the internet") + +class TavilyDevTool(BaseTool): + name: str = "Search the internet" + # From Langchain's Tavily integration + description: str = """"A search engine optimized for comprehensive, accurate, \ +and trusted results. Useful for when you need to answer questions \ +about current events or about recent information. \ +Input should be a search query. \ +If the user is asking about something that you don't know about, \ +you should probably use this tool to see if that can provide any information.""" + args_schema: Type[BaseModel] = TavilyDevToolSchema + + def _run( + self, + search_query: str, + **kwargs: Any, + ) -> Any: + + return TavilySearchAPIWrapper(tavily_api_key = os.environ['TAVILY_API_KEY']).results(query=search_query) \ No newline at end of file From 766380e33b198d439e7525c380ffcf341271c107 Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Fri, 5 Apr 2024 20:03:36 -0300 Subject: [PATCH 08/17] Adding benchmark.py EVO-style --- .../crewai_subsequential_agent/benchmark.py | 162 ++++++------------ .../crewai_agent_subquestions.py | 12 +- .../crewai_subsequential_agent/deploy.py | 2 +- .../crewai_subsequential_agent/prompts.py | 11 +- 4 files changed, 65 insertions(+), 122 deletions(-) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py index 30971597..cab1deb5 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py @@ -1,33 +1,21 @@ -import time -from datetime import timedelta, datetime +import typing as t +from datetime import datetime +import typer from dotenv import load_dotenv -from prediction_market_agent_tooling.benchmark.agents import AbstractBenchmarkedAgent +from prediction_market_agent_tooling.benchmark.agents import ( + AbstractBenchmarkedAgent, RandomAgent, FixedAgent, +) from prediction_market_agent_tooling.benchmark.benchmark import Benchmarker from prediction_market_agent_tooling.benchmark.utils import ( OutcomePrediction, Prediction, ) -from prediction_market_agent_tooling.gtypes import Probability, DatetimeWithTimezone -from prediction_market_agent_tooling.markets.markets import AgentMarket -from prediction_market_agent_tooling.tools.utils import utcnow -from pydantic import BaseModel +from prediction_market_agent_tooling.gtypes import Probability +from prediction_market_agent_tooling.markets.agent_market import SortBy, FilterBy, AgentMarket +from prediction_market_agent_tooling.markets.markets import get_binary_markets, MarketType from prediction_market_agent.agents.crewai_subsequential_agent.crewai_agent_subquestions import CrewAIAgentSubquestions -from prediction_market_agent.agents.known_outcome_agent.known_outcome_agent import ( - Result, - get_known_outcome, -) - - -def build_market_from_question_without_validation(question: str) -> Market: - return Market(url=question, - question=question, p_yes=0.5, - source=MarketSource.MANIFOLD, - volume=0, - created_time=DatetimeWithTimezone(datetime(2024, 1, 1)), - close_time=DatetimeWithTimezone(datetime(2024, 3, 15)) - ) def build_binary_agent_market_from_question(question: str) -> AgentMarket: @@ -41,12 +29,6 @@ def build_binary_agent_market_from_question(question: str) -> AgentMarket: ) -class QuestionAndAnswer(BaseModel): - question: str - result: Result - bet_correct: bool - - class CrewAIAgentSubquestionsBenchmark(AbstractBenchmarkedAgent): def __init__( self, @@ -61,99 +43,61 @@ def __init__( super().__init__(agent_name=agent_name, max_workers=max_workers) def predict(self, market_question: str) -> Prediction: - - market = build_binary_agent_market_from_question(market_question) - result = self.agent.answer_binary_market(market) - - answer = get_known_outcome( - model=self.model, - question=market_question, - max_tries=self.max_tries, - ) - print(f"Answered {market_question=} with {answer.result=}, {answer.reasoning=}") - if not answer.has_known_result(): - return Prediction( - is_predictable=False, - outcome_prediction=None, - ) - else: - return Prediction( - is_predictable=True, - outcome_prediction=OutcomePrediction( - p_yes=answer.result.to_p_yes(), - confidence=1.0, - info_utility=None, - ), - ) - - -if __name__ == "__main__": + result = self.agent.answer_binary_market(market_question) + return Prediction(outcome_prediction=OutcomePrediction( + p_yes=result.p_yes, + confidence=result.confidence)) + + +def main( + n: int = 10, + output: str = "./benchmark_report.md", + reference: MarketType = MarketType.MANIFOLD, + filter: FilterBy = FilterBy.OPEN, + sort: SortBy = SortBy.NONE, + max_workers: int = 1, + cache_path: t.Optional[str] = "predictions_cache.json", + only_cached: bool = False, +) -> None: + """ + Polymarket usually contains higher quality questions, + but on Manifold, additionally to filtering by MarketFilter.resolved, you can sort by MarketSort.newest. + """ load_dotenv() - tomorrow_str = (utcnow() + timedelta(days=1)).strftime("%d %B %Y") + markets = get_binary_markets(n, reference, filter_by=filter, sort_by=sort) + markets = markets[:1] + markets_deduplicated = list(({m.question: m for m in markets}.values())) + if len(markets) != len(markets_deduplicated): + print( + f"Warning: Deduplicated markets from {len(markets)} to {len(markets_deduplicated)}." + ) - # Fetch example questions which our agents answered in the past. - questions = [ - QuestionAndAnswer( - question="Will the stock price of Donald Trump's media company exceed $100 on 1 April 2024?", - result=Result.NO, - bet_correct=True - ), - QuestionAndAnswer( - question="Will Andy Murray return to professional tennis from his ankle injury on or before 31 March 2024?", - result=Result.NO, - bet_correct=True - ), - QuestionAndAnswer( - question="Will any legislation be signed by President Biden that could potentially lead to the ban of TikTok by 1 April 2024?", - result=Result.YES, - bet_correct=False - ), - QuestionAndAnswer( - question="Will the United States v. Apple case have a verdict by 1 April 2024?", - result=Result.NO, - bet_correct=True - ), - QuestionAndAnswer( - question="Will Microsoft Teams launch the announced Copilot AI features by 1 April 2024?", - result=Result.YES, - bet_correct=True - ), - QuestionAndAnswer( - question="Will the Francis Scott Key Bridge in Baltimore be fully rebuilt by 2 April 2024?", - result=Result.NO, - bet_correct=True - ), - QuestionAndAnswer( - question="Will iOS 18 break the iPhone's iconic app grid by 1 April 2024?", - result=Result.YES, - bet_correct=False - ), - QuestionAndAnswer( - question="Will a winner of the Mega Millions jackpot be announced by 26 March 2024?", - result=Result.YES, - bet_correct=False - ), - ] + print(f"Found {len(markets_deduplicated)} markets.") benchmarker = Benchmarker( - markets=[build_market_from_question_without_validation(q.question) for q in questions][:1], + markets=markets_deduplicated, agents=[ - CrewAIAgentSubquestionsBenchmark( - agent_name="subsequential_questions", - model="gpt-3.5-turbo-0125", - max_tries=3, - max_workers=1, + CrewAIAgentSubquestionsBenchmark("subsequential-questions-crewai", max_workers=max_workers, max_tries=3, + model="gpt-3.5-turbo-0125"), + RandomAgent(agent_name="random", max_workers=max_workers), + FixedAgent( + fixed_answer=False, agent_name="fixed-no", max_workers=max_workers + ), + FixedAgent( + fixed_answer=True, agent_name="fixed-yes", max_workers=max_workers ), ], + cache_path=cache_path, + only_cached=only_cached, ) - benchmarker.run_agents() + + benchmarker.run_agents(enable_timing=False) # Caching of search etc. can distort timings md = benchmarker.generate_markdown_report() - output = f"./subsequential_questions_agent_benchmark_report.{int(time.time())}.md" with open(output, "w") as f: print(f"Writing benchmark report to: {output}") f.write(md) - # Check all predictions are correct, i.e. mean-squared-error == 0 - metrics = benchmarker.compute_metrics() - assert metrics["MSE for `p_yes`"][0] == 0.0 + +if __name__ == "__main__": + typer.run(main) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py index 81dcb245..be9fa0dd 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py @@ -1,12 +1,8 @@ import typing as t from crewai import Agent, Task, Process, Crew -from crewai_tools import SerperDevTool -from langchain_openai import OpenAI -from prediction_market_agent_tooling.markets.agent_market import AgentMarket from pydantic import BaseModel -from prediction_market_agent.agents.abstract import AbstractAgent from prediction_market_agent.agents.crewai_subsequential_agent.prompts import * from prediction_market_agent.tools.crewai_tools import TavilyDevTool @@ -25,7 +21,7 @@ class ProbabilityOutput(BaseModel): confidence: float -class CrewAIAgentSubquestions(AbstractAgent): +class CrewAIAgentSubquestions: def __init__(self) -> None: # openai_model_name as str automatically interpreted by CrewAI, else create LLM object. self.researcher = Agent( @@ -121,9 +117,9 @@ def generate_final_decision(self, outcomes_with_probabilities: list[t.Tuple[str, 'outcome_to_assess': outcomes_with_probabilities[0][0]}) return ProbabilityOutput.model_validate_json(task_final_decision.output.raw_output) - def answer_binary_market(self, market: AgentMarket) -> bool: + def answer_binary_market(self, question: str) -> ProbabilityOutput: - outcomes = self.split_research_into_outcomes(market.question) + outcomes = self.split_research_into_outcomes(question) print ("outcomes ", outcomes) outcomes_with_probs = [] @@ -155,4 +151,4 @@ def answer_binary_market(self, market: AgentMarket) -> bool: outcomes_with_probs.append((outcome, prediction_result)) final_answer = self.generate_final_decision(outcomes_with_probs) - return True if final_answer.decision == "y" else False + return final_answer diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py index 356859c0..35c3ca7a 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py @@ -17,7 +17,7 @@ class DeployableThinkThoroughlyAgent(DeployableAgent): # For cheaper credits at this experimental stage - model = "gpt-3.5-turbo" + model = "gpt-4-turbo-preview" def load(self) -> None: self.markets_with_known_outcomes: dict[str, Result] = {} diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py b/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py index 948495eb..9af3ac10 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py @@ -58,6 +58,7 @@ {{"report": }} where is a free text field that contains a well though out justification for the predicition based on the summary of your findings. + The report must not be longer than 7000 characters. """ FINAL_DECISION_PROMPT = """ @@ -83,16 +84,18 @@ OUTCOME_TO_ASSESS: {outcome_to_assess} OUTCOMES_WITH_PROBABILITIES: {outcomes_with_probabilities} """ + PROBABILITY_CLASS_OUTPUT = """ - Your response should be a JSON string containing the following keys: + Your response should be a JSON string containing the following keys: - "decision": The decision you made. Either `y` (for `Yes`) or `n` (for `No`). - "p_yes": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability). - "p_no": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability). - "confidence": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). Confidence can be calculated based on the quality and quantity of data used for the estimation. + A valid JSON string as output could look like the example below: + Example output: {"decision": "y","p_yes": 0.1, "p_no": 0.9, "confidence": 0.4} + Do not use escape quotes and line breaks. Do not output any reasoning, only the JSON object. + Ensure p_yes + p_no equals 1. - - Format your response in JSON format, including the keys "decision", "p_yes", "p_no" and "confidence". - Only output the JSON-formatted string, nothing else. """ From d44a7f09d6f03060e835dd4c8b7a004670d9b376 Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Fri, 5 Apr 2024 20:08:09 -0300 Subject: [PATCH 09/17] Updating dependencies --- poetry.lock | 2170 +++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 2 +- 2 files changed, 2134 insertions(+), 38 deletions(-) diff --git a/poetry.lock b/poetry.lock index cc7fe144..6b42ca7c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -110,6 +110,25 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "alembic" +version = "1.13.1" +description = "A database migration tool for SQLAlchemy." +optional = false +python-versions = ">=3.8" +files = [ + {file = "alembic-1.13.1-py3-none-any.whl", hash = "sha256:2edcc97bed0bd3272611ce3a98d98279e9c209e7186e43e75bbb1b2bdfdbcc43"}, + {file = "alembic-1.13.1.tar.gz", hash = "sha256:4932c8558bf68f2ee92b9bbcb8218671c627064d5b08939437af6d77dc05e595"}, +] + +[package.dependencies] +Mako = "*" +SQLAlchemy = ">=1.3.0" +typing-extensions = ">=4" + +[package.extras] +tz = ["backports.zoneinfo"] + [[package]] name = "altair" version = "5.3.0" @@ -168,6 +187,34 @@ doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphin test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (>=0.23)"] +[[package]] +name = "appdirs" +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 = "*" +files = [ + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, +] + +[[package]] +name = "asgiref" +version = "3.8.1" +description = "ASGI specs, helper code, and adapters" +optional = false +python-versions = ">=3.8" +files = [ + {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, + {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} + +[package.extras] +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] + [[package]] name = "async-timeout" version = "4.0.3" @@ -213,6 +260,57 @@ files = [ pyflakes = ">=3.0.0" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + +[[package]] +name = "bcrypt" +version = "4.1.2" +description = "Modern password hashing for your software and your servers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "bcrypt-4.1.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ac621c093edb28200728a9cca214d7e838529e557027ef0581685909acd28b5e"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea505c97a5c465ab8c3ba75c0805a102ce526695cd6818c6de3b1a38f6f60da1"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57fa9442758da926ed33a91644649d3e340a71e2d0a5a8de064fb621fd5a3326"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb3bd3321517916696233b5e0c67fd7d6281f0ef48e66812db35fc963a422a1c"}, + {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6cad43d8c63f34b26aef462b6f5e44fdcf9860b723d2453b5d391258c4c8e966"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:44290ccc827d3a24604f2c8bcd00d0da349e336e6503656cb8192133e27335e2"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:732b3920a08eacf12f93e6b04ea276c489f1c8fb49344f564cca2adb663b3e4c"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c28973decf4e0e69cee78c68e30a523be441972c826703bb93099868a8ff5b5"}, + {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b8df79979c5bae07f1db22dcc49cc5bccf08a0380ca5c6f391cbb5790355c0b0"}, + {file = "bcrypt-4.1.2-cp37-abi3-win32.whl", hash = "sha256:fbe188b878313d01b7718390f31528be4010fed1faa798c5a1d0469c9c48c369"}, + {file = "bcrypt-4.1.2-cp37-abi3-win_amd64.whl", hash = "sha256:9800ae5bd5077b13725e2e3934aa3c9c37e49d3ea3d06318010aa40f54c63551"}, + {file = "bcrypt-4.1.2-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:71b8be82bc46cedd61a9f4ccb6c1a493211d031415a34adde3669ee1b0afbb63"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e3c6642077b0c8092580c819c1684161262b2e30c4f45deb000c38947bf483"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:387e7e1af9a4dd636b9505a465032f2f5cb8e61ba1120e79a0e1cd0b512f3dfc"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f70d9c61f9c4ca7d57f3bfe88a5ccf62546ffbadf3681bb1e268d9d2e41c91a7"}, + {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2a298db2a8ab20056120b45e86c00a0a5eb50ec4075b6142db35f593b97cb3fb"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ba55e40de38a24e2d78d34c2d36d6e864f93e0d79d0b6ce915e4335aa81d01b1"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3566a88234e8de2ccae31968127b0ecccbb4cddb629da744165db72b58d88ca4"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b90e216dc36864ae7132cb151ffe95155a37a14e0de3a8f64b49655dd959ff9c"}, + {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:69057b9fc5093ea1ab00dd24ede891f3e5e65bee040395fb1e66ee196f9c9b4a"}, + {file = "bcrypt-4.1.2-cp39-abi3-win32.whl", hash = "sha256:02d9ef8915f72dd6daaef40e0baeef8a017ce624369f09754baf32bb32dba25f"}, + {file = "bcrypt-4.1.2-cp39-abi3-win_amd64.whl", hash = "sha256:be3ab1071662f6065899fe08428e45c16aa36e28bc42921c4901a191fda6ee42"}, + {file = "bcrypt-4.1.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d75fc8cd0ba23f97bae88a6ec04e9e5351ff3c6ad06f38fe32ba50cbd0d11946"}, + {file = "bcrypt-4.1.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a97e07e83e3262599434816f631cc4c7ca2aa8e9c072c1b1a7fec2ae809a1d2d"}, + {file = "bcrypt-4.1.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e51c42750b7585cee7892c2614be0d14107fad9581d1738d954a262556dd1aab"}, + {file = "bcrypt-4.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba4e4cc26610581a6329b3937e02d319f5ad4b85b074846bf4fef8a8cf51e7bb"}, + {file = "bcrypt-4.1.2.tar.gz", hash = "sha256:33313a1200a3ae90b75587ceac502b048b840fc69e7f7a0905b5f87fac7a1258"}, +] + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -422,6 +520,137 @@ files = [ {file = "blinker-1.7.0.tar.gz", hash = "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"}, ] +[[package]] +name = "brotli" +version = "1.1.0" +description = "Python bindings for the Brotli compression library" +optional = false +python-versions = "*" +files = [ + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, + {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, + {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, + {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, + {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, + {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, + {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, + {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, + {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, + {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, +] + +[[package]] +name = "brotlicffi" +version = "1.1.0.0" +description = "Python CFFI bindings to the Brotli library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"}, + {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, +] + +[package.dependencies] +cffi = ">=1.0.0" + [[package]] name = "build" version = "1.2.1" @@ -653,6 +882,84 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] +[[package]] +name = "chroma-hnswlib" +version = "0.7.3" +description = "Chromas fork of hnswlib" +optional = false +python-versions = "*" +files = [ + {file = "chroma-hnswlib-0.7.3.tar.gz", hash = "sha256:b6137bedde49fffda6af93b0297fe00429fc61e5a072b1ed9377f909ed95a932"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59d6a7c6f863c67aeb23e79a64001d537060b6995c3eca9a06e349ff7b0998ca"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d71a3f4f232f537b6152947006bd32bc1629a8686df22fd97777b70f416c127a"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c92dc1ebe062188e53970ba13f6b07e0ae32e64c9770eb7f7ffa83f149d4210"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49da700a6656fed8753f68d44b8cc8ae46efc99fc8a22a6d970dc1697f49b403"}, + {file = "chroma_hnswlib-0.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:108bc4c293d819b56476d8f7865803cb03afd6ca128a2a04d678fffc139af029"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:11e7ca93fb8192214ac2b9c0943641ac0daf8f9d4591bb7b73be808a83835667"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6f552e4d23edc06cdeb553cdc757d2fe190cdeb10d43093d6a3319f8d4bf1c6b"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f96f4d5699e486eb1fb95849fe35ab79ab0901265805be7e60f4eaa83ce263ec"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:368e57fe9ebae05ee5844840fa588028a023d1182b0cfdb1d13f607c9ea05756"}, + {file = "chroma_hnswlib-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:b7dca27b8896b494456db0fd705b689ac6b73af78e186eb6a42fea2de4f71c6f"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:70f897dc6218afa1d99f43a9ad5eb82f392df31f57ff514ccf4eeadecd62f544"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aef10b4952708f5a1381c124a29aead0c356f8d7d6e0b520b778aaa62a356f4"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee2d8d1529fca3898d512079144ec3e28a81d9c17e15e0ea4665697a7923253"}, + {file = "chroma_hnswlib-0.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:a4021a70e898783cd6f26e00008b494c6249a7babe8774e90ce4766dd288c8ba"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a8f61fa1d417fda848e3ba06c07671f14806a2585272b175ba47501b066fe6b1"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d7563be58bc98e8f0866907368e22ae218d6060601b79c42f59af4eccbbd2e0a"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51b8d411486ee70d7b66ec08cc8b9b6620116b650df9c19076d2d8b6ce2ae914"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d706782b628e4f43f1b8a81e9120ac486837fbd9bcb8ced70fe0d9b95c72d77"}, + {file = "chroma_hnswlib-0.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:54f053dedc0e3ba657f05fec6e73dd541bc5db5b09aa8bc146466ffb734bdc86"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e607c5a71c610a73167a517062d302c0827ccdd6e259af6e4869a5c1306ffb5d"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2358a795870156af6761890f9eb5ca8cade57eb10c5f046fe94dae1faa04b9e"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cea425df2e6b8a5e201fff0d922a1cc1d165b3cfe762b1408075723c8892218"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:454df3dd3e97aa784fba7cf888ad191e0087eef0fd8c70daf28b753b3b591170"}, + {file = "chroma_hnswlib-0.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:df587d15007ca701c6de0ee7d5585dd5e976b7edd2b30ac72bc376b3c3f85882"}, +] + +[package.dependencies] +numpy = "*" + +[[package]] +name = "chromadb" +version = "0.4.24" +description = "Chroma." +optional = false +python-versions = ">=3.8" +files = [ + {file = "chromadb-0.4.24-py3-none-any.whl", hash = "sha256:3a08e237a4ad28b5d176685bd22429a03717fe09d35022fb230d516108da01da"}, + {file = "chromadb-0.4.24.tar.gz", hash = "sha256:a5c80b4e4ad9b236ed2d4899a5b9e8002b489293f2881cb2cadab5b199ee1c72"}, +] + +[package.dependencies] +bcrypt = ">=4.0.1" +build = ">=1.0.3" +chroma-hnswlib = "0.7.3" +fastapi = ">=0.95.2" +grpcio = ">=1.58.0" +importlib-resources = "*" +kubernetes = ">=28.1.0" +mmh3 = ">=4.0.1" +numpy = ">=1.22.5" +onnxruntime = ">=1.14.1" +opentelemetry-api = ">=1.2.0" +opentelemetry-exporter-otlp-proto-grpc = ">=1.2.0" +opentelemetry-instrumentation-fastapi = ">=0.41b0" +opentelemetry-sdk = ">=1.2.0" +orjson = ">=3.9.12" +overrides = ">=7.3.1" +posthog = ">=2.4.0" +pulsar-client = ">=3.1.0" +pydantic = ">=1.9" +pypika = ">=0.48.9" +PyYAML = ">=6.0.0" +requests = ">=2.28" +tenacity = ">=8.2.3" +tokenizers = ">=0.13.2" +tqdm = ">=4.65.0" +typer = ">=0.9.0" +typing-extensions = ">=4.5.0" +uvicorn = {version = ">=0.18.3", extras = ["standard"]} + [[package]] name = "ckzg" version = "1.0.0" @@ -803,6 +1110,34 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "coloredlogs" +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.*" +files = [ + {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, + {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, +] + +[package.dependencies] +humanfriendly = ">=9.1" + +[package.extras] +cron = ["capturer (>=2.4)"] + +[[package]] +name = "contextlib2" +version = "21.6.0" +description = "Backports and enhancements for the contextlib module" +optional = false +python-versions = ">=3.6" +files = [ + {file = "contextlib2-21.6.0-py2.py3-none-any.whl", hash = "sha256:3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f"}, + {file = "contextlib2-21.6.0.tar.gz", hash = "sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869"}, +] + [[package]] name = "crashtest" version = "0.4.1" @@ -816,29 +1151,57 @@ files = [ [[package]] name = "crewai" -version = "0.22.2" +version = "0.28.0" description = "Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks." optional = false -python-versions = ">=3.10,<=3.13" +python-versions = "<=3.13,>=3.10" files = [ - {file = "crewai-0.22.2-py3-none-any.whl", hash = "sha256:ce1e902403a728d57797eda51a8ba7520f9ad00e3c3c6ed4f61d981ad3edb846"}, - {file = "crewai-0.22.2.tar.gz", hash = "sha256:9d5c6e34879ef01fa54ef2a8f33999d464360d605aec4b623bf229040c598131"}, + {file = "crewai-0.28.0-py3-none-any.whl", hash = "sha256:5bba067614b53f17abc7c31dbf7d78b4fd08e6ee119b31a297abaa4c6312e351"}, + {file = "crewai-0.28.0.tar.gz", hash = "sha256:58ecd49fd2eb6f2aa61ef2bd2c44e09dc0340a177ea28e4f017f858ceea420a4"}, ] [package.dependencies] +appdirs = ">=1.4.4,<2.0.0" click = ">=8.1.7,<9.0.0" +crewai-tools = {version = ">=0.1.4,<0.2.0", optional = true, markers = "extra == \"tools\""} +embedchain = ">=0.1.98,<0.2.0" instructor = ">=0.5.2,<0.6.0" langchain = ">=0.1.10,<0.2.0" -langchain-openai = ">=0.0.5,<0.0.6" openai = ">=1.13.3,<2.0.0" opentelemetry-api = ">=1.22.0,<2.0.0" opentelemetry-exporter-otlp-proto-http = ">=1.22.0,<2.0.0" opentelemetry-sdk = ">=1.22.0,<2.0.0" pydantic = ">=2.4.2,<3.0.0" +python-dotenv = "1.0.0" regex = ">=2023.12.25,<2024.0.0" [package.extras] -tools = ["crewai-tools (>=0.0.15,<0.0.16)"] +tools = ["crewai-tools (>=0.1.4,<0.2.0)"] + +[[package]] +name = "crewai-tools" +version = "0.1.4" +description = "Set of tools for the crewAI framework" +optional = false +python-versions = "<=3.13,>=3.10" +files = [ + {file = "crewai_tools-0.1.4-py3-none-any.whl", hash = "sha256:f68fc4464ef40c70a53275dadbc7d43b6095662c685fa18392bd762490d9ab0c"}, + {file = "crewai_tools-0.1.4.tar.gz", hash = "sha256:c02223f83a525e28a0a0b44abea67c414e5f12dcf7d86b9f1e496e857fc6132b"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.12.3,<5.0.0" +chromadb = ">=0.4.22,<0.5.0" +embedchain = {version = ">=0.1.85,<0.2.0", extras = ["github", "youtube"]} +lancedb = ">=0.5.4,<0.6.0" +langchain = ">=0.1.4,<0.2.0" +openai = ">=1.12.0,<2.0.0" +pydantic = ">=2.6.1,<3.0.0" +pyright = ">=1.1.350,<2.0.0" +pytest = ">=8.0.0,<9.0.0" +pytube = ">=15.0.0,<16.0.0" +requests = ">=2.31.0,<3.0.0" +selenium = ">=4.18.1,<5.0.0" [[package]] name = "cron-validator" @@ -1068,6 +1431,17 @@ files = [ marshmallow = ">=3.18.0,<4.0.0" typing-inspect = ">=0.4.0,<1" +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + [[package]] name = "deprecated" version = "1.2.14" @@ -1282,6 +1656,69 @@ https = ["urllib3 (>=1.24.1)"] paramiko = ["paramiko"] pgp = ["gpg"] +[[package]] +name = "embedchain" +version = "0.1.99" +description = "Simplest open source retrieval (RAG) framework" +optional = false +python-versions = "<=3.13,>=3.9" +files = [ + {file = "embedchain-0.1.99-py3-none-any.whl", hash = "sha256:1614f580005d7edecd5fa1651013df0dc7f0aabc2ac7b61cefb041f4e92a8769"}, + {file = "embedchain-0.1.99.tar.gz", hash = "sha256:df4b7c59c1bc6b36fae9de04736ca90609e86d8fdea55771dbc052709a7680a3"}, +] + +[package.dependencies] +alembic = ">=1.13.1,<2.0.0" +beautifulsoup4 = ">=4.12.2,<5.0.0" +chromadb = ">=0.4.17,<0.5.0" +gitpython = {version = ">=3.1.38,<4.0.0", optional = true, markers = "extra == \"github\""} +google-cloud-aiplatform = ">=1.26.1,<2.0.0" +gptcache = ">=0.1.43,<0.2.0" +langchain = ">=0.1.4,<0.2.0" +langchain-openai = ">=0.0.5,<0.0.6" +openai = ">=1.1.1" +posthog = ">=3.0.2,<4.0.0" +PyGithub = {version = ">=1.59.1,<2.0.0", optional = true, markers = "extra == \"github\""} +pypdf = ">=3.11.0,<4.0.0" +pysbd = ">=0.3.4,<0.4.0" +python-dotenv = ">=1.0.0,<2.0.0" +rich = ">=13.7.0,<14.0.0" +schema = ">=0.7.5,<0.8.0" +sqlalchemy = ">=2.0.27,<3.0.0" +tiktoken = ">=0.5.2,<0.6.0" +youtube-transcript-api = {version = ">=0.6.1,<0.7.0", optional = true, markers = "extra == \"dataloaders\" or extra == \"youtube\""} +yt_dlp = {version = ">=2023.11.14,<2024.0.0", optional = true, markers = "extra == \"youtube\""} + +[package.extras] +aws-bedrock = ["boto3 (>=1.34.20,<2.0.0)"] +cohere = ["cohere (>=4.27,<5.0)"] +dataloaders = ["docx2txt (>=0.8,<0.9)", "duckduckgo-search (>=3.8.5,<4.0.0)", "pytube (>=15.0.0,<16.0.0)", "sentence-transformers (>=2.2.2,<3.0.0)", "unstructured[all-docs,local-inference] (>=0.10.18,<0.11.0)", "youtube-transcript-api (>=0.6.1,<0.7.0)"] +discord = ["discord (>=2.3.2,<3.0.0)"] +dropbox = ["dropbox (>=11.36.2,<12.0.0)"] +elasticsearch = ["elasticsearch (>=8.9.0,<9.0.0)"] +github = ["PyGithub (>=1.59.1,<2.0.0)", "gitpython (>=3.1.38,<4.0.0)"] +gmail = ["google-api-core (>=2.15.0,<3.0.0)", "google-api-python-client (>=2.111.0,<3.0.0)", "google-auth (>=2.25.2,<3.0.0)", "google-auth-httplib2 (>=0.2.0,<0.3.0)", "google-auth-oauthlib (>=1.2.0,<2.0.0)", "requests (>=2.31.0,<3.0.0)"] +google = ["google-generativeai (>=0.3.0,<0.4.0)"] +googledrive = ["google-api-python-client (>=2.111.0,<3.0.0)", "google-auth-httplib2 (>=0.2.0,<0.3.0)", "google-auth-oauthlib (>=1.2.0,<2.0.0)"] +huggingface-hub = ["huggingface_hub (>=0.17.3,<0.18.0)"] +llama2 = ["replicate (>=0.15.4,<0.16.0)"] +milvus = ["pymilvus (==2.3.1)"] +mistralai = ["langchain-mistralai (>=0.0.3,<0.0.4)"] +modal = ["modal (>=0.56.4329,<0.57.0)"] +mysql = ["mysql-connector-python (>=8.1.0,<9.0.0)"] +opensearch = ["opensearch-py (==2.3.1)"] +opensource = ["gpt4all (==2.0.2)", "sentence-transformers (>=2.2.2,<3.0.0)", "torch (==2.0.0)"] +poe = ["fastapi-poe (==0.0.16)"] +postgres = ["psycopg (>=3.1.12,<4.0.0)", "psycopg-binary (>=3.1.12,<4.0.0)", "psycopg-pool (>=3.1.8,<4.0.0)"] +qdrant = ["qdrant-client (>=1.6.3,<2.0.0)"] +rss-feed = ["feedparser (>=6.0.10,<7.0.0)", "listparser (>=0.19,<0.20)", "newspaper3k (>=0.2.8,<0.3.0)"] +slack = ["flask (>=2.3.3,<3.0.0)", "slack-sdk (==3.21.3)"] +together = ["together (>=0.2.8,<0.3.0)"] +vertexai = ["langchain-google-vertexai (>=0.0.5,<0.0.6)"] +weaviate = ["weaviate-client (>=3.24.1,<4.0.0)"] +whatsapp = ["flask (>=2.3.3,<3.0.0)", "twilio (>=8.5.0,<9.0.0)"] +youtube = ["youtube-transcript-api (>=0.6.1,<0.7.0)", "yt_dlp (>=2023.11.14,<2024.0.0)"] + [[package]] name = "eth-abi" version = "5.1.0" @@ -1469,6 +1906,25 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "fastapi" +version = "0.110.1" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.110.1-py3-none-any.whl", hash = "sha256:5df913203c482f820d31f48e635e022f8cbfe7350e4830ef05a3163925b1addc"}, + {file = "fastapi-0.110.1.tar.gz", hash = "sha256:6feac43ec359dfe4f45b2c18ec8c94edb8dc2dfc461d417d9e626590c071baad"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.37.2,<0.38.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + [[package]] name = "fastjsonschema" version = "2.19.1" @@ -1558,6 +2014,17 @@ Werkzeug = ">=3.0.0" async = ["asgiref (>=3.2)"] dotenv = ["python-dotenv"] +[[package]] +name = "flatbuffers" +version = "24.3.25" +description = "The FlatBuffers serialization format for Python" +optional = false +python-versions = "*" +files = [ + {file = "flatbuffers-24.3.25-py2.py3-none-any.whl", hash = "sha256:8dbdec58f935f3765e4f7f3cf635ac3a77f83568138d6a2311f524ec96364812"}, + {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"}, +] + [[package]] name = "frozenlist" version = "1.4.1" @@ -1777,6 +2244,98 @@ pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0.dev0)"] +[[package]] +name = "google-cloud-aiplatform" +version = "1.46.0" +description = "Vertex AI API client library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "google-cloud-aiplatform-1.46.0.tar.gz", hash = "sha256:9eeefcd34dbad2a1ade830d025154189d257e8dcfea45771dcac6e34a2783782"}, + {file = "google_cloud_aiplatform-1.46.0-py2.py3-none-any.whl", hash = "sha256:a30a64f8bcefa0646340cf57abca192bb9ca9c456a47b842651a9564bba0534a"}, +] + +[package.dependencies] +docstring-parser = "<1" +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.8.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0dev" +google-cloud-bigquery = ">=1.15.0,<3.20.0 || >3.20.0,<4.0.0dev" +google-cloud-resource-manager = ">=1.3.3,<3.0.0dev" +google-cloud-storage = ">=1.32.0,<3.0.0dev" +packaging = ">=14.3" +proto-plus = ">=1.22.0,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +pydantic = "<3" +shapely = "<3.0.0dev" + +[package.extras] +autologging = ["mlflow (>=1.27.0,<=2.1.1)"] +cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] +datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)"] +endpoint = ["requests (>=2.28.1)"] +full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<2.15.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"] +lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"] +metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"] +pipelines = ["pyyaml (==5.3.1)"] +prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<0.103.1)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"] +preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)"] +private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"] +ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)"] +ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "ray[train] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "scikit-learn", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] +tensorboard = ["tensorflow (>=2.3.0,<2.15.0)"] +testing = ["bigframes", "cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (==2.13.0)", "tensorflow (>=2.3.0,<2.15.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost", "xgboost-ray"] +vizier = ["google-vizier (>=0.1.6)"] +xai = ["tensorflow (>=2.3.0,<3.0.0dev)"] + +[[package]] +name = "google-cloud-bigquery" +version = "3.20.1" +description = "Google BigQuery API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-bigquery-3.20.1.tar.gz", hash = "sha256:318aa3abab5f1900ee24f63ba8bd02b9cdafaa942d738b4dc14a4ef2cc2d925f"}, + {file = "google_cloud_bigquery-3.20.1-py2.py3-none-any.whl", hash = "sha256:d3e62fe61138c658b8853c402e2d8fb9346c84e602e21e3a26584be10fc5b0a4"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0dev" +google-cloud-core = ">=1.6.0,<3.0.0dev" +google-resumable-media = ">=0.6.0,<3.0dev" +packaging = ">=20.0.0" +python-dateutil = ">=2.7.2,<3.0dev" +requests = ">=2.21.0,<3.0.0dev" + +[package.extras] +all = ["Shapely (>=1.8.4,<3.0.0dev)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] +bigquery-v2 = ["proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)"] +bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"] +geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"] +ipython = ["ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)"] +ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"] +opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"] +pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] +tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] + +[[package]] +name = "google-cloud-core" +version = "2.4.1" +description = "Google Cloud API client core library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, + {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, +] + +[package.dependencies] +google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0dev" +google-auth = ">=1.25.0,<3.0dev" + +[package.extras] +grpc = ["grpcio (>=1.38.0,<2.0dev)", "grpcio-status (>=1.38.0,<2.0.dev0)"] + [[package]] name = "google-cloud-functions" version = "1.16.3" @@ -1831,6 +2390,126 @@ grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" proto-plus = ">=1.22.3,<2.0.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +[[package]] +name = "google-cloud-storage" +version = "2.16.0" +description = "Google Cloud Storage API client library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-storage-2.16.0.tar.gz", hash = "sha256:dda485fa503710a828d01246bd16ce9db0823dc51bbca742ce96a6817d58669f"}, + {file = "google_cloud_storage-2.16.0-py2.py3-none-any.whl", hash = "sha256:91a06b96fb79cf9cdfb4e759f178ce11ea885c79938f89590344d079305f5852"}, +] + +[package.dependencies] +google-api-core = ">=2.15.0,<3.0.0dev" +google-auth = ">=2.26.1,<3.0dev" +google-cloud-core = ">=2.3.0,<3.0dev" +google-crc32c = ">=1.0,<2.0dev" +google-resumable-media = ">=2.6.0" +requests = ">=2.18.0,<3.0.0dev" + +[package.extras] +protobuf = ["protobuf (<5.0.0dev)"] + +[[package]] +name = "google-crc32c" +version = "1.5.0" +description = "A python wrapper of the C library 'Google CRC32C'" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-crc32c-1.5.0.tar.gz", hash = "sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win32.whl", hash = "sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win32.whl", hash = "sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win32.whl", hash = "sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win32.whl", hash = "sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93"}, +] + +[package.extras] +testing = ["pytest"] + +[[package]] +name = "google-resumable-media" +version = "2.7.0" +description = "Utilities for Google Media Downloads and Resumable Uploads" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "google-resumable-media-2.7.0.tar.gz", hash = "sha256:5f18f5fa9836f4b083162064a1c2c98c17239bfda9ca50ad970ccf905f3e625b"}, + {file = "google_resumable_media-2.7.0-py2.py3-none-any.whl", hash = "sha256:79543cfe433b63fd81c0844b7803aba1bb8950b47bedf7d980c38fa123937e08"}, +] + +[package.dependencies] +google-crc32c = ">=1.0,<2.0dev" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"] +requests = ["requests (>=2.18.0,<3.0.0dev)"] + [[package]] name = "google-search-results" version = "2.4.2" @@ -1862,6 +2541,22 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4 [package.extras] grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] +[[package]] +name = "gptcache" +version = "0.1.43" +description = "GPTCache, a powerful caching library that can be used to speed up and lower the cost of chat applications that rely on the LLM service. GPTCache works as a memcache for AIGC applications, similar to how Redis works for traditional applications." +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "gptcache-0.1.43-py3-none-any.whl", hash = "sha256:9c557ec9cc14428942a0ebf1c838520dc6d2be801d67bb6964807043fc2feaf5"}, + {file = "gptcache-0.1.43.tar.gz", hash = "sha256:cebe7ec5e32a3347bf839e933a34e67c7fcae620deaa7cb8c6d7d276c8686f1a"}, +] + +[package.dependencies] +cachetools = "*" +numpy = "*" +requests = "*" + [[package]] name = "greenlet" version = "3.0.3" @@ -2126,6 +2821,54 @@ sniffio = "==1.*" http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +[[package]] +name = "httptools" +version = "0.6.1" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, + {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, + {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, + {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, + {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, + {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, + {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, +] + +[package.extras] +test = ["Cython (>=0.29.24,<0.30.0)"] + [[package]] name = "httpx" version = "0.24.1" @@ -2150,6 +2893,54 @@ cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +[[package]] +name = "huggingface-hub" +version = "0.22.2" +description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "huggingface_hub-0.22.2-py3-none-any.whl", hash = "sha256:3429e25f38ccb834d310804a3b711e7e4953db5a9e420cc147a5e194ca90fd17"}, + {file = "huggingface_hub-0.22.2.tar.gz", hash = "sha256:32e9a9a6843c92f253ff9ca16b9985def4d80a93fb357af5353f770ef74a81be"}, +] + +[package.dependencies] +filelock = "*" +fsspec = ">=2023.5.0" +packaging = ">=20.9" +pyyaml = ">=5.1" +requests = "*" +tqdm = ">=4.42.1" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +cli = ["InquirerPy (==0.3.4)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] +hf-transfer = ["hf-transfer (>=0.1.4)"] +inference = ["aiohttp", "minijinja (>=1.0)"] +quality = ["mypy (==1.5.1)", "ruff (>=0.3.0)"] +tensorflow = ["graphviz", "pydot", "tensorflow"] +tensorflow-testing = ["keras (<3.0)", "tensorflow"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["safetensors", "torch"] +typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] + +[[package]] +name = "humanfriendly" +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.*" +files = [ + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, +] + +[package.dependencies] +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} + [[package]] name = "hyperframe" version = "6.0.1" @@ -2191,6 +2982,21 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +[[package]] +name = "importlib-resources" +version = "6.4.0" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, + {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -2403,31 +3209,90 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [[package]] -name = "langchain" -version = "0.1.14" -description = "Building applications with LLMs through composability" +name = "kubernetes" +version = "29.0.0" +description = "Kubernetes python client" optional = false -python-versions = "<4.0,>=3.8.1" +python-versions = ">=3.6" files = [ - {file = "langchain-0.1.14-py3-none-any.whl", hash = "sha256:94f9b5df2421faaf762d4f43b9d65c270c2f701934580d281e4c6226deef7234"}, - {file = "langchain-0.1.14.tar.gz", hash = "sha256:124c6244cf3957616b98f2df07dc2992fc40dff6ed1a62d8ee8a40f1e0260a40"}, + {file = "kubernetes-29.0.0-py2.py3-none-any.whl", hash = "sha256:ab8cb0e0576ccdfb71886366efb102c6a20f268d817be065ce7f9909c631e43e"}, + {file = "kubernetes-29.0.0.tar.gz", hash = "sha256:c4812e227ae74d07d53c88293e564e54b850452715a59a927e7e1bc6b9a60459"}, ] [package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -dataclasses-json = ">=0.5.7,<0.7" -jsonpatch = ">=1.33,<2.0" -langchain-community = ">=0.0.30,<0.1" -langchain-core = ">=0.1.37,<0.2.0" -langchain-text-splitters = ">=0.0.1,<0.1" -langsmith = ">=0.1.17,<0.2.0" -numpy = ">=1,<2" -pydantic = ">=1,<3" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" +certifi = ">=14.05.14" +google-auth = ">=1.0.1" +oauthlib = ">=3.2.2" +python-dateutil = ">=2.5.3" +pyyaml = ">=5.4.1" +requests = "*" +requests-oauthlib = "*" +six = ">=1.9.0" +urllib3 = ">=1.24.2" +websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" + +[package.extras] +adal = ["adal (>=1.0.2)"] + +[[package]] +name = "lancedb" +version = "0.5.7" +description = "lancedb" +optional = false +python-versions = ">=3.8" +files = [ + {file = "lancedb-0.5.7-py3-none-any.whl", hash = "sha256:6169966f715ef530be545950e1aaf9f3f160967e4ba7456cd67c9f30f678095d"}, + {file = "lancedb-0.5.7.tar.gz", hash = "sha256:878914b493f91d09a77b14f1528104741f273234cbdd6671be705f447701fd51"}, +] + +[package.dependencies] +attrs = ">=21.3.0" +cachetools = "*" +click = ">=8.1.7" +deprecation = "*" +overrides = ">=0.7" +pydantic = ">=1.10" +pylance = "0.9.18" +pyyaml = ">=6.0" +ratelimiter = ">=1.0,<2.0" +requests = ">=2.31.0" +retry = ">=0.9.2" +semver = ">=3.0" +tqdm = ">=4.27.0" + +[package.extras] +clip = ["open-clip", "pillow", "torch"] +dev = ["pre-commit", "ruff"] +docs = ["mkdocs", "mkdocs-jupyter", "mkdocs-material", "mkdocs-ultralytics-plugin (==0.0.44)", "mkdocstrings[python]"] +embeddings = ["InstructorEmbedding", "awscli (>=1.29.57)", "boto3 (>=1.28.57)", "botocore (>=1.31.57)", "cohere", "google.generativeai", "huggingface-hub", "open-clip-torch", "openai (>=1.6.1)", "pillow", "sentence-transformers", "torch"] +tests = ["aiohttp", "duckdb", "pandas (>=1.4)", "polars (>=0.19)", "pytest", "pytest-asyncio", "pytest-mock", "pytz"] + +[[package]] +name = "langchain" +version = "0.1.14" +description = "Building applications with LLMs through composability" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain-0.1.14-py3-none-any.whl", hash = "sha256:94f9b5df2421faaf762d4f43b9d65c270c2f701934580d281e4c6226deef7234"}, + {file = "langchain-0.1.14.tar.gz", hash = "sha256:124c6244cf3957616b98f2df07dc2992fc40dff6ed1a62d8ee8a40f1e0260a40"}, +] + +[package.dependencies] +aiohttp = ">=3.8.3,<4.0.0" +async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} +dataclasses-json = ">=0.5.7,<0.7" +jsonpatch = ">=1.33,<2.0" +langchain-community = ">=0.0.30,<0.1" +langchain-core = ">=0.1.37,<0.2.0" +langchain-text-splitters = ">=0.0.1,<0.1" +langsmith = ">=0.1.17,<0.2.0" +numpy = ">=1,<2" +pydantic = ">=1,<3" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" +tenacity = ">=8.1.0,<9.0.0" [package.extras] azure = ["azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-textanalytics (>=5.3.0,<6.0.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-core (>=1.26.4,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "azure-search-documents (==11.4.0b8)", "openai (<2)"] @@ -2710,6 +3575,25 @@ files = [ [package.extras] test = ["pytest"] +[[package]] +name = "mako" +version = "1.3.2" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Mako-1.3.2-py3-none-any.whl", hash = "sha256:32a99d70754dfce237019d17ffe4a282d2d3351b9c476e90d8a60e63f133b80c"}, + {file = "Mako-1.3.2.tar.gz", hash = "sha256:2a0c8ad7f6274271b3bb7467dd37cf9cc6dab4bc19cb69a4ef10669402de698e"}, +] + +[package.dependencies] +MarkupSafe = ">=0.9.2" + +[package.extras] +babel = ["Babel"] +lingua = ["lingua"] +testing = ["pytest"] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -2848,6 +3732,109 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mmh3" +version = "4.1.0" +description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." +optional = false +python-versions = "*" +files = [ + {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be5ac76a8b0cd8095784e51e4c1c9c318c19edcd1709a06eb14979c8d850c31a"}, + {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98a49121afdfab67cd80e912b36404139d7deceb6773a83620137aaa0da5714c"}, + {file = "mmh3-4.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5259ac0535874366e7d1a5423ef746e0d36a9e3c14509ce6511614bdc5a7ef5b"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5950827ca0453a2be357696da509ab39646044e3fa15cad364eb65d78797437"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1dd0f652ae99585b9dd26de458e5f08571522f0402155809fd1dc8852a613a39"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99d25548070942fab1e4a6f04d1626d67e66d0b81ed6571ecfca511f3edf07e6"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53db8d9bad3cb66c8f35cbc894f336273f63489ce4ac416634932e3cbe79eb5b"}, + {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75da0f615eb55295a437264cc0b736753f830b09d102aa4c2a7d719bc445ec05"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b926b07fd678ea84b3a2afc1fa22ce50aeb627839c44382f3d0291e945621e1a"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c5b053334f9b0af8559d6da9dc72cef0a65b325ebb3e630c680012323c950bb6"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bf33dc43cd6de2cb86e0aa73a1cc6530f557854bbbe5d59f41ef6de2e353d7b"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fa7eacd2b830727ba3dd65a365bed8a5c992ecd0c8348cf39a05cc77d22f4970"}, + {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42dfd6742b9e3eec599f85270617debfa0bbb913c545bb980c8a4fa7b2d047da"}, + {file = "mmh3-4.1.0-cp310-cp310-win32.whl", hash = "sha256:2974ad343f0d39dcc88e93ee6afa96cedc35a9883bc067febd7ff736e207fa47"}, + {file = "mmh3-4.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:74699a8984ded645c1a24d6078351a056f5a5f1fe5838870412a68ac5e28d865"}, + {file = "mmh3-4.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:f0dc874cedc23d46fc488a987faa6ad08ffa79e44fb08e3cd4d4cf2877c00a00"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3280a463855b0eae64b681cd5b9ddd9464b73f81151e87bb7c91a811d25619e6"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:97ac57c6c3301769e757d444fa7c973ceb002cb66534b39cbab5e38de61cd896"}, + {file = "mmh3-4.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7b6502cdb4dbd880244818ab363c8770a48cdccecf6d729ade0241b736b5ec0"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52ba2da04671a9621580ddabf72f06f0e72c1c9c3b7b608849b58b11080d8f14"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a5fef4c4ecc782e6e43fbeab09cff1bac82c998a1773d3a5ee6a3605cde343e"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5135358a7e00991f73b88cdc8eda5203bf9de22120d10a834c5761dbeb07dd13"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cff9ae76a54f7c6fe0167c9c4028c12c1f6de52d68a31d11b6790bb2ae685560"}, + {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f02576a4d106d7830ca90278868bf0983554dd69183b7bbe09f2fcd51cf54f"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:073d57425a23721730d3ff5485e2da489dd3c90b04e86243dd7211f889898106"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:71e32ddec7f573a1a0feb8d2cf2af474c50ec21e7a8263026e8d3b4b629805db"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7cbb20b29d57e76a58b40fd8b13a9130db495a12d678d651b459bf61c0714cea"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a42ad267e131d7847076bb7e31050f6c4378cd38e8f1bf7a0edd32f30224d5c9"}, + {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a013979fc9390abadc445ea2527426a0e7a4495c19b74589204f9b71bcaafeb"}, + {file = "mmh3-4.1.0-cp311-cp311-win32.whl", hash = "sha256:1d3b1cdad7c71b7b88966301789a478af142bddcb3a2bee563f7a7d40519a00f"}, + {file = "mmh3-4.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0dc6dc32eb03727467da8e17deffe004fbb65e8b5ee2b502d36250d7a3f4e2ec"}, + {file = "mmh3-4.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:9ae3a5c1b32dda121c7dc26f9597ef7b01b4c56a98319a7fe86c35b8bc459ae6"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0033d60c7939168ef65ddc396611077a7268bde024f2c23bdc283a19123f9e9c"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d6af3e2287644b2b08b5924ed3a88c97b87b44ad08e79ca9f93d3470a54a41c5"}, + {file = "mmh3-4.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d82eb4defa245e02bb0b0dc4f1e7ee284f8d212633389c91f7fba99ba993f0a2"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba245e94b8d54765e14c2d7b6214e832557e7856d5183bc522e17884cab2f45d"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb04e2feeabaad6231e89cd43b3d01a4403579aa792c9ab6fdeef45cc58d4ec0"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e3b1a27def545ce11e36158ba5d5390cdbc300cfe456a942cc89d649cf7e3b2"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce0ab79ff736d7044e5e9b3bfe73958a55f79a4ae672e6213e92492ad5e734d5"}, + {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b02268be6e0a8eeb8a924d7db85f28e47344f35c438c1e149878bb1c47b1cd3"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:deb887f5fcdaf57cf646b1e062d56b06ef2f23421c80885fce18b37143cba828"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99dd564e9e2b512eb117bd0cbf0f79a50c45d961c2a02402787d581cec5448d5"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:08373082dfaa38fe97aa78753d1efd21a1969e51079056ff552e687764eafdfe"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:54b9c6a2ea571b714e4fe28d3e4e2db37abfd03c787a58074ea21ee9a8fd1740"}, + {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a7b1edf24c69e3513f879722b97ca85e52f9032f24a52284746877f6a7304086"}, + {file = "mmh3-4.1.0-cp312-cp312-win32.whl", hash = "sha256:411da64b951f635e1e2284b71d81a5a83580cea24994b328f8910d40bed67276"}, + {file = "mmh3-4.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:bebc3ecb6ba18292e3d40c8712482b4477abd6981c2ebf0e60869bd90f8ac3a9"}, + {file = "mmh3-4.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:168473dd608ade6a8d2ba069600b35199a9af837d96177d3088ca91f2b3798e3"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:372f4b7e1dcde175507640679a2a8790185bb71f3640fc28a4690f73da986a3b"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:438584b97f6fe13e944faf590c90fc127682b57ae969f73334040d9fa1c7ffa5"}, + {file = "mmh3-4.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6e27931b232fc676675fac8641c6ec6b596daa64d82170e8597f5a5b8bdcd3b6"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:571a92bad859d7b0330e47cfd1850b76c39b615a8d8e7aa5853c1f971fd0c4b1"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a69d6afe3190fa08f9e3a58e5145549f71f1f3fff27bd0800313426929c7068"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afb127be0be946b7630220908dbea0cee0d9d3c583fa9114a07156f98566dc28"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:940d86522f36348ef1a494cbf7248ab3f4a1638b84b59e6c9e90408bd11ad729"}, + {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3dcccc4935686619a8e3d1f7b6e97e3bd89a4a796247930ee97d35ea1a39341"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01bb9b90d61854dfc2407c5e5192bfb47222d74f29d140cb2dd2a69f2353f7cc"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bcb1b8b951a2c0b0fb8a5426c62a22557e2ffc52539e0a7cc46eb667b5d606a9"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6477a05d5e5ab3168e82e8b106e316210ac954134f46ec529356607900aea82a"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:da5892287e5bea6977364b15712a2573c16d134bc5fdcdd4cf460006cf849278"}, + {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:99180d7fd2327a6fffbaff270f760576839dc6ee66d045fa3a450f3490fda7f5"}, + {file = "mmh3-4.1.0-cp38-cp38-win32.whl", hash = "sha256:9b0d4f3949913a9f9a8fb1bb4cc6ecd52879730aab5ff8c5a3d8f5b593594b73"}, + {file = "mmh3-4.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:598c352da1d945108aee0c3c3cfdd0e9b3edef74108f53b49d481d3990402169"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:475d6d1445dd080f18f0f766277e1237fa2914e5fe3307a3b2a3044f30892103"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5ca07c41e6a2880991431ac717c2a049056fff497651a76e26fc22224e8b5732"}, + {file = "mmh3-4.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ebe052fef4bbe30c0548d12ee46d09f1b69035ca5208a7075e55adfe091be44"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaefd42e85afb70f2b855a011f7b4d8a3c7e19c3f2681fa13118e4d8627378c5"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0ae43caae5a47afe1b63a1ae3f0986dde54b5fb2d6c29786adbfb8edc9edfb"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6218666f74c8c013c221e7f5f8a693ac9cf68e5ac9a03f2373b32d77c48904de"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac59294a536ba447b5037f62d8367d7d93b696f80671c2c45645fa9f1109413c"}, + {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086844830fcd1e5c84fec7017ea1ee8491487cfc877847d96f86f68881569d2e"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e42b38fad664f56f77f6fbca22d08450f2464baa68acdbf24841bf900eb98e87"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d08b790a63a9a1cde3b5d7d733ed97d4eb884bfbc92f075a091652d6bfd7709a"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:73ea4cc55e8aea28c86799ecacebca09e5f86500414870a8abaedfcbaf74d288"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f90938ff137130e47bcec8dc1f4ceb02f10178c766e2ef58a9f657ff1f62d124"}, + {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:aa1f13e94b8631c8cd53259250556edcf1de71738936b60febba95750d9632bd"}, + {file = "mmh3-4.1.0-cp39-cp39-win32.whl", hash = "sha256:a3b680b471c181490cf82da2142029edb4298e1bdfcb67c76922dedef789868d"}, + {file = "mmh3-4.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:fefef92e9c544a8dbc08f77a8d1b6d48006a750c4375bbcd5ff8199d761e263b"}, + {file = "mmh3-4.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:8e2c1f6a2b41723a4f82bd5a762a777836d29d664fc0095f17910bea0adfd4a6"}, + {file = "mmh3-4.1.0.tar.gz", hash = "sha256:a1cf25348b9acd229dda464a094d6170f47d2850a1fcb762a3b6172d2ce6ca4a"}, +] + +[package.extras] +test = ["mypy (>=1.0)", "pytest (>=7.0.0)"] + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + [[package]] name = "more-itertools" version = "10.2.0" @@ -2859,6 +3846,23 @@ files = [ {file = "more_itertools-10.2.0-py3-none-any.whl", hash = "sha256:686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684"}, ] +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + [[package]] name = "msgpack" version = "1.0.8" @@ -3023,6 +4027,17 @@ files = [ {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] +[[package]] +name = "mutagen" +version = "1.47.0" +description = "read and write audio tags for many formats" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719"}, + {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, +] + [[package]] name = "mypy" version = "1.9.0" @@ -3135,6 +4150,20 @@ plot = ["matplotlib"] tgrep = ["pyparsing"] twitter = ["twython"] +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + [[package]] name = "numexpr" version = "2.10.0" @@ -3221,6 +4250,64 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "onnxruntime" +version = "1.17.1" +description = "ONNX Runtime is a runtime accelerator for Machine Learning models" +optional = false +python-versions = "*" +files = [ + {file = "onnxruntime-1.17.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d43ac17ac4fa3c9096ad3c0e5255bb41fd134560212dc124e7f52c3159af5d21"}, + {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55b5e92a4c76a23981c998078b9bf6145e4fb0b016321a8274b1607bd3c6bd35"}, + {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebbcd2bc3a066cf54e6f18c75708eb4d309ef42be54606d22e5bdd78afc5b0d7"}, + {file = "onnxruntime-1.17.1-cp310-cp310-win32.whl", hash = "sha256:5e3716b5eec9092e29a8d17aab55e737480487deabfca7eac3cd3ed952b6ada9"}, + {file = "onnxruntime-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:fbb98cced6782ae1bb799cc74ddcbbeeae8819f3ad1d942a74d88e72b6511337"}, + {file = "onnxruntime-1.17.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:36fd6f87a1ecad87e9c652e42407a50fb305374f9a31d71293eb231caae18784"}, + {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99a8bddeb538edabc524d468edb60ad4722cff8a49d66f4e280c39eace70500b"}, + {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd7fddb4311deb5a7d3390cd8e9b3912d4d963efbe4dfe075edbaf18d01c024e"}, + {file = "onnxruntime-1.17.1-cp311-cp311-win32.whl", hash = "sha256:606a7cbfb6680202b0e4f1890881041ffc3ac6e41760a25763bd9fe146f0b335"}, + {file = "onnxruntime-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:53e4e06c0a541696ebdf96085fd9390304b7b04b748a19e02cf3b35c869a1e76"}, + {file = "onnxruntime-1.17.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:40f08e378e0f85929712a2b2c9b9a9cc400a90c8a8ca741d1d92c00abec60843"}, + {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac79da6d3e1bb4590f1dad4bb3c2979d7228555f92bb39820889af8b8e6bd472"}, + {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ae9ba47dc099004e3781f2d0814ad710a13c868c739ab086fc697524061695ea"}, + {file = "onnxruntime-1.17.1-cp312-cp312-win32.whl", hash = "sha256:2dff1a24354220ac30e4a4ce2fb1df38cb1ea59f7dac2c116238d63fe7f4c5ff"}, + {file = "onnxruntime-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:6226a5201ab8cafb15e12e72ff2a4fc8f50654e8fa5737c6f0bd57c5ff66827e"}, + {file = "onnxruntime-1.17.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:cd0c07c0d1dfb8629e820b05fda5739e4835b3b82faf43753d2998edf2cf00aa"}, + {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:617ebdf49184efa1ba6e4467e602fbfa029ed52c92f13ce3c9f417d303006381"}, + {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dae9071e3facdf2920769dceee03b71c684b6439021defa45b830d05e148924"}, + {file = "onnxruntime-1.17.1-cp38-cp38-win32.whl", hash = "sha256:835d38fa1064841679433b1aa8138b5e1218ddf0cfa7a3ae0d056d8fd9cec713"}, + {file = "onnxruntime-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:96621e0c555c2453bf607606d08af3f70fbf6f315230c28ddea91754e17ad4e6"}, + {file = "onnxruntime-1.17.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:7a9539935fb2d78ebf2cf2693cad02d9930b0fb23cdd5cf37a7df813e977674d"}, + {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45c6a384e9d9a29c78afff62032a46a993c477b280247a7e335df09372aedbe9"}, + {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4e19f966450f16863a1d6182a685ca33ae04d7772a76132303852d05b95411ea"}, + {file = "onnxruntime-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e2ae712d64a42aac29ed7a40a426cb1e624a08cfe9273dcfe681614aa65b07dc"}, + {file = "onnxruntime-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7e9f7fb049825cdddf4a923cfc7c649d84d63c0134315f8e0aa9e0c3004672c"}, +] + +[package.dependencies] +coloredlogs = "*" +flatbuffers = "*" +numpy = ">=1.21.6" +packaging = "*" +protobuf = "*" +sympy = "*" + [[package]] name = "openai" version = "1.16.2" @@ -3273,6 +4360,29 @@ files = [ [package.dependencies] opentelemetry-proto = "1.24.0" +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.24.0" +description = "OpenTelemetry Collector Protobuf over gRPC Exporter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_exporter_otlp_proto_grpc-1.24.0-py3-none-any.whl", hash = "sha256:f40d62aa30a0a43cc1657428e59fcf82ad5f7ea8fff75de0f9d9cb6f739e0a3b"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.24.0.tar.gz", hash = "sha256:217c6e30634f2c9797999ea9da29f7300479a94a610139b9df17433f915e7baa"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +googleapis-common-protos = ">=1.52,<2.0" +grpcio = ">=1.0.0,<2.0.0" +opentelemetry-api = ">=1.15,<2.0" +opentelemetry-exporter-otlp-proto-common = "1.24.0" +opentelemetry-proto = "1.24.0" +opentelemetry-sdk = ">=1.24.0,<1.25.0" + +[package.extras] +test = ["pytest-grpc"] + [[package]] name = "opentelemetry-exporter-otlp-proto-http" version = "1.24.0" @@ -3293,6 +4403,64 @@ opentelemetry-proto = "1.24.0" opentelemetry-sdk = ">=1.24.0,<1.25.0" requests = ">=2.7,<3.0" +[[package]] +name = "opentelemetry-instrumentation" +version = "0.45b0" +description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation-0.45b0-py3-none-any.whl", hash = "sha256:06c02e2c952c1b076e8eaedf1b82f715e2937ba7eeacab55913dd434fbcec258"}, + {file = "opentelemetry_instrumentation-0.45b0.tar.gz", hash = "sha256:6c47120a7970bbeb458e6a73686ee9ba84b106329a79e4a4a66761f933709c7e"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.4,<2.0" +setuptools = ">=16.0" +wrapt = ">=1.0.0,<2.0.0" + +[[package]] +name = "opentelemetry-instrumentation-asgi" +version = "0.45b0" +description = "ASGI instrumentation for OpenTelemetry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_asgi-0.45b0-py3-none-any.whl", hash = "sha256:8be1157ed62f0db24e45fdf7933c530c4338bd025c5d4af7830e903c0756021b"}, + {file = "opentelemetry_instrumentation_asgi-0.45b0.tar.gz", hash = "sha256:97f55620f163fd3d20323e9fd8dc3aacc826c03397213ff36b877e0f4b6b08a6"}, +] + +[package.dependencies] +asgiref = ">=3.0,<4.0" +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.45b0" +opentelemetry-semantic-conventions = "0.45b0" +opentelemetry-util-http = "0.45b0" + +[package.extras] +instruments = ["asgiref (>=3.0,<4.0)"] + +[[package]] +name = "opentelemetry-instrumentation-fastapi" +version = "0.45b0" +description = "OpenTelemetry FastAPI Instrumentation" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_fastapi-0.45b0-py3-none-any.whl", hash = "sha256:77d9c123a363129148f5f66d44094f3d67aaaa2b201396d94782b4a7f9ce4314"}, + {file = "opentelemetry_instrumentation_fastapi-0.45b0.tar.gz", hash = "sha256:5a6b91e1c08a01601845fcfcfdefd0a2aecdb3c356d4a436a3210cb58c21487e"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.45b0" +opentelemetry-instrumentation-asgi = "0.45b0" +opentelemetry-semantic-conventions = "0.45b0" +opentelemetry-util-http = "0.45b0" + +[package.extras] +instruments = ["fastapi (>=0.58,<1.0)"] + [[package]] name = "opentelemetry-proto" version = "1.24.0" @@ -3334,6 +4502,17 @@ files = [ {file = "opentelemetry_semantic_conventions-0.45b0.tar.gz", hash = "sha256:7c84215a44ac846bc4b8e32d5e78935c5c43482e491812a0bb8aaf87e4d92118"}, ] +[[package]] +name = "opentelemetry-util-http" +version = "0.45b0" +description = "Web util for OpenTelemetry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_util_http-0.45b0-py3-none-any.whl", hash = "sha256:6628868b501b3004e1860f976f410eeb3d3499e009719d818000f24ce17b6e33"}, + {file = "opentelemetry_util_http-0.45b0.tar.gz", hash = "sha256:4ce08b6a7d52dd7c96b7705b5b4f06fdb6aa3eac1233b3b0bfef8a0cab9a92cd"}, +] + [[package]] name = "orjson" version = "3.10.0" @@ -3394,6 +4573,31 @@ files = [ {file = "orjson-3.10.0.tar.gz", hash = "sha256:ba4d8cac5f2e2cff36bea6b6481cdb92b38c202bcec603d6f5ff91960595a1ed"}, ] +[[package]] +name = "outcome" +version = "1.3.0.post0" +description = "Capture the outcome of Python function calls." +optional = false +python-versions = ">=3.7" +files = [ + {file = "outcome-1.3.0.post0-py2.py3-none-any.whl", hash = "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"}, + {file = "outcome-1.3.0.post0.tar.gz", hash = "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8"}, +] + +[package.dependencies] +attrs = ">=19.2.0" + +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + [[package]] name = "packaging" version = "23.2" @@ -3716,15 +4920,38 @@ files = [ poetry = ">=1.8.0,<2.0.0" poetry-core = ">=1.7.0,<2.0.0" +[[package]] +name = "posthog" +version = "3.5.0" +description = "Integrate PostHog into any python application." +optional = false +python-versions = "*" +files = [ + {file = "posthog-3.5.0-py2.py3-none-any.whl", hash = "sha256:3c672be7ba6f95d555ea207d4486c171d06657eb34b3ce25eb043bfe7b6b5b76"}, + {file = "posthog-3.5.0.tar.gz", hash = "sha256:8f7e3b2c6e8714d0c0c542a2109b83a7549f63b7113a133ab2763a89245ef2ef"}, +] + +[package.dependencies] +backoff = ">=1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] +sentry = ["django", "sentry-sdk"] +test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] + [[package]] name = "prediction-market-agent-tooling" -version = "0.9.1" +version = "0.9.3" description = "Tools to benchmark, deploy and monitor prediction market agents." optional = false python-versions = "<3.12,>=3.10" files = [ - {file = "prediction_market_agent_tooling-0.9.1-py3-none-any.whl", hash = "sha256:3617607dd01f2ef1cdda0b264a933c6f5203ad88226c3451625db1dbc55b2b20"}, - {file = "prediction_market_agent_tooling-0.9.1.tar.gz", hash = "sha256:c8dd4ab9183d6e57dd90ecdc60939a1fe8f2a6094b1a25b6e19fc3a0f0f11565"}, + {file = "prediction_market_agent_tooling-0.9.3-py3-none-any.whl", hash = "sha256:7d2b18ef01091b05d8b43bf74093948d572f166b4c317171f18783de394dff02"}, + {file = "prediction_market_agent_tooling-0.9.3.tar.gz", hash = "sha256:31988b3a8f0b780fd92f130cffd1cf15e32e6c06dbc81d7c60522dfc10bf70f2"}, ] [package.dependencies] @@ -3803,6 +5030,64 @@ files = [ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] +[[package]] +name = "pulsar-client" +version = "3.4.0" +description = "Apache Pulsar Python client library" +optional = false +python-versions = "*" +files = [ + {file = "pulsar_client-3.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ebf99db5244ff69479283b25621b070492acc4bb643d162d86b90387cb6fdb2a"}, + {file = "pulsar_client-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6cb5d8e1482a8aea758633be23717e0c4bb7dc53784e37915c0048c0382f134"}, + {file = "pulsar_client-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a7592e42c76034e9a8d64d42dd5bab361425f869de562e9ccad698e19cd88"}, + {file = "pulsar_client-3.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5963090a78a5644ba25f41da3a6d49ea3f00c972b095baff365916dc246426a"}, + {file = "pulsar_client-3.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:419cdcf577f755e3f31bf264300d9ba158325edb2ee9cee555d81ba1909c094e"}, + {file = "pulsar_client-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:4c93c35ee97307dae153e748b33dcd3d4f06da34bca373321aa2df73f1535705"}, + {file = "pulsar_client-3.4.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:11952fb022ee72debf53b169f4482f9dc5c890be0149ae98779864b3a21f1bd3"}, + {file = "pulsar_client-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8743c320aa96798d20cafa98ea97a68c4295fc4872c23acd5e012fd36cb06ba"}, + {file = "pulsar_client-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33571de99cd898349f17978ba62e2b839ea0275fb7067f31bf5f6ebfeae0987d"}, + {file = "pulsar_client-3.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a60c03c3e70f018538e7cd3fa84d95e283b610272b744166dbc48960a809fa07"}, + {file = "pulsar_client-3.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c47041267b5843ffec54352d842156c279945f3e976d7025ffa89875ff76390"}, + {file = "pulsar_client-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:49fe4ab04004b476c87ab3ad22fe87346fca564a3e3ca9c0ac58fee45a895d81"}, + {file = "pulsar_client-3.4.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:1e077a4839be3ead3de3f05b4c244269dca2df07f47cea0b90544c7e9dc1642f"}, + {file = "pulsar_client-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f202b84e1f683d64672dd1971114600ae2e5c3735587286ff9bfb431385f08e8"}, + {file = "pulsar_client-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c606c04f357341042fa6c75477de7d2204f7ae50aa29c2f74b24e54c85f47f96"}, + {file = "pulsar_client-3.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c67b25ede3a578f5a7dc30230e52609ef38191f74b47e5cbdbc98c42df556927"}, + {file = "pulsar_client-3.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b7f8211cc9460cdf4d06e4e1cb878689d2aa4a7e4027bd2a2f1419a79ade16a6"}, + {file = "pulsar_client-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:c5399e9780d6951c69808c0b6175311a966af82fb08addf6e741ae37b1bee7ef"}, + {file = "pulsar_client-3.4.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:a2d6c850b60106dc915d3476a490fba547c6748a5f742b68abd30d1a35355b82"}, + {file = "pulsar_client-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a52ea8294a9f30eb6f0a2db5dc16e3aad7ff2284f818c48ad3a6b601723be02b"}, + {file = "pulsar_client-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eeeede40108be12222e009285c971e5b8f6433d9f0f8ef934d6a131585921c4"}, + {file = "pulsar_client-3.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9409066c600f2b6f220552c5dfe08aeeabcf07fe0e76367aa5816b2e87a5cf72"}, + {file = "pulsar_client-3.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:58e2f886e6dab43e66c3ce990fe96209e55ab46350506829a637b77b74125fb9"}, + {file = "pulsar_client-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:b57dfa5063b0d9dc7664896c55605eac90753e35e80db5a959d3be2be0ab0d48"}, + {file = "pulsar_client-3.4.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:7704c664aa2c801af4c2d3a58e9d8ffaeef12ce8a0f71712e9187f9a96da856f"}, + {file = "pulsar_client-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0364db563e27442053bdbb8655e7ffb420f491690bc2c78da5a58bd35c658ad"}, + {file = "pulsar_client-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3e34de19e0744d8aa3538cb2172076bccd0761b3e94ebadb7bd59765ae3d1ed"}, + {file = "pulsar_client-3.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:dc8be41dec8cb052fb1837550f495e9b73a8b3cf85e07157904ec84832758a65"}, + {file = "pulsar_client-3.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b49d669bed15b7edb9c936704310d57808f1d01c511b94d866f54fe8ffe1752d"}, + {file = "pulsar_client-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:88c93e5fbfc349f3967e931f7a908d15fd4fd725ebdd842423ac9cd961fe293f"}, +] + +[package.dependencies] +certifi = "*" + +[package.extras] +all = ["apache-bookkeeper-client (>=4.16.1)", "fastavro (>=1.9.2)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] +avro = ["fastavro (>=1.9.2)"] +functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + [[package]] name = "pyarrow" version = "15.0.2" @@ -3965,6 +5250,47 @@ files = [ {file = "pycryptodome-3.20.0.tar.gz", hash = "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"}, ] +[[package]] +name = "pycryptodomex" +version = "3.20.0" +description = "Cryptographic library for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodomex-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win32.whl", hash = "sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427"}, + {file = "pycryptodomex-3.20.0.tar.gz", hash = "sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"}, +] + [[package]] name = "pydantic" version = "2.6.4" @@ -4124,6 +5450,23 @@ files = [ {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, ] +[[package]] +name = "pygithub" +version = "1.59.1" +description = "Use the full Github API v3" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyGithub-1.59.1-py3-none-any.whl", hash = "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9"}, + {file = "PyGithub-1.59.1.tar.gz", hash = "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217"}, +] + +[package.dependencies] +deprecated = "*" +pyjwt = {version = ">=2.4.0", extras = ["crypto"]} +pynacl = ">=1.4.0" +requests = ">=2.14.0" + [[package]] name = "pygments" version = "2.17.2" @@ -4139,6 +5482,104 @@ files = [ plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyjwt" +version = "2.8.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pylance" +version = "0.9.18" +description = "python wrapper for Lance columnar format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pylance-0.9.18-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:fe2445d922c594d90e89111385106f6b152caab27996217db7bb4b8947eb0bea"}, + {file = "pylance-0.9.18-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a2c424c50f5186edbbcc5a26f34063ed09d9a7390e28033395728ce02b5658f0"}, + {file = "pylance-0.9.18-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10af06edfde3e8451bf2251381d3980a0a164eab9d4c3d4dc8b6318969e958a6"}, + {file = "pylance-0.9.18-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:d8bb9045d7163cc966b9fe34a917044192be37a90915475b77461e5b7d89e442"}, + {file = "pylance-0.9.18-cp38-abi3-win_amd64.whl", hash = "sha256:5ea80b7bf70d992f3fe63bce2d2f064f742124c04eaedeb76baca408ded85a2c"}, +] + +[package.dependencies] +numpy = ">=1.22" +pyarrow = ">=12" + +[package.extras] +benchmarks = ["pytest-benchmark"] +dev = ["ruff (==0.2.2)"] +tests = ["datasets", "duckdb", "ml_dtypes", "pandas", "pillow", "polars[pandas,pyarrow]", "pytest", "tensorflow", "tqdm"] +torch = ["torch"] + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + +[[package]] +name = "pypdf" +version = "3.17.4" +description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pypdf-3.17.4-py3-none-any.whl", hash = "sha256:6aa0f61b33779b64486de3f42835d3668badd48dac4a536aeb87da187a5eacd2"}, + {file = "pypdf-3.17.4.tar.gz", hash = "sha256:ec96e2e4fc9648ac609d19c00d41e9d606e0ae2ce5a0bbe7691426f5f157166a"}, +] + +[package.extras] +crypto = ["PyCryptodome", "cryptography"] +dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "pytest-socket", "pytest-timeout", "pytest-xdist", "wheel"] +docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"] +full = ["Pillow (>=8.0.0)", "PyCryptodome", "cryptography"] +image = ["Pillow (>=8.0.0)"] + +[[package]] +name = "pypika" +version = "0.48.9" +description = "A SQL query builder API for Python" +optional = false +python-versions = "*" +files = [ + {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, +] + [[package]] name = "pyproject-hooks" version = "1.0.0" @@ -4153,6 +5594,57 @@ files = [ [package.dependencies] tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +[[package]] +name = "pyreadline3" +version = "3.4.1" +description = "A python implementation of GNU readline." +optional = false +python-versions = "*" +files = [ + {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, + {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, +] + +[[package]] +name = "pyright" +version = "1.1.357" +description = "Command line wrapper for pyright" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyright-1.1.357-py3-none-any.whl", hash = "sha256:1cf29ee38e4928131895cd8e90eef37b5b77e2ed72a14e6e8e2405266f5f0aca"}, + {file = "pyright-1.1.357.tar.gz", hash = "sha256:7c66261116c78c5fa9629134fe85c54cc5302ab73e376be4b0a99d89c80a9403"}, +] + +[package.dependencies] +nodeenv = ">=1.6.0" + +[package.extras] +all = ["twine (>=3.4.1)"] +dev = ["twine (>=3.4.1)"] + +[[package]] +name = "pysbd" +version = "0.3.4" +description = "pysbd (Python Sentence Boundary Disambiguation) is a rule-based sentence boundary detection that works out-of-the-box across many languages." +optional = false +python-versions = ">=3" +files = [ + {file = "pysbd-0.3.4-py3-none-any.whl", hash = "sha256:cd838939b7b0b185fcf86b0baf6636667dfb6e474743beeff878e9f42e022953"}, +] + +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] + [[package]] name = "pytest" version = "8.1.1" @@ -4209,18 +5701,29 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.0.1" +version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" 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"}, + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, ] [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "pytube" +version = "15.0.0" +description = "Python 3 library for downloading YouTube Videos." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytube-15.0.0-py3-none-any.whl", hash = "sha256:07b9904749e213485780d7eb606e5e5b8e4341aa4dccf699160876da00e12d78"}, + {file = "pytube-15.0.0.tar.gz", hash = "sha256:076052efe76f390dfa24b1194ff821d4e86c17d41cb5562f3a276a8bcbfc9d1d"}, +] + [[package]] name = "pytz" version = "2024.1" @@ -4438,6 +5941,20 @@ files = [ [package.extras] full = ["numpy"] +[[package]] +name = "ratelimiter" +version = "1.2.0.post0" +description = "Simple python rate limiting object" +optional = false +python-versions = "*" +files = [ + {file = "ratelimiter-1.2.0.post0-py3-none-any.whl", hash = "sha256:a52be07bc0bb0b3674b4b304550f10c769bbb00fead3072e035904474259809f"}, + {file = "ratelimiter-1.2.0.post0.tar.gz", hash = "sha256:5c395dcabdbbde2e5178ef3f89b568a3066454a6ddc223b76473dac22f89b4f7"}, +] + +[package.extras] +test = ["pytest (>=3.0)", "pytest-asyncio"] + [[package]] name = "referencing" version = "0.34.0" @@ -4596,6 +6113,24 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=3.4" +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"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + [[package]] name = "requests-toolbelt" version = "1.0.0" @@ -4610,6 +6145,21 @@ files = [ [package.dependencies] requests = ">=2.0.1,<3.0.0" +[[package]] +name = "retry" +version = "0.9.2" +description = "Easy to use retry decorator." +optional = false +python-versions = "*" +files = [ + {file = "retry-0.9.2-py2.py3-none-any.whl", hash = "sha256:ccddf89761fa2c726ab29391837d4327f819ea14d244c232a1d24c67a2f98606"}, + {file = "retry-0.9.2.tar.gz", hash = "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4"}, +] + +[package.dependencies] +decorator = ">=3.4.2" +py = ">=1.4.26,<2.0.0" + [[package]] name = "rich" version = "13.7.1" @@ -4770,6 +6320,20 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" +[[package]] +name = "schema" +version = "0.7.5" +description = "Simple data validation library" +optional = false +python-versions = "*" +files = [ + {file = "schema-0.7.5-py2.py3-none-any.whl", hash = "sha256:f3ffdeeada09ec34bf40d7d79996d9f7175db93b7a5065de0faa7f41083c1e6c"}, + {file = "schema-0.7.5.tar.gz", hash = "sha256:f06717112c61895cabc4707752b88716e8420a8819d71404501e114f91043197"}, +] + +[package.dependencies] +contextlib2 = ">=0.5.5" + [[package]] name = "scikit-learn" version = "1.4.1.post1" @@ -4869,6 +6433,35 @@ files = [ cryptography = ">=2.0" jeepney = ">=0.6" +[[package]] +name = "selenium" +version = "4.19.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "selenium-4.19.0-py3-none-any.whl", hash = "sha256:5b4f49240d61e687a73f7968ae2517d403882aae3550eae2a229c745e619f1d9"}, + {file = "selenium-4.19.0.tar.gz", hash = "sha256:d9dfd6d0b021d71d0a48b865fe7746490ba82b81e9c87b212360006629eb1853"}, +] + +[package.dependencies] +certifi = ">=2021.10.8" +trio = ">=0.17,<1.0" +trio-websocket = ">=0.9,<1.0" +typing_extensions = ">=4.9.0" +urllib3 = {version = ">=1.26,<3", extras = ["socks"]} + +[[package]] +name = "semver" +version = "3.0.2" +description = "Python helper for Semantic Versioning (https://semver.org)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"}, + {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"}, +] + [[package]] name = "serpapi" version = "0.1.5" @@ -4887,6 +6480,79 @@ requests = "*" color = ["pygments"] test = ["pytest"] +[[package]] +name = "setuptools" +version = "69.2.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, + {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "shapely" +version = "2.0.3" +description = "Manipulation and analysis of geometric objects" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:af7e9abe180b189431b0f490638281b43b84a33a960620e6b2e8d3e3458b61a1"}, + {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98040462b36ced9671e266b95c326b97f41290d9d17504a1ee4dc313a7667b9c"}, + {file = "shapely-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71eb736ef2843f23473c6e37f6180f90f0a35d740ab284321548edf4e55d9a52"}, + {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:881eb9dbbb4a6419667e91fcb20313bfc1e67f53dbb392c6840ff04793571ed1"}, + {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f10d2ccf0554fc0e39fad5886c839e47e207f99fdf09547bc687a2330efda35b"}, + {file = "shapely-2.0.3-cp310-cp310-win32.whl", hash = "sha256:6dfdc077a6fcaf74d3eab23a1ace5abc50c8bce56ac7747d25eab582c5a2990e"}, + {file = "shapely-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:64c5013dacd2d81b3bb12672098a0b2795c1bf8190cfc2980e380f5ef9d9e4d9"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:56cee3e4e8159d6f2ce32e421445b8e23154fd02a0ac271d6a6c0b266a8e3cce"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:619232c8276fded09527d2a9fd91a7885ff95c0ff9ecd5e3cb1e34fbb676e2ae"}, + {file = "shapely-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2a7d256db6f5b4b407dc0c98dd1b2fcf1c9c5814af9416e5498d0a2e4307a4b"}, + {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45f0c8cd4583647db3216d965d49363e6548c300c23fd7e57ce17a03f824034"}, + {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13cb37d3826972a82748a450328fe02a931dcaed10e69a4d83cc20ba021bc85f"}, + {file = "shapely-2.0.3-cp311-cp311-win32.whl", hash = "sha256:9302d7011e3e376d25acd30d2d9e70d315d93f03cc748784af19b00988fc30b1"}, + {file = "shapely-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6b464f2666b13902835f201f50e835f2f153f37741db88f68c7f3b932d3505fa"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e86e7cb8e331a4850e0c2a8b2d66dc08d7a7b301b8d1d34a13060e3a5b4b3b55"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c91981c99ade980fc49e41a544629751a0ccd769f39794ae913e53b07b2f78b9"}, + {file = "shapely-2.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd45d456983dc60a42c4db437496d3f08a4201fbf662b69779f535eb969660af"}, + {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:882fb1ffc7577e88c1194f4f1757e277dc484ba096a3b94844319873d14b0f2d"}, + {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9f2d93bff2ea52fa93245798cddb479766a18510ea9b93a4fb9755c79474889"}, + {file = "shapely-2.0.3-cp312-cp312-win32.whl", hash = "sha256:99abad1fd1303b35d991703432c9481e3242b7b3a393c186cfb02373bf604004"}, + {file = "shapely-2.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:6f555fe3304a1f40398977789bc4fe3c28a11173196df9ece1e15c5bc75a48db"}, + {file = "shapely-2.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983cc418c1fa160b7d797cfef0e0c9f8c6d5871e83eae2c5793fce6a837fad9"}, + {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18bddb8c327f392189a8d5d6b9a858945722d0bb95ccbd6a077b8e8fc4c7890d"}, + {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:442f4dcf1eb58c5a4e3428d88e988ae153f97ab69a9f24e07bf4af8038536325"}, + {file = "shapely-2.0.3-cp37-cp37m-win32.whl", hash = "sha256:31a40b6e3ab00a4fd3a1d44efb2482278642572b8e0451abdc8e0634b787173e"}, + {file = "shapely-2.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:59b16976c2473fec85ce65cc9239bef97d4205ab3acead4e6cdcc72aee535679"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:705efbce1950a31a55b1daa9c6ae1c34f1296de71ca8427974ec2f27d57554e3"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:601c5c0058a6192df704cb889439f64994708563f57f99574798721e9777a44b"}, + {file = "shapely-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f24ecbb90a45c962b3b60d8d9a387272ed50dc010bfe605f1d16dfc94772d8a1"}, + {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c2a2989222c6062f7a0656e16276c01bb308bc7e5d999e54bf4e294ce62e76"}, + {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42bceb9bceb3710a774ce04908fda0f28b291323da2688f928b3f213373b5aee"}, + {file = "shapely-2.0.3-cp38-cp38-win32.whl", hash = "sha256:54d925c9a311e4d109ec25f6a54a8bd92cc03481a34ae1a6a92c1fe6729b7e01"}, + {file = "shapely-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:300d203b480a4589adefff4c4af0b13919cd6d760ba3cbb1e56275210f96f654"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:083d026e97b6c1f4a9bd2a9171c7692461092ed5375218170d91705550eecfd5"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27b6e1910094d93e9627f2664121e0e35613262fc037051680a08270f6058daf"}, + {file = "shapely-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:71b2de56a9e8c0e5920ae5ddb23b923490557ac50cb0b7fa752761bf4851acde"}, + {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d279e56bbb68d218d63f3efc80c819cedcceef0e64efbf058a1df89dc57201b"}, + {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88566d01a30f0453f7d038db46bc83ce125e38e47c5f6bfd4c9c287010e9bf74"}, + {file = "shapely-2.0.3-cp39-cp39-win32.whl", hash = "sha256:58afbba12c42c6ed44c4270bc0e22f3dadff5656d711b0ad335c315e02d04707"}, + {file = "shapely-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:5026b30433a70911979d390009261b8c4021ff87c7c3cbd825e62bb2ffa181bc"}, + {file = "shapely-2.0.3.tar.gz", hash = "sha256:4d65d0aa7910af71efa72fd6447e02a8e5dd44da81a983de9d736d6e6ccbe674"}, +] + +[package.dependencies] +numpy = ">=1.14,<2" + +[package.extras] +docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +test = ["pytest", "pytest-cov"] + [[package]] name = "shellingham" version = "1.5.4" @@ -4931,6 +6597,17 @@ files = [ {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + [[package]] name = "soupsieve" version = "2.5" @@ -5029,6 +6706,23 @@ postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] pymysql = ["pymysql"] sqlcipher = ["sqlcipher3_binary"] +[[package]] +name = "starlette" +version = "0.37.2" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.37.2-py3-none-any.whl", hash = "sha256:6fe59f29268538e5d0d182f2791a479a0c64638e6935d1c6989e63fb2699c6ee"}, + {file = "starlette-0.37.2.tar.gz", hash = "sha256:9af890290133b79fc3db55474ade20f6220a364a0402e0b556e7cd5e1e093823"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] + [[package]] name = "streamlit" version = "1.33.0" @@ -5087,6 +6781,20 @@ all = ["dash (>=2.3.1,<3.0.0)", "plotly (>=5.14.1,<6.0.0)"] dash = ["dash (>=2.3.1,<3.0.0)"] plotly = ["plotly (>=5.14.1,<6.0.0)"] +[[package]] +name = "sympy" +version = "1.12" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, + {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, +] + +[package.dependencies] +mpmath = ">=0.19" + [[package]] name = "tabulate" version = "0.9.0" @@ -5207,6 +6915,133 @@ requests = ">=2.26.0" [package.extras] blobfile = ["blobfile (>=2)"] +[[package]] +name = "tokenizers" +version = "0.15.2" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tokenizers-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:52f6130c9cbf70544287575a985bf44ae1bda2da7e8c24e97716080593638012"}, + {file = "tokenizers-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:054c1cc9c6d68f7ffa4e810b3d5131e0ba511b6e4be34157aa08ee54c2f8d9ee"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9b9b070fdad06e347563b88c278995735292ded1132f8657084989a4c84a6d5"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea621a7eef4b70e1f7a4e84dd989ae3f0eeb50fc8690254eacc08acb623e82f1"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf7fd9a5141634fa3aa8d6b7be362e6ae1b4cda60da81388fa533e0b552c98fd"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44f2a832cd0825295f7179eaf173381dc45230f9227ec4b44378322d900447c9"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b9ec69247a23747669ec4b0ca10f8e3dfb3545d550258129bd62291aabe8605"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b6a4c78da863ff26dbd5ad9a8ecc33d8a8d97b535172601cf00aee9d7ce9ce"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5ab2a4d21dcf76af60e05af8063138849eb1d6553a0d059f6534357bce8ba364"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a47acfac7e511f6bbfcf2d3fb8c26979c780a91e06fb5b9a43831b2c0153d024"}, + {file = "tokenizers-0.15.2-cp310-none-win32.whl", hash = "sha256:064ff87bb6acdbd693666de9a4b692add41308a2c0ec0770d6385737117215f2"}, + {file = "tokenizers-0.15.2-cp310-none-win_amd64.whl", hash = "sha256:3b919afe4df7eb6ac7cafd2bd14fb507d3f408db7a68c43117f579c984a73843"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:89cd1cb93e4b12ff39bb2d626ad77e35209de9309a71e4d3d4672667b4b256e7"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cfed5c64e5be23d7ee0f0e98081a25c2a46b0b77ce99a4f0605b1ec43dd481fa"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a907d76dcfda37023ba203ab4ceeb21bc5683436ebefbd895a0841fd52f6f6f2"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20ea60479de6fc7b8ae756b4b097572372d7e4032e2521c1bbf3d90c90a99ff0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:48e2b9335be2bc0171df9281385c2ed06a15f5cf121c44094338306ab7b33f2c"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:112a1dd436d2cc06e6ffdc0b06d55ac019a35a63afd26475205cb4b1bf0bfbff"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4620cca5c2817177ee8706f860364cc3a8845bc1e291aaf661fb899e5d1c45b0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccd73a82751c523b3fc31ff8194702e4af4db21dc20e55b30ecc2079c5d43cb7"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:107089f135b4ae7817affe6264f8c7a5c5b4fd9a90f9439ed495f54fcea56fb4"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0ff110ecc57b7aa4a594396525a3451ad70988e517237fe91c540997c4e50e29"}, + {file = "tokenizers-0.15.2-cp311-none-win32.whl", hash = "sha256:6d76f00f5c32da36c61f41c58346a4fa7f0a61be02f4301fd30ad59834977cc3"}, + {file = "tokenizers-0.15.2-cp311-none-win_amd64.whl", hash = "sha256:cc90102ed17271cf0a1262babe5939e0134b3890345d11a19c3145184b706055"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f86593c18d2e6248e72fb91c77d413a815153b8ea4e31f7cd443bdf28e467670"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0774bccc6608eca23eb9d620196687c8b2360624619623cf4ba9dc9bd53e8b51"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d0222c5b7c9b26c0b4822a82f6a7011de0a9d3060e1da176f66274b70f846b98"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3835738be1de66624fff2f4f6f6684775da4e9c00bde053be7564cbf3545cc66"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0143e7d9dcd811855c1ce1ab9bf5d96d29bf5e528fd6c7824d0465741e8c10fd"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db35825f6d54215f6b6009a7ff3eedee0848c99a6271c870d2826fbbedf31a38"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f5e64b0389a2be47091d8cc53c87859783b837ea1a06edd9d8e04004df55a5c"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e0480c452217edd35eca56fafe2029fb4d368b7c0475f8dfa3c5c9c400a7456"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a33ab881c8fe70474980577e033d0bc9a27b7ab8272896e500708b212995d834"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a308a607ca9de2c64c1b9ba79ec9a403969715a1b8ba5f998a676826f1a7039d"}, + {file = "tokenizers-0.15.2-cp312-none-win32.whl", hash = "sha256:b8fcfa81bcb9447df582c5bc96a031e6df4da2a774b8080d4f02c0c16b42be0b"}, + {file = "tokenizers-0.15.2-cp312-none-win_amd64.whl", hash = "sha256:38d7ab43c6825abfc0b661d95f39c7f8af2449364f01d331f3b51c94dcff7221"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:38bfb0204ff3246ca4d5e726e8cc8403bfc931090151e6eede54d0e0cf162ef0"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c861d35e8286a53e06e9e28d030b5a05bcbf5ac9d7229e561e53c352a85b1fc"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:936bf3842db5b2048eaa53dade907b1160f318e7c90c74bfab86f1e47720bdd6"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:620beacc3373277700d0e27718aa8b25f7b383eb8001fba94ee00aeea1459d89"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2735ecbbf37e52db4ea970e539fd2d450d213517b77745114f92867f3fc246eb"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:473c83c5e2359bb81b0b6fde870b41b2764fcdd36d997485e07e72cc3a62264a"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968fa1fb3c27398b28a4eca1cbd1e19355c4d3a6007f7398d48826bbe3a0f728"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:865c60ae6eaebdde7da66191ee9b7db52e542ed8ee9d2c653b6d190a9351b980"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7c0d8b52664ab2d4a8d6686eb5effc68b78608a9008f086a122a7b2996befbab"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f33dfbdec3784093a9aebb3680d1f91336c56d86cc70ddf88708251da1fe9064"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d44ba80988ff9424e33e0a49445072ac7029d8c0e1601ad25a0ca5f41ed0c1d6"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:dce74266919b892f82b1b86025a613956ea0ea62a4843d4c4237be2c5498ed3a"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0ef06b9707baeb98b316577acb04f4852239d856b93e9ec3a299622f6084e4be"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73e2e74bbb07910da0d37c326869f34113137b23eadad3fc00856e6b3d9930c"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eeb12daf02a59e29f578a865f55d87cd103ce62bd8a3a5874f8fdeaa82e336b"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ba9f6895af58487ca4f54e8a664a322f16c26bbb442effd01087eba391a719e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccec77aa7150e38eec6878a493bf8c263ff1fa8a62404e16c6203c64c1f16a26"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f40604f5042ff210ba82743dda2b6aa3e55aa12df4e9f2378ee01a17e2855e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5645938a42d78c4885086767c70923abad047163d809c16da75d6b290cb30bbe"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05a77cbfebe28a61ab5c3891f9939cc24798b63fa236d84e5f29f3a85a200c00"}, + {file = "tokenizers-0.15.2-cp37-none-win32.whl", hash = "sha256:361abdc068e8afe9c5b818769a48624687fb6aaed49636ee39bec4e95e1a215b"}, + {file = "tokenizers-0.15.2-cp37-none-win_amd64.whl", hash = "sha256:7ef789f83eb0f9baeb4d09a86cd639c0a5518528f9992f38b28e819df397eb06"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4fe1f74a902bee74a3b25aff180fbfbf4f8b444ab37c4d496af7afd13a784ed2"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c4b89038a684f40a6b15d6b09f49650ac64d951ad0f2a3ea9169687bbf2a8ba"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d05a1b06f986d41aed5f2de464c003004b2df8aaf66f2b7628254bcbfb72a438"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:508711a108684111ec8af89d3a9e9e08755247eda27d0ba5e3c50e9da1600f6d"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:daa348f02d15160cb35439098ac96e3a53bacf35885072611cd9e5be7d333daa"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:494fdbe5932d3416de2a85fc2470b797e6f3226c12845cadf054dd906afd0442"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2d60f5246f4da9373f75ff18d64c69cbf60c3bca597290cea01059c336d2470"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93268e788825f52de4c7bdcb6ebc1fcd4a5442c02e730faa9b6b08f23ead0e24"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6fc7083ab404019fc9acafe78662c192673c1e696bd598d16dc005bd663a5cf9"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e39b41e5531d6b2122a77532dbea60e171ef87a3820b5a3888daa847df4153"}, + {file = "tokenizers-0.15.2-cp38-none-win32.whl", hash = "sha256:06cd0487b1cbfabefb2cc52fbd6b1f8d4c37799bd6c6e1641281adaa6b2504a7"}, + {file = "tokenizers-0.15.2-cp38-none-win_amd64.whl", hash = "sha256:5179c271aa5de9c71712e31cb5a79e436ecd0d7532a408fa42a8dbfa4bc23fd9"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:82f8652a74cc107052328b87ea8b34291c0f55b96d8fb261b3880216a9f9e48e"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:02458bee6f5f3139f1ebbb6d042b283af712c0981f5bc50edf771d6b762d5e4f"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9a09cd26cca2e1c349f91aa665309ddb48d71636370749414fbf67bc83c5343"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158be8ea8554e5ed69acc1ce3fbb23a06060bd4bbb09029431ad6b9a466a7121"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ddba9a2b0c8c81633eca0bb2e1aa5b3a15362b1277f1ae64176d0f6eba78ab1"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ef5dd1d39797044642dbe53eb2bc56435308432e9c7907728da74c69ee2adca"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:454c203164e07a860dbeb3b1f4a733be52b0edbb4dd2e5bd75023ffa8b49403a"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cf6b7f1d4dc59af960e6ffdc4faffe6460bbfa8dce27a58bf75755ffdb2526d"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2ef09bbc16519f6c25d0c7fc0c6a33a6f62923e263c9d7cca4e58b8c61572afb"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c9a2ebdd2ad4ec7a68e7615086e633857c85e2f18025bd05d2a4399e6c5f7169"}, + {file = "tokenizers-0.15.2-cp39-none-win32.whl", hash = "sha256:918fbb0eab96fe08e72a8c2b5461e9cce95585d82a58688e7f01c2bd546c79d0"}, + {file = "tokenizers-0.15.2-cp39-none-win_amd64.whl", hash = "sha256:524e60da0135e106b254bd71f0659be9f89d83f006ea9093ce4d1fab498c6d0d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6a9b648a58281c4672212fab04e60648fde574877d0139cd4b4f93fe28ca8944"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7c7d18b733be6bbca8a55084027f7be428c947ddf871c500ee603e375013ffba"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:13ca3611de8d9ddfbc4dc39ef54ab1d2d4aaa114ac8727dfdc6a6ec4be017378"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:237d1bf3361cf2e6463e6c140628e6406766e8b27274f5fcc62c747ae3c6f094"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67a0fe1e49e60c664915e9fb6b0cb19bac082ab1f309188230e4b2920230edb3"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4e022fe65e99230b8fd89ebdfea138c24421f91c1a4f4781a8f5016fd5cdfb4d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d857be2df69763362ac699f8b251a8cd3fac9d21893de129bc788f8baaef2693"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:708bb3e4283177236309e698da5fcd0879ce8fd37457d7c266d16b550bcbbd18"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c35e09e9899b72a76e762f9854e8750213f67567787d45f37ce06daf57ca78"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1257f4394be0d3b00de8c9e840ca5601d0a4a8438361ce9c2b05c7d25f6057b"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02272fe48280e0293a04245ca5d919b2c94a48b408b55e858feae9618138aeda"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dc3ad9ebc76eabe8b1d7c04d38be884b8f9d60c0cdc09b0aa4e3bcf746de0388"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:32e16bdeffa7c4f46bf2152172ca511808b952701d13e7c18833c0b73cb5c23f"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fb16ba563d59003028b678d2361a27f7e4ae0ab29c7a80690efa20d829c81fdb"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:2277c36d2d6cdb7876c274547921a42425b6810d38354327dd65a8009acf870c"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cf75d32e8d250781940d07f7eece253f2fe9ecdb1dc7ba6e3833fa17b82fcbc"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1b3b31884dc8e9b21508bb76da80ebf7308fdb947a17affce815665d5c4d028"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10122d8d8e30afb43bb1fe21a3619f62c3e2574bff2699cf8af8b0b6c5dc4a3"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d88b96ff0fe8e91f6ef01ba50b0d71db5017fa4e3b1d99681cec89a85faf7bf7"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:37aaec5a52e959892870a7c47cef80c53797c0db9149d458460f4f31e2fb250e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e2ea752f2b0fe96eb6e2f3adbbf4d72aaa1272079b0dfa1145507bd6a5d537e6"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b19a808d8799fda23504a5cd31d2f58e6f52f140380082b352f877017d6342b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c86e5e068ac8b19204419ed8ca90f9d25db20578f5881e337d203b314f4104"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de19c4dc503c612847edf833c82e9f73cd79926a384af9d801dcf93f110cea4e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea09acd2fe3324174063d61ad620dec3bcf042b495515f27f638270a7d466e8b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cf27fd43472e07b57cf420eee1e814549203d56de00b5af8659cb99885472f1f"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7ca22bd897537a0080521445d91a58886c8c04084a6a19e6c78c586e0cfa92a5"}, + {file = "tokenizers-0.15.2.tar.gz", hash = "sha256:e6e9c6e019dd5484be5beafc775ae6c925f4c69a3487040ed09b45e13df2cb91"}, +] + +[package.dependencies] +huggingface_hub = ">=0.16.4,<1.0" + +[package.extras] +dev = ["tokenizers[testing]"] +docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"] +testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] + [[package]] name = "toml" version = "0.10.2" @@ -5291,6 +7126,42 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "trio" +version = "0.25.0" +description = "A friendly Python library for async concurrency and I/O" +optional = false +python-versions = ">=3.8" +files = [ + {file = "trio-0.25.0-py3-none-any.whl", hash = "sha256:e6458efe29cc543e557a91e614e2b51710eba2961669329ce9c862d50c6e8e81"}, + {file = "trio-0.25.0.tar.gz", hash = "sha256:9b41f5993ad2c0e5f62d0acca320ec657fdb6b2a2c22b8c7aed6caf154475c4e"}, +] + +[package.dependencies] +attrs = ">=23.2.0" +cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""} +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = "*" +outcome = "*" +sniffio = ">=1.3.0" +sortedcontainers = "*" + +[[package]] +name = "trio-websocket" +version = "0.11.1" +description = "WebSocket library for Trio" +optional = false +python-versions = ">=3.7" +files = [ + {file = "trio-websocket-0.11.1.tar.gz", hash = "sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f"}, + {file = "trio_websocket-0.11.1-py3-none-any.whl", hash = "sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +trio = ">=0.11" +wsproto = ">=0.14" + [[package]] name = "trove-classifiers" version = "2024.3.25" @@ -5350,13 +7221,13 @@ urllib3 = ">=2" [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] @@ -5396,12 +7267,85 @@ files = [ {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] +[package.dependencies] +pysocks = {version = ">=1.5.6,<1.5.7 || >1.5.7,<2.0", optional = true, markers = "extra == \"socks\""} + [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "uvicorn" +version = "0.29.0" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, + {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} +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\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "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" +version = "0.19.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, + {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, +] + +[package.extras] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + [[package]] name = "virtualenv" version = "20.25.1" @@ -5463,6 +7407,93 @@ files = [ [package.extras] watchmedo = ["PyYAML (>=3.10)"] +[[package]] +name = "watchfiles" +version = "0.21.0" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, + {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, + {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, + {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, + {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, + {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, + {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, + {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, + {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, + {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, + {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, + {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, + {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, + {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, +] + +[package.dependencies] +anyio = ">=3.0.0" + [[package]] name = "web3" version = "6.16.0" @@ -5498,6 +7529,22 @@ ipfs = ["ipfshttpclient (==0.8.0a2)"] linter = ["black (>=22.1.0)", "flake8 (==3.8.3)", "isort (>=5.11.0)", "mypy (==1.4.1)", "types-protobuf (==3.19.13)", "types-requests (>=2.26.1)", "types-setuptools (>=57.4.4)"] tester = ["eth-tester[py-evm] (==v0.9.1-b.2)", "py-geth (>=3.14.0)"] +[[package]] +name = "websocket-client" +version = "1.7.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + [[package]] name = "websockets" version = "12.0" @@ -5689,6 +7736,20 @@ files = [ {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] +[[package]] +name = "wsproto" +version = "1.2.0" +description = "WebSockets state-machine based protocol implementation" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, + {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, +] + +[package.dependencies] +h11 = ">=0.9.0,<1" + [[package]] name = "xattr" version = "1.1.0" @@ -5865,6 +7926,41 @@ files = [ idna = ">=2.0" multidict = ">=4.0" +[[package]] +name = "youtube-transcript-api" +version = "0.6.2" +description = "This is an python API which allows you to get the transcripts/subtitles for a given YouTube video. It also works for automatically generated subtitles, supports translating subtitles and it does not require a headless browser, like other selenium based solutions do!" +optional = false +python-versions = "*" +files = [ + {file = "youtube_transcript_api-0.6.2-py3-none-any.whl", hash = "sha256:019dbf265c6a68a0591c513fff25ed5a116ce6525832aefdfb34d4df5567121c"}, + {file = "youtube_transcript_api-0.6.2.tar.gz", hash = "sha256:cad223d7620633cec44f657646bffc8bbc5598bd8e70b1ad2fa8277dec305eb7"}, +] + +[package.dependencies] +requests = "*" + +[[package]] +name = "yt-dlp" +version = "2023.12.30" +description = "A youtube-dl fork with additional features and patches" +optional = false +python-versions = ">=3.8" +files = [ + {file = "yt-dlp-2023.12.30.tar.gz", hash = "sha256:a11862e57721b0a0f0883dfeb5a4d79ba213a2d4c45e1880e9fd70f8e6570c38"}, + {file = "yt_dlp-2023.12.30-py2.py3-none-any.whl", hash = "sha256:c00d9a71d64472ad441bcaa1ec0c3797d6e60c9f934f270096a96fe51657e7b3"}, +] + +[package.dependencies] +brotli = {version = "*", markers = "implementation_name == \"cpython\""} +brotlicffi = {version = "*", markers = "implementation_name != \"cpython\""} +certifi = "*" +mutagen = "*" +pycryptodomex = "*" +requests = ">=2.31.0,<3" +urllib3 = ">=1.26.17,<3" +websockets = ">=12.0" + [[package]] name = "zipp" version = "3.18.1" @@ -5883,4 +7979,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "~3.10.0" -content-hash = "2c7297123c99f345ce9315b102e123effec13043076f3271d45dc3e1ba6518ee" +content-hash = "519a0a933206e3e8ccbd106bce628ecbb2005fc972d4b4ec9e9f3b8bf72456d0" diff --git a/pyproject.toml b/pyproject.toml index 9b3f0440..8f44a03f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,7 @@ google-search-results = "*" pytest = "*" llama-index = "~0.9.0" duckduckgo-search = "*" -crewai = {extras = ["tools"], version = "^0.22.5"} +crewai = {extras = ["tools"], version = ">=0.22.5 <0."} # metagpt = "*" # Commented out because requires super old version of langchain, and conflicts with crewai. replicate = "*" typer = "^0.9.0" From f1cfadca08a99ae3e70e1ed8fb9e785f65624ba8 Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Tue, 9 Apr 2024 17:42:50 -0300 Subject: [PATCH 10/17] Benchmark generated for subsequential agent (5 markets) --- poetry.lock | 583 +++++++++++++++++- .../crewai_subsequential_agent/benchmark.py | 69 ++- .../crewai_agent_subquestions.py | 54 +- .../crewai_subsequential_agent/deploy.py | 19 +- .../crewai_subsequential_agent/prompts.py | 9 +- prediction_market_agent/tools/crewai_tools.py | 34 +- pyproject.toml | 2 +- 7 files changed, 696 insertions(+), 74 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1a8da7c5..23ea8a2f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -520,6 +520,137 @@ files = [ {file = "blinker-1.7.0.tar.gz", hash = "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"}, ] +[[package]] +name = "brotli" +version = "1.1.0" +description = "Python bindings for the Brotli compression library" +optional = false +python-versions = "*" +files = [ + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, + {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, + {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, + {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, + {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, + {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, + {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, + {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, + {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, + {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, +] + +[[package]] +name = "brotlicffi" +version = "1.1.0.0" +description = "Python CFFI bindings to the Brotli library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"}, + {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, +] + +[package.dependencies] +cffi = ">=1.0.0" + [[package]] name = "build" version = "1.2.1" @@ -1032,6 +1163,7 @@ files = [ [package.dependencies] appdirs = ">=1.4.4,<2.0.0" click = ">=8.1.7,<9.0.0" +crewai-tools = {version = ">=0.1.6,<0.2.0", optional = true, markers = "extra == \"tools\""} embedchain = ">=0.1.98,<0.2.0" instructor = ">=0.5.2,<0.6.0" langchain = ">=0.1.10,<0.2.0" @@ -1046,6 +1178,31 @@ regex = ">=2023.12.25,<2024.0.0" [package.extras] tools = ["crewai-tools (>=0.1.6,<0.2.0)"] +[[package]] +name = "crewai-tools" +version = "0.1.6" +description = "Set of tools for the crewAI framework" +optional = false +python-versions = "<=3.13,>=3.10" +files = [ + {file = "crewai_tools-0.1.6-py3-none-any.whl", hash = "sha256:06bb24d434919da98498d10585b83cad6503d7e3ac03b166e9b8784de64dd337"}, + {file = "crewai_tools-0.1.6.tar.gz", hash = "sha256:b999c4f4ed422183774206696466ee02b8a3f70c16e19dc9cbe1fa9b47788f8c"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.12.3,<5.0.0" +chromadb = ">=0.4.22,<0.5.0" +embedchain = {version = ">=0.1.85,<0.2.0", extras = ["github", "youtube"]} +lancedb = ">=0.5.4,<0.6.0" +langchain = ">=0.1.4,<0.2.0" +openai = ">=1.12.0,<2.0.0" +pydantic = ">=2.6.1,<3.0.0" +pyright = ">=1.1.350,<2.0.0" +pytest = ">=8.0.0,<9.0.0" +pytube = ">=15.0.0,<16.0.0" +requests = ">=2.31.0,<3.0.0" +selenium = ">=4.18.1,<5.0.0" + [[package]] name = "cron-validator" version = "1.0.8" @@ -1274,6 +1431,17 @@ files = [ marshmallow = ">=3.18.0,<4.0.0" typing-inspect = ">=0.4.0,<1" +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + [[package]] name = "deprecated" version = "1.2.14" @@ -1503,12 +1671,14 @@ files = [ alembic = ">=1.13.1,<2.0.0" beautifulsoup4 = ">=4.12.2,<5.0.0" chromadb = ">=0.4.17,<0.5.0" +gitpython = {version = ">=3.1.38,<4.0.0", optional = true, markers = "extra == \"github\""} google-cloud-aiplatform = ">=1.26.1,<2.0.0" gptcache = ">=0.1.43,<0.2.0" langchain = ">=0.1.4,<0.2.0" langchain-openai = ">=0.0.5,<0.0.6" openai = ">=1.1.1" posthog = ">=3.0.2,<4.0.0" +PyGithub = {version = ">=1.59.1,<2.0.0", optional = true, markers = "extra == \"github\""} pypdf = ">=3.11.0,<4.0.0" pysbd = ">=0.3.4,<0.4.0" python-dotenv = ">=1.0.0,<2.0.0" @@ -1516,6 +1686,8 @@ rich = ">=13.7.0,<14.0.0" schema = ">=0.7.5,<0.8.0" sqlalchemy = ">=2.0.27,<3.0.0" tiktoken = ">=0.5.2,<0.6.0" +youtube-transcript-api = {version = ">=0.6.1,<0.7.0", optional = true, markers = "extra == \"dataloaders\" or extra == \"youtube\""} +yt_dlp = {version = ">=2023.11.14,<2024.0.0", optional = true, markers = "extra == \"youtube\""} [package.extras] aws-bedrock = ["boto3 (>=1.34.20,<2.0.0)"] @@ -3062,6 +3234,39 @@ websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" [package.extras] adal = ["adal (>=1.0.2)"] +[[package]] +name = "lancedb" +version = "0.5.7" +description = "lancedb" +optional = false +python-versions = ">=3.8" +files = [ + {file = "lancedb-0.5.7-py3-none-any.whl", hash = "sha256:6169966f715ef530be545950e1aaf9f3f160967e4ba7456cd67c9f30f678095d"}, + {file = "lancedb-0.5.7.tar.gz", hash = "sha256:878914b493f91d09a77b14f1528104741f273234cbdd6671be705f447701fd51"}, +] + +[package.dependencies] +attrs = ">=21.3.0" +cachetools = "*" +click = ">=8.1.7" +deprecation = "*" +overrides = ">=0.7" +pydantic = ">=1.10" +pylance = "0.9.18" +pyyaml = ">=6.0" +ratelimiter = ">=1.0,<2.0" +requests = ">=2.31.0" +retry = ">=0.9.2" +semver = ">=3.0" +tqdm = ">=4.27.0" + +[package.extras] +clip = ["open-clip", "pillow", "torch"] +dev = ["pre-commit", "ruff"] +docs = ["mkdocs", "mkdocs-jupyter", "mkdocs-material", "mkdocs-ultralytics-plugin (==0.0.44)", "mkdocstrings[python]"] +embeddings = ["InstructorEmbedding", "awscli (>=1.29.57)", "boto3 (>=1.28.57)", "botocore (>=1.31.57)", "cohere", "google.generativeai", "huggingface-hub", "open-clip-torch", "openai (>=1.6.1)", "pillow", "sentence-transformers", "torch"] +tests = ["aiohttp", "duckdb", "pandas (>=1.4)", "polars (>=0.19)", "pytest", "pytest-asyncio", "pytest-mock", "pytz"] + [[package]] name = "langchain" version = "0.1.14" @@ -3840,6 +4045,17 @@ files = [ {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] +[[package]] +name = "mutagen" +version = "1.47.0" +description = "read and write audio tags for many formats" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719"}, + {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, +] + [[package]] name = "mypy" version = "1.9.0" @@ -3952,6 +4168,20 @@ plot = ["matplotlib"] tgrep = ["pyparsing"] twitter = ["twython"] +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + [[package]] name = "numexpr" version = "2.10.0" @@ -4361,6 +4591,20 @@ files = [ {file = "orjson-3.10.0.tar.gz", hash = "sha256:ba4d8cac5f2e2cff36bea6b6481cdb92b38c202bcec603d6f5ff91960595a1ed"}, ] +[[package]] +name = "outcome" +version = "1.3.0.post0" +description = "Capture the outcome of Python function calls." +optional = false +python-versions = ">=3.7" +files = [ + {file = "outcome-1.3.0.post0-py2.py3-none-any.whl", hash = "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"}, + {file = "outcome-1.3.0.post0.tar.gz", hash = "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8"}, +] + +[package.dependencies] +attrs = ">=19.2.0" + [[package]] name = "overrides" version = "7.7.0" @@ -4851,6 +5095,17 @@ all = ["apache-bookkeeper-client (>=4.16.1)", "fastavro (>=1.9.2)", "grpcio (>=1 avro = ["fastavro (>=1.9.2)"] functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + [[package]] name = "pyarrow" version = "15.0.2" @@ -5013,6 +5268,47 @@ files = [ {file = "pycryptodome-3.20.0.tar.gz", hash = "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"}, ] +[[package]] +name = "pycryptodomex" +version = "3.20.0" +description = "Cryptographic library for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodomex-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win32.whl", hash = "sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427"}, + {file = "pycryptodomex-3.20.0.tar.gz", hash = "sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"}, +] + [[package]] name = "pydantic" version = "2.6.4" @@ -5172,6 +5468,23 @@ files = [ {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, ] +[[package]] +name = "pygithub" +version = "1.59.1" +description = "Use the full Github API v3" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyGithub-1.59.1-py3-none-any.whl", hash = "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9"}, + {file = "PyGithub-1.59.1.tar.gz", hash = "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217"}, +] + +[package.dependencies] +deprecated = "*" +pyjwt = {version = ">=2.4.0", extras = ["crypto"]} +pynacl = ">=1.4.0" +requests = ">=2.14.0" + [[package]] name = "pygments" version = "2.17.2" @@ -5187,6 +5500,76 @@ files = [ plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyjwt" +version = "2.8.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pylance" +version = "0.9.18" +description = "python wrapper for Lance columnar format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pylance-0.9.18-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:fe2445d922c594d90e89111385106f6b152caab27996217db7bb4b8947eb0bea"}, + {file = "pylance-0.9.18-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a2c424c50f5186edbbcc5a26f34063ed09d9a7390e28033395728ce02b5658f0"}, + {file = "pylance-0.9.18-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10af06edfde3e8451bf2251381d3980a0a164eab9d4c3d4dc8b6318969e958a6"}, + {file = "pylance-0.9.18-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:d8bb9045d7163cc966b9fe34a917044192be37a90915475b77461e5b7d89e442"}, + {file = "pylance-0.9.18-cp38-abi3-win_amd64.whl", hash = "sha256:5ea80b7bf70d992f3fe63bce2d2f064f742124c04eaedeb76baca408ded85a2c"}, +] + +[package.dependencies] +numpy = ">=1.22" +pyarrow = ">=12" + +[package.extras] +benchmarks = ["pytest-benchmark"] +dev = ["ruff (==0.2.2)"] +tests = ["datasets", "duckdb", "ml_dtypes", "pandas", "pillow", "polars[pandas,pyarrow]", "pytest", "tensorflow", "tqdm"] +torch = ["torch"] + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + [[package]] name = "pypdf" version = "3.17.4" @@ -5240,6 +5623,24 @@ files = [ {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, ] +[[package]] +name = "pyright" +version = "1.1.357" +description = "Command line wrapper for pyright" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyright-1.1.357-py3-none-any.whl", hash = "sha256:1cf29ee38e4928131895cd8e90eef37b5b77e2ed72a14e6e8e2405266f5f0aca"}, + {file = "pyright-1.1.357.tar.gz", hash = "sha256:7c66261116c78c5fa9629134fe85c54cc5302ab73e376be4b0a99d89c80a9403"}, +] + +[package.dependencies] +nodeenv = ">=1.6.0" + +[package.extras] +all = ["twine (>=3.4.1)"] +dev = ["twine (>=3.4.1)"] + [[package]] name = "pysbd" version = "0.3.4" @@ -5250,6 +5651,18 @@ files = [ {file = "pysbd-0.3.4-py3-none-any.whl", hash = "sha256:cd838939b7b0b185fcf86b0baf6636667dfb6e474743beeff878e9f42e022953"}, ] +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] + [[package]] name = "pytest" version = "8.1.1" @@ -5318,6 +5731,17 @@ files = [ [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "pytube" +version = "15.0.0" +description = "Python 3 library for downloading YouTube Videos." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytube-15.0.0-py3-none-any.whl", hash = "sha256:07b9904749e213485780d7eb606e5e5b8e4341aa4dccf699160876da00e12d78"}, + {file = "pytube-15.0.0.tar.gz", hash = "sha256:076052efe76f390dfa24b1194ff821d4e86c17d41cb5562f3a276a8bcbfc9d1d"}, +] + [[package]] name = "pytz" version = "2024.1" @@ -5535,6 +5959,20 @@ files = [ [package.extras] full = ["numpy"] +[[package]] +name = "ratelimiter" +version = "1.2.0.post0" +description = "Simple python rate limiting object" +optional = false +python-versions = "*" +files = [ + {file = "ratelimiter-1.2.0.post0-py3-none-any.whl", hash = "sha256:a52be07bc0bb0b3674b4b304550f10c769bbb00fead3072e035904474259809f"}, + {file = "ratelimiter-1.2.0.post0.tar.gz", hash = "sha256:5c395dcabdbbde2e5178ef3f89b568a3066454a6ddc223b76473dac22f89b4f7"}, +] + +[package.extras] +test = ["pytest (>=3.0)", "pytest-asyncio"] + [[package]] name = "referencing" version = "0.34.0" @@ -5725,6 +6163,21 @@ files = [ [package.dependencies] requests = ">=2.0.1,<3.0.0" +[[package]] +name = "retry" +version = "0.9.2" +description = "Easy to use retry decorator." +optional = false +python-versions = "*" +files = [ + {file = "retry-0.9.2-py2.py3-none-any.whl", hash = "sha256:ccddf89761fa2c726ab29391837d4327f819ea14d244c232a1d24c67a2f98606"}, + {file = "retry-0.9.2.tar.gz", hash = "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4"}, +] + +[package.dependencies] +decorator = ">=3.4.2" +py = ">=1.4.26,<2.0.0" + [[package]] name = "rich" version = "13.7.1" @@ -5998,6 +6451,35 @@ files = [ cryptography = ">=2.0" jeepney = ">=0.6" +[[package]] +name = "selenium" +version = "4.19.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "selenium-4.19.0-py3-none-any.whl", hash = "sha256:5b4f49240d61e687a73f7968ae2517d403882aae3550eae2a229c745e619f1d9"}, + {file = "selenium-4.19.0.tar.gz", hash = "sha256:d9dfd6d0b021d71d0a48b865fe7746490ba82b81e9c87b212360006629eb1853"}, +] + +[package.dependencies] +certifi = ">=2021.10.8" +trio = ">=0.17,<1.0" +trio-websocket = ">=0.9,<1.0" +typing_extensions = ">=4.9.0" +urllib3 = {version = ">=1.26,<3", extras = ["socks"]} + +[[package]] +name = "semver" +version = "3.0.2" +description = "Python helper for Semantic Versioning (https://semver.org)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"}, + {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"}, +] + [[package]] name = "serpapi" version = "0.1.5" @@ -6133,6 +6615,17 @@ files = [ {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + [[package]] name = "soupsieve" version = "2.5" @@ -6651,6 +7144,42 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "trio" +version = "0.25.0" +description = "A friendly Python library for async concurrency and I/O" +optional = false +python-versions = ">=3.8" +files = [ + {file = "trio-0.25.0-py3-none-any.whl", hash = "sha256:e6458efe29cc543e557a91e614e2b51710eba2961669329ce9c862d50c6e8e81"}, + {file = "trio-0.25.0.tar.gz", hash = "sha256:9b41f5993ad2c0e5f62d0acca320ec657fdb6b2a2c22b8c7aed6caf154475c4e"}, +] + +[package.dependencies] +attrs = ">=23.2.0" +cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""} +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = "*" +outcome = "*" +sniffio = ">=1.3.0" +sortedcontainers = "*" + +[[package]] +name = "trio-websocket" +version = "0.11.1" +description = "WebSocket library for Trio" +optional = false +python-versions = ">=3.7" +files = [ + {file = "trio-websocket-0.11.1.tar.gz", hash = "sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f"}, + {file = "trio_websocket-0.11.1-py3-none-any.whl", hash = "sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +trio = ">=0.11" +wsproto = ">=0.14" + [[package]] name = "trove-classifiers" version = "2024.3.25" @@ -6756,6 +7285,9 @@ files = [ {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] +[package.dependencies] +pysocks = {version = ">=1.5.6,<1.5.7 || >1.5.7,<2.0", optional = true, markers = "extra == \"socks\""} + [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] h2 = ["h2 (>=4,<5)"] @@ -7222,6 +7754,20 @@ files = [ {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] +[[package]] +name = "wsproto" +version = "1.2.0" +description = "WebSockets state-machine based protocol implementation" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, + {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, +] + +[package.dependencies] +h11 = ">=0.9.0,<1" + [[package]] name = "xattr" version = "1.1.0" @@ -7398,6 +7944,41 @@ files = [ idna = ">=2.0" multidict = ">=4.0" +[[package]] +name = "youtube-transcript-api" +version = "0.6.2" +description = "This is an python API which allows you to get the transcripts/subtitles for a given YouTube video. It also works for automatically generated subtitles, supports translating subtitles and it does not require a headless browser, like other selenium based solutions do!" +optional = false +python-versions = "*" +files = [ + {file = "youtube_transcript_api-0.6.2-py3-none-any.whl", hash = "sha256:019dbf265c6a68a0591c513fff25ed5a116ce6525832aefdfb34d4df5567121c"}, + {file = "youtube_transcript_api-0.6.2.tar.gz", hash = "sha256:cad223d7620633cec44f657646bffc8bbc5598bd8e70b1ad2fa8277dec305eb7"}, +] + +[package.dependencies] +requests = "*" + +[[package]] +name = "yt-dlp" +version = "2023.12.30" +description = "A youtube-dl fork with additional features and patches" +optional = false +python-versions = ">=3.8" +files = [ + {file = "yt-dlp-2023.12.30.tar.gz", hash = "sha256:a11862e57721b0a0f0883dfeb5a4d79ba213a2d4c45e1880e9fd70f8e6570c38"}, + {file = "yt_dlp-2023.12.30-py2.py3-none-any.whl", hash = "sha256:c00d9a71d64472ad441bcaa1ec0c3797d6e60c9f934f270096a96fe51657e7b3"}, +] + +[package.dependencies] +brotli = {version = "*", markers = "implementation_name == \"cpython\""} +brotlicffi = {version = "*", markers = "implementation_name != \"cpython\""} +certifi = "*" +mutagen = "*" +pycryptodomex = "*" +requests = ">=2.31.0,<3" +urllib3 = ">=1.26.17,<3" +websockets = ">=12.0" + [[package]] name = "zipp" version = "3.18.1" @@ -7416,4 +7997,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "~3.10.0" -content-hash = "fef761809aab417b1012bd67e68b9b52b6d33a09fb2b5904c1a54306b334bd7a" +content-hash = "c09e9726f3ab3cbf741266b2bbca13a399899fc4d986c2d49bd1fb6cc4e9ae15" diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py index cab1deb5..e9d7614c 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py @@ -4,7 +4,9 @@ import typer from dotenv import load_dotenv from prediction_market_agent_tooling.benchmark.agents import ( - AbstractBenchmarkedAgent, RandomAgent, FixedAgent, + AbstractBenchmarkedAgent, + FixedAgent, + RandomAgent, ) from prediction_market_agent_tooling.benchmark.benchmark import Benchmarker from prediction_market_agent_tooling.benchmark.utils import ( @@ -12,15 +14,27 @@ Prediction, ) from prediction_market_agent_tooling.gtypes import Probability -from prediction_market_agent_tooling.markets.agent_market import SortBy, FilterBy, AgentMarket -from prediction_market_agent_tooling.markets.markets import get_binary_markets, MarketType +from prediction_market_agent_tooling.markets.agent_market import ( + AgentMarket, + FilterBy, + SortBy, +) +from prediction_market_agent_tooling.markets.markets import ( + MarketType, + get_binary_markets, +) -from prediction_market_agent.agents.crewai_subsequential_agent.crewai_agent_subquestions import CrewAIAgentSubquestions +from prediction_market_agent.agents.crewai_subsequential_agent.crewai_agent_subquestions import ( + CrewAIAgentSubquestions, +) def build_binary_agent_market_from_question(question: str) -> AgentMarket: return AgentMarket( id=question, + url=question, + close_time=None, + volume=None, question=question, p_yes=Probability(0.5), created_time=datetime(2024, 1, 1), @@ -31,11 +45,11 @@ def build_binary_agent_market_from_question(question: str) -> AgentMarket: class CrewAIAgentSubquestionsBenchmark(AbstractBenchmarkedAgent): def __init__( - self, - agent_name: str, - max_workers: int, - model: str, - max_tries: int, + self, + agent_name: str, + max_workers: int, + model: str, + max_tries: int, ) -> None: self.model = model self.max_tries = max_tries @@ -44,20 +58,22 @@ def __init__( def predict(self, market_question: str) -> Prediction: result = self.agent.answer_binary_market(market_question) - return Prediction(outcome_prediction=OutcomePrediction( - p_yes=result.p_yes, - confidence=result.confidence)) + return Prediction( + outcome_prediction=OutcomePrediction( + p_yes=result.p_yes, confidence=result.confidence, info_utility=None + ) + ) def main( - n: int = 10, - output: str = "./benchmark_report.md", - reference: MarketType = MarketType.MANIFOLD, - filter: FilterBy = FilterBy.OPEN, - sort: SortBy = SortBy.NONE, - max_workers: int = 1, - cache_path: t.Optional[str] = "predictions_cache.json", - only_cached: bool = False, + n: int = 5, + output: str = "./benchmark_report.md", + reference: MarketType = MarketType.MANIFOLD, + filter: FilterBy = FilterBy.OPEN, + sort: SortBy = SortBy.NONE, + max_workers: int = 1, + cache_path: t.Optional[str] = "predictions_cache.json", + only_cached: bool = False, ) -> None: """ Polymarket usually contains higher quality questions, @@ -65,7 +81,6 @@ def main( """ load_dotenv() markets = get_binary_markets(n, reference, filter_by=filter, sort_by=sort) - markets = markets[:1] markets_deduplicated = list(({m.question: m for m in markets}.values())) if len(markets) != len(markets_deduplicated): print( @@ -77,8 +92,12 @@ def main( benchmarker = Benchmarker( markets=markets_deduplicated, agents=[ - CrewAIAgentSubquestionsBenchmark("subsequential-questions-crewai", max_workers=max_workers, max_tries=3, - model="gpt-3.5-turbo-0125"), + CrewAIAgentSubquestionsBenchmark( + "subsequential-questions-crewai", + max_workers=max_workers, + max_tries=1, + model="gpt-3.5-turbo-0125", + ), RandomAgent(agent_name="random", max_workers=max_workers), FixedAgent( fixed_answer=False, agent_name="fixed-no", max_workers=max_workers @@ -91,7 +110,9 @@ def main( only_cached=only_cached, ) - benchmarker.run_agents(enable_timing=False) # Caching of search etc. can distort timings + benchmarker.run_agents( + enable_timing=False + ) # Caching of search etc. can distort timings md = benchmarker.generate_markdown_report() with open(output, "w") as f: diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py index be9fa0dd..53b50633 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py @@ -1,12 +1,12 @@ import typing as t -from crewai import Agent, Task, Process, Crew +from crewai import Agent, Crew, Process, Task from pydantic import BaseModel from prediction_market_agent.agents.crewai_subsequential_agent.prompts import * from prediction_market_agent.tools.crewai_tools import TavilyDevTool -#search_tool = SerperDevTool() +# search_tool = SerperDevTool() tavily_search = TavilyDevTool() @@ -53,7 +53,7 @@ def split_research_into_outcomes(self, question: str) -> Outcomes: agents=[self.researcher], tasks=[create_outcomes_task], ) - result = report_crew.kickoff(inputs={'scenario': question}) + result = report_crew.kickoff(inputs={"scenario": question}) return Outcomes.model_validate_json(result) def build_tasks_for_outcome(self, input_dict: dict[str, t.Any] = {}) -> list[Task]: @@ -61,7 +61,7 @@ def build_tasks_for_outcome(self, input_dict: dict[str, t.Any] = {}) -> list[Tas description=RESEARCH_OUTCOME_PROMPT.format(**input_dict), agent=self.researcher, expected_output=RESEARCH_OUTCOME_OUTPUT, - async_execution=True + async_execution=True, ) task_create_probability_for_one_outcome = Task( description=PROBABILITY_FOR_ONE_OUTCOME_PROMPT, @@ -69,7 +69,7 @@ def build_tasks_for_outcome(self, input_dict: dict[str, t.Any] = {}) -> list[Tas agent=self.predictor, output_json=ProbabilityOutput, async_execution=False, - context=[task_research_one_outcome] + context=[task_research_one_outcome], ) return [task_research_one_outcome, task_create_probability_for_one_outcome] @@ -85,19 +85,21 @@ def generate_prediction_for_one_outcome(self, sentence: str) -> ProbabilityOutpu expected_output=PROBABILITY_CLASS_OUTPUT, agent=self.predictor, output_json=ProbabilityOutput, - context=[task_research_one_outcome] + context=[task_research_one_outcome], ) crew = Crew( agents=[self.researcher, self.predictor], tasks=[task_research_one_outcome, task_create_probability_for_one_outcome], verbose=2, - process=Process.sequential + process=Process.sequential, ) - result = crew.kickoff(inputs={'sentence': sentence}) + result = crew.kickoff(inputs={"sentence": sentence}) return ProbabilityOutput.model_validate_json(result) - def generate_final_decision(self, outcomes_with_probabilities: list[t.Tuple[str, ProbabilityOutput]]) -> ProbabilityOutput: + def generate_final_decision( + self, outcomes_with_probabilities: list[t.Tuple[str, ProbabilityOutput]] + ) -> ProbabilityOutput: task_final_decision = Task( description=FINAL_DECISION_PROMPT, agent=self.predictor, @@ -111,21 +113,29 @@ def generate_final_decision(self, outcomes_with_probabilities: list[t.Tuple[str, verbose=2, ) - crew.kickoff(inputs={'outcomes_with_probabilities': - [(i[0], i[1].dict()) for i in outcomes_with_probabilities], - 'number_of_outcomes': len(outcomes_with_probabilities), - 'outcome_to_assess': outcomes_with_probabilities[0][0]}) - return ProbabilityOutput.model_validate_json(task_final_decision.output.raw_output) + crew.kickoff( + inputs={ + "outcomes_with_probabilities": [ + (i[0], i[1].dict()) for i in outcomes_with_probabilities + ], + "number_of_outcomes": len(outcomes_with_probabilities), + "outcome_to_assess": outcomes_with_probabilities[0][0], + } + ) + return ProbabilityOutput.model_validate_json( + task_final_decision.output.raw_output + ) def answer_binary_market(self, question: str) -> ProbabilityOutput: - outcomes = self.split_research_into_outcomes(question) - print ("outcomes ", outcomes) + print("outcomes ", outcomes) outcomes_with_probs = [] task_map = {} for outcome in outcomes.outcomes: - tasks_for_outcome = self.build_tasks_for_outcome(input_dict={"sentence": outcome}) + tasks_for_outcome = self.build_tasks_for_outcome( + input_dict={"sentence": outcome} + ) task_map[outcome] = tasks_for_outcome # flatten nested list @@ -134,7 +144,7 @@ def answer_binary_market(self, question: str) -> ProbabilityOutput: agents=[self.researcher, self.predictor], tasks=all_tasks, verbose=2, - process=Process.sequential + process=Process.sequential, ) # crew.kickoff doesn't finish all async tasks when done. @@ -143,10 +153,14 @@ def answer_binary_market(self, question: str) -> ProbabilityOutput: # We parse individual task results to build outcomes_with_probs for outcome, tasks in task_map.items(): try: - prediction_result = ProbabilityOutput.model_validate_json(tasks[1].output.raw_output) + prediction_result = ProbabilityOutput.model_validate_json( + tasks[1].output.raw_output + ) except Exception as e: print("Could not parse result as ProbabilityOutput ", e) - prediction_result = ProbabilityOutput(p_yes=0.5, p_no=0.5, confidence=0, decision="") + prediction_result = ProbabilityOutput( + p_yes=0.5, p_no=0.5, confidence=0, decision="" + ) outcomes_with_probs.append((outcome, prediction_result)) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py index 35c3ca7a..49fd44b0 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py @@ -1,6 +1,6 @@ import os -from decimal import Decimal import random +from decimal import Decimal from langchain_openai import OpenAI from prediction_market_agent_tooling.deploy.agent import DeployableAgent @@ -8,7 +8,9 @@ from prediction_market_agent_tooling.markets.data_models import BetAmount, Currency from prediction_market_agent_tooling.markets.markets import MarketType -from prediction_market_agent.agents.crewai_subsequential_agent.crewai_agent_subquestions import CrewAIAgentSubquestions +from prediction_market_agent.agents.crewai_subsequential_agent.crewai_agent_subquestions import ( + CrewAIAgentSubquestions, +) from prediction_market_agent.agents.known_outcome_agent.known_outcome_agent import ( Result, ) @@ -40,10 +42,10 @@ def pick_markets(self, markets: list[AgentMarket]) -> list[AgentMarket]: def answer_binary_market(self, market: AgentMarket) -> bool: # The answer has already been determined in `pick_markets` so we just # return it here. - os.environ["OPENAI_MODEL_NAME"]="gpt-4-turbo-preview" + os.environ["OPENAI_MODEL_NAME"] = "gpt-4-turbo-preview" agent = CrewAIAgentSubquestions() - result = agent.answer_binary_market(market) - return result + result = agent.answer_binary_market(market.question) + return True if result.decision == "y" else False def calculate_bet_amount(self, answer: bool, market: AgentMarket) -> BetAmount: if market.currency == Currency.xDai: @@ -54,10 +56,9 @@ def calculate_bet_amount(self, answer: bool, market: AgentMarket) -> BetAmount: if __name__ == "__main__": agent = DeployableThinkThoroughlyAgent() - agent.deploy_local(market_type=MarketType.OMEN, - sleep_time=540, - timeout=180, - place_bet=False) + agent.deploy_local( + market_type=MarketType.OMEN, sleep_time=540, timeout=180, place_bet=False + ) # agent.deploy_gcp( # repository=f"git+{get_current_git_url()}@{get_current_git_commit_sha()}", # market_type=MarketType.OMEN, diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py b/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py index 9af3ac10..a543f396 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/prompts.py @@ -22,12 +22,12 @@ {scenario} """ -CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT = ''' +CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT = """ A list containing multiple bullet points. Each bullet point should start with '-'. Each bullet point should contain a possible outcome resulting from the provided SCENARIO. The produced outcomes should be mutually exclusive, i.e. only one of them should be true whereas the remaining ones should be false. - ''' + """ PROBABILITY_FOR_ONE_OUTCOME_PROMPT = """ Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'. @@ -93,9 +93,8 @@ - "confidence": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). Confidence can be calculated based on the quality and quantity of data used for the estimation. - A valid JSON string as output could look like the example below: - Example output: {"decision": "y","p_yes": 0.1, "p_no": 0.9, "confidence": 0.4} - Do not use escape quotes and line breaks. Do not output any reasoning, only the JSON object. + Do not surround the output object with escape quotes, line breaks nor '''. + Do not output any reasoning, only the JSON object. Ensure p_yes + p_no equals 1. """ diff --git a/prediction_market_agent/tools/crewai_tools.py b/prediction_market_agent/tools/crewai_tools.py index 82fd64aa..a6529a42 100644 --- a/prediction_market_agent/tools/crewai_tools.py +++ b/prediction_market_agent/tools/crewai_tools.py @@ -1,30 +1,36 @@ import os -from typing import Type, Any +from typing import Any, Type from crewai_tools.tools.base_tool import BaseTool from langchain_community.utilities.tavily_search import TavilySearchAPIWrapper from pydantic.v1 import BaseModel, Field +from pydantic.v1.types import SecretStr class TavilyDevToolSchema(BaseModel): - """Input for TXTSearchTool.""" - search_query: str = Field(..., description="Mandatory search query you want to use to search the internet") + """Input for TXTSearchTool.""" + + search_query: str = Field( + ..., description="Mandatory search query you want to use to search the internet" + ) + class TavilyDevTool(BaseTool): - name: str = "Search the internet" - # From Langchain's Tavily integration - description: str = """"A search engine optimized for comprehensive, accurate, \ + name: str = "Search the internet" + # From Langchain's Tavily integration + description: str = """"A search engine optimized for comprehensive, accurate, \ and trusted results. Useful for when you need to answer questions \ about current events or about recent information. \ Input should be a search query. \ If the user is asking about something that you don't know about, \ you should probably use this tool to see if that can provide any information.""" - args_schema: Type[BaseModel] = TavilyDevToolSchema - - def _run( - self, - search_query: str, - **kwargs: Any, - ) -> Any: + args_schema: Type[BaseModel] = TavilyDevToolSchema - return TavilySearchAPIWrapper(tavily_api_key = os.environ['TAVILY_API_KEY']).results(query=search_query) \ No newline at end of file + def _run( + self, + search_query: str, + **kwargs: Any, + ) -> Any: + return TavilySearchAPIWrapper( + tavily_api_key=SecretStr(os.environ["TAVILY_API_KEY"]) + ).results(query=search_query) diff --git a/pyproject.toml b/pyproject.toml index 22e4b470..ea683114 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,7 @@ google-search-results = "*" pytest = "*" llama-index = "~0.9.0" duckduckgo-search = "*" -crewai = {extras = ["tools"], version = ">=0.22.5 <0."} +crewai = {extras = ["tools"], version = ">=0.22.5"} # metagpt = "*" # Commented out because requires super old version of langchain, and conflicts with crewai. replicate = "*" typer = "^0.9.0" From 65131384e0fdd8ed397955dfe611fe4890e61b18 Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Wed, 10 Apr 2024 10:16:41 -0300 Subject: [PATCH 11/17] (WIP) Implemented PR comments, not yet final --- .../agents/crewai_subsequential_agent/benchmark.py | 1 - .../crewai_agent_subquestions.py | 13 ++++++++++--- .../agents/crewai_subsequential_agent/deploy.py | 8 -------- prediction_market_agent/tools/crewai_tools.py | 3 +++ prediction_market_agent/utils.py | 7 +++++++ 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py index e9d7614c..4d11494f 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py @@ -51,7 +51,6 @@ def __init__( model: str, max_tries: int, ) -> None: - self.model = model self.max_tries = max_tries self.agent = CrewAIAgentSubquestions() super().__init__(agent_name=agent_name, max_workers=max_workers) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py index 53b50633..795b4b83 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py @@ -3,10 +3,17 @@ from crewai import Agent, Crew, Process, Task from pydantic import BaseModel -from prediction_market_agent.agents.crewai_subsequential_agent.prompts import * +from prediction_market_agent.agents.crewai_subsequential_agent.prompts import ( + PROBABILITY_CLASS_OUTPUT, + FINAL_DECISION_PROMPT, + PROBABILITY_FOR_ONE_OUTCOME_PROMPT, + RESEARCH_OUTCOME_OUTPUT, + RESEARCH_OUTCOME_PROMPT, + CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT, + CREATE_OUTCOMES_FROM_SCENARIO_PROMPT, +) from prediction_market_agent.tools.crewai_tools import TavilyDevTool -# search_tool = SerperDevTool() tavily_search = TavilyDevTool() @@ -22,7 +29,7 @@ class ProbabilityOutput(BaseModel): class CrewAIAgentSubquestions: - def __init__(self) -> None: + def __init__(self, openai_model_name: str | None) -> None: # openai_model_name as str automatically interpreted by CrewAI, else create LLM object. self.researcher = Agent( role="Research Analyst", diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py index 49fd44b0..70d025e9 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py @@ -2,7 +2,6 @@ import random from decimal import Decimal -from langchain_openai import OpenAI from prediction_market_agent_tooling.deploy.agent import DeployableAgent from prediction_market_agent_tooling.markets.agent_market import AgentMarket from prediction_market_agent_tooling.markets.data_models import BetAmount, Currency @@ -11,18 +10,11 @@ from prediction_market_agent.agents.crewai_subsequential_agent.crewai_agent_subquestions import ( CrewAIAgentSubquestions, ) -from prediction_market_agent.agents.known_outcome_agent.known_outcome_agent import ( - Result, -) from prediction_market_agent.agents.utils import market_is_saturated class DeployableThinkThoroughlyAgent(DeployableAgent): # For cheaper credits at this experimental stage - model = "gpt-4-turbo-preview" - - def load(self) -> None: - self.markets_with_known_outcomes: dict[str, Result] = {} def pick_markets(self, markets: list[AgentMarket]) -> list[AgentMarket]: # We simply pick 5 random markets to bet on diff --git a/prediction_market_agent/tools/crewai_tools.py b/prediction_market_agent/tools/crewai_tools.py index a6529a42..d1571df6 100644 --- a/prediction_market_agent/tools/crewai_tools.py +++ b/prediction_market_agent/tools/crewai_tools.py @@ -6,6 +6,8 @@ from pydantic.v1 import BaseModel, Field from pydantic.v1.types import SecretStr +from prediction_market_agent.utils import APIKeys + class TavilyDevToolSchema(BaseModel): """Input for TXTSearchTool.""" @@ -31,6 +33,7 @@ def _run( search_query: str, **kwargs: Any, ) -> Any: + keys = APIKeys() return TavilySearchAPIWrapper( tavily_api_key=SecretStr(os.environ["TAVILY_API_KEY"]) ).results(query=search_query) diff --git a/prediction_market_agent/utils.py b/prediction_market_agent/utils.py index 4ed88513..10a9834e 100644 --- a/prediction_market_agent/utils.py +++ b/prediction_market_agent/utils.py @@ -11,6 +11,7 @@ class APIKeys(APIKeysBase): SERP_API_KEY: t.Optional[SecretStr] = None OPENAI_API_KEY: t.Optional[SecretStr] = None + TAVILY_API_KEY: t.Optional[SecretStr] = None @property def serp_api_key(self) -> SecretStr: @@ -24,6 +25,12 @@ def openai_api_key(self) -> SecretStr: self.OPENAI_API_KEY, "OPENAI_API_KEY missing in the environment." ) + @property + def tavily_api_key(self) -> SecretStr: + return check_not_none( + self.TAVILY_API_KEY, "OPENAI_API_KEY missing in the environment." + ) + def get_market_prompt(question: str) -> str: prompt = ( From 787d6703c06161c943c45da251c0422647cca26e Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Wed, 10 Apr 2024 19:20:24 -0300 Subject: [PATCH 12/17] Executed benchmark for 50 markets --- .../crewai_subsequential_agent/benchmark.py | 12 +++------ .../crewai_agent_subquestions.py | 27 +++++++++++++++---- .../crewai_subsequential_agent/deploy.py | 7 +++-- prediction_market_agent/tools/crewai_tools.py | 3 +-- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py index 4d11494f..c6108219 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py @@ -2,7 +2,6 @@ from datetime import datetime import typer -from dotenv import load_dotenv from prediction_market_agent_tooling.benchmark.agents import ( AbstractBenchmarkedAgent, FixedAgent, @@ -46,9 +45,8 @@ def build_binary_agent_market_from_question(question: str) -> AgentMarket: class CrewAIAgentSubquestionsBenchmark(AbstractBenchmarkedAgent): def __init__( self, - agent_name: str, max_workers: int, - model: str, + agent_name: str, max_tries: int, ) -> None: self.max_tries = max_tries @@ -65,8 +63,8 @@ def predict(self, market_question: str) -> Prediction: def main( - n: int = 5, - output: str = "./benchmark_report.md", + n: int = 50, + output: str = "./benchmark_report_50markets.md", reference: MarketType = MarketType.MANIFOLD, filter: FilterBy = FilterBy.OPEN, sort: SortBy = SortBy.NONE, @@ -78,7 +76,6 @@ def main( Polymarket usually contains higher quality questions, but on Manifold, additionally to filtering by MarketFilter.resolved, you can sort by MarketSort.newest. """ - load_dotenv() markets = get_binary_markets(n, reference, filter_by=filter, sort_by=sort) markets_deduplicated = list(({m.question: m for m in markets}.values())) if len(markets) != len(markets_deduplicated): @@ -92,10 +89,9 @@ def main( markets=markets_deduplicated, agents=[ CrewAIAgentSubquestionsBenchmark( - "subsequential-questions-crewai", + agent_name="subsequential-questions-crewai", max_workers=max_workers, max_tries=1, - model="gpt-3.5-turbo-0125", ), RandomAgent(agent_name="random", max_workers=max_workers), FixedAgent( diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py index 795b4b83..ebaf1a60 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py @@ -1,18 +1,21 @@ import typing as t from crewai import Agent, Crew, Process, Task +from langchain_core.language_models import BaseChatModel +from langchain_openai import ChatOpenAI from pydantic import BaseModel from prediction_market_agent.agents.crewai_subsequential_agent.prompts import ( - PROBABILITY_CLASS_OUTPUT, + CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT, + CREATE_OUTCOMES_FROM_SCENARIO_PROMPT, FINAL_DECISION_PROMPT, + PROBABILITY_CLASS_OUTPUT, PROBABILITY_FOR_ONE_OUTCOME_PROMPT, RESEARCH_OUTCOME_OUTPUT, RESEARCH_OUTCOME_PROMPT, - CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT, - CREATE_OUTCOMES_FROM_SCENARIO_PROMPT, ) from prediction_market_agent.tools.crewai_tools import TavilyDevTool +from prediction_market_agent.utils import APIKeys tavily_search = TavilyDevTool() @@ -29,8 +32,8 @@ class ProbabilityOutput(BaseModel): class CrewAIAgentSubquestions: - def __init__(self, openai_model_name: str | None) -> None: - # openai_model_name as str automatically interpreted by CrewAI, else create LLM object. + def __init__(self) -> None: + llm = self._build_llm() self.researcher = Agent( role="Research Analyst", goal="Research and report on some future event, giving high quality and nuanced analysis", @@ -38,6 +41,7 @@ def __init__(self, openai_model_name: str | None) -> None: verbose=True, allow_delegation=False, tools=[tavily_search], + llm=llm, ) self.predictor = Agent( @@ -46,7 +50,20 @@ def __init__(self, openai_model_name: str | None) -> None: backstory="You are a professional gambler who is adept at predicting and betting on the outcomes of future events.", verbose=True, allow_delegation=False, + llm=llm, + ) + + def _build_llm(self) -> BaseChatModel: + keys = APIKeys() + llm = ChatOpenAI( + model="gpt-3.5-turbo-0125", + openai_api_key=keys.openai_api_key.get_secret_value(), # type: ignore ) + # llm = OpenAI( + # openai_api_key=keys.openai_api_key.get_secret_value(), # type: ignore + # model_name="gpt-4-turbo-preview", + # ) + return llm def split_research_into_outcomes(self, question: str) -> Outcomes: create_outcomes_task = Task( diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py index 70d025e9..0b6e6e86 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py @@ -1,4 +1,3 @@ -import os import random from decimal import Decimal @@ -15,6 +14,8 @@ class DeployableThinkThoroughlyAgent(DeployableAgent): # For cheaper credits at this experimental stage + def __init__(self) -> None: + super().__init__() def pick_markets(self, markets: list[AgentMarket]) -> list[AgentMarket]: # We simply pick 5 random markets to bet on @@ -34,9 +35,7 @@ def pick_markets(self, markets: list[AgentMarket]) -> list[AgentMarket]: def answer_binary_market(self, market: AgentMarket) -> bool: # The answer has already been determined in `pick_markets` so we just # return it here. - os.environ["OPENAI_MODEL_NAME"] = "gpt-4-turbo-preview" - agent = CrewAIAgentSubquestions() - result = agent.answer_binary_market(market.question) + result = CrewAIAgentSubquestions().answer_binary_market(market.question) return True if result.decision == "y" else False def calculate_bet_amount(self, answer: bool, market: AgentMarket) -> BetAmount: diff --git a/prediction_market_agent/tools/crewai_tools.py b/prediction_market_agent/tools/crewai_tools.py index d1571df6..42893290 100644 --- a/prediction_market_agent/tools/crewai_tools.py +++ b/prediction_market_agent/tools/crewai_tools.py @@ -1,4 +1,3 @@ -import os from typing import Any, Type from crewai_tools.tools.base_tool import BaseTool @@ -35,5 +34,5 @@ def _run( ) -> Any: keys = APIKeys() return TavilySearchAPIWrapper( - tavily_api_key=SecretStr(os.environ["TAVILY_API_KEY"]) + tavily_api_key=SecretStr(keys.tavily_api_key.get_secret_value()) ).results(query=search_query) From 28ae58cd2e969a8cd462e5011e1ac160ed912d9b Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Thu, 11 Apr 2024 11:52:44 -0300 Subject: [PATCH 13/17] Implemented final PR comments --- .../crewai_subsequential_agent/benchmark.py | 10 +++--- .../crewai_agent_subquestions.py | 11 +++--- .../crewai_subsequential_agent/deploy.py | 36 +++++-------------- .../agents/known_outcome_agent/deploy.py | 1 - 4 files changed, 16 insertions(+), 42 deletions(-) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py index c6108219..91b8fdec 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py @@ -2,6 +2,7 @@ from datetime import datetime import typer +from loguru import logger from prediction_market_agent_tooling.benchmark.agents import ( AbstractBenchmarkedAgent, FixedAgent, @@ -47,9 +48,7 @@ def __init__( self, max_workers: int, agent_name: str, - max_tries: int, ) -> None: - self.max_tries = max_tries self.agent = CrewAIAgentSubquestions() super().__init__(agent_name=agent_name, max_workers=max_workers) @@ -79,11 +78,11 @@ def main( markets = get_binary_markets(n, reference, filter_by=filter, sort_by=sort) markets_deduplicated = list(({m.question: m for m in markets}.values())) if len(markets) != len(markets_deduplicated): - print( + logger.debug( f"Warning: Deduplicated markets from {len(markets)} to {len(markets_deduplicated)}." ) - print(f"Found {len(markets_deduplicated)} markets.") + logger.debug(f"Found {len(markets_deduplicated)} markets.") benchmarker = Benchmarker( markets=markets_deduplicated, @@ -91,7 +90,6 @@ def main( CrewAIAgentSubquestionsBenchmark( agent_name="subsequential-questions-crewai", max_workers=max_workers, - max_tries=1, ), RandomAgent(agent_name="random", max_workers=max_workers), FixedAgent( @@ -111,7 +109,7 @@ def main( md = benchmarker.generate_markdown_report() with open(output, "w") as f: - print(f"Writing benchmark report to: {output}") + logger.info(f"Writing benchmark report to: {output}") f.write(md) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py index ebaf1a60..25831e0d 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/crewai_agent_subquestions.py @@ -3,6 +3,7 @@ from crewai import Agent, Crew, Process, Task from langchain_core.language_models import BaseChatModel from langchain_openai import ChatOpenAI +from loguru import logger from pydantic import BaseModel from prediction_market_agent.agents.crewai_subsequential_agent.prompts import ( @@ -57,12 +58,8 @@ def _build_llm(self) -> BaseChatModel: keys = APIKeys() llm = ChatOpenAI( model="gpt-3.5-turbo-0125", - openai_api_key=keys.openai_api_key.get_secret_value(), # type: ignore + api_key=keys.openai_api_key.get_secret_value(), ) - # llm = OpenAI( - # openai_api_key=keys.openai_api_key.get_secret_value(), # type: ignore - # model_name="gpt-4-turbo-preview", - # ) return llm def split_research_into_outcomes(self, question: str) -> Outcomes: @@ -152,7 +149,7 @@ def generate_final_decision( def answer_binary_market(self, question: str) -> ProbabilityOutput: outcomes = self.split_research_into_outcomes(question) - print("outcomes ", outcomes) + logger.debug("outcomes ", outcomes) outcomes_with_probs = [] task_map = {} @@ -181,7 +178,7 @@ def answer_binary_market(self, question: str) -> ProbabilityOutput: tasks[1].output.raw_output ) except Exception as e: - print("Could not parse result as ProbabilityOutput ", e) + logger.error("Could not parse result as ProbabilityOutput ", e) prediction_result = ProbabilityOutput( p_yes=0.5, p_no=0.5, confidence=0, decision="" ) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py index 0b6e6e86..fe9c5b3b 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py @@ -1,10 +1,9 @@ import random -from decimal import Decimal from prediction_market_agent_tooling.deploy.agent import DeployableAgent from prediction_market_agent_tooling.markets.agent_market import AgentMarket -from prediction_market_agent_tooling.markets.data_models import BetAmount, Currency from prediction_market_agent_tooling.markets.markets import MarketType +from prediction_market_agent_tooling.tools.utils import should_not_happen from prediction_market_agent.agents.crewai_subsequential_agent.crewai_agent_subquestions import ( CrewAIAgentSubquestions, @@ -36,13 +35,13 @@ def answer_binary_market(self, market: AgentMarket) -> bool: # The answer has already been determined in `pick_markets` so we just # return it here. result = CrewAIAgentSubquestions().answer_binary_market(market.question) - return True if result.decision == "y" else False - - def calculate_bet_amount(self, answer: bool, market: AgentMarket) -> BetAmount: - if market.currency == Currency.xDai: - return BetAmount(amount=Decimal(0.1), currency=Currency.xDai) - else: - raise NotImplementedError("This agent only supports xDai markets") + return ( + True + if result.decision == "y" + else False + if result.decision == "n" + else should_not_happen() + ) if __name__ == "__main__": @@ -50,22 +49,3 @@ def calculate_bet_amount(self, answer: bool, market: AgentMarket) -> BetAmount: agent.deploy_local( market_type=MarketType.OMEN, sleep_time=540, timeout=180, place_bet=False ) - # agent.deploy_gcp( - # repository=f"git+{get_current_git_url()}@{get_current_git_commit_sha()}", - # market_type=MarketType.OMEN, - # labels={OWNER_KEY: getpass.getuser()}, - # secrets={ - # "TAVILY_API_KEY": "GNOSIS_AI_TAVILY_API_KEY:latest", - # }, - # memory=1024, - # api_keys=APIKeys( - # BET_FROM_ADDRESS=verify_address( - # "0xb611A9f02B318339049264c7a66ac3401281cc3c" - # ), - # BET_FROM_PRIVATE_KEY=private_key_type("EVAN_OMEN_BETTER_0_PKEY:latest"), - # OPENAI_API_KEY=SecretStr("EVAN_OPENAI_API_KEY:latest"), - # MANIFOLD_API_KEY=None, - # ), - # cron_schedule="0 */12 * * *", - # timeout=540, - # ) diff --git a/prediction_market_agent/agents/known_outcome_agent/deploy.py b/prediction_market_agent/agents/known_outcome_agent/deploy.py index de61352a..cd23d182 100644 --- a/prediction_market_agent/agents/known_outcome_agent/deploy.py +++ b/prediction_market_agent/agents/known_outcome_agent/deploy.py @@ -1,4 +1,3 @@ -# type: ignore import getpass import random from decimal import Decimal From 2daabd0354549e861250d781f8a05febaa0e0f6a Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Thu, 11 Apr 2024 12:01:12 -0300 Subject: [PATCH 14/17] Removed unnecessary notebooks --- agent_thinks_more.ipynb | 2119 ----------------------------------- crewai_multiple_agent.ipynb | 1002 ----------------- 2 files changed, 3121 deletions(-) delete mode 100644 agent_thinks_more.ipynb delete mode 100644 crewai_multiple_agent.ipynb diff --git a/agent_thinks_more.ipynb b/agent_thinks_more.ipynb deleted file mode 100644 index 3f869473..00000000 --- a/agent_thinks_more.ipynb +++ /dev/null @@ -1,2119 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "a0d07b7d-b093-4104-a1e4-12f2184f0644", - "metadata": {}, - "source": [ - "# Intro\n", - "\n", - "- We need to complete 3 tasks\n", - "- Task1: divide question into multiple outcomes\n", - "- Task2: return a dictionary containing outcome as key and decision, p_yes, p_no, ... as value\n", - "- Task3: having the above values, return yes/no for the given question." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "be934b33-46f6-475b-b0c3-373b87635de3", - "metadata": {}, - "outputs": [], - "source": [ - "import crewai\n", - "import json\n", - "import os\n", - "from crewai import Agent\n", - "from crewai_tools import SerperDevTool\n", - "from langchain_community.callbacks.manager import get_openai_callback\n", - "from dotenv import load_dotenv\n", - "from pydantic import BaseModel\n", - "from crewai import Crew, Process, Agent, Task\n", - "search_tool = SerperDevTool()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "15f1966a-a891-4667-b65d-4f2db40a0214", - "metadata": {}, - "outputs": [], - "source": [ - "class Outcomes(BaseModel):\n", - " outcomes: list[str]\n", - "\n", - "class ProbabilityOutput(BaseModel):\n", - " decision: str\n", - " p_yes: float\n", - " p_no: float\n", - " confidence: float" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "ef09caeb-79de-413a-877b-436e3d601e0f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "load_dotenv()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "42967b8a-ea5f-466b-9022-ab469d08de02", - "metadata": {}, - "outputs": [], - "source": [ - "# Define your agents\n", - "researcher = Agent(\n", - " role=\"Research Analyst\",\n", - " goal=\"Research and report on some future event, giving high quality and nuanced analysis\",\n", - " backstory=\"You are a senior research analyst who is adept at researching and reporting on future events.\",\n", - " verbose=True,\n", - " allow_delegation=False,\n", - " tools=[search_tool],\n", - " )\n", - "\n", - "analyst = Agent(\n", - " role='Data Analyst',\n", - " goal='Analyze research findings',\n", - " backstory='A meticulous analyst with a knack for uncovering patterns'\n", - ")\n", - "\n", - "writer = Agent(\n", - " role='Writer',\n", - " goal='Draft the final report',\n", - " backstory='A skilled writer with a talent for crafting compelling narratives'\n", - ")\n", - "\n", - "predictor = Agent(\n", - " role=\"Professional Gambler\",\n", - " goal=\"Predict, based on some research you are presented with, whether or not a given event will occur\",\n", - " backstory=\"You are a professional gambler who is adept at predicting and betting on the outcomes of future events.\",\n", - " verbose=True,\n", - " allow_delegation=False,\n", - " tools=[]\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "9525e0a9-b9df-4b59-a71d-32f7de0eeef5", - "metadata": {}, - "outputs": [], - "source": [ - "# ToDo - Test both research prompts\n", - "CREATE_OUTCOMES_FROM_SCENARIO_PROMPT = \"\"\"\n", - " You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes.\n", - " You should break down the SCENARIO into a list of possible outcomes.\n", - " \n", - " Example 1:\n", - " - SCENARIO: Will Gnosis Pay reach 100,000 users by 2025?\n", - " - Answer: '''\n", - " - Gnosis Pay reaches less than 25,000 users by 2025\n", - " - Gnosis Pay reaches more than 25,000 users but less than 50,000 users by 2025\n", - " - Gnosis Pay reaches more than 50,000 users but less than 75,000 users by 2025\n", - " - Gnosis Pay reaches 100,000 users or more by 2025\n", - " '''\n", - "\n", - " Example 2:\n", - " - SCENARIO: Will the price of Bitcoin go up again in the next 2 months?\n", - " - Answer: '''\n", - " - The price of crypto will go up in the next 2 months\n", - " - The price of crypto will not go up in the next 2 months\n", - " '''\n", - " \n", - " [SCENARIO]\n", - " {scenario}\n", - " \"\"\"\n", - "# research_prompt2 = \"\"\"\n", - "# You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes.\n", - "# You should break down the SCENARIO into a list of possible outcomes.\n", - " \n", - "# [SCENARIO]\n", - "# {scenario}\n", - "# \"\"\"\n", - "\n", - "CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT = '''\n", - " A list containing multiple bullet points. Each bullet point should start with '-'.\n", - " Each bullet point should contain a possible outcome resulting from the\n", - " provided SCENARIO. The produced outcomes should be mutually exclusive, i.e. only one of them should be true whereas\n", - " the remaining ones should be false.\n", - " '''" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "128836b6-6f7e-4b7a-a2ef-4fb83d1d2e37", - "metadata": {}, - "outputs": [], - "source": [ - "def print_outcomes(question:str) -> None:\n", - " create_outcomes_task = Task(\n", - " description=(CREATE_OUTCOMES_FROM_SCENARIO_PROMPT),\n", - " expected_output=CREATE_OUTCOMES_FROM_SCENARIO_OUTPUT,\n", - " #tools=[search_tool],\n", - " tools = [],\n", - " output_json=Outcomes,\n", - " agent=researcher,\n", - " )\n", - "\n", - " report_crew = Crew(\n", - " agents=[researcher],\n", - " tasks=[create_outcomes_task],\n", - " )\n", - " with get_openai_callback() as cb:\n", - " result = report_crew.kickoff(inputs={'scenario': question})\n", - "\n", - " print(f\"Total Tokens: {cb.total_tokens}\")\n", - " print(f\"Prompt Tokens: {cb.prompt_tokens}\")\n", - " print(f\"Completion Tokens: {cb.completion_tokens}\")\n", - " print(f\"Total Cost (USD): ${cb.total_cost}\")\n", - " print(result)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "177eb8be-4f31-4fa6-8aa3-36035bcad720", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-04 14:38:16,337 - 131350216197376 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mI need to consider the various possible outcomes for the scenario: \"Will smart accounts replace EOAs (Externally Owned Accounts) in the EVM (Ethereum Virtual Machine) ecosystem in the next 3-5 years?\" To provide an accurate and detailed list of potential outcomes, I will research the current state and future predictions of smart accounts and EOAs in the EVM ecosystem. \n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\n", - "\"search_query\": \"future of smart accounts and EOAs in EVM ecosystem\"\n", - "}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Ethereum devs debate future of account abstraction - Blockworks\n", - "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", - "Snippet: The first two goals are clearly not satisfied by Ethereum's “end user account” (EOA) model, hence the need to move the entire EVM ecosystem ...\n", - "---\n", - "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", - "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", - "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", - "---\n", - "Title: The unspoken Ethereum revolution: Are EOAs becoming obsolete?\n", - "Link: https://www.binance.com/en/square/post/336701\n", - "Snippet: ... EOAs in the ecosystem's future, favoring smart contract wallets as the default account model for users. EIP-4337 & Account Abstraction. Security Fellow for ...\n", - "---\n", - "Title: The EOS Network's Vision for an Interoperable Future\n", - "Link: https://eosnetwork.com/blog/eos-interoperable-future-vision/\n", - "Snippet: The EOS EVM operates as a smart contract running on the EOS blockchain. This provides an opportunity to, in many cases, execute the full process ...\n", - "---\n", - "Title: The Future of Web3 Account Abstraction with Oasis\n", - "Link: https://oasisprotocol.org/blog/web3-account-abstraction\n", - "Snippet: Oasis Sapphire proposes a simpler solution to account abstraction for the entire EVM ecosystem. By design, every smart contract on Oasis ...\n", - "---\n", - "Title: Future of Smart Accounts: Modular, Specialised & Multichain\n", - "Link: https://longhashvc.medium.com/future-of-smart-accounts-modular-specialised-multichain-d04f083375a6\n", - "Snippet: Beyond customer access, we expect the leading ecosystems to be built by a factor of perceived security, developer experience, and importantly, ...\n", - "---\n", - "Title: The Future of Account Abstraction with Oasis\n", - "Link: https://oasisrose.garden/the-future-of-account-abstraction-with-oasis/\n", - "Snippet: Improving user experiences through account abstraction elevates the utility that can be offered by both network native applications and cross- ...\n", - "---\n", - "Title: Account Abstraction: Revolutionizing The Payments Industry - LinkedIn\n", - "Link: https://www.linkedin.com/pulse/account-abstraction-revolutionizing-payments-industry-fuseio\n", - "Snippet: ... EVM ecosystem. ... By merging Contract Accounts and EOAs, developers have greater flexibility in designing and implementing smart contracts.\n", - "---\n", - "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", - "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", - "Snippet: Smart accounts on the Ethereum blockchain can be controlled by programmable smart contracts rather than private keys.\n", - "---\n", - "Title: The Evolving Landscape of Blockchain: Cutting-Edge Concepts ...\n", - "Link: https://m-tiesler.medium.com/the-evolving-landscape-of-blockchain-cutting-edge-concepts-shaping-2024-992e4e3b4b71\n", - "Snippet: In this blog post, we'll explore 10 groundbreaking concepts that are shaping the future of blockchain ecosystems. From Account Abstraction to ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results show that there is an ongoing debate about the future of EOAs and smart accounts in the EVM ecosystem. Some developers are favoring smart contract wallets as the default account model for users. Others are working on merging Contract Accounts and EOAs for greater flexibility. This information will help me to identify several potential outcomes for the scenario.\n", - "\n", - "Final Answer: \n", - "- Smart accounts completely replace EOAs in the EVM ecosystem within the next 3-5 years.\n", - "- Smart accounts and EOAs co-exist in the EVM ecosystem, with a significant increase in the use of smart accounts.\n", - "- EOAs remain the dominant account model in the EVM ecosystem, with smart accounts used only for specific applications.\n", - "- EOAs and smart accounts merge, creating a hybrid account model that benefits from the advantages of both types.\n", - "- The EVM ecosystem evolves to use a different kind of account model not yet widely discussed or anticipated.\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "Total Tokens: 0\n", - "Prompt Tokens: 0\n", - "Completion Tokens: 0\n", - "Total Cost (USD): $0.0\n", - "{\n", - " \"outcomes\": [\n", - " \"Smart accounts completely replace EOAs in the EVM ecosystem within the next 3-5 years.\",\n", - " \"Smart accounts and EOAs co-exist in the EVM ecosystem, with a significant increase in the use of smart accounts.\",\n", - " \"EOAs remain the dominant account model in the EVM ecosystem, with smart accounts used only for specific applications.\",\n", - " \"EOAs and smart accounts merge, creating a hybrid account model that benefits from the advantages of both types.\",\n", - " \"The EVM ecosystem evolves to use a different kind of account model not yet widely discussed or anticipated.\"\n", - " ]\n", - "}\n" - ] - } - ], - "source": [ - "question = 'Will smart accounts replace EOAs in the EVM ecosystem in the next 3-5 years?'\n", - "result = print_outcomes(question)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "3cae6652-c2ac-4121-8b22-2da28b651ee4", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-04 14:51:06,936 - 131350216197376 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mThe scenario asks whether the situation with the Baltimore Bridge will be resolved by 5 April 2024. The outcomes for this scenario will be dependent on the specifics of the \"situation\" mentioned. Therefore, I need to first understand what the Baltimore Bridge situation is. I will use my tool to search the internet. \n", - "\n", - "Action: Search the internet\n", - "Action Input: {\"search_query\": \"Baltimore Bridge situation\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Baltimore Bridge Collapse LIVE: Clean-up Efforts Underway\n", - "Link: https://www.youtube.com/watch?v=qy2cs0F5KZA\n", - "Snippet: Baltimore Bridge Collapse LIVE: Clean-up Efforts Underway | New Channel Opened Around Fallen Bridge A second channel has been opened around ...\n", - "---\n", - "Title: CNN rides along with Coast Guard after Baltimore bridge collapse\n", - "Link: https://www.cnn.com/videos/us/2024/04/04/baltimore-bridge-collapse-coast-guard-ride-along-cohen-pkg-cnntm-vpx.cnn\n", - "Snippet: CNN's Gabe Cohen speaks with Coast Guard officials about the complex salvage operation of removing wreckage following Baltimore's Francis ...\n", - "---\n", - "Title: Baltimore Bridge Collapse Update: Emergency Declaration ...\n", - "Link: https://www.fmcsa.dot.gov/newsroom/baltimore-bridge-collapse-update-emergency-declaration-extension-issued-fmcsa\n", - "Snippet: Francis Scott Key Bridge News and Updates At approximately 1:30 a.m. ET on March 26, 2024, a cargo ship leaving the Port of Baltimore in ...\n", - "---\n", - "Title: Baltimore bridge: New channel to bypass collapse site now in use\n", - "Link: https://apnews.com/article/baltimore-bridge-collapse-04-02-2024-a533659d18ddd8a8befa80c41141e41d\n", - "Snippet: AP AUDIO: Second channel opened allowing some vessels to bypass wreckage at the Baltimore bridge collapse site. At a news conference, Maryland ...\n", - "---\n", - "Title: Key Bridge News | MDTA - Maryland.gov\n", - "Link: http://mdta.maryland.gov/keybridgenews\n", - "Snippet: At approximately 1:30 a.m. on March 26, 2024, a cargo ship leaving the Port of Baltimore struck the (I-695) Francis Scott Key Bridge.\n", - "---\n", - "Title: Workers create narrow channel through destroyed Baltimore bridge\n", - "Link: https://www.youtube.com/watch?v=dNg28mPtmmg\n", - "Snippet: A narrow channel through the destroyed Francis Scott Key Bridge was created by workers. The channel will be used by work boats and comes the ...\n", - "---\n", - "Title: Baltimore bridge collapse: What will happen to the 21 sailors ... - BBC\n", - "Link: https://www.bbc.com/news/world-us-canada-68708593\n", - "Snippet: Only one crew member on-board the Dali was injured when Baltimore's Key Bridge collapsed. Nearly a week after Baltimore's Francis Scott Key ...\n", - "---\n", - "Title: Baltimore Key Bridge collapse: Temporary channel opens for boats ...\n", - "Link: https://abcnews.go.com/US/live-updates/baltimore-key-bridge-collapse/?id=108500215\n", - "Snippet: A cargo ship crashed into Baltimore's Francis Scott Key Bridge early Tuesday morning, causing a near-total collapse of the span and halting ...\n", - "---\n", - "Title: In wake of Baltimore bridge crash, questions arise about pier ...\n", - "Link: https://www.cbsnews.com/newyork/news/in-wake-of-baltimore-bridge-crash-questions-arise-about-pier-protection-for-nyc-spans/\n", - "Snippet: Local researchers are studying what a similar impact would mean for area bridges and shared their findings with CBS New York.\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "From the search results, it appears that the \"Baltimore Bridge situation\" refers to a recent collapse of the Francis Scott Key Bridge in Baltimore, caused by a cargo ship. The outcomes of the scenario will depend on how quickly and effectively the cleanup and reconstruction efforts progress. \n", - "\n", - "Here are the possible outcomes:\n", - "\n", - "Action: \n", - "Final Answer: \n", - "'''\n", - "- The Baltimore Bridge situation is fully resolved by 5 April 2024, with the bridge being fully repaired and reopened. \n", - "- The Baltimore Bridge situation is partially resolved by 5 April 2024, with cleanup efforts completed but reconstruction still in progress.\n", - "- The Baltimore Bridge situation is not resolved by 5 April 2024, with cleanup and reconstruction efforts still ongoing.\n", - "- The Baltimore Bridge situation worsens by 5 April 2024, due to additional damage or complications arising during the cleanup and reconstruction process.\n", - "'''\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "Total Tokens: 0\n", - "Prompt Tokens: 0\n", - "Completion Tokens: 0\n", - "Total Cost (USD): $0.0\n", - "{\n", - " \"outcomes\": [\n", - " \"The Baltimore Bridge situation is fully resolved by 5 April 2024, with the bridge being fully repaired and reopened.\",\n", - " \"The Baltimore Bridge situation is partially resolved by 5 April 2024, with cleanup efforts completed but reconstruction still in progress.\",\n", - " \"The Baltimore Bridge situation is not resolved by 5 April 2024, with cleanup and reconstruction efforts still ongoing.\",\n", - " \"The Baltimore Bridge situation worsens by 5 April 2024, due to additional damage or complications arising during the cleanup and reconstruction process.\"\n", - " ]\n", - "}\n" - ] - } - ], - "source": [ - "question = 'Will the Baltimore Bridge situation be resolved by 5 April 2024?'\n", - "result = print_outcomes(question)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "dfea9fe6-5ff9-45a1-a5e9-03fed99b9b78", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years',\n", - " 'Smart accounts will become the dominant form of accounts, but EOAs will still be used in the EVM ecosystem within the next 3-5 years',\n", - " 'Both smart accounts and EOAs will continue to coexist with no dominant form in the EVM ecosystem within the next 3-5 years',\n", - " 'EOAs will remain the dominant form of accounts while smart accounts adoption grows in the EVM ecosystem within the next 3-5 years',\n", - " 'EOAs will continue to be the dominant form of accounts, and smart accounts will not gain significant traction in the EVM ecosystem within the next 3-5 years']" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "json.loads(result)['outcomes']" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "4f46f468-5f01-4277-8db4-4c359dde96e9", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "b7c3e5f6-3eaa-4b46-a91d-27b997fc8408", - "metadata": {}, - "outputs": [], - "source": [ - "# ToDo - Test both research prompts\n", - "RESEARCH_OUTCOME_PROMPT = \"\"\"\n", - " Research and report on the following sentence:\n", - " {sentence}\n", - " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", - " \"\"\"\n", - "RESEARCH_OUTCOME_OUTPUT = \"\"\"\n", - " Return your answer in raw JSON format, with no special formatting such as newlines, as follows:\n", - " {{\"report\": }}\n", - " where is a free text field that contains a well though out justification \n", - " for the predicition based on the summary of your findings.\n", - " \"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "687efd9f-e0c2-4386-9a75-88b85cda1710", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "def generate_prediction_for_one_outcome(sentence: str):\n", - "\n", - " task_research_one_outcome = Task(\n", - " description=(RESEARCH_OUTCOME_PROMPT),\n", - " tools=[search_tool],\n", - " agent=researcher,\n", - " expected_output=(RESEARCH_OUTCOME_OUTPUT),\n", - " )\n", - " task_create_probability_for_one_outcome = Task(\n", - " description=(\"\"\"\n", - " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", - " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", - " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", - " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", - " * Use the tools provided to aid your estimation.\n", - " * Evaluate recent information more heavily than older information.\n", - " * Your response should include:\n", - " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", - " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - " \n", - " Ensure p_yes + p_no equals 1.\n", - " \n", - " SENTENCE: {sentence}\n", - " \"\"\"\n", - " ),\n", - " expected_output=\"\"\"\n", - " Your response should include:\n", - " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to \n", - " 1 (maximum confidence). Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - " \n", - " Format your response in JSON format, including the keys \"decision\", \"p_yes\", \"p_no\" and \"confidence\".\n", - " \"\"\",\n", - " agent=predictor,\n", - " output_json=ProbabilityOutput,\n", - " context=[task_research_one_outcome]\n", - " )\n", - " crew = Crew(\n", - " agents=[researcher, predictor],\n", - " tasks=[task_research_one_outcome, task_create_probability_for_one_outcome],\n", - " verbose=2,\n", - " process=Process.sequential \n", - " )\n", - " \n", - " #sentence = 'The temperature will be above 20C on May 24, 2024 in Berlin.'\n", - " sentence = 'Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years'\n", - " result = crew.kickoff(inputs={'sentence': sentence})\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "376ec60d-a44b-4211-bc68-8e9e95172a0a", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-03 18:14:18,407 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Research and report on the following sentence:\n", - " Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mI need to research whether smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years. This requires an understanding of what smart accounts and EOAs are, how they function in the EVM ecosystem currently, and any potential developments that could lead to smart accounts replacing EOAs. To gather this information, I'll need to search the internet.\n", - "\n", - "Action: Search the internet\n", - "Action Input: {\"search_query\": \"Smart accounts vs EOAs in the EVM ecosystem\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: EOA vs. Smart Contract Account: What Is the Difference?\n", - "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", - "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", - "---\n", - "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", - "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", - "Snippet: The key difference between EOAs and smart accounts is that smart accounts are programmable and can execute code, while EOAs are simply accounts ...\n", - "---\n", - "Title: Understanding the Ethereum Virtual Machine (EVM), Transaction ...\n", - "Link: https://medium.com/coinmonks/understanding-the-ethereum-virtual-machine-evm-transaction-structure-and-account-types-52bcdb3e4d99\n", - "Snippet: Contract accounts are distinct from EOAs as they are not controlled by private keys but by the code of a smart contract. These accounts hold ...\n", - "---\n", - "Title: EOAs vs Contracts: Understanding the Two Types of Ethereum ...\n", - "Link: https://medium.com/@tanish_gupta/eoas-vs-contracts-understanding-the-two-types-of-ethereum-accounts-378f9402d0e8\n", - "Snippet: Contract accounts are used on the Ethereum network to create and execute smart ... EOAs, whereas contract accounts are used to execute smart ...\n", - "---\n", - "Title: ERC 4337: Understanding Account Abstraction - HackerNoon\n", - "Link: https://hackernoon.com/erc-4337-understanding-account-abstraction\n", - "Snippet: Two types of accounts exist on EVM-based blockchain platforms: EOMs or Externally Owned Accounts and Smart Contract Accounts, also referred to ...\n", - "---\n", - "Title: Understanding Ethereum Account Abstraction - CoinsBench\n", - "Link: https://coinsbench.com/understanding-ethereum-account-abstraction-revolutionizing-smart-contract-interactions-6de9c91af39b\n", - "Snippet: Traditionally, the EVM interacts with two types of accounts: externally owned accounts (EOAs) and contract accounts. EOAs are controlled by ...\n", - "---\n", - "Title: Account Abstraction Explained: The Role And Impact In Ethereum\n", - "Link: https://hacken.io/discover/account-abstraction/\n", - "Snippet: Externally owned accounts (EOAs) are accounts that are controlled by private keys, typically generated using a seed phrase. Unlike smart ...\n", - "---\n", - "Title: Ethereum devs debate future of account abstraction - Blockworks\n", - "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", - "Snippet: The first two goals are clearly not satisfied by Ethereum's “end user account” (EOA) model, hence the need to move the entire EVM ecosystem ...\n", - "---\n", - "Title: Introductory Guide to Account Abstraction (ERC-4337) - Blocknative\n", - "Link: https://www.blocknative.com/blog/account-abstraction-erc-4337-guide\n", - "Snippet: Unlike EOAs, smart contract accounts contain programmable logic that defines and automatically enforces rules via their code—IF this THEN that.\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results indicate that the key difference between EOAs and smart accounts is that smart accounts are programmable and can execute code, while EOAs are not. There seems to be a discussion in the Ethereum community about something called \"account abstraction,\" which may be relevant to the question of whether smart accounts could replace EOAs. I need to understand account abstraction and its potential impact on the EVM ecosystem.\n", - "\n", - "Action: Search the internet\n", - "Action Input: {\"search_query\": \"Account abstraction in EVM\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", - "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", - "Snippet: Account abstraction (ERC-4337) is an Ethereum update that lets you create non-custodial wallets as programmable smart contracts. It unlocks many ...\n", - "---\n", - "Title: Account abstraction - Ethereum.org\n", - "Link: https://ethereum.org/en/roadmap/account-abstraction/\n", - "Snippet: Account abstraction enables smart contracts to initiate transactions themselves, so that any logic that the user wishes to implement can be ...\n", - "---\n", - "Title: Account abstraction: A beginner's guide to Ethereum's ERC-4337 ...\n", - "Link: https://cointelegraph.com/learn/account-abstraction-guide-to-ethereums-erc-4337-standard\n", - "Snippet: Ethereum account abstraction is a new paradigm to allow for a more user-friendly experience when interacting with decentralized applications ...\n", - "---\n", - "Title: Account Abstraction at the Protocol Level - Hedera\n", - "Link: https://hedera.com/blog/account-abstraction-at-the-protocol-level\n", - "Snippet: In a nutshell, account abstraction is the ability to separate cryptographic keys from an account. In Ethereum, the account model is such ...\n", - "---\n", - "Title: Account Abstraction: Past, Present, Future | MetaMask News\n", - "Link: https://metamask.io/news/latest/account-abstraction-past-present-future/\n", - "Snippet: Account abstraction is a proposal to increase flexibility in the management and behavior of Ethereum accounts. We achieve this by introducing ...\n", - "---\n", - "Title: Account Abstraction and ERC 4337: Exploring the Future of Ethereum\n", - "Link: https://medium.com/@denniswon/account-abstraction-and-erc-4337-exploring-the-future-of-ethereum-56514ab34308\n", - "Snippet: Account abstraction is a concept in blockchain technology that allows for the use of smart contract accounts, also known as contract wallets ...\n", - "---\n", - "Title: Introduction to Account Abstraction - Alchemy Docs\n", - "Link: https://docs.alchemy.com/docs/introduction-to-account-abstraction\n", - "Snippet: Account abstraction aims to make the end user experience of interacting with EVM-based blockchains more flexible and user-friendly.\n", - "---\n", - "Title: Account Abstraction - The Starknet Book\n", - "Link: https://book.starknet.io/ch04-00-account-abstraction.html\n", - "Snippet: Account Abstraction (AA) represents an approach to managing accounts and transactions in blockchain networks. It involves two key concepts: Transaction ...\n", - "---\n", - "Title: What is Account Abstraction - Full Guide\n", - "Link: https://moralis.io/what-is-account-abstraction-full-guide/\n", - "Snippet: Account abstraction increases flexibility in the behavior and management of blockchain user accounts, making it significantly easier to create ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "Account abstraction (ERC-4337) is an Ethereum update that allows the creation of non-custodial wallets as programmable smart contracts. It separates cryptographic keys from an account, enabling smart contracts to initiate transactions themselves. This adds flexibility and user-friendliness to the management and behavior of Ethereum accounts. However, I still need to understand how this update might affect the role of EOAs in the EVM ecosystem.\n", - "\n", - "Action: Search the internet\n", - "Action Input: {\"search_query\": \"Impact of account abstraction on EOAs in EVM\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Account Abstraction Explained: The Role And Impact In Ethereum\n", - "Link: https://hacken.io/discover/account-abstraction/\n", - "Snippet: Account abstraction is an enhancement to the Ethereum protocol that allows for greater flexibility in user interactions. Instead of relying ...\n", - "---\n", - "Title: Account Abstraction: Revolutionizing The Payments Industry - LinkedIn\n", - "Link: https://www.linkedin.com/pulse/account-abstraction-revolutionizing-payments-industry-fuseio\n", - "Snippet: By unifying Contract Accounts and EOAs, while eliminating unnecessary logic, this transformative concept enhances the programmability of user ...\n", - "---\n", - "Title: Account Abstraction at the Protocol Level - Hedera\n", - "Link: https://hedera.com/blog/account-abstraction-at-the-protocol-level\n", - "Snippet: In a nutshell, account abstraction is the ability to separate cryptographic keys from an account. In Ethereum, the account model is such ...\n", - "---\n", - "Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", - "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", - "Snippet: Account abstraction enables the creation of smart accounts, which are independent smart contracts that can initiate and execute transactions ...\n", - "---\n", - "Title: Account Abstraction: A Comprehensive Guide - Halborn\n", - "Link: https://www.halborn.com/blog/post/account-abstraction-a-comprehensive-guide\n", - "Snippet: Web3 security firm Halborn provides an in-depth guide to Account Abstraction and its impacts on the Ethereum ecosystem.\n", - "---\n", - "Title: Exploring the Benefits of Account Abstraction on Ethereum - Reddit\n", - "Link: https://www.reddit.com/r/ethereum/comments/12kf9tx/exploring_the_benefits_of_account_abstraction_on/\n", - "Snippet: Account abstraction would allow smart contract wallets to accept gasless meta-transactions from users and pay for their gas without relying on ...\n", - "---\n", - "Title: Account Abstraction - Starknet\n", - "Link: https://www.starknet.io/en/content/account-abstraction\n", - "Snippet: Account abstraction entails abstracting the hard-coded authorization logic away from EOAs, turning each account into a programmable smart ...\n", - "---\n", - "Title: The Road to Account Abstraction on Ethereum | Galaxy\n", - "Link: https://www.galaxy.com/insights/research/the-road-to-account-abstraction-on-ethereum/\n", - "Snippet: This report dives into what account abstraction is and the solutions being proposed to enable the technology on Ethereum.\n", - "---\n", - "Title: Account Abstraction & Why it's a Big Deal for Wallet Security\n", - "Link: https://world.webacy.com/account-abstraction-why-its-a-big-deal-for-wallet-security/\n", - "Snippet: Account abstraction aims to eliminate EOAs by enabling all users to use smart contract wallets as their primary accounts. Decentralization: ...\n", - "---\n", - "Title: Account Abstraction at the Protocol Level - Brendan Graetz\n", - "Link: http://blog.bguiz.com/2023/account-abstraction-protocol-level/\n", - "Snippet: The account is thus inseparable from its private key, public key, and address. Almost all other EVM-compatible networks have followed Ethereum, ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "Account abstraction aims to unify Contract Accounts and EOAs. It enhances the programmability of user interactions and enables the creation of smart accounts, which are independent smart contracts that can initiate and execute transactions. This could significantly impact the role of EOAs in the EVM ecosystem. The key point is that account abstraction could potentially eliminate the need for EOAs by enabling all users to use smart contract wallets as their primary accounts. However, it's worth noting that the implementation of such a significant change in the Ethereum protocol would likely encounter challenges and take time to realize fully.\n", - "\n", - "Final Answer: \n", - "{\"report\": \"Account abstraction (ERC-4337) is an Ethereum update that allows for the creation of non-custodial wallets as programmable smart contracts. It separates cryptographic keys from an account and enables smart contracts to initiate transactions themselves, adding flexibility and user-friendliness to the management and behavior of Ethereum accounts. The key impact of account abstraction on EOAs is that it could potentially eliminate the need for EOAs by enabling all users to use smart contract wallets as their primary accounts. This would suggest that smart accounts could fully replace EOAs in the EVM ecosystem within the next 3-5 years. However, it's worth noting that the implementation of such a significant change in the Ethereum protocol would likely encounter challenges and take time to realize fully. Thus, while the move towards smart accounts appears to be a trend in the evolution of the EVM ecosystem, the timeline for full replacement of EOAs by smart accounts is uncertain and will depend on how quickly and smoothly the Ethereum community can implement and adapt to the changes brought about by account abstraction.\"}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\"report\": \"Account abstraction (ERC-4337) is an Ethereum update that allows for the creation of non-custodial wallets as programmable smart contracts. It separates cryptographic keys from an account and enables smart contracts to initiate transactions themselves, adding flexibility and user-friendliness to the management and behavior of Ethereum accounts. The key impact of account abstraction on EOAs is that it could potentially eliminate the need for EOAs by enabling all users to use smart contract wallets as their primary accounts. This would suggest that smart accounts could fully replace EOAs in the EVM ecosystem within the next 3-5 years. However, it's worth noting that the implementation of such a significant change in the Ethereum protocol would likely encounter challenges and take time to realize fully. Thus, while the move towards smart accounts appears to be a trend in the evolution of the EVM ecosystem, the timeline for full replacement of EOAs by smart accounts is uncertain and will depend on how quickly and smoothly the Ethereum community can implement and adapt to the changes brought about by account abstraction.\"}\n", - "\n", - "\u001b[00m\n", - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", - " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", - " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", - " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", - " * Use the tools provided to aid your estimation.\n", - " * Evaluate recent information more heavily than older information.\n", - " * Your response should include:\n", - " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", - " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - " \n", - " Ensure p_yes + p_no equals 1.\n", - " \n", - " SENTENCE: Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mLooking at the information provided in the report, it seems clear that there is a strong trend towards the use of smart accounts and a move away from EOAs in the EVM ecosystem. The introduction of account abstraction (ERC-4337) is a major factor in this, as it allows for greater flexibility and user-friendliness in the management of Ethereum accounts. However, it's also noted in the report that the implementation of such a significant change in the Ethereum protocol would likely face challenges and take time to fully realize. This introduces a level of uncertainty into the timeline for the full replacement of EOAs by smart accounts. Based on this, I'm led to believe that while the shift towards smart accounts is likely, it may not occur within the next 3-5 years as suggested in the sentence provided.\n", - "\n", - "Final Answer:\n", - " {\n", - " \"decision\": \"n\",\n", - " \"p_yes\": 0.4,\n", - " \"p_no\": 0.6,\n", - " \"confidence\": 0.7\n", - " }\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", - " \"decision\": \"n\",\n", - " \"p_yes\": 0.4,\n", - " \"p_no\": 0.6,\n", - " \"confidence\": 0.7\n", - "}\n", - "\n", - "\u001b[00m\n" - ] - } - ], - "source": [ - "#sentence = 'The temperature will be above 20C on May 24, 2024 in Berlin.'\n", - "sentence = 'Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years'\n", - "result = generate_prediction_for_one_outcome(sentence)" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "6682b2b7-12a9-42bc-9c8a-16113395f14e", - "metadata": {}, - "outputs": [], - "source": [ - "prediction_for_outcome = ProbabilityOutput.parse_obj(json.loads(result))" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "f1bb390b-4f95-40ae-b4f3-d03582354746", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Outcomes(outcomes=['Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases', 'Smart accounts will coexist with EOAs, with each type of account being used for different applications', 'Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account', 'Smart accounts will not gain further adoption and EOAs will remain the dominant type of account'])" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "outcomes" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "4d72ab32-4e38-4adf-aafe-3049ad6267ab", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ProbabilityOutput(decision='n', p_yes=0.4, p_no=0.6, confidence=0.7)" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "prediction_for_outcome" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "c25ef289-0da0-40b7-8ba9-48b581442ab6", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-03 18:27:46,758 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Research and report on the following sentence:\n", - " Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mI first need to understand the context and the key terms in the sentence. Specifically, I need to understand the meaning of \"Smart accounts\", \"EOAs\", and \"EVM ecosystem\". I will then research the current trends and predictions about the future of these terms in the next 3-5 years. \n", - "\n", - "Action: \n", - "Search the internet \n", - "\n", - "Action Input: \n", - "{\"search_query\": \"What are Smart accounts, EOAs, and EVM ecosystem\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: EOA vs. Smart Contract Account: What Is the Difference?\n", - "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", - "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", - "---\n", - "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", - "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", - "Snippet: EOAs are the most basic type of Ethereum account. They are controlled by private keys, and transactions can be initiated only by the account ...\n", - "---\n", - "Title: Understanding the Ethereum Virtual Machine (EVM), Transaction ...\n", - "Link: https://medium.com/coinmonks/understanding-the-ethereum-virtual-machine-evm-transaction-structure-and-account-types-52bcdb3e4d99\n", - "Snippet: Contract accounts are distinct from EOAs as they are not controlled by private keys but by the code of a smart contract. These accounts hold ...\n", - "---\n", - "Title: ERC 4337: Understanding Account Abstraction - HackerNoon\n", - "Link: https://hackernoon.com/erc-4337-understanding-account-abstraction\n", - "Snippet: Account abstraction allows users to use smart contracts as their primary accounts. It essentially turns EOAs into smart contract-enabled ...\n", - "---\n", - "Title: What Are Ethereum Smart Accounts? - E-Crypto News\n", - "Link: https://e-cryptonews.com/what-are-ethereum-smart-accounts/\n", - "Snippet: Smart accounts are described as a kind of accounts that can be readily controlled by programmable smart contracts instead of private keys. Hence ...\n", - "---\n", - "Title: What are Ethereum Accounts? - QuickNode\n", - "Link: https://www.quicknode.com/guides/ethereum-development/getting-started/what-are-ethereum-accounts\n", - "Snippet: Smart contract accounts (SCA) are different than EOAs as they cost transaction fees to be created and do not contain a private key pair. Instead ...\n", - "---\n", - "Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", - "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", - "Snippet: The operation of smart accounts, or account abstracted wallets, is fairly simple. Instead of sending regular transactions as EOAs do, smart ...\n", - "---\n", - "Title: EOS EVM\n", - "Link: https://eosnetwork.com/eos-evm/\n", - "Snippet: The EOS EVM is an emulation of the EVM, housed within an EOS smart contract. EOS EVM bridges the EOS ecosystem to the Ethereum ecosystem by allowing developers ...\n", - "---\n", - "Title: What Are Smart Contracts? - Stackup\n", - "Link: https://www.stackup.sh/blog/what-are-smart-contracts\n", - "Snippet: On Ethereum, there are two types of accounts: externally owned accounts (EOAs) and smart contract accounts. Blockchain accounts are often called wallets. EOAs ...\n", - "---\n", - "Title: Account Abstraction | Welcome to our Docs - zkSync Documentation\n", - "Link: https://docs.zksync.io/build/developer-reference/account-abstraction.html\n", - "Snippet: Accounts in zkSync Era can initiate transactions, like an EOA, but can also have arbitrary logic implemented in them, like a smart contract.\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results indicate that Smart Accounts and EOAs (Externally Owned Accounts) are types of accounts in the Ethereum blockchain. Smart contracts control smart accounts, while private keys control EOAs. The Ethereum Virtual Machine (EVM) is an environment for executing these smart contracts. The concept of \"Account Abstraction\" seems to be a key trend in the Ethereum ecosystem, where users can use smart contracts as primary accounts, effectively turning EOAs into smart contract-enabled accounts. \n", - "\n", - "Now, I need to research the future trends and predictions about these terms in the next 3-5 years. \n", - "\n", - "Action: \n", - "Search the internet \n", - "\n", - "Action Input: \n", - "{\"search_query\": \"Future of Smart accounts, EOAs, and EVM ecosystem 3-5 years\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: The Evolving Landscape of Blockchain: Cutting-Edge Concepts ...\n", - "Link: https://m-tiesler.medium.com/the-evolving-landscape-of-blockchain-cutting-edge-concepts-shaping-2024-992e4e3b4b71\n", - "Snippet: In this blog post, we'll explore 10 groundbreaking concepts that are shaping the future of blockchain ecosystems. From Account Abstraction to ...\n", - "---\n", - "Title: The Future of Web3 Account Abstraction with Oasis\n", - "Link: https://oasisprotocol.org/blog/web3-account-abstraction\n", - "Snippet: Oasis Sapphire proposes a simpler solution to account abstraction for the entire EVM ecosystem. By design, every smart contract on Oasis ...\n", - "---\n", - "Title: Ethereum devs debate future of account abstraction - Blockworks\n", - "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", - "Snippet: The first two goals are clearly not satisfied by Ethereum's “end user account” (EOA) model, hence the need to move the entire EVM ecosystem ...\n", - "---\n", - "Title: Future of Smart Accounts: Modular, Specialised & Multichain\n", - "Link: https://longhashvc.medium.com/future-of-smart-accounts-modular-specialised-multichain-d04f083375a6\n", - "Snippet: Beyond customer access, we expect the leading ecosystems to be built by a factor of perceived security, developer experience, and importantly, ...\n", - "---\n", - "Title: Account Abstraction Proposals Comparison\n", - "Link: https://forum.polygon.technology/t/account-abstraction-proposals-comparison/13595\n", - "Snippet: ... EVM ecosystems might become reality. In such a ... ecosystem and reduce complexity for future upgrades. ... EOAs to upgrade to smart contract ...\n", - "---\n", - "Title: Onboarding Users to Ethereum Ecosystem via Account Abstraction ...\n", - "Link: https://www.youtube.com/watch?v=kcZA2XrjCyw\n", - "Snippet: Onboarding Users to Ethereum Ecosystem via Account Abstraction and EVM-L2s | Will ...\n", - "---\n", - "Title: The Future of Wallets: MPC vs Smart Wallets - Devcon Archive\n", - "Link: https://archive.devcon.org/archive/watch/6/the-future-of-wallets-mpc-vs-smart-wallets/?playlist=Devcon%206\n", - "Snippet: Let's explore the relative strenghts and weaknesses of each, as well as the protocol upgrades ...\n", - "---\n", - "Title: Making Biconomy Smart Accounts Modular\n", - "Link: https://www.biconomy.io/post/making-biconomy-smart-accounts-modular\n", - "Snippet: With our new modular architecture, Biconomy is evolving Smart Account from wallet layer to a platform! The Smart Account Platform enables ...\n", - "---\n", - "Title: 2023 EOS Ecosystem Recap: An Epic Year of Growth ...\n", - "Link: https://eosnetwork.com/blog/2023-eos-ecosystem-recap/\n", - "Snippet: This article will get you up to speed on the biggest milestones and achievements for EOS over the course of 2023.\n", - "---\n", - "Title: What's next in EVM - Devcon Archive\n", - "Link: https://archive.devcon.org/archive/watch/6/whats-next-in-evm/\n", - "Snippet: What is the future of the EVM? This talk will include an overview of proposals to the EVM, many ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results indicate that there is ongoing debate and development in the Ethereum ecosystem regarding the future of Smart Accounts and EOAs. The concept of Account Abstraction continues to be a major focus, with discussions about making the EVM ecosystem simpler and more user-friendly. Smart Accounts are expected to evolve and become more modular and specialized. There are also discussions about EOAs upgrading to smart contract accounts, which implies a gradual shift from EOAs to Smart Accounts. However, the timing and extent of this shift are not clear from the search results. \n", - "\n", - "To give a more nuanced answer, I need more specific information about the likelihood of Smart Accounts fully replacing EOAs in the EVM ecosystem within the next 3-5 years. \n", - "\n", - "Action: \n", - "Search the internet \n", - "\n", - "Action Input: \n", - "{\"search_query\": \"Will Smart accounts fully replace EOAs in the EVM ecosystem within the next 3-5 years\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: The unspoken Ethereum revolution: Are EOAs becoming obsolete?\n", - "Link: https://cryptoslate.com/op-ed-the-unspoken-ethereum-revolution-are-eoas-becoming-obsolete/\n", - "Snippet: The silent discussion on removing Externally Owned Accounts (EOAs) and private keys from the Ethereum ecosystem.\n", - "---\n", - "Title: Reflection on EOS ecosystem, Concept of EOS Lab - Dalio - Medium\n", - "Link: https://dalio.medium.com/reflection-on-eos-ecosystem-concept-of-eos-lab-50fcc76a10a7\n", - "Snippet: It is a question worth pondering what value transformation EOS blockchain can bring to society in the coming years, as it will determine the ...\n", - "---\n", - "Title: Smart Accounts Adoption Accelerated in Q4 2023 - Alchemy\n", - "Link: https://www.alchemy.com/blog/smart-accounts-adoption-accelerated-in-q4-2023\n", - "Snippet: ERC-4337 smart account adoption saw major growth in the fourth quarter of 2024, surpassing 1 million total deployed accounts!\n", - "---\n", - "Title: We should be moving beyond EOAs, not enshrining them even ...\n", - "Link: https://ethereum-magicians.org/t/we-should-be-moving-beyond-eoas-not-enshrining-them-even-further-eip-3074-related/6538\n", - "Snippet: This can be done by making a hard fork that edits all existing and new EOAs in-place, replacing them with smart contract wallets that have the ...\n", - "---\n", - "Title: 2023 EOS Ecosystem Recap: An Epic Year of Growth ...\n", - "Link: https://eosnetwork.com/blog/2023-eos-ecosystem-recap/\n", - "Snippet: This article will get you up to speed on the biggest milestones and achievements for EOS over the course of 2023.\n", - "---\n", - "Title: Account Abstraction Proposals Comparison\n", - "Link: https://forum.polygon.technology/t/account-abstraction-proposals-comparison/13595\n", - "Snippet: Basically saying that allowing to send these transactions from an EOA is an intermediary step until there is a path for EOAs to upgrade to smart ...\n", - "---\n", - "Title: Onboarding Users to Ethereum Ecosystem via Account Abstraction ...\n", - "Link: https://www.youtube.com/watch?v=kcZA2XrjCyw\n", - "Snippet: ... next wave of users to crypto, especially as the market begins to heat up. That makes ...\n", - "---\n", - "Title: Ethereum Improvement Proposals to watch in 2024 - Blockworks\n", - "Link: https://blockworks.co/news/ethereum-improvement-proposals-2024\n", - "Snippet: This proposal, part of Dencun, aims to introduce a new mechanism for handling temporary or transient storage during smart contract execution.\n", - "---\n", - "Title: ERC-4337: A Complete Guide To Account Abstraction - BeInCrypto\n", - "Link: https://beincrypto.com/learn/erc-4337/\n", - "Snippet: The only way users could interact with the blockchain-specific smart contracts was by using their EOAs, or Externally Owned Accounts like ...\n", - "---\n", - "Title: Batch Transactions for EOAs - by foobar - The Variable - Substack\n", - "Link: https://0xfoobar.substack.com/p/batch-transactions-for-eoas\n", - "Snippet: Smart contract wallets are welcome infrastructure, but EOAs remain >90% of all addresses. Several reasons for this - cheaper gas, familiarity, ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results show that there is a growing trend of Smart Accounts adoption and discussions about moving away from EOAs. However, as of now, EOAs still constitute the majority of all addresses due in part to cheaper gas costs and familiarity. There are also proposals for EOAs to upgrade to Smart Accounts, suggesting a gradual transition rather than an abrupt replacement. Therefore, it seems unlikely that Smart Accounts will fully replace EOAs within the next 3-5 years, although the trend is towards a greater role for Smart Accounts in the EVM ecosystem.\n", - "\n", - "Final Answer: \n", - "{\"report\": \"Smart Accounts and EOAs (Externally Owned Accounts) are both types of accounts in the Ethereum blockchain, with Smart Accounts being controlled by smart contracts and EOAs being controlled by private keys. The Ethereum Virtual Machine (EVM) is an environment for executing these smart contracts. There is a growing trend in the Ethereum ecosystem towards Account Abstraction, which allows users to use smart contracts as their primary accounts, effectively turning EOAs into smart contract-enabled accounts. However, as of now, EOAs still constitute the majority of all addresses due to factors such as cheaper gas costs and familiarity among users. There are also discussions and proposals for EOAs to upgrade to Smart Accounts, suggesting a gradual transition rather than an abrupt replacement. Therefore, while the role of Smart Accounts in the EVM ecosystem is expected to grow in the next 3-5 years, it seems unlikely that they will fully replace EOAs within this timeframe.\"}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\"report\": \"Smart Accounts and EOAs (Externally Owned Accounts) are both types of accounts in the Ethereum blockchain, with Smart Accounts being controlled by smart contracts and EOAs being controlled by private keys. The Ethereum Virtual Machine (EVM) is an environment for executing these smart contracts. There is a growing trend in the Ethereum ecosystem towards Account Abstraction, which allows users to use smart contracts as their primary accounts, effectively turning EOAs into smart contract-enabled accounts. However, as of now, EOAs still constitute the majority of all addresses due to factors such as cheaper gas costs and familiarity among users. There are also discussions and proposals for EOAs to upgrade to Smart Accounts, suggesting a gradual transition rather than an abrupt replacement. Therefore, while the role of Smart Accounts in the EVM ecosystem is expected to grow in the next 3-5 years, it seems unlikely that they will fully replace EOAs within this timeframe.\"}\n", - "\n", - "\u001b[00m\n", - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", - " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", - " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", - " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", - " * Use the tools provided to aid your estimation.\n", - " * Evaluate recent information more heavily than older information.\n", - " * Your response should include:\n", - " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", - " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - " \n", - " Ensure p_yes + p_no equals 1.\n", - " \n", - " SENTENCE: Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mBased on the information provided, it seems that there is a trend towards using Smart Accounts in the Ethereum ecosystem due to their advantages such as the ability to use smart contracts as primary accounts. However, there are also factors working against this trend such as the lower gas costs associated with EOAs and the familiarity that users have with this type of account. Additionally, the report mentions that there are discussions and proposals for a gradual transition from EOAs to Smart Accounts rather than a sudden replacement. Therefore, the likelihood of Smart Accounts fully replacing EOAs in the next 3-5 years seems low. \n", - "\n", - "Final Answer: \n", - "{\n", - " \"decision\": \"n\",\n", - " \"p_yes\": 0.2,\n", - " \"p_no\": 0.8,\n", - " \"confidence\": 0.85\n", - "}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-03 18:28:35,141 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", - " \"decision\": \"n\",\n", - " \"p_yes\": 0.2,\n", - " \"p_no\": 0.8,\n", - " \"confidence\": 0.85\n", - "}\n", - "\n", - "\u001b[00m\n", - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Research and report on the following sentence:\n", - " Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mI need to understand more about the terms \"Smart accounts\", \"EOAs\", and \"EVM ecosystem\" in order to answer this question effectively. I will start my research by searching for these terms on the internet. \n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\"search_query\": \"What are Smart accounts in EVM ecosystem\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", - "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", - "Snippet: Smart accounts are a type of accounts that can be controlled by programmable smart contracts rather than private keys, allowing for more ...\n", - "---\n", - "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", - "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", - "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", - "---\n", - "Title: What Are Ethereum Smart Accounts? - E-Crypto News\n", - "Link: https://e-cryptonews.com/what-are-ethereum-smart-accounts/\n", - "Snippet: Smart accounts are a kind of account hosted on the Ethereum blockchain. They can be controlled using programmable smart contracts instead of ...\n", - "---\n", - "Title: Making Biconomy Smart Accounts Modular\n", - "Link: https://www.biconomy.io/post/making-biconomy-smart-accounts-modular\n", - "Snippet: The Smart Account Platform enables developers to easily & securely plug-in programmable modules to endlessly extend smart account capabilities.\n", - "---\n", - "Title: Safe — Ethereum Smart Accounts\n", - "Link: https://safe.global/\n", - "Snippet: Safe accounts hold and protect billions of $$$ in assets · Available on 14+ networks · Trusted by the best · Safe CORE powers 190+ ecosystem projects in every ...\n", - "---\n", - "Title: ERC 4337: Understanding Account Abstraction - HackerNoon\n", - "Link: https://hackernoon.com/erc-4337-understanding-account-abstraction\n", - "Snippet: Smart contract accounts are the second type of account on Ethereum. Smart contracts are one of the most powerful features of blockchain ...\n", - "---\n", - "Title: Understanding the Ethereum Virtual Machine (EVM), Transaction ...\n", - "Link: https://medium.com/coinmonks/understanding-the-ethereum-virtual-machine-evm-transaction-structure-and-account-types-52bcdb3e4d99\n", - "Snippet: When a smart contract is deployed to the Ethereum network, a contract account is created, and it has its address. Contract accounts play a ...\n", - "---\n", - "Title: What is a Smart Contract Wallet? ERC-4337 Explained - thirdweb blog\n", - "Link: https://blog.thirdweb.com/smart-contract-wallet-erc4337/\n", - "Snippet: As the name implies, a smart contract wallet uses smart contracts to automate transactions, enforce rules, and manage assets. Learn more.\n", - "---\n", - "Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", - "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", - "Snippet: ERC-4337 is the Ethereum standard for account abstraction, which enables smart contract wallets with powerful features. Learn more.\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search result provided me with information about Smart accounts. They are a type of accounts that can be controlled by programmable smart contracts rather than private keys. Now I will research more about EOAs (Externally Owned Accounts) and the EVM (Ethereum Virtual Machine) ecosystem.\n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\"search_query\": \"What are EOAs in EVM ecosystem\"} \n", - "\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: EOS EVM\n", - "Link: https://eosnetwork.com/eos-evm/\n", - "Snippet: EVM stands for Ethereum Virtual Machine, the original EVM is an engine made up of a series of Solidity smart contracts that powers the Ethereum ecosystem. It ...\n", - "---\n", - "Title: EOS Network - An Enterprise-Grade Blockchain Operating System\n", - "Link: https://blockonomi.com/eos-network-an-enterprise-grade-blockchain-operating-system/\n", - "Snippet: EOS EVM promotes greater interoperability between EOS and Ethereum, further expanding the range of applications that can be built on EOS.”.\n", - "---\n", - "Title: EOS EVM: A Bridge Between EOS and Ethereum Ecosystems\n", - "Link: https://www.eosgo.io/news/eos-evm-a-bridge-between-eos-and-eth-ecosystems/\n", - "Snippet: EOS EVM stems from the initial goal to connect EOS to the Ethereum ecosystem using Metamask, a popular Ethereum wallet that enables users to ...\n", - "---\n", - "Title: Supercharged EOAs will save cost and cement the EVM's network ...\n", - "Link: https://www.tekedia.com/supercharged-eoas-will-save-cost-and-cement-the-evms-network-effects/\n", - "Snippet: Supercharged EOAs are a game-changer for the Ethereum ecosystem. They will save millions of dollars for users and developers and cement the ...\n", - "---\n", - "Title: EOS EVM v0.6.0: Innovating the DeFi Experience with Trustless ...\n", - "Link: https://eosnetwork.com/blog/eos-evm-v060-innovating-defi-usdt-bridging/\n", - "Snippet: This release will mark a key milestone in the EOS ecosystem's journey, as seamless interaction between EOS Native and EOS EVM is enabled. EOS ...\n", - "---\n", - "Title: What Is EOS Blockchain? - Ledger\n", - "Link: https://www.ledger.com/academy/what-is-eos-blockchain\n", - "Snippet: The EOS blockchain ecosystem is an open-source platform designed to address scalability issues for decentralized apps - Learn how it works.\n", - "---\n", - "Title: Reflection on EOS ecosystem, Concept of EOS Lab - Dalio - Medium\n", - "Link: https://dalio.medium.com/reflection-on-eos-ecosystem-concept-of-eos-lab-50fcc76a10a7\n", - "Snippet: In short, EOS can only thrive by using limited funds, facilitating external asset circulation, activating internal development capabilities, and ...\n", - "---\n", - "Title: EOS EVM v0.6.0: A Major Upgrade for the EOS Ecosystem\n", - "Link: https://coincodex.com/article/33359/eos-evm-v060-a-major-upgrade-for-the-eos-ecosystem/\n", - "Snippet: This upgrade enhances EOS's interoperability and scalability. EOS, one of the leading blockchain platforms for decentralized applications (DApps) ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search result didn't provide specific information about EOAs. EOAs (Externally Owned Accounts) are a type of account in the EVM ecosystem. I need to find more specific information about EOAs.\n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\"search_query\": \"What are Externally Owned Accounts in Ethereum\"}\n", - "\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Ethereum accounts\n", - "Link: https://ethereum.org/en/developers/docs/accounts/\n", - "Snippet: Externally-owned account (EOA) – controlled by anyone with the private keys; Contract account – a smart contract deployed to the network, ...\n", - "---\n", - "Title: What are Ethereum Accounts? - GeeksforGeeks\n", - "Link: https://www.geeksforgeeks.org/what-are-ethereum-accounts/\n", - "Snippet: Externally Owned Accounts and Key Pairs ... An Ethereum account is a private-public key pair that may be linked to a blockchain address.\n", - "---\n", - "Title: What's Externally Owned Accounts (EOA)? - OKX\n", - "Link: https://www.okx.com/help/whats-externally-owned-accounts-eoa\n", - "Snippet: Externally owned account (EOA) is secured by private key, not smart contract. For example, when you create a new account in Ethereum wallet, you ...\n", - "---\n", - "Title: What Are Externally Owned Accounts (EAO)? - Metatime\n", - "Link: https://metatime.com/en/blog/what-are-externally-owned-accounts-eao\n", - "Snippet: EAO refers to the types of accounts on blockchain networks that are managed by a private key instead of smart contracts.\n", - "---\n", - "Title: What are the types of accounts in Ethereum? - Educative.io\n", - "Link: https://www.educative.io/answers/what-are-the-types-of-accounts-in-ethereum\n", - "Snippet: Externally owned account (EOA) ... EOA accounts are created by using the public-private keys. These accounts are controlled by a private key. A private key is ...\n", - "---\n", - "Title: What are Ethereum Accounts? - QuickNode\n", - "Link: https://www.quicknode.com/guides/ethereum-development/getting-started/what-are-ethereum-accounts\n", - "Snippet: Ethereum features two distinct types of accounts: externally owned accounts (EOA) and smart contract accounts. Both account types can send and ...\n", - "---\n", - "Title: What are Ethereum Accounts? - Alchemy Docs\n", - "Link: https://docs.alchemy.com/docs/ethereum-accounts\n", - "Snippet: Ethereum has two types of accounts: externally owned accounts (EOAs) and contract accounts. EOAs are like Bitcoin key pairs, while contract accounts are for ...\n", - "---\n", - "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", - "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", - "Snippet: An Externally Owned Account, or EOA for short, works with the user having control of the account via a private key. This key is your unique ...\n", - "---\n", - "Title: Externally owned account - Learn Ethereum [Book] - O'Reilly\n", - "Link: https://www.oreilly.com/library/view/learn-ethereum/9781789954111/4dca3cec-ef6b-449e-a42a-881ed64f2252.xhtml\n", - "Snippet: In the world state, the account is linked to a public address, which is generated based on the owner's public key. We will talk about the address in detail in ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "Externally Owned Accounts (EOAs) are controlled by private keys, and not by smart contracts. These accounts are created using the public-private keys. Now that I have information about Smart accounts and EOAs, I need to understand the current state and projected future of the EVM ecosystem to determine if Smart accounts will fully replace EOAs in the next 3-5 years.\n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\"search_query\": \"Future of EVM ecosystem\"}\n", - "\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: 2023 EVM Network Landscape Report - Blog | Tenderly\n", - "Link: https://blog.tenderly.co/2023-evm-network-landscape-report/\n", - "Snippet: The exponential growth of EVM networks since 2015 can be attributed to a mature ecosystem of developer tools and significantly lower barriers to ...\n", - "---\n", - "Title: The Future of EVM Technology: A Journey Beyond Ethereum's ...\n", - "Link: https://www.blog.bitfinity.network/exploring-the-future-of-evm-ethereum-virtual-machine-technology-beyond/\n", - "Snippet: As the blockchain ecosystem continues to evolve, interoperability will remain a crucial concern, and EVM technology will play an instrumental ...\n", - "---\n", - "Title: Injective EVM: The Future of Multi-VM Development - Medium\n", - "Link: https://medium.com/@chukwunelo007/injective-evm-the-future-of-multi-vm-development-9d1ac8ae918d\n", - "Snippet: Injective has developed compatibility across the Ethereum ecosystem over the years. This includes a unique signing mechanism whereby Ethereum ...\n", - "---\n", - "Title: Unlock the Future: EVM vs. L1 Networks in DeFi's New Era - Lunu\n", - "Link: https://lunu.io/news/unlock-the-future-evm-vs-l1-networks-in-defis-new-era/\n", - "Snippet: This rivalry highlights the ongoing evolution of the blockchain ecosystem, where innovation is constant, and the quest for a scalable, secure, and user-friendly ...\n", - "---\n", - "Title: Ethereum Virtual Machine (EVM): A Comprehensive 2024 Guide\n", - "Link: https://www.ankr.com/blog/what-is-evm-ethereum-virtual-machine/?page=1\n", - "Snippet: In the evolving landscape of blockchain technology, the Ethereum Virtual Machine (EVM) stands as a cornerstone of the Ethereum ecosystem.\n", - "---\n", - "Title: EVMs in 2024: Vitalik's ZK-EVM Proposal and the Developer Shift to ...\n", - "Link: https://hackernoon.com/evms-in-2024-vitaliks-zk-evm-proposal-and-the-developer-shift-to-evm-chains\n", - "Snippet: The expanding EVM ecosystem is like a vast playground for the tech wizards out there. Innovations like ZK-EVM are making Ethereum more scalable ...\n", - "---\n", - "Title: Unveiling the Future of Blockchain: EVM vs. ZK-EVM - Medium\n", - "Link: https://medium.com/@gameficolumn/unveiling-the-future-of-blockchain-evm-vs-zk-evm-8bafd39b1259\n", - "Snippet: The coexistence of EVM and ZK-EVM underscores Ethereum's commitment to innovation and its adaptive ecosystem that caters to diverse needs.\n", - "---\n", - "Title: The Rise of Parallel EVM, which projects are worth focusing on?\n", - "Link: https://www.gate.io/learn/articles/plan-ahead-for-the-next-narrative/1355\n", - "Snippet: Representative projects: Neon, Eclipse, Lumio. Neon: Introducing EVM into L2 of Solana ecosystem. Neon EVM is the first parallelized Ethereum ...\n", - "---\n", - "Title: What Is the Ethereum Virtual Machine? A 101 Guide - Worldcoin\n", - "Link: https://worldcoin.org/articles/what-is-the-ethereum-virtual-machine\n", - "Snippet: What's the future of EVM? Wrapping up ... EVM performs many essential functions in the Ethereum ecosystem. ... EVM works, it may pave the way for ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The EVM ecosystem is projected to experience continuous growth and innovation. Technologies like ZK-EVM are making Ethereum more scalable, which could influence the adoption of Smart accounts. However, it's not clear from the search results whether Smart accounts will fully replace EOAs within the next 3-5 years. I will conduct one more search to gather any available predictions or analysis about this specific topic.\n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\"search_query\": \"Will Smart accounts replace EOAs in EVM ecosystem\"}\n", - "\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Ethereum devs debate future of account abstraction - Blockworks\n", - "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", - "Snippet: The first two goals are clearly not satisfied by Ethereum's “end user account” (EOA) model, hence the need to move the entire EVM ecosystem ...\n", - "---\n", - "Title: The unspoken Ethereum revolution: Are EOAs becoming obsolete?\n", - "Link: https://cryptoslate.com/op-ed-the-unspoken-ethereum-revolution-are-eoas-becoming-obsolete/\n", - "Snippet: The silent discussion on removing Externally Owned Accounts (EOAs) and private keys from the Ethereum ecosystem.\n", - "---\n", - "Title: ERC 4337: Understanding Account Abstraction - HackerNoon\n", - "Link: https://hackernoon.com/erc-4337-understanding-account-abstraction\n", - "Snippet: Account abstraction is a blockchain technology that enables users to replace their traditional blockchain accounts with smart contracts.\n", - "---\n", - "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", - "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", - "Snippet: The key difference between EOAs and smart accounts is that smart accounts are programmable and can execute code, while EOAs are simply accounts ...\n", - "---\n", - "Title: EIP-3074 Explained\n", - "Link: https://domothy.com/eip3074/\n", - "Snippet: Externally Owned Accounts (EOAs) are simple enough to describe: A private key resolves to the address of the account where assets are sent to and held, and the ...\n", - "---\n", - "Title: Making Biconomy Smart Accounts Modular\n", - "Link: https://www.biconomy.io/post/making-biconomy-smart-accounts-modular\n", - "Snippet: It's a basic Validation Module, that allows EOAs to become authorized to sign userOps for the given Smart Account. In fact, it works exactly ...\n", - "---\n", - "Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", - "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", - "Snippet: The operation of smart accounts, or account abstracted wallets, is fairly simple. Instead of sending regular transactions as EOAs do, smart ...\n", - "---\n", - "Title: The potential issues with EIP-4337 and the future direction ... - Medium\n", - "Link: https://medium.com/@intuofficial/the-potential-issues-with-eip-4337-and-the-future-direction-of-account-abstraction-3f195943ac1d\n", - "Snippet: Finally, removing EOAs could enable the development of more privacy-preserving applications, as smart contract wallets could be designed to hide ...\n", - "---\n", - "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", - "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", - "Snippet: A: A smart contract is fundamentally different from an EOA. Smart contracts are programs (code) that run on-chain, while EOAs are basic account ...\n", - "---\n", - "Title: Introductory Guide to Account Abstraction (ERC-4337) - Blocknative\n", - "Link: https://www.blocknative.com/blog/account-abstraction-erc-4337-guide\n", - "Snippet: Unlike EOAs, smart contract accounts contain programmable logic that defines and automatically enforces rules via their code—IF this THEN that.\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results provide some insight into the ongoing discussion about whether Smart accounts could replace EOAs in the EVM ecosystem. Some sources suggest that the programmable nature of Smart accounts offers advantages over EOAs. However, it's not clear whether there is a definitive prediction that this replacement will happen within the next 3-5 years. \n", - "\n", - "I will analyze the information I have gathered and formulate a final answer.\n", - "\n", - "Final Answer: \n", - "{\"report\": \"Smart accounts and Externally Owned Accounts (EOAs) serve different purposes in the Ethereum Virtual Machine (EVM) ecosystem. Smart accounts are programmable accounts controlled by smart contracts, while EOAs are controlled by private keys. There is ongoing discussion in the blockchain community about the potential for Smart accounts to replace EOAs due to their programmable nature and ability to execute code. However, no definitive prediction can be made at this point about whether this transition will fully take place within the next 3-5 years. Factors such as the continuous evolution and innovation within the EVM ecosystem, including the development of technologies like ZK-EVM, will likely influence the future role of Smart accounts.\"}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\"report\": \"Smart accounts and Externally Owned Accounts (EOAs) serve different purposes in the Ethereum Virtual Machine (EVM) ecosystem. Smart accounts are programmable accounts controlled by smart contracts, while EOAs are controlled by private keys. There is ongoing discussion in the blockchain community about the potential for Smart accounts to replace EOAs due to their programmable nature and ability to execute code. However, no definitive prediction can be made at this point about whether this transition will fully take place within the next 3-5 years. Factors such as the continuous evolution and innovation within the EVM ecosystem, including the development of technologies like ZK-EVM, will likely influence the future role of Smart accounts.\"}\n", - "\n", - "\u001b[00m\n", - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", - " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", - " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", - " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", - " * Use the tools provided to aid your estimation.\n", - " * Evaluate recent information more heavily than older information.\n", - " * Your response should include:\n", - " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", - " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - " \n", - " Ensure p_yes + p_no equals 1.\n", - " \n", - " SENTENCE: Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mBased on the context provided, it's clear that there is a discussion in the blockchain community about the potential for Smart accounts to fully replace EOAs in the EVM ecosystem within the next 3-5 years. This is due to the programmable nature of Smart accounts and their ability to execute code. However, there is no definitive prediction that can be made at this point about whether this transition will fully take place within the given timeframe. It's important to consider factors such as the continuous evolution and innovation within the EVM ecosystem, including the development of technologies like ZK-EVM, which will likely influence the future role of Smart accounts.\n", - "\n", - "Final Answer: \n", - "{\n", - "\"decision\": \"n\",\n", - "\"p_yes\": 0.4,\n", - "\"p_no\": 0.6,\n", - "\"confidence\": 0.7\n", - "}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-03 18:29:24,860 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", - " \"decision\": \"n\",\n", - " \"p_yes\": 0.4,\n", - " \"p_no\": 0.6,\n", - " \"confidence\": 0.7\n", - "}\n", - "\n", - "\u001b[00m\n", - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Research and report on the following sentence:\n", - " Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mTo give a well-rounded analysis, I need to understand what Smart Accounts and EOAs (Externally Owned Accounts) are, and their current state in the EVM (Ethereum Virtual Machine) ecosystem. I also need to find any trends, predictions, or expert opinions on their future use and advancements within the next 3-5 years. I will begin by researching these topics.\n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\"search_query\": \"Smart accounts vs EOAs in EVM ecosystem\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: EOA vs. Smart Contract Account: What Is the Difference?\n", - "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", - "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", - "---\n", - "Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", - "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", - "Snippet: The key difference between EOAs and smart accounts is that smart accounts are programmable and can execute code, while EOAs are simply accounts ...\n", - "---\n", - "Title: Smart Contract Wallets vs EOAs - Vishal Kumar Singh\n", - "Link: https://thisvishalsingh.medium.com/smart-contract-wallets-vs-eoas-7720fdca7141\n", - "Snippet: The most common is by using an Externally Owned Account (EOA), which is a wallet that is secured with a private key.\n", - "---\n", - "Title: Understanding the Ethereum Virtual Machine (EVM), Transaction ...\n", - "Link: https://medium.com/coinmonks/understanding-the-ethereum-virtual-machine-evm-transaction-structure-and-account-types-52bcdb3e4d99\n", - "Snippet: Contract accounts are distinct from EOAs as they are not controlled by private keys but by the code of a smart contract. These accounts hold ...\n", - "---\n", - "Title: ERC 4337: Understanding Account Abstraction - HackerNoon\n", - "Link: https://hackernoon.com/erc-4337-understanding-account-abstraction\n", - "Snippet: Two types of accounts exist on EVM-based blockchain platforms: EOMs or Externally Owned Accounts and Smart Contract Accounts, also referred to ...\n", - "---\n", - "Title: Understanding Ethereum Account Abstraction - CoinsBench\n", - "Link: https://coinsbench.com/understanding-ethereum-account-abstraction-revolutionizing-smart-contract-interactions-6de9c91af39b\n", - "Snippet: Traditionally, the EVM interacts with two types of accounts: externally owned accounts (EOAs) and contract accounts. EOAs are controlled by ...\n", - "---\n", - "Title: Introductory Guide to Account Abstraction (ERC-4337) - Blocknative\n", - "Link: https://www.blocknative.com/blog/account-abstraction-erc-4337-guide\n", - "Snippet: Unlike EOAs, smart contract accounts contain programmable logic that defines and automatically enforces rules via their code—IF this THEN that.\n", - "---\n", - "Title: Account Abstraction: Past, Present, Future | MetaMask News\n", - "Link: https://metamask.io/news/latest/account-abstraction-past-present-future/\n", - "Snippet: Hence, you'll find that many account abstraction proposals either want EOAs to behave as smart contracts or contract accounts to act as EOAs.\n", - "---\n", - "Title: What is Account Abstraction? ERC-4337 Explained - thirdweb blog\n", - "Link: https://blog.thirdweb.com/account-abstraction-erc4337/\n", - "Snippet: Unlike EOAs, a smart account's security does not rely on a seed phrase or private key. A smart account owner can assign multiple devices, people ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results have provided some insights into the difference between EOAs and Smart Accounts. EOAs are secured with a private key and can't execute code, while Smart Accounts are programmable and can execute code. There's also mention of account abstraction, which seems to be a significant development in the EVM ecosystem. Now, I need to find information on trends, predictions, and expert opinions about the future of Smart Accounts and EOAs in the EVM ecosystem.\n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\"search_query\": \"Future of Smart Accounts and EOAs in EVM ecosystem\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Ethereum devs debate future of account abstraction - Blockworks\n", - "Link: https://blockworks.co/news/ethereum-devs-debate-account-abstraction\n", - "Snippet: The first two goals are clearly not satisfied by Ethereum's “end user account” (EOA) model, hence the need to move the entire EVM ecosystem ...\n", - "---\n", - "Title: The Future of Ethereum: Account Abstraction and Modular Smart ...\n", - "Link: https://medium.com/@denniswon/the-future-of-ethereum-account-abstraction-and-modular-smart-contract-accounts-8ffb618f0c15\n", - "Snippet: ERC 6900 is a new standard that introduces modular smart contract accounts to the Ethereum ecosystem. This standard aims to maximize ...\n", - "---\n", - "Title: Future of Smart Accounts: Modular, Specialised & Multichain\n", - "Link: https://longhashvc.medium.com/future-of-smart-accounts-modular-specialised-multichain-d04f083375a6\n", - "Snippet: Beyond customer access, we expect the leading ecosystems to be built by a factor of perceived security, developer experience, and importantly, ...\n", - "---\n", - "Title: State of Wallets - Part 2: Smart Accounts (Account Abstraction\n", - "Link: https://www.coinbase.com/blog/state-of-wallets-2\n", - "Snippet: Account Abstraction (“AA”) launched in the EVM ecosystem in Q1-2023 and is beginning to see an uptick in adoption. This document explains the ...\n", - "---\n", - "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", - "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", - "Snippet: EOAs and Smart Contract Accounts are the two fundamental operators that can be associated with an Ethereum blockchain address.\n", - "---\n", - "Title: The unspoken Ethereum revolution: Are EOAs becoming obsolete?\n", - "Link: https://www.binance.com/en/square/post/336701\n", - "Snippet: ... EOAs in the ecosystem's future, favoring smart contract wallets as the default account model for users. EIP-4337 & Account Abstraction. Security Fellow for ...\n", - "---\n", - "Title: The EOS Network's Vision for an Interoperable Future\n", - "Link: https://eosnetwork.com/blog/eos-interoperable-future-vision/\n", - "Snippet: The EOS EVM operates as a smart contract running on the EOS blockchain. This provides an opportunity to, in many cases, execute the full process ...\n", - "---\n", - "Title: The Future of the Ethereum Virtual Machine (EVM) in 2023 - CoinDesk\n", - "Link: https://www.coindesk.com/consensus-magazine/2022/12/12/ethereum-virtual-machine-evm-future/\n", - "Snippet: A growing collection of EVMs will become increasingly specialized. The EVM is by far the most popular execution environment among smart contract ...\n", - "---\n", - "Title: EVMs in 2024: Vitalik's ZK-EVM Proposal and the Developer Shift to ...\n", - "Link: https://hackernoon.com/evms-in-2024-vitaliks-zk-evm-proposal-and-the-developer-shift-to-evm-chains\n", - "Snippet: The state of Ethereum Virutal Machines in 2024, from Vitaliks proposal to zero knowledge tech to the core of Ethereum to developer ...\n", - "---\n", - "Title: The Future of Web3 Account Abstraction with Oasis\n", - "Link: https://oasisprotocol.org/blog/web3-account-abstraction\n", - "Snippet: Oasis Sapphire proposes a simpler solution to account abstraction for the entire EVM ecosystem. By design, every smart contract on Oasis ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results suggest that there is a debate among Ethereum developers about the future of EOAs and Smart Accounts in the EVM ecosystem. Some believe that the EOA model is not sufficient for the future needs of the ecosystem. Account Abstraction is a significant development in the EVM ecosystem and is seeing increased adoption. There may be a trend towards Smart Contract Accounts becoming the default account model for users. Now I need to understand more about account abstraction and its impact on the EVM ecosystem.\n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\"search_query\": \"Impact of account abstraction on EVM ecosystem\"}\n", - "\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Account Abstraction Explained: The Role And Impact In Ethereum\n", - "Link: https://hacken.io/discover/account-abstraction/\n", - "Snippet: Account abstraction allows for more opportunities for dApps and wallet developers to innovate on user experiences. Now, in the account ...\n", - "---\n", - "Title: Account Abstraction: A Comprehensive Guide - Halborn\n", - "Link: https://www.halborn.com/blog/post/account-abstraction-a-comprehensive-guide\n", - "Snippet: This guide aims to go deeper, providing a clearer understanding of Account Abstraction and its impacts on the Ethereum ecosystem. How Ethereum ...\n", - "---\n", - "Title: How 'Account Abstraction' Could Impact The Crypto Landscape?\n", - "Link: https://www.ledger.com/blog/how-account-abstraction-could-impact-the-crypto-landscape\n", - "Snippet: In this article, I delve into the concept of Account Abstraction and explore how it could underpin the future of blockchain technologies.\n", - "---\n", - "Title: Account Abstraction: Revolutionizing The Payments Industry - LinkedIn\n", - "Link: https://www.linkedin.com/pulse/account-abstraction-revolutionizing-payments-industry-fuseio\n", - "Snippet: One of the critical advantages of Account Abstraction is eliminating unnecessary logic within the cryptocurrency system. By removing redundant ...\n", - "---\n", - "Title: Account Abstraction at the Protocol Level - Hedera\n", - "Link: https://hedera.com/blog/account-abstraction-at-the-protocol-level\n", - "Snippet: In a nutshell, account abstraction is the ability to separate cryptographic keys from an account. In Ethereum, the account model is such ...\n", - "---\n", - "Title: Account Abstraction Use Cases That Will Redefine Web3\n", - "Link: https://blog.quicknode.com/account-abstraction-use-cases/\n", - "Snippet: Account abstraction primarily relates to Ethereum and Ethereum virtual machine (EVM). However, the idea can be conceptually extended to non-EVM ...\n", - "---\n", - "Title: Account Abstraction - Plena Finance\n", - "Link: https://www.plena.finance/blog/account-abstraction\n", - "Snippet: Account Abstraction (ERC-4337) is a proposal that started in Ethereum that allows users and developers to customize how they send and manage ...\n", - "---\n", - "Title: Account Abstraction Ecosystem Growth - Data & Statistics - Nextrope\n", - "Link: https://nextrope.com/account-abstraction-ecosystem-growth-data-statistics/\n", - "Snippet: Account Abstraction (AA) has emerged as a pivotal innovation in the realm of blockchain and cryptocurrencies, redefining user interactions and ...\n", - "---\n", - "Title: Exploring ERC-4337 Account Abstraction — Part 1 | by Eden Network\n", - "Link: https://medium.com/edennetwork/the-next-billion-users-exploring-erc-4337-account-abstraction-part-1-1cf5888565a3\n", - "Snippet: Account abstraction became part of Ethereum's execution layer in March. It unlocks the potential to create a user experience that harnesses the ...\n", - "---\n", - "Title: Account Abstraction & Why it's a Big Deal for Wallet Security\n", - "Link: https://world.webacy.com/account-abstraction-why-its-a-big-deal-for-wallet-security/\n", - "Snippet: Account abstraction will likely prove to be an important addition to the Ethereum ecosystem that enables further scalability and evolution in ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results indicate that account abstraction is seen as a significant innovation in the Ethereum ecosystem. It allows for more opportunities for innovation in user experiences and is expected to impact the future of blockchain technologies. It eliminates unnecessary logic within the cryptocurrency system and enables further scalability and evolution of the Ethereum ecosystem. Now I have enough information to draft a report on the future of Smart Accounts and EOAs in the EVM ecosystem.\n", - "\n", - "Final Answer: \n", - "{\"report\": \"Smart Accounts and EOAs are the two fundamental operators of the Ethereum blockchain. EOAs are secured with a private key and cannot execute code, whereas Smart Accounts are programmable and can execute code. However, there's a growing belief among the Ethereum developer community that the EOA model isn't sufficient for the future needs of the EVM ecosystem. This is where account abstraction comes into play. Account abstraction is seen as a significant development and innovation in the EVM ecosystem. It allows for more opportunities for dApps and wallet developers to innovate on user experiences. Furthermore, it eliminates unnecessary logic within the cryptocurrency system, enabling further scalability and evolution of the EVM ecosystem. Account Abstraction has seen an uptick in adoption since its launch and is expected to redefine user interactions and experiences in the blockchain and cryptocurrency realm. Based on these developments and trends, it's reasonable to predict that Smart Accounts could fully replace EOAs in the EVM ecosystem within the next 3-5 years. However, this transition highly depends on the continued development and adoption of technologies like account abstraction, which will allow Smart Accounts to effectively take on the roles currently performed by EOAs.\"}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\"report\": \"Smart Accounts and EOAs are the two fundamental operators of the Ethereum blockchain. EOAs are secured with a private key and cannot execute code, whereas Smart Accounts are programmable and can execute code. However, there's a growing belief among the Ethereum developer community that the EOA model isn't sufficient for the future needs of the EVM ecosystem. This is where account abstraction comes into play. Account abstraction is seen as a significant development and innovation in the EVM ecosystem. It allows for more opportunities for dApps and wallet developers to innovate on user experiences. Furthermore, it eliminates unnecessary logic within the cryptocurrency system, enabling further scalability and evolution of the EVM ecosystem. Account Abstraction has seen an uptick in adoption since its launch and is expected to redefine user interactions and experiences in the blockchain and cryptocurrency realm. Based on these developments and trends, it's reasonable to predict that Smart Accounts could fully replace EOAs in the EVM ecosystem within the next 3-5 years. However, this transition highly depends on the continued development and adoption of technologies like account abstraction, which will allow Smart Accounts to effectively take on the roles currently performed by EOAs.\"}\n", - "\n", - "\u001b[00m\n", - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", - " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", - " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", - " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", - " * Use the tools provided to aid your estimation.\n", - " * Evaluate recent information more heavily than older information.\n", - " * Your response should include:\n", - " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", - " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - " \n", - " Ensure p_yes + p_no equals 1.\n", - " \n", - " SENTENCE: Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mAfter analyzing the report provided, it is apparent that there is a notable trend towards the adoption of Smart Accounts in the Ethereum blockchain. The functionality of Smart Accounts, especially with the advent of account abstraction, provides a significant advantage over EOAs in terms of programmability and scalability. Furthermore, the report suggests that the Ethereum developer community is increasingly recognizing these advantages, which could drive the transition from EOAs to Smart Accounts over the next 3-5 years.\n", - "\n", - "However, it is also important to consider the challenges associated with this transition. The successful replacement of EOAs with Smart Accounts hinges on the ongoing development and adoption of account abstraction, which may face unforeseen obstacles or delays. Additionally, the inherent resistance to change in established systems should also be taken into account.\n", - "\n", - "Taking all these factors into consideration, I would lean towards the prediction that Smart Accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years, but with a moderate level of confidence due to the potential challenges involved in this transition.\n", - "\n", - "Final Answer:\n", - "{\n", - "\"decision\": \"y\",\n", - "\"p_yes\": 0.7,\n", - "\"p_no\": 0.3,\n", - "\"confidence\": 0.6\n", - "}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-03 18:30:16,658 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", - " \"decision\": \"y\",\n", - " \"p_yes\": 0.7,\n", - " \"p_no\": 0.3,\n", - " \"confidence\": 0.6\n", - "}\n", - "\n", - "\u001b[00m\n", - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Research and report on the following sentence:\n", - " Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mFirst, I need to understand the key terms in the task. Smart Accounts and EOAs (Externally Owned Accounts) are terms related to Ethereum's blockchain technology. EVM refers to Ethereum Virtual Machine. I need to find out what smart accounts are, how they compare to EOAs, and what trends or changes are expected in the next 3-5 years regarding their usage in the EVM ecosystem. I'll start by researching each of these key terms individually, then I'll search for future predictions or expert opinions regarding the transition from EOAs to smart accounts. \n", - "\n", - "Action: Search the internet\n", - "Action Input: {\"search_query\": \"What are smart accounts in Ethereum\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: What are Smart Accounts on Ethereum? - Coinspeaker\n", - "Link: https://www.coinspeaker.com/guides/what-are-smart-accounts-on-ethereum/\n", - "Snippet: As said above, smart accounts are a type of account on the Ethereum blockchain that can be controlled by programmable smart contracts rather ...\n", - "---\n", - "Title: Ethereum 'smart account' adoption is low — the first rollup proposal ...\n", - "Link: https://blockworks.co/news/ethereum-smart-account-adoption-proposal\n", - "Snippet: The standard turns Ethereum accounts into “smart accounts,” which are much more flexible to suit the needs of wallet holders.\n", - "---\n", - "Title: How smart accounts and account abstraction can unlock Ethereum's ...\n", - "Link: https://cointelegraph.com/news/ethereum-smart-accounts-utility\n", - "Snippet: Smart account features include the ability to batch transactions, which Schor says can create more seamless decentralized application (DApp) ...\n", - "---\n", - "Title: What are Ethereum Accounts? - QuickNode\n", - "Link: https://www.quicknode.com/guides/ethereum-development/getting-started/what-are-ethereum-accounts\n", - "Snippet: Ethereum features two distinct types of accounts: externally owned accounts (EOA) and smart contract accounts. Both account types can send and ...\n", - "---\n", - "Title: What are Ethereum Accounts? - Alchemy Docs\n", - "Link: https://docs.alchemy.com/docs/ethereum-accounts\n", - "Snippet: EOAs are like Bitcoin key pairs, while contract accounts are for smart contracts ... There are two types of accounts in Ethereum: externally owned accounts and ...\n", - "---\n", - "Title: Safe — Ethereum Smart Accounts\n", - "Link: https://safe.global/\n", - "Snippet: Accelerating the transition to Smart Accounts · Safe accounts hold and protect billions of $$$ in assets · Available on 14+ networks · Trusted by the best.\n", - "---\n", - "Title: Safe and Base Team Up To Promote Ethereum Smart Accounts\n", - "Link: https://thedefiant.io/safe-and-base-team-up-to-promote-ethereum-smart-accounts\n", - "Snippet: “This initiative aims to empower more developers to tap into the benefits of smart accounts and make decentralized applications more accessible, ...\n", - "---\n", - "Title: The Future of Ethereum: Account Abstraction and Modular Smart ...\n", - "Link: https://medium.com/@denniswon/the-future-of-ethereum-account-abstraction-and-modular-smart-contract-accounts-8ffb618f0c15\n", - "Snippet: The account abstraction infrastructure is a set of protocols and frameworks that enable the use of smart contract accounts. It allows developers ...\n", - "---\n", - "Title: 'Smart accounts' can bring crypto to the masses - DL News\n", - "Link: https://www.dlnews.com/articles/defi/smart-accounts-could-bring-crypto-to-the-masses/\n", - "Snippet: Smart accounts give crypto users a familiar, web2-like experience. With smart accounts, users can regain access to their crypto even if they ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "From the search results, I can infer that smart accounts are a type of account on the Ethereum blockchain that can be controlled by programmable smart contracts. They are more flexible and might enable a more seamless decentralized application (DApp) experience. They also seem to give crypto users a familiar, web2-like experience. Now, I need to understand what Externally Owned Accounts (EOAs) are and how they differ from smart accounts.\n", - "\n", - "Action: Search the internet\n", - "Action Input: {\"search_query\": \"What are Externally Owned Accounts in Ethereum\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Ethereum accounts\n", - "Link: https://ethereum.org/en/developers/docs/accounts/\n", - "Snippet: Externally-owned account (EOA) – controlled by anyone with the private keys; Contract account – a smart contract deployed to the network, ...\n", - "---\n", - "Title: What are Ethereum Accounts? - GeeksforGeeks\n", - "Link: https://www.geeksforgeeks.org/what-are-ethereum-accounts/\n", - "Snippet: Externally Owned Accounts and Key Pairs ... An Ethereum account is a private-public key pair that may be linked to a blockchain address.\n", - "---\n", - "Title: What's Externally Owned Accounts (EOA)? - OKX\n", - "Link: https://www.okx.com/help/whats-externally-owned-accounts-eoa\n", - "Snippet: Externally owned account (EOA) is secured by private key, not smart contract. For example, when you create a new account in Ethereum wallet, you ...\n", - "---\n", - "Title: What Are Externally Owned Accounts (EAO)? - Metatime\n", - "Link: https://metatime.com/en/blog/what-are-externally-owned-accounts-eao\n", - "Snippet: EAO refers to the types of accounts on blockchain networks that are managed by a private key instead of smart contracts.\n", - "---\n", - "Title: What are the types of accounts in Ethereum? - Educative.io\n", - "Link: https://www.educative.io/answers/what-are-the-types-of-accounts-in-ethereum\n", - "Snippet: Externally owned account (EOA) ... EOA accounts are created by using the public-private keys. These accounts are controlled by a private key. A private key is ...\n", - "---\n", - "Title: What are Ethereum Accounts? - QuickNode\n", - "Link: https://www.quicknode.com/guides/ethereum-development/getting-started/what-are-ethereum-accounts\n", - "Snippet: Ethereum features two distinct types of accounts: externally owned accounts (EOA) and smart contract accounts. Both account types can send and ...\n", - "---\n", - "Title: What are Ethereum Accounts? - Alchemy Docs\n", - "Link: https://docs.alchemy.com/docs/ethereum-accounts\n", - "Snippet: Ethereum has two types of accounts: externally owned accounts (EOAs) and contract accounts. EOAs are like Bitcoin key pairs, while contract accounts are for ...\n", - "---\n", - "Title: EOA vs. Smart Contract Account: What Is the Difference?\n", - "Link: https://blog.ambire.com/eoas-vs-smart-contract-accounts/\n", - "Snippet: An Externally Owned Account, or EOA for short, works with the user having control of the account via a private key. This key is your unique ...\n", - "---\n", - "Title: Externally owned account - Learn Ethereum [Book] - O'Reilly\n", - "Link: https://www.oreilly.com/library/view/learn-ethereum/9781789954111/4dca3cec-ef6b-449e-a42a-881ed64f2252.xhtml\n", - "Snippet: In the world state, the account is linked to a public address, which is generated based on the owner's public key. We will talk about the address in detail in ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results indicate that an Externally Owned Account (EOA) is controlled by a private key and not by a smart contract. It seems like the main difference between EOAs and smart accounts is that EOAs are controlled directly by a private key, while smart accounts are controlled by programmable smart contracts. Now that I understand the differences between these two types of accounts, I need to research if and how smart accounts might replace EOAs in the EVM ecosystem within the next 3-5 years.\n", - "\n", - "Action: Search the internet\n", - "Action Input: {\"search_query\": \"Will smart accounts replace EOAs in the Ethereum ecosystem in the next 3-5 years\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: The Future of Ethereum: Account Abstraction and Modular Smart ...\n", - "Link: https://medium.com/@denniswon/the-future-of-ethereum-account-abstraction-and-modular-smart-contract-accounts-8ffb618f0c15\n", - "Snippet: The second transition identified by Vitalik Buterin is the move from EOA to contract accounts. Currently, all blockchain activity on Ethereum ...\n", - "---\n", - "Title: Where Will Ethereum Be in 5 Years? | The Motley Fool\n", - "Link: https://www.fool.com/investing/2024/01/28/where-will-ethereum-be-in-5-years/\n", - "Snippet: Currently, Ethereum executes every smart contract by referring to externally owned accounts (EOAs). This architecture helps developers pull ...\n", - "---\n", - "Title: Is there a new blockchain that will replace Ethereum? - Quora\n", - "Link: https://www.quora.com/Is-there-a-new-blockchain-that-will-replace-Ethereum\n", - "Snippet: Several projects, like EOS and TRON, are already competing with Ethereum as a platform for smart contracts and decentralized applications.\n", - "---\n", - "Title: The unspoken Ethereum revolution: Are EOAs becoming obsolete?\n", - "Link: https://cryptoslate.com/op-ed-the-unspoken-ethereum-revolution-are-eoas-becoming-obsolete/\n", - "Snippet: The silent discussion on removing Externally Owned Accounts (EOAs) and private keys from the Ethereum ecosystem.\n", - "---\n", - "Title: What Is the Ethereum Roadmap: Upgrades in 2024 and Beyond\n", - "Link: https://www.ledger.com/academy/what-is-the-ethereum-roadmap-next-upgrades\n", - "Snippet: The Ethereum roadmap ensures the network's constant progress, enabling protocol improvements and addressing new developments in crypto.\n", - "---\n", - "Title: We should be moving beyond EOAs, not enshrining them even ...\n", - "Link: https://ethereum-magicians.org/t/we-should-be-moving-beyond-eoas-not-enshrining-them-even-further-eip-3074-related/6538\n", - "Snippet: This can be done by making a hard fork that edits all existing and new EOAs in-place, replacing them with smart contract wallets that have the ...\n", - "---\n", - "Title: Smart Accounts on Ethereum set to Simplify Crypto for Newcomers\n", - "Link: https://www.bsc.news/post/smart-accounts-on-ethereum-set-to-simplify-crypto-for-newcomers\n", - "Snippet: Smart accounts will upgrade standard smartphone security modules to de facto hardware wallets, allowing for secure storage of unique ...\n", - "---\n", - "Title: Upcoming Upgrades That Will Shape the Ethereum Ecosystem\n", - "Link: https://www.coindesk.com/tech/2023/03/01/upcoming-upgrades-that-will-shape-the-ethereum-ecosystem/\n", - "Snippet: The upgrade, known as “Bedrock,” will be a major upgrade to the network. Some have said the upgrade will help Optimism compete with its main ...\n", - "---\n", - "Title: Ethereum Upgrade Could Make It Harder to Lose All Your Crypto\n", - "Link: https://finance.yahoo.com/news/ethereum-upgrade-could-harder-lose-121500207.html\n", - "Snippet: Accounts on Ethereum: EOAs and CAs. On ... The proposal would just add a new account abstraction layer atop Ethereum's ... accounts that use smart ...\n", - "---\n", - "Title: EOAs to Smart Contract Wallets: Ethereum's Technological Shift\n", - "Link: https://medium.com/@cresowallet/eoas-to-smart-contract-wallets-ethereums-technological-shift-2784679898b6\n", - "Snippet: Traditional Ethereum wallets have revolved around Externally Owned Accounts (EOAs) secured by private keys. However, the advent of smart ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results indicate that there is indeed a transition happening from EOAs to smart accounts in the Ethereum ecosystem. Some sources suggest that this process is part of the Ethereum's future roadmap. However, it's not clear if this transition will be completed within the next 3-5 years. There are discussions about replacing EOAs with smart contract wallets, and it seems that this change is seen as a way to simplify the crypto experience for newcomers and provide better security. However, the exact timeline for this change isn't clear from the search results. I'll try to refine my search to find more specific predictions or timelines.\n", - "\n", - "Action: Search the internet\n", - "Action Input: {\"search_query\": \"Timeline for transition from EOAs to smart accounts in Ethereum\"}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: The History and Future of Account Abstraction | by Ismael Darwish\n", - "Link: https://medium.com/nethermind-eth/the-history-and-future-of-account-abstraction-10cb097ebdc8\n", - "Snippet: The goal of “account abstraction” is to reduce the number of account types from 2 (EOA and contract) to 1 (just contract) and to move ...\n", - "---\n", - "Title: 'Account abstraction' supercharges Ethereum wallets: Dummies guide\n", - "Link: https://cointelegraph.com/magazine/account-abstraction-supercharges-ethereum-wallets-dummies-guide/\n", - "Snippet: Your guide to why 'account abstraction' and 'smart accounts' are the hottest thing on Ethereum right now and will help bring about mainstream ...\n", - "---\n", - "Title: The Road to Account Abstraction on Ethereum | Galaxy\n", - "Link: https://www.galaxy.com/insights/research/the-road-to-account-abstraction-on-ethereum/\n", - "Snippet: This report dives into what account abstraction is and the solutions being proposed to enable the technology on Ethereum.\n", - "---\n", - "Title: Ethereum Improvement Proposals to watch in 2024 - Blockworks\n", - "Link: https://blockworks.co/news/ethereum-improvement-proposals-2024\n", - "Snippet: Here are some of the improvements to watch in 2024 in the wake of Dencun.\n", - "---\n", - "Title: The history and the future of Account Abstraction - LinkedIn\n", - "Link: https://www.linkedin.com/pulse/history-future-account-abstraction-getclave\n", - "Snippet: EIP 7377 allows EOAs to transition to smart wallets using a new transaction type. We have accomplished the history of AA in our Account ...\n", - "---\n", - "Title: How Does Account Abstraction Change Ethereum ... - Halborn\n", - "Link: https://www.halborn.com/blog/post/how-does-account-abstraction-change-ethereum-account-management\n", - "Snippet: Halborn discusses how ERC-4337 introduces account abstraction on Ethereum, eliminating the need for private keys and EOAs.\n", - "---\n", - "Title: What to Expect From the Ethereum Roadmap in 2024 - HackerNoon\n", - "Link: https://hackernoon.com/ethereum-is-making-itself-future-proof-what-to-expect-from-the-ethereum-roadmap-in-2024\n", - "Snippet: While EIP-3074 authorizes smart contracts, EIP-5003 completely migrates the signing key of Ethereum EOAs accounts to smart contract accounts.\n", - "---\n", - "Title: Account abstraction: A beginner's guide to Ethereum's ERC-4337 ...\n", - "Link: https://cointelegraph.com/learn/account-abstraction-guide-to-ethereums-erc-4337-standard\n", - "Snippet: This article is focused Ethereum account abstraction, exploring how account abstraction is redefining user-experience with smart contract ...\n", - "---\n", - "Title: How do EOAs work and what is their interaction with smart contracts?\n", - "Link: https://ethereum.stackexchange.com/questions/93082/how-do-eoas-work-and-what-is-their-interaction-with-smart-contracts\n", - "Snippet: Now, only the EOAs owner can transfer Ether (=\"withdraw or wire money\") from that account - by using the private key in the process. In short, ...\n", - "---\n", - "Title: The Transformation of Ethereum Wallet: The Potential and ... - Medium\n", - "Link: https://medium.com/@sevenxventures/the-transformation-of-ethereum-wallet-the-potential-and-challenges-of-account-abstraction-and-c0dbdb384c7e\n", - "Snippet: As Ethereum's use cases become increasingly diverse, the drawbacks of using traditional externally owned accounts (EOA) on Ethereum wallets ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results still don't provide a clear timeline for the transition from EOAs to smart accounts. However, they indicate that this process is part of Ethereum's future plans, and the concept of 'account abstraction' seems to be key to this transition. Account abstraction aims to reduce the number of account types from 2 (EOA and contract) to just 1 (contract), which would essentially mean replacing EOAs with smart accounts. This transition is seen as a way to simplify and improve the user experience with Ethereum wallets. Given these findings, it seems plausible that smart accounts could fully replace EOAs in the EVM ecosystem within the next 3-5 years, but the exact timeline is still uncertain.\n", - "\n", - "Final Answer: \n", - "{\"report\": \"Research indicates a trend in the Ethereum ecosystem towards 'account abstraction', a process that aims to simplify the types of accounts from two (Externally Owned Accounts (EOAs) and contract) to just one (contract), essentially replacing EOAs with smart contract controlled accounts. These smart accounts are seen as more flexible and able to provide a better user experience. Various sources suggest that this transition is part of Ethereum's future plans. However, while the transition seems plausible within the next 3-5 years, no definitive timeline was found in the research. It's also important to note that such a transition likely depends on various factors, including technological advancements, user acceptance, and the overall evolution of the Ethereum ecosystem.\"}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\"report\": \"Research indicates a trend in the Ethereum ecosystem towards 'account abstraction', a process that aims to simplify the types of accounts from two (Externally Owned Accounts (EOAs) and contract) to just one (contract), essentially replacing EOAs with smart contract controlled accounts. These smart accounts are seen as more flexible and able to provide a better user experience. Various sources suggest that this transition is part of Ethereum's future plans. However, while the transition seems plausible within the next 3-5 years, no definitive timeline was found in the research. It's also important to note that such a transition likely depends on various factors, including technological advancements, user acceptance, and the overall evolution of the Ethereum ecosystem.\"}\n", - "\n", - "\u001b[00m\n", - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", - " Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", - " * Focus on the affirmation inside double quotes in 'SENTENCE'.\n", - " * The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", - " * Use the tools provided to aid your estimation.\n", - " * Evaluate recent information more heavily than older information.\n", - " * Your response should include:\n", - " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", - " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - " \n", - " Ensure p_yes + p_no equals 1.\n", - " \n", - " SENTENCE: Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mBased on the research provided, there seems to be a trend towards 'account abstraction' in the Ethereum ecosystem. This means that the transition from Externally Owned Accounts (EOAs) to smart accounts could potentially occur within the next 3-5 years. However, no concrete timeline is given in the research and the transition depends on factors such as technological advancements, user acceptance, and the overall evolution of the Ethereum ecosystem.\n", - "\n", - "Final Answer: \n", - "{\n", - " \"decision\": \"y\",\n", - " \"p_yes\": 0.6,\n", - " \"p_no\": 0.4,\n", - " \"confidence\": 0.7\n", - "}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", - " \"decision\": \"y\",\n", - " \"p_yes\": 0.6,\n", - " \"p_no\": 0.4,\n", - " \"confidence\": 0.7\n", - "}\n", - "\n", - "\u001b[00m\n" - ] - } - ], - "source": [ - "outcomes_with_probs = []\n", - "for outcome in outcomes.outcomes:\n", - " prediction = generate_prediction_for_one_outcome(outcome)\n", - " probability_output = ProbabilityOutput.parse_raw(prediction)\n", - " outcomes_with_probs.append((outcome, probability_output))" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "c5add121-ddfb-4ffc-8538-08b86eaf97df", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[('Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases',\n", - " ProbabilityOutput(decision='n', p_yes=0.2, p_no=0.8, confidence=0.85)),\n", - " ('Smart accounts will coexist with EOAs, with each type of account being used for different applications',\n", - " ProbabilityOutput(decision='n', p_yes=0.4, p_no=0.6, confidence=0.7)),\n", - " ('Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account',\n", - " ProbabilityOutput(decision='y', p_yes=0.7, p_no=0.3, confidence=0.6)),\n", - " ('Smart accounts will not gain further adoption and EOAs will remain the dominant type of account',\n", - " ProbabilityOutput(decision='y', p_yes=0.6, p_no=0.4, confidence=0.7))]" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "outcomes_with_probs" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "b96f5191-a309-453e-a0ee-c2b7206d2842", - "metadata": {}, - "outputs": [], - "source": [ - "# Finally, final LLM that makes a decision" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "d006d08f-82bd-4a87-a147-98b32fbfc9b8", - "metadata": {}, - "outputs": [], - "source": [ - "FINAL_DECISION_PROMPT = \"\"\"\n", - "Your task is to determine the probability of a given outcome being true.\n", - "Below you can find the , a list of tuples where the first element\n", - "is an outcome\n", - "\n", - "[Outcomes with probabilities]\n", - "\"\"\"\n", - "\n", - "FINAL_DECISION_PROMPT = \"\"\"\n", - "Your task is to determine the probability of a binary outcome being answered 'Yes' or 'No'.\n", - "OUTCOMES_WITH_PROBABILITIES is provided, which contains a set of {number_of_outcomes} outcomes.\n", - "The object OUTCOMES_WITH_PROBABILITIES contains a list of tuple, where each tuple contains, as its\n", - "first element, an outcome, and as its second entry, a probability dictionary, having properties such\n", - " as p_yes (probability that the outcome is true), p_no (probability that the outcome is false),\n", - "confidence (confidence level in the values of p_yes and p_no).\n", - "Observe that the outcomes contained inside OUTCOMES_WITH_PROBABILITIES are mutually exclusive, i.e.\n", - "only one of them can be true. \n", - "You should determine the probability of the outcome OUTCOME_TO_ASSESS being true, \n", - "considering the probabilities of the other related outcomes.\n", - "\n", - "OUTCOME_TO_ASSESS: {outcome_to_assess}\n", - "OUTCOMES_WITH_PROBABILITIES: {outcomes_with_probabilities}\n", - "\"\"\" \n", - "FINAL_DECISION_OUTPUT=\"\"\"\n", - " Your response should include:\n", - " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to \n", - " 1 (maximum confidence). Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - "\n", - " Ensure p_yes + p_no equals 1.\n", - " \n", - " Format your response in JSON format, including the keys \"decision\", \"p_yes\", \"p_no\" and \"confidence\".\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "e0fc72da-58fc-492a-81ba-eb3d68a42473", - "metadata": {}, - "outputs": [], - "source": [ - "def generate_final_decision(outcomes_with_probabilities):\n", - "\n", - " task_final_decision = Task(\n", - " description=(FINAL_DECISION_PROMPT),\n", - " tools=[],\n", - " agent=predictor,\n", - " expected_output=(FINAL_DECISION_OUTPUT),\n", - " output_json=ProbabilityOutput,\n", - " )\n", - " crew = Crew(\n", - " agents=[predictor],\n", - " tasks=[task_final_decision],\n", - " verbose=2,\n", - " process=Process.sequential \n", - " )\n", - " \n", - " sentence = 'Smart accounts will fully replace EOAs in the EVM ecosystem within the next 3-5 years'\n", - " result = crew.kickoff(inputs={'outcomes_with_probabilities': \n", - " [(i[0],i[1].dict()) for i in outcomes_with_probabilities],\n", - " 'number_of_outcomes': len(outcomes_with_probabilities),\n", - " 'outcome_to_assess': outcomes_with_probabilities[0][0]})\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "43298716-bf76-48bd-9f4c-806d02f533ba", - "metadata": {}, - "outputs": [], - "source": [ - "# Run LLM to get these values again\n", - "b = [('Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases',\n", - " ProbabilityOutput(decision='n', p_yes=0.2, p_no=0.8, confidence=0.85)),\n", - " ('Smart accounts will coexist with EOAs, with each type of account being used for different applications',\n", - " ProbabilityOutput(decision='n', p_yes=0.4, p_no=0.6, confidence=0.7)),\n", - " ('Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account',\n", - " ProbabilityOutput(decision='y', p_yes=0.7, p_no=0.3, confidence=0.6)),\n", - " ('Smart accounts will not gain further adoption and EOAs will remain the dominant type of account',\n", - " ProbabilityOutput(decision='y', p_yes=0.6, p_no=0.4, confidence=0.7))]" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "8b085ebb-f11a-4656-8481-534e04672872", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-03 19:15:41,257 - 136084017362176 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - "Your task is to determine the probability of a binary outcome being answered 'Yes' or 'No'.\n", - "OUTCOMES_WITH_PROBABILITIES is provided, which contains a set of 4 outcomes.\n", - "The object OUTCOMES_WITH_PROBABILITIES contains a list of tuple, where each tuple contains, as its\n", - "first element, an outcome, and as its second entry, a probability dictionary, having properties such\n", - " as p_yes (probability that the outcome is true), p_no (probability that the outcome is false),\n", - "confidence (confidence level in the values of p_yes and p_no).\n", - "Observe that the outcomes contained inside OUTCOMES_WITH_PROBABILITIES are mutually exclusive, i.e.\n", - "only one of them can be true. \n", - "You should determine the probability of the outcome OUTCOME_TO_ASSESS being true, \n", - "considering the probabilities of the other related outcomes.\n", - "\n", - "OUTCOME_TO_ASSESS: Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases\n", - "OUTCOMES_WITH_PROBABILITIES: [('Smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases', {'decision': 'n', 'p_yes': 0.2, 'p_no': 0.8, 'confidence': 0.85}), ('Smart accounts will coexist with EOAs, with each type of account being used for different applications', {'decision': 'n', 'p_yes': 0.4, 'p_no': 0.6, 'confidence': 0.7}), ('Smart accounts will only be used in specialized applications, while EOAs will continue to be the most common type of account', {'decision': 'y', 'p_yes': 0.7, 'p_no': 0.3, 'confidence': 0.6}), ('Smart accounts will not gain further adoption and EOAs will remain the dominant type of account', {'decision': 'y', 'p_yes': 0.6, 'p_no': 0.4, 'confidence': 0.7})]\n", - "\u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mFirst, I need to analyze the given probabilities for each outcome. I can see that the OUTCOME_TO_ASSESS has a low probability of becoming true (0.2), and the confidence level in this probability is fairly high (0.85). This means that, based on the available data, it's quite unlikely that smart accounts will become the dominant type of account in the EVM ecosystem, replacing EOAs in most use cases.\n", - "\n", - "However, I also need to consider the probabilities of the other outcomes. If the other outcomes have a higher likelihood of occurring, this could affect my confidence in the low probability of the OUTCOME_TO_ASSESS.\n", - "\n", - "The second outcome, that smart accounts will coexist with EOAs, has a higher probability of occurring (0.4), but the confidence level in this probability is lower (0.7). The third outcome, that smart accounts will only be used in specialized applications, has the highest probability of all (0.7), but again, the confidence level in this probability is not very high (0.6). Finally, the fourth outcome, that smart accounts will not gain further adoption and EOAs will remain the dominant type of account, has a probability of 0.6 with a confidence level of 0.7.\n", - "\n", - "From this analysis, I can conclude that the OUTCOME_TO_ASSESS is not likely to occur. However, there is still some uncertainty due to the confidence levels of the probabilities.\n", - "\n", - "Final Answer:\n", - "{\n", - " \"decision\": \"n\",\n", - " \"p_yes\": 0.2,\n", - " \"p_no\": 0.8,\n", - " \"confidence\": 0.85\n", - "}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", - " \"decision\": \"n\",\n", - " \"p_yes\": 0.2,\n", - " \"p_no\": 0.8,\n", - " \"confidence\": 0.85\n", - "}\n", - "\n", - "\u001b[00m\n" - ] - } - ], - "source": [ - "final_decision = generate_final_decision(b)" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "47f05c28-1295-4a8d-b195-953d01165af3", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ProbabilityOutput(decision='n', p_yes=0.4, p_no=0.6, confidence=0.7)" - ] - }, - "execution_count": 137, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ProbabilityOutput.parse_raw(result)" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "fe66ab7e-7b84-4c93-bc6d-7b0bf497f779", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ProbabilityOutput(decision='n', p_yes=0.4, p_no=0.6, confidence=0.7)" - ] - }, - "execution_count": 141, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ProbabilityOutput.model_validate_json(result)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "349ce099-06bd-403f-ad92-6a310fc0ae5b", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.14" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/crewai_multiple_agent.ipynb b/crewai_multiple_agent.ipynb deleted file mode 100644 index 6c4cef24..00000000 --- a/crewai_multiple_agent.ipynb +++ /dev/null @@ -1,1002 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "10a61ab9-30de-49f0-ac39-9ab6186f7d64", - "metadata": {}, - "outputs": [], - "source": [ - "import crewai\n", - "import json\n", - "import os\n", - "from crewai import Agent\n", - "from crewai_tools import SerperDevTool\n", - "from dotenv import load_dotenv" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "0c1b1f7b-6759-4235-afc2-facc894b39d6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "load_dotenv()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "c190d470-ab75-4843-8aa7-ad99ac5013ac", - "metadata": {}, - "outputs": [], - "source": [ - "from crewai import Crew, Process, Agent, Task\n", - "search_tool = SerperDevTool()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "79d8bd8f-7098-4287-b4ad-c5bd89c1fba5", - "metadata": {}, - "outputs": [], - "source": [ - "# Define your agents\n", - "researcher = Agent(\n", - " role='Researcher',\n", - " goal='Conduct foundational research',\n", - " backstory='An experienced researcher with a passion for uncovering insights'\n", - ")\n", - "\n", - "analyst = Agent(\n", - " role='Data Analyst',\n", - " goal='Analyze research findings',\n", - " backstory='A meticulous analyst with a knack for uncovering patterns'\n", - ")\n", - "\n", - "writer = Agent(\n", - " role='Writer',\n", - " goal='Draft the final report',\n", - " backstory='A skilled writer with a talent for crafting compelling narratives'\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "9c03eaaa-41e1-450c-a5e5-08e10dd58261", - "metadata": {}, - "outputs": [], - "source": [ - "# Define the tasks in sequence\n", - "# Research task\n", - "research_task = Task(\n", - " description=(\n", - " \"\"\"\n", - " Interpret the question, marked by [QUESTION], and generate mutually exclusive questions. This means that one of\n", - " the questions must be true and the other answer must necessarily be false.\n", - " \n", - " Example 1:\n", - "\n", - " Question - \"Will Instagram achieve 100,000 users by the end of 2025?\"\n", - " Output - '''\n", - " 1 - Will Instagram achieve 100,000 or more users by the end of 2025?\n", - " 2 - Will Instagram achieve less than 100,000 users by the end of 2025?\n", - "\n", - " \n", - " '''\n", - " \n", - " [QUESTION]\n", - " {{question}}\n", - " \"\"\"\n", - " ),\n", - " expected_output='''\n", - " A list containing 2 bullet points. Each bullet point should contain one question. \n", - " The two questions must be mutually exclusive.\n", - " ''',\n", - " #tools=[search_tool],\n", - " tools = [],\n", - " agent=researcher,\n", - ")\n", - "#analysis_task = Task(description='Analyze the data...', agent=analyst)\n", - "#writing_task = Task(description='Compose the report...', agent=writer)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "8e4e7f91-bcf9-423c-9f76-8891739b260c", - "metadata": {}, - "outputs": [], - "source": [ - "# Form the crew with a sequential process\n", - "report_crew = Crew(\n", - " agents=[researcher],\n", - " #tasks=[research_task, analysis_task, writing_task],\n", - " tasks=[research_task],\n", - " process=Process.sequential\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "05dd3975-b123-4369-a43b-e04613b7d65e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 - Will the new iPhone model be released in or before September?\n", - "2 - Will the new iPhone model be released after September?\n" - ] - } - ], - "source": [ - "# Starting the task execution process with enhanced feedback\n", - "result = report_crew.kickoff(inputs={'question': 'Will Gnosis Pay reach 100k users by 2024?'})\n", - "print(result)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "8b5518bb-edcf-40ba-ae98-2ecdbed757d5", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 - Will the price of crypto increase in the next 2 months?\n", - "2 - Will the price of crypto not increase in the next 2 months?\n" - ] - } - ], - "source": [ - "question = 'Will the price of crypto go up again in the next 2 months?'\n", - "result = report_crew.kickoff(inputs={'question': question})\n", - "print(result)" - ] - }, - { - "cell_type": "markdown", - "id": "7b939c1f-a658-458e-b88c-87a27e76595b", - "metadata": {}, - "source": [ - "# Other approach" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "c4152d0b-7a0e-424b-9c24-a8b97d97441e", - "metadata": {}, - "outputs": [], - "source": [ - "# Define the tasks in sequence\n", - "# Research task\n", - "research_prompt = \"\"\"\n", - " You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes.\n", - " You should break down the SCENARIO into a list of possible outcomes.\n", - " \n", - " Example 1:\n", - " - SCENARIO: Will Gnosis Pay reach 100,000 users by 2025?\n", - " - Answer: '''\n", - " - Gnosis Pay reaches less than 25,000 users by 2025\n", - " - Gnosis Pay reaches more than 25,000 users but less than 50,000 users by 2025\n", - " - Gnosis Pay reaches more than 50,000 users but less than 75,000 users by 2025\n", - " - Gnosis Pay reaches 100,000 users or more by 2025\n", - " '''\n", - "\n", - " Example 2:\n", - " - SCENARIO: Will the price of Bitcoin go up again in the next 2 months?\n", - " - Answer: '''\n", - " - The price of crypto will go up in the next 2 months\n", - " - The price of crypto will not go up in the next 2 months\n", - " '''\n", - " \n", - " [SCENARIO]\n", - " {scenario}\n", - " \"\"\"\n", - "research_prompt = \"\"\"\n", - " You are asked about a SCENARIO, which can have multiple, mutually-exclusive outcomes.\n", - " You should break down the SCENARIO into a list of possible outcomes.\n", - " \n", - " [SCENARIO]\n", - " {scenario}\n", - " \"\"\"\n", - "expected_output = '''\n", - " A list containing multiple bullet points. Each bullet point should start with '-'.\n", - " Each bullet point should contain a possible outcome resulting from the\n", - " provided SCENARIO. The produced outcomes should be mutually exclusive, i.e. only one of them should be true whereas\n", - " the remaining ones should be false.\n", - " '''\n", - "#analysis_task = Task(description='Analyze the data...', agent=analyst)\n", - "#writing_task = Task(description='Compose the report...', agent=writer)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "3420ddae-85be-4ba5-81b8-be8543ea26ce", - "metadata": {}, - "outputs": [], - "source": [ - "def print_outcomes(question:str) -> None:\n", - " research_task = Task(\n", - " description=(research_prompt),\n", - " expected_output=expected_output,\n", - " #tools=[search_tool],\n", - " tools = [],\n", - " agent=researcher,\n", - ")\n", - "\n", - " report_crew = Crew(\n", - " agents=[researcher],\n", - " tasks=[research_task],\n", - " process=Process.sequential\n", - " )\n", - " result = report_crew.kickoff(inputs={'scenario': question})\n", - " print(result)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "b2675c76-fba3-45eb-b29c-dd407fd98cac", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-03 15:14:24,080 - 128867878282496 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "- Outcome 1: Smart accounts fully replace EOAs in the EVM ecosystem. This could occur if the benefits of smart accounts, such as increased security and functionality, outweigh the costs and challenges of implementing them. This would require significant technological advancements and widespread adoption among developers and users.\n", - "\n", - "- Outcome 2: Smart accounts and EOAs coexist in the EVM ecosystem. This could happen if both types of accounts offer unique advantages that make them suitable for different use cases. For instance, EOAs might remain the preferred choice for simple transactions, while smart accounts might be used for more complex operations that require programmable logic.\n", - "\n", - "- Outcome 3: Smart accounts fail to gain traction and EOAs remain the dominant type of accounts in the EVM ecosystem. This could be the case if the drawbacks of smart accounts, such as potential security risks and higher complexity, deter their adoption. It could also happen if the Ethereum community decides to prioritize other developments over the integration of smart accounts.\n", - "\n", - "- Outcome 4: A new type of account, different from both smart accounts and EOAs, emerges and becomes the new standard in the EVM ecosystem. This could occur if there are significant innovations in blockchain technology that render both smart accounts and EOAs obsolete.\n" - ] - } - ], - "source": [ - "question = 'Will smart accounts replace EOAs in the EVM ecosystem in the next 3-5 years?'\n", - "print_outcomes(question)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "500a0dfe-233b-4a90-9183-e39e799a023d", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-03 15:14:38,621 - 128867878282496 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "- The temperature will be above 20C on May 24, 2024, in Berlin.\n", - "- The temperature will be exactly 20C on May 24, 2024, in Berlin.\n", - "- The temperature will be below 20C on May 24, 2024, in Berlin.\n" - ] - } - ], - "source": [ - "question = 'Will the temperature be above 20C on May 24, 2024 in Berlin?'\n", - "print_outcomes(question)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "2e1cb34b-3913-4af3-a07b-623eef09c270", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-03 15:15:48,216 - 128867878282496 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "- The exchange rate will reach parity (1€ = 1$) before 2027: This scenario could occur if the European economy strengthens significantly or if the US economy weakens. Factors that could influence this scenario include unexpected economic growth in the Eurozone, a significant increase in European interest rates, or a major economic crisis in the United States.\n", - "\n", - "- The exchange rate will not reach parity (1€ ≠ 1$) before 2027: This could happen if the US economy continues to strengthen, or if the European economy weakens. Factors that could contribute to this scenario include continued economic growth in the United States, an increase in US interest rates, or a major economic crisis in Europe.\n", - "\n", - "- The exchange rate will fluctuate, but never exactly reach parity (1€ ≠ 1$) before 2027: This scenario could happen due to the inherent volatility of currency markets. Rates might come close to parity but not meet it exactly. This would be influenced by ongoing changes in both the European and US economies, as well as geopolitical events and market speculation.\n", - "\n", - "These are all possible scenarios, but it's important to note that currency market predictions are notoriously difficult and uncertain, and the actual outcome might be influenced by unpredictable events and factors.\n" - ] - }, - { - "data": { - "text/plain": [ - "'\\n- The exchange rate between Euro and Dollar will reach parity (1€ equals 1$) before 2027\\n- The exchange rate between Euro and Dollar will not reach parity before 2027, but will come close (1€ equals between 1.01$ - 1.10$)\\n- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Euro remaining stronger (1€ equals more than 1.10$)\\n- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Dollar remaining stronger (1€ equals less than 0.90$)\\n'" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "question = 'Will there be a period in the currency market where 1€ equals 1$ before 2027?'\n", - "print_outcomes(question)\n", - "'''\n", - "- The exchange rate between Euro and Dollar will reach parity (1€ equals 1$) before 2027\n", - "- The exchange rate between Euro and Dollar will not reach parity before 2027, but will come close (1€ equals between 1.01$ - 1.10$)\n", - "- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Euro remaining stronger (1€ equals more than 1.10$)\n", - "- The exchange rate between Euro and Dollar will not come close to parity before 2027, with the Dollar remaining stronger (1€ equals less than 0.90$)\n", - "'''" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "1f57657b-04ca-41da-9160-1f5e7df52b89", - "metadata": {}, - "outputs": [], - "source": [ - "from pydantic import BaseModel" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "6318ecc5-c0f1-4835-84a5-bc08fb0ae4ae", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'```\\n{\\n\"decision\": \"n\",\\n\"p_yes\": 0.2,\\n\"p_no\": 0.8,\\n\"confidence\": 0.85\\n}\\n```'" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "0e013f79-c011-4cff-9a77-00f947df503a", - "metadata": {}, - "outputs": [], - "source": [ - "class ProbabilityOutput(BaseModel):\n", - " decision: str\n", - " p_yes: float\n", - " p_no: float\n", - " confidence: float" - ] - }, - { - "cell_type": "markdown", - "id": "d17b1602-f3ee-4f52-8e34-a7c034cebe4b", - "metadata": {}, - "source": [ - "## Return probability of each affirmation" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "10307714-e445-4c09-a2a3-18884b46941a", - "metadata": {}, - "outputs": [], - "source": [ - "researcher = Agent(\n", - " role=\"Research Analyst\",\n", - " goal=\"Research and report on some future event, giving high quality and nuanced analysis\",\n", - " backstory=\"You are a senior research analyst who is adept at researching and reporting on future events.\",\n", - " verbose=True,\n", - " allow_delegation=False,\n", - " tools=[search_tool],\n", - " )\n", - "predictor = Agent(\n", - " role=\"Professional Gambler\",\n", - " goal=\"Predict, based on some research you are presented with, whether or not a given event will occur\",\n", - " backstory=\"You are a professional gambler who is adept at predicting and betting on the outcomes of future events.\",\n", - " verbose=True,\n", - " allow_delegation=False,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "ce8c6c61-23e5-43bb-833a-4d2fb40a48dd", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-04-03 15:28:45,913 - 128867878282496 - __init__.py-__init__:521 - WARNING: Overriding of current TracerProvider is not allowed\n" - ] - } - ], - "source": [ - "\n", - "task1 = Task(\n", - " description=(\"\"\"\n", - " Research and report on the following sentence:\n", - " {sentence}\n", - " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", - " \"\"\"\n", - " ),\n", - " tools=[search_tool],\n", - " agent=researcher,\n", - " expected_output=(\"\"\"\n", - " Return your answer in raw JSON format, with no special formatting such as newlines, as follows:\n", - " {{\"report\": }}\n", - " where is a free text field that contains a well though out justification \n", - " for the predicition based on the summary of your findings.\n", - " \"\"\"),\n", - " )\n", - "task2 = Task(\n", - " description=(\"\"\"\n", - " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", - "Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", - "* Focus on the affirmation inside double quotes in 'SENTENCE'.\n", - "* The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", - "* Use the tools provided to aid your estimation.\n", - "* Evaluate recent information more heavily than older information.\n", - "* Your response should include:\n", - " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", - " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - " \n", - " Ensure p_yes + p_no equals 1.\n", - "\n", - " SENTENCE: {sentence}\n", - " \"\"\"\n", - " ),\n", - " expected_output=\"\"\"\n", - " Your response should include:\n", - "- \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - "- \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - "- \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - "- \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to \n", - "1 (maximum confidence). Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - "\n", - "Format your response in JSON format, including the keys \"decision\", \"p_yes\", \"p_no\" and \"confidence\".\n", - " \"\"\",\n", - " agent=predictor,\n", - " output_json=ProbabilityOutput\n", - " )\n", - "crew = Crew(\n", - " agents=[researcher, predictor],\n", - " tasks=[task1, task2],\n", - " verbose=2,\n", - " )\n" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "7af9ade5-e35e-4239-9610-9f0a14ec8cc4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Research Analyst\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Research and report on the following sentence:\n", - " - The exchange rate will reach parity (1€ = 1$) before 2027: \n", - "This scenario could occur if the European economy strengthens significantly or if \n", - "the US economy weakens. Factors that could influence this scenario include \n", - "unexpected economic growth in the Eurozone, a significant increase in European \n", - "interest rates, or a major economic crisis in the United States.\n", - " Search and scrape the web for information that will help you give a high quality, nuanced answer to the question.\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mFirst, I'll need to research current trends and forecasts for the European and US economies, as well as factors that could influence the exchange rate such as interest rates and economic crises. I'll start by searching for recent predictions and analyses of the European economy. \n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\n", - "\"search_query\": \"European economy forecast 2027\"\n", - "}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Spring 2023 Economic Forecast: an improved outlook amid ...\n", - "Link: https://economy-finance.ec.europa.eu/economic-forecast-and-surveys/economic-forecasts/spring-2023-economic-forecast-improved-outlook-amid-persistent-challenges_en\n", - "Snippet: EU GDP growth is revised up to 1.0% in 2023 (from 0.8%) and 1.7% in 2024 (from 1.6%), virtually closing the gap with potential output by the end ...\n", - "---\n", - "Title: European Union - gross domestic product 2018-2028 - Statista\n", - "Link: https://www.statista.com/statistics/527869/european-union-gross-domestic-product-forecast/\n", - "Snippet: European Union: Gross domestic product (GDP) from 2018 to 2028 (in billion U.S. dollars) ; 2027, 20,612.93 ; 2026, 19,989.96 ; 2025, 19,282.98.\n", - "---\n", - "Title: [PDF] European Economic Forecast. Autumn 2023 - Economy and Finance\n", - "Link: https://economy-finance.ec.europa.eu/system/files/2023-12/ip258_en.pdf\n", - "Snippet: ... GDP target in 2027. Still, the scale of fiscal support is likely to decline within the forecast horizon and the fiscal deficit is expected ...\n", - "---\n", - "Title: Gross domestic product (GDP) growth in EU and Euro area 2028\n", - "Link: https://www.statista.com/statistics/267898/gross-domestic-product-gdp-growth-in-eu-and-euro-area/\n", - "Snippet: Growth of the real gross domestic product (GDP) in the European Union and the Euro area from 2018 to 2028 (compared to the previous year) ; 2027* ...\n", - "---\n", - "Title: [PDF] November 2023 Regional Economic Outlook: Europe\n", - "Link: https://www.imf.org/-/media/Files/Publications/REO/EUR/2023/November/English/text.ashx\n", - "Snippet: Growth in the region overall is expected to slow to 1.3 percent in 2023 from 2.7 percent last year, and improve to 1.5 percent in 2024.\n", - "---\n", - "Title: European Union - IMF Data Mapper ®\n", - "Link: https://www.imf.org/external/datamapper/profile/EU\n", - "Snippet: European Union. European Union. Datasets. World Economic Outlook (October 2023) 15 indicator s , 1980 - 2028. Collapse all. Real GDP growth. Annual percent ...\n", - "---\n", - "Title: Global Economic Outlook - The Conference Board\n", - "Link: https://www.conference-board.org/topics/global-economic-outlook\n", - "Snippet: Our Europe forecast continues to point to very modest improvement in 2024 after barely avoiding recession in 2023. The Euro Area did experience a recession in ...\n", - "---\n", - "Title: Economy of the European Union - Wikipedia\n", - "Link: https://en.wikipedia.org/wiki/Economy_of_the_European_Union\n", - "Snippet: The European Union's GDP is estimated to be $19.35 trillion (nominal) in 2024 or $26.64 trillion (PPP), representing around one-sixth of the global economy.\n", - "---\n", - "Title: EU Commission cuts 2024 euro zone growth forecast, sees smaller ...\n", - "Link: https://www.reuters.com/markets/europe/eu-commission-cuts-2024-euro-zone-growth-forecast-sees-smaller-inflation-2024-02-15/\n", - "Snippet: The euro zone economy will grow slower than expected this year after price growth eroded purchasing power and high ECB interest rates curbed ...\n", - "---\n", - "Title: GDP and spending - Real GDP long-term forecast - OECD Data\n", - "Link: https://data.oecd.org/gdp/real-gdp-long-term-forecast.htm\n", - "Snippet: Indicators. Gross domestic product (GDP) · Quarterly GDP · Real GDP forecast ... 2027: 32 746 700 Million US dollars China ... European Union; Euro Area; G7; G20\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results provide information on the forecast of the European economy up to 2027. The GDP growth is expected to be modest, with some challenges expected. The European Union's GDP is projected to increase annually, which could strengthen the Euro. Next, I will research the forecast for the US economy. \n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\n", - "\"search_query\": \"US economy forecast 2027\"\n", - "}\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: [PDF] The Economic Outlook for 2017 to 2027 in 16 Slides\n", - "Link: https://www.cbo.gov/sites/default/files/115th-congress-2017-2018/presentation/52375-2017economicoutlook.pdf\n", - "Snippet: The growth of aggregate demand for goods and services in the economy will increase the demand for labor, eliminating the shortfall between actual and potential ...\n", - "---\n", - "Title: GDP and spending - Real GDP long-term forecast - OECD Data\n", - "Link: https://data.oecd.org/gdp/real-gdp-long-term-forecast.htm\n", - "Snippet: Real GDP long-term forecastTotal, Million US dollars, 2020 – 2060 2020 – 2060Source: Long-term baseline projections, No. 114 (Edition 2023). Show: Chart; Map ...\n", - "---\n", - "Title: AI may start to boost US GDP in 2027 - Goldman Sachs\n", - "Link: https://www.goldmansachs.com/intelligence/pages/ai-may-start-to-boost-us-gdp-in-2027.html\n", - "Snippet: In the baseline scenario, the Goldman Sachs Research economists estimate AI could increase US productivity growth by 1.5 percentage points ...\n", - "---\n", - "Title: Budget and Economic Outlook 2017 to 2027\n", - "Link: https://bookstore.gpo.gov/products/budget-and-economic-outlook-2017-2027\n", - "Snippet: The Budget Deficit for 2017 Is Projected to Be Similar to Last Year's. Growing Deficits Through 2027 Are Projected to Drive Up Federal Debt. The Projected ...\n", - "---\n", - "Title: GDP forecast U.S. 2034 - Statista\n", - "Link: https://www.statista.com/statistics/216985/forecast-of-us-gross-domestic-product/\n", - "Snippet: According to the CBO, the United States GDP will increase steadily over the next decade from 28.18 trillion U.S. dollars in 2023 to 41.65 ...\n", - "---\n", - "Title: U.S. Economic Forecast Update: A Sturdy Job Market Keeps Growth ...\n", - "Link: https://www.spglobal.com/ratings/en/research/articles/240221-u-s-economic-forecast-update-a-sturdy-job-market-keeps-growth-going-13011286\n", - "Snippet: We now expect U.S. real GDP growth of 2.4% in 2024 as the labor market remains sturdy. This is up from our previous forecast of 1.5% ...\n", - "---\n", - "Title: Economic Forecast for the US Economy - The Conference Board\n", - "Link: https://www.conference-board.org/research/us-forecast\n", - "Snippet: The US economy entered 2024 on strong footing. Various indicators of business activity, labor markets, sentiment, and inflation have generally been moving ...\n", - "---\n", - "Title: Gross domestic product (GDP) growth rate in the United States 2028\n", - "Link: https://www.statista.com/statistics/263614/gross-domestic-product-gdp-growth-rate-in-the-united-states/\n", - "Snippet: Real gross domestic product (GDP) growth rate in the United States from 2018 to 2028 (compared to the previous year) ; 2027*, 2.12% ; 2026*, 2.06%.\n", - "---\n", - "Title: The Top 10 Economies in 2027 - Nasdaq\n", - "Link: https://www.nasdaq.com/articles/the-top-10-economies-in-2027\n", - "Snippet: The size of the U.S., which is poised to be $25.03 trillion in 2022, will be $30.28 trillion by 2027. 2. China. 2021: 2. 2022: 2. 2027: 2. China ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results indicate that the US economy is also expected to grow moderately, with GDP forecasts indicating steady increases. The impact of AI on productivity growth could also play a role. To understand how these economy forecasts could influence the Euro-Dollar exchange rate, I need to research recent predictions and analyses of the Euro-Dollar exchange rate, as well as the factors that could influence it, such as interest rates and economic crises. \n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\n", - "\"search_query\": \"Euro-Dollar exchange rate forecast 2027\"\n", - "} \n", - "\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: EURO TO DOLLAR FORECAST 2024, 2025, 2026 - 2028\n", - "Link: https://longforecast.com/euro-to-dollar-eur-usd-forecast-2017-2018-2019-2020\n", - "Snippet: EUR to USD forecast for September 2027. In the beginning rate at 0.929 Dollars. High exchange rate 0.966 and low 0.929. The average for the month 0.944. EUR to ...\n", - "---\n", - "Title: Euro to Dollar (EURUSD) Forecast for 2024-2025 and Beyond till 2030\n", - "Link: https://www.litefinance.org/blog/analysts-opinions/eurusd-forecast-and-price-prediction/\n", - "Snippet: The rate can reach 1.296 before 2027 if an optimistic scenario plays out. It's worth noting that the euro price may fall below $1 while correcting. The currency ...\n", - "---\n", - "Title: Euro to Dollar (EUR/USD) Forecast & Price Predictions 2024, 2025 ...\n", - "Link: https://capex.com/en/overview/eurusd-price-prediction\n", - "Snippet: Commerzbank analysts forecast the Euro to Dollar exchange rate (EUR/USD) to strengthen to 1.12 by June 2024 before fading to 1.08 by March 2025. The bank ...\n", - "---\n", - "Title: Euro to dollar history Mar 29, 2024 - Statista\n", - "Link: https://www.statista.com/statistics/412794/euro-to-u-s-dollar-annual-average-exchange-rate/\n", - "Snippet: The euro-to-dollar exchange rate fluctuated significantly in 2022, reaching its lowest recorded value since 2008 during that time.\n", - "---\n", - "Title: EUR to USD Forecast: Euro vs US Dollar 2024, 2025-2030\n", - "Link: https://coincodex.com/forex/eur-usd/forecast/\n", - "Snippet: The EUR to USD forecast for the next 5 year indicates that the EUR/USD exchange rate will be $ 0.860958 5 years from now. This would be a -20.05% decrease ...\n", - "---\n", - "Title: USD to EUR Forecast: US Dollar vs Euro 2024, 2025-2030\n", - "Link: https://coincodex.com/forex/usd-eur/forecast/\n", - "Snippet: The forecast for EUR to USD in 2030 is that the exchange rate will be € 1.188264 6 years from now. This would be 27.96% higher than the current exchange rate.\n", - "---\n", - "Title: USD/EUR Forecast, United States Dollar / Euro currency rate ...\n", - "Link: https://gov.capital/forex/usd-eur/\n", - "Snippet: United States Dollar / Euro (USDEUR) rate forecast is 1.5982958910033. The (USDEUR) currency rate prediction is 1.5982958910033 USD for 2025 April 03, ...\n", - "---\n", - "Title: Long-Term Foreign Exchange Rate Predictions 2023-2028: Euro ...\n", - "Link: https://www.exchangerates.org.uk/news/37832/2023-03-29-foreign-exchange-rate-forecast-2023-2024-2025-2026-2027-2028-euro-pound-sterling-dollar.html\n", - "Snippet: According to HSBC, the potential fair-value estimates for the Euro to dollar (EUR/USD) exchange rate range from 1.1230 - 1.2850. For the dollar ...\n", - "---\n", - "Title: USD to EUR Forecast: up to 0.957! Dollar to Euro Analysis ...\n", - "Link: https://walletinvestor.com/forex-forecast/usd-eur-prediction\n", - "Snippet: USD/EUR rate equal to 0.931 at 2024-04-02 (today's range: 0.931 - 0.932). Based on our forecasts, a long-term increase is expected, the Forex rate prognosis for ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results provide a range of forecasts for the Euro-Dollar exchange rate, with some predicting the rate to reach near parity and others predicting it to remain below 1. However, the rate could potentially reach 1.296 before 2027 in an optimistic scenario. It's also worth noting that the exchange rate is influenced by a number of unpredictable factors, including economic growth, interest rates, and economic crises in both the Eurozone and the US. To provide a comprehensive report, I'll also search for information on interest rates and potential economic crises in both regions. \n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\n", - "\"search_query\": \"European and US interest rates forecast 2027\"\n", - "} \n", - "\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Long-term interest rates forecast - OECD Data\n", - "Link: https://data.oecd.org/interest/long-term-interest-rates-forecast.htm\n", - "Snippet: Long-term interest rates forecast refers to projected values of government bonds maturing in ten years. It is measured as a percentage. Forecast data are ...\n", - "---\n", - "Title: Projected ECB Interest Rates in 5 Years - Capital.com\n", - "Link: https://capital.com/projected-ecb-rate-rise-in-5-years\n", - "Snippet: The survey respondents saw inflation at 2.1% in 2025, and the longer-term forecast for 2027 was revised down by 0.1 points to average at 2.1%. ECB's survey of ...\n", - "---\n", - "Title: Charted: IMF Forecasts for International Interest Rates\n", - "Link: https://www.visualcapitalist.com/international-interest-rates-forecast/\n", - "Snippet: Interest Rates Forecasts for 4 Major Economies (2024‒2028) ; 2027Q2, 2.6%, 2.7%, 0.1%, 4.4% ; 2027Q3, 2.6%, 2.6%, 0.1%, 4.4%.\n", - "---\n", - "Title: Markets bet strength of US economy will limit scale of Fed rate cuts\n", - "Link: https://www.ft.com/content/d5ea31c5-36f6-449e-aa2b-2eea391fc5d9\n", - "Snippet: The market-implied probability of the Fed's benchmark interest rate is about 3.6 per cent from 2027, making traders' predictions for the so- ...\n", - "---\n", - "Title: Projected US Interest Rates in 5 Years: When Will the Fed Cuts Start?\n", - "Link: https://www.ccn.com/analysis/projected-us-interest-rates-in-5-years/\n", - "Snippet: It is now anticipated to reach 2.6% for 2024, surpassing the 2.4% projection from December. Forecasts for 2025 and 2026 remained unchanged at 2.2% and 2.0%, ...\n", - "---\n", - "Title: Projected interest rates in 5 years: Is the central bank done hiking?\n", - "Link: https://capital.com/projected-interest-rates-in-5-years\n", - "Snippet: The rate is then predicted to fall back to 3.75% in 2024 and 3.25% in 2025, according to our econometric models.\n", - "---\n", - "Title: The ECB Survey of Professional Forecasters - First quarter of 2023\n", - "Link: https://www.ecb.europa.eu/stats/ecb_surveys/survey_of_professional_forecasters/html/ecb.spf2023q1~af876c4cfb.en.html\n", - "Snippet: Longer-term inflation expectations (for 2027) were revised down by 0.1 percentage points to stand at 2.1%. When excluding (trimming) the two ...\n", - "---\n", - "Title: World Economic Outlook - International Monetary Fund\n", - "Link: https://www.imf.org/en/Publications/WEO\n", - "Snippet: Description: Global growth is projected to stay at 3.1 percent in 2024 and rise to 3.2 percent in 2025. Elevated central bank rates to fight ...\n", - "---\n", - "Title: US economic outlook: peak interest rates are applying the brakes to ...\n", - "Link: https://www.swissre.com/institute/research/sigma-research/Economic-Outlook/us-economic-outlook-december-2023.html\n", - "Snippet: We expect US real GDP growth to slow materially to 1.1% in 2024 from 2.4% this year. Further slack is needed in the labour market next year for ...\n", - "---\n", - "Title: Prices - Inflation forecast - OECD Data\n", - "Link: https://data.oecd.org/price/inflation-forecast.htm\n", - "Snippet: Inflation forecastTotal, Annual growth rate ... European Union (27 countries, 2020), 0.830, 0.828 ... Total. Data table for: Exchange rates, Total, National ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results provide information on the forecasted interest rates for both the European and US economies. The interest rates are expected to fluctuate, which could potentially impact the Euro-Dollar exchange rate. The ECB's interest rate for 2027 is anticipated to average at 2.1%, while the Fed's benchmark interest rate is predicted to be about 3.6% from 2027. To further understand the potential impact on the exchange rate, I'll now research potential economic crises that could occur in the Eurozone and the US. \n", - "\n", - "Action: \n", - "Search the internet\n", - "\n", - "Action Input: \n", - "{\n", - "\"search_query\": \"Potential economic crisis Eurozone and US 2027\"\n", - "} \n", - "\u001b[0m\u001b[93m \n", - "\n", - "\n", - "Search results: Title: Europe's problems are far bigger than a shallow recession - Reuters\n", - "Link: https://www.reuters.com/markets/europe/europes-problems-are-far-bigger-than-shallow-recession-2023-11-14/\n", - "Snippet: The European Commission now puts the bloc's potential growth at less than 1.5%, shrinking to 1.2% by 2027, a decline from 2%-2.5% at the turn ...\n", - "---\n", - "Title: Risk of 'lost decade' as EU countries face economic cliff edge\n", - "Link: https://www.politico.eu/article/eu-countries-economy-spending-rules-budget-pandemic-funds/\n", - "Snippet: Southern European economies were mired in long recessions after the eurozone crisis ... Countries could avoid the economic cliff edge in 2027 ...\n", - "---\n", - "Title: United States Economic Forecast - Deloitte\n", - "Link: https://www2.deloitte.com/us/en/insights/economy/us-economic-forecast/united-states-outlook-analysis.html\n", - "Snippet: In this scenario, Eurozone GDP is flat in 2024 and declines by 0.3% in 2025. This, in turn, impacts the US trade balance as fewer American exports flow to one ...\n", - "---\n", - "Title: Who Is the Ultimate European Taxpayer? Understanding the ... - CSIS\n", - "Link: https://www.csis.org/analysis/who-ultimate-european-taxpayer-understanding-problem-european-sovereign-debt\n", - "Snippet: Total debt issued by the European Union will peak at less than €1 trillion at some point before 2027; in comparison, outstanding U.S. debt is ...\n", - "---\n", - "Title: World Economic Outlook - International Monetary Fund\n", - "Link: https://www.imf.org/en/Publications/WEO\n", - "Snippet: Advanced economies are expected to see an especially pronounced growth slowdown, from 2.7 percent in 2022 to 1.3 percent in 2023. In a plausible ...\n", - "---\n", - "Title: The Eurozone Crisis and Implications for the United States | Brookings\n", - "Link: https://www.brookings.edu/articles/the-eurozone-crisis-and-implications-for-the-united-states/\n", - "Snippet: If Europe were to be shaken by a series of nations defaulting on their government debt, I am convinced that the continent would plunge into a severe recession.\n", - "---\n", - "Title: Timeline - EU long-term budget 2021-2027 - Consilium\n", - "Link: https://www.consilium.europa.eu/en/policies/eu-long-term-budget/timeline-long-term-eu-budget-2021-2027/\n", - "Snippet: EU leaders discussed via video conference the 2021-2027 EU budget and a recovery plan to respond to the COVID-19 crisis. European Council President Michel ...\n", - "---\n", - "Title: Global Economic Outlook - The Conference Board\n", - "Link: https://www.conference-board.org/topics/global-economic-outlook\n", - "Snippet: Our Europe forecast continues to point to very modest improvement in 2024 after barely avoiding recession in 2023. The Euro Area did experience a recession in ...\n", - "---\n", - "Title: European debt crisis - Wikipedia\n", - "Link: https://en.wikipedia.org/wiki/European_debt_crisis\n", - "Snippet: The European debt crisis erupted in the wake of the Great Recession around late 2009, and was characterized by an environment of overly high government ...\n", - "---\n", - "Title: Mid-term revision of the EU long-term budget 2021-2027 - Consilium\n", - "Link: https://www.consilium.europa.eu/en/policies/eu-long-term-budget/mid-term-revision-of-the-eu-long-term-budget-2021-2027/\n", - "Snippet: The mid-term revision builds on a Commission proposal from June 2023. EU leaders greenlit the additional funding at a special European Council meeting on 1 ...\n", - "---\n", - "\n", - "\u001b[00m\n", - "\u001b[32;1m\u001b[1;3mThought: \n", - "The search results indicate potential economic crises in both the Eurozone and the US. The Eurozone could face a potential economic cliff edge in 2027, and the European Commission forecasts a decline in the bloc's potential growth. Meanwhile, the US could be impacted by a decrease in exports due to a recession in the Eurozone. However, these events are predictive and depend on various factors, making it challenging to accurately forecast their impact on the Euro-Dollar exchange rate. Now, I have a comprehensive view of the influencing factors and can formulate a well-thought-out report. \n", - "\n", - "Final Answer: \n", - "{\n", - "\"report\": \"The Euro-Dollar exchange rate reaching parity (1€ = 1$) before 2027 depends on several influencing factors. The European and US economies are both projected to grow moderately, which could strengthen their respective currencies. However, the potential impact of interest rates and economic crises could disrupt this trend. The European Central Bank's interest rate for 2027 is anticipated to average at 2.1%, while the Federal Reserve's benchmark interest rate is predicted to be about 3.6% from 2027. These interest rates could influence the exchange rate, with higher rates potentially strengthening the respective currencies. Furthermore, potential economic crises, such as an economic cliff edge in the Eurozone and a decrease in US exports due to a Eurozone recession, could impact the exchange rate. However, due to the unpredictable nature of these factors, it is challenging to accurately forecast whether the Euro-Dollar exchange rate will reach parity before 2027. It is important to monitor these factors and adjust predictions as new information becomes available.\"\n", - "}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[1m\u001b[92m [DEBUG]: == [Research Analyst] Task output: {\n", - "\"report\": \"The Euro-Dollar exchange rate reaching parity (1€ = 1$) before 2027 depends on several influencing factors. The European and US economies are both projected to grow moderately, which could strengthen their respective currencies. However, the potential impact of interest rates and economic crises could disrupt this trend. The European Central Bank's interest rate for 2027 is anticipated to average at 2.1%, while the Federal Reserve's benchmark interest rate is predicted to be about 3.6% from 2027. These interest rates could influence the exchange rate, with higher rates potentially strengthening the respective currencies. Furthermore, potential economic crises, such as an economic cliff edge in the Eurozone and a decrease in US exports due to a Eurozone recession, could impact the exchange rate. However, due to the unpredictable nature of these factors, it is challenging to accurately forecast whether the Euro-Dollar exchange rate will reach parity before 2027. It is important to monitor these factors and adjust predictions as new information becomes available.\"\n", - "}\n", - "\n", - "\u001b[00m\n", - "\u001b[1m\u001b[93m [DEBUG]: == Working Agent: Professional Gambler\u001b[00m\n", - "\u001b[1m\u001b[93m [INFO]: == Starting Task: \n", - " Your task is to determine the probability of a prediction market affirmation being answered 'Yes' or 'No'.\n", - "Use the sentence provided in 'SENTENCE' and follow these guidelines:\n", - "* Focus on the affirmation inside double quotes in 'SENTENCE'.\n", - "* The question must have only 'Yes' or 'No' outcomes. If not, respond with \"Error\".\n", - "* Use the tools provided to aid your estimation.\n", - "* Evaluate recent information more heavily than older information.\n", - "* Your response should include:\n", - " - \"decision\": The decision you made. Either `y` (for `Yes`) or `n` (for `No`).\n", - " - \"p_yes\": Probability that the sentence outcome will be `Yes`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"p_no\": Probability that the sentence outcome will be `No`. Ranging from 0 (lowest probability) to 1 (maximum probability).\n", - " - \"confidence\": Indicating the confidence in the estimated probabilities you provided ranging from 0 (lowest confidence) to 1 (maximum confidence). \n", - " Confidence can be calculated based on the quality and quantity of data used for the estimation.\n", - " \n", - " Ensure p_yes + p_no equals 1.\n", - "\n", - " SENTENCE: - The exchange rate will reach parity (1€ = 1$) before 2027: \n", - "This scenario could occur if the European economy strengthens significantly or if \n", - "the US economy weakens. Factors that could influence this scenario include \n", - "unexpected economic growth in the Eurozone, a significant increase in European \n", - "interest rates, or a major economic crisis in the United States.\n", - " \u001b[00m\n", - "\n", - "\n", - "\u001b[1m> Entering new CrewAgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mGiven the context and the report, it is clear that there are several influencing factors that could potentially affect whether the Euro-Dollar exchange rate will reach parity before 2027. These factors include the projected growth of the European and US economies, the potential impact of interest rates, and the possibility of an economic crisis. While the European Central Bank's interest rate for 2027 is anticipated to average at 2.1% and the Federal Reserve's benchmark interest rate is predicted to be about 3.6% from 2027, it is difficult to accurately predict the impact these rates will have on the exchange rate. Furthermore, potential economic crises could significantly disrupt the exchange rate. However, due to the unpredictable nature of these factors, it is challenging to accurately forecast the outcome.\n", - "\n", - "Final Answer: \n", - "{\n", - "\"decision\": \"n\",\n", - "\"p_yes\": 0.4,\n", - "\"p_no\": 0.6,\n", - "\"confidence\": 0.7\n", - "}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[1m\u001b[92m [DEBUG]: == [Professional Gambler] Task output: {\n", - " \"decision\": \"n\",\n", - " \"p_yes\": 0.4,\n", - " \"p_no\": 0.6,\n", - " \"confidence\": 0.7\n", - "}\n", - "\n", - "\u001b[00m\n" - ] - } - ], - "source": [ - "#sentence = 'The temperature will be above 20C on May 24, 2024 in Berlin.'\n", - "sentence = \"\"\"- The exchange rate will reach parity (1€ = 1$) before 2027: \n", - "This scenario could occur if the European economy strengthens significantly or if \n", - "the US economy weakens. Factors that could influence this scenario include \n", - "unexpected economic growth in the Eurozone, a significant increase in European \n", - "interest rates, or a major economic crisis in the United States.\"\"\"\n", - "result = crew.kickoff(inputs={'sentence': sentence})" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "15e8eb0b-e4cc-4760-ac05-31d05c699b6f", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "loaded result {'decision': 'n', 'p_yes': 0.4, 'p_no': 0.6, 'confidence': 0.7}\n", - "result {'decision': 'n', 'p_yes': 0.4, 'p_no': 0.6, 'confidence': 0.7}\n", - "False\n" - ] - } - ], - "source": [ - "#assert \"report\" in report\n", - "loaded_result = json.loads(result)\n", - "print (f'loaded result {loaded_result}')\n", - "#assert \"prediction\" in result\n", - "print (f'result {loaded_result}')\n", - "print(True if loaded_result[\"decision\"] == \"y\" else False)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "cd0a9365-cb7b-4761-8e74-3804043fcaf1", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'report': \"The research suggests that it is unlikely for the exchange rate to reach parity (1€ = 1$) before 2027. The projected economic conditions in the Eurozone and the US do not align with the scenario where this could occur. The Eurozone's economic growth is expected to be modest, not indicating a significant strengthening. The US economy, while predicted to slow down, is still expected to grow, not pointing to a major crisis. Unexpected economic growth in the Eurozone and a significant increase in European interest rates do not seem to be on the horizon either. Therefore, based on the current and projected economic conditions in both regions, reaching parity in the given time frame seems improbable.\"}" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "report" - ] - }, - { - "cell_type": "markdown", - "id": "531c4d44-486d-402b-b75d-dcd415b624ac", - "metadata": {}, - "source": [ - "# Next steps\n", - "'''\n", - "- Improve sentence generation - tell LLM to generate correct outcome first, then\n", - "alternate outcomes afterwards.\n", - "- Run script for each sentence\n", - "- For each sentence, get highest probability (p_yes or p_no), multiply by confidence\n", - "- Get sentence which makes the question be true and get likelihood from that\n", - "'''\n" - ] - }, - { - "cell_type": "markdown", - "id": "12d898db-780a-41ad-8a29-f0c4553daa3f", - "metadata": {}, - "source": [ - "Example\n", - "\n", - "Q - Will the temperature be above 20C on May 24, 2024 in Berlin?\n", - "\n", - "Outcomes:\n", - "1 - The temperature will be above 20C on May 24, 2024 in Berlin.\n", - "2 - The temperature will be exactly 20C on May 24, 2024 in Berlin.\n", - "3 - The temperature will be below 20C but above 10C on May 24, 2024 in Berlin.\n", - "4 - The temperature will be below 10C but above 0C on May 24, 2024 in Berlin.\n", - "5 - The temperature will be below 0C on May 24, 2024 in Berlin.\n", - "\n", - "We process the LLMs for each outcome, and we get the following\n", - "\n", - "1 - {confidence: 0.5, p_yes: 0.6, p_no: 0.4} -> p_yes selected (p_yes > p_no) -> 0.6 * 0.5 = 0.3 \n", - "2 - {confidence: 0.9, p_yes: 0.9, p_no: 0.1} -> \n", - "3 - {confidence: 0.4, p_yes: 0.8, p_no: 0.2}\n", - "4 - {confidence: 0.3, p_yes: 0.7, p_no: 0.3}\n", - "5 - {confidence: 0.4, p_yes: 0.7, p_no: 0.3}\n", - "\n", - "Note that outcome 1 is always a rephrase of the question. So we are only interUested in that outcome.\n", - "The idea is, however, that we can \"normalize\" that outcome by the other probabilities and confidences.\n", - "\n", - "I have 2 ideas I would like to suggest:\n", - "-> Get highest probability (max(p_yes,p_no)), normalize by the other probabilities, return that as probability that\n", - "the question is true\n", - "-> Use confidence as a \"weight\" for the probability before normalizing like above, i.e. \n", - "\n", - "$\\sum(w_i * p_i) = 1$\n", - "\n", - "and we return the normalized $(w_i * p_i)$ as the probability." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f45ce677-95a3-4018-9ae1-7bad121098aa", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.14" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From bcbb2acce7ab4e58392e77d270890e4ef7997eb0 Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Thu, 11 Apr 2024 12:03:39 -0300 Subject: [PATCH 15/17] Updated lock file with new crewai version --- poetry.lock | 674 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 626 insertions(+), 48 deletions(-) diff --git a/poetry.lock b/poetry.lock index 911be1d2..5adaa78c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -520,6 +520,137 @@ files = [ {file = "blinker-1.7.0.tar.gz", hash = "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"}, ] +[[package]] +name = "brotli" +version = "1.1.0" +description = "Python bindings for the Brotli compression library" +optional = false +python-versions = "*" +files = [ + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, + {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, + {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, + {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, + {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, + {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, + {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, + {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, + {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, + {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, +] + +[[package]] +name = "brotlicffi" +version = "1.1.0.0" +description = "Python CFFI bindings to the Brotli library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"}, + {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, +] + +[package.dependencies] +cffi = ">=1.0.0" + [[package]] name = "build" version = "1.2.1" @@ -1020,18 +1151,19 @@ files = [ [[package]] name = "crewai" -version = "0.28.7" +version = "0.28.8" description = "Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks." optional = false python-versions = "<=3.13,>=3.10" files = [ - {file = "crewai-0.28.7-py3-none-any.whl", hash = "sha256:b17e7d1b140ef56dbcc513a5760ae08ff1a4c1d81ba873f69c349ff8615198aa"}, - {file = "crewai-0.28.7.tar.gz", hash = "sha256:f30fce7a341983cc18cd6513e6b41cdc88f1b8875cb75a5dff4191ae7aff2cc4"}, + {file = "crewai-0.28.8-py3-none-any.whl", hash = "sha256:ce8af4915ed0c43b9f593cd0aef17d9a85557a809d493fddca7609e5a6279c2e"}, + {file = "crewai-0.28.8.tar.gz", hash = "sha256:02e95d5db7a614794b10527d12996cf211a691d18cb84deff29a43a877bfd405"}, ] [package.dependencies] appdirs = ">=1.4.4,<2.0.0" click = ">=8.1.7,<9.0.0" +crewai-tools = {version = ">=0.1.7,<0.2.0", optional = true, markers = "extra == \"tools\""} embedchain = ">=0.1.98,<0.2.0" instructor = ">=0.5.2,<0.6.0" langchain = ">=0.1.10,<0.2.0" @@ -1046,6 +1178,31 @@ regex = ">=2023.12.25,<2024.0.0" [package.extras] tools = ["crewai-tools (>=0.1.7,<0.2.0)"] +[[package]] +name = "crewai-tools" +version = "0.1.7" +description = "Set of tools for the crewAI framework" +optional = false +python-versions = "<=3.13,>=3.10" +files = [ + {file = "crewai_tools-0.1.7-py3-none-any.whl", hash = "sha256:135a51b659fa0b58f1cf7bb6b1cdb47cccd557d98d889ed03b477b62c80ce38a"}, + {file = "crewai_tools-0.1.7.tar.gz", hash = "sha256:8393900f6b0d37274218aaeb9ac6bcaaa6d719426a788ea45d21f993a49f283b"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.12.3,<5.0.0" +chromadb = ">=0.4.22,<0.5.0" +embedchain = {version = ">=0.1.85,<0.2.0", extras = ["github", "youtube"]} +lancedb = ">=0.5.4,<0.6.0" +langchain = ">=0.1.4,<0.2.0" +openai = ">=1.12.0,<2.0.0" +pydantic = ">=2.6.1,<3.0.0" +pyright = ">=1.1.350,<2.0.0" +pytest = ">=8.0.0,<9.0.0" +pytube = ">=15.0.0,<16.0.0" +requests = ">=2.31.0,<3.0.0" +selenium = ">=4.18.1,<5.0.0" + [[package]] name = "cron-validator" version = "1.0.8" @@ -1274,6 +1431,17 @@ files = [ marshmallow = ">=3.18.0,<4.0.0" typing-inspect = ">=0.4.0,<1" +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + [[package]] name = "deprecated" version = "1.2.14" @@ -1503,12 +1671,14 @@ files = [ alembic = ">=1.13.1,<2.0.0" beautifulsoup4 = ">=4.12.2,<5.0.0" chromadb = ">=0.4.17,<0.5.0" +gitpython = {version = ">=3.1.38,<4.0.0", optional = true, markers = "extra == \"github\""} google-cloud-aiplatform = ">=1.26.1,<2.0.0" gptcache = ">=0.1.43,<0.2.0" langchain = ">=0.1.4,<0.2.0" langchain-openai = ">=0.0.5,<0.0.6" openai = ">=1.1.1" posthog = ">=3.0.2,<4.0.0" +PyGithub = {version = ">=1.59.1,<2.0.0", optional = true, markers = "extra == \"github\""} pypdf = ">=3.11.0,<4.0.0" pysbd = ">=0.3.4,<0.4.0" python-dotenv = ">=1.0.0,<2.0.0" @@ -1516,6 +1686,8 @@ rich = ">=13.7.0,<14.0.0" schema = ">=0.7.5,<0.8.0" sqlalchemy = ">=2.0.27,<3.0.0" tiktoken = ">=0.5.2,<0.6.0" +youtube-transcript-api = {version = ">=0.6.1,<0.7.0", optional = true, markers = "extra == \"dataloaders\" or extra == \"youtube\""} +yt_dlp = {version = ">=2023.11.14,<2024.0.0", optional = true, markers = "extra == \"youtube\""} [package.extras] aws-bedrock = ["boto3 (>=1.34.20,<2.0.0)"] @@ -2784,13 +2956,13 @@ files = [ [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] @@ -3064,6 +3236,39 @@ websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" [package.extras] adal = ["adal (>=1.0.2)"] +[[package]] +name = "lancedb" +version = "0.5.7" +description = "lancedb" +optional = false +python-versions = ">=3.8" +files = [ + {file = "lancedb-0.5.7-py3-none-any.whl", hash = "sha256:6169966f715ef530be545950e1aaf9f3f160967e4ba7456cd67c9f30f678095d"}, + {file = "lancedb-0.5.7.tar.gz", hash = "sha256:878914b493f91d09a77b14f1528104741f273234cbdd6671be705f447701fd51"}, +] + +[package.dependencies] +attrs = ">=21.3.0" +cachetools = "*" +click = ">=8.1.7" +deprecation = "*" +overrides = ">=0.7" +pydantic = ">=1.10" +pylance = "0.9.18" +pyyaml = ">=6.0" +ratelimiter = ">=1.0,<2.0" +requests = ">=2.31.0" +retry = ">=0.9.2" +semver = ">=3.0" +tqdm = ">=4.27.0" + +[package.extras] +clip = ["open-clip", "pillow", "torch"] +dev = ["pre-commit", "ruff"] +docs = ["mkdocs", "mkdocs-jupyter", "mkdocs-material", "mkdocs-ultralytics-plugin (==0.0.44)", "mkdocstrings[python]"] +embeddings = ["InstructorEmbedding", "awscli (>=1.29.57)", "boto3 (>=1.28.57)", "botocore (>=1.31.57)", "cohere", "google.generativeai", "huggingface-hub", "open-clip-torch", "openai (>=1.6.1)", "pillow", "sentence-transformers", "torch"] +tests = ["aiohttp", "duckdb", "pandas (>=1.4)", "polars (>=0.19)", "pytest", "pytest-asyncio", "pytest-mock", "pytz"] + [[package]] name = "langchain" version = "0.1.15" @@ -3207,13 +3412,13 @@ extended-testing = ["lxml (>=5.1.0,<6.0.0)"] [[package]] name = "langsmith" -version = "0.1.43" +version = "0.1.45" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.43-py3-none-any.whl", hash = "sha256:c0a3658f10cbefaa2f53d15db519592982b59d99f24e018dc73aca6092b4158d"}, - {file = "langsmith-0.1.43.tar.gz", hash = "sha256:983c5a35bf191bb23d93e453c9fc6ea7cda998b1ca96f94680a1446092caf347"}, + {file = "langsmith-0.1.45-py3-none-any.whl", hash = "sha256:5a5b7fafe767fa28826c925f175875c09bf5368bfdb141286381a94bf737e6ef"}, + {file = "langsmith-0.1.45.tar.gz", hash = "sha256:713206107df636db1edf30867d64b92495afb1f09d2fee0857a77b7a8ee083d5"}, ] [package.dependencies] @@ -3842,6 +4047,17 @@ files = [ {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] +[[package]] +name = "mutagen" +version = "1.47.0" +description = "read and write audio tags for many formats" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719"}, + {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, +] + [[package]] name = "mypy" version = "1.9.0" @@ -3954,6 +4170,20 @@ plot = ["matplotlib"] tgrep = ["pyparsing"] twitter = ["twython"] +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + [[package]] name = "numexpr" version = "2.10.0" @@ -4100,13 +4330,13 @@ sympy = "*" [[package]] name = "openai" -version = "1.16.2" +version = "1.17.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.16.2-py3-none-any.whl", hash = "sha256:46a435380921e42dae218d04d6dd0e89a30d7f3b9d8a778d5887f78003cf9354"}, - {file = "openai-1.16.2.tar.gz", hash = "sha256:c93d5efe5b73b6cb72c4cd31823852d2e7c84a138c0af3cbe4a8eb32b1164ab2"}, + {file = "openai-1.17.0-py3-none-any.whl", hash = "sha256:72464cdb0602a57af87acb4888b1a48a1c02182cc9f09d2f2f3200b185223d5f"}, + {file = "openai-1.17.0.tar.gz", hash = "sha256:72e6758cec080a3e5a9daf843178c975fed656fe0831919f4dd89bb62431724f"}, ] [package.dependencies] @@ -4363,6 +4593,20 @@ files = [ {file = "orjson-3.10.0.tar.gz", hash = "sha256:ba4d8cac5f2e2cff36bea6b6481cdb92b38c202bcec603d6f5ff91960595a1ed"}, ] +[[package]] +name = "outcome" +version = "1.3.0.post0" +description = "Capture the outcome of Python function calls." +optional = false +python-versions = ">=3.7" +files = [ + {file = "outcome-1.3.0.post0-py2.py3-none-any.whl", hash = "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"}, + {file = "outcome-1.3.0.post0.tar.gz", hash = "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8"}, +] + +[package.dependencies] +attrs = ">=19.2.0" + [[package]] name = "overrides" version = "7.7.0" @@ -4387,44 +4631,41 @@ files = [ [[package]] name = "pandas" -version = "2.2.1" +version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8df8612be9cd1c7797c93e1c5df861b2ddda0b48b08f2c3eaa0702cf88fb5f88"}, - {file = "pandas-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0f573ab277252ed9aaf38240f3b54cfc90fff8e5cab70411ee1d03f5d51f3944"}, - {file = "pandas-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f02a3a6c83df4026e55b63c1f06476c9aa3ed6af3d89b4f04ea656ccdaaaa359"}, - {file = "pandas-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c38ce92cb22a4bea4e3929429aa1067a454dcc9c335799af93ba9be21b6beb51"}, - {file = "pandas-2.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c2ce852e1cf2509a69e98358e8458775f89599566ac3775e70419b98615f4b06"}, - {file = "pandas-2.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53680dc9b2519cbf609c62db3ed7c0b499077c7fefda564e330286e619ff0dd9"}, - {file = "pandas-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:94e714a1cca63e4f5939cdce5f29ba8d415d85166be3441165edd427dc9f6bc0"}, - {file = "pandas-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f821213d48f4ab353d20ebc24e4faf94ba40d76680642fb7ce2ea31a3ad94f9b"}, - {file = "pandas-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c70e00c2d894cb230e5c15e4b1e1e6b2b478e09cf27cc593a11ef955b9ecc81a"}, - {file = "pandas-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e97fbb5387c69209f134893abc788a6486dbf2f9e511070ca05eed4b930b1b02"}, - {file = "pandas-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101d0eb9c5361aa0146f500773395a03839a5e6ecde4d4b6ced88b7e5a1a6403"}, - {file = "pandas-2.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7d2ed41c319c9fb4fd454fe25372028dfa417aacb9790f68171b2e3f06eae8cd"}, - {file = "pandas-2.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:af5d3c00557d657c8773ef9ee702c61dd13b9d7426794c9dfeb1dc4a0bf0ebc7"}, - {file = "pandas-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:06cf591dbaefb6da9de8472535b185cba556d0ce2e6ed28e21d919704fef1a9e"}, - {file = "pandas-2.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:88ecb5c01bb9ca927ebc4098136038519aa5d66b44671861ffab754cae75102c"}, - {file = "pandas-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:04f6ec3baec203c13e3f8b139fb0f9f86cd8c0b94603ae3ae8ce9a422e9f5bee"}, - {file = "pandas-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a935a90a76c44fe170d01e90a3594beef9e9a6220021acfb26053d01426f7dc2"}, - {file = "pandas-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c391f594aae2fd9f679d419e9a4d5ba4bce5bb13f6a989195656e7dc4b95c8f0"}, - {file = "pandas-2.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9d1265545f579edf3f8f0cb6f89f234f5e44ba725a34d86535b1a1d38decbccc"}, - {file = "pandas-2.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:11940e9e3056576ac3244baef2fedade891977bcc1cb7e5cc8f8cc7d603edc89"}, - {file = "pandas-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4acf681325ee1c7f950d058b05a820441075b0dd9a2adf5c4835b9bc056bf4fb"}, - {file = "pandas-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9bd8a40f47080825af4317d0340c656744f2bfdb6819f818e6ba3cd24c0e1397"}, - {file = "pandas-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df0c37ebd19e11d089ceba66eba59a168242fc6b7155cba4ffffa6eccdfb8f16"}, - {file = "pandas-2.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:739cc70eaf17d57608639e74d63387b0d8594ce02f69e7a0b046f117974b3019"}, - {file = "pandas-2.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d3558d263073ed95e46f4650becff0c5e1ffe0fc3a015de3c79283dfbdb3df"}, - {file = "pandas-2.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4aa1d8707812a658debf03824016bf5ea0d516afdea29b7dc14cf687bc4d4ec6"}, - {file = "pandas-2.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:76f27a809cda87e07f192f001d11adc2b930e93a2b0c4a236fde5429527423be"}, - {file = "pandas-2.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:1ba21b1d5c0e43416218db63037dbe1a01fc101dc6e6024bcad08123e48004ab"}, - {file = "pandas-2.2.1.tar.gz", hash = "sha256:0ab90f87093c13f3e8fa45b48ba9f39181046e8f3317d3aadb2fffbb1b978572"}, -] - -[package.dependencies] -numpy = {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""} + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, +] + +[package.dependencies] +numpy = {version = ">=1.22.4", markers = "python_version < \"3.11\""} python-dateutil = ">=2.8.2" pytz = ">=2020.1" tzdata = ">=2022.7" @@ -4853,6 +5094,17 @@ all = ["apache-bookkeeper-client (>=4.16.1)", "fastavro (>=1.9.2)", "grpcio (>=1 avro = ["fastavro (>=1.9.2)"] functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + [[package]] name = "pyarrow" version = "15.0.2" @@ -5015,6 +5267,47 @@ files = [ {file = "pycryptodome-3.20.0.tar.gz", hash = "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"}, ] +[[package]] +name = "pycryptodomex" +version = "3.20.0" +description = "Cryptographic library for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodomex-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win32.whl", hash = "sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427"}, + {file = "pycryptodomex-3.20.0.tar.gz", hash = "sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"}, +] + [[package]] name = "pydantic" version = "2.6.4" @@ -5174,6 +5467,23 @@ files = [ {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, ] +[[package]] +name = "pygithub" +version = "1.59.1" +description = "Use the full Github API v3" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyGithub-1.59.1-py3-none-any.whl", hash = "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9"}, + {file = "PyGithub-1.59.1.tar.gz", hash = "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217"}, +] + +[package.dependencies] +deprecated = "*" +pyjwt = {version = ">=2.4.0", extras = ["crypto"]} +pynacl = ">=1.4.0" +requests = ">=2.14.0" + [[package]] name = "pygments" version = "2.17.2" @@ -5189,6 +5499,76 @@ files = [ plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyjwt" +version = "2.8.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pylance" +version = "0.9.18" +description = "python wrapper for Lance columnar format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pylance-0.9.18-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:fe2445d922c594d90e89111385106f6b152caab27996217db7bb4b8947eb0bea"}, + {file = "pylance-0.9.18-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a2c424c50f5186edbbcc5a26f34063ed09d9a7390e28033395728ce02b5658f0"}, + {file = "pylance-0.9.18-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10af06edfde3e8451bf2251381d3980a0a164eab9d4c3d4dc8b6318969e958a6"}, + {file = "pylance-0.9.18-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:d8bb9045d7163cc966b9fe34a917044192be37a90915475b77461e5b7d89e442"}, + {file = "pylance-0.9.18-cp38-abi3-win_amd64.whl", hash = "sha256:5ea80b7bf70d992f3fe63bce2d2f064f742124c04eaedeb76baca408ded85a2c"}, +] + +[package.dependencies] +numpy = ">=1.22" +pyarrow = ">=12" + +[package.extras] +benchmarks = ["pytest-benchmark"] +dev = ["ruff (==0.2.2)"] +tests = ["datasets", "duckdb", "ml_dtypes", "pandas", "pillow", "polars[pandas,pyarrow]", "pytest", "tensorflow", "tqdm"] +torch = ["torch"] + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + [[package]] name = "pypdf" version = "3.17.4" @@ -5242,6 +5622,24 @@ files = [ {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, ] +[[package]] +name = "pyright" +version = "1.1.358" +description = "Command line wrapper for pyright" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyright-1.1.358-py3-none-any.whl", hash = "sha256:0995b6a95eb11bd26f093cd5dee3d5e7258441b1b94d4a171b5dc5b79a1d4f4e"}, + {file = "pyright-1.1.358.tar.gz", hash = "sha256:185524a8d52f6f14bbd3b290b92ad905f25b964dddc9e7148aad760bd35c9f60"}, +] + +[package.dependencies] +nodeenv = ">=1.6.0" + +[package.extras] +all = ["twine (>=3.4.1)"] +dev = ["twine (>=3.4.1)"] + [[package]] name = "pysbd" version = "0.3.4" @@ -5252,6 +5650,18 @@ files = [ {file = "pysbd-0.3.4-py3-none-any.whl", hash = "sha256:cd838939b7b0b185fcf86b0baf6636667dfb6e474743beeff878e9f42e022953"}, ] +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] + [[package]] name = "pytest" version = "8.1.1" @@ -5320,6 +5730,17 @@ files = [ [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "pytube" +version = "15.0.0" +description = "Python 3 library for downloading YouTube Videos." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytube-15.0.0-py3-none-any.whl", hash = "sha256:07b9904749e213485780d7eb606e5e5b8e4341aa4dccf699160876da00e12d78"}, + {file = "pytube-15.0.0.tar.gz", hash = "sha256:076052efe76f390dfa24b1194ff821d4e86c17d41cb5562f3a276a8bcbfc9d1d"}, +] + [[package]] name = "pytz" version = "2024.1" @@ -5537,6 +5958,20 @@ files = [ [package.extras] full = ["numpy"] +[[package]] +name = "ratelimiter" +version = "1.2.0.post0" +description = "Simple python rate limiting object" +optional = false +python-versions = "*" +files = [ + {file = "ratelimiter-1.2.0.post0-py3-none-any.whl", hash = "sha256:a52be07bc0bb0b3674b4b304550f10c769bbb00fead3072e035904474259809f"}, + {file = "ratelimiter-1.2.0.post0.tar.gz", hash = "sha256:5c395dcabdbbde2e5178ef3f89b568a3066454a6ddc223b76473dac22f89b4f7"}, +] + +[package.extras] +test = ["pytest (>=3.0)", "pytest-asyncio"] + [[package]] name = "referencing" version = "0.34.0" @@ -5727,6 +6162,21 @@ files = [ [package.dependencies] requests = ">=2.0.1,<3.0.0" +[[package]] +name = "retry" +version = "0.9.2" +description = "Easy to use retry decorator." +optional = false +python-versions = "*" +files = [ + {file = "retry-0.9.2-py2.py3-none-any.whl", hash = "sha256:ccddf89761fa2c726ab29391837d4327f819ea14d244c232a1d24c67a2f98606"}, + {file = "retry-0.9.2.tar.gz", hash = "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4"}, +] + +[package.dependencies] +decorator = ">=3.4.2" +py = ">=1.4.26,<2.0.0" + [[package]] name = "rich" version = "13.7.1" @@ -6000,6 +6450,35 @@ files = [ cryptography = ">=2.0" jeepney = ">=0.6" +[[package]] +name = "selenium" +version = "4.19.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "selenium-4.19.0-py3-none-any.whl", hash = "sha256:5b4f49240d61e687a73f7968ae2517d403882aae3550eae2a229c745e619f1d9"}, + {file = "selenium-4.19.0.tar.gz", hash = "sha256:d9dfd6d0b021d71d0a48b865fe7746490ba82b81e9c87b212360006629eb1853"}, +] + +[package.dependencies] +certifi = ">=2021.10.8" +trio = ">=0.17,<1.0" +trio-websocket = ">=0.9,<1.0" +typing_extensions = ">=4.9.0" +urllib3 = {version = ">=1.26,<3", extras = ["socks"]} + +[[package]] +name = "semver" +version = "3.0.2" +description = "Python helper for Semantic Versioning (https://semver.org)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"}, + {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"}, +] + [[package]] name = "serpapi" version = "0.1.5" @@ -6135,6 +6614,17 @@ files = [ {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + [[package]] name = "soupsieve" version = "2.5" @@ -6653,6 +7143,42 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "trio" +version = "0.25.0" +description = "A friendly Python library for async concurrency and I/O" +optional = false +python-versions = ">=3.8" +files = [ + {file = "trio-0.25.0-py3-none-any.whl", hash = "sha256:e6458efe29cc543e557a91e614e2b51710eba2961669329ce9c862d50c6e8e81"}, + {file = "trio-0.25.0.tar.gz", hash = "sha256:9b41f5993ad2c0e5f62d0acca320ec657fdb6b2a2c22b8c7aed6caf154475c4e"}, +] + +[package.dependencies] +attrs = ">=23.2.0" +cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""} +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = "*" +outcome = "*" +sniffio = ">=1.3.0" +sortedcontainers = "*" + +[[package]] +name = "trio-websocket" +version = "0.11.1" +description = "WebSocket library for Trio" +optional = false +python-versions = ">=3.7" +files = [ + {file = "trio-websocket-0.11.1.tar.gz", hash = "sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f"}, + {file = "trio_websocket-0.11.1-py3-none-any.whl", hash = "sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +trio = ">=0.11" +wsproto = ">=0.14" + [[package]] name = "trove-classifiers" version = "2024.4.10" @@ -6758,6 +7284,9 @@ files = [ {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] +[package.dependencies] +pysocks = {version = ">=1.5.6,<1.5.7 || >1.5.7,<2.0", optional = true, markers = "extra == \"socks\""} + [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] h2 = ["h2 (>=4,<5)"] @@ -7224,6 +7753,20 @@ files = [ {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] +[[package]] +name = "wsproto" +version = "1.2.0" +description = "WebSockets state-machine based protocol implementation" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, + {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, +] + +[package.dependencies] +h11 = ">=0.9.0,<1" + [[package]] name = "xattr" version = "1.1.0" @@ -7400,6 +7943,41 @@ files = [ idna = ">=2.0" multidict = ">=4.0" +[[package]] +name = "youtube-transcript-api" +version = "0.6.2" +description = "This is an python API which allows you to get the transcripts/subtitles for a given YouTube video. It also works for automatically generated subtitles, supports translating subtitles and it does not require a headless browser, like other selenium based solutions do!" +optional = false +python-versions = "*" +files = [ + {file = "youtube_transcript_api-0.6.2-py3-none-any.whl", hash = "sha256:019dbf265c6a68a0591c513fff25ed5a116ce6525832aefdfb34d4df5567121c"}, + {file = "youtube_transcript_api-0.6.2.tar.gz", hash = "sha256:cad223d7620633cec44f657646bffc8bbc5598bd8e70b1ad2fa8277dec305eb7"}, +] + +[package.dependencies] +requests = "*" + +[[package]] +name = "yt-dlp" +version = "2023.12.30" +description = "A youtube-dl fork with additional features and patches" +optional = false +python-versions = ">=3.8" +files = [ + {file = "yt-dlp-2023.12.30.tar.gz", hash = "sha256:a11862e57721b0a0f0883dfeb5a4d79ba213a2d4c45e1880e9fd70f8e6570c38"}, + {file = "yt_dlp-2023.12.30-py2.py3-none-any.whl", hash = "sha256:c00d9a71d64472ad441bcaa1ec0c3797d6e60c9f934f270096a96fe51657e7b3"}, +] + +[package.dependencies] +brotli = {version = "*", markers = "implementation_name == \"cpython\""} +brotlicffi = {version = "*", markers = "implementation_name != \"cpython\""} +certifi = "*" +mutagen = "*" +pycryptodomex = "*" +requests = ">=2.31.0,<3" +urllib3 = ">=1.26.17,<3" +websockets = ">=12.0" + [[package]] name = "zipp" version = "3.18.1" @@ -7418,4 +7996,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "~3.10.0" -content-hash = "e11761e4d354c4ed463eb0239d2604e7e4d4a8578fe1f528b566f3614d4b44ef" +content-hash = "16e00612bdbd9efa90082bcd7202438898d1710a8dd1a3255dceb1ecd353bbae" From 64d8ac6e277a80ed9b0d25e877905c06f798f1a6 Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Thu, 11 Apr 2024 12:16:03 -0300 Subject: [PATCH 16/17] Fixed mypy --- .../agents/crewai_subsequential_agent/benchmark.py | 5 +++-- .../agents/crewai_subsequential_agent/deploy.py | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py index 91b8fdec..1137b0aa 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/benchmark.py @@ -1,5 +1,5 @@ import typing as t -from datetime import datetime +from datetime import datetime, timedelta import typer from loguru import logger @@ -23,6 +23,7 @@ MarketType, get_binary_markets, ) +from prediction_market_agent_tooling.tools.utils import utcnow from prediction_market_agent.agents.crewai_subsequential_agent.crewai_agent_subquestions import ( CrewAIAgentSubquestions, @@ -33,7 +34,7 @@ def build_binary_agent_market_from_question(question: str) -> AgentMarket: return AgentMarket( id=question, url=question, - close_time=None, + close_time=utcnow() + timedelta(days=1), volume=None, question=question, p_yes=Probability(0.5), diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py index fe9c5b3b..671b38c7 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py @@ -1,5 +1,5 @@ import random - +import typing as t from prediction_market_agent_tooling.deploy.agent import DeployableAgent from prediction_market_agent_tooling.markets.agent_market import AgentMarket from prediction_market_agent_tooling.markets.markets import MarketType @@ -16,9 +16,10 @@ class DeployableThinkThoroughlyAgent(DeployableAgent): def __init__(self) -> None: super().__init__() - def pick_markets(self, markets: list[AgentMarket]) -> list[AgentMarket]: + def pick_markets(self, markets: t.Sequence[AgentMarket]) -> t.Sequence[AgentMarket]: # We simply pick 5 random markets to bet on picked_markets: list[AgentMarket] = [] + markets = list(markets) random.shuffle(markets) for market in markets: # Assume very high probability markets are already known, and have From 7d2fcc32263df75ed7ff7aeb4e6dcc029b923c10 Mon Sep 17 00:00:00 2001 From: Gabriel Fior Date: Thu, 11 Apr 2024 12:26:00 -0300 Subject: [PATCH 17/17] Fixed isort --- .../agents/crewai_subsequential_agent/deploy.py | 1 + 1 file changed, 1 insertion(+) diff --git a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py index 671b38c7..5cf8f82e 100644 --- a/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py +++ b/prediction_market_agent/agents/crewai_subsequential_agent/deploy.py @@ -1,5 +1,6 @@ import random import typing as t + from prediction_market_agent_tooling.deploy.agent import DeployableAgent from prediction_market_agent_tooling.markets.agent_market import AgentMarket from prediction_market_agent_tooling.markets.markets import MarketType