From 03f9842a533e7445376d43d710edda58b85e4e35 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 9 Feb 2023 22:09:43 -0300 Subject: [PATCH 01/18] Initial commit --- .gitignore | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 + 2 files changed, 131 insertions(+) create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b6e47617d --- /dev/null +++ b/.gitignore @@ -0,0 +1,129 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/README.md b/README.md new file mode 100644 index 000000000..a6dd1750a --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# expert-backend +Backend API to interface with react flow frontend From a52c9828ad118b929f56f955225b3a92ebc3c76f Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 9 Feb 2023 22:11:42 -0300 Subject: [PATCH 02/18] Create devcontainer.json --- .devcontainer/devcontainer.json | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..5e73fbd62 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,34 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/universal +{ + "name": "Default Linux Universal", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/universal:2-linux", + "features": { + "ghcr.io/devcontainers/features/aws-cli:1": {} + }, + "customizations": { + "vscode": {"extensions": [ + "actboy168.tasks", + "GitHub.copilot", + "ms-python.python", + "sourcery.sourcery", + "eamodio.gitlens" + ]} + } + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "uname -a", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} From d5be85da5937f56730be01d0ed0aeb023f0f3518 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Sat, 11 Feb 2023 06:09:20 +0000 Subject: [PATCH 03/18] adding requirements.txt --- requirements.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..9d90c8f98 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +langchain==0.0.82 +openai==0.26.5 +fastapi==0.91.0 + From c5c5230520cf763d0f3d024c7774a5699457ebda Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Sat, 11 Feb 2023 06:11:12 +0000 Subject: [PATCH 04/18] feat: adding dictable interfaces JSON interface for Langchain #1 --- src/interface.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/interface.py diff --git a/src/interface.py b/src/interface.py new file mode 100644 index 000000000..e1afefe8e --- /dev/null +++ b/src/interface.py @@ -0,0 +1,45 @@ +from langchain.chains import ConversationChain +from langchain.chains.conversation.memory import ConversationBufferMemory +from langchain.agents import Agent, ConversationalAgent, Tool, initialize_agent + + +class Dictable(object): + """A mixin that allows an object to be converted to and from a dict""" + + @classmethod + def from_dict(cls, d): + """Convert a dict to an object""" + return cls(**d) + + def to_dict(self): + return self.__dict__ + + +class DictableChain(Dictable, ConversationChain): + """A ConversationChain that is also Dictable""" + + pass + + +class DictableMemory(Dictable, ConversationBufferMemory): + """A ConversationBufferMemory that is also Dictable""" + + pass + + +class DictableAgent(Dictable, Agent): + """An Agent that is also Dictable""" + + pass + + +class DictableConversationalAgent(Dictable, ConversationalAgent): + """A ConversationalAgent that is also Dictable""" + + pass + + +class DictableTool(Dictable, Tool): + """A Tool that is also Dictable""" + + pass From 75d1a003dc46159f6401bdf0cffc778630587faa Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Sat, 11 Feb 2023 06:11:51 +0000 Subject: [PATCH 05/18] feat: adding mock endpoints for testing GET endpoints to provide data to the frontend #3 --- src/endpoints.py | 37 +++++++++++++++++++++++++++++++++++++ src/main.py | 16 ++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/endpoints.py create mode 100644 src/main.py diff --git a/src/endpoints.py b/src/endpoints.py new file mode 100644 index 000000000..d2d027e20 --- /dev/null +++ b/src/endpoints.py @@ -0,0 +1,37 @@ +from fastapi import APIRouter, FastAPI +from langchain import OpenAI +from langchain.agents import initialize_agent +from interface import ( + DictableChain, + DictableConversationalAgent, + DictableMemory, + DictableTool, +) + +# build router +router = APIRouter() +AGENT_TYPE = "conversational-react-description" +# define endpoints -> /chain, /agent, /memory, /prompt +# return a dict +@router.get("/chain") +def get_chain(): + llm = OpenAI(temperature=0) + chain = DictableChain(llm=llm) + return chain.to_dict() + + +@router.get("/agent") +def get_agent(): + tools = [DictableTool(name="test", description="test", func=lambda x: x)] + llm = OpenAI(temperature=0) + return initialize_agent(llm=llm, tools=tools, memory=DictableMemory()).__dict__ + + +@router.get("/memory") +def get_memory(): + return DictableMemory().to_dict() + + +@router.get("/prompt") +def get_prompt(): + return {"template": "template", "input_variables": "input_variables"} diff --git a/src/main.py b/src/main.py new file mode 100644 index 000000000..a8e95df49 --- /dev/null +++ b/src/main.py @@ -0,0 +1,16 @@ +from fastapi import FastAPI +from endpoints import router + + +def create_app(): + """Create the FastAPI app and include the router.""" + app = FastAPI() + app.include_router(router) + return app + + +if __name__ == "__main__": + import uvicorn + + app = create_app() + uvicorn.run(app) From 4bb76ed218ba530aaaab18e36ab6e41df43cdf75 Mon Sep 17 00:00:00 2001 From: Ibis Prevedello Date: Sat, 11 Feb 2023 12:52:23 -0300 Subject: [PATCH 06/18] feat: add list of types --- poetry.lock | 1199 ++++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 22 + src/list.py | 50 ++ src/main.py | 6 +- 4 files changed, 1275 insertions(+), 2 deletions(-) create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 src/list.py diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..60d778118 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1199 @@ +[[package]] +name = "aiohttp" +version = "3.8.3" +description = "Async http client/server framework (asyncio)" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = ">=4.0.0a3,<5.0" +attrs = ">=17.3.0" +charset-normalizer = ">=2.0,<3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "cchardet"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "anyio" +version = "3.6.2" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] +trio = ["trio (>=0.16,<0.22)"] + +[[package]] +name = "async-timeout" +version = "4.0.2" +description = "Timeout context manager for asyncio programs" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "attrs" +version = "22.2.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] +tests = ["attrs[tests-no-zope]", "zope.interface"] +tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] + +[[package]] +name = "black" +version = "23.1.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "certifi" +version = "2022.12.7" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "charset-normalizer" +version = "2.1.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.6.0" + +[package.extras] +unicode-backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +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" + +[[package]] +name = "dataclasses-json" +version = "0.5.7" +description = "Easily serialize dataclasses to and from JSON" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +marshmallow = ">=3.3.0,<4.0.0" +marshmallow-enum = ">=1.5.1,<2.0.0" +typing-inspect = ">=0.4.0" + +[package.extras] +dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest (>=6.2.3)", "simplejson", "types-dataclasses"] + +[[package]] +name = "fastapi" +version = "0.91.0" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" +starlette = ">=0.24.0,<0.25.0" + +[package.extras] +all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "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)"] +dev = ["pre-commit (>=2.17.0,<3.0.0)", "ruff (==0.0.138)", "uvicorn[standard] (>=0.12.0,<0.21.0)"] +doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer[all] (>=0.6.1,<0.8.0)"] +test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==22.10.0)", "coverage[toml] (>=6.5.0,<8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.982)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "ruff (==0.0.138)", "sqlalchemy (>=1.3.18,<1.4.43)", "types-orjson (==3.6.2)", "types-ujson (==5.6.0.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"] + +[[package]] +name = "frozenlist" +version = "1.3.3" +description = "A list-like structure which implements collections.abc.MutableSequence" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +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.*" + +[package.extras] +docs = ["Sphinx", "docutils (<0.18)"] +test = ["objgraph", "psutil"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "langchain" +version = "0.0.82" +description = "Building applications with LLMs through composability" +category = "main" +optional = false +python-versions = ">=3.8.1,<4.0" +develop = true + +[package.dependencies] +aiohttp = "^3.8.3" +dataclasses-json = "^0.5.7" +numpy = "^1" +pydantic = "^1" +PyYAML = "^6" +requests = "^2" +SQLAlchemy = "^1" +tenacity = "^8.1.0" + +[package.extras] +all = ["beautifulsoup4 (>=4,<5)", "cohere (>=3,<4)", "elasticsearch (>=8,<9)", "faiss-cpu (>=1,<2)", "google-api-python-client (==2.70.0)", "google-search-results (>=2,<3)", "huggingface_hub (>=0,<1)", "jinja2 (>=3,<4)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "nltk (>=3,<4)", "openai (>=0,<1)", "pinecone-client (>=2,<3)", "pypdf (>=3.4.0,<4.0.0)", "qdrant-client (>=0.11.7,<0.12.0)", "redis (>=4,<5)", "sentence-transformers (>=2,<3)", "spacy (>=3,<4)", "tensorflow-text (>=2.11.0,<3.0.0)", "tiktoken (>=0,<1)", "torch (>=1,<2)", "transformers (>=4,<5)", "weaviate-client (>=3,<4)", "wikipedia (>=1,<2)", "wolframalpha (==5.0.0)"] +llms = ["cohere (>=3,<4)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (>=0,<1)", "torch (>=1,<2)", "transformers (>=4,<5)"] + +[package.source] +type = "directory" +url = "../langchain" + +[[package]] +name = "marshmallow" +version = "3.19.0" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["flake8 (==5.0.4)", "flake8-bugbear (==22.10.25)", "mypy (==0.990)", "pre-commit (>=2.4,<3.0)", "pytest", "pytz", "simplejson", "tox"] +docs = ["alabaster (==0.7.12)", "autodocsumm (==0.2.9)", "sphinx (==5.3.0)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] +lint = ["flake8 (==5.0.4)", "flake8-bugbear (==22.10.25)", "mypy (==0.990)", "pre-commit (>=2.4,<3.0)"] +tests = ["pytest", "pytz", "simplejson"] + +[[package]] +name = "marshmallow-enum" +version = "1.5.1" +description = "Enum field for Marshmallow" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +marshmallow = ">=2.0.0" + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "numpy" +version = "1.24.2" +description = "Fundamental package for array computing in Python" +category = "main" +optional = false +python-versions = ">=3.8" + +[[package]] +name = "openai" +version = "0.26.5" +description = "Python client library for the OpenAI API" +category = "main" +optional = false +python-versions = ">=3.7.1" + +[package.dependencies] +aiohttp = "*" +requests = ">=2.20" +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"] +embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "plotly", "scikit-learn (>=1.0.2)", "sklearn", "tenacity (>=8.0.1)"] +wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"] + +[[package]] +name = "packaging" +version = "23.0" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "pathspec" +version = "0.11.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "platformdirs" +version = "3.0.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" + +[package.extras] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pydantic" +version = "1.10.4" +description = "Data validation and settings management using python type hints" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "requests" +version = "2.28.2" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.7, <4" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "sqlalchemy" +version = "1.4.46" +description = "Database Abstraction Library" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} + +[package.extras] +aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)", "sqlalchemy2-stubs"] +mysql = ["mysqlclient (>=1.4.0)", "mysqlclient (>=1.4.0,<2)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=7)", "cx_oracle (>=7,<8)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.16.6,!=1.29.0)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +pymysql = ["pymysql", "pymysql (<1)"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "starlette" +version = "0.24.0" +description = "The little ASGI library that shines." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] + +[[package]] +name = "tenacity" +version = "8.2.1" +description = "Retry code until it succeeds" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +doc = ["reno", "sphinx", "tornado (>=4.5)"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "tqdm" +version = "4.64.1" +description = "Fast, Extensible Progress Meter" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "typing-extensions" +version = "4.4.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "typing-inspect" +version = "0.8.0" +description = "Runtime inspection utilities for typing module." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +mypy-extensions = ">=0.3.0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "urllib3" +version = "1.26.14" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "uvicorn" +version = "0.20.0" +description = "The lightning-fast ASGI server." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" + +[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 = "yarl" +version = "1.8.2" +description = "Yet another URL library" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[metadata] +lock-version = "1.1" +python-versions = "^3.10" +content-hash = "3d1426b69c1a6b52d866add9395f7731b107a08315964dccb05534aec63a079d" + +[metadata.files] +aiohttp = [ + {file = "aiohttp-3.8.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ba71c9b4dcbb16212f334126cc3d8beb6af377f6703d9dc2d9fb3874fd667ee9"}, + {file = "aiohttp-3.8.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d24b8bb40d5c61ef2d9b6a8f4528c2f17f1c5d2d31fed62ec860f6006142e83e"}, + {file = "aiohttp-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f88df3a83cf9df566f171adba39d5bd52814ac0b94778d2448652fc77f9eb491"}, + {file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97decbb3372d4b69e4d4c8117f44632551c692bb1361b356a02b97b69e18a62"}, + {file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:309aa21c1d54b8ef0723181d430347d7452daaff93e8e2363db8e75c72c2fb2d"}, + {file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad5383a67514e8e76906a06741febd9126fc7c7ff0f599d6fcce3e82b80d026f"}, + {file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20acae4f268317bb975671e375493dbdbc67cddb5f6c71eebdb85b34444ac46b"}, + {file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05a3c31c6d7cd08c149e50dc7aa2568317f5844acd745621983380597f027a18"}, + {file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d6f76310355e9fae637c3162936e9504b4767d5c52ca268331e2756e54fd4ca5"}, + {file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:256deb4b29fe5e47893fa32e1de2d73c3afe7407738bd3c63829874661d4822d"}, + {file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5c59fcd80b9049b49acd29bd3598cada4afc8d8d69bd4160cd613246912535d7"}, + {file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:059a91e88f2c00fe40aed9031b3606c3f311414f86a90d696dd982e7aec48142"}, + {file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2feebbb6074cdbd1ac276dbd737b40e890a1361b3cc30b74ac2f5e24aab41f7b"}, + {file = "aiohttp-3.8.3-cp310-cp310-win32.whl", hash = "sha256:5bf651afd22d5f0c4be16cf39d0482ea494f5c88f03e75e5fef3a85177fecdeb"}, + {file = "aiohttp-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:653acc3880459f82a65e27bd6526e47ddf19e643457d36a2250b85b41a564715"}, + {file = "aiohttp-3.8.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:86fc24e58ecb32aee09f864cb11bb91bc4c1086615001647dbfc4dc8c32f4008"}, + {file = "aiohttp-3.8.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75e14eac916f024305db517e00a9252714fce0abcb10ad327fb6dcdc0d060f1d"}, + {file = "aiohttp-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d1fde0f44029e02d02d3993ad55ce93ead9bb9b15c6b7ccd580f90bd7e3de476"}, + {file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab94426ddb1ecc6a0b601d832d5d9d421820989b8caa929114811369673235c"}, + {file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89d2e02167fa95172c017732ed7725bc8523c598757f08d13c5acca308e1a061"}, + {file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:02f9a2c72fc95d59b881cf38a4b2be9381b9527f9d328771e90f72ac76f31ad8"}, + {file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7149272fb5834fc186328e2c1fa01dda3e1fa940ce18fded6d412e8f2cf76d"}, + {file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:512bd5ab136b8dc0ffe3fdf2dfb0c4b4f49c8577f6cae55dca862cd37a4564e2"}, + {file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7018ecc5fe97027214556afbc7c502fbd718d0740e87eb1217b17efd05b3d276"}, + {file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:88c70ed9da9963d5496d38320160e8eb7e5f1886f9290475a881db12f351ab5d"}, + {file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:da22885266bbfb3f78218dc40205fed2671909fbd0720aedba39b4515c038091"}, + {file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:e65bc19919c910127c06759a63747ebe14f386cda573d95bcc62b427ca1afc73"}, + {file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:08c78317e950e0762c2983f4dd58dc5e6c9ff75c8a0efeae299d363d439c8e34"}, + {file = "aiohttp-3.8.3-cp311-cp311-win32.whl", hash = "sha256:45d88b016c849d74ebc6f2b6e8bc17cabf26e7e40c0661ddd8fae4c00f015697"}, + {file = "aiohttp-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:96372fc29471646b9b106ee918c8eeb4cca423fcbf9a34daa1b93767a88a2290"}, + {file = "aiohttp-3.8.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c971bf3786b5fad82ce5ad570dc6ee420f5b12527157929e830f51c55dc8af77"}, + {file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff25f48fc8e623d95eca0670b8cc1469a83783c924a602e0fbd47363bb54aaca"}, + {file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e381581b37db1db7597b62a2e6b8b57c3deec95d93b6d6407c5b61ddc98aca6d"}, + {file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db19d60d846283ee275d0416e2a23493f4e6b6028825b51290ac05afc87a6f97"}, + {file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25892c92bee6d9449ffac82c2fe257f3a6f297792cdb18ad784737d61e7a9a85"}, + {file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:398701865e7a9565d49189f6c90868efaca21be65c725fc87fc305906be915da"}, + {file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4a4fbc769ea9b6bd97f4ad0b430a6807f92f0e5eb020f1e42ece59f3ecfc4585"}, + {file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:b29bfd650ed8e148f9c515474a6ef0ba1090b7a8faeee26b74a8ff3b33617502"}, + {file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:1e56b9cafcd6531bab5d9b2e890bb4937f4165109fe98e2b98ef0dcfcb06ee9d"}, + {file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ec40170327d4a404b0d91855d41bfe1fe4b699222b2b93e3d833a27330a87a6d"}, + {file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2df5f139233060578d8c2c975128fb231a89ca0a462b35d4b5fcf7c501ebdbe1"}, + {file = "aiohttp-3.8.3-cp36-cp36m-win32.whl", hash = "sha256:f973157ffeab5459eefe7b97a804987876dd0a55570b8fa56b4e1954bf11329b"}, + {file = "aiohttp-3.8.3-cp36-cp36m-win_amd64.whl", hash = "sha256:437399385f2abcd634865705bdc180c8314124b98299d54fe1d4c8990f2f9494"}, + {file = "aiohttp-3.8.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:09e28f572b21642128ef31f4e8372adb6888846f32fecb288c8b0457597ba61a"}, + {file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f3553510abdbec67c043ca85727396ceed1272eef029b050677046d3387be8d"}, + {file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e168a7560b7c61342ae0412997b069753f27ac4862ec7867eff74f0fe4ea2ad9"}, + {file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db4c979b0b3e0fa7e9e69ecd11b2b3174c6963cebadeecfb7ad24532ffcdd11a"}, + {file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e164e0a98e92d06da343d17d4e9c4da4654f4a4588a20d6c73548a29f176abe2"}, + {file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8a78079d9a39ca9ca99a8b0ac2fdc0c4d25fc80c8a8a82e5c8211509c523363"}, + {file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:21b30885a63c3f4ff5b77a5d6caf008b037cb521a5f33eab445dc566f6d092cc"}, + {file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4b0f30372cef3fdc262f33d06e7b411cd59058ce9174ef159ad938c4a34a89da"}, + {file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:8135fa153a20d82ffb64f70a1b5c2738684afa197839b34cc3e3c72fa88d302c"}, + {file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:ad61a9639792fd790523ba072c0555cd6be5a0baf03a49a5dd8cfcf20d56df48"}, + {file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:978b046ca728073070e9abc074b6299ebf3501e8dee5e26efacb13cec2b2dea0"}, + {file = "aiohttp-3.8.3-cp37-cp37m-win32.whl", hash = "sha256:0d2c6d8c6872df4a6ec37d2ede71eff62395b9e337b4e18efd2177de883a5033"}, + {file = "aiohttp-3.8.3-cp37-cp37m-win_amd64.whl", hash = "sha256:21d69797eb951f155026651f7e9362877334508d39c2fc37bd04ff55b2007091"}, + {file = "aiohttp-3.8.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ca9af5f8f5812d475c5259393f52d712f6d5f0d7fdad9acdb1107dd9e3cb7eb"}, + {file = "aiohttp-3.8.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d90043c1882067f1bd26196d5d2db9aa6d268def3293ed5fb317e13c9413ea4"}, + {file = "aiohttp-3.8.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d737fc67b9a970f3234754974531dc9afeea11c70791dcb7db53b0cf81b79784"}, + {file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf909ea0a3fc9596e40d55d8000702a85e27fd578ff41a5500f68f20fd32e6c"}, + {file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5835f258ca9f7c455493a57ee707b76d2d9634d84d5d7f62e77be984ea80b849"}, + {file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da37dcfbf4b7f45d80ee386a5f81122501ec75672f475da34784196690762f4b"}, + {file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f44875f2804bc0511a69ce44a9595d5944837a62caecc8490bbdb0e18b1342"}, + {file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:527b3b87b24844ea7865284aabfab08eb0faf599b385b03c2aa91fc6edd6e4b6"}, + {file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d5ba88df9aa5e2f806650fcbeedbe4f6e8736e92fc0e73b0400538fd25a4dd96"}, + {file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e7b8813be97cab8cb52b1375f41f8e6804f6507fe4660152e8ca5c48f0436017"}, + {file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:2dea10edfa1a54098703cb7acaa665c07b4e7568472a47f4e64e6319d3821ccf"}, + {file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:713d22cd9643ba9025d33c4af43943c7a1eb8547729228de18d3e02e278472b6"}, + {file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2d252771fc85e0cf8da0b823157962d70639e63cb9b578b1dec9868dd1f4f937"}, + {file = "aiohttp-3.8.3-cp38-cp38-win32.whl", hash = "sha256:66bd5f950344fb2b3dbdd421aaa4e84f4411a1a13fca3aeb2bcbe667f80c9f76"}, + {file = "aiohttp-3.8.3-cp38-cp38-win_amd64.whl", hash = "sha256:84b14f36e85295fe69c6b9789b51a0903b774046d5f7df538176516c3e422446"}, + {file = "aiohttp-3.8.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c121ba0b1ec2b44b73e3a8a171c4f999b33929cd2397124a8c7fcfc8cd9e06"}, + {file = "aiohttp-3.8.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8d6aaa4e7155afaf994d7924eb290abbe81a6905b303d8cb61310a2aba1c68ba"}, + {file = "aiohttp-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:43046a319664a04b146f81b40e1545d4c8ac7b7dd04c47e40bf09f65f2437346"}, + {file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599418aaaf88a6d02a8c515e656f6faf3d10618d3dd95866eb4436520096c84b"}, + {file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92a2964319d359f494f16011e23434f6f8ef0434acd3cf154a6b7bec511e2fb7"}, + {file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73a4131962e6d91109bca6536416aa067cf6c4efb871975df734f8d2fd821b37"}, + {file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598adde339d2cf7d67beaccda3f2ce7c57b3b412702f29c946708f69cf8222aa"}, + {file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75880ed07be39beff1881d81e4a907cafb802f306efd6d2d15f2b3c69935f6fb"}, + {file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0239da9fbafd9ff82fd67c16704a7d1bccf0d107a300e790587ad05547681c8"}, + {file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4e3a23ec214e95c9fe85a58470b660efe6534b83e6cbe38b3ed52b053d7cb6ad"}, + {file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:47841407cc89a4b80b0c52276f3cc8138bbbfba4b179ee3acbd7d77ae33f7ac4"}, + {file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:54d107c89a3ebcd13228278d68f1436d3f33f2dd2af5415e3feaeb1156e1a62c"}, + {file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c37c5cce780349d4d51739ae682dec63573847a2a8dcb44381b174c3d9c8d403"}, + {file = "aiohttp-3.8.3-cp39-cp39-win32.whl", hash = "sha256:f178d2aadf0166be4df834c4953da2d7eef24719e8aec9a65289483eeea9d618"}, + {file = "aiohttp-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:88e5be56c231981428f4f506c68b6a46fa25c4123a2e86d156c58a8369d31ab7"}, + {file = "aiohttp-3.8.3.tar.gz", hash = "sha256:3828fb41b7203176b82fe5d699e0d845435f2374750a44b480ea6b930f6be269"}, +] +aiosignal = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] +anyio = [ + {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, + {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, +] +async-timeout = [ + {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, + {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, +] +attrs = [ + {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, + {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, +] +black = [ + {file = "black-23.1.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221"}, + {file = "black-23.1.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26"}, + {file = "black-23.1.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:9880d7d419bb7e709b37e28deb5e68a49227713b623c72b2b931028ea65f619b"}, + {file = "black-23.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6663f91b6feca5d06f2ccd49a10f254f9298cc1f7f49c46e498a0771b507104"}, + {file = "black-23.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9afd3f493666a0cd8f8df9a0200c6359ac53940cbde049dcb1a7eb6ee2dd7074"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:bfffba28dc52a58f04492181392ee380e95262af14ee01d4bc7bb1b1c6ca8d27"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c1c476bc7b7d021321e7d93dc2cbd78ce103b84d5a4cf97ed535fbc0d6660648"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:382998821f58e5c8238d3166c492139573325287820963d2f7de4d518bd76958"}, + {file = "black-23.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf649fda611c8550ca9d7592b69f0637218c2369b7744694c5e4902873b2f3a"}, + {file = "black-23.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:121ca7f10b4a01fd99951234abdbd97728e1240be89fde18480ffac16503d481"}, + {file = "black-23.1.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:a8471939da5e824b891b25751955be52ee7f8a30a916d570a5ba8e0f2eb2ecad"}, + {file = "black-23.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8178318cb74f98bc571eef19068f6ab5613b3e59d4f47771582f04e175570ed8"}, + {file = "black-23.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a436e7881d33acaf2536c46a454bb964a50eff59b21b51c6ccf5a40601fbef24"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:a59db0a2094d2259c554676403fa2fac3473ccf1354c1c63eccf7ae65aac8ab6"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:0052dba51dec07ed029ed61b18183942043e00008ec65d5028814afaab9a22fd"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:49f7b39e30f326a34b5c9a4213213a6b221d7ae9d58ec70df1c4a307cf2a1580"}, + {file = "black-23.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:162e37d49e93bd6eb6f1afc3e17a3d23a823042530c37c3c42eeeaf026f38468"}, + {file = "black-23.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b70eb40a78dfac24842458476135f9b99ab952dd3f2dab738c1881a9b38b753"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:a29650759a6a0944e7cca036674655c2f0f63806ddecc45ed40b7b8aa314b651"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:bb460c8561c8c1bec7824ecbc3ce085eb50005883a6203dcfb0122e95797ee06"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c91dfc2c2a4e50df0026f88d2215e166616e0c80e86004d0003ece0488db2739"}, + {file = "black-23.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a951cc83ab535d248c89f300eccbd625e80ab880fbcfb5ac8afb5f01a258ac9"}, + {file = "black-23.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0680d4380db3719ebcfb2613f34e86c8e6d15ffeabcf8ec59355c5e7b85bb555"}, + {file = "black-23.1.0-py3-none-any.whl", hash = "sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32"}, + {file = "black-23.1.0.tar.gz", hash = "sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac"}, +] +certifi = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, + {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +dataclasses-json = [ + {file = "dataclasses-json-0.5.7.tar.gz", hash = "sha256:c2c11bc8214fbf709ffc369d11446ff6945254a7f09128154a7620613d8fda90"}, + {file = "dataclasses_json-0.5.7-py3-none-any.whl", hash = "sha256:bc285b5f892094c3a53d558858a88553dd6a61a11ab1a8128a0e554385dcc5dd"}, +] +fastapi = [ + {file = "fastapi-0.91.0-py3-none-any.whl", hash = "sha256:8dc18f860755159b3c4b30577c61c821b98f382acfeb6d5a849f9fa6a5369789"}, + {file = "fastapi-0.91.0.tar.gz", hash = "sha256:ff2fa93af3f2f982b07b5f96e8512565b3ef0e5f8f02469dbfd6bc27f6fd9a9e"}, +] +frozenlist = [ + {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4"}, + {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0"}, + {file = "frozenlist-1.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530"}, + {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7"}, + {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99"}, + {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483"}, + {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd"}, + {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf"}, + {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816"}, + {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0"}, + {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce"}, + {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f"}, + {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420"}, + {file = "frozenlist-1.3.3-cp310-cp310-win32.whl", hash = "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642"}, + {file = "frozenlist-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1"}, + {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7"}, + {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678"}, + {file = "frozenlist-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6"}, + {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8"}, + {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb"}, + {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91"}, + {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b"}, + {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4"}, + {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48"}, + {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d"}, + {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6"}, + {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4"}, + {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81"}, + {file = "frozenlist-1.3.3-cp311-cp311-win32.whl", hash = "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8"}, + {file = "frozenlist-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32"}, + {file = "frozenlist-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332"}, + {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27"}, + {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d"}, + {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e"}, + {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d"}, + {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c"}, + {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56"}, + {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420"}, + {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e"}, + {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb"}, + {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401"}, + {file = "frozenlist-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a"}, + {file = "frozenlist-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411"}, + {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a"}, + {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5"}, + {file = "frozenlist-1.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e"}, + {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c"}, + {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba"}, + {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703"}, + {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2"}, + {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448"}, + {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4"}, + {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649"}, + {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842"}, + {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13"}, + {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3"}, + {file = "frozenlist-1.3.3-cp38-cp38-win32.whl", hash = "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b"}, + {file = "frozenlist-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef"}, + {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf"}, + {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1"}, + {file = "frozenlist-1.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0"}, + {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d"}, + {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936"}, + {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5"}, + {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b"}, + {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669"}, + {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb"}, + {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784"}, + {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d"}, + {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab"}, + {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1"}, + {file = "frozenlist-1.3.3-cp39-cp39-win32.whl", hash = "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38"}, + {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"}, + {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"}, +] +greenlet = [ + {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, + {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, + {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, + {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, + {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, + {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"}, + {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"}, + {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, + {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, + {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, + {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"}, + {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"}, + {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"}, + {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"}, + {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"}, + {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"}, + {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"}, + {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"}, + {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"}, + {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"}, + {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"}, + {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"}, + {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"}, + {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"}, + {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"}, + {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, + {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, + {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"}, + {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"}, + {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, + {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, + {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, + {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"}, + {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"}, + {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"}, + {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"}, + {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"}, + {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"}, +] +h11 = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] +idna = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] +langchain = [] +marshmallow = [ + {file = "marshmallow-3.19.0-py3-none-any.whl", hash = "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b"}, + {file = "marshmallow-3.19.0.tar.gz", hash = "sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78"}, +] +marshmallow-enum = [ + {file = "marshmallow-enum-1.5.1.tar.gz", hash = "sha256:38e697e11f45a8e64b4a1e664000897c659b60aa57bfa18d44e226a9920b6e58"}, + {file = "marshmallow_enum-1.5.1-py2.py3-none-any.whl", hash = "sha256:57161ab3dbfde4f57adeb12090f39592e992b9c86d206d02f6bd03ebec60f072"}, +] +multidict = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] +mypy-extensions = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] +numpy = [ + {file = "numpy-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d"}, + {file = "numpy-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5"}, + {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253"}, + {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978"}, + {file = "numpy-1.24.2-cp310-cp310-win32.whl", hash = "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9"}, + {file = "numpy-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0"}, + {file = "numpy-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a"}, + {file = "numpy-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0"}, + {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281"}, + {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910"}, + {file = "numpy-1.24.2-cp311-cp311-win32.whl", hash = "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95"}, + {file = "numpy-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04"}, + {file = "numpy-1.24.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2"}, + {file = "numpy-1.24.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5"}, + {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a"}, + {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96"}, + {file = "numpy-1.24.2-cp38-cp38-win32.whl", hash = "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d"}, + {file = "numpy-1.24.2-cp38-cp38-win_amd64.whl", hash = "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756"}, + {file = "numpy-1.24.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a"}, + {file = "numpy-1.24.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f"}, + {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb"}, + {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780"}, + {file = "numpy-1.24.2-cp39-cp39-win32.whl", hash = "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468"}, + {file = "numpy-1.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5"}, + {file = "numpy-1.24.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d"}, + {file = "numpy-1.24.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa"}, + {file = "numpy-1.24.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f"}, + {file = "numpy-1.24.2.tar.gz", hash = "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22"}, +] +openai = [ + {file = "openai-0.26.5.tar.gz", hash = "sha256:2882a59c67ae33c2716a04389a6e6680d061f073424953732f917fde219addfd"}, +] +packaging = [ + {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, + {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, +] +pathspec = [ + {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, + {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, +] +platformdirs = [ + {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, + {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, +] +pydantic = [ + {file = "pydantic-1.10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5635de53e6686fe7a44b5cf25fcc419a0d5e5c1a1efe73d49d48fe7586db854"}, + {file = "pydantic-1.10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6dc1cc241440ed7ca9ab59d9929075445da6b7c94ced281b3dd4cfe6c8cff817"}, + {file = "pydantic-1.10.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51bdeb10d2db0f288e71d49c9cefa609bca271720ecd0c58009bd7504a0c464c"}, + {file = "pydantic-1.10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78cec42b95dbb500a1f7120bdf95c401f6abb616bbe8785ef09887306792e66e"}, + {file = "pydantic-1.10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8775d4ef5e7299a2f4699501077a0defdaac5b6c4321173bcb0f3c496fbadf85"}, + {file = "pydantic-1.10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:572066051eeac73d23f95ba9a71349c42a3e05999d0ee1572b7860235b850cc6"}, + {file = "pydantic-1.10.4-cp310-cp310-win_amd64.whl", hash = "sha256:7feb6a2d401f4d6863050f58325b8d99c1e56f4512d98b11ac64ad1751dc647d"}, + {file = "pydantic-1.10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:39f4a73e5342b25c2959529f07f026ef58147249f9b7431e1ba8414a36761f53"}, + {file = "pydantic-1.10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:983e720704431a6573d626b00662eb78a07148c9115129f9b4351091ec95ecc3"}, + {file = "pydantic-1.10.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d52162fe6b2b55964fbb0af2ee58e99791a3138588c482572bb6087953113a"}, + {file = "pydantic-1.10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdf8d759ef326962b4678d89e275ffc55b7ce59d917d9f72233762061fd04a2d"}, + {file = "pydantic-1.10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05a81b006be15655b2a1bae5faa4280cf7c81d0e09fcb49b342ebf826abe5a72"}, + {file = "pydantic-1.10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d88c4c0e5c5dfd05092a4b271282ef0588e5f4aaf345778056fc5259ba098857"}, + {file = "pydantic-1.10.4-cp311-cp311-win_amd64.whl", hash = "sha256:6a05a9db1ef5be0fe63e988f9617ca2551013f55000289c671f71ec16f4985e3"}, + {file = "pydantic-1.10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:887ca463c3bc47103c123bc06919c86720e80e1214aab79e9b779cda0ff92a00"}, + {file = "pydantic-1.10.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdf88ab63c3ee282c76d652fc86518aacb737ff35796023fae56a65ced1a5978"}, + {file = "pydantic-1.10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a48f1953c4a1d9bd0b5167ac50da9a79f6072c63c4cef4cf2a3736994903583e"}, + {file = "pydantic-1.10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a9f2de23bec87ff306aef658384b02aa7c32389766af3c5dee9ce33e80222dfa"}, + {file = "pydantic-1.10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:cd8702c5142afda03dc2b1ee6bc358b62b3735b2cce53fc77b31ca9f728e4bc8"}, + {file = "pydantic-1.10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6e7124d6855b2780611d9f5e1e145e86667eaa3bd9459192c8dc1a097f5e9903"}, + {file = "pydantic-1.10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b53e1d41e97063d51a02821b80538053ee4608b9a181c1005441f1673c55423"}, + {file = "pydantic-1.10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:55b1625899acd33229c4352ce0ae54038529b412bd51c4915349b49ca575258f"}, + {file = "pydantic-1.10.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:301d626a59edbe5dfb48fcae245896379a450d04baeed50ef40d8199f2733b06"}, + {file = "pydantic-1.10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6f9d649892a6f54a39ed56b8dfd5e08b5f3be5f893da430bed76975f3735d15"}, + {file = "pydantic-1.10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d7b5a3821225f5c43496c324b0d6875fde910a1c2933d726a743ce328fbb2a8c"}, + {file = "pydantic-1.10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f2f7eb6273dd12472d7f218e1fef6f7c7c2f00ac2e1ecde4db8824c457300416"}, + {file = "pydantic-1.10.4-cp38-cp38-win_amd64.whl", hash = "sha256:4b05697738e7d2040696b0a66d9f0a10bec0efa1883ca75ee9e55baf511909d6"}, + {file = "pydantic-1.10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a9a6747cac06c2beb466064dda999a13176b23535e4c496c9d48e6406f92d42d"}, + {file = "pydantic-1.10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb992a1ef739cc7b543576337bebfc62c0e6567434e522e97291b251a41dad7f"}, + {file = "pydantic-1.10.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:990406d226dea0e8f25f643b370224771878142155b879784ce89f633541a024"}, + {file = "pydantic-1.10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e82a6d37a95e0b1b42b82ab340ada3963aea1317fd7f888bb6b9dfbf4fff57c"}, + {file = "pydantic-1.10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9193d4f4ee8feca58bc56c8306bcb820f5c7905fd919e0750acdeeeef0615b28"}, + {file = "pydantic-1.10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2b3ce5f16deb45c472dde1a0ee05619298c864a20cded09c4edd820e1454129f"}, + {file = "pydantic-1.10.4-cp39-cp39-win_amd64.whl", hash = "sha256:9cbdc268a62d9a98c56e2452d6c41c0263d64a2009aac69246486f01b4f594c4"}, + {file = "pydantic-1.10.4-py3-none-any.whl", hash = "sha256:4948f264678c703f3877d1c8877c4e3b2e12e549c57795107f08cf70c6ec7774"}, + {file = "pydantic-1.10.4.tar.gz", hash = "sha256:b9a3859f24eb4e097502a3be1fb4b2abb79b6103dd9e2e0edb70613a4459a648"}, +] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +requests = [ + {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, + {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, +] +sniffio = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] +sqlalchemy = [ + {file = "SQLAlchemy-1.4.46-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:7001f16a9a8e06488c3c7154827c48455d1c1507d7228d43e781afbc8ceccf6d"}, + {file = "SQLAlchemy-1.4.46-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c7a46639ba058d320c9f53a81db38119a74b8a7a1884df44d09fbe807d028aaf"}, + {file = "SQLAlchemy-1.4.46-cp27-cp27m-win32.whl", hash = "sha256:c04144a24103135ea0315d459431ac196fe96f55d3213bfd6d39d0247775c854"}, + {file = "SQLAlchemy-1.4.46-cp27-cp27m-win_amd64.whl", hash = "sha256:7b81b1030c42b003fc10ddd17825571603117f848814a344d305262d370e7c34"}, + {file = "SQLAlchemy-1.4.46-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:939f9a018d2ad04036746e15d119c0428b1e557470361aa798e6e7d7f5875be0"}, + {file = "SQLAlchemy-1.4.46-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b7f4b6aa6e87991ec7ce0e769689a977776db6704947e562102431474799a857"}, + {file = "SQLAlchemy-1.4.46-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbf17ac9a61e7a3f1c7ca47237aac93cabd7f08ad92ac5b96d6f8dea4287fc1"}, + {file = "SQLAlchemy-1.4.46-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7f8267682eb41a0584cf66d8a697fef64b53281d01c93a503e1344197f2e01fe"}, + {file = "SQLAlchemy-1.4.46-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cb0ad8a190bc22d2112001cfecdec45baffdf41871de777239da6a28ed74b6"}, + {file = "SQLAlchemy-1.4.46-cp310-cp310-win32.whl", hash = "sha256:5f752676fc126edc1c4af0ec2e4d2adca48ddfae5de46bb40adbd3f903eb2120"}, + {file = "SQLAlchemy-1.4.46-cp310-cp310-win_amd64.whl", hash = "sha256:31de1e2c45e67a5ec1ecca6ec26aefc299dd5151e355eb5199cd9516b57340be"}, + {file = "SQLAlchemy-1.4.46-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d68e1762997bfebf9e5cf2a9fd0bcf9ca2fdd8136ce7b24bbd3bbfa4328f3e4a"}, + {file = "SQLAlchemy-1.4.46-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d112b0f3c1bc5ff70554a97344625ef621c1bfe02a73c5d97cac91f8cd7a41e"}, + {file = "SQLAlchemy-1.4.46-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69fac0a7054d86b997af12dc23f581cf0b25fb1c7d1fed43257dee3af32d3d6d"}, + {file = "SQLAlchemy-1.4.46-cp311-cp311-win32.whl", hash = "sha256:887865924c3d6e9a473dc82b70977395301533b3030d0f020c38fd9eba5419f2"}, + {file = "SQLAlchemy-1.4.46-cp311-cp311-win_amd64.whl", hash = "sha256:984ee13543a346324319a1fb72b698e521506f6f22dc37d7752a329e9cd00a32"}, + {file = "SQLAlchemy-1.4.46-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:9167d4227b56591a4cc5524f1b79ccd7ea994f36e4c648ab42ca995d28ebbb96"}, + {file = "SQLAlchemy-1.4.46-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d61e9ecc849d8d44d7f80894ecff4abe347136e9d926560b818f6243409f3c86"}, + {file = "SQLAlchemy-1.4.46-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3ec187acf85984263299a3f15c34a6c0671f83565d86d10f43ace49881a82718"}, + {file = "SQLAlchemy-1.4.46-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9883f5fae4fd8e3f875adc2add69f8b945625811689a6c65866a35ee9c0aea23"}, + {file = "SQLAlchemy-1.4.46-cp36-cp36m-win32.whl", hash = "sha256:535377e9b10aff5a045e3d9ada8a62d02058b422c0504ebdcf07930599890eb0"}, + {file = "SQLAlchemy-1.4.46-cp36-cp36m-win_amd64.whl", hash = "sha256:18cafdb27834fa03569d29f571df7115812a0e59fd6a3a03ccb0d33678ec8420"}, + {file = "SQLAlchemy-1.4.46-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:a1ad90c97029cc3ab4ffd57443a20fac21d2ec3c89532b084b073b3feb5abff3"}, + {file = "SQLAlchemy-1.4.46-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4847f4b1d822754e35707db913396a29d874ee77b9c3c3ef3f04d5a9a6209618"}, + {file = "SQLAlchemy-1.4.46-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c5a99282848b6cae0056b85da17392a26b2d39178394fc25700bcf967e06e97a"}, + {file = "SQLAlchemy-1.4.46-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4b1cc7835b39835c75cf7c20c926b42e97d074147c902a9ebb7cf2c840dc4e2"}, + {file = "SQLAlchemy-1.4.46-cp37-cp37m-win32.whl", hash = "sha256:c522e496f9b9b70296a7675272ec21937ccfc15da664b74b9f58d98a641ce1b6"}, + {file = "SQLAlchemy-1.4.46-cp37-cp37m-win_amd64.whl", hash = "sha256:ae067ab639fa499f67ded52f5bc8e084f045d10b5ac7bb928ae4ca2b6c0429a5"}, + {file = "SQLAlchemy-1.4.46-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:e3c1808008124850115a3f7e793a975cfa5c8a26ceeeb9ff9cbb4485cac556df"}, + {file = "SQLAlchemy-1.4.46-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d164df3d83d204c69f840da30b292ac7dc54285096c6171245b8d7807185aa"}, + {file = "SQLAlchemy-1.4.46-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b33ffbdbbf5446cf36cd4cc530c9d9905d3c2fe56ed09e25c22c850cdb9fac92"}, + {file = "SQLAlchemy-1.4.46-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d94682732d1a0def5672471ba42a29ff5e21bb0aae0afa00bb10796fc1e28dd"}, + {file = "SQLAlchemy-1.4.46-cp38-cp38-win32.whl", hash = "sha256:f8cb80fe8d14307e4124f6fad64dfd87ab749c9d275f82b8b4ec84c84ecebdbe"}, + {file = "SQLAlchemy-1.4.46-cp38-cp38-win_amd64.whl", hash = "sha256:07e48cbcdda6b8bc7a59d6728bd3f5f574ffe03f2c9fb384239f3789c2d95c2e"}, + {file = "SQLAlchemy-1.4.46-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:1b1e5e96e2789d89f023d080bee432e2fef64d95857969e70d3cadec80bd26f0"}, + {file = "SQLAlchemy-1.4.46-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3714e5b33226131ac0da60d18995a102a17dddd42368b7bdd206737297823ad"}, + {file = "SQLAlchemy-1.4.46-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:955162ad1a931fe416eded6bb144ba891ccbf9b2e49dc7ded39274dd9c5affc5"}, + {file = "SQLAlchemy-1.4.46-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6e4cb5c63f705c9d546a054c60d326cbde7421421e2d2565ce3e2eee4e1a01f"}, + {file = "SQLAlchemy-1.4.46-cp39-cp39-win32.whl", hash = "sha256:51e1ba2884c6a2b8e19109dc08c71c49530006c1084156ecadfaadf5f9b8b053"}, + {file = "SQLAlchemy-1.4.46-cp39-cp39-win_amd64.whl", hash = "sha256:315676344e3558f1f80d02535f410e80ea4e8fddba31ec78fe390eff5fb8f466"}, + {file = "SQLAlchemy-1.4.46.tar.gz", hash = "sha256:6913b8247d8a292ef8315162a51931e2b40ce91681f1b6f18f697045200c4a30"}, +] +starlette = [ + {file = "starlette-0.24.0-py3-none-any.whl", hash = "sha256:75e2b24d71ff4f7cb9a3338f83d234c2d4135bf80f52aeb105c02a01d72a5df1"}, + {file = "starlette-0.24.0.tar.gz", hash = "sha256:7925947f177a19e906c6ace10f07c64c4f9fdf7d509caaac6589f7cc0cfd95f3"}, +] +tenacity = [ + {file = "tenacity-8.2.1-py3-none-any.whl", hash = "sha256:dd1b769ca7002fda992322939feca5bee4fa11f39146b0af14e0b8d9f27ea854"}, + {file = "tenacity-8.2.1.tar.gz", hash = "sha256:c7bb4b86425b977726a7b49971542d4f67baf72096597d283f3ffd01f33b92df"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +tqdm = [ + {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"}, + {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, +] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] +typing-inspect = [ + {file = "typing_inspect-0.8.0-py3-none-any.whl", hash = "sha256:5fbf9c1e65d4fa01e701fe12a5bca6c6e08a4ffd5bc60bfac028253a447c5188"}, + {file = "typing_inspect-0.8.0.tar.gz", hash = "sha256:8b1ff0c400943b6145df8119c41c244ca8207f1f10c9c057aeed1560e4806e3d"}, +] +urllib3 = [ + {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, + {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, +] +uvicorn = [ + {file = "uvicorn-0.20.0-py3-none-any.whl", hash = "sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd"}, + {file = "uvicorn-0.20.0.tar.gz", hash = "sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8"}, +] +yarl = [ + {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5"}, + {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863"}, + {file = "yarl-1.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe"}, + {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e"}, + {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996"}, + {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef"}, + {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8"}, + {file = "yarl-1.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6"}, + {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146"}, + {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f"}, + {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826"}, + {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3"}, + {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80"}, + {file = "yarl-1.8.2-cp310-cp310-win32.whl", hash = "sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42"}, + {file = "yarl-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574"}, + {file = "yarl-1.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634"}, + {file = "yarl-1.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd"}, + {file = "yarl-1.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581"}, + {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a"}, + {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf"}, + {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee"}, + {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76"}, + {file = "yarl-1.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b"}, + {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a"}, + {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6"}, + {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4"}, + {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c"}, + {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2"}, + {file = "yarl-1.8.2-cp311-cp311-win32.whl", hash = "sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b"}, + {file = "yarl-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c"}, + {file = "yarl-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef"}, + {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1"}, + {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077"}, + {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2"}, + {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89"}, + {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c"}, + {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0"}, + {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739"}, + {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b"}, + {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7"}, + {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37"}, + {file = "yarl-1.8.2-cp37-cp37m-win32.whl", hash = "sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89"}, + {file = "yarl-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5"}, + {file = "yarl-1.8.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1"}, + {file = "yarl-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918"}, + {file = "yarl-1.8.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229"}, + {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e"}, + {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e"}, + {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1"}, + {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3"}, + {file = "yarl-1.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901"}, + {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0"}, + {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05"}, + {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d"}, + {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c"}, + {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946"}, + {file = "yarl-1.8.2-cp38-cp38-win32.whl", hash = "sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165"}, + {file = "yarl-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f"}, + {file = "yarl-1.8.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8"}, + {file = "yarl-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf"}, + {file = "yarl-1.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77"}, + {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87"}, + {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0"}, + {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2"}, + {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08"}, + {file = "yarl-1.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d"}, + {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951"}, + {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220"}, + {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06"}, + {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516"}, + {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588"}, + {file = "yarl-1.8.2-cp39-cp39-win32.whl", hash = "sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83"}, + {file = "yarl-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778"}, + {file = "yarl-1.8.2.tar.gz", hash = "sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..80cf3c519 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,22 @@ +[tool.poetry] +name = "expert-backend" +version = "0.1.0" +description = "" +authors = ["Ibis Prevedello "] +readme = "README.md" +packages = [{include = "expert_backend"}] + +[tool.poetry.dependencies] +python = "^3.10" +openai = "^0.26.5" +fastapi = "^0.91.0" +langchain = {path = "../langchain", develop = true} +uvicorn = "^0.20.0" + + +[tool.poetry.group.dev.dependencies] +black = "^23.1.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/src/list.py b/src/list.py new file mode 100644 index 000000000..ccd3fe854 --- /dev/null +++ b/src/list.py @@ -0,0 +1,50 @@ +from fastapi import APIRouter + +from langchain import chains +from langchain import agents +from langchain import prompts +from langchain import llms +from langchain import utilities +from langchain.chains.conversation import memory + + +# build router +router = APIRouter( + prefix="/list", + tags=["list"], +) + + +@router.get("/") +def read_items(): + return ["chains", "agents", "prompts", "llms", "utilities", "memories"] + + +@router.get("/chains") +def chains(): + return chains.__all__ + + +@router.get("/agents") +def agents(): + return agents.__all__ + + +@router.get("/prompts") +def prompts(): + return prompts.__all__ + + +@router.get("/llms") +def llms(): + return llms.__all__ + + +@router.get("/utilities") +def utilities(): + return utilities.__all__ + + +@router.get("/memories") +def memories(): + return memory.__all__ diff --git a/src/main.py b/src/main.py index a8e95df49..9586d6f65 100644 --- a/src/main.py +++ b/src/main.py @@ -1,11 +1,13 @@ from fastapi import FastAPI -from endpoints import router +from endpoints import router as endpoints_router +from list import router as list_router def create_app(): """Create the FastAPI app and include the router.""" app = FastAPI() - app.include_router(router) + app.include_router(endpoints_router) + app.include_router(list_router) return app From 95e99899cc9d109c71fb88d8612031f907522e7d Mon Sep 17 00:00:00 2001 From: Ibis Prevedello Date: Sat, 11 Feb 2023 20:33:00 -0300 Subject: [PATCH 07/18] feat: add template --- src/main.py | 2 ++ src/templates.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 src/templates.py diff --git a/src/main.py b/src/main.py index 9586d6f65..40b0cf19c 100644 --- a/src/main.py +++ b/src/main.py @@ -1,6 +1,7 @@ from fastapi import FastAPI from endpoints import router as endpoints_router from list import router as list_router +from templates import router as templates_router def create_app(): @@ -8,6 +9,7 @@ def create_app(): app = FastAPI() app.include_router(endpoints_router) app.include_router(list_router) + app.include_router(templates_router) return app diff --git a/src/templates.py b/src/templates.py new file mode 100644 index 000000000..1f32bdc16 --- /dev/null +++ b/src/templates.py @@ -0,0 +1,87 @@ +from fastapi import APIRouter + +from langchain import chains +from langchain import agents +from langchain import prompts +from langchain import llms +from langchain import utilities +from langchain.chains.conversation import memory + + +# build router +router = APIRouter( + prefix="/templates", + tags=["templates"], +) + + +@router.get("/chain") +def chain(name: str): + # Raise error if name is not in chains + if name not in chains.__all__: + raise Exception(f"Prompt {name} not found.") + _class = getattr(chains, name) + return { + name: {name: value for (name, value) in value.__repr_args__() if name != "name"} + for name, value in _class.__dict__["__fields__"].items() + } + + +@router.get("/agent") +def agent(name: str): + # Raise error if name is not in agents + if name not in agents.__all__: + raise Exception(f"Prompt {name} not found.") + _class = getattr(agents, name) + return { + name: {name: value for (name, value) in value.__repr_args__() if name != "name"} + for name, value in _class.__dict__["__fields__"].items() + } + + +@router.get("/prompt") +def prompt(name: str): + # Raise error if name is not in prompts + if name not in prompts.__all__: + raise Exception(f"Prompt {name} not found.") + _class = getattr(prompts, name) + return { + name: {name: value for (name, value) in value.__repr_args__() if name != "name"} + for name, value in _class.__dict__["__fields__"].items() + } + + +@router.get("/llm") +def llm(name: str): + # Raise error if name is not in llms + if name not in llms.__all__: + raise Exception(f"Prompt {name} not found.") + _class = getattr(llms, name) + return { + name: {name: value for (name, value) in value.__repr_args__() if name != "name"} + for name, value in _class.__dict__["__fields__"].items() + } + + +@router.get("/utility") +def utility(name: str): + # Raise error if name is not in utilities + if name not in utilities.__all__: + raise Exception(f"Prompt {name} not found.") + _class = getattr(utilities, name) + return { + name: {name: value for (name, value) in value.__repr_args__() if name != "name"} + for name, value in _class.__dict__["__fields__"].items() + } + + +@router.get("/memory") +def memory(name: str): + # Raise error if name is not in memory + if name not in memory.__all__: + raise Exception(f"Prompt {name} not found.") + _class = getattr(memory, name) + return { + name: {name: value for (name, value) in value.__repr_args__() if name != "name"} + for name, value in _class.__dict__["__fields__"].items() + } From d7798912901cfce56d3db8e1419edeb3832b7140 Mon Sep 17 00:00:00 2001 From: Ibis Prevedello Date: Sun, 12 Feb 2023 21:04:32 -0300 Subject: [PATCH 08/18] feat: add tools and improve code --- Dockerfile | 59 ++++++++++++++++++++++++++ poetry.lock | 35 +++++++++++++++- pyproject.toml | 6 +-- src/{main.py => app.py} | 5 ++- src/list.py | 93 +++++++++++++++++++++++++++++++++-------- src/templates.py | 70 ++++++++++++++++++++++++------- src/util.py | 29 +++++++++++++ 7 files changed, 257 insertions(+), 40 deletions(-) create mode 100644 Dockerfile rename src/{main.py => app.py} (86%) create mode 100644 src/util.py diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..b27a20173 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,59 @@ +# `python-base` sets up all our shared environment variables +FROM python:3.10-slim + +# python +ENV PYTHONUNBUFFERED=1 \ + # prevents python creating .pyc files + PYTHONDONTWRITEBYTECODE=1 \ + \ + # pip + PIP_NO_CACHE_DIR=off \ + PIP_DISABLE_PIP_VERSION_CHECK=on \ + PIP_DEFAULT_TIMEOUT=100 \ + \ + # poetry + # https://python-poetry.org/docs/configuration/#using-environment-variables + POETRY_VERSION=1.3.2 \ + # make poetry install to this location + POETRY_HOME="/opt/poetry" \ + # make poetry create the virtual environment in the project's root + # it gets named `.venv` + POETRY_VIRTUALENVS_IN_PROJECT=true \ + # do not ask any interactive question + POETRY_NO_INTERACTION=1 \ + \ + # paths + # this is where our requirements + virtual environment will live + PYSETUP_PATH="/opt/pysetup" \ + VENV_PATH="/opt/pysetup/.venv" + +# prepend poetry and venv to path +ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" + +RUN apt-get update \ + && apt-get install --no-install-recommends -y \ + # deps for installing poetry + curl \ + # deps for building python deps + build-essential libpq-dev + +# install poetry - respects $POETRY_VERSION & $POETRY_HOME +RUN curl -sSL https://install.python-poetry.org | python3 - + +# copy project requirement files here to ensure they will be cached. +WORKDIR $PYSETUP_PATH +COPY poetry.lock pyproject.toml ./ + +# install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally +RUN poetry install --only-root +RUN poetry add "git+https://github.com/ibiscp/langchain.git@ibis" + +WORKDIR /app + +ENV PATH="/opt/pysetup/.venv/bin:$PATH" + +COPY src/ . + +EXPOSE 80 + +CMD [ "uvicorn", "--host", "0.0.0.0", "--port", "80", "app:app" ] diff --git a/poetry.lock b/poetry.lock index 60d778118..884e04f9a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -69,6 +69,21 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope.interface"] tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] +[[package]] +name = "beautifulsoup4" +version = "4.11.2" +description = "Screen-scraping library" +category = "main" +optional = false +python-versions = ">=3.6.0" + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + [[package]] name = "black" version = "23.1.0" @@ -201,7 +216,7 @@ python-versions = ">=3.5" [[package]] name = "langchain" -version = "0.0.82" +version = "0.0.84" description = "Building applications with LLMs through composability" category = "main" optional = false @@ -374,6 +389,14 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "soupsieve" +version = "2.3.2.post1" +description = "A modern CSS selector implementation for Beautiful Soup." +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "sqlalchemy" version = "1.4.46" @@ -519,7 +542,7 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "3d1426b69c1a6b52d866add9395f7731b107a08315964dccb05534aec63a079d" +content-hash = "0f7ccdac03322e997f334a0a983fece4c7b8b1c90bed4f3a108ca4a3982ab4c7" [metadata.files] aiohttp = [ @@ -627,6 +650,10 @@ attrs = [ {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, ] +beautifulsoup4 = [ + {file = "beautifulsoup4-4.11.2-py3-none-any.whl", hash = "sha256:0e79446b10b3ecb499c1556f7e228a53e64a2bfcebd455f370d8927cb5b59e39"}, + {file = "beautifulsoup4-4.11.2.tar.gz", hash = "sha256:bc4bdda6717de5a2987436fb8d72f45dc90dd856bdfd512a1314ce90349a0106"}, +] black = [ {file = "black-23.1.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221"}, {file = "black-23.1.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26"}, @@ -1046,6 +1073,10 @@ sniffio = [ {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] +soupsieve = [ + {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, + {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, +] sqlalchemy = [ {file = "SQLAlchemy-1.4.46-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:7001f16a9a8e06488c3c7154827c48455d1c1507d7228d43e781afbc8ceccf6d"}, {file = "SQLAlchemy-1.4.46-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c7a46639ba058d320c9f53a81db38119a74b8a7a1884df44d09fbe807d028aaf"}, diff --git a/pyproject.toml b/pyproject.toml index 80cf3c519..0404d9313 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,17 +1,17 @@ [tool.poetry] name = "expert-backend" -version = "0.1.0" +version = "0.0.3" description = "" authors = ["Ibis Prevedello "] readme = "README.md" -packages = [{include = "expert_backend"}] [tool.poetry.dependencies] python = "^3.10" openai = "^0.26.5" fastapi = "^0.91.0" -langchain = {path = "../langchain", develop = true} uvicorn = "^0.20.0" +beautifulsoup4 = "^4.11.2" +langchain = {path = "../langchain", develop = true} [tool.poetry.group.dev.dependencies] diff --git a/src/main.py b/src/app.py similarity index 86% rename from src/main.py rename to src/app.py index 40b0cf19c..76f4974b9 100644 --- a/src/main.py +++ b/src/app.py @@ -13,8 +13,9 @@ def create_app(): return app +app = create_app() + if __name__ == "__main__": import uvicorn - app = create_app() - uvicorn.run(app) + uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/src/list.py b/src/list.py index ccd3fe854..40d9452be 100644 --- a/src/list.py +++ b/src/list.py @@ -5,7 +5,17 @@ from langchain import agents from langchain import prompts from langchain import llms from langchain import utilities -from langchain.chains.conversation import memory +from langchain.chains.conversation import memory as memories +from langchain import document_loaders +from langchain import vectorstores +from langchain import docstore +from langchain.agents.load_tools import ( + _BASE_TOOLS, + _LLM_TOOLS, + _EXTRA_LLM_TOOLS, + _EXTRA_OPTIONAL_TOOLS, +) +import util # build router @@ -17,34 +27,83 @@ router = APIRouter( @router.get("/") def read_items(): - return ["chains", "agents", "prompts", "llms", "utilities", "memories"] + return [ + "chains", + "agents", + "prompts", + "llms", + "utilities", + "memories", + "document_loaders", + "vectorstores", + "docstores", + "tools", + ] @router.get("/chains") -def chains(): - return chains.__all__ +def list_chains(): + """List all chain types""" + return list(chains.loading.type_to_loader_dict.keys()) @router.get("/agents") -def agents(): - return agents.__all__ +def list_agents(): + """List all agent types""" + return list(agents.loading.AGENT_TO_CLASS.keys()) @router.get("/prompts") -def prompts(): - return prompts.__all__ +def list_prompts(): + """List all prompt types""" + return list(prompts.loading.type_to_loader_dict.keys()) @router.get("/llms") -def llms(): - return llms.__all__ - - -@router.get("/utilities") -def utilities(): - return utilities.__all__ +def list_llms(): + """List all llm types""" + return list(llms.type_to_cls_dict.keys()) @router.get("/memories") -def memories(): - return memory.__all__ +def list_memories(): + """List all memory types""" + return list(memories.type_to_cls_dict.keys()) + + +@router.get("/utilities") +def list_utilities(): + """List all utility types""" + return list(utilities.__all__) + + +@router.get("/document_loaders") +def list_document_loaders(): + """List all document loader types""" + return list(document_loaders.__all__) + + +@router.get("/vectorstores") +def list_vectorstores(): + """List all vector store types""" + return list(vectorstores.__all__) + + +@router.get("/docstores") +def list_docstores(): + """List all document store types""" + return list(docstore.__all__) + + +@router.get("/tools") +def list_tools(): + """List all load tools""" + + merged_dict = { + **_BASE_TOOLS, + **_LLM_TOOLS, + **{k: v[0] for k, v in _EXTRA_LLM_TOOLS.items()}, + **{k: v[0] for k, v in _EXTRA_OPTIONAL_TOOLS.items()}, + } + + return {k: util.get_tool_params(v) for k, v in merged_dict.items()} diff --git a/src/templates.py b/src/templates.py index 1f32bdc16..8db140a6a 100644 --- a/src/templates.py +++ b/src/templates.py @@ -5,8 +5,16 @@ from langchain import agents from langchain import prompts from langchain import llms from langchain import utilities -from langchain.chains.conversation import memory - +from langchain.chains.conversation import memory as memories +from langchain import document_loaders +from langchain.agents.load_tools import ( + get_all_tool_names, + _BASE_TOOLS, + _LLM_TOOLS, + _EXTRA_LLM_TOOLS, + _EXTRA_OPTIONAL_TOOLS, +) +import util # build router router = APIRouter( @@ -18,48 +26,48 @@ router = APIRouter( @router.get("/chain") def chain(name: str): # Raise error if name is not in chains - if name not in chains.__all__: + if name not in chains.loading.type_to_loader_dict.keys(): raise Exception(f"Prompt {name} not found.") - _class = getattr(chains, name) + _class = chains.loading.type_to_loader_dict[name].__annotations__["return"] return { name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__dict__["__fields__"].items() + for name, value in _class.__fields__.items() } @router.get("/agent") def agent(name: str): # Raise error if name is not in agents - if name not in agents.__all__: + if name not in agents.loading.AGENT_TO_CLASS.keys(): raise Exception(f"Prompt {name} not found.") - _class = getattr(agents, name) + _class = agents.loading.AGENT_TO_CLASS[name] return { name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__dict__["__fields__"].items() + for name, value in _class.__fields__.items() } @router.get("/prompt") def prompt(name: str): # Raise error if name is not in prompts - if name not in prompts.__all__: + if name not in prompts.loading.type_to_loader_dict.keys(): raise Exception(f"Prompt {name} not found.") - _class = getattr(prompts, name) + _class = prompts.loading.type_to_loader_dict[name].__annotations__["return"] return { name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__dict__["__fields__"].items() + for name, value in _class.__fields__.items() } @router.get("/llm") def llm(name: str): # Raise error if name is not in llms - if name not in llms.__all__: + if name not in llms.type_to_cls_dict.keys(): raise Exception(f"Prompt {name} not found.") - _class = getattr(llms, name) + _class = llms.type_to_cls_dict[name] return { name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__dict__["__fields__"].items() + for name, value in _class.__fields__.items() } @@ -78,10 +86,40 @@ def utility(name: str): @router.get("/memory") def memory(name: str): # Raise error if name is not in memory - if name not in memory.__all__: + if name not in memories.type_to_cls_dict.keys(): raise Exception(f"Prompt {name} not found.") - _class = getattr(memory, name) + _class = memories.type_to_cls_dict[name] return { name: {name: value for (name, value) in value.__repr_args__() if name != "name"} for name, value in _class.__dict__["__fields__"].items() } + + +@router.get("/document_loader") +def document_loader(name: str): + # Raise error if name is not in document_loader + if name not in document_loaders.__all__: + raise Exception(f"Prompt {name} not found.") + _class = getattr(document_loaders, name) + return { + name: {name: value for (name, value) in value.__repr_args__() if name != "name"} + for name, value in _class.__fields__.items() + } + + +@router.get("/tool") +def tool(name: str): + # Raise error if name is not in tools + if name not in get_all_tool_names(): + raise Exception(f"Tool {name} not found.") + + if name in _BASE_TOOLS: + return {"parameters": []} + elif name in _LLM_TOOLS: + return {"parameters": ["llm"]} + elif name in _EXTRA_LLM_TOOLS: + _, extra_keys = _EXTRA_LLM_TOOLS[name] + return {"parameters": ["llm"] + extra_keys} + elif name in _EXTRA_OPTIONAL_TOOLS: + _, extra_keys = _EXTRA_OPTIONAL_TOOLS[name] + return {"parameters": extra_keys} diff --git a/src/util.py b/src/util.py new file mode 100644 index 000000000..bb5184f3e --- /dev/null +++ b/src/util.py @@ -0,0 +1,29 @@ +import ast +import inspect + + +def get_tool_params(func): + # Parse the function code into an abstract syntax tree + tree = ast.parse(inspect.getsource(func)) + + # Iterate over the statements in the abstract syntax tree + for node in ast.walk(tree): + # Find the first return statement + if isinstance(node, ast.Return): + tool = node.value + if isinstance(tool, ast.Call) and tool.func.id == "Tool": + if tool.keywords: + tool_params = {} + for keyword in tool.keywords: + if keyword.arg == "name": + tool_params["name"] = ast.literal_eval(keyword.value) + elif keyword.arg == "description": + tool_params["description"] = ast.literal_eval(keyword.value) + return tool_params + return { + "name": ast.literal_eval(tool.args[0]), + "description": ast.literal_eval(tool.args[2]), + } + + # Return None if no return statement was found + return None From c0ad9a383f663540cff1d7b8b698f9ab789e5421 Mon Sep 17 00:00:00 2001 From: Ibis Prevedello Date: Thu, 16 Feb 2023 10:20:43 -0300 Subject: [PATCH 09/18] feat: add docstring --- .gitignore | 1 + build_and_push | 5 + poetry.lock | 713 ++++++++++- pyproject.toml | 1 + response.json | 3012 ++++++++++++++++++++++++++++++++++++++++++++++ src/app.py | 4 +- src/endpoints.py | 67 +- src/list.py | 57 +- src/signature.py | 198 +++ src/templates.py | 125 -- src/util.py | 145 +++ 11 files changed, 4156 insertions(+), 172 deletions(-) create mode 100755 build_and_push create mode 100644 response.json create mode 100644 src/signature.py delete mode 100644 src/templates.py diff --git a/.gitignore b/.gitignore index b6e47617d..314d77847 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ __pycache__/ *.py[cod] *$py.class +notebooks # C extensions *.so diff --git a/build_and_push b/build_and_push new file mode 100755 index 000000000..30d8501d5 --- /dev/null +++ b/build_and_push @@ -0,0 +1,5 @@ +#! /bin/bash + +poetry remove langchain +docker build -t ibiscp/expert:v0.0.6 . && docker push ibiscp/expert:v0.0.6 +poetry add --editable ../langchain diff --git a/poetry.lock b/poetry.lock index 884e04f9a..6a37adf87 100644 --- a/poetry.lock +++ b/poetry.lock @@ -46,6 +46,28 @@ doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] trio = ["trio (>=0.16,<0.22)"] +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "asttokens" +version = "2.2.1" +description = "Annotate AST trees with source code positions" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +six = "*" + +[package.extras] +test = ["astroid", "pytest"] + [[package]] name = "async-timeout" version = "4.0.2" @@ -69,6 +91,14 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope.interface"] tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "beautifulsoup4" version = "4.11.2" @@ -114,6 +144,17 @@ category = "main" optional = false python-versions = ">=3.6" +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +pycparser = "*" + [[package]] name = "charset-normalizer" version = "2.1.1" @@ -144,6 +185,20 @@ category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +[[package]] +name = "comm" +version = "0.1.2" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +traitlets = ">=5.3" + +[package.extras] +test = ["pytest"] + [[package]] name = "dataclasses-json" version = "0.5.7" @@ -160,6 +215,33 @@ typing-inspect = ">=0.4.0" [package.extras] dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest (>=6.2.3)", "simplejson", "types-dataclasses"] +[[package]] +name = "debugpy" +version = "1.6.6" +description = "An implementation of the Debug Adapter Protocol for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +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 = "*" + +[package.extras] +tests = ["asttokens", "littleutils", "pytest", "rich"] + [[package]] name = "fastapi" version = "0.91.0" @@ -214,9 +296,126 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "ipykernel" +version = "6.21.2" +description = "IPython Kernel for Jupyter" +category = "dev" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=20" +tornado = ">=6.1" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "8.10.0" +description = "IPython: Productive Interactive Computing" +category = "dev" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=3.0.30,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" + +[package.extras] +all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] + +[[package]] +name = "jedi" +version = "0.18.2" +description = "An autocompletion tool for Python that can be used for text editors." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +parso = ">=0.8.0,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jupyter-client" +version = "8.0.2" +description = "Jupyter protocol implementation and client libraries" +category = "dev" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = ">=5.3" + +[package.extras] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["codecov", "coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-core" +version = "5.2.0" +description = "Jupyter core package. A base package on which Jupyter projects rely." +category = "dev" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + [[package]] name = "langchain" -version = "0.0.84" +version = "0.0.86" description = "Building applications with LLMs through composability" category = "main" optional = false @@ -234,8 +433,8 @@ SQLAlchemy = "^1" tenacity = "^8.1.0" [package.extras] -all = ["beautifulsoup4 (>=4,<5)", "cohere (>=3,<4)", "elasticsearch (>=8,<9)", "faiss-cpu (>=1,<2)", "google-api-python-client (==2.70.0)", "google-search-results (>=2,<3)", "huggingface_hub (>=0,<1)", "jinja2 (>=3,<4)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "nltk (>=3,<4)", "openai (>=0,<1)", "pinecone-client (>=2,<3)", "pypdf (>=3.4.0,<4.0.0)", "qdrant-client (>=0.11.7,<0.12.0)", "redis (>=4,<5)", "sentence-transformers (>=2,<3)", "spacy (>=3,<4)", "tensorflow-text (>=2.11.0,<3.0.0)", "tiktoken (>=0,<1)", "torch (>=1,<2)", "transformers (>=4,<5)", "weaviate-client (>=3,<4)", "wikipedia (>=1,<2)", "wolframalpha (==5.0.0)"] -llms = ["cohere (>=3,<4)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (>=0,<1)", "torch (>=1,<2)", "transformers (>=4,<5)"] +all = ["anthropic (>=0.2.2,<0.3.0)", "beautifulsoup4 (>=4,<5)", "cohere (>=3,<4)", "elasticsearch (>=8,<9)", "faiss-cpu (>=1,<2)", "google-api-python-client (==2.70.0)", "google-search-results (>=2,<3)", "huggingface_hub (>=0,<1)", "jinja2 (>=3,<4)", "manifest-ml (>=0.0.1,<0.0.2)", "networkx (>=2.6.3,<3.0.0)", "nlpcloud (>=1,<2)", "nltk (>=3,<4)", "openai (>=0,<1)", "pinecone-client (>=2,<3)", "pypdf (>=3.4.0,<4.0.0)", "qdrant-client (>=0.11.7,<0.12.0)", "redis (>=4,<5)", "sentence-transformers (>=2,<3)", "spacy (>=3,<4)", "tensorflow-text (>=2.11.0,<3.0.0)", "tiktoken (>=0,<1)", "torch (>=1,<2)", "transformers (>=4,<5)", "weaviate-client (>=3,<4)", "wikipedia (>=1,<2)", "wolframalpha (==5.0.0)"] +llms = ["anthropic (>=0.2.2,<0.3.0)", "cohere (>=3,<4)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (>=0,<1)", "torch (>=1,<2)", "transformers (>=4,<5)"] [package.source] type = "directory" @@ -269,6 +468,17 @@ python-versions = "*" [package.dependencies] marshmallow = ">=2.0.0" +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +traitlets = "*" + [[package]] name = "multidict" version = "6.0.4" @@ -285,6 +495,14 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "nest-asyncio" +version = "1.5.6" +description = "Patch asyncio to allow nested event loops" +category = "dev" +optional = false +python-versions = ">=3.5" + [[package]] name = "numpy" version = "1.24.2" @@ -320,6 +538,18 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + [[package]] name = "pathspec" version = "0.11.0" @@ -328,6 +558,25 @@ category = "dev" optional = false python-versions = ">=3.7" +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "platformdirs" version = "3.0.0" @@ -340,6 +589,55 @@ python-versions = ">=3.7" docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +[[package]] +name = "prompt-toolkit" +version = "3.0.36" +description = "Library for building powerful interactive command lines in Python" +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.4" +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.*" + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +category = "dev" +optional = false +python-versions = "*" + +[package.extras] +tests = ["pytest"] + +[[package]] +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.*" + [[package]] name = "pydantic" version = "1.10.4" @@ -355,6 +653,36 @@ typing-extensions = ">=4.2.0" dotenv = ["python-dotenv (>=0.10.4)"] email = ["email-validator (>=1.0.3)"] +[[package]] +name = "pygments" +version = "2.14.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +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" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pywin32" +version = "305" +description = "Python for Window Extensions" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "pyyaml" version = "6.0" @@ -363,6 +691,17 @@ category = "main" optional = false python-versions = ">=3.6" +[[package]] +name = "pyzmq" +version = "25.0.0" +description = "Python bindings for 0MQ" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + [[package]] name = "requests" version = "2.28.2" @@ -381,6 +720,14 @@ urllib3 = ">=1.21.1,<1.27" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + [[package]] name = "sniffio" version = "1.3.0" @@ -429,6 +776,22 @@ postgresql-psycopg2cffi = ["psycopg2cffi"] pymysql = ["pymysql", "pymysql (<1)"] sqlcipher = ["sqlcipher3_binary"] +[[package]] +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 = "*" + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + [[package]] name = "starlette" version = "0.24.0" @@ -462,6 +825,14 @@ category = "dev" optional = false python-versions = ">=3.7" +[[package]] +name = "tornado" +version = "6.2" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "dev" +optional = false +python-versions = ">= 3.7" + [[package]] name = "tqdm" version = "4.64.1" @@ -479,6 +850,18 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "traitlets" +version = "5.9.0" +description = "Traitlets Python configuration system" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] + [[package]] name = "typing-extensions" version = "4.4.0" @@ -527,6 +910,14 @@ h11 = ">=0.8" [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 = "wcwidth" +version = "0.2.6" +description = "Measures the displayed width of unicode strings in a terminal" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "yarl" version = "1.8.2" @@ -542,7 +933,7 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "0f7ccdac03322e997f334a0a983fece4c7b8b1c90bed4f3a108ca4a3982ab4c7" +content-hash = "ffc4b17c403dab7f934d2c026b83757cc40066a79d64ab27842908b40b0bedeb" [metadata.files] aiohttp = [ @@ -642,6 +1033,14 @@ anyio = [ {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, ] +appnope = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] +asttokens = [ + {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, + {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, +] async-timeout = [ {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, @@ -650,6 +1049,10 @@ attrs = [ {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, ] +backcall = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] beautifulsoup4 = [ {file = "beautifulsoup4-4.11.2-py3-none-any.whl", hash = "sha256:0e79446b10b3ecb499c1556f7e228a53e64a2bfcebd455f370d8927cb5b59e39"}, {file = "beautifulsoup4-4.11.2.tar.gz", hash = "sha256:bc4bdda6717de5a2987436fb8d72f45dc90dd856bdfd512a1314ce90349a0106"}, @@ -685,6 +1088,72 @@ certifi = [ {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, ] +cffi = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] charset-normalizer = [ {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, @@ -697,10 +1166,42 @@ colorama = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +comm = [ + {file = "comm-0.1.2-py3-none-any.whl", hash = "sha256:9f3abf3515112fa7c55a42a6a5ab358735c9dccc8b5910a9d8e3ef5998130666"}, + {file = "comm-0.1.2.tar.gz", hash = "sha256:3e2f5826578e683999b93716285b3b1f344f157bf75fa9ce0a797564e742f062"}, +] dataclasses-json = [ {file = "dataclasses-json-0.5.7.tar.gz", hash = "sha256:c2c11bc8214fbf709ffc369d11446ff6945254a7f09128154a7620613d8fda90"}, {file = "dataclasses_json-0.5.7-py3-none-any.whl", hash = "sha256:bc285b5f892094c3a53d558858a88553dd6a61a11ab1a8128a0e554385dcc5dd"}, ] +debugpy = [ + {file = "debugpy-1.6.6-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:0ea1011e94416e90fb3598cc3ef5e08b0a4dd6ce6b9b33ccd436c1dffc8cd664"}, + {file = "debugpy-1.6.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dff595686178b0e75580c24d316aa45a8f4d56e2418063865c114eef651a982e"}, + {file = "debugpy-1.6.6-cp310-cp310-win32.whl", hash = "sha256:87755e173fcf2ec45f584bb9d61aa7686bb665d861b81faa366d59808bbd3494"}, + {file = "debugpy-1.6.6-cp310-cp310-win_amd64.whl", hash = "sha256:72687b62a54d9d9e3fb85e7a37ea67f0e803aaa31be700e61d2f3742a5683917"}, + {file = "debugpy-1.6.6-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:78739f77c58048ec006e2b3eb2e0cd5a06d5f48c915e2fc7911a337354508110"}, + {file = "debugpy-1.6.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23c29e40e39ad7d869d408ded414f6d46d82f8a93b5857ac3ac1e915893139ca"}, + {file = "debugpy-1.6.6-cp37-cp37m-win32.whl", hash = "sha256:7aa7e103610e5867d19a7d069e02e72eb2b3045b124d051cfd1538f1d8832d1b"}, + {file = "debugpy-1.6.6-cp37-cp37m-win_amd64.whl", hash = "sha256:f6383c29e796203a0bba74a250615ad262c4279d398e89d895a69d3069498305"}, + {file = "debugpy-1.6.6-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:23363e6d2a04d726bbc1400bd4e9898d54419b36b2cdf7020e3e215e1dcd0f8e"}, + {file = "debugpy-1.6.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b5d1b13d7c7bf5d7cf700e33c0b8ddb7baf030fcf502f76fc061ddd9405d16c"}, + {file = "debugpy-1.6.6-cp38-cp38-win32.whl", hash = "sha256:70ab53918fd907a3ade01909b3ed783287ede362c80c75f41e79596d5ccacd32"}, + {file = "debugpy-1.6.6-cp38-cp38-win_amd64.whl", hash = "sha256:c05349890804d846eca32ce0623ab66c06f8800db881af7a876dc073ac1c2225"}, + {file = "debugpy-1.6.6-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:11a0f3a106f69901e4a9a5683ce943a7a5605696024134b522aa1bfda25b5fec"}, + {file = "debugpy-1.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a771739902b1ae22a120dbbb6bd91b2cae6696c0e318b5007c5348519a4211c6"}, + {file = "debugpy-1.6.6-cp39-cp39-win32.whl", hash = "sha256:549ae0cb2d34fc09d1675f9b01942499751d174381b6082279cf19cdb3c47cbe"}, + {file = "debugpy-1.6.6-cp39-cp39-win_amd64.whl", hash = "sha256:de4a045fbf388e120bb6ec66501458d3134f4729faed26ff95de52a754abddb1"}, + {file = "debugpy-1.6.6-py2.py3-none-any.whl", hash = "sha256:be596b44448aac14eb3614248c91586e2bc1728e020e82ef3197189aae556115"}, + {file = "debugpy-1.6.6.zip", hash = "sha256:b9c2130e1c632540fbf9c2c88341493797ddf58016e7cba02e311de9b0a96b67"}, +] +decorator = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] +executing = [ + {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, + {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, +] fastapi = [ {file = "fastapi-0.91.0-py3-none-any.whl", hash = "sha256:8dc18f860755159b3c4b30577c61c821b98f382acfeb6d5a849f9fa6a5369789"}, {file = "fastapi-0.91.0.tar.gz", hash = "sha256:ff2fa93af3f2f982b07b5f96e8512565b3ef0e5f8f02469dbfd6bc27f6fd9a9e"}, @@ -851,6 +1352,26 @@ idna = [ {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] +ipykernel = [ + {file = "ipykernel-6.21.2-py3-none-any.whl", hash = "sha256:430d00549b6aaf49bd0f5393150691edb1815afa62d457ee6b1a66b25cb17874"}, + {file = "ipykernel-6.21.2.tar.gz", hash = "sha256:6e9213484e4ce1fb14267ee435e18f23cc3a0634e635b9fb4ed4677b84e0fdf8"}, +] +ipython = [ + {file = "ipython-8.10.0-py3-none-any.whl", hash = "sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345"}, + {file = "ipython-8.10.0.tar.gz", hash = "sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e"}, +] +jedi = [ + {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, + {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, +] +jupyter-client = [ + {file = "jupyter_client-8.0.2-py3-none-any.whl", hash = "sha256:c53731eb590b68839b0ce04bf46ff8c4f03278f5d9fe5c3b0f268a57cc2bd97e"}, + {file = "jupyter_client-8.0.2.tar.gz", hash = "sha256:47ac9f586dbcff4d79387ec264faf0fdeb5f14845fa7345fd7d1e378f8096011"}, +] +jupyter-core = [ + {file = "jupyter_core-5.2.0-py3-none-any.whl", hash = "sha256:4bdc2928c37f6917130c667d8b8708f20aee539d8283c6be72aabd2a4b4c83b0"}, + {file = "jupyter_core-5.2.0.tar.gz", hash = "sha256:1407cdb4c79ee467696c04b76633fc1884015fa109323365a6372c8e890cc83f"}, +] langchain = [] marshmallow = [ {file = "marshmallow-3.19.0-py3-none-any.whl", hash = "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b"}, @@ -860,6 +1381,10 @@ marshmallow-enum = [ {file = "marshmallow-enum-1.5.1.tar.gz", hash = "sha256:38e697e11f45a8e64b4a1e664000897c659b60aa57bfa18d44e226a9920b6e58"}, {file = "marshmallow_enum-1.5.1-py2.py3-none-any.whl", hash = "sha256:57161ab3dbfde4f57adeb12090f39592e992b9c86d206d02f6bd03ebec60f072"}, ] +matplotlib-inline = [ + {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, + {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, +] multidict = [ {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, @@ -940,6 +1465,10 @@ mypy-extensions = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +nest-asyncio = [ + {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, + {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, +] numpy = [ {file = "numpy-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d"}, {file = "numpy-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5"}, @@ -977,14 +1506,58 @@ packaging = [ {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, ] +parso = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] pathspec = [ {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, ] +pexpect = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] +pickleshare = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] platformdirs = [ {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, ] +prompt-toolkit = [ + {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, + {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, +] +psutil = [ + {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"}, + {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"}, + {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3ff89f9b835100a825b14c2808a106b6fdcc4b15483141482a12c725e7f78549"}, + {file = "psutil-5.9.4-cp27-cp27m-win32.whl", hash = "sha256:852dd5d9f8a47169fe62fd4a971aa07859476c2ba22c2254d4a1baa4e10b95ad"}, + {file = "psutil-5.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:9120cd39dca5c5e1c54b59a41d205023d436799b1c8c4d3ff71af18535728e94"}, + {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6b92c532979bafc2df23ddc785ed116fced1f492ad90a6830cf24f4d1ea27d24"}, + {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:efeae04f9516907be44904cc7ce08defb6b665128992a56957abc9b61dca94b7"}, + {file = "psutil-5.9.4-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7"}, + {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1"}, + {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08"}, + {file = "psutil-5.9.4-cp36-abi3-win32.whl", hash = "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff"}, + {file = "psutil-5.9.4-cp36-abi3-win_amd64.whl", hash = "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4"}, + {file = "psutil-5.9.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e"}, + {file = "psutil-5.9.4.tar.gz", hash = "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62"}, +] +ptyprocess = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] +pure-eval = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] +pycparser = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] pydantic = [ {file = "pydantic-1.10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5635de53e6686fe7a44b5cf25fcc419a0d5e5c1a1efe73d49d48fe7586db854"}, {file = "pydantic-1.10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6dc1cc241440ed7ca9ab59d9929075445da6b7c94ced281b3dd4cfe6c8cff817"}, @@ -1023,6 +1596,30 @@ pydantic = [ {file = "pydantic-1.10.4-py3-none-any.whl", hash = "sha256:4948f264678c703f3877d1c8877c4e3b2e12e549c57795107f08cf70c6ec7774"}, {file = "pydantic-1.10.4.tar.gz", hash = "sha256:b9a3859f24eb4e097502a3be1fb4b2abb79b6103dd9e2e0edb70613a4459a648"}, ] +pygments = [ + {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, + {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +pywin32 = [ + {file = "pywin32-305-cp310-cp310-win32.whl", hash = "sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116"}, + {file = "pywin32-305-cp310-cp310-win_amd64.whl", hash = "sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478"}, + {file = "pywin32-305-cp310-cp310-win_arm64.whl", hash = "sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4"}, + {file = "pywin32-305-cp311-cp311-win32.whl", hash = "sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2"}, + {file = "pywin32-305-cp311-cp311-win_amd64.whl", hash = "sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990"}, + {file = "pywin32-305-cp311-cp311-win_arm64.whl", hash = "sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db"}, + {file = "pywin32-305-cp36-cp36m-win32.whl", hash = "sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863"}, + {file = "pywin32-305-cp36-cp36m-win_amd64.whl", hash = "sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1"}, + {file = "pywin32-305-cp37-cp37m-win32.whl", hash = "sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496"}, + {file = "pywin32-305-cp37-cp37m-win_amd64.whl", hash = "sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d"}, + {file = "pywin32-305-cp38-cp38-win32.whl", hash = "sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504"}, + {file = "pywin32-305-cp38-cp38-win_amd64.whl", hash = "sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7"}, + {file = "pywin32-305-cp39-cp39-win32.whl", hash = "sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918"}, + {file = "pywin32-305-cp39-cp39-win_amd64.whl", hash = "sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271"}, +] pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, @@ -1065,10 +1662,93 @@ pyyaml = [ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] +pyzmq = [ + {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:2d05d904f03ddf1e0d83d97341354dfe52244a619b5a1440a5f47a5b3451e84e"}, + {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a154ef810d44f9d28868be04641f837374a64e7449df98d9208e76c260c7ef1"}, + {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:487305c2a011fdcf3db1f24e8814bb76d23bc4d2f46e145bc80316a59a9aa07d"}, + {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e7b87638ee30ab13230e37ce5331b3e730b1e0dda30120b9eeec3540ed292c8"}, + {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75243e422e85a62f0ab7953dc315452a56b2c6a7e7d1a3c3109ac3cc57ed6b47"}, + {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:31e523d067ce44a04e876bed3ff9ea1ff8d1b6636d16e5fcace9d22f8c564369"}, + {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8539216173135e9e89f6b1cc392e74e6b935b91e8c76106cf50e7a02ab02efe5"}, + {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2754fa68da08a854f4816e05160137fa938a2347276471103d31e04bcee5365c"}, + {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1bc30f0c18444d51e9b0d0dd39e3a4e7c53ee74190bebef238cd58de577ea9"}, + {file = "pyzmq-25.0.0-cp310-cp310-win32.whl", hash = "sha256:01d53958c787cfea34091fcb8ef36003dbb7913b8e9f8f62a0715234ebc98b70"}, + {file = "pyzmq-25.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:58fc3ad5e1cfd2e6d24741fbb1e216b388115d31b0ca6670f894187f280b6ba6"}, + {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:e4bba04ea779a3d7ef25a821bb63fd0939142c88e7813e5bd9c6265a20c523a2"}, + {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:af1fbfb7ad6ac0009ccee33c90a1d303431c7fb594335eb97760988727a37577"}, + {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85456f0d8f3268eecd63dede3b99d5bd8d3b306310c37d4c15141111d22baeaf"}, + {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0645b5a2d2a06fd8eb738018490c514907f7488bf9359c6ee9d92f62e844b76f"}, + {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f72ea279b2941a5203e935a4588b9ba8a48aeb9a926d9dfa1986278bd362cb8"}, + {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:4e295f7928a31ae0f657e848c5045ba6d693fe8921205f408ca3804b1b236968"}, + {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ac97e7d647d5519bcef48dd8d3d331f72975afa5c4496c95f6e854686f45e2d9"}, + {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:656281d496aaf9ca4fd4cea84e6d893e3361057c4707bd38618f7e811759103c"}, + {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f6116991568aac48b94d6d8aaed6157d407942ea385335a6ed313692777fb9d"}, + {file = "pyzmq-25.0.0-cp311-cp311-win32.whl", hash = "sha256:0282bba9aee6e0346aa27d6c69b5f7df72b5a964c91958fc9e0c62dcae5fdcdc"}, + {file = "pyzmq-25.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:526f884a27e8bba62fe1f4e07c62be2cfe492b6d432a8fdc4210397f8cf15331"}, + {file = "pyzmq-25.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ccb3e1a863222afdbda42b7ca8ac8569959593d7abd44f5a709177d6fa27d266"}, + {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4046d03100aca266e70d54a35694cb35d6654cfbef633e848b3c4a8d64b9d187"}, + {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3100dddcada66ec5940ed6391ebf9d003cc3ede3d320748b2737553019f58230"}, + {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7877264aa851c19404b1bb9dbe6eed21ea0c13698be1eda3784aab3036d1c861"}, + {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5049e75cc99db65754a3da5f079230fb8889230cf09462ec972d884d1704a3ed"}, + {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:81f99fb1224d36eb91557afec8cdc2264e856f3464500b55749020ce4c848ef2"}, + {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a1cd4a95f176cdc0ee0a82d49d5830f13ae6015d89decbf834c273bc33eeb3d3"}, + {file = "pyzmq-25.0.0-cp36-cp36m-win32.whl", hash = "sha256:926236ca003aec70574754f39703528947211a406f5c6c8b3e50eca04a9e87fc"}, + {file = "pyzmq-25.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:94f0a7289d0f5c80807c37ebb404205e7deb737e8763eb176f4770839ee2a287"}, + {file = "pyzmq-25.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f3f96d452e9580cb961ece2e5a788e64abaecb1232a80e61deffb28e105ff84a"}, + {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:930e6ad4f2eaac31a3d0c2130619d25db754b267487ebc186c6ad18af2a74018"}, + {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1081d7030a1229c8ff90120346fb7599b54f552e98fcea5170544e7c6725aab"}, + {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:531866c491aee5a1e967c286cfa470dffac1e2a203b1afda52d62b58782651e9"}, + {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fc7c1421c5b1c916acf3128bf3cc7ea7f5018b58c69a6866d70c14190e600ce9"}, + {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9a2d5e419bd39a1edb6cdd326d831f0120ddb9b1ff397e7d73541bf393294973"}, + {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:183e18742be3621acf8908903f689ec520aee3f08449bfd29f583010ca33022b"}, + {file = "pyzmq-25.0.0-cp37-cp37m-win32.whl", hash = "sha256:02f5cb60a7da1edd5591a15efa654ffe2303297a41e1b40c3c8942f8f11fc17c"}, + {file = "pyzmq-25.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:cac602e02341eaaf4edfd3e29bd3fdef672e61d4e6dfe5c1d065172aee00acee"}, + {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:e14df47c1265356715d3d66e90282a645ebc077b70b3806cf47efcb7d1d630cb"}, + {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:293a7c2128690f496057f1f1eb6074f8746058d13588389981089ec45d8fdc77"}, + {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:731b208bc9412deeb553c9519dca47136b5a01ca66667cafd8733211941b17e4"}, + {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b055a1cddf8035966ad13aa51edae5dc8f1bba0b5d5e06f7a843d8b83dc9b66b"}, + {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17e1cb97d573ea84d7cd97188b42ca6f611ab3ee600f6a75041294ede58e3d20"}, + {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:60ecbfe7669d3808ffa8a7dd1487d6eb8a4015b07235e3b723d4b2a2d4de7203"}, + {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4c25c95416133942280faaf068d0fddfd642b927fb28aaf4ab201a738e597c1e"}, + {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:be05504af0619d1cffa500af1e0ede69fb683f301003851f5993b5247cc2c576"}, + {file = "pyzmq-25.0.0-cp38-cp38-win32.whl", hash = "sha256:6bf3842af37af43fa953e96074ebbb5315f6a297198f805d019d788a1021dbc8"}, + {file = "pyzmq-25.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:b90bb8dfbbd138558f1f284fecfe328f7653616ff9a972433a00711d9475d1a9"}, + {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:62b9e80890c0d2408eb42d5d7e1fc62a5ce71be3288684788f74cf3e59ffd6e2"}, + {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484c2c4ee02c1edc07039f42130bd16e804b1fe81c4f428e0042e03967f40c20"}, + {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9ca6db34b26c4d3e9b0728841ec9aa39484eee272caa97972ec8c8e231b20c7e"}, + {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:610d2d112acd4e5501fac31010064a6c6efd716ceb968e443cae0059eb7b86de"}, + {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3594c0ff604e685d7e907860b61d0e10e46c74a9ffca168f6e9e50ea934ee440"}, + {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c21a5f4e54a807df5afdef52b6d24ec1580153a6bcf0607f70a6e1d9fa74c5c3"}, + {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4725412e27612f0d7d7c2f794d89807ad0227c2fc01dd6146b39ada49c748ef9"}, + {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4d3d604fe0a67afd1aff906e54da557a5203368a99dcc50a70eef374f1d2abef"}, + {file = "pyzmq-25.0.0-cp39-cp39-win32.whl", hash = "sha256:3670e8c5644768f214a3b598fe46378a4a6f096d5fb82a67dfd3440028460565"}, + {file = "pyzmq-25.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e99629a976809fe102ef73e856cf4b2660acd82a412a51e80ba2215e523dfd0a"}, + {file = "pyzmq-25.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:66509c48f7446b640eeae24b60c9c1461799a27b1b0754e438582e36b5af3315"}, + {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c464cc508177c09a5a6122b67f978f20e2954a21362bf095a0da4647e3e908"}, + {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:28bcb2e66224a7ac2843eb632e4109d6b161479e7a2baf24e37210461485b4f1"}, + {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0e7ef9ac807db50b4eb6f534c5dcc22f998f5dae920cc28873d2c1d080a4fc9"}, + {file = "pyzmq-25.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5050f5c50b58a6e38ccaf9263a356f74ef1040f5ca4030225d1cb1a858c5b7b6"}, + {file = "pyzmq-25.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2a73af6504e0d2805e926abf136ebf536735a13c22f709be7113c2ec65b4bec3"}, + {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0e8d00228db627ddd1b418c7afd81820b38575f237128c9650365f2dd6ac3443"}, + {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5605621f2181f20b71f13f698944deb26a0a71af4aaf435b34dd90146092d530"}, + {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6136bfb0e5a9cf8c60c6ac763eb21f82940a77e6758ea53516c8c7074f4ff948"}, + {file = "pyzmq-25.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0a90b2480a26aef7c13cff18703ba8d68e181facb40f78873df79e6d42c1facc"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00c94fd4c9dd3c95aace0c629a7fa713627a5c80c1819326b642adf6c4b8e2a2"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20638121b0bdc80777ce0ec8c1f14f1ffec0697a1f88f0b564fa4a23078791c4"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6f75b4b8574f3a8a0d6b4b52606fc75b82cb4391471be48ab0b8677c82f9ed4"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cbb885f347eba7ab7681c450dee5b14aed9f153eec224ec0c3f299273d9241f"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c48f257da280b3be6c94e05bd575eddb1373419dbb1a72c3ce64e88f29d1cd6d"}, + {file = "pyzmq-25.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:866eabf7c1315ef2e93e34230db7cbf672e0d7c626b37c11f7e870c8612c3dcc"}, + {file = "pyzmq-25.0.0.tar.gz", hash = "sha256:f330a1a2c7f89fd4b0aa4dcb7bf50243bf1c8da9a2f1efc31daf57a2046b31f2"}, +] requests = [ {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, ] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] sniffio = [ {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, @@ -1120,6 +1800,10 @@ sqlalchemy = [ {file = "SQLAlchemy-1.4.46-cp39-cp39-win_amd64.whl", hash = "sha256:315676344e3558f1f80d02535f410e80ea4e8fddba31ec78fe390eff5fb8f466"}, {file = "SQLAlchemy-1.4.46.tar.gz", hash = "sha256:6913b8247d8a292ef8315162a51931e2b40ce91681f1b6f18f697045200c4a30"}, ] +stack-data = [ + {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, + {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, +] starlette = [ {file = "starlette-0.24.0-py3-none-any.whl", hash = "sha256:75e2b24d71ff4f7cb9a3338f83d234c2d4135bf80f52aeb105c02a01d72a5df1"}, {file = "starlette-0.24.0.tar.gz", hash = "sha256:7925947f177a19e906c6ace10f07c64c4f9fdf7d509caaac6589f7cc0cfd95f3"}, @@ -1132,10 +1816,27 @@ tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] +tornado = [ + {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, + {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, + {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, + {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, + {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, +] tqdm = [ {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"}, {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, ] +traitlets = [ + {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, + {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, +] typing-extensions = [ {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, @@ -1152,6 +1853,10 @@ uvicorn = [ {file = "uvicorn-0.20.0-py3-none-any.whl", hash = "sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd"}, {file = "uvicorn-0.20.0.tar.gz", hash = "sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8"}, ] +wcwidth = [ + {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, + {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, +] yarl = [ {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5"}, {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863"}, diff --git a/pyproject.toml b/pyproject.toml index 0404d9313..f6bb5317f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,7 @@ langchain = {path = "../langchain", develop = true} [tool.poetry.group.dev.dependencies] black = "^23.1.0" +ipykernel = "^6.21.2" [build-system] requires = ["poetry-core"] diff --git a/response.json b/response.json new file mode 100644 index 000000000..ecc3e73e3 --- /dev/null +++ b/response.json @@ -0,0 +1,3012 @@ +{ + "chains": { + "APIChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "api_request_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "api_answer_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "requests_wrapper": { + "type": "RequestsWrapper", + "required": true, + "list": false, + "show": true + }, + "api_docs": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "question_key": { + "type": "str", + "required": false, + "default": "question", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "output", + "list": false, + "show": false + } + }, + "_type": "api_chain" + }, + "HypotheticalDocumentEmbedder": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "base_embeddings": { + "type": "Embeddings", + "required": true, + "list": false, + "show": true + }, + "llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + } + }, + "_type": "hyde_chain" + }, + "LLMChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "prompt": { + "type": "BasePromptTemplate", + "required": true, + "list": false, + "show": true + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "output_key": { + "type": "str", + "required": false, + "default": "text", + "list": false, + "show": false + } + }, + "_type": "llm_chain" + }, + "LLMBashChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "input_key": { + "type": "str", + "required": false, + "default": "question", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "answer", + "list": false, + "show": false + }, + "prompt": { + "type": "BasePromptTemplate", + "required": false, + "default": { + "input_variables": [ + "question" + ], + "output_parser": null, + "template": "If someone asks you to perform a task, your job is to come up with a series of bash commands that will perform the task. There is no need to put \"#!/bin/bash\" in your answer. Make sure to reason step by step, using this format:\n\nQuestion: \"copy the files in the directory named 'target' into a new directory at the same level as target called 'myNewDirectory'\"\n\nI need to take the following actions:\n- List all files in the directory\n- Create a new directory\n- Copy the files from the first directory into the second directory\n```bash\nls\nmkdir myNewDirectory\ncp -r target/* myNewDirectory\n```\n\nThat is the format. Begin!\n\nQuestion: {question}", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + } + }, + "_type": "llm_bash_chain" + }, + "LLMCheckerChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "create_draft_answer_prompt": { + "type": "PromptTemplate", + "required": false, + "default": { + "input_variables": [ + "question" + ], + "output_parser": null, + "template": "{question}\n\n", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "list_assertions_prompt": { + "type": "PromptTemplate", + "required": false, + "default": { + "input_variables": [ + "statement" + ], + "output_parser": null, + "template": "Here is a statement:\n{statement}\nMake a bullet point list of the assumptions you made when producing the above statement.\n\n", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "check_assertions_prompt": { + "type": "PromptTemplate", + "required": false, + "default": { + "input_variables": [ + "assertions" + ], + "output_parser": null, + "template": "Here is a bullet point list of assertions:\n{assertions}\nFor each assertion, determine whether it is true or false. If it is false, explain why.\n\n", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "revised_answer_prompt": { + "type": "PromptTemplate", + "required": false, + "default": { + "input_variables": [ + "checked_assertions", + "question" + ], + "output_parser": null, + "template": "{checked_assertions}\n\nQuestion: In light of the above assertions and checks, how would you answer the question '{question}'?\n\nAnswer:", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": "query", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "result", + "list": false, + "show": false + } + }, + "_type": "llm_checker_chain" + }, + "LLMMathChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "prompt": { + "type": "BasePromptTemplate", + "required": false, + "default": { + "input_variables": [ + "question" + ], + "output_parser": null, + "template": "You are GPT-3, and you can't do math.\n\nYou can do basic math, and your memorization abilities are impressive, but you can't do any complex calculations that a human could not do in their head. You also have an annoying tendency to just make up highly specific, but wrong, answers.\n\nSo we hooked you up to a Python 3 kernel, and now you can execute code. If anyone gives you a hard math problem, just use this format and we’ll take care of the rest:\n\nQuestion: ${{Question with hard calculation.}}\n```python\n${{Code that prints what you need to know}}\n```\n```output\n${{Output of your code}}\n```\nAnswer: ${{Answer}}\n\nOtherwise, use this simpler format:\n\nQuestion: ${{Question without hard calculation}}\nAnswer: ${{Answer}}\n\nBegin.\n\nQuestion: What is 37593 * 67?\n\n```python\nprint(37593 * 67)\n```\n```output\n2518731\n```\nAnswer: 2518731\n\nQuestion: {question}\n", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": "question", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "answer", + "list": false, + "show": false + } + }, + "_type": "llm_math_chain" + }, + "LLMRequestsChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "requests_wrapper": { + "type": "RequestsWrapper", + "required": false, + "list": false, + "show": false + }, + "text_length": { + "type": "int", + "required": false, + "default": 8000, + "list": false, + "show": false + }, + "requests_key": { + "type": "str", + "required": false, + "default": "requests_result", + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": "url", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "output", + "list": false, + "show": false + } + }, + "_type": "llm_requests_chain" + }, + "ConversationChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "prompt": { + "type": "BasePromptTemplate", + "required": false, + "default": { + "input_variables": [ + "history", + "input" + ], + "output_parser": null, + "template": "The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.\n\nCurrent conversation:\n{history}\nHuman: {input}\nAI:", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "output_key": { + "type": "str", + "required": false, + "default": "response", + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": "input", + "list": false, + "show": false + } + }, + "_type": "llm_conversation_chain" + }, + "PALChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "prompt": { + "type": "BasePromptTemplate", + "required": true, + "list": false, + "show": true + }, + "stop": { + "type": "str", + "required": false, + "default": "\n\n", + "list": false, + "show": false + }, + "get_answer_expr": { + "type": "str", + "required": false, + "default": "print(solution())", + "list": false, + "show": false + }, + "python_globals": { + "type": "dict[str, Any]", + "required": false, + "default": null, + "list": false, + "show": false + }, + "python_locals": { + "type": "dict[str, Any]", + "required": false, + "default": null, + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "result", + "list": false, + "show": false + }, + "return_intermediate_steps": { + "type": "bool", + "required": false, + "default": false, + "list": false, + "show": false + } + }, + "_type": "pal_chain" + }, + "QAWithSourcesChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "combine_documents_chain": { + "type": "BaseCombineDocumentsChain", + "required": true, + "list": false, + "show": true + }, + "question_key": { + "type": "str", + "required": false, + "default": "question", + "list": false, + "show": false + }, + "input_docs_key": { + "type": "str", + "required": false, + "default": "docs", + "list": false, + "show": false + }, + "answer_key": { + "type": "str", + "required": false, + "default": "answer", + "list": false, + "show": false + }, + "sources_answer_key": { + "type": "str", + "required": false, + "default": "sources", + "list": false, + "show": false + } + }, + "_type": "qa_with_sources_chain" + }, + "StuffDocumentsChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": "input_documents", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "output_text", + "list": false, + "show": false + }, + "llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "document_prompt": { + "type": "BasePromptTemplate", + "required": false, + "list": false, + "show": false + }, + "document_variable_name": { + "type": "str", + "required": true, + "list": false, + "show": true + } + }, + "_type": "stuff_documents_chain" + }, + "MapReduceDocumentsChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": "input_documents", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "output_text", + "list": false, + "show": false + }, + "llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "combine_document_chain": { + "type": "BaseCombineDocumentsChain", + "required": true, + "list": false, + "show": true + }, + "collapse_document_chain": { + "type": "BaseCombineDocumentsChain", + "required": false, + "default": null, + "list": false, + "show": false + }, + "document_variable_name": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "return_intermediate_steps": { + "type": "bool", + "required": false, + "default": false, + "list": false, + "show": false + } + }, + "_type": "map_reduce_documents_chain" + }, + "MapRerankDocumentsChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": "input_documents", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "output_text", + "list": false, + "show": false + }, + "llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "document_variable_name": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "rank_key": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "answer_key": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "metadata_keys": { + "type": "str", + "required": false, + "default": null, + "list": true, + "show": false + }, + "return_intermediate_steps": { + "type": "bool", + "required": false, + "default": false, + "list": false, + "show": false + } + }, + "_type": "map_rerank_documents_chain" + }, + "RefineDocumentsChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": "input_documents", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "output_text", + "list": false, + "show": false + }, + "initial_llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "refine_llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "document_variable_name": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "initial_response_name": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "document_prompt": { + "type": "BasePromptTemplate", + "required": false, + "list": false, + "show": false + }, + "return_intermediate_steps": { + "type": "bool", + "required": false, + "default": false, + "list": false, + "show": false + } + }, + "_type": "refine_documents_chain" + }, + "SQLDatabaseChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "database": { + "type": "SQLDatabase", + "required": true, + "list": false, + "show": true + }, + "prompt": { + "type": "BasePromptTemplate", + "required": false, + "default": { + "input_variables": [ + "input", + "table_info", + "dialect", + "top_k" + ], + "output_parser": null, + "template": "Given an input question, first create a syntactically correct {dialect} query to run, then look at the results of the query and return the answer. Unless the user specifies in his question a specific number of examples he wishes to obtain, always limit your query to at most {top_k} results using the LIMIT clause. You can order the results by a relevant column to return the most interesting examples in the database.\n\nNever query for all the columns from a specific table, only ask for a the few relevant columns given the question.\n\nPay attention to use only the column names that you can see in the schema description. Be careful to not query for columns that do not exist. Also, pay attention to which column is in which table.\n\nUse the following format:\n\nQuestion: \"Question here\"\nSQLQuery: \"SQL Query to run\"\nSQLResult: \"Result of the SQLQuery\"\nAnswer: \"Final answer here\"\n\nOnly use the tables listed below.\n\n{table_info}\n\nQuestion: {input}", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "top_k": { + "type": "int", + "required": false, + "default": 5, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": "query", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "result", + "list": false, + "show": false + }, + "return_intermediate_steps": { + "type": "bool", + "required": false, + "default": false, + "list": false, + "show": false + }, + "return_direct": { + "type": "bool", + "required": false, + "default": false, + "list": false, + "show": false + } + }, + "_type": "sql_database_chain" + }, + "VectorDBQAWithSourcesChain": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "combine_documents_chain": { + "type": "BaseCombineDocumentsChain", + "required": true, + "list": false, + "show": true + }, + "question_key": { + "type": "str", + "required": false, + "default": "question", + "list": false, + "show": false + }, + "input_docs_key": { + "type": "str", + "required": false, + "default": "docs", + "list": false, + "show": false + }, + "answer_key": { + "type": "str", + "required": false, + "default": "answer", + "list": false, + "show": false + }, + "sources_answer_key": { + "type": "str", + "required": false, + "default": "sources", + "list": false, + "show": false + }, + "vectorstore": { + "type": "VectorStore", + "required": true, + "list": false, + "show": true + }, + "k": { + "type": "int", + "required": false, + "default": 4, + "list": false, + "show": false + }, + "reduce_k_below_max_tokens": { + "type": "bool", + "required": false, + "default": false, + "list": false, + "show": false + }, + "max_tokens_limit": { + "type": "int", + "required": false, + "default": 3375, + "list": false, + "show": false + }, + "search_kwargs": { + "type": "dict[str, Any]", + "required": false, + "list": false, + "show": false + } + }, + "_type": "vector_db_qa_with_sources_chain" + }, + "VectorDBQA": { + "template": { + "memory": { + "type": "Memory", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "vectorstore": { + "type": "VectorStore", + "required": true, + "list": false, + "show": true + }, + "k": { + "type": "int", + "required": false, + "default": 4, + "list": false, + "show": false + }, + "combine_documents_chain": { + "type": "BaseCombineDocumentsChain", + "required": true, + "list": false, + "show": true + }, + "input_key": { + "type": "str", + "required": false, + "default": "query", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": "result", + "list": false, + "show": false + }, + "return_source_documents": { + "type": "bool", + "required": false, + "default": false, + "list": false, + "show": false + }, + "search_kwargs": { + "type": "dict[str, Any]", + "required": false, + "list": false, + "show": false + }, + "search_type": { + "type": "str", + "required": false, + "default": "similarity", + "list": false, + "show": false + } + }, + "_type": "vector_db_qa" + } + }, + "agents": { + "ZeroShotAgent": { + "template": { + "llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "allowed_tools": { + "type": "str", + "required": false, + "default": null, + "list": true, + "show": true + }, + "return_values": { + "type": "str", + "required": false, + "default": [ + "output" + ], + "list": true, + "show": false + } + }, + "_type": "zero-shot-react-description" + }, + "ReActDocstoreAgent": { + "template": { + "llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "allowed_tools": { + "type": "str", + "required": false, + "default": null, + "list": true, + "show": true + }, + "return_values": { + "type": "str", + "required": false, + "default": [ + "output" + ], + "list": true, + "show": false + }, + "i": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + } + }, + "_type": "react-docstore" + }, + "SelfAskWithSearchAgent": { + "template": { + "llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "allowed_tools": { + "type": "str", + "required": false, + "default": null, + "list": true, + "show": true + }, + "return_values": { + "type": "str", + "required": false, + "default": [ + "output" + ], + "list": true, + "show": false + } + }, + "_type": "self-ask-with-search" + }, + "ConversationalAgent": { + "template": { + "llm_chain": { + "type": "LLMChain", + "required": true, + "list": false, + "show": true + }, + "allowed_tools": { + "type": "str", + "required": false, + "default": null, + "list": true, + "show": true + }, + "return_values": { + "type": "str", + "required": false, + "default": [ + "output" + ], + "list": true, + "show": false + }, + "ai_prefix": { + "type": "str", + "required": false, + "default": "AI", + "list": false, + "show": false + } + }, + "_type": "conversational-react-description" + } + }, + "prompts": { + "PromptTemplate": { + "template": { + "input_variables": { + "type": "str", + "required": true, + "list": true, + "show": true + }, + "output_parser": { + "type": "BaseOutputParser", + "required": false, + "default": null, + "list": false, + "show": false + }, + "template": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "template_format": { + "type": "str", + "required": false, + "default": "f-string", + "list": false, + "show": false + }, + "validate_template": { + "type": "bool", + "required": false, + "default": true, + "list": false, + "show": false + } + }, + "_type": "prompt" + }, + "FewShotPromptTemplate": { + "template": { + "input_variables": { + "type": "str", + "required": true, + "list": true, + "show": true + }, + "output_parser": { + "type": "BaseOutputParser", + "required": false, + "default": null, + "list": false, + "show": false + }, + "examples": { + "type": "dict", + "required": false, + "default": null, + "list": true, + "show": false + }, + "example_selector": { + "type": "BaseExampleSelector", + "required": false, + "default": null, + "list": false, + "show": false + }, + "example_prompt": { + "type": "PromptTemplate", + "required": true, + "list": false, + "show": true + }, + "suffix": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "example_separator": { + "type": "str", + "required": false, + "default": "\n\n", + "list": false, + "show": false + }, + "prefix": { + "type": "str", + "required": false, + "default": "", + "list": false, + "show": false + }, + "template_format": { + "type": "str", + "required": false, + "default": "f-string", + "list": false, + "show": false + }, + "validate_template": { + "type": "bool", + "required": false, + "default": true, + "list": false, + "show": false + } + }, + "_type": "few_shot" + } + }, + "llms": { + "AI21": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "model": { + "type": "str", + "required": false, + "default": "j1-jumbo", + "list": false, + "show": false + }, + "temperature": { + "type": "float", + "required": false, + "default": 0.7, + "list": false, + "show": false + }, + "maxTokens": { + "type": "int", + "required": false, + "default": 256, + "list": false, + "show": false + }, + "minTokens": { + "type": "int", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "topP": { + "type": "float", + "required": false, + "default": 1.0, + "list": false, + "show": false + }, + "presencePenalty": { + "type": "AI21PenaltyData", + "required": false, + "default": { + "scale": 0, + "applyToWhitespaces": true, + "applyToPunctuations": true, + "applyToNumbers": true, + "applyToStopwords": true, + "applyToEmojis": true + }, + "list": false, + "show": false + }, + "countPenalty": { + "type": "AI21PenaltyData", + "required": false, + "default": { + "scale": 0, + "applyToWhitespaces": true, + "applyToPunctuations": true, + "applyToNumbers": true, + "applyToStopwords": true, + "applyToEmojis": true + }, + "list": false, + "show": false + }, + "frequencyPenalty": { + "type": "AI21PenaltyData", + "required": false, + "default": { + "scale": 0, + "applyToWhitespaces": true, + "applyToPunctuations": true, + "applyToNumbers": true, + "applyToStopwords": true, + "applyToEmojis": true + }, + "list": false, + "show": false + }, + "numResults": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "logitBias": { + "type": "dict[str, float]", + "required": false, + "default": null, + "list": false, + "show": false + }, + "ai21_api_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "base_url": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "ai21" + }, + "Anthropic": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "client": { + "type": "Any", + "required": false, + "default": null, + "list": false, + "show": false + }, + "model": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "max_tokens_to_sample": { + "type": "int", + "required": false, + "default": 256, + "list": false, + "show": false + }, + "temperature": { + "type": "float", + "required": false, + "default": 1.0, + "list": false, + "show": false + }, + "top_k": { + "type": "int", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "top_p": { + "type": "float", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "anthropic_api_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "HUMAN_PROMPT": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "AI_PROMPT": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "anthropic" + }, + "CerebriumAI": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "endpoint_url": { + "type": "str", + "required": false, + "default": "", + "list": false, + "show": false + }, + "model_kwargs": { + "type": "dict[str, Any]", + "required": false, + "list": false, + "show": false + }, + "cerebriumai_api_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "cerebriumai" + }, + "Cohere": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "client": { + "type": "Any", + "required": false, + "default": null, + "list": false, + "show": false + }, + "model": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "max_tokens": { + "type": "int", + "required": false, + "default": 256, + "list": false, + "show": false + }, + "temperature": { + "type": "float", + "required": false, + "default": 0.75, + "list": false, + "show": false + }, + "k": { + "type": "int", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "p": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "frequency_penalty": { + "type": "int", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "presence_penalty": { + "type": "int", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "cohere_api_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "stop": { + "type": "str", + "required": false, + "default": null, + "list": true, + "show": false + } + }, + "_type": "cohere" + }, + "ForefrontAI": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "endpoint_url": { + "type": "str", + "required": false, + "default": "", + "list": false, + "show": false + }, + "temperature": { + "type": "float", + "required": false, + "default": 0.7, + "list": false, + "show": false + }, + "length": { + "type": "int", + "required": false, + "default": 256, + "list": false, + "show": false + }, + "top_p": { + "type": "float", + "required": false, + "default": 1.0, + "list": false, + "show": false + }, + "top_k": { + "type": "int", + "required": false, + "default": 40, + "list": false, + "show": false + }, + "repetition_penalty": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "forefrontai_api_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "base_url": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "forefrontai" + }, + "GooseAI": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "client": { + "type": "Any", + "required": false, + "default": null, + "list": false, + "show": false + }, + "model_name": { + "type": "str", + "required": false, + "default": "gpt-neo-20b", + "list": false, + "show": false + }, + "temperature": { + "type": "float", + "required": false, + "default": 0.7, + "list": false, + "show": false + }, + "max_tokens": { + "type": "int", + "required": false, + "default": 256, + "list": false, + "show": false + }, + "top_p": { + "type": "float", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "min_tokens": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "frequency_penalty": { + "type": "float", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "presence_penalty": { + "type": "float", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "n": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "model_kwargs": { + "type": "dict[str, Any]", + "required": false, + "list": false, + "show": false + }, + "logit_bias": { + "type": "dict[str, float]", + "required": false, + "list": false, + "show": false + }, + "gooseai_api_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "gooseai" + }, + "HuggingFaceHub": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "client": { + "type": "Any", + "required": false, + "default": null, + "list": false, + "show": false + }, + "repo_id": { + "type": "str", + "required": false, + "default": "gpt2", + "list": false, + "show": false + }, + "task": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "model_kwargs": { + "type": "dict", + "required": false, + "default": null, + "list": false, + "show": false + }, + "huggingfacehub_api_token": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "huggingface_hub" + }, + "NLPCloud": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "client": { + "type": "Any", + "required": false, + "default": null, + "list": false, + "show": false + }, + "model_name": { + "type": "str", + "required": false, + "default": "finetuned-gpt-neox-20b", + "list": false, + "show": false + }, + "temperature": { + "type": "float", + "required": false, + "default": 0.7, + "list": false, + "show": false + }, + "min_length": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "max_length": { + "type": "int", + "required": false, + "default": 256, + "list": false, + "show": false + }, + "length_no_input": { + "type": "bool", + "required": false, + "default": true, + "list": false, + "show": false + }, + "remove_input": { + "type": "bool", + "required": false, + "default": true, + "list": false, + "show": false + }, + "remove_end_sequence": { + "type": "bool", + "required": false, + "default": true, + "list": false, + "show": false + }, + "bad_words": { + "type": "str", + "required": false, + "default": [], + "list": true, + "show": false + }, + "top_p": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "top_k": { + "type": "int", + "required": false, + "default": 50, + "list": false, + "show": false + }, + "repetition_penalty": { + "type": "float", + "required": false, + "default": 1.0, + "list": false, + "show": false + }, + "length_penalty": { + "type": "float", + "required": false, + "default": 1.0, + "list": false, + "show": false + }, + "do_sample": { + "type": "bool", + "required": false, + "default": true, + "list": false, + "show": false + }, + "num_beams": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "early_stopping": { + "type": "bool", + "required": false, + "default": false, + "list": false, + "show": false + }, + "num_return_sequences": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "nlpcloud_api_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "nlpcloud" + }, + "OpenAI": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "client": { + "type": "Any", + "required": false, + "default": null, + "list": false, + "show": false + }, + "model_name": { + "type": "str", + "required": false, + "default": "text-davinci-003", + "list": false, + "show": false + }, + "temperature": { + "type": "float", + "required": false, + "default": 0.7, + "list": false, + "show": false + }, + "max_tokens": { + "type": "int", + "required": false, + "default": 256, + "list": false, + "show": false + }, + "top_p": { + "type": "float", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "frequency_penalty": { + "type": "float", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "presence_penalty": { + "type": "float", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "n": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "best_of": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "model_kwargs": { + "type": "dict[str, Any]", + "required": false, + "list": false, + "show": false + }, + "openai_api_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "batch_size": { + "type": "int", + "required": false, + "default": 20, + "list": false, + "show": false + }, + "request_timeout": { + "type": "Union[float, Tuple[float, float], NoneType]", + "required": false, + "default": null, + "list": false, + "show": false + }, + "logit_bias": { + "type": "dict[str, float]", + "required": false, + "list": false, + "show": false + }, + "max_retries": { + "type": "int", + "required": false, + "default": 6, + "list": false, + "show": false + } + }, + "_type": "openai" + }, + "Petals": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "client": { + "type": "Any", + "required": false, + "default": null, + "list": false, + "show": false + }, + "tokenizer": { + "type": "Any", + "required": false, + "default": null, + "list": false, + "show": false + }, + "model_name": { + "type": "str", + "required": false, + "default": "bigscience/bloom-petals", + "list": false, + "show": false + }, + "temperature": { + "type": "float", + "required": false, + "default": 0.7, + "list": false, + "show": false + }, + "max_new_tokens": { + "type": "int", + "required": false, + "default": 256, + "list": false, + "show": false + }, + "top_p": { + "type": "float", + "required": false, + "default": 0.9, + "list": false, + "show": false + }, + "top_k": { + "type": "int", + "required": false, + "default": null, + "list": false, + "show": false + }, + "do_sample": { + "type": "bool", + "required": false, + "default": true, + "list": false, + "show": false + }, + "max_length": { + "type": "int", + "required": false, + "default": null, + "list": false, + "show": false + }, + "model_kwargs": { + "type": "dict[str, Any]", + "required": false, + "list": false, + "show": false + }, + "huggingface_api_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "petals" + }, + "HuggingFacePipeline": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "pipeline": { + "type": "Any", + "required": false, + "default": null, + "list": false, + "show": false + }, + "model_id": { + "type": "str", + "required": false, + "default": "gpt2", + "list": false, + "show": false + }, + "model_kwargs": { + "type": "dict", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "huggingface_pipeline" + }, + "AzureOpenAI": { + "template": { + "cache": { + "type": "bool", + "required": false, + "default": null, + "list": false, + "show": false + }, + "verbose": { + "type": "bool", + "required": false, + "list": false, + "show": false + }, + "client": { + "type": "Any", + "required": false, + "default": null, + "list": false, + "show": false + }, + "model_name": { + "type": "str", + "required": false, + "default": "text-davinci-003", + "list": false, + "show": false + }, + "temperature": { + "type": "float", + "required": false, + "default": 0.7, + "list": false, + "show": false + }, + "max_tokens": { + "type": "int", + "required": false, + "default": 256, + "list": false, + "show": false + }, + "top_p": { + "type": "float", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "frequency_penalty": { + "type": "float", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "presence_penalty": { + "type": "float", + "required": false, + "default": 0, + "list": false, + "show": false + }, + "n": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "best_of": { + "type": "int", + "required": false, + "default": 1, + "list": false, + "show": false + }, + "model_kwargs": { + "type": "dict[str, Any]", + "required": false, + "list": false, + "show": false + }, + "openai_api_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "batch_size": { + "type": "int", + "required": false, + "default": 20, + "list": false, + "show": false + }, + "request_timeout": { + "type": "Union[float, Tuple[float, float], NoneType]", + "required": false, + "default": null, + "list": false, + "show": false + }, + "logit_bias": { + "type": "dict[str, float]", + "required": false, + "list": false, + "show": false + }, + "max_retries": { + "type": "int", + "required": false, + "default": 6, + "list": false, + "show": false + }, + "deployment_name": { + "type": "str", + "required": false, + "default": "", + "list": false, + "show": false + } + }, + "_type": "azure" + } + }, + "memories": { + "CombinedMemory": { + "template": { + "memories": { + "type": "Memory", + "required": true, + "list": true, + "show": true + } + }, + "_type": "combined" + }, + "ConversationBufferMemory": { + "template": { + "human_prefix": { + "type": "str", + "required": false, + "default": "Human", + "list": false, + "show": false + }, + "ai_prefix": { + "type": "str", + "required": false, + "default": "AI", + "list": false, + "show": false + }, + "buffer": { + "type": "str", + "required": false, + "default": "", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "memory_key": { + "type": "str", + "required": false, + "default": "history", + "list": false, + "show": false + } + }, + "_type": "conversation_buffer" + }, + "ConversationBufferWindowMemory": { + "template": { + "human_prefix": { + "type": "str", + "required": false, + "default": "Human", + "list": false, + "show": false + }, + "ai_prefix": { + "type": "str", + "required": false, + "default": "AI", + "list": false, + "show": false + }, + "buffer": { + "type": "str", + "required": false, + "list": true, + "show": false + }, + "memory_key": { + "type": "str", + "required": false, + "default": "history", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "k": { + "type": "int", + "required": false, + "default": 5, + "list": false, + "show": false + } + }, + "_type": "conversation_buffer_window" + }, + "ConversationSummaryMemory": { + "template": { + "buffer": { + "type": "str", + "required": false, + "default": "", + "list": false, + "show": false + }, + "human_prefix": { + "type": "str", + "required": false, + "default": "Human", + "list": false, + "show": false + }, + "ai_prefix": { + "type": "str", + "required": false, + "default": "AI", + "list": false, + "show": false + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "prompt": { + "type": "BasePromptTemplate", + "required": false, + "default": { + "input_variables": [ + "summary", + "new_lines" + ], + "output_parser": null, + "template": "Progressively summarize the lines of conversation provided, adding onto the previous summary returning a new summary.\n\nEXAMPLE\nCurrent summary:\nThe human asks what the AI thinks of artificial intelligence. The AI thinks artificial intelligence is a force for good.\n\nNew lines of conversation:\nHuman: Why do you think artificial intelligence is a force for good?\nAI: Because artificial intelligence will help humans reach their full potential.\n\nNew summary:\nThe human asks what the AI thinks of artificial intelligence. The AI thinks artificial intelligence is a force for good because it will help humans reach their full potential.\nEND OF EXAMPLE\n\nCurrent summary:\n{summary}\n\nNew lines of conversation:\n{new_lines}\n\nNew summary:", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "memory_key": { + "type": "str", + "required": false, + "default": "history", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "conversation_summary" + }, + "ConversationEntityMemory": { + "template": { + "buffer": { + "type": "str", + "required": false, + "default": [], + "list": true, + "show": false + }, + "human_prefix": { + "type": "str", + "required": false, + "default": "Human", + "list": false, + "show": false + }, + "ai_prefix": { + "type": "str", + "required": false, + "default": "AI", + "list": false, + "show": false + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "entity_extraction_prompt": { + "type": "BasePromptTemplate", + "required": false, + "default": { + "input_variables": [ + "history", + "input" + ], + "output_parser": null, + "template": "You are an AI assistant reading the transcript of a conversation between an AI and a human. Extract all of the proper nouns from the last line of conversation. As a guideline, a proper noun is generally capitalized. You should definitely extract all names and places.\n\nThe conversation history is provided just in case of a coreference (e.g. \"What do you know about him\" where \"him\" is defined in a previous line) -- ignore items mentioned there that are not in the last line.\n\nReturn the output as a single comma-separated list, or NONE if there is nothing of note to return (e.g. the user is just issuing a greeting or having a simple conversation).\n\nEXAMPLE\nConversation history:\nPerson #1: how's it going today?\nAI: \"It's going great! How about you?\"\nPerson #1: good! busy working on Langchain. lots to do.\nAI: \"That sounds like a lot of work! What kind of things are you doing to make Langchain better?\"\nLast line:\nPerson #1: i'm trying to improve Langchain's interfaces, the UX, its integrations with various products the user might want ... a lot of stuff.\nOutput: Langchain\nEND OF EXAMPLE\n\nEXAMPLE\nConversation history:\nPerson #1: how's it going today?\nAI: \"It's going great! How about you?\"\nPerson #1: good! busy working on Langchain. lots to do.\nAI: \"That sounds like a lot of work! What kind of things are you doing to make Langchain better?\"\nLast line:\nPerson #1: i'm trying to improve Langchain's interfaces, the UX, its integrations with various products the user might want ... a lot of stuff. I'm working with Person #2.\nOutput: Langchain, Person #2\nEND OF EXAMPLE\n\nConversation history (for reference only):\n{history}\nLast line of conversation (for extraction):\nHuman: {input}\n\nOutput:", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "entity_summarization_prompt": { + "type": "BasePromptTemplate", + "required": false, + "default": { + "input_variables": [ + "entity", + "summary", + "history", + "input" + ], + "output_parser": null, + "template": "You are an AI assistant helping a human keep track of facts about relevant people, places, and concepts in their life. Update the summary of the provided entity in the \"Entity\" section based on the last line of your conversation with the human. If you are writing the summary for the first time, return a single sentence.\nThe update should only include facts that are relayed in the last line of conversation about the provided entity, and should only contain facts about the provided entity.\n\nIf there is no new information about the provided entity or the information is not worth noting (not an important or relevant fact to remember long-term), return the existing summary unchanged.\n\nFull conversation history (for context):\n{history}\n\nEntity to summarize:\n{entity}\n\nExisting summary of {entity}:\n{summary}\n\nLast line of conversation:\nHuman: {input}\nUpdated summary:", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "store": { + "type": "dict[str, Union[str, NoneType]]", + "required": false, + "default": {}, + "list": false, + "show": false + }, + "entity_cache": { + "type": "str", + "required": false, + "default": [], + "list": true, + "show": false + }, + "k": { + "type": "int", + "required": false, + "default": 3, + "list": false, + "show": false + }, + "chat_history_key": { + "type": "str", + "required": false, + "default": "history", + "list": false, + "show": false + } + }, + "_type": "conversation_entity" + }, + "ConversationSummaryBufferMemory": { + "template": { + "buffer": { + "type": "str", + "required": false, + "list": true, + "show": false + }, + "max_token_limit": { + "type": "int", + "required": false, + "default": 2000, + "list": false, + "show": false + }, + "moving_summary_buffer": { + "type": "str", + "required": false, + "default": "", + "list": false, + "show": false + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "prompt": { + "type": "BasePromptTemplate", + "required": false, + "default": { + "input_variables": [ + "summary", + "new_lines" + ], + "output_parser": null, + "template": "Progressively summarize the lines of conversation provided, adding onto the previous summary returning a new summary.\n\nEXAMPLE\nCurrent summary:\nThe human asks what the AI thinks of artificial intelligence. The AI thinks artificial intelligence is a force for good.\n\nNew lines of conversation:\nHuman: Why do you think artificial intelligence is a force for good?\nAI: Because artificial intelligence will help humans reach their full potential.\n\nNew summary:\nThe human asks what the AI thinks of artificial intelligence. The AI thinks artificial intelligence is a force for good because it will help humans reach their full potential.\nEND OF EXAMPLE\n\nCurrent summary:\n{summary}\n\nNew lines of conversation:\n{new_lines}\n\nNew summary:", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "memory_key": { + "type": "str", + "required": false, + "default": "history", + "list": false, + "show": false + }, + "human_prefix": { + "type": "str", + "required": false, + "default": "Human", + "list": false, + "show": false + }, + "ai_prefix": { + "type": "str", + "required": false, + "default": "AI", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + } + }, + "_type": "conversation_summary_buffer" + }, + "ConversationKGMemory": { + "template": { + "k": { + "type": "int", + "required": false, + "default": 2, + "list": false, + "show": false + }, + "buffer": { + "type": "str", + "required": false, + "list": true, + "show": false + }, + "kg": { + "type": "NetworkxEntityGraph", + "required": false, + "list": false, + "show": false + }, + "knowledge_extraction_prompt": { + "type": "BasePromptTemplate", + "required": false, + "default": { + "input_variables": [ + "history", + "input" + ], + "output_parser": null, + "template": "You are a networked intelligence helping a human track knowledge triples about all relevant people, things, concepts, etc. and integrating them with your knowledge stored within your weights as well as that stored in a knowledge graph. Extract all of the knowledge triples from the last line of conversation. A knowledge triple is a clause that contains a subject, a predicate, and an object. The subject is the entity being described, the predicate is the property of the subject that is being described, and the object is the value of the property.\n\nEXAMPLE\nConversation history:\nPerson #1: Did you hear aliens landed in Area 51?\nAI: No, I didn't hear that. What do you know about Area 51?\nPerson #1: It's a secret military base in Nevada.\nAI: What do you know about Nevada?\nLast line of conversation:\nPerson #1: It's a state in the US. It's also the number 1 producer of gold in the US.\n\nOutput: (Nevada, is a, state)<|>(Nevada, is in, US)<|>(Nevada, is the number 1 producer of, gold)\nEND OF EXAMPLE\n\nEXAMPLE\nConversation history:\nPerson #1: Hello.\nAI: Hi! How are you?\nPerson #1: I'm good. How are you?\nAI: I'm good too.\nLast line of conversation:\nPerson #1: I'm going to the store.\n\nOutput: NONE\nEND OF EXAMPLE\n\nEXAMPLE\nConversation history:\nPerson #1: What do you know about Descartes?\nAI: Descartes was a French philosopher, mathematician, and scientist who lived in the 17th century.\nPerson #1: The Descartes I'm referring to is a standup comedian and interior designer from Montreal.\nAI: Oh yes, He is a comedian and an interior designer. He has been in the industry for 30 years. His favorite food is baked bean pie.\nPerson #1: Oh huh. I know Descartes likes to drive antique scooters and play the mandolin.\nLast line of conversation:\nOutput: (Descartes, likes to drive, antique scooters)<|>(Descartes, plays, mandolin)\nEND OF EXAMPLE\n\nConversation history (for reference only):\n{history}\nLast line of conversation (for extraction):\nHuman: {input}\n\nOutput:", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "entity_extraction_prompt": { + "type": "BasePromptTemplate", + "required": false, + "default": { + "input_variables": [ + "history", + "input" + ], + "output_parser": null, + "template": "You are an AI assistant reading the transcript of a conversation between an AI and a human. Extract all of the proper nouns from the last line of conversation. As a guideline, a proper noun is generally capitalized. You should definitely extract all names and places.\n\nThe conversation history is provided just in case of a coreference (e.g. \"What do you know about him\" where \"him\" is defined in a previous line) -- ignore items mentioned there that are not in the last line.\n\nReturn the output as a single comma-separated list, or NONE if there is nothing of note to return (e.g. the user is just issuing a greeting or having a simple conversation).\n\nEXAMPLE\nConversation history:\nPerson #1: how's it going today?\nAI: \"It's going great! How about you?\"\nPerson #1: good! busy working on Langchain. lots to do.\nAI: \"That sounds like a lot of work! What kind of things are you doing to make Langchain better?\"\nLast line:\nPerson #1: i'm trying to improve Langchain's interfaces, the UX, its integrations with various products the user might want ... a lot of stuff.\nOutput: Langchain\nEND OF EXAMPLE\n\nEXAMPLE\nConversation history:\nPerson #1: how's it going today?\nAI: \"It's going great! How about you?\"\nPerson #1: good! busy working on Langchain. lots to do.\nAI: \"That sounds like a lot of work! What kind of things are you doing to make Langchain better?\"\nLast line:\nPerson #1: i'm trying to improve Langchain's interfaces, the UX, its integrations with various products the user might want ... a lot of stuff. I'm working with Person #2.\nOutput: Langchain, Person #2\nEND OF EXAMPLE\n\nConversation history (for reference only):\n{history}\nLast line of conversation (for extraction):\nHuman: {input}\n\nOutput:", + "template_format": "f-string", + "validate_template": true, + "_type": "prompt" + }, + "list": false, + "show": false + }, + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "human_prefix": { + "type": "str", + "required": false, + "default": "Human", + "list": false, + "show": false + }, + "ai_prefix": { + "type": "str", + "required": false, + "default": "AI", + "list": false, + "show": false + }, + "output_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "input_key": { + "type": "str", + "required": false, + "default": null, + "list": false, + "show": false + }, + "memory_key": { + "type": "str", + "required": false, + "default": "history", + "list": false, + "show": false + } + }, + "_type": "conversation_kg" + } + }, + "tools": { + "python_repl": { + "template": {}, + "name": "Python REPL", + "description": "A Python shell. Use this to execute python commands. Input should be a valid python command. If you expect output it should be printed out." + }, + "requests": { + "template": {}, + "name": "Requests", + "description": "A portal to the internet. Use this when you need to get specific content from a site. Input should be a specific url, and the output will be all the text on that page." + }, + "terminal": { + "template": {}, + "name": "Terminal", + "description": "Executes commands in a terminal. Input should be valid commands, and the output will be any output from running that command." + }, + "pal-math": { + "template": { + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + } + }, + "name": "PAL-MATH", + "description": "A language model that is really good at solving complex word math problems. Input should be a fully worded hard word math problem." + }, + "pal-colored-objects": { + "template": { + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + } + }, + "name": "PAL-COLOR-OBJ", + "description": "A language model that is really good at reasoning about position and the color attributes of objects. Input should be a fully worded hard reasoning problem. Make sure to include all information about the objects AND the final question you want to answer." + }, + "llm-math": { + "template": { + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + } + }, + "name": "Calculator", + "description": "Useful for when you need to answer questions about math." + }, + "open-meteo-api": { + "template": { + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + } + }, + "name": "Open Meteo API", + "description": "Useful for when you want to get weather information from the OpenMeteo API. The input should be a question in natural language that this API can answer." + }, + "news-api": { + "template": { + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "news_api_key": { + "type": "str", + "required": true, + "list": false, + "show": true + } + }, + "name": "News API", + "description": "Use this when you want to get information about the top headlines of current news stories. The input should be a question in natural language that this API can answer." + }, + "tmdb-api": { + "template": { + "llm": { + "type": "BaseLLM", + "required": true, + "list": false, + "show": true + }, + "tmdb_bearer_token": { + "type": "str", + "required": true, + "list": false, + "show": true + } + }, + "name": "TMDB API", + "description": "Useful for when you want to get information from The Movie Database. The input should be a question in natural language that this API can answer." + }, + "wolfram-alpha": { + "template": { + "wolfram_alpha_appid": { + "type": "str", + "required": true, + "list": false, + "show": true + } + }, + "name": "Wolfram Alpha", + "description": "A wrapper around Wolfram Alpha. Useful for when you need to answer questions about Math, Science, Technology, Culture, Society and Everyday Life. Input should be a search query." + }, + "google-search": { + "template": { + "google_api_key": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "google_cse_id": { + "type": "str", + "required": true, + "list": false, + "show": true + } + }, + "name": "Google Search", + "description": "A wrapper around Google Search. Useful for when you need to answer questions about current events. Input should be a search query." + }, + "serpapi": { + "template": { + "serpapi_api_key": { + "type": "str", + "required": true, + "list": false, + "show": true + }, + "aiosession": { + "type": "str", + "required": true, + "list": false, + "show": true + } + }, + "name": "Search", + "description": "A search engine. Useful for when you need to answer questions about current events. Input should be a search query." + } + } + } \ No newline at end of file diff --git a/src/app.py b/src/app.py index 76f4974b9..65ea4f7f2 100644 --- a/src/app.py +++ b/src/app.py @@ -1,7 +1,7 @@ from fastapi import FastAPI from endpoints import router as endpoints_router from list import router as list_router -from templates import router as templates_router +from signature import router as signatures_router def create_app(): @@ -9,7 +9,7 @@ def create_app(): app = FastAPI() app.include_router(endpoints_router) app.include_router(list_router) - app.include_router(templates_router) + app.include_router(signatures_router) return app diff --git a/src/endpoints.py b/src/endpoints.py index d2d027e20..05d2af226 100644 --- a/src/endpoints.py +++ b/src/endpoints.py @@ -7,31 +7,66 @@ from interface import ( DictableMemory, DictableTool, ) +import signature +import list # build router router = APIRouter() AGENT_TYPE = "conversational-react-description" # define endpoints -> /chain, /agent, /memory, /prompt # return a dict -@router.get("/chain") -def get_chain(): - llm = OpenAI(temperature=0) - chain = DictableChain(llm=llm) - return chain.to_dict() -@router.get("/agent") -def get_agent(): - tools = [DictableTool(name="test", description="test", func=lambda x: x)] - llm = OpenAI(temperature=0) - return initialize_agent(llm=llm, tools=tools, memory=DictableMemory()).__dict__ +@router.get("/") +def get_all(): + tools = list.list_tools() + return { + "chains": {chain: signature.chain(chain) for chain in list.list_chains()}, + "agents": {agent: signature.agent(agent) for agent in list.list_agents()}, + "prompts": {prompt: signature.prompt(prompt) for prompt in list.list_prompts()}, + "llms": {llm: signature.llm(llm) for llm in list.list_llms()}, + # "utilities": { + # "template": { + # # utility: templates.utility(utility) for utility in list.list_utilities() + # } + # }, + "memories": { + memory: signature.memory(memory) for memory in list.list_memories() + }, + # "document_loaders": { + # "template": { + # # memory: templates.document_loader(memory) + # # for memory in list.list_document_loaders() + # } + # }, + # "vectorstores": {"template": {}}, + # "docstores": {"template": {}}, + "tools": { + tool: {"template": signature.tool(tool), **values} + for tool, values in tools.items() + }, + } -@router.get("/memory") -def get_memory(): - return DictableMemory().to_dict() +# @router.get("/chain") +# def get_chain(): +# llm = OpenAI(temperature=0) +# chain = DictableChain(llm=llm) +# return chain.to_dict() -@router.get("/prompt") -def get_prompt(): - return {"template": "template", "input_variables": "input_variables"} +# @router.get("/agent") +# def get_agent(): +# tools = [DictableTool(name="test", description="test", func=lambda x: x)] +# llm = OpenAI(temperature=0) +# return initialize_agent(llm=llm, tools=tools, memory=DictableMemory()).__dict__ + + +# @router.get("/memory") +# def get_memory(): +# return DictableMemory().to_dict() + + +# @router.get("/prompt") +# def get_prompt(): +# return {"template": "template", "input_variables": "input_variables"} diff --git a/src/list.py b/src/list.py index 40d9452be..8a3e6f807 100644 --- a/src/list.py +++ b/src/list.py @@ -32,11 +32,11 @@ def read_items(): "agents", "prompts", "llms", - "utilities", + # "utilities", "memories", - "document_loaders", - "vectorstores", - "docstores", + # "document_loaders", + # "vectorstores", + # "docstores", "tools", ] @@ -44,55 +44,62 @@ def read_items(): @router.get("/chains") def list_chains(): """List all chain types""" - return list(chains.loading.type_to_loader_dict.keys()) + return [ + chain.__annotations__["return"].__name__ + for chain in chains.loading.type_to_loader_dict.values() + ] @router.get("/agents") def list_agents(): """List all agent types""" - return list(agents.loading.AGENT_TO_CLASS.keys()) + # return list(agents.loading.AGENT_TO_CLASS.keys()) + return [agent.__name__ for agent in agents.loading.AGENT_TO_CLASS.values()] @router.get("/prompts") def list_prompts(): """List all prompt types""" - return list(prompts.loading.type_to_loader_dict.keys()) + return [ + prompt.__annotations__["return"].__name__ + for prompt in prompts.loading.type_to_loader_dict.values() + ] @router.get("/llms") def list_llms(): """List all llm types""" - return list(llms.type_to_cls_dict.keys()) + return [llm.__name__ for llm in llms.type_to_cls_dict.values()] @router.get("/memories") def list_memories(): """List all memory types""" - return list(memories.type_to_cls_dict.keys()) + return [memory.__name__ for memory in memories.type_to_cls_dict.values()] -@router.get("/utilities") -def list_utilities(): - """List all utility types""" - return list(utilities.__all__) +# @router.get("/utilities") +# def list_utilities(): +# """List all utility types""" +# return list(utilities.__all__) -@router.get("/document_loaders") -def list_document_loaders(): - """List all document loader types""" - return list(document_loaders.__all__) +# @router.get("/document_loaders") +# def list_document_loaders(): +# """List all document loader types""" +# return list(document_loaders.__all__) -@router.get("/vectorstores") -def list_vectorstores(): - """List all vector store types""" - return list(vectorstores.__all__) +# @router.get("/vectorstores") +# def list_vectorstores(): +# """List all vector store types""" +# return list(vectorstores.__all__) -@router.get("/docstores") -def list_docstores(): - """List all document store types""" - return list(docstore.__all__) +# @router.get("/docstores") +# def list_docstores(): +# """List all document store types""" +# return list(docstore.__all__) @router.get("/tools") diff --git a/src/signature.py b/src/signature.py new file mode 100644 index 000000000..e6fe1e23c --- /dev/null +++ b/src/signature.py @@ -0,0 +1,198 @@ +from fastapi import APIRouter + +from langchain import chains +from langchain import agents +from langchain import prompts +from langchain import llms +from langchain import utilities +from langchain.chains.conversation import memory as memories +from langchain import document_loaders +from langchain.agents.load_tools import ( + get_all_tool_names, + _BASE_TOOLS, + _LLM_TOOLS, + _EXTRA_LLM_TOOLS, + _EXTRA_OPTIONAL_TOOLS, +) +import util +import list +import inspect + +# build router +router = APIRouter( + prefix="/signatures", + tags=["signatures"], +) + +KEYS_TO_REMOVE = ["name", "default_factory"] + + +def build_template_from_function(name: str, dict: dict): + classes = [item.__annotations__["return"].__name__ for item in dict.values()] + + # Raise error if name is not in chains + if name not in classes: + raise Exception(f"{name} not found.") + + for k, v in dict.items(): + if v.__annotations__["return"].__name__ == name: + _type = k + _class = v.__annotations__["return"] + + docs = util.get_class_doc(_class) + + variables = {} + for name, value in _class.__fields__.items(): + variables[name] = {} + for name_, value_ in value.__repr_args__(): + if name_ not in KEYS_TO_REMOVE: + variables[name][name_] = value_ + variables[name]["placeholder"] = docs["Attributes"][name] if name in docs["Attributes"] else "" + return { + "template": util.format_dict(variables), + "_type": _type, + "description": docs["Description"], + } + + # return { + # "template": util.format_dict( + # { + # name: { + # name: value + # for (name, value) in value.__repr_args__() + # if name not in KEYS_TO_REMOVE + # } + # for name, value in _class.__fields__.items() + # } + # ), + # "_type": _type, + # "description": _class.__doc__, + # } + + +def build_template_from_class(name: str, dict: dict): + classes = [item.__name__ for item in dict.values()] + + # Raise error if name is not in chains + if name not in classes: + raise Exception(f"{name} not found.") + + for k, v in dict.items(): + if v.__name__ == name: + _type = k + _class = v + + docs = util.get_class_doc(_class) + + variables = {} + for name, value in _class.__fields__.items(): + variables[name] = {} + for name_, value_ in value.__repr_args__(): + if name_ not in KEYS_TO_REMOVE: + variables[name][name_] = value_ + variables[name]["placeholder"] = docs["Attributes"][name] if name in docs["Attributes"] else "" + + return { + "template": util.format_dict(variables), + "_type": _type, + "description": docs["Description"], + } + + # return { + # "template": util.format_dict( + # { + # name: { + # name: value + # for (name, value) in value.__repr_args__() + # if name not in KEYS_TO_REMOVE + # } + # for name, value in _class.__fields__.items() + # } + # ), + # "_type": _type, + # "description": _class.__doc__, + # } + + +@router.get("/chain") +def chain(name: str): + return build_template_from_function(name, chains.loading.type_to_loader_dict) + + +@router.get("/agent") +def agent(name: str): + return build_template_from_class(name, agents.loading.AGENT_TO_CLASS) + + +@router.get("/prompt") +def prompt(name: str): + return build_template_from_function(name, prompts.loading.type_to_loader_dict) + + +@router.get("/llm") +def llm(name: str): + return build_template_from_class(name, llms.type_to_cls_dict) + + +# @router.get("/utility") +# def utility(name: str): +# # Raise error if name is not in utilities +# if name not in utilities.__all__: +# raise Exception(f"Prompt {name} not found.") +# _class = getattr(utilities, name) +# return { +# name: {name: value for (name, value) in value.__repr_args__() if name != "name"} +# for name, value in _class.__fields__.items() +# } + + +@router.get("/memory") +def memory(name: str): + return build_template_from_class(name, memories.type_to_cls_dict) + + +# @router.get("/document_loader") +# def document_loader(name: str): +# # Raise error if name is not in document_loader +# if name not in document_loaders.__all__: +# raise Exception(f"Prompt {name} not found.") +# _class = getattr(document_loaders, name) +# return { +# name: {name: value for (name, value) in value.__repr_args__() if name != "name"} +# for name, value in _class.__fields__.items() +# } + + +@router.get("/tool") +def tool(name: str): + # Raise error if name is not in tools + if name not in get_all_tool_names(): + raise Exception(f"Tool {name} not found.") + + type_dict = { + "str": { + "type": "str", + "required": True, + "list": False, + "show": True, + "placeholder": "", + "default": "", + }, + "llm": {"type": "BaseLLM", "required": True, "list": False, "show": True}, + } + + if name in _BASE_TOOLS: + params = [] + elif name in _LLM_TOOLS: + params = ["llm"] + elif name in _EXTRA_LLM_TOOLS: + _, extra_keys = _EXTRA_LLM_TOOLS[name] + params = ["llm"] + extra_keys + elif name in _EXTRA_OPTIONAL_TOOLS: + _, extra_keys = _EXTRA_OPTIONAL_TOOLS[name] + params = extra_keys + + return { + param: (type_dict[param] if param == "llm" else type_dict["str"]) + for param in params + } diff --git a/src/templates.py b/src/templates.py deleted file mode 100644 index 8db140a6a..000000000 --- a/src/templates.py +++ /dev/null @@ -1,125 +0,0 @@ -from fastapi import APIRouter - -from langchain import chains -from langchain import agents -from langchain import prompts -from langchain import llms -from langchain import utilities -from langchain.chains.conversation import memory as memories -from langchain import document_loaders -from langchain.agents.load_tools import ( - get_all_tool_names, - _BASE_TOOLS, - _LLM_TOOLS, - _EXTRA_LLM_TOOLS, - _EXTRA_OPTIONAL_TOOLS, -) -import util - -# build router -router = APIRouter( - prefix="/templates", - tags=["templates"], -) - - -@router.get("/chain") -def chain(name: str): - # Raise error if name is not in chains - if name not in chains.loading.type_to_loader_dict.keys(): - raise Exception(f"Prompt {name} not found.") - _class = chains.loading.type_to_loader_dict[name].__annotations__["return"] - return { - name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__fields__.items() - } - - -@router.get("/agent") -def agent(name: str): - # Raise error if name is not in agents - if name not in agents.loading.AGENT_TO_CLASS.keys(): - raise Exception(f"Prompt {name} not found.") - _class = agents.loading.AGENT_TO_CLASS[name] - return { - name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__fields__.items() - } - - -@router.get("/prompt") -def prompt(name: str): - # Raise error if name is not in prompts - if name not in prompts.loading.type_to_loader_dict.keys(): - raise Exception(f"Prompt {name} not found.") - _class = prompts.loading.type_to_loader_dict[name].__annotations__["return"] - return { - name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__fields__.items() - } - - -@router.get("/llm") -def llm(name: str): - # Raise error if name is not in llms - if name not in llms.type_to_cls_dict.keys(): - raise Exception(f"Prompt {name} not found.") - _class = llms.type_to_cls_dict[name] - return { - name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__fields__.items() - } - - -@router.get("/utility") -def utility(name: str): - # Raise error if name is not in utilities - if name not in utilities.__all__: - raise Exception(f"Prompt {name} not found.") - _class = getattr(utilities, name) - return { - name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__dict__["__fields__"].items() - } - - -@router.get("/memory") -def memory(name: str): - # Raise error if name is not in memory - if name not in memories.type_to_cls_dict.keys(): - raise Exception(f"Prompt {name} not found.") - _class = memories.type_to_cls_dict[name] - return { - name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__dict__["__fields__"].items() - } - - -@router.get("/document_loader") -def document_loader(name: str): - # Raise error if name is not in document_loader - if name not in document_loaders.__all__: - raise Exception(f"Prompt {name} not found.") - _class = getattr(document_loaders, name) - return { - name: {name: value for (name, value) in value.__repr_args__() if name != "name"} - for name, value in _class.__fields__.items() - } - - -@router.get("/tool") -def tool(name: str): - # Raise error if name is not in tools - if name not in get_all_tool_names(): - raise Exception(f"Tool {name} not found.") - - if name in _BASE_TOOLS: - return {"parameters": []} - elif name in _LLM_TOOLS: - return {"parameters": ["llm"]} - elif name in _EXTRA_LLM_TOOLS: - _, extra_keys = _EXTRA_LLM_TOOLS[name] - return {"parameters": ["llm"] + extra_keys} - elif name in _EXTRA_OPTIONAL_TOOLS: - _, extra_keys = _EXTRA_OPTIONAL_TOOLS[name] - return {"parameters": extra_keys} diff --git a/src/util.py b/src/util.py index bb5184f3e..f1c1bd1fa 100644 --- a/src/util.py +++ b/src/util.py @@ -27,3 +27,148 @@ def get_tool_params(func): # Return None if no return statement was found return None + + +def get_class_doc(class_name): + """ + Extracts information from the docstring of a given class. + + Args: + class_name: the class to extract information from + + Returns: + A dictionary containing the extracted information, with keys + for 'Description', 'Parameters', 'Attributes', and 'Returns'. + """ + # Get the class docstring + docstring = class_name.__doc__ + + # Parse the docstring to extract information + lines = docstring.split("\n") + data = { + "Description": "", + "Parameters": {}, + "Attributes": {}, + "Example": [], + "Returns": {}, + } + + current_section = "Description" + + for line in lines: + line = line.strip() + + if not line: + continue + + if ( + line.startswith(tuple(data.keys())) + and len(line.split()) == 1 + and line.endswith(":") + ): + current_section = line[:-1] + continue + + if current_section == "Description": + data[current_section] += line + elif current_section == "Example": + data[current_section] += line + else: + try: + param, desc = line.split(":") + except: + param, desc = "", "" + data[current_section][param.strip()] = desc.strip() + + return data + + +# def format_dict(d): +# # Remove from keys +# keys_to_remove = ["callback_manager"] +# for key in keys_to_remove: +# if key in d: +# d.pop(key) + +# for key, value in d.items(): +# _type = value["type"] + +# # Add optional parameter +# if "Optional" in _type: +# _type = _type.replace("Optional[", "")[:-1] + +# # Add list parameter +# if "List" in _type: +# _type = _type.replace("List[", "")[:-1] +# value["list"] = True +# else: +# value["list"] = False + +# if "Mapping" in _type: +# _type = _type.replace("Mapping", "dict") + +# value["type"] = _type + +# # Show if required +# if value["required"] or key in ["allowed_tools", "verbose", "Memory"]: +# value["show"] = True +# else: +# value["show"] = False + +# # If default, change to value +# if value['type'] == 'str': +# value["value"] = value["default"] if 'default' in value else '' +# if 'default' in value: +# value.pop("default") + +# return {key: value for key, value in d.items() if value["show"]} + + +def format_dict(d): + """ + Formats a dictionary by removing certain keys and modifying the values of other keys. + + Args: + d: the dictionary to format + + Returns: + A new dictionary with the desired modifications applied. + """ + # Remove keys to exclude + keys_to_exclude = ["callback_manager"] + d = {key: value for key, value in d.items() if key not in keys_to_exclude} + + # Process remaining keys + for key, value in d.items(): + _type = value["type"] + + # Remove 'Optional' wrapper + if "Optional" in _type: + _type = _type.replace("Optional[", "")[:-1] + + # Check for list type + if "List" in _type: + _type = _type.replace("List[", "")[:-1] + value["list"] = True + else: + value["list"] = False + + # Replace 'Mapping' with 'dict' + if "Mapping" in _type: + _type = _type.replace("Mapping", "dict") + + value["type"] = _type + + # Show if required + value["show"] = bool( + value["required"] or key in ["allowed_tools", "verbose", "Memory"] + ) + + # Replace default value with actual value + if _type == "str": + value["value"] = value.get("default", "") + if "default" in value: + value.pop("default") + + # Filter out keys that should not be shown + return {key: value for key, value in d.items() if value["show"]} From 04ac50e9efa0979c950850c6bf21b3c4246000b8 Mon Sep 17 00:00:00 2001 From: Ibis Prevedello Date: Fri, 17 Feb 2023 18:09:34 -0300 Subject: [PATCH 10/18] feat: all types working --- build_and_push | 2 +- src/app.py | 16 +++++++ src/endpoints.py | 16 ++++--- src/list.py | 16 +------ src/signature.py | 93 ++++++++++++++++++++-------------------- src/util.py | 109 +++++++++++++++++++++++------------------------ 6 files changed, 131 insertions(+), 121 deletions(-) diff --git a/build_and_push b/build_and_push index 30d8501d5..dc98bc3e1 100755 --- a/build_and_push +++ b/build_and_push @@ -1,5 +1,5 @@ #! /bin/bash poetry remove langchain -docker build -t ibiscp/expert:v0.0.6 . && docker push ibiscp/expert:v0.0.6 +docker build -t ibiscp/expert:v0.0.11 . && docker push ibiscp/expert:v0.0.11 poetry add --editable ../langchain diff --git a/src/app.py b/src/app.py index 65ea4f7f2..d91a1c4ef 100644 --- a/src/app.py +++ b/src/app.py @@ -2,11 +2,27 @@ from fastapi import FastAPI from endpoints import router as endpoints_router from list import router as list_router from signature import router as signatures_router +from fastapi.middleware.cors import CORSMiddleware def create_app(): """Create the FastAPI app and include the router.""" app = FastAPI() + + origins = [ + "http://localhost", + "http://localhost:8080", + "http://localhost:3000", + ] + + app.add_middleware( + CORSMiddleware, + allow_origins=origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], + ) + app.include_router(endpoints_router) app.include_router(list_router) app.include_router(signatures_router) diff --git a/src/endpoints.py b/src/endpoints.py index 05d2af226..0e79cde13 100644 --- a/src/endpoints.py +++ b/src/endpoints.py @@ -19,7 +19,7 @@ AGENT_TYPE = "conversational-react-description" @router.get("/") def get_all(): - tools = list.list_tools() + # tools = list.list_tools() return { "chains": {chain: signature.chain(chain) for chain in list.list_chains()}, "agents": {agent: signature.agent(agent) for agent in list.list_agents()}, @@ -41,13 +41,19 @@ def get_all(): # }, # "vectorstores": {"template": {}}, # "docstores": {"template": {}}, - "tools": { - tool: {"template": signature.tool(tool), **values} - for tool, values in tools.items() - }, + # "tools": { + # tool: {"template": signature.tool(tool), **values} + # for tool, values in tools.items() + # }, + "tools": {tool: signature.tool(tool) for tool in list.list_tools()}, } +@router.post("/load") +def get_load(data: dict[str, str]) -> str: + return "Hello Otávio!" + + # @router.get("/chain") # def get_chain(): # llm = OpenAI(temperature=0) diff --git a/src/list.py b/src/list.py index 8a3e6f807..4ccbdf358 100644 --- a/src/list.py +++ b/src/list.py @@ -9,12 +9,7 @@ from langchain.chains.conversation import memory as memories from langchain import document_loaders from langchain import vectorstores from langchain import docstore -from langchain.agents.load_tools import ( - _BASE_TOOLS, - _LLM_TOOLS, - _EXTRA_LLM_TOOLS, - _EXTRA_OPTIONAL_TOOLS, -) +from langchain.agents.load_tools import get_all_tool_names import util @@ -106,11 +101,4 @@ def list_memories(): def list_tools(): """List all load tools""" - merged_dict = { - **_BASE_TOOLS, - **_LLM_TOOLS, - **{k: v[0] for k, v in _EXTRA_LLM_TOOLS.items()}, - **{k: v[0] for k, v in _EXTRA_OPTIONAL_TOOLS.items()}, - } - - return {k: util.get_tool_params(v) for k, v in merged_dict.items()} + return get_all_tool_names() diff --git a/src/signature.py b/src/signature.py index e6fe1e23c..63959c6e5 100644 --- a/src/signature.py +++ b/src/signature.py @@ -24,8 +24,6 @@ router = APIRouter( tags=["signatures"], ) -KEYS_TO_REMOVE = ["name", "default_factory"] - def build_template_from_function(name: str, dict: dict): classes = [item.__annotations__["return"].__name__ for item in dict.values()] @@ -34,41 +32,38 @@ def build_template_from_function(name: str, dict: dict): if name not in classes: raise Exception(f"{name} not found.") - for k, v in dict.items(): + for _type, v in dict.items(): if v.__annotations__["return"].__name__ == name: - _type = k _class = v.__annotations__["return"] docs = util.get_class_doc(_class) - variables = {} + variables = {"_type": _type} for name, value in _class.__fields__.items(): + if name in ["callback_manager", "requests_wrapper"]: + continue variables[name] = {} for name_, value_ in value.__repr_args__(): - if name_ not in KEYS_TO_REMOVE: + if name_ == "default_factory": + try: + variables[name]["default"] = util.get_default_factory( + module=_class.__base__.__module__, function=value_ + ) + except: + variables[name]["default"] = None + elif name_ not in ["name"]: variables[name][name_] = value_ - variables[name]["placeholder"] = docs["Attributes"][name] if name in docs["Attributes"] else "" + + variables[name]["placeholder"] = ( + docs["Attributes"][name] if name in docs["Attributes"] else "" + ) + return { "template": util.format_dict(variables), - "_type": _type, "description": docs["Description"], + "base_classes": util.get_base_classes(_class), } - # return { - # "template": util.format_dict( - # { - # name: { - # name: value - # for (name, value) in value.__repr_args__() - # if name not in KEYS_TO_REMOVE - # } - # for name, value in _class.__fields__.items() - # } - # ), - # "_type": _type, - # "description": _class.__doc__, - # } - def build_template_from_class(name: str, dict: dict): classes = [item.__name__ for item in dict.values()] @@ -77,42 +72,38 @@ def build_template_from_class(name: str, dict: dict): if name not in classes: raise Exception(f"{name} not found.") - for k, v in dict.items(): + for _type, v in dict.items(): if v.__name__ == name: - _type = k _class = v docs = util.get_class_doc(_class) - variables = {} + variables = {"_type": _type} for name, value in _class.__fields__.items(): + if name in ["callback_manager"]: + continue variables[name] = {} for name_, value_ in value.__repr_args__(): - if name_ not in KEYS_TO_REMOVE: + if name_ == "default_factory": + try: + variables[name]["default"] = util.get_default_factory( + module=_class.__base__.__module__, function=value_ + ) + except: + variables[name]["default"] = None + elif name_ not in ["name"]: variables[name][name_] = value_ - variables[name]["placeholder"] = docs["Attributes"][name] if name in docs["Attributes"] else "" + + variables[name]["placeholder"] = ( + docs["Attributes"][name] if name in docs["Attributes"] else "" + ) return { "template": util.format_dict(variables), - "_type": _type, "description": docs["Description"], + "base_classes": util.get_base_classes(_class), } - # return { - # "template": util.format_dict( - # { - # name: { - # name: value - # for (name, value) in value.__repr_args__() - # if name not in KEYS_TO_REMOVE - # } - # for name, value in _class.__fields__.items() - # } - # ), - # "_type": _type, - # "description": _class.__doc__, - # } - @router.get("/chain") def chain(name: str): @@ -193,6 +184,16 @@ def tool(name: str): params = extra_keys return { - param: (type_dict[param] if param == "llm" else type_dict["str"]) - for param in params + "template": { + param: (type_dict[param] if param == "llm" else type_dict["str"]) + for param in params + }, + **util.get_tool_params(util.get_tools_dict(name)), + "base_classes": ["Tool"], } + + +# {"template": signature.tool(tool), **values} +# for tool, values in tools.items() +# } +# return {k: util.get_tool_params(v) for k, v in merged_dict.items()} diff --git a/src/util.py b/src/util.py index f1c1bd1fa..baac2dad3 100644 --- a/src/util.py +++ b/src/util.py @@ -1,5 +1,47 @@ import ast import inspect +import re +import importlib +from langchain.agents.load_tools import ( + _BASE_TOOLS, + _LLM_TOOLS, + _EXTRA_LLM_TOOLS, + _EXTRA_OPTIONAL_TOOLS, +) +from typing import Optional + + +def get_base_classes(cls): + bases = cls.__bases__ + if not bases: + return [] + else: + result = [] + for base in bases: + if any(type in base.__module__ for type in ["pydantic", "abc"]): + continue + result.append(base.__name__) + result.extend(get_base_classes(base)) + return result + + +def get_default_factory(module: str, function: str): + pattern = r"" + + if match := re.search(pattern, function): + module = importlib.import_module(module) + return getattr(module, match[1])() + return None + + +def get_tools_dict(name: Optional[str] = None): + tools = { + **_BASE_TOOLS, + **_LLM_TOOLS, + **{k: v[0] for k, v in _EXTRA_LLM_TOOLS.items()}, + **{k: v[0] for k, v in _EXTRA_OPTIONAL_TOOLS.items()}, + } + return tools[name] if name else tools def get_tool_params(func): @@ -69,61 +111,15 @@ def get_class_doc(class_name): current_section = line[:-1] continue - if current_section == "Description": - data[current_section] += line - elif current_section == "Example": + if current_section in ["Description", "Example"]: data[current_section] += line else: - try: - param, desc = line.split(":") - except: - param, desc = "", "" + param, desc = line.split(":") data[current_section][param.strip()] = desc.strip() return data -# def format_dict(d): -# # Remove from keys -# keys_to_remove = ["callback_manager"] -# for key in keys_to_remove: -# if key in d: -# d.pop(key) - -# for key, value in d.items(): -# _type = value["type"] - -# # Add optional parameter -# if "Optional" in _type: -# _type = _type.replace("Optional[", "")[:-1] - -# # Add list parameter -# if "List" in _type: -# _type = _type.replace("List[", "")[:-1] -# value["list"] = True -# else: -# value["list"] = False - -# if "Mapping" in _type: -# _type = _type.replace("Mapping", "dict") - -# value["type"] = _type - -# # Show if required -# if value["required"] or key in ["allowed_tools", "verbose", "Memory"]: -# value["show"] = True -# else: -# value["show"] = False - -# # If default, change to value -# if value['type'] == 'str': -# value["value"] = value["default"] if 'default' in value else '' -# if 'default' in value: -# value.pop("default") - -# return {key: value for key, value in d.items() if value["show"]} - - def format_dict(d): """ Formats a dictionary by removing certain keys and modifying the values of other keys. @@ -134,12 +130,11 @@ def format_dict(d): Returns: A new dictionary with the desired modifications applied. """ - # Remove keys to exclude - keys_to_exclude = ["callback_manager"] - d = {key: value for key, value in d.items() if key not in keys_to_exclude} # Process remaining keys for key, value in d.items(): + if key == "_type": + continue _type = value["type"] # Remove 'Optional' wrapper @@ -157,18 +152,22 @@ def format_dict(d): if "Mapping" in _type: _type = _type.replace("Mapping", "dict") - value["type"] = _type + value["type"] = "Tool" if key == "allowed_tools" else _type # Show if required value["show"] = bool( - value["required"] or key in ["allowed_tools", "verbose", "Memory"] + (value["required"] and key not in ["input_variables"]) + or key in ["allowed_tools", "verbose", "Memory", "memory", "prefix"] + or "api_key" in key ) # Replace default value with actual value - if _type == "str": + if _type in ["str", "bool"]: value["value"] = value.get("default", "") if "default" in value: value.pop("default") # Filter out keys that should not be shown - return {key: value for key, value in d.items() if value["show"]} + return ( + d # {key: value for key, value in d.items() if key == "_type" or value["show"]} + ) From 63ed529b773a913bce894bde188c0c908b2826c1 Mon Sep 17 00:00:00 2001 From: Ibis Prevedello Date: Tue, 21 Feb 2023 15:57:45 -0300 Subject: [PATCH 11/18] refac: last changes --- build_and_push | 2 +- src/app.py | 2 +- src/endpoints.py | 45 +++++++++++++++++---------------------------- src/signature.py | 13 ++++++++----- src/util.py | 20 +++++++++++++++----- 5 files changed, 42 insertions(+), 40 deletions(-) diff --git a/build_and_push b/build_and_push index dc98bc3e1..cf7e82e48 100755 --- a/build_and_push +++ b/build_and_push @@ -1,5 +1,5 @@ #! /bin/bash poetry remove langchain -docker build -t ibiscp/expert:v0.0.11 . && docker push ibiscp/expert:v0.0.11 +docker build -t ibiscp/expert:v0.0.12 . && docker push ibiscp/expert:v0.0.12 poetry add --editable ../langchain diff --git a/src/app.py b/src/app.py index d91a1c4ef..c68243b79 100644 --- a/src/app.py +++ b/src/app.py @@ -34,4 +34,4 @@ app = create_app() if __name__ == "__main__": import uvicorn - uvicorn.run(app, host="0.0.0.0", port=8000) + uvicorn.run(app, host="0.0.0.0", port=5003) diff --git a/src/endpoints.py b/src/endpoints.py index 0e79cde13..02e96f12a 100644 --- a/src/endpoints.py +++ b/src/endpoints.py @@ -12,14 +12,21 @@ import list # build router router = APIRouter() -AGENT_TYPE = "conversational-react-description" -# define endpoints -> /chain, /agent, /memory, /prompt -# return a dict + + +def get_type_list(): + all = get_all() + + all.pop("tools") + + for key, value in all.items(): + all[key] = [item["template"]["_type"] for item in value.values()] + + return all @router.get("/") def get_all(): - # tools = list.list_tools() return { "chains": {chain: signature.chain(chain) for chain in list.list_chains()}, "agents": {agent: signature.agent(agent) for agent in list.list_agents()}, @@ -49,30 +56,12 @@ def get_all(): } -@router.post("/load") -def get_load(data: dict[str, str]) -> str: - return "Hello Otávio!" +@router.post("/predict") +def get_load(data: dict[str, str]): + a = get_type_list() + # Build json -# @router.get("/chain") -# def get_chain(): -# llm = OpenAI(temperature=0) -# chain = DictableChain(llm=llm) -# return chain.to_dict() + # if type in a["prompts"]: - -# @router.get("/agent") -# def get_agent(): -# tools = [DictableTool(name="test", description="test", func=lambda x: x)] -# llm = OpenAI(temperature=0) -# return initialize_agent(llm=llm, tools=tools, memory=DictableMemory()).__dict__ - - -# @router.get("/memory") -# def get_memory(): -# return DictableMemory().to_dict() - - -# @router.get("/prompt") -# def get_prompt(): -# return {"template": "template", "input_variables": "input_variables"} + return a diff --git a/src/signature.py b/src/signature.py index 63959c6e5..0a46ba9d6 100644 --- a/src/signature.py +++ b/src/signature.py @@ -167,7 +167,7 @@ def tool(name: str): "list": False, "show": True, "placeholder": "", - "default": "", + "value": "", }, "llm": {"type": "BaseLLM", "required": True, "list": False, "show": True}, } @@ -183,11 +183,14 @@ def tool(name: str): _, extra_keys = _EXTRA_OPTIONAL_TOOLS[name] params = extra_keys + template = { + param: (type_dict[param] if param == "llm" else type_dict["str"]) + for param in params + } + template["_type"] = name + return { - "template": { - param: (type_dict[param] if param == "llm" else type_dict["str"]) - for param in params - }, + "template": template, **util.get_tool_params(util.get_tools_dict(name)), "base_classes": ["Tool"], } diff --git a/src/util.py b/src/util.py index baac2dad3..8a3f8c0ab 100644 --- a/src/util.py +++ b/src/util.py @@ -157,15 +157,25 @@ def format_dict(d): # Show if required value["show"] = bool( (value["required"] and key not in ["input_variables"]) - or key in ["allowed_tools", "verbose", "Memory", "memory", "prefix"] + or key + in ["allowed_tools", "verbose", "Memory", "memory", "prefix", "examples"] or "api_key" in key ) + # Add multline + if key in ["suffix", "prefix", "template", "examples"]: + value["multline"] = True + else: + value["multline"] = False + # Replace default value with actual value - if _type in ["str", "bool"]: - value["value"] = value.get("default", "") - if "default" in value: - value.pop("default") + # if _type in ["str", "bool"]: + # value["value"] = value.get("default", "") + # if "default" in value: + # value.pop("default") + if "default" in value: + value["value"] = value["default"] + value.pop("default") # Filter out keys that should not be shown return ( From 293442f303f85175609e6804566b39c6fcbbacb4 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Tue, 21 Feb 2023 19:19:14 +0000 Subject: [PATCH 12/18] refac: formatting, naming improvements, error improvements --- src/app.py | 2 +- src/endpoints.py | 41 +++++++++-------- src/interface.py | 45 ------------------- src/{list.py => list_endpoints.py} | 1 + src/signature.py | 71 +++++++++++++++++++----------- src/util.py | 1 + 6 files changed, 69 insertions(+), 92 deletions(-) delete mode 100644 src/interface.py rename src/{list.py => list_endpoints.py} (98%) diff --git a/src/app.py b/src/app.py index c68243b79..f683f08c8 100644 --- a/src/app.py +++ b/src/app.py @@ -1,6 +1,6 @@ from fastapi import FastAPI from endpoints import router as endpoints_router -from list import router as list_router +from list_endpoints import router as list_router from signature import router as signatures_router from fastapi.middleware.cors import CORSMiddleware diff --git a/src/endpoints.py b/src/endpoints.py index 02e96f12a..efd11ad65 100644 --- a/src/endpoints.py +++ b/src/endpoints.py @@ -1,44 +1,43 @@ -from fastapi import APIRouter, FastAPI -from langchain import OpenAI -from langchain.agents import initialize_agent -from interface import ( - DictableChain, - DictableConversationalAgent, - DictableMemory, - DictableTool, -) +from fastapi import APIRouter import signature -import list +import list_endpoints # build router router = APIRouter() def get_type_list(): - all = get_all() + all_types = get_all() - all.pop("tools") + all_types.pop("tools") - for key, value in all.items(): - all[key] = [item["template"]["_type"] for item in value.values()] + for key, value in all_types.items(): + all_types[key] = [item["template"]["_type"] for item in value.values()] - return all + return all_types @router.get("/") def get_all(): return { - "chains": {chain: signature.chain(chain) for chain in list.list_chains()}, - "agents": {agent: signature.agent(agent) for agent in list.list_agents()}, - "prompts": {prompt: signature.prompt(prompt) for prompt in list.list_prompts()}, - "llms": {llm: signature.llm(llm) for llm in list.list_llms()}, + "chains": { + chain: signature.chain(chain) for chain in list_endpoints.list_chains() + }, + "agents": { + agent: signature.agent(agent) for agent in list_endpoints.list_agents() + }, + "prompts": { + prompt: signature.prompt(prompt) for prompt in list_endpoints.list_prompts() + }, + "llms": {llm: signature.llm(llm) for llm in list_endpoints.list_llms()}, # "utilities": { # "template": { # # utility: templates.utility(utility) for utility in list.list_utilities() # } # }, "memories": { - memory: signature.memory(memory) for memory in list.list_memories() + memory: signature.memory(memory) + for memory in list_endpoints.list_memories() }, # "document_loaders": { # "template": { @@ -52,7 +51,7 @@ def get_all(): # tool: {"template": signature.tool(tool), **values} # for tool, values in tools.items() # }, - "tools": {tool: signature.tool(tool) for tool in list.list_tools()}, + "tools": {tool: signature.tool(tool) for tool in list_endpoints.list_tools()}, } diff --git a/src/interface.py b/src/interface.py deleted file mode 100644 index e1afefe8e..000000000 --- a/src/interface.py +++ /dev/null @@ -1,45 +0,0 @@ -from langchain.chains import ConversationChain -from langchain.chains.conversation.memory import ConversationBufferMemory -from langchain.agents import Agent, ConversationalAgent, Tool, initialize_agent - - -class Dictable(object): - """A mixin that allows an object to be converted to and from a dict""" - - @classmethod - def from_dict(cls, d): - """Convert a dict to an object""" - return cls(**d) - - def to_dict(self): - return self.__dict__ - - -class DictableChain(Dictable, ConversationChain): - """A ConversationChain that is also Dictable""" - - pass - - -class DictableMemory(Dictable, ConversationBufferMemory): - """A ConversationBufferMemory that is also Dictable""" - - pass - - -class DictableAgent(Dictable, Agent): - """An Agent that is also Dictable""" - - pass - - -class DictableConversationalAgent(Dictable, ConversationalAgent): - """A ConversationalAgent that is also Dictable""" - - pass - - -class DictableTool(Dictable, Tool): - """A Tool that is also Dictable""" - - pass diff --git a/src/list.py b/src/list_endpoints.py similarity index 98% rename from src/list.py rename to src/list_endpoints.py index 4ccbdf358..53a2dc82d 100644 --- a/src/list.py +++ b/src/list_endpoints.py @@ -22,6 +22,7 @@ router = APIRouter( @router.get("/") def read_items(): + """List all components""" return [ "chains", "agents", diff --git a/src/signature.py b/src/signature.py index 0a46ba9d6..e72c968a6 100644 --- a/src/signature.py +++ b/src/signature.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException from langchain import chains from langchain import agents @@ -15,8 +15,6 @@ from langchain.agents.load_tools import ( _EXTRA_OPTIONAL_TOOLS, ) import util -import list -import inspect # build router router = APIRouter( @@ -25,14 +23,16 @@ router = APIRouter( ) -def build_template_from_function(name: str, dict: dict): - classes = [item.__annotations__["return"].__name__ for item in dict.values()] +def build_template_from_function(name: str, type_to_loader_dict: dict): + classes = [ + item.__annotations__["return"].__name__ for item in type_to_loader_dict.values() + ] # Raise error if name is not in chains if name not in classes: - raise Exception(f"{name} not found.") + raise ValueError(f"{name} not found") - for _type, v in dict.items(): + for _type, v in type_to_loader_dict.items(): if v.__annotations__["return"].__name__ == name: _class = v.__annotations__["return"] @@ -49,7 +49,7 @@ def build_template_from_function(name: str, dict: dict): variables[name]["default"] = util.get_default_factory( module=_class.__base__.__module__, function=value_ ) - except: + except Exception: variables[name]["default"] = None elif name_ not in ["name"]: variables[name][name_] = value_ @@ -65,14 +65,14 @@ def build_template_from_function(name: str, dict: dict): } -def build_template_from_class(name: str, dict: dict): - classes = [item.__name__ for item in dict.values()] +def build_template_from_class(name: str, type_to_cls_dict: dict): + classes = [item.__name__ for item in type_to_cls_dict.values()] # Raise error if name is not in chains if name not in classes: - raise Exception(f"{name} not found.") + raise ValueError(f"{name} not found.") - for _type, v in dict.items(): + for _type, v in type_to_cls_dict.items(): if v.__name__ == name: _class = v @@ -89,7 +89,7 @@ def build_template_from_class(name: str, dict: dict): variables[name]["default"] = util.get_default_factory( module=_class.__base__.__module__, function=value_ ) - except: + except Exception: variables[name]["default"] = None elif name_ not in ["name"]: variables[name][name_] = value_ @@ -106,23 +106,39 @@ def build_template_from_class(name: str, dict: dict): @router.get("/chain") -def chain(name: str): - return build_template_from_function(name, chains.loading.type_to_loader_dict) +def get_chain(name: str): + """Get the signature of a chain.""" + try: + return build_template_from_function(name, chains.loading.type_to_loader_dict) + except ValueError as exc: + raise HTTPException(status_code=404, detail="Chain not found") from exc @router.get("/agent") -def agent(name: str): - return build_template_from_class(name, agents.loading.AGENT_TO_CLASS) +def get_agent(name: str): + """Get the signature of an agent.""" + try: + return build_template_from_class(name, agents.loading.AGENT_TO_CLASS) + except ValueError as exc: + raise HTTPException(status_code=404, detail="Agent not found") from exc @router.get("/prompt") -def prompt(name: str): - return build_template_from_function(name, prompts.loading.type_to_loader_dict) +def get_prompt(name: str): + """Get the signature of a prompt.""" + try: + return build_template_from_function(name, prompts.loading.type_to_loader_dict) + except ValueError as exc: + raise HTTPException(status_code=404, detail="Prompt not found") from exc @router.get("/llm") -def llm(name: str): - return build_template_from_class(name, llms.type_to_cls_dict) +def get_llm(name: str): + """Get the signature of an llm.""" + try: + return build_template_from_class(name, llms.type_to_cls_dict) + except ValueError as exc: + raise HTTPException(status_code=404, detail="LLM not found") from exc # @router.get("/utility") @@ -138,8 +154,12 @@ def llm(name: str): @router.get("/memory") -def memory(name: str): - return build_template_from_class(name, memories.type_to_cls_dict) +def get_memory(name: str): + """Get the signature of a memory.""" + try: + return build_template_from_class(name, memories.type_to_cls_dict) + except ValueError as exc: + raise HTTPException(status_code=404, detail="Memory not found") from exc # @router.get("/document_loader") @@ -155,10 +175,11 @@ def memory(name: str): @router.get("/tool") -def tool(name: str): +def get_tool(name: str): + """Get the signature of a tool.""" # Raise error if name is not in tools if name not in get_all_tool_names(): - raise Exception(f"Tool {name} not found.") + raise HTTPException(status_code=404, detail=f"Tool {name} not found.") type_dict = { "str": { diff --git a/src/util.py b/src/util.py index 8a3f8c0ab..dbee3503c 100644 --- a/src/util.py +++ b/src/util.py @@ -35,6 +35,7 @@ def get_default_factory(module: str, function: str): def get_tools_dict(name: Optional[str] = None): + """Get the tools dictionary.""" tools = { **_BASE_TOOLS, **_LLM_TOOLS, From b62174bb16013419177c53632c2d93866e61c3b8 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Tue, 21 Feb 2023 19:24:30 +0000 Subject: [PATCH 13/18] style: removing unused imports --- src/list_endpoints.py | 5 ----- src/signature.py | 15 +++++---------- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/list_endpoints.py b/src/list_endpoints.py index 53a2dc82d..5b8c27eea 100644 --- a/src/list_endpoints.py +++ b/src/list_endpoints.py @@ -4,13 +4,8 @@ from langchain import chains from langchain import agents from langchain import prompts from langchain import llms -from langchain import utilities from langchain.chains.conversation import memory as memories -from langchain import document_loaders -from langchain import vectorstores -from langchain import docstore from langchain.agents.load_tools import get_all_tool_names -import util # build router diff --git a/src/signature.py b/src/signature.py index e72c968a6..70050db88 100644 --- a/src/signature.py +++ b/src/signature.py @@ -1,19 +1,14 @@ from fastapi import APIRouter, HTTPException - -from langchain import chains -from langchain import agents -from langchain import prompts -from langchain import llms -from langchain import utilities -from langchain.chains.conversation import memory as memories -from langchain import document_loaders +from langchain import agents, chains, llms, prompts from langchain.agents.load_tools import ( - get_all_tool_names, _BASE_TOOLS, - _LLM_TOOLS, _EXTRA_LLM_TOOLS, _EXTRA_OPTIONAL_TOOLS, + _LLM_TOOLS, + get_all_tool_names, ) +from langchain.chains.conversation import memory as memories + import util # build router From 38ce27352d137320df531fb99b1b7a63cf7eecc5 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Tue, 21 Feb 2023 19:25:25 +0000 Subject: [PATCH 14/18] refac: small refactor and formatting --- src/util.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/util.py b/src/util.py index dbee3503c..54ce7abca 100644 --- a/src/util.py +++ b/src/util.py @@ -123,7 +123,8 @@ def get_class_doc(class_name): def format_dict(d): """ - Formats a dictionary by removing certain keys and modifying the values of other keys. + Formats a dictionary by removing certain keys and modifying the + values of other keys. Args: d: the dictionary to format @@ -164,11 +165,7 @@ def format_dict(d): ) # Add multline - if key in ["suffix", "prefix", "template", "examples"]: - value["multline"] = True - else: - value["multline"] = False - + value["multline"] = key in ["suffix", "prefix", "template", "examples"] # Replace default value with actual value # if _type in ["str", "bool"]: # value["value"] = value.get("default", "") From 784579e06ac3888da568b999e37c0f3503885346 Mon Sep 17 00:00:00 2001 From: Ibis Prevedello Date: Wed, 22 Feb 2023 11:18:19 -0300 Subject: [PATCH 15/18] feat: implemented load --- poetry.lock | 16 ++++++++- pyproject.toml | 1 + src/endpoints.py | 45 +++++++++++++++++++----- src/list_endpoints.py | 6 +++- src/payload.py | 80 +++++++++++++++++++++++++++++++++++++++++++ src/signature.py | 26 +++++++++----- src/util.py | 6 ++-- 7 files changed, 157 insertions(+), 23 deletions(-) create mode 100644 src/payload.py diff --git a/poetry.lock b/poetry.lock index 6a37adf87..0303ae304 100644 --- a/poetry.lock +++ b/poetry.lock @@ -268,6 +268,17 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "google-search-results" +version = "2.4.1" +description = "Scrape and search localized results from Google, Bing, Baidu, Yahoo, Yandex, Ebay, Homedepot, youtube at scale using SerpApi.com" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +requests = "*" + [[package]] name = "greenlet" version = "2.0.2" @@ -933,7 +944,7 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "ffc4b17c403dab7f934d2c026b83757cc40066a79d64ab27842908b40b0bedeb" +content-hash = "a8de7c079509305c680e1408fc12648c5ccda4963d55cc6d5a31758dad702688" [metadata.files] aiohttp = [ @@ -1282,6 +1293,9 @@ frozenlist = [ {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"}, {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"}, ] +google-search-results = [ + {file = "google_search_results-2.4.1.tar.gz", hash = "sha256:021746fc21c0b0786e61a2d103d93a08c5c84e204d3f93cd4d589e0e117614a7"}, +] greenlet = [ {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, diff --git a/pyproject.toml b/pyproject.toml index f6bb5317f..822786515 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ fastapi = "^0.91.0" uvicorn = "^0.20.0" beautifulsoup4 = "^4.11.2" langchain = {path = "../langchain", develop = true} +google-search-results = "^2.4.1" [tool.poetry.group.dev.dependencies] diff --git a/src/endpoints.py b/src/endpoints.py index efd11ad65..a9d8ddaa9 100644 --- a/src/endpoints.py +++ b/src/endpoints.py @@ -1,6 +1,10 @@ from fastapi import APIRouter import signature import list_endpoints +import payload +from langchain.agents.loading import load_agent_executor_from_config +from langchain.prompts.loading import load_prompt_from_config +from typing import Any # build router router = APIRouter() @@ -21,22 +25,23 @@ def get_type_list(): def get_all(): return { "chains": { - chain: signature.chain(chain) for chain in list_endpoints.list_chains() + chain: signature.get_chain(chain) for chain in list_endpoints.list_chains() }, "agents": { - agent: signature.agent(agent) for agent in list_endpoints.list_agents() + agent: signature.get_agent(agent) for agent in list_endpoints.list_agents() }, "prompts": { - prompt: signature.prompt(prompt) for prompt in list_endpoints.list_prompts() + prompt: signature.get_prompt(prompt) + for prompt in list_endpoints.list_prompts() }, - "llms": {llm: signature.llm(llm) for llm in list_endpoints.list_llms()}, + "llms": {llm: signature.get_llm(llm) for llm in list_endpoints.list_llms()}, # "utilities": { # "template": { # # utility: templates.utility(utility) for utility in list.list_utilities() # } # }, "memories": { - memory: signature.memory(memory) + memory: signature.get_memory(memory) for memory in list_endpoints.list_memories() }, # "document_loaders": { @@ -51,16 +56,38 @@ def get_all(): # tool: {"template": signature.tool(tool), **values} # for tool, values in tools.items() # }, - "tools": {tool: signature.tool(tool) for tool in list_endpoints.list_tools()}, + "tools": { + tool: signature.get_tool(tool) for tool in list_endpoints.list_tools() + }, } @router.post("/predict") -def get_load(data: dict[str, str]): - a = get_type_list() +def get_load(data: dict[str, Any]): + type_list = get_type_list() + + # Add input variables + data = payload.extract_input_variables(data) + + # Nodes, edges and root node + message = data["message"] + nodes = data["nodes"] + edges = data["edges"] + root = payload.get_root_node(data) + + extracted_json = payload.build_json(root, nodes, edges) # Build json + if extracted_json["_type"] in type_list["agents"]: + loaded = load_agent_executor_from_config(extracted_json) + + return loaded.run(message) + + elif extracted_json["_type"] in type_list["prompts"]: + loaded = load_prompt_from_config(extracted_json) + print(loaded.format(product='')) + return extracted_json # if type in a["prompts"]: - return a + # return a diff --git a/src/list_endpoints.py b/src/list_endpoints.py index 5b8c27eea..7581be31c 100644 --- a/src/list_endpoints.py +++ b/src/list_endpoints.py @@ -6,6 +6,7 @@ from langchain import prompts from langchain import llms from langchain.chains.conversation import memory as memories from langchain.agents.load_tools import get_all_tool_names +import util # build router @@ -97,4 +98,7 @@ def list_memories(): def list_tools(): """List all load tools""" - return get_all_tool_names() + return [ + util.get_tool_params(util.get_tools_dict(tool))["name"] + for tool in get_all_tool_names() + ] diff --git a/src/payload.py b/src/payload.py new file mode 100644 index 000000000..77fcf625f --- /dev/null +++ b/src/payload.py @@ -0,0 +1,80 @@ +import re + + +def extract_input_variables(data): + """ + Extracts input variables from the template and adds them to the input_variables field. + """ + for node in data["nodes"]: + try: + if "input_variables" in node["data"]["node"]["template"]: + if node["data"]["node"]["template"]["_type"] == "prompt": + variables = re.findall( + r"\{(.*?)\}", + node["data"]["node"]["template"]["template"]["value"], + ) + elif node["data"]["node"]["template"]["_type"] == "few_shot": + variables = re.findall( + r"\{(.*?)\}", + node["data"]["node"]["template"]["prefix"]["value"] + + node["data"]["node"]["template"]["suffix"]["value"], + ) + else: + variables = [] + node["data"]["node"]["template"]["input_variables"]["value"] = variables + except: + pass + return data + + +def get_root_node(data): + """ + Returns the root node of the template. + """ + root = None + incoming_edges = {edge["source"] for edge in data["edges"]} + for node in data["nodes"]: + if node["id"] not in incoming_edges: + root = node + break + return root + + +def build_json(root, nodes, edges): + edge_ids = [edge["source"] for edge in edges if edge["target"] == root["id"]] + local_nodes = [node for node in nodes if node["id"] in edge_ids] + + if "node" not in root["data"]: + return build_json(local_nodes[0], nodes, edges) + + final_dict = root["data"]["node"]["template"].copy() + + for key, value in final_dict.items(): + if key == "_type": + continue + + module_type = value["type"] + if module_type == "Tool": + pass + if module_type in ["str", "bool", "int", "float"]: + value = value["value"] + elif "dict" in module_type: + value = {} + else: + # if value['list']: + children = [ + c + for c in local_nodes + if module_type + in [c["data"]["type"]] + c["data"]["node"]["base_classes"] + ] + # else: + # children = next((c for c in local_nodes if type in [c['data']['type']] + c['data']['node']['base_classes']), None) + if value["required"] and not children: + raise ValueError(f"No child with type {module_type} found") + values = [ + build_json(child, nodes, edges) for child in children + ] # if children else None + value = list(values) if value["list"] else next(iter(values), None) + final_dict[key] = value + return final_dict diff --git a/src/signature.py b/src/signature.py index 70050db88..f76439572 100644 --- a/src/signature.py +++ b/src/signature.py @@ -172,8 +172,14 @@ def get_memory(name: str): @router.get("/tool") def get_tool(name: str): """Get the signature of a tool.""" + + all_tools = { + util.get_tool_params(util.get_tools_dict(tool))["name"]: tool + for tool in get_all_tool_names() + } + # Raise error if name is not in tools - if name not in get_all_tool_names(): + if name not in all_tools.keys(): raise HTTPException(status_code=404, detail=f"Tool {name} not found.") type_dict = { @@ -188,26 +194,28 @@ def get_tool(name: str): "llm": {"type": "BaseLLM", "required": True, "list": False, "show": True}, } - if name in _BASE_TOOLS: + tool_type = all_tools[name] + + if tool_type in _BASE_TOOLS: params = [] - elif name in _LLM_TOOLS: + elif tool_type in _LLM_TOOLS: params = ["llm"] - elif name in _EXTRA_LLM_TOOLS: - _, extra_keys = _EXTRA_LLM_TOOLS[name] + elif tool_type in _EXTRA_LLM_TOOLS: + _, extra_keys = _EXTRA_LLM_TOOLS[tool_type] params = ["llm"] + extra_keys - elif name in _EXTRA_OPTIONAL_TOOLS: - _, extra_keys = _EXTRA_OPTIONAL_TOOLS[name] + elif tool_type in _EXTRA_OPTIONAL_TOOLS: + _, extra_keys = _EXTRA_OPTIONAL_TOOLS[tool_type] params = extra_keys template = { param: (type_dict[param] if param == "llm" else type_dict["str"]) for param in params } - template["_type"] = name + template["_type"] = tool_type return { "template": template, - **util.get_tool_params(util.get_tools_dict(name)), + **util.get_tool_params(util.get_tools_dict(tool_type)), "base_classes": ["Tool"], } diff --git a/src/util.py b/src/util.py index 54ce7abca..f2228b1a6 100644 --- a/src/util.py +++ b/src/util.py @@ -135,6 +135,8 @@ def format_dict(d): # Process remaining keys for key, value in d.items(): + if key == "examples": + pass if key == "_type": continue _type = value["type"] @@ -176,6 +178,4 @@ def format_dict(d): value.pop("default") # Filter out keys that should not be shown - return ( - d # {key: value for key, value in d.items() if key == "_type" or value["show"]} - ) + return d From 4620a29024b984e9cedb47f000217347e5cce591 Mon Sep 17 00:00:00 2001 From: Ibis Prevedello Date: Wed, 22 Feb 2023 16:26:39 -0300 Subject: [PATCH 16/18] feat: add llm and chains --- build_and_push | 2 +- pyproject.toml | 2 +- src/endpoints.py | 24 +++++++++++++++++++----- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/build_and_push b/build_and_push index cf7e82e48..b34cdeb40 100755 --- a/build_and_push +++ b/build_and_push @@ -1,5 +1,5 @@ #! /bin/bash poetry remove langchain -docker build -t ibiscp/expert:v0.0.12 . && docker push ibiscp/expert:v0.0.12 +docker build -t ibiscp/expert:v0.0.13 . && docker push ibiscp/expert:v0.0.13 poetry add --editable ../langchain diff --git a/pyproject.toml b/pyproject.toml index 822786515..653b265af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,8 +11,8 @@ openai = "^0.26.5" fastapi = "^0.91.0" uvicorn = "^0.20.0" beautifulsoup4 = "^4.11.2" -langchain = {path = "../langchain", develop = true} google-search-results = "^2.4.1" +langchain = {path = "../langchain", develop = true} [tool.poetry.group.dev.dependencies] diff --git a/src/endpoints.py b/src/endpoints.py index a9d8ddaa9..04ae91097 100644 --- a/src/endpoints.py +++ b/src/endpoints.py @@ -3,6 +3,9 @@ import signature import list_endpoints import payload from langchain.agents.loading import load_agent_executor_from_config +from langchain.chains.loading import load_chain_from_config +from langchain.llms.loading import load_llm_from_config + from langchain.prompts.loading import load_prompt_from_config from typing import Any @@ -81,12 +84,23 @@ def get_load(data: dict[str, Any]): if extracted_json["_type"] in type_list["agents"]: loaded = load_agent_executor_from_config(extracted_json) - return loaded.run(message) + return {"result": loaded.run(message)} + elif extracted_json["_type"] in type_list["chains"]: + loaded = load_chain_from_config(extracted_json) - elif extracted_json["_type"] in type_list["prompts"]: - loaded = load_prompt_from_config(extracted_json) - print(loaded.format(product='')) - return extracted_json + return {"result": loaded.run(message)} + elif extracted_json["_type"] in type_list["llms"]: + loaded = load_llm_from_config(extracted_json) + + return {"result": loaded(message)} + else: + return {"result": "Error: Type should be either agent, chain or llm"} + + # elif extracted_json["_type"] in type_list["prompts"]: + # loaded = load_prompt_from_config(extracted_json) + # print(loaded.format(product='')) + + # return {'result': loaded.format(product=message)} # if type in a["prompts"]: From 0dbae62309c7687a40e553819b92330b2ec60a45 Mon Sep 17 00:00:00 2001 From: Ibis Prevedello Date: Tue, 28 Feb 2023 13:33:49 -0300 Subject: [PATCH 17/18] refac: fix bug with type Any --- build_and_push | 2 +- poetry.lock | 225 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + src/payload.py | 28 ++++-- src/util.py | 2 +- 5 files changed, 245 insertions(+), 13 deletions(-) diff --git a/build_and_push b/build_and_push index b34cdeb40..87d4ade2b 100755 --- a/build_and_push +++ b/build_and_push @@ -1,5 +1,5 @@ #! /bin/bash poetry remove langchain -docker build -t ibiscp/expert:v0.0.13 . && docker push ibiscp/expert:v0.0.13 +docker build -t ibiscp/expert:v0.0.15 . && docker push ibiscp/expert:v0.0.15 poetry add --editable ../langchain diff --git a/poetry.lock b/poetry.lock index 0303ae304..8a6200a2f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -136,6 +136,14 @@ d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] +[[package]] +name = "cachetools" +version = "5.3.0" +description = "Extensible memoizing collections and decorators" +category = "main" +optional = false +python-versions = "~=3.7" + [[package]] name = "certifi" version = "2022.12.7" @@ -268,6 +276,74 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "google-api-core" +version = "2.11.0" +description = "Google API client core library" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +google-auth = ">=2.14.1,<3.0dev" +googleapis-common-protos = ">=1.56.2,<2.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" +requests = ">=2.18.0,<3.0.0dev" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)", "grpcio-status (>=1.49.1,<2.0dev)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] + +[[package]] +name = "google-api-python-client" +version = "2.79.0" +description = "Google API Client Library for Python" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" +google-auth = ">=1.19.0,<3.0.0dev" +google-auth-httplib2 = ">=0.1.0" +httplib2 = ">=0.15.0,<1dev" +uritemplate = ">=3.0.1,<5" + +[[package]] +name = "google-auth" +version = "2.16.1" +description = "Google Authentication Library" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} +six = ">=1.9.0" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0dev)"] + +[[package]] +name = "google-auth-httplib2" +version = "0.1.0" +description = "Google Authentication Library: httplib2 transport" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +google-auth = "*" +httplib2 = ">=0.15.0" +six = "*" + [[package]] name = "google-search-results" version = "2.4.1" @@ -279,6 +355,20 @@ python-versions = ">=3.5" [package.dependencies] requests = "*" +[[package]] +name = "googleapis-common-protos" +version = "1.58.0" +description = "Common protobufs used in Google APIs" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<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.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0dev)"] + [[package]] name = "greenlet" version = "2.0.2" @@ -299,6 +389,17 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "httplib2" +version = "0.21.0" +description = "A comprehensive HTTP client library." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} + [[package]] name = "idna" version = "3.4" @@ -611,6 +712,14 @@ python-versions = ">=3.6.2" [package.dependencies] wcwidth = "*" +[[package]] +name = "protobuf" +version = "4.22.0" +description = "" +category = "main" +optional = false +python-versions = ">=3.7" + [[package]] name = "psutil" version = "5.9.4" @@ -641,6 +750,25 @@ python-versions = "*" [package.extras] tests = ["pytest"] +[[package]] +name = "pyasn1" +version = "0.4.8" +description = "ASN.1 types and codecs" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pyasn1-modules" +version = "0.2.8" +description = "A collection of ASN.1-based protocols modules." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.5.0" + [[package]] name = "pycparser" version = "2.21" @@ -675,6 +803,17 @@ python-versions = ">=3.6" [package.extras] plugins = ["importlib-metadata"] +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = false +python-versions = ">=3.6.8" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + [[package]] name = "python-dateutil" version = "2.8.2" @@ -731,11 +870,22 @@ urllib3 = ">=1.21.1,<1.27" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +category = "main" +optional = false +python-versions = ">=3.6,<4" + +[package.dependencies] +pyasn1 = ">=0.1.3" + [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" @@ -893,6 +1043,14 @@ python-versions = "*" mypy-extensions = ">=0.3.0" typing-extensions = ">=3.7.4" +[[package]] +name = "uritemplate" +version = "4.1.1" +description = "Implementation of RFC 6570 URI Templates" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "urllib3" version = "1.26.14" @@ -944,7 +1102,7 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "a8de7c079509305c680e1408fc12648c5ccda4963d55cc6d5a31758dad702688" +content-hash = "9056a6ca5f5437d7a9c4205637b0e055ddc365b0557bb0e02da030a0de77214f" [metadata.files] aiohttp = [ @@ -1095,6 +1253,10 @@ black = [ {file = "black-23.1.0-py3-none-any.whl", hash = "sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32"}, {file = "black-23.1.0.tar.gz", hash = "sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac"}, ] +cachetools = [ + {file = "cachetools-5.3.0-py3-none-any.whl", hash = "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"}, + {file = "cachetools-5.3.0.tar.gz", hash = "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14"}, +] certifi = [ {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, @@ -1293,9 +1455,29 @@ frozenlist = [ {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"}, {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"}, ] +google-api-core = [ + {file = "google-api-core-2.11.0.tar.gz", hash = "sha256:4b9bb5d5a380a0befa0573b302651b8a9a89262c1730e37bf423cec511804c22"}, + {file = "google_api_core-2.11.0-py3-none-any.whl", hash = "sha256:ce222e27b0de0d7bc63eb043b956996d6dccab14cc3b690aaea91c9cc99dc16e"}, +] +google-api-python-client = [ + {file = "google-api-python-client-2.79.0.tar.gz", hash = "sha256:577c0aeae1eb3c754eacb9122d369d67609fef759bc6a4fa16cafeab4f30019b"}, + {file = "google_api_python_client-2.79.0-py2.py3-none-any.whl", hash = "sha256:b9b6dc5f139892310093ba75d0df4c78f48655078953c923957dab1ec86129e7"}, +] +google-auth = [ + {file = "google-auth-2.16.1.tar.gz", hash = "sha256:5fd170986bce6bfd7bb5c845c4b8362edb1e0cba901e062196e83f8bb5d5d32c"}, + {file = "google_auth-2.16.1-py2.py3-none-any.whl", hash = "sha256:75d76ea857df65938e1f71dcbcd7d0cd48e3f80b34b8870ba229c9292081f7ef"}, +] +google-auth-httplib2 = [ + {file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"}, + {file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"}, +] google-search-results = [ {file = "google_search_results-2.4.1.tar.gz", hash = "sha256:021746fc21c0b0786e61a2d103d93a08c5c84e204d3f93cd4d589e0e117614a7"}, ] +googleapis-common-protos = [ + {file = "googleapis-common-protos-1.58.0.tar.gz", hash = "sha256:c727251ec025947d545184ba17e3578840fc3a24a0516a020479edab660457df"}, + {file = "googleapis_common_protos-1.58.0-py2.py3-none-any.whl", hash = "sha256:ca3befcd4580dab6ad49356b46bf165bb68ff4b32389f028f1abd7c10ab9519a"}, +] greenlet = [ {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, @@ -1362,6 +1544,10 @@ h11 = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] +httplib2 = [ + {file = "httplib2-0.21.0-py3-none-any.whl", hash = "sha256:987c8bb3eb82d3fa60c68699510a692aa2ad9c4bd4f123e51dfb1488c14cdd01"}, + {file = "httplib2-0.21.0.tar.gz", hash = "sha256:fc144f091c7286b82bec71bdbd9b27323ba709cc612568d3000893bfd9cb4b34"}, +] idna = [ {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, @@ -1544,6 +1730,21 @@ prompt-toolkit = [ {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, ] +protobuf = [ + {file = "protobuf-4.22.0-cp310-abi3-win32.whl", hash = "sha256:b2fea9dc8e3c0f32c38124790ef16cba2ee0628fe2022a52e435e1117bfef9b1"}, + {file = "protobuf-4.22.0-cp310-abi3-win_amd64.whl", hash = "sha256:a33a273d21852f911b8bda47f39f4383fe7c061eb1814db2c76c9875c89c2491"}, + {file = "protobuf-4.22.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:e894e9ae603e963f0842498c4cd5d39c6a60f0d7e4c103df50ee939564298658"}, + {file = "protobuf-4.22.0-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:7c535d126e7dcc714105ab20b418c4fedbd28f8b8afc42b7350b1e317bbbcc71"}, + {file = "protobuf-4.22.0-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:86c3d20428b007537ba6792b475c0853bba7f66b1f60e610d913b77d94b486e4"}, + {file = "protobuf-4.22.0-cp37-cp37m-win32.whl", hash = "sha256:1669cb7524221a8e2d9008d0842453dbefdd0fcdd64d67672f657244867635fb"}, + {file = "protobuf-4.22.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ab4d043865dd04e6b09386981fe8f80b39a1e46139fb4a3c206229d6b9f36ff6"}, + {file = "protobuf-4.22.0-cp38-cp38-win32.whl", hash = "sha256:29288813aacaa302afa2381db1d6e0482165737b0afdf2811df5fa99185c457b"}, + {file = "protobuf-4.22.0-cp38-cp38-win_amd64.whl", hash = "sha256:e474b63bab0a2ea32a7b26a4d8eec59e33e709321e5e16fb66e766b61b82a95e"}, + {file = "protobuf-4.22.0-cp39-cp39-win32.whl", hash = "sha256:47d31bdf58222dd296976aa1646c68c6ee80b96d22e0a3c336c9174e253fd35e"}, + {file = "protobuf-4.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:c27f371f0159feb70e6ea52ed7e768b3f3a4c5676c1900a7e51a24740381650e"}, + {file = "protobuf-4.22.0-py3-none-any.whl", hash = "sha256:c3325803095fb4c2a48649c321d2fbde59f8fbfcb9bfc7a86df27d112831c571"}, + {file = "protobuf-4.22.0.tar.gz", hash = "sha256:652d8dfece122a24d98eebfef30e31e455d300efa41999d1182e015984ac5930"}, +] psutil = [ {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"}, {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"}, @@ -1568,6 +1769,14 @@ pure-eval = [ {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, ] +pyasn1 = [ + {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, + {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, +] +pyasn1-modules = [ + {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, + {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, +] pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, @@ -1614,6 +1823,10 @@ pygments = [ {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, ] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, @@ -1759,6 +1972,10 @@ requests = [ {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, ] +rsa = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -1859,6 +2076,10 @@ typing-inspect = [ {file = "typing_inspect-0.8.0-py3-none-any.whl", hash = "sha256:5fbf9c1e65d4fa01e701fe12a5bca6c6e08a4ffd5bc60bfac028253a447c5188"}, {file = "typing_inspect-0.8.0.tar.gz", hash = "sha256:8b1ff0c400943b6145df8119c41c244ca8207f1f10c9c057aeed1560e4806e3d"}, ] +uritemplate = [ + {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, + {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, +] urllib3 = [ {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, diff --git a/pyproject.toml b/pyproject.toml index 653b265af..3dd6165fe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ fastapi = "^0.91.0" uvicorn = "^0.20.0" beautifulsoup4 = "^4.11.2" google-search-results = "^2.4.1" +google-api-python-client = "^2.79.0" langchain = {path = "../langchain", develop = true} diff --git a/src/payload.py b/src/payload.py index 77fcf625f..f66c8a504 100644 --- a/src/payload.py +++ b/src/payload.py @@ -52,22 +52,32 @@ def build_json(root, nodes, edges): for key, value in final_dict.items(): if key == "_type": continue + # elif key == "prompt": + # pass module_type = value["type"] - if module_type == "Tool": - pass - if module_type in ["str", "bool", "int", "float"]: + # if module_type == "Tool": + # pass + if module_type in ["str", "bool", "int", "float", "Any"]: value = value["value"] elif "dict" in module_type: value = {} else: # if value['list']: - children = [ - c - for c in local_nodes - if module_type - in [c["data"]["type"]] + c["data"]["node"]["base_classes"] - ] + print(key) + children = [] + for c in local_nodes: + module_types = [c["data"]["type"]] + if "node" in c["data"]: + module_types += c["data"]["node"]["base_classes"] + if module_type in module_types: + children.append(c) + # children = [ + # c + # for c in local_nodes + # if module_type + # in [c["data"]["type"]] + c["data"]["node"]["base_classes"] + # ] # else: # children = next((c for c in local_nodes if type in [c['data']['type']] + c['data']['node']['base_classes']), None) if value["required"] and not children: diff --git a/src/util.py b/src/util.py index f2228b1a6..615ba32ce 100644 --- a/src/util.py +++ b/src/util.py @@ -167,7 +167,7 @@ def format_dict(d): ) # Add multline - value["multline"] = key in ["suffix", "prefix", "template", "examples"] + value["multiline"] = key in ["suffix", "prefix", "template", "examples"] # Replace default value with actual value # if _type in ["str", "bool"]: # value["value"] = value.get("default", "") From 4ff1a445852a96c23ba9a0bfadafaf0916665901 Mon Sep 17 00:00:00 2001 From: Ibis Prevedello Date: Tue, 28 Feb 2023 20:25:35 -0300 Subject: [PATCH 18/18] refac: create backend folder --- README.md | 2 - backend/.gitignore | 130 +++++++++++++++++++++++ Dockerfile => backend/Dockerfile | 0 build_and_push => backend/build_and_push | 0 poetry.lock => backend/poetry.lock | 0 pyproject.toml => backend/pyproject.toml | 0 {src => backend/src}/app.py | 0 {src => backend/src}/endpoints.py | 0 {src => backend/src}/list_endpoints.py | 0 {src => backend/src}/payload.py | 0 {src => backend/src}/signature.py | 0 {src => backend/src}/util.py | 0 docker-compose.yml | 0 13 files changed, 130 insertions(+), 2 deletions(-) delete mode 100644 README.md create mode 100644 backend/.gitignore rename Dockerfile => backend/Dockerfile (100%) rename build_and_push => backend/build_and_push (100%) rename poetry.lock => backend/poetry.lock (100%) rename pyproject.toml => backend/pyproject.toml (100%) rename {src => backend/src}/app.py (100%) rename {src => backend/src}/endpoints.py (100%) rename {src => backend/src}/list_endpoints.py (100%) rename {src => backend/src}/payload.py (100%) rename {src => backend/src}/signature.py (100%) rename {src => backend/src}/util.py (100%) create mode 100644 docker-compose.yml diff --git a/README.md b/README.md deleted file mode 100644 index a6dd1750a..000000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# expert-backend -Backend API to interface with react flow frontend diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 000000000..314d77847 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,130 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class +notebooks + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/Dockerfile b/backend/Dockerfile similarity index 100% rename from Dockerfile rename to backend/Dockerfile diff --git a/build_and_push b/backend/build_and_push similarity index 100% rename from build_and_push rename to backend/build_and_push diff --git a/poetry.lock b/backend/poetry.lock similarity index 100% rename from poetry.lock rename to backend/poetry.lock diff --git a/pyproject.toml b/backend/pyproject.toml similarity index 100% rename from pyproject.toml rename to backend/pyproject.toml diff --git a/src/app.py b/backend/src/app.py similarity index 100% rename from src/app.py rename to backend/src/app.py diff --git a/src/endpoints.py b/backend/src/endpoints.py similarity index 100% rename from src/endpoints.py rename to backend/src/endpoints.py diff --git a/src/list_endpoints.py b/backend/src/list_endpoints.py similarity index 100% rename from src/list_endpoints.py rename to backend/src/list_endpoints.py diff --git a/src/payload.py b/backend/src/payload.py similarity index 100% rename from src/payload.py rename to backend/src/payload.py diff --git a/src/signature.py b/backend/src/signature.py similarity index 100% rename from src/signature.py rename to backend/src/signature.py diff --git a/src/util.py b/backend/src/util.py similarity index 100% rename from src/util.py rename to backend/src/util.py diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..e69de29bb