From 87c6874a547006dc22283befb40ecb8349a66eb2 Mon Sep 17 00:00:00 2001 From: SwiftyOS Date: Wed, 30 Aug 2023 12:47:29 +0200 Subject: [PATCH] Added in agent explination --- .gitignore | 3 +- .pre-commit-config.yaml | 4 +- autogpt/agent.py | 92 +++++++++- autogpt/sdk/agent.py | 48 +----- autogpt/sdk/routes/agent_protocol.py | 3 +- autogpt/sdk/schema.py | 1 - autogpt/sdk/utils.py | 179 -------------------- autogpt/sdk/workspace.py | 3 - poetry.lock | 240 +++++---------------------- pyproject.toml | 1 + 10 files changed, 132 insertions(+), 442 deletions(-) delete mode 100644 autogpt/sdk/utils.py diff --git a/.gitignore b/.gitignore index 6953841a..e682d97c 100644 --- a/.gitignore +++ b/.gitignore @@ -168,4 +168,5 @@ agbenchmark .benchmarks .mypy_cache .pytest_cache -.vscode \ No newline at end of file +.vscode +ig_* \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c043475d..a5163be5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,13 +14,13 @@ repos: rev: 5.12.0 hooks: - id: isort - language_version: python3.10 + language_version: python3.11 - repo: https://github.com/psf/black rev: 23.3.0 hooks: - id: black - language_version: python3.10 + language_version: python3.11 # - repo: https://github.com/pre-commit/mirrors-mypy # rev: 'v1.3.0' diff --git a/autogpt/agent.py b/autogpt/agent.py index 3563e86e..6a2cc56a 100644 --- a/autogpt/agent.py +++ b/autogpt/agent.py @@ -1,12 +1,94 @@ import autogpt.sdk.agent +from autogpt.sdk.db import AgentDB from autogpt.sdk.schema import Step, StepRequestBody +from autogpt.sdk.workspace import Workspace class AutoGPTAgent(autogpt.sdk.agent.Agent): - async def create_and_execute_step( - self, task_id: str, step_request: StepRequestBody - ) -> Step: + """ + The goal of the Forge is to take care of the boilerplate code so you can focus on + agent design. + + There is a great paper surveying the agent landscape: https://arxiv.org/abs/2308.11432 + Which I would highly recommend reading as it will help you understand the possabilities. + + Here is a summary of the key components of an agent: + + Anatomy of an agent: + - Profile + - Memory + - Planning + - Action + + Profile: + + Agents typically perform a task by assuming specific roles. For example, a teacher, + a coder, a planner etc. In using the profile in the llm prompt it has been shown to + improve the quality of the output. https://arxiv.org/abs/2305.14688 + + Additionally baed on the profile selected, the agent could be configured to use a + different llm. The possabilities are endless and the profile can be selected selected + dynamically based on the task at hand. + + Memory: + + Memory is critical for the agent to acculmulate experiences, self-evolve, and behave + in a more consistent, reasonable, and effective manner. There are many approaches to + memory. However, some thoughts: there is long term and short term or working memory. + You may want different approaches for each. There has also been work exploring the + idea of memory reflection, which is the ability to assess its memories and re-evaluate + them. For example, condensting short term memories into long term memories. + + Planning: + + When humans face a complex task, they first break it down into simple subtasks and then + solve each subtask one by one. The planning module empowers LLM-based agents with the ability + to think and plan for solving complex tasks, which makes the agent more comprehensive, + powerful, and reliable. The two key methods to consider are: Planning with feedback and planning + without feedback. + + Action: + + Actions translate the agents decisions into specific outcomes. For example, if the agent + decides to write a file, the action would be to write the file. There are many approaches you + could implement actions. + + The Forge has a basic module for each of these areas. However, you are free to implement your own. + This is just a starting point. + """ + + def __init__(self, database: AgentDB, workspace: Workspace): """ - Create a step for the task and execute it. + The database is used to store tasks, steps and artifact metadata. The workspace is used to + store artifacts. The workspace is a directory on the file system. + + Feel free to create subclasses of the database and workspace to implement your own storage """ - return await super().create_and_execute_step(task_id, step_request) + super().__init__(database, workspace) + + async def execute_step(self, task_id: str, step_request: StepRequestBody) -> Step: + """ + The agent protocol, which is the core of the Forge, works by creating a task and then + executing steps for that task. This method is called when the agent is asked to execute + a step. + + The task that is created contains an input string, for the bechmarks this is the task + the agent has been asked to solve and additional input, which is a dictionary and + could contain anything. + + If you want to get the task use: + + ``` + task = await self.db.get_task(task_id) + ``` + + The step request body is essentailly the same as the task request and contains an input + string, for the bechmarks this is the task the agent has been asked to solve and + additional input, which is a dictionary and could contain anything. + + You need to implement logic that will take in this step input and output the completed step + as a step object. You can do everything in a single step or you can break it down into + multiple steps. Returning a request to continue in the step output, the user can then decide + if they want the agent to continue or not. + """ + raise NotImplementedError diff --git a/autogpt/sdk/agent.py b/autogpt/sdk/agent.py index ff119650..11e67079 100644 --- a/autogpt/sdk/agent.py +++ b/autogpt/sdk/agent.py @@ -15,7 +15,6 @@ from .middlewares import AgentMiddleware from .routes.agent_protocol import base_router from .schema import * from .tracing import setup_tracing -from .utils import run from .workspace import Workspace LOG = CustomLogger(__name__) @@ -102,54 +101,11 @@ class Agent: except Exception as e: raise - async def create_and_execute_step( - self, task_id: str, step_request: StepRequestBody - ) -> Step: + async def execute_step(self, task_id: str, step_request: StepRequestBody) -> Step: """ Create a step for the task. """ - if step_request.input != "y": - step = await self.db.create_step( - task_id=task_id, - input=step_request, - additional_input=step_request.additional_input, - ) - # utils.run - artifacts = run(step.input) - for artifact in artifacts: - art = await self.db.create_artifact( - task_id=step.task_id, - file_name=artifact["file_name"], - uri=artifact["uri"], - agent_created=True, - step_id=step.step_id, - ) - assert isinstance( - art, Artifact - ), f"Artifact not instance of Artifact {type(art)}" - step.artifacts.append(art) - step.status = "completed" - else: - steps, steps_pagination = await self.db.list_steps( - task_id, page=1, per_page=100 - ) - # Find the latest step that has not been completed - step = next((s for s in reversed(steps) if s.status != "completed"), None) - if step is None: - # If all steps have been completed, create a new placeholder step - step = await self.db.create_step( - task_id=task_id, - input="y", - additional_input={}, - ) - step.status = "completed" - step.is_last = True - step.output = "No more steps to run." - step = await self.db.update_step(step) - if isinstance(step.status, Status): - step.status = step.status.value - step.output = "Done some work" - return step + raise NotImplementedError async def get_step(self, task_id: str, step_id: str) -> Step: """ diff --git a/autogpt/sdk/routes/agent_protocol.py b/autogpt/sdk/routes/agent_protocol.py index e5ba7965..2e75fef2 100644 --- a/autogpt/sdk/routes/agent_protocol.py +++ b/autogpt/sdk/routes/agent_protocol.py @@ -371,7 +371,7 @@ async def execute_agent_task_step( """ agent = request["agent"] try: - step = await agent.create_and_execute_step(task_id, step) + step = await agent.execute_step(task_id, step) return Response( content=step.json(), status_code=200, @@ -539,7 +539,6 @@ async def upload_agent_task_artifacts( """ agent = request["agent"] - if file is None: return Response( content=json.dumps({"error": "File must be specified"}), diff --git a/autogpt/sdk/schema.py b/autogpt/sdk/schema.py index 753f3eaf..cc7ce868 100644 --- a/autogpt/sdk/schema.py +++ b/autogpt/sdk/schema.py @@ -8,7 +8,6 @@ from datetime import datetime from enum import Enum from typing import List, Optional -from fastapi import UploadFile from pydantic import BaseModel, Field diff --git a/autogpt/sdk/utils.py b/autogpt/sdk/utils.py deleted file mode 100644 index 579027fe..00000000 --- a/autogpt/sdk/utils.py +++ /dev/null @@ -1,179 +0,0 @@ -""" -TEMPORARY FILE FOR TESTING PURPOSES ONLY WILL BE REMOVED SOON! -------------------------------------------------------------- -PLEASE IGNORE -------------------------------------------------------------- -""" - -import glob -import os -import typing -from pathlib import Path - -import dotenv - -from .forge_log import CustomLogger - -LOG = CustomLogger(__name__) - -dotenv.load_dotenv() - -import openai -import requests -from tenacity import retry, stop_after_attempt, wait_random_exponential - -PROJECT_DIR = Path().resolve() -workspace = os.path.join(PROJECT_DIR, "agbenchmark/workspace") - - -@retry(wait=wait_random_exponential(min=1, max=40), stop=stop_after_attempt(3)) -def chat_completion_request( - messages: typing.List[typing.Dict[str, str]], - functions: typing.List[typing.Dict[str, str]] | None = None, - function_call: typing.Optional[str] = None, - model: str = "gpt-3.5-turbo", - temperature: float = 0, -) -> typing.Union[typing.Dict[str, typing.Any], Exception]: - """Generate a response to a list of messages using OpenAI's API""" - try: - return openai.ChatCompletion.create( - model=model, - messages=messages, - user="TheForge", - temperature=temperature, - ) - except Exception as e: - LOG.info("Unable to generate ChatCompletion response") - LOG.info(f"Exception: {e}") - exit() - - -def run(task: str): - """Runs the agent for benchmarking""" - LOG.info("Running agent") - steps = plan(task) - execute_plan(steps) - # check for artifacts in workspace - items = glob.glob(os.path.join(workspace, "*")) - if items: - artifacts = [] - LOG.info(f"Found {len(items)} artifacts in workspace") - for item in items: - with open(item, "r") as f: - item_contents = f.read() - path_within_workspace = os.path.relpath(item, workspace) - artifacts.append( - { - "file_name": os.path.basename(item), - "uri": f"file://{path_within_workspace}", - "contents": item_contents, - } - ) - return artifacts - - -def execute_plan(plan: typing.List[str]) -> None: - """Each step is valid python, join the steps together into a python script and execute it""" - script = "\n".join(plan) - LOG.info(f"Executing script: \n{script}") - exec(script) - - -def plan(task: str) -> typing.List[str]: - """Returns a list of tasks that needs to be executed to complete the task""" - abilities = """ - write_file(contents='The content you want to write', filepath='file_to_write.txt') - read_file(filepath='file_to_write.txt') - """ - json_format = """ - { - "steps": [ - "write_file(contents='The capital is xxx', filepath='answer.txt')", - "read_file(filepath='file_to_read.txt')", - ] - } - """ - planning_prompt = f"""Answer in json format: - Determine the steps needed to complete the following task : - {task} - --- - Possible steps: - {abilities} - - --- - Example answer: - {json_format} - - --- - As you can see, we only use hard coded values when calling the functions. - Please write your answer below: - """ - messages = [{"role": "user", "content": planning_prompt}] - - response = chat_completion_request(messages=messages) - - import json - - plan = json.loads(response.choices[0].message.content) - return plan["steps"] - - -def append_to_file(contents: str, filepath: str, to_start: bool) -> bool: - """Reads in a file then writes the file out with the contents appended to the end or start""" - if workspace not in filepath: - filepath = os.path.join(workspace, filepath) - file_contents = read_file(filepath) - if file_contents is None: - file_contents = "" - if to_start: - contents += file_contents - else: - contents = file_contents + contents - return write_file(contents, filepath) - - -def write_file(contents: str, filepath: str) -> bool: - """Creates directory for the file if it doesn't exist, then writes the file""" - if workspace not in filepath: - filepath = os.path.join(workspace, filepath) - success = False - directory = os.path.dirname(filepath) - os.makedirs(directory, exist_ok=True) - try: - with open(filepath, "w") as f: - f.write(contents) - success = True - except Exception as e: - LOG.info(f"Unable to write file: {e}") - return success - - -def read_file(filepath: str) -> typing.Optional[str]: - """Reads in the contents of a file""" - if workspace not in filepath: - filepath = os.path.join(workspace, filepath) - contents = None - try: - with open(filepath, "r") as f: - contents = f.read() - except Exception as e: - LOG.info(f"Unable to read file: {e}") - return contents - - -def read_webpage(url: str) -> typing.Optional[str]: - """Checks if the url is valid then reads the contents of the webpage""" - contents = None - try: - response = requests.get(url) - if response.status_code == 200: - contents = response.text - except Exception as e: - LOG.info(f"Unable to read webpage: {e}") - return contents - - -if __name__ == "__main__": - test_messages = [{"role": "user", "content": "Hello, how are you?"}] - response = chat_completion_request(test_messages) - LOG.info(response) diff --git a/autogpt/sdk/workspace.py b/autogpt/sdk/workspace.py index fbb4e762..dd6642cb 100644 --- a/autogpt/sdk/workspace.py +++ b/autogpt/sdk/workspace.py @@ -3,9 +3,6 @@ import os import typing from pathlib import Path -import aiohttp -from fastapi import Response - class Workspace(abc.ABC): @abc.abstractclassmethod diff --git a/poetry.lock b/poetry.lock index 88ef9657..9d2c229a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aenum" version = "3.1.15" description = "Advanced Enumerations (compatible with Python's stdlib Enum), NamedTuples, and NamedConstants" -category = "dev" optional = false python-versions = "*" files = [ @@ -17,7 +16,6 @@ files = [ name = "agbenchmark" version = "0.0.9" description = "Benchmarking the performance of agents far and wide, regardless of how they are set up and how they work" -category = "dev" optional = false python-versions = ">=3.10,<4.0" files = [ @@ -51,7 +49,6 @@ types-requests = ">=2.31.0.1,<3.0.0.0" name = "agent-protocol" version = "0.2.4" description = "API for interacting with Agent" -category = "dev" optional = false python-versions = ">=3.7,<4.0.0" files = [ @@ -73,7 +70,6 @@ requests = ">=2.31.0,<3.0.0" name = "agent-protocol-client" version = "0.2.2" description = "Agent Communication Protocol Client" -category = "dev" optional = false python-versions = ">=3.10,<4.0" files = [ @@ -92,7 +88,6 @@ urllib3 = ">=1.25.3" name = "aiofiles" version = "23.2.1" description = "File support for asyncio." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -104,7 +99,6 @@ files = [ name = "aiohttp" version = "3.8.5" description = "Async http client/server framework (asyncio)" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -213,7 +207,6 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -228,7 +221,6 @@ frozenlist = ">=1.1.0" name = "altair" version = "5.0.1" description = "Vega-Altair: A declarative statistical visualization library for Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -252,7 +244,6 @@ doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", " name = "ansi2html" version = "1.8.0" description = "" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -268,7 +259,6 @@ test = ["pytest", "pytest-cov"] name = "anyio" version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -290,7 +280,6 @@ trio = ["trio (<0.22)"] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "dev" optional = false python-versions = "*" files = [ @@ -302,7 +291,6 @@ files = [ name = "asgiref" version = "3.7.2" description = "ASGI specs, helper code, and adapters" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -320,7 +308,6 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] name = "asttokens" version = "2.2.1" description = "Annotate AST trees with source code positions" -category = "dev" optional = false python-versions = "*" files = [ @@ -338,7 +325,6 @@ test = ["astroid", "pytest"] name = "async-timeout" version = "4.0.3" description = "Timeout context manager for asyncio programs" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -350,7 +336,6 @@ files = [ name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -365,11 +350,25 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope-interface"] tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +[[package]] +name = "autoflake" +version = "2.2.0" +description = "Removes unused imports and unused variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "autoflake-2.2.0-py3-none-any.whl", hash = "sha256:de409b009a34c1c2a7cc2aae84c4c05047f9773594317c6a6968bd497600d4a0"}, + {file = "autoflake-2.2.0.tar.gz", hash = "sha256:62e1f74a0fdad898a96fee6f99fe8241af90ad99c7110c884b35855778412251"}, +] + +[package.dependencies] +pyflakes = ">=3.0.0" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} + [[package]] name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "dev" optional = false python-versions = "*" files = [ @@ -381,7 +380,6 @@ files = [ name = "backoff" version = "2.2.1" description = "Function decoration for backoff and retry" -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -393,7 +391,6 @@ files = [ name = "black" version = "23.7.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -439,7 +436,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "cachetools" version = "5.3.1" description = "Extensible memoizing collections and decorators" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -451,7 +447,6 @@ files = [ name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -463,7 +458,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "dev" optional = false python-versions = "*" files = [ @@ -540,7 +534,6 @@ pycparser = "*" name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -552,7 +545,6 @@ files = [ name = "charset-normalizer" version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -637,7 +629,6 @@ files = [ name = "click" version = "8.1.6" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -652,7 +643,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -664,7 +654,6 @@ files = [ name = "colorlog" version = "6.7.0" description = "Add colours to the output of Python's logging module." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -682,7 +671,6 @@ development = ["black", "flake8", "mypy", "pytest", "types-colorama"] name = "contourpy" version = "1.1.0" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -741,7 +729,6 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "cycler" version = "0.11.0" description = "Composable style cycles" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -753,7 +740,6 @@ files = [ name = "dash" version = "2.12.1" description = "A Python framework for building reactive web-apps. Developed by Plotly." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -787,7 +773,6 @@ testing = ["beautifulsoup4 (>=4.8.2)", "cryptography (<3.4)", "dash-testing-stub name = "dash-bootstrap-components" version = "1.4.2" description = "Bootstrap themed components for use in Plotly Dash" -category = "dev" optional = false python-versions = ">=3.7, <4" files = [ @@ -805,7 +790,6 @@ pandas = ["numpy", "pandas"] name = "dash-core-components" version = "2.0.0" description = "Core component suite for Dash" -category = "dev" optional = false python-versions = "*" files = [ @@ -817,7 +801,6 @@ files = [ name = "dash-html-components" version = "2.0.0" description = "Vanilla HTML components for Dash" -category = "dev" optional = false python-versions = "*" files = [ @@ -829,7 +812,6 @@ files = [ name = "dash-table" version = "5.0.0" description = "Dash table" -category = "dev" optional = false python-versions = "*" files = [ @@ -841,7 +823,6 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -853,7 +834,6 @@ files = [ name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -871,7 +851,6 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "distlib" version = "0.3.7" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -883,7 +862,6 @@ files = [ name = "exceptiongroup" version = "1.1.3" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -898,7 +876,6 @@ test = ["pytest (>=6)"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" -category = "dev" optional = false python-versions = "*" files = [ @@ -913,7 +890,6 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "fastapi" version = "0.100.1" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -933,7 +909,6 @@ all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)" name = "ffmpy" version = "0.3.1" description = "A simple Python wrapper for ffmpeg" -category = "dev" optional = false python-versions = "*" files = [ @@ -944,7 +919,6 @@ files = [ name = "filelock" version = "3.12.2" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -960,7 +934,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p name = "flake8" version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" optional = false python-versions = ">=3.8.1" files = [ @@ -977,7 +950,6 @@ pyflakes = ">=3.1.0,<3.2.0" name = "flask" version = "2.2.5" description = "A simple framework for building complex web applications." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -999,7 +971,6 @@ dotenv = ["python-dotenv"] name = "fonttools" version = "4.42.0" description = "Tools to manipulate font files" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1057,7 +1028,6 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "frozenlist" version = "1.4.0" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1128,7 +1098,6 @@ files = [ name = "fsspec" version = "2023.6.0" description = "File-system specification" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1164,7 +1133,6 @@ tqdm = ["tqdm"] name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1179,7 +1147,6 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.32" description = "GitPython is a Python library used to interact with Git repositories" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1194,7 +1161,6 @@ gitdb = ">=4.0.1,<5" name = "google-api-core" version = "2.11.1" description = "Google API client core library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1217,7 +1183,6 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] name = "google-auth" version = "2.17.3" description = "Google Authentication Library" -category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" files = [ @@ -1242,7 +1207,6 @@ requests = ["requests (>=2.20.0,<3.0.0dev)"] name = "google-cloud-core" version = "2.3.3" description = "Google Cloud API client core library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1251,7 +1215,7 @@ files = [ ] [package.dependencies] -google-api-core = ">=1.31.6,<2.0.0 || >2.3.0,<3.0.0dev" +google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0dev" google-auth = ">=1.25.0,<3.0dev" [package.extras] @@ -1261,7 +1225,6 @@ grpc = ["grpcio (>=1.38.0,<2.0dev)"] name = "google-cloud-storage" version = "2.10.0" description = "Google Cloud Storage API client library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1270,7 +1233,7 @@ files = [ ] [package.dependencies] -google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" +google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev" google-auth = ">=1.25.0,<3.0dev" google-cloud-core = ">=2.3.0,<3.0dev" google-resumable-media = ">=2.3.2" @@ -1283,7 +1246,6 @@ protobuf = ["protobuf (<5.0.0dev)"] name = "google-crc32c" version = "1.5.0" description = "A python wrapper of the C library 'Google CRC32C'" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1364,7 +1326,6 @@ testing = ["pytest"] name = "google-resumable-media" version = "2.5.0" description = "Utilities for Google Media Downloads and Resumable Uploads" -category = "main" optional = false python-versions = ">= 3.7" files = [ @@ -1383,7 +1344,6 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"] name = "googleapis-common-protos" version = "1.56.2" description = "Common protobufs used in Google APIs" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1401,7 +1361,6 @@ grpc = ["grpcio (>=1.0.0,<2.0.0dev)"] name = "gradio" version = "3.40.1" description = "Python library for easily interacting with trained machine learning models" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1446,7 +1405,6 @@ oauth = ["authlib", "itsdangerous"] name = "gradio-client" version = "0.4.0" description = "Python library for easily interacting with trained machine learning models" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1467,7 +1425,6 @@ websockets = ">=10.0,<12.0" name = "greenlet" version = "2.0.2" description = "Lightweight in-process concurrent programming" -category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" files = [ @@ -1541,7 +1498,6 @@ test = ["objgraph", "psutil"] name = "grpcio" version = "1.57.0" description = "HTTP/2-based RPC framework" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1599,7 +1555,6 @@ protobuf = ["grpcio-tools (>=1.57.0)"] name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1611,7 +1566,6 @@ files = [ name = "h2" version = "4.1.0" description = "HTTP/2 State-Machine based protocol implementation" -category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -1627,7 +1581,6 @@ hyperframe = ">=6.0,<7" name = "helicone" version = "1.0.9" description = "A Python wrapper for the OpenAI API that logs all requests to Helicone." -category = "main" optional = false python-versions = ">=3.8.1" files = [ @@ -1643,7 +1596,6 @@ openai = ">=0.27.0,<0.28.0" name = "hpack" version = "4.0.0" description = "Pure-Python HPACK header compression" -category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -1655,7 +1607,6 @@ files = [ name = "httpcore" version = "0.17.3" description = "A minimal low-level HTTP client." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1667,17 +1618,16 @@ files = [ anyio = ">=3.0,<5.0" certifi = "*" h11 = ">=0.13,<0.15" -sniffio = ">=1.0.0,<2.0.0" +sniffio = "==1.*" [package.extras] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] [[package]] name = "httpx" version = "0.24.1" description = "The next generation HTTP client." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1693,15 +1643,14 @@ sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] -cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] [[package]] name = "huggingface-hub" version = "0.16.4" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1734,7 +1683,6 @@ typing = ["pydantic", "types-PyYAML", "types-requests", "types-simplejson", "typ name = "hypercorn" version = "0.14.4" description = "A ASGI Server based on Hyper libraries and inspired by Gunicorn" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1759,7 +1707,6 @@ uvloop = ["uvloop"] name = "hyperframe" version = "6.0.1" description = "HTTP/2 framing layer for Python" -category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -1771,7 +1718,6 @@ files = [ name = "identify" version = "2.5.26" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1786,7 +1732,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1798,7 +1743,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1818,7 +1762,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "importlib-resources" version = "6.0.1" description = "Read resources from Python packages" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1834,7 +1777,6 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1846,7 +1788,6 @@ files = [ name = "ipython" version = "8.14.0" description = "IPython: Productive Interactive Computing" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -1885,7 +1826,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa name = "isort" version = "5.12.0" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -1903,7 +1843,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] name = "itsdangerous" version = "2.1.2" description = "Safely pass data to untrusted environments and back." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1915,7 +1854,6 @@ files = [ name = "jedi" version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1935,7 +1873,6 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1953,7 +1890,6 @@ i18n = ["Babel (>=2.7)"] name = "jsonpickle" version = "3.0.2" description = "Python library for serializing any arbitrary object graph into JSON" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1970,7 +1906,6 @@ testing-libs = ["simplejson", "ujson"] name = "jsonschema" version = "4.19.0" description = "An implementation of JSON Schema validation for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1992,7 +1927,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2023.7.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2007,7 +1941,6 @@ referencing = ">=0.28.0" name = "kiwisolver" version = "1.4.4" description = "A fast implementation of the Cassowary constraint solver" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2085,7 +2018,6 @@ files = [ name = "linkify-it-py" version = "2.0.2" description = "Links recognition library with FULL unicode support." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2106,7 +2038,6 @@ test = ["coverage", "pytest", "pytest-cov"] name = "lockfile" version = "0.12.2" description = "Platform-independent file locking module" -category = "main" optional = false python-versions = "*" files = [ @@ -2118,7 +2049,6 @@ files = [ name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2144,7 +2074,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2204,7 +2133,6 @@ files = [ name = "matplotlib" version = "3.7.2" description = "Python plotting package" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2266,7 +2194,6 @@ python-dateutil = ">=2.7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2281,7 +2208,6 @@ traitlets = "*" name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2293,7 +2219,6 @@ files = [ name = "mdit-py-plugins" version = "0.3.3" description = "Collection of plugins for markdown-it-py" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2313,7 +2238,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2325,7 +2249,6 @@ files = [ name = "mock" version = "5.1.0" description = "Rolling backport of unittest.mock for all Pythons" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2342,7 +2265,6 @@ test = ["pytest", "pytest-cov"] name = "multidict" version = "6.0.4" description = "multidict implementation" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2426,7 +2348,6 @@ files = [ name = "mypy" version = "1.5.1" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2473,7 +2394,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2485,7 +2405,6 @@ files = [ name = "nest-asyncio" version = "1.5.7" description = "Patch asyncio to allow nested event loops" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2497,7 +2416,6 @@ files = [ name = "networkx" version = "3.1" description = "Python package for creating and manipulating graphs and networks" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2516,7 +2434,6 @@ test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -2531,7 +2448,6 @@ setuptools = "*" name = "numpy" version = "1.25.2" description = "Fundamental package for array computing in Python" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -2566,7 +2482,6 @@ files = [ name = "openai" version = "0.27.8" description = "Python client library for the OpenAI API" -category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -2581,7 +2496,7 @@ tqdm = "*" [package.extras] datalib = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] -dev = ["black (>=21.6b0,<22.0)", "pytest (>=6.0.0,<7.0.0)", "pytest-asyncio", "pytest-mock"] +dev = ["black (>=21.6b0,<22.0)", "pytest (==6.*)", "pytest-asyncio", "pytest-mock"] embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "plotly", "scikit-learn (>=1.0.2)", "scipy", "tenacity (>=8.0.1)"] wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"] @@ -2589,7 +2504,6 @@ wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1 name = "opentelemetry-api" version = "1.19.0" description = "OpenTelemetry Python API" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2605,7 +2519,6 @@ importlib-metadata = ">=6.0,<7.0" name = "opentelemetry-exporter-jaeger" version = "1.19.0" description = "Jaeger Exporters for OpenTelemetry" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2621,7 +2534,6 @@ opentelemetry-exporter-jaeger-thrift = "1.19.0" name = "opentelemetry-exporter-jaeger-proto-grpc" version = "1.19.0" description = "Jaeger Protobuf Exporter for OpenTelemetry" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2639,7 +2551,6 @@ opentelemetry-sdk = ">=1.11,<2.0" name = "opentelemetry-exporter-jaeger-thrift" version = "1.19.0" description = "Jaeger Thrift Exporter for OpenTelemetry" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2656,7 +2567,6 @@ thrift = ">=0.10.0" name = "opentelemetry-exporter-otlp" version = "1.19.0" description = "OpenTelemetry Collector Exporters" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2672,7 +2582,6 @@ opentelemetry-exporter-otlp-proto-http = "1.19.0" name = "opentelemetry-exporter-otlp-proto-common" version = "1.19.0" description = "OpenTelemetry Protobuf encoding" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2687,7 +2596,6 @@ opentelemetry-proto = "1.19.0" name = "opentelemetry-exporter-otlp-proto-grpc" version = "1.19.0" description = "OpenTelemetry Collector Protobuf over gRPC Exporter" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2712,7 +2620,6 @@ test = ["pytest-grpc"] name = "opentelemetry-exporter-otlp-proto-http" version = "1.19.0" description = "OpenTelemetry Collector Protobuf over HTTP Exporter" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2737,7 +2644,6 @@ test = ["responses (==0.22.0)"] name = "opentelemetry-instrumentation" version = "0.40b0" description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2754,7 +2660,6 @@ wrapt = ">=1.0.0,<2.0.0" name = "opentelemetry-instrumentation-asgi" version = "0.40b0" description = "ASGI instrumentation for OpenTelemetry" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2777,7 +2682,6 @@ test = ["opentelemetry-instrumentation-asgi[instruments]", "opentelemetry-test-u name = "opentelemetry-instrumentation-fastapi" version = "0.40b0" description = "OpenTelemetry FastAPI Instrumentation" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2800,7 +2704,6 @@ test = ["httpx (>=0.22,<1.0)", "opentelemetry-instrumentation-fastapi[instrument name = "opentelemetry-proto" version = "1.19.0" description = "OpenTelemetry Python Proto" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2815,7 +2718,6 @@ protobuf = ">=3.19,<5.0" name = "opentelemetry-sdk" version = "1.19.0" description = "OpenTelemetry Python SDK" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2832,7 +2734,6 @@ typing-extensions = ">=3.7.4" name = "opentelemetry-semantic-conventions" version = "0.40b0" description = "OpenTelemetry Semantic Conventions" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2844,7 +2745,6 @@ files = [ name = "opentelemetry-util-http" version = "0.40b0" description = "Web util for OpenTelemetry" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2856,7 +2756,6 @@ files = [ name = "orjson" version = "3.9.5" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2926,7 +2825,6 @@ files = [ name = "outcome" version = "1.2.0" description = "Capture the outcome of Python function calls." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2941,7 +2839,6 @@ attrs = ">=19.2.0" name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2953,7 +2850,6 @@ files = [ name = "pandas" version = "2.0.3" description = "Powerful data structures for data analysis, time series, and statistics" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2986,8 +2882,8 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -3020,7 +2916,6 @@ xml = ["lxml (>=4.6.3)"] name = "parso" version = "0.8.3" description = "A Python Parser" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3036,7 +2931,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3048,7 +2942,6 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "dev" optional = false python-versions = "*" files = [ @@ -3063,7 +2956,6 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "dev" optional = false python-versions = "*" files = [ @@ -3075,7 +2967,6 @@ files = [ name = "pillow" version = "10.0.0" description = "Python Imaging Library (Fork)" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3097,6 +2988,7 @@ files = [ {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538"}, {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d"}, {file = "Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f"}, + {file = "Pillow-10.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37"}, {file = "Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883"}, {file = "Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e"}, {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640"}, @@ -3106,6 +2998,7 @@ files = [ {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551"}, {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5"}, {file = "Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199"}, + {file = "Pillow-10.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca"}, {file = "Pillow-10.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3"}, {file = "Pillow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3"}, {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43"}, @@ -3143,7 +3036,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa name = "platformdirs" version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3159,7 +3051,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "plotly" version = "5.16.1" description = "An open-source, interactive data visualization library for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3175,7 +3066,6 @@ tenacity = ">=6.2.0" name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3191,7 +3081,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "3.3.3" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3210,7 +3099,6 @@ virtualenv = ">=20.10.0" name = "priority" version = "2.0.0" description = "A pure-Python implementation of the HTTP/2 priority tree" -category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -3222,7 +3110,6 @@ files = [ name = "prometheus-client" version = "0.17.1" description = "Python client for the Prometheus monitoring system." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3237,7 +3124,6 @@ twisted = ["twisted"] name = "prometheus-fastapi-instrumentator" version = "6.1.0" description = "Instrument your FastAPI with Prometheus metrics." -category = "dev" optional = false python-versions = ">=3.7.0,<4.0.0" files = [ @@ -3253,7 +3139,6 @@ prometheus-client = ">=0.8.0,<1.0.0" name = "prompt-toolkit" version = "3.0.39" description = "Library for building powerful interactive command lines in Python" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -3268,7 +3153,6 @@ wcwidth = "*" name = "protobuf" version = "3.20.3" description = "Protocol Buffers" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3300,7 +3184,6 @@ files = [ name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3327,7 +3210,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -3339,7 +3221,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "dev" optional = false python-versions = "*" files = [ @@ -3354,7 +3235,6 @@ tests = ["pytest"] name = "pyasn1" version = "0.5.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -3366,7 +3246,6 @@ files = [ name = "pyasn1-modules" version = "0.3.0" description = "A collection of ASN.1-based protocols modules" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -3381,7 +3260,6 @@ pyasn1 = ">=0.4.6,<0.6.0" name = "pycodestyle" version = "2.11.0" description = "Python style guide checker" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3393,7 +3271,6 @@ files = [ name = "pycparser" version = "2.21" description = "C parser in Python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3405,7 +3282,6 @@ files = [ name = "pydantic" version = "1.10.12" description = "Data validation and settings management using python type hints" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3458,7 +3334,6 @@ email = ["email-validator (>=1.0.3)"] name = "pydub" version = "0.25.1" description = "Manipulate audio with an simple and easy high level interface" -category = "dev" optional = false python-versions = "*" files = [ @@ -3470,7 +3345,6 @@ files = [ name = "pyflakes" version = "3.1.0" description = "passive checker of Python programs" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3482,7 +3356,6 @@ files = [ name = "pygments" version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3497,7 +3370,6 @@ plugins = ["importlib-metadata"] name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" optional = false python-versions = ">=3.6.8" files = [ @@ -3512,7 +3384,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pysocks" version = "1.7.1" description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3525,7 +3396,6 @@ files = [ name = "pytest" version = "7.4.0" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3548,7 +3418,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-asyncio" version = "0.21.1" description = "Pytest support for asyncio" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3567,7 +3436,6 @@ testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -3582,7 +3450,6 @@ six = ">=1.5" name = "python-dotenv" version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3597,7 +3464,6 @@ cli = ["click (>=5.0)"] name = "python-multipart" version = "0.0.6" description = "A streaming multipart parser for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3612,7 +3478,6 @@ dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatc name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" -category = "dev" optional = false python-versions = "*" files = [ @@ -3624,7 +3489,6 @@ files = [ name = "pyvis" version = "0.3.2" description = "A Python network graph visualization library" -category = "dev" optional = false python-versions = ">3.6" files = [ @@ -3641,7 +3505,6 @@ networkx = ">=1.11" name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3650,6 +3513,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -3657,8 +3521,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -3675,6 +3546,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -3682,6 +3554,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -3691,7 +3564,6 @@ files = [ name = "referencing" version = "0.30.2" description = "JSON Referencing + Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3707,7 +3579,6 @@ rpds-py = ">=0.7.0" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3729,7 +3600,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "retrying" version = "1.3.4" description = "Retrying" -category = "dev" optional = false python-versions = "*" files = [ @@ -3744,7 +3614,6 @@ six = ">=1.7.0" name = "rpds-py" version = "0.9.2" description = "Python bindings to Rust's persistent data structures (rpds)" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3851,7 +3720,6 @@ files = [ name = "rsa" version = "4.9" description = "Pure-Python RSA implementation" -category = "main" optional = false python-versions = ">=3.6,<4" files = [ @@ -3866,7 +3734,6 @@ pyasn1 = ">=0.1.3" name = "selenium" version = "4.11.2" description = "" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3884,7 +3751,6 @@ urllib3 = {version = ">=1.26,<3", extras = ["socks"]} name = "semantic-version" version = "2.10.0" description = "A library implementing the 'SemVer' scheme." -category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -3900,7 +3766,6 @@ doc = ["Sphinx", "sphinx-rtd-theme"] name = "setuptools" version = "68.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3917,7 +3782,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3929,7 +3793,6 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3941,7 +3804,6 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3953,7 +3815,6 @@ files = [ name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "dev" optional = false python-versions = "*" files = [ @@ -3965,7 +3826,6 @@ files = [ name = "sqlalchemy" version = "2.0.20" description = "Database Abstraction Library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4044,7 +3904,6 @@ sqlcipher = ["sqlcipher3-binary"] name = "stack-data" version = "0.6.2" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "dev" optional = false python-versions = "*" files = [ @@ -4064,7 +3923,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "starlette" version = "0.27.0" description = "The little ASGI library that shines." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4082,7 +3940,6 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyam name = "tenacity" version = "8.2.3" description = "Retry code until it succeeds" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4097,7 +3954,6 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] name = "thrift" version = "0.16.0" description = "Python bindings for the Apache Thrift RPC system" -category = "dev" optional = false python-versions = "*" files = [ @@ -4116,7 +3972,6 @@ twisted = ["twisted"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4128,7 +3983,6 @@ files = [ name = "toolz" version = "0.12.0" description = "List processing tools and functional utilities" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -4140,7 +3994,6 @@ files = [ name = "tqdm" version = "4.66.1" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4161,7 +4014,6 @@ telegram = ["requests"] name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4177,7 +4029,6 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "trio" version = "0.22.2" description = "A friendly Python library for async concurrency and I/O" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4198,7 +4049,6 @@ sortedcontainers = "*" name = "trio-websocket" version = "0.10.3" description = "WebSocket library for Trio" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4215,7 +4065,6 @@ wsproto = ">=0.14" name = "types-requests" version = "2.31.0.2" description = "Typing stubs for requests" -category = "dev" optional = false python-versions = "*" files = [ @@ -4230,7 +4079,6 @@ types-urllib3 = "*" name = "types-urllib3" version = "1.26.25.14" description = "Typing stubs for urllib3" -category = "dev" optional = false python-versions = "*" files = [ @@ -4242,7 +4090,6 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4254,7 +4101,6 @@ files = [ name = "tzdata" version = "2023.3" description = "Provider of IANA time zone data" -category = "dev" optional = false python-versions = ">=2" files = [ @@ -4266,7 +4112,6 @@ files = [ name = "uc-micro-py" version = "1.0.2" description = "Micro subset of unicode data files for linkify-it-py projects." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4281,7 +4126,6 @@ test = ["coverage", "pytest", "pytest-cov"] name = "urllib3" version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4302,7 +4146,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "uvicorn" version = "0.23.2" description = "The lightning-fast ASGI server." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4322,7 +4165,6 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", name = "virtualenv" version = "20.24.3" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4343,7 +4185,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "watchdog" version = "3.0.0" description = "Filesystem events monitoring" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4383,7 +4224,6 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -4395,7 +4235,6 @@ files = [ name = "websockets" version = "11.0.3" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4475,7 +4314,6 @@ files = [ name = "werkzeug" version = "2.2.3" description = "The comprehensive WSGI web application library." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4493,7 +4331,6 @@ watchdog = ["watchdog"] name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -4578,7 +4415,6 @@ files = [ name = "wsproto" version = "1.2.0" description = "WebSockets state-machine based protocol implementation" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -4593,7 +4429,6 @@ h11 = ">=0.9.0,<1" name = "yarl" version = "1.9.2" description = "Yet another URL library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4681,7 +4516,6 @@ multidict = ">=4.0" name = "zipp" version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4696,4 +4530,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "7b4bac6d11c51a275f9b2094cf26e159f58a975809c83a61ebf4e333911e4ff2" +content-hash = "0b33620a40f33619b7d5e87077503ec5e03984b6ac37a1aa4f0161a75dbf3cb2" diff --git a/pyproject.toml b/pyproject.toml index 362a07c0..3728f3e3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,6 +30,7 @@ pytest = "^7.4.0" pytest-asyncio = "^0.21.1" watchdog = "^3.0.0" mock = "^5.1.0" +autoflake = "^2.2.0" [tool.poetry.group.ui.dependencies]