From a22be451322e9d3aff368786ec43daa7b3315113 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 14:45:12 -0400 Subject: [PATCH 1/9] Bump pettingzoo from 1.24.0 to 1.24.3 (#112) Bumps [pettingzoo](https://github.com/Farama-Foundation/PettingZoo) from 1.24.0 to 1.24.3. - [Release notes](https://github.com/Farama-Foundation/PettingZoo/releases) - [Commits](https://github.com/Farama-Foundation/PettingZoo/compare/1.24.0...1.24.3) --- updated-dependencies: - dependency-name: pettingzoo dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 57edce3e8..26f050e2d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3002,13 +3002,13 @@ testing = ["docopt", "pytest"] [[package]] name = "pettingzoo" -version = "1.24.0" +version = "1.24.3" description = "Gymnasium for multi-agent reinforcement learning." optional = false python-versions = ">=3.8" files = [ - {file = "pettingzoo-1.24.0-py3-none-any.whl", hash = "sha256:c9ad75739869dff19ee41a58a948e39cde6c6e3f34af6de6639f7e2438bc3829"}, - {file = "pettingzoo-1.24.0.tar.gz", hash = "sha256:7d28d847964680ae554eb3fcc639f733174f1901883bf18cc9715607c4675418"}, + {file = "pettingzoo-1.24.3-py3-none-any.whl", hash = "sha256:23ed90517d2e8a7098bdaf5e31234b3a7f7b73ca578d70d1ca7b9d0cb0e37982"}, + {file = "pettingzoo-1.24.3.tar.gz", hash = "sha256:91f9094f18e06fb74b98f4099cd22e8ae4396125e51719d50b30c9f1c7ab07e6"}, ] [package.dependencies] @@ -3023,7 +3023,7 @@ classic = ["chess (==1.9.4)", "pygame (==2.3.0)", "rlcard (==1.0.5)", "shimmy[op mpe = ["pygame (==2.3.0)"] other = ["pillow (>=8.0.1)"] sisl = ["box2d-py (==2.3.5)", "pygame (==2.3.0)", "pymunk (==6.2.0)", "scipy (>=1.4.1)"] -testing = ["AutoROM", "pre-commit", "pynput", "pytest", "pytest-cov"] +testing = ["AutoROM", "pre-commit", "pynput", "pytest", "pytest-cov", "pytest-markdown-docs", "pytest-xdist"] [[package]] name = "pexpect" @@ -5229,4 +5229,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "096a882b6e14ad14a42bbda97a856641da4c8d5c078618cb8474b9f1d91dc0ef" +content-hash = "9c928912f5807959ae5c4697654fc742d977d34d4944ccb1794990e45dac6687" diff --git a/pyproject.toml b/pyproject.toml index 16618ff00..5f1f73d27 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ lxml = "^4.9.3" openai = "^1.11.0" langchain = "0.1.5" rich = "^13.6.0" -PettingZoo = "1.24.0" +PettingZoo = "1.24.3" redis-om = "^0.2.1" types-tqdm = "*" gin-config = "^0.5.0" From d03dae80688f25cfe7921086d22b402d6ce102b4 Mon Sep 17 00:00:00 2001 From: Haofei Yu <1125027232@qq.com> Date: Tue, 18 Jun 2024 16:01:19 -0400 Subject: [PATCH 2/9] support codecov (#100) * support agentprofile and environmentprofile serialization * convert json to jsonl * pass pre-commit test * add missing attribute * support other serialization * precommit check * support testing of serialization * support testing of serialization * support testing of serialization * change the data path * fix ruff * support codecov * support codecov * support codecov * fix pre-commit * update poetry lock * add codecov badge * add codecov comment --------- Co-authored-by: Hao --- .github/.codecov.yml | 23 ++++++++ .github/workflows/tests.yml | 6 ++- README.md | 1 + poetry.lock | 101 +++++++++++++++++++++++++++++++++--- pyproject.toml | 1 + 5 files changed, 123 insertions(+), 9 deletions(-) create mode 100644 .github/.codecov.yml diff --git a/.github/.codecov.yml b/.github/.codecov.yml new file mode 100644 index 000000000..28bbfa668 --- /dev/null +++ b/.github/.codecov.yml @@ -0,0 +1,23 @@ +codecov: + notify: + wait_for_ci: true + +coverage: + status: + patch: + default: + threshold: 100% # allow patch coverage to be lower than project coverage by any amount + project: + default: + threshold: 5% # allow project coverage to drop at most 5% + +comment: # this is a top-level key + layout: " diff, flags, files" + behavior: default + require_changes: false # if true: only post the comment if coverage changes + require_base: false # [true :: must have a base report to post] + require_head: true # [true :: must have a head report to post] + hide_project_coverage: false # [true :: only show coverage on the git diff] + +github_checks: + annotations: false diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0dce55c49..46eb36c8f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -38,4 +38,8 @@ jobs: REDIS_OM_URL: ${{ secrets.REDIS_OM_URL }} TOGETHER_API_KEY: ${{ secrets.TOGETHER_API_KEY }} run: | - poetry run pytest + poetry run pytest --cov=. --cov-report=xml + - name: Upload coverage report to Codecov + uses: codecov/codecov-action@v4.0.1 + with: + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/README.md b/README.md index 3058fe27b..a115d1d8a 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ [![pypi](https://img.shields.io/pypi/v/sotopia.svg)](https://pypi.python.org/pypi/sotopia) [![versions](https://img.shields.io/pypi/pyversions/sotopia.svg)](https://github.com/sotopia/sotopia) [![CI](https://img.shields.io/github/actions/workflow/status/sotopia-lab/sotopia/tests.yml?branch=main&logo=github&label=CI)](https://github.com/sotopia-lab/sotopia/actions?query=branch%3Amain) +[![codecov](https://codecov.io/github/sotopia-lab/sotopia/graph/badge.svg?token=00LRQFX0QR)](https://codecov.io/github/sotopia-lab/sotopia) [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/14hJOfzpA37PRUzdlFgiqVzUGIhhngqnz?usp=sharing) [![Project Page](https://img.shields.io/badge/Project-Page-green.svg)](https://www.sotopia.world/projects/sotopia) diff --git a/poetry.lock b/poetry.lock index 26f050e2d..e847a6e6d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -247,17 +247,17 @@ test-tox-coverage = ["coverage (>=5.5)"] [[package]] name = "boto3" -version = "1.34.128" +version = "1.34.129" description = "The AWS SDK for Python" optional = true python-versions = ">=3.8" files = [ - {file = "boto3-1.34.128-py3-none-any.whl", hash = "sha256:a048ff980a81cd652724a73bc496c519b336fabe19cc8bfc6c53b2ff6eb22c7b"}, - {file = "boto3-1.34.128.tar.gz", hash = "sha256:43a6e99f53a8d34b3b4dbe424dbcc6b894350dc41a85b0af7c7bc24a7ec2cead"}, + {file = "boto3-1.34.129-py3-none-any.whl", hash = "sha256:cc73de1c9d953b1f9da6ee2404af717e93d888f790f3e0291b22d1b8489eb401"}, + {file = "boto3-1.34.129.tar.gz", hash = "sha256:a7a696fd3e7f5f43a81450b441f3eb6c5a89d28efe867cd97d8fc73ea5d8c139"}, ] [package.dependencies] -botocore = ">=1.34.128,<1.35.0" +botocore = ">=1.34.129,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -266,13 +266,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.128" +version = "1.34.129" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.8" files = [ - {file = "botocore-1.34.128-py3-none-any.whl", hash = "sha256:db67fda136c372ab3fa432580c819c89ba18d28a6152a4d2a7ea40d44082892e"}, - {file = "botocore-1.34.128.tar.gz", hash = "sha256:8d8e03f7c8c080ecafda72036eb3b482d649f8417c90b5dca33b7c2c47adb0c9"}, + {file = "botocore-1.34.129-py3-none-any.whl", hash = "sha256:86d3dd30996aa459e9c3321edac12aebe47c73cb4acc7556941f9b4c39726088"}, + {file = "botocore-1.34.129.tar.gz", hash = "sha256:7c56e25af6112d69c5d14a15b42f76ba7687687abc463a96ac5edca19c0a9c2d"}, ] [package.dependencies] @@ -555,6 +555,73 @@ traitlets = ">=4" [package.extras] test = ["pytest"] +[[package]] +name = "coverage" +version = "7.5.3" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a6519d917abb15e12380406d721e37613e2a67d166f9fb7e5a8ce0375744cd45"}, + {file = "coverage-7.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aea7da970f1feccf48be7335f8b2ca64baf9b589d79e05b9397a06696ce1a1ec"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:923b7b1c717bd0f0f92d862d1ff51d9b2b55dbbd133e05680204465f454bb286"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62bda40da1e68898186f274f832ef3e759ce929da9a9fd9fcf265956de269dbc"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8b7339180d00de83e930358223c617cc343dd08e1aa5ec7b06c3a121aec4e1d"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:25a5caf742c6195e08002d3b6c2dd6947e50efc5fc2c2205f61ecb47592d2d83"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:05ac5f60faa0c704c0f7e6a5cbfd6f02101ed05e0aee4d2822637a9e672c998d"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:239a4e75e09c2b12ea478d28815acf83334d32e722e7433471fbf641c606344c"}, + {file = "coverage-7.5.3-cp310-cp310-win32.whl", hash = "sha256:a5812840d1d00eafae6585aba38021f90a705a25b8216ec7f66aebe5b619fb84"}, + {file = "coverage-7.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:33ca90a0eb29225f195e30684ba4a6db05dbef03c2ccd50b9077714c48153cac"}, + {file = "coverage-7.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f81bc26d609bf0fbc622c7122ba6307993c83c795d2d6f6f6fd8c000a770d974"}, + {file = "coverage-7.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7cec2af81f9e7569280822be68bd57e51b86d42e59ea30d10ebdbb22d2cb7232"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55f689f846661e3f26efa535071775d0483388a1ccfab899df72924805e9e7cd"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50084d3516aa263791198913a17354bd1dc627d3c1639209640b9cac3fef5807"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:341dd8f61c26337c37988345ca5c8ccabeff33093a26953a1ac72e7d0103c4fb"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ab0b028165eea880af12f66086694768f2c3139b2c31ad5e032c8edbafca6ffc"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5bc5a8c87714b0c67cfeb4c7caa82b2d71e8864d1a46aa990b5588fa953673b8"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38a3b98dae8a7c9057bd91fbf3415c05e700a5114c5f1b5b0ea5f8f429ba6614"}, + {file = "coverage-7.5.3-cp311-cp311-win32.whl", hash = "sha256:fcf7d1d6f5da887ca04302db8e0e0cf56ce9a5e05f202720e49b3e8157ddb9a9"}, + {file = "coverage-7.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:8c836309931839cca658a78a888dab9676b5c988d0dd34ca247f5f3e679f4e7a"}, + {file = "coverage-7.5.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:296a7d9bbc598e8744c00f7a6cecf1da9b30ae9ad51c566291ff1314e6cbbed8"}, + {file = "coverage-7.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34d6d21d8795a97b14d503dcaf74226ae51eb1f2bd41015d3ef332a24d0a17b3"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e317953bb4c074c06c798a11dbdd2cf9979dbcaa8ccc0fa4701d80042d4ebf1"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:705f3d7c2b098c40f5b81790a5fedb274113373d4d1a69e65f8b68b0cc26f6db"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1196e13c45e327d6cd0b6e471530a1882f1017eb83c6229fc613cd1a11b53cd"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:015eddc5ccd5364dcb902eaecf9515636806fa1e0d5bef5769d06d0f31b54523"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fd27d8b49e574e50caa65196d908f80e4dff64d7e592d0c59788b45aad7e8b35"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:33fc65740267222fc02975c061eb7167185fef4cc8f2770267ee8bf7d6a42f84"}, + {file = "coverage-7.5.3-cp312-cp312-win32.whl", hash = "sha256:7b2a19e13dfb5c8e145c7a6ea959485ee8e2204699903c88c7d25283584bfc08"}, + {file = "coverage-7.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:0bbddc54bbacfc09b3edaec644d4ac90c08ee8ed4844b0f86227dcda2d428fcb"}, + {file = "coverage-7.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f78300789a708ac1f17e134593f577407d52d0417305435b134805c4fb135adb"}, + {file = "coverage-7.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b368e1aee1b9b75757942d44d7598dcd22a9dbb126affcbba82d15917f0cc155"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f836c174c3a7f639bded48ec913f348c4761cbf49de4a20a956d3431a7c9cb24"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:244f509f126dc71369393ce5fea17c0592c40ee44e607b6d855e9c4ac57aac98"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4c2872b3c91f9baa836147ca33650dc5c172e9273c808c3c3199c75490e709d"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dd4b3355b01273a56b20c219e74e7549e14370b31a4ffe42706a8cda91f19f6d"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f542287b1489c7a860d43a7d8883e27ca62ab84ca53c965d11dac1d3a1fab7ce"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:75e3f4e86804023e991096b29e147e635f5e2568f77883a1e6eed74512659ab0"}, + {file = "coverage-7.5.3-cp38-cp38-win32.whl", hash = "sha256:c59d2ad092dc0551d9f79d9d44d005c945ba95832a6798f98f9216ede3d5f485"}, + {file = "coverage-7.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:fa21a04112c59ad54f69d80e376f7f9d0f5f9123ab87ecd18fbb9ec3a2beed56"}, + {file = "coverage-7.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5102a92855d518b0996eb197772f5ac2a527c0ec617124ad5242a3af5e25f85"}, + {file = "coverage-7.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d1da0a2e3b37b745a2b2a678a4c796462cf753aebf94edcc87dcc6b8641eae31"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8383a6c8cefba1b7cecc0149415046b6fc38836295bc4c84e820872eb5478b3d"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aad68c3f2566dfae84bf46295a79e79d904e1c21ccfc66de88cd446f8686341"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e079c9ec772fedbade9d7ebc36202a1d9ef7291bc9b3a024ca395c4d52853d7"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bde997cac85fcac227b27d4fb2c7608a2c5f6558469b0eb704c5726ae49e1c52"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:990fb20b32990b2ce2c5f974c3e738c9358b2735bc05075d50a6f36721b8f303"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3d5a67f0da401e105753d474369ab034c7bae51a4c31c77d94030d59e41df5bd"}, + {file = "coverage-7.5.3-cp39-cp39-win32.whl", hash = "sha256:e08c470c2eb01977d221fd87495b44867a56d4d594f43739a8028f8646a51e0d"}, + {file = "coverage-7.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:1d2a830ade66d3563bb61d1e3c77c8def97b30ed91e166c67d0632c018f380f0"}, + {file = "coverage-7.5.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:3538d8fb1ee9bdd2e2692b3b18c22bb1c19ffbefd06880f5ac496e42d7bb3884"}, + {file = "coverage-7.5.3.tar.gz", hash = "sha256:04aefca5190d1dc7a53a4c1a5a7f8568811306d7a8ee231c42fb69215571944f"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + [[package]] name = "cryptography" version = "42.0.8" @@ -3407,6 +3474,24 @@ pytest = ">=7.0.0,<9" docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] +[[package]] +name = "pytest-cov" +version = "5.0.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -5229,4 +5314,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "9c928912f5807959ae5c4697654fc742d977d34d4944ccb1794990e45dac6687" +content-hash = "ec049682e297d6891d13ba66949d7404d0e07efec7692e80e77bdbad38c62cb1" diff --git a/pyproject.toml b/pyproject.toml index 5f1f73d27..745d554fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,6 +46,7 @@ ruff = "*" [tool.poetry.group.test.dependencies] pytest = "*" +pytest-cov = "*" pytest-asyncio = "*" mypy = "^1.8.0" From d7c63137861c78eac3a675c9789e833ad6bdeaed Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Tue, 18 Jun 2024 19:39:00 -0400 Subject: [PATCH 3/9] Add platform selection button in redis installation section (#114) * git ignore * add nextra site * change path to docs * Add installation instruction (#76) * fix an accordion bug * Add tabs for choosing platform in Redis Instructions * add platform tab * updated open in colab instruction --- docs/bun.lockb | Bin 325450 -> 326212 bytes docs/components/ui/tabs.tsx | 53 ++++++++++++++++++++++++++++++++++++ docs/package.json | 1 + docs/pages/index.mdx | 48 ++++++++++++++++++++++++++------ docs/tailwind.config.ts | 1 + 5 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 docs/components/ui/tabs.tsx diff --git a/docs/bun.lockb b/docs/bun.lockb index 5cda3bd6603abf531a396fc0a2cb0bfb12315db9..3f68561b7a428ccc36b2f33f5f913c2126879de6 100755 GIT binary patch delta 54596 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 delta 53835 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%0DA;6a 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, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsList.displayName = TabsPrimitive.List.displayName + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsContent.displayName = TabsPrimitive.Content.displayName + +export { Tabs, TabsList, TabsTrigger, TabsContent } diff --git a/docs/package.json b/docs/package.json index bca31d540..75cfa080a 100644 --- a/docs/package.json +++ b/docs/package.json @@ -18,6 +18,7 @@ "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tabs": "^1.0.4", "@tanstack/react-table": "^8.16.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx index 7da796513..94c082c06 100644 --- a/docs/pages/index.mdx +++ b/docs/pages/index.mdx @@ -4,6 +4,8 @@ import { Button } from "../components/ui/button" import { MoveRight } from "lucide-react" import { Accordion, AccordionItem, AccordionContent, AccordionTrigger } from "../components/ui/accordion" import { Steps, Callout } from 'nextra/components' +import { Tabs, TabsContent, TabsList, TabsTrigger } from "../components/ui/tabs" + # Sotopia - Getting Started @@ -34,17 +36,14 @@ https://github.com/sotopia-lab/sotopia
Check out - + Open in Colab for a quick tutorial
+This package supports Python 3.10 and above. -### Basic Usage - -This package supports Python 3.10 and above. Tested on Ubuntu 22.04 with python 3.11. - #### Install the package @@ -119,6 +118,14 @@ Redis stack is a required dependency for using Sotopia. There are two ways to se No, I don't want to use Docker. + + + Linux + MacOS + Windows + + + ### Download the Redis stack ```bash @@ -129,24 +136,49 @@ Redis stack is a required dependency for using Sotopia. There are two ways to se # if you are using Ubunutu 22.04, please do an extra step wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.22_amd64.deb sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.22_amd64.deb - # if you are using macOs + ``` + + ### Start the server + ```bash + ./redis-stack-server-7.2.0-v10/bin/redis-stack-server --daemonize yes + ``` + + + + ### The `REDIS_OM_URL` need to be set before loading and saving agents: + ```bash + conda env config vars set REDIS_OM_URL="redis://user:password@host:port" + ``` + If you are using the default settings, you can set the `REDIS_OM_URL` to `redis://localhost:6379`. + + + + + ### Download the Redis stack + ```bash brew tap redis-stack/redis-stack brew install redis-stack ``` ### Start the server ```bash - ./redis-stack-server-7.2.0-v10/bin/redis-stack-server --daemonize yes + redis-stack-server --daemonize yes ``` For other platforms, please check the [instruction](https://redis.io/docs/latest/operate/oss_and_stack/install/install-stack/). - ### The `REDIS_OM_URL` need to be set before loading and saving agents: + ### Set the environment variable: + The `REDIS_OM_URL` need to be set before loading and saving agents ```bash conda env config vars set REDIS_OM_URL="redis://user:password@host:port" ``` If you are using the default settings, you can set the `REDIS_OM_URL` to `redis://localhost:6379`. + + + For Windows, unfortunately only docker is supported. Check the [official documentation](https://redis.io/docs/latest/operate/oss_and_stack/install/install-stack/windows/). + + diff --git a/docs/tailwind.config.ts b/docs/tailwind.config.ts index 479a527ee..8449b5f8e 100644 --- a/docs/tailwind.config.ts +++ b/docs/tailwind.config.ts @@ -8,6 +8,7 @@ const config = { './app/**/*.{ts,tsx}', './src/**/*.{ts,tsx}', ], + safelist: ['dark'], prefix: "", theme: { container: { From b6d564444e9f671ef69a8dd89e6a228faaed1444 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 21:43:54 -0400 Subject: [PATCH 4/9] Bump google-generativeai from 0.6.0 to 0.7.0 (#111) Bumps [google-generativeai](https://github.com/google/generative-ai-python) from 0.6.0 to 0.7.0. - [Release notes](https://github.com/google/generative-ai-python/releases) - [Changelog](https://github.com/google-gemini/generative-ai-python/blob/main/RELEASE.md) - [Commits](https://github.com/google/generative-ai-python/compare/v0.6.0...v0.7.0) --- updated-dependencies: - dependency-name: google-generativeai dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 14 +++++++------- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index e847a6e6d..ddebbebf6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1096,13 +1096,13 @@ torch = ["torch (>=1.3.0)"] [[package]] name = "google-ai-generativelanguage" -version = "0.6.4" +version = "0.6.5" description = "Google Ai Generativelanguage API client library" optional = true python-versions = ">=3.7" files = [ - {file = "google-ai-generativelanguage-0.6.4.tar.gz", hash = "sha256:1750848c12af96cb24ae1c3dd05e4bfe24867dc4577009ed03e1042d8421e874"}, - {file = "google_ai_generativelanguage-0.6.4-py3-none-any.whl", hash = "sha256:730e471aa549797118fb1c88421ba1957741433ada575cf5dd08d3aebf903ab1"}, + {file = "google-ai-generativelanguage-0.6.5.tar.gz", hash = "sha256:c4089c277fa4e26722f76ab03ee3039f28be8bf1c9be282948b9583a154c6d79"}, + {file = "google_ai_generativelanguage-0.6.5-py3-none-any.whl", hash = "sha256:236875bb4a6d6ebdba2f12bd9d5e776100fd913402157a47b5e9fb80a13f25a7"}, ] [package.dependencies] @@ -1200,16 +1200,16 @@ httplib2 = ">=0.19.0" [[package]] name = "google-generativeai" -version = "0.6.0" +version = "0.7.0" description = "Google Generative AI High level API client library and tools." optional = true python-versions = ">=3.9" files = [ - {file = "google_generativeai-0.6.0-py3-none-any.whl", hash = "sha256:ba1d3b826b872bffe330aaac0dc6de2f0e4610df861c8ce7ec6433771611b676"}, + {file = "google_generativeai-0.7.0-py3-none-any.whl", hash = "sha256:7be4b634afeb8b6bebde1af7271e94d2af84d2d28b5988c7ed9921733c40fe63"}, ] [package.dependencies] -google-ai-generativelanguage = "0.6.4" +google-ai-generativelanguage = "0.6.5" google-api-core = "*" google-api-python-client = "*" google-auth = ">=2.15.0" @@ -5314,4 +5314,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "ec049682e297d6891d13ba66949d7404d0e07efec7692e80e77bdbad38c62cb1" +content-hash = "209fa8900f964311a88f604474af3734f29017abcbb57cc4504b0615c721c03b" diff --git a/pyproject.toml b/pyproject.toml index 745d554fb..2a27b09a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ anthropic = { version = "^0.26.0", optional = true } xmltodict = { version = "^0.13.0", optional = true } groq = { version = ">=0.4.2,<0.10.0", optional = true } cohere = { version = "^5.1.8", optional = true } -google-generativeai = { version = ">=0.5.4,<0.7.0", optional = true } +google-generativeai = { version = ">=0.5.4,<0.8.0", optional = true } transformers = { version = "^4.41.0", optional = true } datasets = { version = "^2.19.0", optional = true } scipy = { version = "^1.13.1", optional = true } From 7de34af7b52aadf85c5c4302e660f745032caff8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 14:37:27 -0400 Subject: [PATCH 5/9] Bump lxml from 4.9.4 to 5.2.2 (#118) Bumps [lxml](https://github.com/lxml/lxml) from 4.9.4 to 5.2.2. - [Release notes](https://github.com/lxml/lxml/releases) - [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt) - [Commits](https://github.com/lxml/lxml/compare/lxml-4.9.4...lxml-5.2.2) --- updated-dependencies: - dependency-name: lxml dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 246 +++++++++++++++++++++++++++++-------------------- pyproject.toml | 2 +- 2 files changed, 149 insertions(+), 99 deletions(-) diff --git a/poetry.lock b/poetry.lock index ddebbebf6..4fa848ce3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2174,111 +2174,161 @@ proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", " [[package]] name = "lxml" -version = "4.9.4" +version = "5.2.2" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -files = [ - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e214025e23db238805a600f1f37bf9f9a15413c7bf5f9d6ae194f84980c78722"}, - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec53a09aee61d45e7dbe7e91252ff0491b6b5fee3d85b2d45b173d8ab453efc1"}, - {file = "lxml-4.9.4-cp27-cp27m-win32.whl", hash = "sha256:7d1d6c9e74c70ddf524e3c09d9dc0522aba9370708c2cb58680ea40174800013"}, - {file = "lxml-4.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:cb53669442895763e61df5c995f0e8361b61662f26c1b04ee82899c2789c8f69"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:647bfe88b1997d7ae8d45dabc7c868d8cb0c8412a6e730a7651050b8c7289cf2"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4d973729ce04784906a19108054e1fd476bc85279a403ea1a72fdb051c76fa48"}, - {file = "lxml-4.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:056a17eaaf3da87a05523472ae84246f87ac2f29a53306466c22e60282e54ff8"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aaa5c173a26960fe67daa69aa93d6d6a1cd714a6eb13802d4e4bd1d24a530644"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:647459b23594f370c1c01768edaa0ba0959afc39caeeb793b43158bb9bb6a663"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bdd9abccd0927673cffe601d2c6cdad1c9321bf3437a2f507d6b037ef91ea307"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:00e91573183ad273e242db5585b52670eddf92bacad095ce25c1e682da14ed91"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a602ed9bd2c7d85bd58592c28e101bd9ff9c718fbde06545a70945ffd5d11868"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:de362ac8bc962408ad8fae28f3967ce1a262b5d63ab8cefb42662566737f1dc7"}, - {file = "lxml-4.9.4-cp310-cp310-win32.whl", hash = "sha256:33714fcf5af4ff7e70a49731a7cc8fd9ce910b9ac194f66eaa18c3cc0a4c02be"}, - {file = "lxml-4.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:d3caa09e613ece43ac292fbed513a4bce170681a447d25ffcbc1b647d45a39c5"}, - {file = "lxml-4.9.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:359a8b09d712df27849e0bcb62c6a3404e780b274b0b7e4c39a88826d1926c28"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:43498ea734ccdfb92e1886dfedaebeb81178a241d39a79d5351ba2b671bff2b2"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4855161013dfb2b762e02b3f4d4a21cc7c6aec13c69e3bffbf5022b3e708dd97"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c71b5b860c5215fdbaa56f715bc218e45a98477f816b46cfde4a84d25b13274e"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9a2b5915c333e4364367140443b59f09feae42184459b913f0f41b9fed55794a"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d82411dbf4d3127b6cde7da0f9373e37ad3a43e89ef374965465928f01c2b979"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:273473d34462ae6e97c0f4e517bd1bf9588aa67a1d47d93f760a1282640e24ac"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:389d2b2e543b27962990ab529ac6720c3dded588cc6d0f6557eec153305a3622"}, - {file = "lxml-4.9.4-cp311-cp311-win32.whl", hash = "sha256:8aecb5a7f6f7f8fe9cac0bcadd39efaca8bbf8d1bf242e9f175cbe4c925116c3"}, - {file = "lxml-4.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:c7721a3ef41591341388bb2265395ce522aba52f969d33dacd822da8f018aff8"}, - {file = "lxml-4.9.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:dbcb2dc07308453db428a95a4d03259bd8caea97d7f0776842299f2d00c72fc8"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:01bf1df1db327e748dcb152d17389cf6d0a8c5d533ef9bab781e9d5037619229"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, - {file = "lxml-4.9.4-cp312-cp312-win32.whl", hash = "sha256:266f655d1baff9c47b52f529b5f6bec33f66042f65f7c56adde3fcf2ed62ae8b"}, - {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, - {file = "lxml-4.9.4-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:5557461f83bb7cc718bc9ee1f7156d50e31747e5b38d79cf40f79ab1447afd2d"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fdb325b7fba1e2c40b9b1db407f85642e32404131c08480dd652110fc908561b"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d74d4a3c4b8f7a1f676cedf8e84bcc57705a6d7925e6daef7a1e54ae543a197"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ac7674d1638df129d9cb4503d20ffc3922bd463c865ef3cb412f2c926108e9a4"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:ddd92e18b783aeb86ad2132d84a4b795fc5ec612e3545c1b687e7747e66e2b53"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bd9ac6e44f2db368ef8986f3989a4cad3de4cd55dbdda536e253000c801bcc7"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bc354b1393dce46026ab13075f77b30e40b61b1a53e852e99d3cc5dd1af4bc85"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f836f39678cb47c9541f04d8ed4545719dc31ad850bf1832d6b4171e30d65d23"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9c131447768ed7bc05a02553d939e7f0e807e533441901dd504e217b76307745"}, - {file = "lxml-4.9.4-cp36-cp36m-win32.whl", hash = "sha256:bafa65e3acae612a7799ada439bd202403414ebe23f52e5b17f6ffc2eb98c2be"}, - {file = "lxml-4.9.4-cp36-cp36m-win_amd64.whl", hash = "sha256:6197c3f3c0b960ad033b9b7d611db11285bb461fc6b802c1dd50d04ad715c225"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:7b378847a09d6bd46047f5f3599cdc64fcb4cc5a5a2dd0a2af610361fbe77b16"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1343df4e2e6e51182aad12162b23b0a4b3fd77f17527a78c53f0f23573663545"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6dbdacf5752fbd78ccdb434698230c4f0f95df7dd956d5f205b5ed6911a1367c"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:506becdf2ecaebaf7f7995f776394fcc8bd8a78022772de66677c84fb02dd33d"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca8e44b5ba3edb682ea4e6185b49661fc22b230cf811b9c13963c9f982d1d964"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9d9d5726474cbbef279fd709008f91a49c4f758bec9c062dfbba88eab00e3ff9"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bbdd69e20fe2943b51e2841fc1e6a3c1de460d630f65bde12452d8c97209464d"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8671622256a0859f5089cbe0ce4693c2af407bc053dcc99aadff7f5310b4aa02"}, - {file = "lxml-4.9.4-cp37-cp37m-win32.whl", hash = "sha256:dd4fda67f5faaef4f9ee5383435048ee3e11ad996901225ad7615bc92245bc8e"}, - {file = "lxml-4.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6bee9c2e501d835f91460b2c904bc359f8433e96799f5c2ff20feebd9bb1e590"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:1f10f250430a4caf84115b1e0f23f3615566ca2369d1962f82bef40dd99cd81a"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b505f2bbff50d261176e67be24e8909e54b5d9d08b12d4946344066d66b3e43"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1449f9451cd53e0fd0a7ec2ff5ede4686add13ac7a7bfa6988ff6d75cff3ebe2"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4ece9cca4cd1c8ba889bfa67eae7f21d0d1a2e715b4d5045395113361e8c533d"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59bb5979f9941c61e907ee571732219fa4774d5a18f3fa5ff2df963f5dfaa6bc"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b1980dbcaad634fe78e710c8587383e6e3f61dbe146bcbfd13a9c8ab2d7b1192"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9ae6c3363261021144121427b1552b29e7b59de9d6a75bf51e03bc072efb3c37"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bcee502c649fa6351b44bb014b98c09cb00982a475a1912a9881ca28ab4f9cd9"}, - {file = "lxml-4.9.4-cp38-cp38-win32.whl", hash = "sha256:a8edae5253efa75c2fc79a90068fe540b197d1c7ab5803b800fccfe240eed33c"}, - {file = "lxml-4.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:701847a7aaefef121c5c0d855b2affa5f9bd45196ef00266724a80e439220e46"}, - {file = "lxml-4.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:f610d980e3fccf4394ab3806de6065682982f3d27c12d4ce3ee46a8183d64a6a"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aa9b5abd07f71b081a33115d9758ef6077924082055005808f68feccb27616bd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:365005e8b0718ea6d64b374423e870648ab47c3a905356ab6e5a5ff03962b9a9"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:16b9ec51cc2feab009e800f2c6327338d6ee4e752c76e95a35c4465e80390ccd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a905affe76f1802edcac554e3ccf68188bea16546071d7583fb1b693f9cf756b"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fd814847901df6e8de13ce69b84c31fc9b3fb591224d6762d0b256d510cbf382"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91bbf398ac8bb7d65a5a52127407c05f75a18d7015a270fdd94bbcb04e65d573"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f99768232f036b4776ce419d3244a04fe83784bce871b16d2c2e984c7fcea847"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bb5bd6212eb0edfd1e8f254585290ea1dadc3687dd8fd5e2fd9a87c31915cdab"}, - {file = "lxml-4.9.4-cp39-cp39-win32.whl", hash = "sha256:88f7c383071981c74ec1998ba9b437659e4fd02a3c4a4d3efc16774eb108d0ec"}, - {file = "lxml-4.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:936e8880cc00f839aa4173f94466a8406a96ddce814651075f95837316369899"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:f6c35b2f87c004270fa2e703b872fcc984d714d430b305145c39d53074e1ffe0"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:606d445feeb0856c2b424405236a01c71af7c97e5fe42fbc778634faef2b47e4"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1bdcbebd4e13446a14de4dd1825f1e778e099f17f79718b4aeaf2403624b0f7"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0a08c89b23117049ba171bf51d2f9c5f3abf507d65d016d6e0fa2f37e18c0fc5"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:232fd30903d3123be4c435fb5159938c6225ee8607b635a4d3fca847003134ba"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:231142459d32779b209aa4b4d460b175cadd604fed856f25c1571a9d78114771"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:520486f27f1d4ce9654154b4494cf9307b495527f3a2908ad4cb48e4f7ed7ef7"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:562778586949be7e0d7435fcb24aca4810913771f845d99145a6cee64d5b67ca"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a9e7c6d89c77bb2770c9491d988f26a4b161d05c8ca58f63fb1f1b6b9a74be45"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:786d6b57026e7e04d184313c1359ac3d68002c33e4b1042ca58c362f1d09ff58"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95ae6c5a196e2f239150aa4a479967351df7f44800c93e5a975ec726fef005e2"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:9b556596c49fa1232b0fff4b0e69b9d4083a502e60e404b44341e2f8fb7187f5"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:cc02c06e9e320869d7d1bd323df6dd4281e78ac2e7f8526835d3d48c69060683"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:857d6565f9aa3464764c2cb6a2e3c2e75e1970e877c188f4aeae45954a314e0c"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c42ae7e010d7d6bc51875d768110c10e8a59494855c3d4c348b068f5fb81fdcd"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f10250bb190fb0742e3e1958dd5c100524c2cc5096c67c8da51233f7448dc137"}, - {file = "lxml-4.9.4.tar.gz", hash = "sha256:b1541e50b78e15fa06a2670157a1962ef06591d4c998b998047fff5e3236880e"}, +python-versions = ">=3.6" +files = [ + {file = "lxml-5.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:364d03207f3e603922d0d3932ef363d55bbf48e3647395765f9bfcbdf6d23632"}, + {file = "lxml-5.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50127c186f191b8917ea2fb8b206fbebe87fd414a6084d15568c27d0a21d60db"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74e4f025ef3db1c6da4460dd27c118d8cd136d0391da4e387a15e48e5c975147"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981a06a3076997adf7c743dcd0d7a0415582661e2517c7d961493572e909aa1d"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aef5474d913d3b05e613906ba4090433c515e13ea49c837aca18bde190853dff"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e275ea572389e41e8b039ac076a46cb87ee6b8542df3fff26f5baab43713bca"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5b65529bb2f21ac7861a0e94fdbf5dc0daab41497d18223b46ee8515e5ad297"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bcc98f911f10278d1daf14b87d65325851a1d29153caaf146877ec37031d5f36"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:b47633251727c8fe279f34025844b3b3a3e40cd1b198356d003aa146258d13a2"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:fbc9d316552f9ef7bba39f4edfad4a734d3d6f93341232a9dddadec4f15d425f"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:13e69be35391ce72712184f69000cda04fc89689429179bc4c0ae5f0b7a8c21b"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b6a30a9ab040b3f545b697cb3adbf3696c05a3a68aad172e3fd7ca73ab3c835"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a233bb68625a85126ac9f1fc66d24337d6e8a0f9207b688eec2e7c880f012ec0"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:dfa7c241073d8f2b8e8dbc7803c434f57dbb83ae2a3d7892dd068d99e96efe2c"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1a7aca7964ac4bb07680d5c9d63b9d7028cace3e2d43175cb50bba8c5ad33316"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ae4073a60ab98529ab8a72ebf429f2a8cc612619a8c04e08bed27450d52103c0"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ffb2be176fed4457e445fe540617f0252a72a8bc56208fd65a690fdb1f57660b"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e290d79a4107d7d794634ce3e985b9ae4f920380a813717adf61804904dc4393"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:96e85aa09274955bb6bd483eaf5b12abadade01010478154b0ec70284c1b1526"}, + {file = "lxml-5.2.2-cp310-cp310-win32.whl", hash = "sha256:f956196ef61369f1685d14dad80611488d8dc1ef00be57c0c5a03064005b0f30"}, + {file = "lxml-5.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:875a3f90d7eb5c5d77e529080d95140eacb3c6d13ad5b616ee8095447b1d22e7"}, + {file = "lxml-5.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:45f9494613160d0405682f9eee781c7e6d1bf45f819654eb249f8f46a2c22545"}, + {file = "lxml-5.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0b3f2df149efb242cee2ffdeb6674b7f30d23c9a7af26595099afaf46ef4e88"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d28cb356f119a437cc58a13f8135ab8a4c8ece18159eb9194b0d269ec4e28083"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:657a972f46bbefdbba2d4f14413c0d079f9ae243bd68193cb5061b9732fa54c1"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b9ea10063efb77a965a8d5f4182806fbf59ed068b3c3fd6f30d2ac7bee734"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07542787f86112d46d07d4f3c4e7c760282011b354d012dc4141cc12a68cef5f"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:303f540ad2dddd35b92415b74b900c749ec2010e703ab3bfd6660979d01fd4ed"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2eb2227ce1ff998faf0cd7fe85bbf086aa41dfc5af3b1d80867ecfe75fb68df3"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:1d8a701774dfc42a2f0b8ccdfe7dbc140500d1049e0632a611985d943fcf12df"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:56793b7a1a091a7c286b5f4aa1fe4ae5d1446fe742d00cdf2ffb1077865db10d"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eb00b549b13bd6d884c863554566095bf6fa9c3cecb2e7b399c4bc7904cb33b5"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a2569a1f15ae6c8c64108a2cd2b4a858fc1e13d25846be0666fc144715e32ab"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:8cf85a6e40ff1f37fe0f25719aadf443686b1ac7652593dc53c7ef9b8492b115"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:d237ba6664b8e60fd90b8549a149a74fcc675272e0e95539a00522e4ca688b04"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0b3f5016e00ae7630a4b83d0868fca1e3d494c78a75b1c7252606a3a1c5fc2ad"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23441e2b5339bc54dc949e9e675fa35efe858108404ef9aa92f0456929ef6fe8"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2fb0ba3e8566548d6c8e7dd82a8229ff47bd8fb8c2da237607ac8e5a1b8312e5"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:79d1fb9252e7e2cfe4de6e9a6610c7cbb99b9708e2c3e29057f487de5a9eaefa"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6dcc3d17eac1df7859ae01202e9bb11ffa8c98949dcbeb1069c8b9a75917e01b"}, + {file = "lxml-5.2.2-cp311-cp311-win32.whl", hash = "sha256:4c30a2f83677876465f44c018830f608fa3c6a8a466eb223535035fbc16f3438"}, + {file = "lxml-5.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:49095a38eb333aaf44c06052fd2ec3b8f23e19747ca7ec6f6c954ffea6dbf7be"}, + {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7429e7faa1a60cad26ae4227f4dd0459efde239e494c7312624ce228e04f6391"}, + {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:50ccb5d355961c0f12f6cf24b7187dbabd5433f29e15147a67995474f27d1776"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc911208b18842a3a57266d8e51fc3cfaccee90a5351b92079beed912a7914c2"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33ce9e786753743159799fdf8e92a5da351158c4bfb6f2db0bf31e7892a1feb5"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec87c44f619380878bd49ca109669c9f221d9ae6883a5bcb3616785fa8f94c97"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08ea0f606808354eb8f2dfaac095963cb25d9d28e27edcc375d7b30ab01abbf6"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75a9632f1d4f698b2e6e2e1ada40e71f369b15d69baddb8968dcc8e683839b18"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74da9f97daec6928567b48c90ea2c82a106b2d500f397eeb8941e47d30b1ca85"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:0969e92af09c5687d769731e3f39ed62427cc72176cebb54b7a9d52cc4fa3b73"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:9164361769b6ca7769079f4d426a41df6164879f7f3568be9086e15baca61466"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d26a618ae1766279f2660aca0081b2220aca6bd1aa06b2cf73f07383faf48927"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab67ed772c584b7ef2379797bf14b82df9aa5f7438c5b9a09624dd834c1c1aaf"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3d1e35572a56941b32c239774d7e9ad724074d37f90c7a7d499ab98761bd80cf"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:8268cbcd48c5375f46e000adb1390572c98879eb4f77910c6053d25cc3ac2c67"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e282aedd63c639c07c3857097fc0e236f984ceb4089a8b284da1c526491e3f3d"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfdc2bfe69e9adf0df4915949c22a25b39d175d599bf98e7ddf620a13678585"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4aefd911793b5d2d7a921233a54c90329bf3d4a6817dc465f12ffdfe4fc7b8fe"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8b8df03a9e995b6211dafa63b32f9d405881518ff1ddd775db4e7b98fb545e1c"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f11ae142f3a322d44513de1018b50f474f8f736bc3cd91d969f464b5bfef8836"}, + {file = "lxml-5.2.2-cp312-cp312-win32.whl", hash = "sha256:16a8326e51fcdffc886294c1e70b11ddccec836516a343f9ed0f82aac043c24a"}, + {file = "lxml-5.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:bbc4b80af581e18568ff07f6395c02114d05f4865c2812a1f02f2eaecf0bfd48"}, + {file = "lxml-5.2.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e3d9d13603410b72787579769469af730c38f2f25505573a5888a94b62b920f8"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38b67afb0a06b8575948641c1d6d68e41b83a3abeae2ca9eed2ac59892b36706"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c689d0d5381f56de7bd6966a4541bff6e08bf8d3871bbd89a0c6ab18aa699573"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:cf2a978c795b54c539f47964ec05e35c05bd045db5ca1e8366988c7f2fe6b3ce"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:739e36ef7412b2bd940f75b278749106e6d025e40027c0b94a17ef7968d55d56"}, + {file = "lxml-5.2.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d8bbcd21769594dbba9c37d3c819e2d5847656ca99c747ddb31ac1701d0c0ed9"}, + {file = "lxml-5.2.2-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:2304d3c93f2258ccf2cf7a6ba8c761d76ef84948d87bf9664e14d203da2cd264"}, + {file = "lxml-5.2.2-cp36-cp36m-win32.whl", hash = "sha256:02437fb7308386867c8b7b0e5bc4cd4b04548b1c5d089ffb8e7b31009b961dc3"}, + {file = "lxml-5.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:edcfa83e03370032a489430215c1e7783128808fd3e2e0a3225deee278585196"}, + {file = "lxml-5.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:28bf95177400066596cdbcfc933312493799382879da504633d16cf60bba735b"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a745cc98d504d5bd2c19b10c79c61c7c3df9222629f1b6210c0368177589fb8"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b590b39ef90c6b22ec0be925b211298e810b4856909c8ca60d27ffbca6c12e6"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b336b0416828022bfd5a2e3083e7f5ba54b96242159f83c7e3eebaec752f1716"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:c2faf60c583af0d135e853c86ac2735ce178f0e338a3c7f9ae8f622fd2eb788c"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:4bc6cb140a7a0ad1f7bc37e018d0ed690b7b6520ade518285dc3171f7a117905"}, + {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7ff762670cada8e05b32bf1e4dc50b140790909caa8303cfddc4d702b71ea184"}, + {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:57f0a0bbc9868e10ebe874e9f129d2917750adf008fe7b9c1598c0fbbfdde6a6"}, + {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:a6d2092797b388342c1bc932077ad232f914351932353e2e8706851c870bca1f"}, + {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:60499fe961b21264e17a471ec296dcbf4365fbea611bf9e303ab69db7159ce61"}, + {file = "lxml-5.2.2-cp37-cp37m-win32.whl", hash = "sha256:d9b342c76003c6b9336a80efcc766748a333573abf9350f4094ee46b006ec18f"}, + {file = "lxml-5.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b16db2770517b8799c79aa80f4053cd6f8b716f21f8aca962725a9565ce3ee40"}, + {file = "lxml-5.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7ed07b3062b055d7a7f9d6557a251cc655eed0b3152b76de619516621c56f5d3"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60fdd125d85bf9c279ffb8e94c78c51b3b6a37711464e1f5f31078b45002421"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7e24cb69ee5f32e003f50e016d5fde438010c1022c96738b04fc2423e61706"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23cfafd56887eaed93d07bc4547abd5e09d837a002b791e9767765492a75883f"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:19b4e485cd07b7d83e3fe3b72132e7df70bfac22b14fe4bf7a23822c3a35bff5"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7ce7ad8abebe737ad6143d9d3bf94b88b93365ea30a5b81f6877ec9c0dee0a48"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e49b052b768bb74f58c7dda4e0bdf7b79d43a9204ca584ffe1fb48a6f3c84c66"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d14a0d029a4e176795cef99c056d58067c06195e0c7e2dbb293bf95c08f772a3"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:be49ad33819d7dcc28a309b86d4ed98e1a65f3075c6acd3cd4fe32103235222b"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a6d17e0370d2516d5bb9062c7b4cb731cff921fc875644c3d751ad857ba9c5b1"}, + {file = "lxml-5.2.2-cp38-cp38-win32.whl", hash = "sha256:5b8c041b6265e08eac8a724b74b655404070b636a8dd6d7a13c3adc07882ef30"}, + {file = "lxml-5.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:f61efaf4bed1cc0860e567d2ecb2363974d414f7f1f124b1df368bbf183453a6"}, + {file = "lxml-5.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fb91819461b1b56d06fa4bcf86617fac795f6a99d12239fb0c68dbeba41a0a30"}, + {file = "lxml-5.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d4ed0c7cbecde7194cd3228c044e86bf73e30a23505af852857c09c24e77ec5d"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54401c77a63cc7d6dc4b4e173bb484f28a5607f3df71484709fe037c92d4f0ed"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:625e3ef310e7fa3a761d48ca7ea1f9d8718a32b1542e727d584d82f4453d5eeb"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:519895c99c815a1a24a926d5b60627ce5ea48e9f639a5cd328bda0515ea0f10c"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7079d5eb1c1315a858bbf180000757db8ad904a89476653232db835c3114001"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:343ab62e9ca78094f2306aefed67dcfad61c4683f87eee48ff2fd74902447726"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:cd9e78285da6c9ba2d5c769628f43ef66d96ac3085e59b10ad4f3707980710d3"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:546cf886f6242dff9ec206331209db9c8e1643ae642dea5fdbecae2453cb50fd"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:02f6a8eb6512fdc2fd4ca10a49c341c4e109aa6e9448cc4859af5b949622715a"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:339ee4a4704bc724757cd5dd9dc8cf4d00980f5d3e6e06d5847c1b594ace68ab"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0a028b61a2e357ace98b1615fc03f76eb517cc028993964fe08ad514b1e8892d"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f90e552ecbad426eab352e7b2933091f2be77115bb16f09f78404861c8322981"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d83e2d94b69bf31ead2fa45f0acdef0757fa0458a129734f59f67f3d2eb7ef32"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a02d3c48f9bb1e10c7788d92c0c7db6f2002d024ab6e74d6f45ae33e3d0288a3"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6d68ce8e7b2075390e8ac1e1d3a99e8b6372c694bbe612632606d1d546794207"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:453d037e09a5176d92ec0fd282e934ed26d806331a8b70ab431a81e2fbabf56d"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:3b019d4ee84b683342af793b56bb35034bd749e4cbdd3d33f7d1107790f8c472"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb3942960f0beb9f46e2a71a3aca220d1ca32feb5a398656be934320804c0df9"}, + {file = "lxml-5.2.2-cp39-cp39-win32.whl", hash = "sha256:ac6540c9fff6e3813d29d0403ee7a81897f1d8ecc09a8ff84d2eea70ede1cdbf"}, + {file = "lxml-5.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:610b5c77428a50269f38a534057444c249976433f40f53e3b47e68349cca1425"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b537bd04d7ccd7c6350cdaaaad911f6312cbd61e6e6045542f781c7f8b2e99d2"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4820c02195d6dfb7b8508ff276752f6b2ff8b64ae5d13ebe02e7667e035000b9"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a09f6184f17a80897172863a655467da2b11151ec98ba8d7af89f17bf63dae"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:76acba4c66c47d27c8365e7c10b3d8016a7da83d3191d053a58382311a8bf4e1"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b128092c927eaf485928cec0c28f6b8bead277e28acf56800e972aa2c2abd7a2"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ae791f6bd43305aade8c0e22f816b34f3b72b6c820477aab4d18473a37e8090b"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a2f6a1bc2460e643785a2cde17293bd7a8f990884b822f7bca47bee0a82fc66b"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e8d351ff44c1638cb6e980623d517abd9f580d2e53bfcd18d8941c052a5a009"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bec4bd9133420c5c52d562469c754f27c5c9e36ee06abc169612c959bd7dbb07"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:55ce6b6d803890bd3cc89975fca9de1dff39729b43b73cb15ddd933b8bc20484"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ab6a358d1286498d80fe67bd3d69fcbc7d1359b45b41e74c4a26964ca99c3f8"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:06668e39e1f3c065349c51ac27ae430719d7806c026fec462e5693b08b95696b"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9cd5323344d8ebb9fb5e96da5de5ad4ebab993bbf51674259dbe9d7a18049525"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89feb82ca055af0fe797a2323ec9043b26bc371365847dbe83c7fd2e2f181c34"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e481bba1e11ba585fb06db666bfc23dbe181dbafc7b25776156120bf12e0d5a6"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9d6c6ea6a11ca0ff9cd0390b885984ed31157c168565702959c25e2191674a14"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3d98de734abee23e61f6b8c2e08a88453ada7d6486dc7cdc82922a03968928db"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:69ab77a1373f1e7563e0fb5a29a8440367dec051da6c7405333699d07444f511"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:34e17913c431f5ae01d8658dbf792fdc457073dcdfbb31dc0cc6ab256e664a8d"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f8757b03208c3f50097761be2dea0aba02e94f0dc7023ed73a7bb14ff11eb0"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a520b4f9974b0a0a6ed73c2154de57cdfd0c8800f4f15ab2b73238ffed0b36e"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5e097646944b66207023bc3c634827de858aebc226d5d4d6d16f0b77566ea182"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b5e4ef22ff25bfd4ede5f8fb30f7b24446345f3e79d9b7455aef2836437bc38a"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff69a9a0b4b17d78170c73abe2ab12084bdf1691550c5629ad1fe7849433f324"}, + {file = "lxml-5.2.2.tar.gz", hash = "sha256:bb2dc4898180bea79863d5487e5f9c7c34297414bad54bcd0f0852aee9cfdb87"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (==0.29.37)"] +source = ["Cython (>=3.0.10)"] [[package]] name = "markdown-it-py" @@ -5314,4 +5364,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "209fa8900f964311a88f604474af3734f29017abcbb57cc4504b0615c721c03b" +content-hash = "da168286ac2df04d66e32eab84713b269b2bbbfed0b9402a05247c4ff615e907" diff --git a/pyproject.toml b/pyproject.toml index 2a27b09a8..2bff7e1b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ packages = [{include = "sotopia"}] [tool.poetry.dependencies] python = ">=3.10, <3.13" -lxml = "^4.9.3" +lxml = ">=4.9.3,<6.0.0" openai = "^1.11.0" langchain = "0.1.5" rich = "^13.6.0" From bf0321b002ad93982e0eb19588c3cfe4a0a61bb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 14:43:19 -0400 Subject: [PATCH 6/9] Bump anthropic from 0.26.1 to 0.28.1 (#117) Bumps [anthropic](https://github.com/anthropics/anthropic-sdk-python) from 0.26.1 to 0.28.1. - [Release notes](https://github.com/anthropics/anthropic-sdk-python/releases) - [Changelog](https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/anthropic-sdk-python/compare/v0.26.1...v0.28.1) --- updated-dependencies: - dependency-name: anthropic dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4fa848ce3..8ac1beb4d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -123,20 +123,20 @@ frozenlist = ">=1.1.0" [[package]] name = "anthropic" -version = "0.26.1" +version = "0.28.1" description = "The official Python library for the anthropic API" optional = true python-versions = ">=3.7" files = [ - {file = "anthropic-0.26.1-py3-none-any.whl", hash = "sha256:2812b9b250b551ed8a1f0a7e6ae3f005654098994f45ebca5b5808bd154c9628"}, - {file = "anthropic-0.26.1.tar.gz", hash = "sha256:26680ff781a6f678a30a1dccd0743631e602b23a47719439ffdef5335fa167d8"}, + {file = "anthropic-0.28.1-py3-none-any.whl", hash = "sha256:c4773ae2b42951a6b747bed328b0d03fa412938c95c3a8b9dce70d69badb710b"}, + {file = "anthropic-0.28.1.tar.gz", hash = "sha256:e3a6d595bde241141bdc685edc393903ec95c7fa378013a71186cfb8f32b1793"}, ] [package.dependencies] anyio = ">=3.5.0,<5" distro = ">=1.7.0,<2" httpx = ">=0.23.0,<1" -jiter = ">=0.1.0,<1" +jiter = ">=0.4.0,<1" pydantic = ">=1.9.0,<3" sniffio = "*" tokenizers = ">=0.13.0" @@ -5364,4 +5364,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "da168286ac2df04d66e32eab84713b269b2bbbfed0b9402a05247c4ff615e907" +content-hash = "4bee5fd118db71b39719ae0267f7fa3a0211b2d4ae3f18ab3d0ed40f5158ce64" diff --git a/pyproject.toml b/pyproject.toml index 2bff7e1b3..cf0191927 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ litellm = "~1.23.12" # dependency versions for extras fastapi = { version = "^0.109.2", optional = true } tabulate = { version = "^0.9.0", optional = true } -anthropic = { version = "^0.26.0", optional = true } +anthropic = { version = ">=0.26,<0.29", optional = true } xmltodict = { version = "^0.13.0", optional = true } groq = { version = ">=0.4.2,<0.10.0", optional = true } cohere = { version = "^5.1.8", optional = true } From 8d9b9be6155e8d6343591867373968c1184a8035 Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Thu, 20 Jun 2024 12:53:17 -0400 Subject: [PATCH 7/9] Langchain V0.2 and Sync API deprecated (#116) * upgrade langchain and remove sync apis * remove return prompt from agenerate * remove prompt from agenerate * add sync apis --- examples/generate_specific_envs.py | 6 +- poetry.lock | 435 ++++++++++---------- pyproject.toml | 4 +- sotopia/agents/__init__.py | 2 - sotopia/agents/generate_agent_background.py | 9 +- sotopia/agents/llm_agent.py | 53 +-- sotopia/envs/evaluators.py | 3 +- sotopia/generation_utils/__init__.py | 15 +- sotopia/generation_utils/generate.py | 233 +---------- sotopia/generation_utils/sync.py | 29 ++ sotopia/server.py | 5 +- tests/generation_utils/test_generation.py | 22 +- 12 files changed, 299 insertions(+), 517 deletions(-) create mode 100644 sotopia/generation_utils/sync.py diff --git a/examples/generate_specific_envs.py b/examples/generate_specific_envs.py index bfcd27355..ef83bea59 100644 --- a/examples/generate_specific_envs.py +++ b/examples/generate_specific_envs.py @@ -12,7 +12,7 @@ import numpy as np from datasets import DatasetDict, load_dataset -from sotopia.generation_utils.generate import StrOutputParser, generate +from sotopia.generation_utils.generate import StrOutputParser, agenerate async def generate_mutual_friend_envs() -> tuple[str, list[str]]: @@ -78,7 +78,7 @@ async def generate_craigslist_bargains_envs() -> tuple[str, list[str]]: all_data = craigslist_bargains_dataset["train"] # sample one datum from all data datum = np.random.choice(all_data) - scenario = generate( + scenario = await agenerate( model_name="gpt-4", template="The following sentence is automatically generated with the following" 'template: "One person is selling for , another person is' @@ -100,7 +100,7 @@ async def generate_craigslist_bargains_envs() -> tuple[str, list[str]]: datum["agent_info"]["Target"][i] = datum["items"]["Price"][0] / ( 1 + markup_ratio ) - goal = generate( + goal = await agenerate( model_name="gpt-4", template="The following sentence is automatically generated with the following" 'template: "You want to this item. Your target price ' diff --git a/poetry.lock b/poetry.lock index 8ac1beb4d..d0b2492a5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -247,17 +247,17 @@ test-tox-coverage = ["coverage (>=5.5)"] [[package]] name = "boto3" -version = "1.34.129" +version = "1.34.130" description = "The AWS SDK for Python" optional = true python-versions = ">=3.8" files = [ - {file = "boto3-1.34.129-py3-none-any.whl", hash = "sha256:cc73de1c9d953b1f9da6ee2404af717e93d888f790f3e0291b22d1b8489eb401"}, - {file = "boto3-1.34.129.tar.gz", hash = "sha256:a7a696fd3e7f5f43a81450b441f3eb6c5a89d28efe867cd97d8fc73ea5d8c139"}, + {file = "boto3-1.34.130-py3-none-any.whl", hash = "sha256:c163fb7135a94e7b8c8c478a44071c843f05e212fa4bec3105f8a437ecbf1bcb"}, + {file = "boto3-1.34.130.tar.gz", hash = "sha256:b781d267dd5e7583966e05697f6bd45e2f46c01dc619ba0860b042963ee69296"}, ] [package.dependencies] -botocore = ">=1.34.129,<1.35.0" +botocore = ">=1.34.130,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -266,13 +266,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.129" +version = "1.34.130" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.8" files = [ - {file = "botocore-1.34.129-py3-none-any.whl", hash = "sha256:86d3dd30996aa459e9c3321edac12aebe47c73cb4acc7556941f9b4c39726088"}, - {file = "botocore-1.34.129.tar.gz", hash = "sha256:7c56e25af6112d69c5d14a15b42f76ba7687687abc463a96ac5edca19c0a9c2d"}, + {file = "botocore-1.34.130-py3-none-any.whl", hash = "sha256:a3b36e9dac1ed31c4cb3a5c5e540a7d8a9b90ff1d17f87734e674154b41776d8"}, + {file = "botocore-1.34.130.tar.gz", hash = "sha256:a242b3b0a836b14f308a309565cd63e88654cec238f9b73abbbd3c0526db4c81"}, ] [package.dependencies] @@ -676,21 +676,6 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] -[[package]] -name = "dataclasses-json" -version = "0.6.7" -description = "Easily serialize dataclasses to and from JSON." -optional = false -python-versions = "<4.0,>=3.7" -files = [ - {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, - {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, -] - -[package.dependencies] -marshmallow = ">=3.18.0,<4.0.0" -typing-inspect = ">=0.4.0,<1" - [[package]] name = "datasets" version = "2.20.0" @@ -934,18 +919,18 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.15.1" +version = "3.15.3" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.15.1-py3-none-any.whl", hash = "sha256:71b3102950e91dfc1bb4209b64be4dc8854f40e5f534428d8684f953ac847fac"}, - {file = "filelock-3.15.1.tar.gz", hash = "sha256:58a2549afdf9e02e10720eaa4d4470f56386d7a6f72edd7d0596337af8ed7ad8"}, + {file = "filelock-3.15.3-py3-none-any.whl", hash = "sha256:0151273e5b5d6cf753a61ec83b3a9b7d8821c39ae9af9d7ecf2f9e2f17404103"}, + {file = "filelock-3.15.3.tar.gz", hash = "sha256:e1199bf5194a2277273dacd50269f0d87d0682088a3c561c15674ea9005d8635"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] @@ -1144,13 +1129,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.133.0" +version = "2.134.0" description = "Google API Client Library for Python" optional = true python-versions = ">=3.7" files = [ - {file = "google-api-python-client-2.133.0.tar.gz", hash = "sha256:293092905b66a046d3187a99ac454e12b00cc2c70444f26eb2f1f9c1a82720b4"}, - {file = "google_api_python_client-2.133.0-py2.py3-none-any.whl", hash = "sha256:396fe676ea0dfed066654dcf9f8dea77a1342f9d9bb23bb88e45b7b81e773926"}, + {file = "google-api-python-client-2.134.0.tar.gz", hash = "sha256:4a8f0bea651a212997cc83c0f271fc86f80ef93d1cee9d84de7dfaeef2a858b6"}, + {file = "google_api_python_client-2.134.0-py2.py3-none-any.whl", hash = "sha256:ba05d60f6239990b7994f6328f17bb154c602d31860fb553016dc9f8ce886945"}, ] [package.dependencies] @@ -2026,123 +2011,115 @@ test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout" [[package]] name = "langchain" -version = "0.1.5" +version = "0.2.5" description = "Building applications with LLMs through composability" optional = false -python-versions = ">=3.8.1,<4.0" +python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain-0.1.5-py3-none-any.whl", hash = "sha256:4614118d4a95b2e7ba3611a0b6b21707a259a21652a04fbe3c31205bcf3fcd50"}, - {file = "langchain-0.1.5.tar.gz", hash = "sha256:69603a5bb21b044ddea69d38131dbbf47475afdf79728644faa67d1ad325d652"}, + {file = "langchain-0.2.5-py3-none-any.whl", hash = "sha256:9aded9a65348254e1c93dcdaacffe4d1b6a5e7f74ef80c160c88ff78ad299228"}, + {file = "langchain-0.2.5.tar.gz", hash = "sha256:ffdbf4fcea46a10d461bcbda2402220fcfd72a0c70e9f4161ae0510067b9b3bd"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -dataclasses-json = ">=0.5.7,<0.7" -jsonpatch = ">=1.33,<2.0" -langchain-community = ">=0.0.17,<0.1" -langchain-core = ">=0.1.16,<0.2" -langsmith = ">=0.0.83,<0.1" -numpy = ">=1,<2" +langchain-core = ">=0.2.7,<0.3.0" +langchain-text-splitters = ">=0.2.0,<0.3.0" +langsmith = ">=0.1.17,<0.2.0" +numpy = [ + {version = ">=1,<2", markers = "python_version < \"3.12\""}, + {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, +] pydantic = ">=1,<3" PyYAML = ">=5.3" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" tenacity = ">=8.1.0,<9.0.0" -[package.extras] -azure = ["azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-textanalytics (>=5.3.0,<6.0.0)", "azure-ai-vision (>=0.11.1b1,<0.12.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-core (>=1.26.4,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "azure-search-documents (==11.4.0b8)", "openai (<2)"] -clarifai = ["clarifai (>=9.1.0)"] -cli = ["typer (>=0.9.0,<0.10.0)"] -cohere = ["cohere (>=4,<5)"] -docarray = ["docarray[hnswlib] (>=0.32.0,<0.33.0)"] -embeddings = ["sentence-transformers (>=2,<3)"] -extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3.11,<0.4.0)", "arxiv (>=1.4,<2.0)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.0,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "cohere (>=4,<5)", "couchbase (>=4.1.9,<5.0.0)", "dashvector (>=1.0.1,<2.0.0)", "databricks-vectorsearch (>=0.21,<0.22)", "datasets (>=2.15.0,<3.0.0)", "dgml-utils (>=0.3.0,<0.4.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "fireworks-ai (>=0.9.0,<0.10.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "google-cloud-documentai (>=2.20.1,<3.0.0)", "gql (>=3.4.1,<4.0.0)", "hologres-vector (>=0.0.6,<0.0.7)", "html2text (>=2020.1.16,<2021.0.0)", "javelin-sdk (>=0.1.8,<0.2.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "jsonschema (>1)", "langchain-openai (>=0.0.2,<0.1)", "lxml (>=4.9.2,<5.0.0)", "markdownify (>=0.11.6,<0.12.0)", "motor (>=3.3.1,<4.0.0)", "msal (>=1.25.0,<2.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "numexpr (>=2.8.6,<3.0.0)", "openai (<2)", "openapi-pydantic (>=0.3.2,<0.4.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "praw (>=7.7.1,<8.0.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "rapidocr-onnxruntime (>=1.3.2,<2.0.0)", "rdflib (==7.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "rspace_client (>=2.5.0,<3.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "timescale-vector (>=0.0.1,<0.0.2)", "tqdm (>=4.48.0)", "upstash-redis (>=0.15.0,<0.16.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)"] -javascript = ["esprima (>=4.0.1,<5.0.0)"] -llms = ["clarifai (>=9.1.0)", "cohere (>=4,<5)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (<2)", "openlm (>=0.0.5,<0.0.6)", "torch (>=1,<3)", "transformers (>=4,<5)"] -openai = ["openai (<2)", "tiktoken (>=0.3.2,<0.6.0)"] -qdrant = ["qdrant-client (>=1.3.1,<2.0.0)"] -text-helpers = ["chardet (>=5.1.0,<6.0.0)"] - [[package]] -name = "langchain-community" -version = "0.0.18" -description = "Community contributed LangChain integrations." +name = "langchain-core" +version = "0.2.8" +description = "Building applications with LLMs through composability" optional = false -python-versions = ">=3.8.1,<4.0" +python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_community-0.0.18-py3-none-any.whl", hash = "sha256:b87e20c1fa3f37e9608d7ccc08b4d8ed86f875b8c1e735d0464ae986e41c5a71"}, - {file = "langchain_community-0.0.18.tar.gz", hash = "sha256:f044f331b418f16148b76929f27cc2107fce2d190ea3fae0cdaf155ceda9892f"}, + {file = "langchain_core-0.2.8-py3-none-any.whl", hash = "sha256:172c81c858dc1f3123cc72b7e44e10f44c92f8a761cae18c364081f6c208e9f6"}, + {file = "langchain_core-0.2.8.tar.gz", hash = "sha256:2db866a4514672c4875b69d5590aa2ed50aa0d144874268bef68d74b5e7f33f9"}, ] [package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -dataclasses-json = ">=0.5.7,<0.7" -langchain-core = ">=0.1.19,<0.2" -langsmith = ">=0.0.83,<0.1" -numpy = ">=1,<2" +jsonpatch = ">=1.33,<2.0" +langsmith = ">=0.1.75,<0.2.0" +packaging = ">=23.2,<25" +pydantic = ">=1,<3" PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" tenacity = ">=8.1.0,<9.0.0" -[package.extras] -cli = ["typer (>=0.9.0,<0.10.0)"] -extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3.11,<0.4.0)", "arxiv (>=1.4,<2.0)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "azure-ai-documentintelligence (>=1.0.0b1,<2.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.0,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "cohere (>=4,<5)", "databricks-vectorsearch (>=0.21,<0.22)", "datasets (>=2.15.0,<3.0.0)", "dgml-utils (>=0.3.0,<0.4.0)", "elasticsearch (>=8.12.0,<9.0.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "fireworks-ai (>=0.9.0,<0.10.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "google-cloud-documentai (>=2.20.1,<3.0.0)", "gql (>=3.4.1,<4.0.0)", "gradientai (>=1.4.0,<2.0.0)", "hdbcli (>=2.19.21,<3.0.0)", "hologres-vector (>=0.0.6,<0.0.7)", "html2text (>=2020.1.16,<2021.0.0)", "httpx (>=0.24.1,<0.25.0)", "javelin-sdk (>=0.1.8,<0.2.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "jsonschema (>1)", "lxml (>=4.9.2,<5.0.0)", "markdownify (>=0.11.6,<0.12.0)", "motor (>=3.3.1,<4.0.0)", "msal (>=1.25.0,<2.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "numexpr (>=2.8.6,<3.0.0)", "nvidia-riva-client (>=2.14.0,<3.0.0)", "oci (>=2.119.1,<3.0.0)", "openai (<2)", "openapi-pydantic (>=0.3.2,<0.4.0)", "oracle-ads (>=2.9.1,<3.0.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "praw (>=7.7.1,<8.0.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "rapidocr-onnxruntime (>=1.3.2,<2.0.0)", "rdflib (==7.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "rspace_client (>=2.5.0,<3.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "timescale-vector (>=0.0.1,<0.0.2)", "tqdm (>=4.48.0)", "upstash-redis (>=0.15.0,<0.16.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)", "zhipuai (>=1.0.7,<2.0.0)"] - [[package]] name = "langchain-core" -version = "0.1.19" +version = "0.2.9" description = "Building applications with LLMs through composability" optional = false -python-versions = ">=3.8.1,<4.0" +python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_core-0.1.19-py3-none-any.whl", hash = "sha256:46b5fd54181df5aa6d3041d61beb2b91e5437b6742274e7924a97734ed62cf43"}, - {file = "langchain_core-0.1.19.tar.gz", hash = "sha256:30539190a63dff53e995f10aefb943b4f7e01aba4bf28fd1e13016b040c0e9da"}, + {file = "langchain_core-0.2.9-py3-none-any.whl", hash = "sha256:426a5a4fea95a5db995ba5ab560b76edd4998fb6fe52ccc28ac987092a4cbfcd"}, + {file = "langchain_core-0.2.9.tar.gz", hash = "sha256:f1c59082642921727844e1cd0eb36d451edd1872c20e193aa3142aac03495986"}, ] [package.dependencies] -anyio = ">=3,<5" jsonpatch = ">=1.33,<2.0" -langsmith = ">=0.0.83,<0.1" -packaging = ">=23.2,<24.0" -pydantic = ">=1,<3" +langsmith = ">=0.1.75,<0.2.0" +packaging = ">=23.2,<25" +pydantic = {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""} PyYAML = ">=5.3" -requests = ">=2,<3" -tenacity = ">=8.1.0,<9.0.0" - -[package.extras] -extended-testing = ["jinja2 (>=3,<4)"] +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-openai" -version = "0.0.6" +version = "0.1.8" description = "An integration package connecting OpenAI and LangChain" optional = false -python-versions = ">=3.8.1,<4.0" +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain_openai-0.1.8-py3-none-any.whl", hash = "sha256:8125c84223e9f43b05defbca64eedbcf362fd78a680de6c25e64f973b34a8063"}, + {file = "langchain_openai-0.1.8.tar.gz", hash = "sha256:a11fcce15def7917c44232abda6baaa63dfc79fe44be1531eea650d39a44cd95"}, +] + +[package.dependencies] +langchain-core = ">=0.2.2,<0.3" +openai = ">=1.26.0,<2.0.0" +tiktoken = ">=0.7,<1" + +[[package]] +name = "langchain-text-splitters" +version = "0.2.1" +description = "LangChain text splitting utilities" +optional = false +python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_openai-0.0.6-py3-none-any.whl", hash = "sha256:2ef040e4447a26a9d3bd45dfac9cefa00797ea58555a3d91ab4f88699eb3a005"}, - {file = "langchain_openai-0.0.6.tar.gz", hash = "sha256:f5c4ebe46f2c8635c8f0c26cc8df27700aacafea025410e418d5a080039974dd"}, + {file = "langchain_text_splitters-0.2.1-py3-none-any.whl", hash = "sha256:c2774a85f17189eaca50339629d2316d13130d4a8d9f1a1a96f3a03670c4a138"}, + {file = "langchain_text_splitters-0.2.1.tar.gz", hash = "sha256:06853d17d7241ecf5c97c7b6ef01f600f9b0fb953dd997838142a527a4f32ea4"}, ] [package.dependencies] -langchain-core = ">=0.1.16,<0.2" -numpy = ">=1,<2" -openai = ">=1.10.0,<2.0.0" -tiktoken = ">=0.5.2,<1" +langchain-core = ">=0.2.0,<0.3.0" + +[package.extras] +extended-testing = ["beautifulsoup4 (>=4.12.3,<5.0.0)", "lxml (>=4.9.3,<6.0)"] [[package]] name = "langsmith" -version = "0.0.92" +version = "0.1.81" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false -python-versions = ">=3.8.1,<4.0" +python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.0.92-py3-none-any.whl", hash = "sha256:ddcf65e3b5ca11893ae8ef9816ce2a11a089d051be491886e43a2c4556b88fd0"}, - {file = "langsmith-0.0.92.tar.gz", hash = "sha256:61a3a502222bdd221b7f592b6fc14756d74c4fc088aa6bd8834b92adfe9ee583"}, + {file = "langsmith-0.1.81-py3-none-any.whl", hash = "sha256:3251d823225eef23ee541980b9d9e506367eabbb7f985a086b5d09e8f78ba7e9"}, + {file = "langsmith-0.1.81.tar.gz", hash = "sha256:585ef3a2251380bd2843a664c9a28da4a7d28432e3ee8bcebf291ffb8e1f0af0"}, ] [package.dependencies] +orjson = ">=3.9.14,<4.0.0" pydantic = ">=1,<3" requests = ">=2,<3" @@ -2423,25 +2400,6 @@ files = [ {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] -[[package]] -name = "marshmallow" -version = "3.21.3" -description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -optional = false -python-versions = ">=3.8" -files = [ - {file = "marshmallow-3.21.3-py3-none-any.whl", hash = "sha256:86ce7fb914aa865001a4b2092c4c2872d13bc347f3d42673272cabfdbad386f1"}, - {file = "marshmallow-3.21.3.tar.gz", hash = "sha256:4f57c5e050a54d66361e826f94fba213eb10b67b2fdb02c3e0343ce207ba1662"}, -] - -[package.dependencies] -packaging = ">=17.0" - -[package.extras] -dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] -docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.3.7)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"] -tests = ["pytest", "pytz", "simplejson"] - [[package]] name = "matplotlib-inline" version = "0.1.7" @@ -2983,13 +2941,13 @@ files = [ [[package]] name = "openai" -version = "1.34.0" +version = "1.35.1" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.34.0-py3-none-any.whl", hash = "sha256:018623c2f795424044675c6230fa3bfbf98d9e0aab45d8fd116f2efb2cfb6b7e"}, - {file = "openai-1.34.0.tar.gz", hash = "sha256:95c8e2da4acd6958e626186957d656597613587195abd0fb2527566a93e76770"}, + {file = "openai-1.35.1-py3-none-any.whl", hash = "sha256:53ef8935cf916dc7ece67fee5a8a09fc4db5aadf4d6e95b5b7f767f3c4432e4d"}, + {file = "openai-1.35.1.tar.gz", hash = "sha256:d85973adc2f4fbb11ba20bfd948e3340b8352f6b8a02f1fa1c387c8eefac8d9d"}, ] [package.dependencies] @@ -3004,15 +2962,70 @@ typing-extensions = ">=4.7,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +[[package]] +name = "orjson" +version = "3.10.5" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.8" +files = [ + {file = "orjson-3.10.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:545d493c1f560d5ccfc134803ceb8955a14c3fcb47bbb4b2fee0232646d0b932"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4324929c2dd917598212bfd554757feca3e5e0fa60da08be11b4aa8b90013c1"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c13ca5e2ddded0ce6a927ea5a9f27cae77eee4c75547b4297252cb20c4d30e6"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6c8e30adfa52c025f042a87f450a6b9ea29649d828e0fec4858ed5e6caecf63"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:338fd4f071b242f26e9ca802f443edc588fa4ab60bfa81f38beaedf42eda226c"}, + {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6970ed7a3126cfed873c5d21ece1cd5d6f83ca6c9afb71bbae21a0b034588d96"}, + {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:235dadefb793ad12f7fa11e98a480db1f7c6469ff9e3da5e73c7809c700d746b"}, + {file = "orjson-3.10.5-cp310-none-win32.whl", hash = "sha256:be79e2393679eda6a590638abda16d167754393f5d0850dcbca2d0c3735cebe2"}, + {file = "orjson-3.10.5-cp310-none-win_amd64.whl", hash = "sha256:c4a65310ccb5c9910c47b078ba78e2787cb3878cdded1702ac3d0da71ddc5228"}, + {file = "orjson-3.10.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cdf7365063e80899ae3a697def1277c17a7df7ccfc979990a403dfe77bb54d40"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b68742c469745d0e6ca5724506858f75e2f1e5b59a4315861f9e2b1df77775a"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d10cc1b594951522e35a3463da19e899abe6ca95f3c84c69e9e901e0bd93d38"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcbe82b35d1ac43b0d84072408330fd3295c2896973112d495e7234f7e3da2e1"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c0eb7e0c75e1e486c7563fe231b40fdd658a035ae125c6ba651ca3b07936f5"}, + {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:53ed1c879b10de56f35daf06dbc4a0d9a5db98f6ee853c2dbd3ee9d13e6f302f"}, + {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:099e81a5975237fda3100f918839af95f42f981447ba8f47adb7b6a3cdb078fa"}, + {file = "orjson-3.10.5-cp311-none-win32.whl", hash = "sha256:1146bf85ea37ac421594107195db8bc77104f74bc83e8ee21a2e58596bfb2f04"}, + {file = "orjson-3.10.5-cp311-none-win_amd64.whl", hash = "sha256:36a10f43c5f3a55c2f680efe07aa93ef4a342d2960dd2b1b7ea2dd764fe4a37c"}, + {file = "orjson-3.10.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:68f85ecae7af14a585a563ac741b0547a3f291de81cd1e20903e79f25170458f"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28afa96f496474ce60d3340fe8d9a263aa93ea01201cd2bad844c45cd21f5268"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cd684927af3e11b6e754df80b9ffafd9fb6adcaa9d3e8fdd5891be5a5cad51e"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d21b9983da032505f7050795e98b5d9eee0df903258951566ecc358f6696969"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ad1de7fef79736dde8c3554e75361ec351158a906d747bd901a52a5c9c8d24b"}, + {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d97531cdfe9bdd76d492e69800afd97e5930cb0da6a825646667b2c6c6c0211"}, + {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d69858c32f09c3e1ce44b617b3ebba1aba030e777000ebdf72b0d8e365d0b2b3"}, + {file = "orjson-3.10.5-cp312-none-win32.whl", hash = "sha256:64c9cc089f127e5875901ac05e5c25aa13cfa5dbbbd9602bda51e5c611d6e3e2"}, + {file = "orjson-3.10.5-cp312-none-win_amd64.whl", hash = "sha256:b2efbd67feff8c1f7728937c0d7f6ca8c25ec81373dc8db4ef394c1d93d13dc5"}, + {file = "orjson-3.10.5-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:03b565c3b93f5d6e001db48b747d31ea3819b89abf041ee10ac6988886d18e01"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:584c902ec19ab7928fd5add1783c909094cc53f31ac7acfada817b0847975f26"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a35455cc0b0b3a1eaf67224035f5388591ec72b9b6136d66b49a553ce9eb1e6"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1670fe88b116c2745a3a30b0f099b699a02bb3482c2591514baf5433819e4f4d"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185c394ef45b18b9a7d8e8f333606e2e8194a50c6e3c664215aae8cf42c5385e"}, + {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ca0b3a94ac8d3886c9581b9f9de3ce858263865fdaa383fbc31c310b9eac07c9"}, + {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dfc91d4720d48e2a709e9c368d5125b4b5899dced34b5400c3837dadc7d6271b"}, + {file = "orjson-3.10.5-cp38-none-win32.whl", hash = "sha256:c05f16701ab2a4ca146d0bca950af254cb7c02f3c01fca8efbbad82d23b3d9d4"}, + {file = "orjson-3.10.5-cp38-none-win_amd64.whl", hash = "sha256:8a11d459338f96a9aa7f232ba95679fc0c7cedbd1b990d736467894210205c09"}, + {file = "orjson-3.10.5-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:85c89131d7b3218db1b24c4abecea92fd6c7f9fab87441cfc342d3acc725d807"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66215277a230c456f9038d5e2d84778141643207f85336ef8d2a9da26bd7ca"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51bbcdea96cdefa4a9b4461e690c75ad4e33796530d182bdd5c38980202c134a"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbead71dbe65f959b7bd8cf91e0e11d5338033eba34c114f69078d59827ee139"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5df58d206e78c40da118a8c14fc189207fffdcb1f21b3b4c9c0c18e839b5a214"}, + {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c4057c3b511bb8aef605616bd3f1f002a697c7e4da6adf095ca5b84c0fd43595"}, + {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b39e006b00c57125ab974362e740c14a0c6a66ff695bff44615dcf4a70ce2b86"}, + {file = "orjson-3.10.5-cp39-none-win32.whl", hash = "sha256:eded5138cc565a9d618e111c6d5c2547bbdd951114eb822f7f6309e04db0fb47"}, + {file = "orjson-3.10.5-cp39-none-win_amd64.whl", hash = "sha256:cc28e90a7cae7fcba2493953cff61da5a52950e78dc2dacfe931a317ee3d8de7"}, + {file = "orjson-3.10.5.tar.gz", hash = "sha256:7a5baef8a4284405d96c90c7c62b755e9ef1ada84c2406c24a9ebec86b89f46d"}, +] + [[package]] name = "packaging" -version = "23.2" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] @@ -3221,20 +3234,20 @@ wcwidth = "*" [[package]] name = "proto-plus" -version = "1.23.0" +version = "1.24.0" description = "Beautiful, Pythonic protocol buffers." optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "proto-plus-1.23.0.tar.gz", hash = "sha256:89075171ef11988b3fa157f5dbd8b9cf09d65fffee97e29ce403cd8defba19d2"}, - {file = "proto_plus-1.23.0-py3-none-any.whl", hash = "sha256:a829c79e619e1cf632de091013a4173deed13a55f326ef84f05af6f50ff4c82c"}, + {file = "proto-plus-1.24.0.tar.gz", hash = "sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445"}, + {file = "proto_plus-1.24.0-py3-none-any.whl", hash = "sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12"}, ] [package.dependencies] -protobuf = ">=3.19.0,<5.0.0dev" +protobuf = ">=3.19.0,<6.0.0dev" [package.extras] -testing = ["google-api-core[grpc] (>=1.31.5)"] +testing = ["google-api-core (>=1.31.5)"] [[package]] name = "protobuf" @@ -3258,27 +3271,28 @@ files = [ [[package]] name = "psutil" -version = "5.9.8" +version = "6.0.0" description = "Cross-platform lib for process and system monitoring in Python." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, - {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, - {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, - {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, - {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, - {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, - {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, - {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, - {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, - {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"}, + {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"}, + {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"}, + {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"}, + {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"}, + {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"}, + {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"}, + {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"}, + {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"}, + {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"}, ] [package.extras] @@ -4326,64 +4340,64 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.30" +version = "2.0.31" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b48154678e76445c7ded1896715ce05319f74b1e73cf82d4f8b59b46e9c0ddc"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2753743c2afd061bb95a61a51bbb6a1a11ac1c44292fad898f10c9839a7f75b2"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7bfc726d167f425d4c16269a9a10fe8630ff6d14b683d588044dcef2d0f6be7"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f61ada6979223013d9ab83a3ed003ded6959eae37d0d685db2c147e9143797"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a365eda439b7a00732638f11072907c1bc8e351c7665e7e5da91b169af794af"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bba002a9447b291548e8d66fd8c96a6a7ed4f2def0bb155f4f0a1309fd2735d5"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-win32.whl", hash = "sha256:0138c5c16be3600923fa2169532205d18891b28afa817cb49b50e08f62198bb8"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-win_amd64.whl", hash = "sha256:99650e9f4cf3ad0d409fed3eec4f071fadd032e9a5edc7270cd646a26446feeb"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:955991a09f0992c68a499791a753523f50f71a6885531568404fa0f231832aa0"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f69e4c756ee2686767eb80f94c0125c8b0a0b87ede03eacc5c8ae3b54b99dc46"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69c9db1ce00e59e8dd09d7bae852a9add716efdc070a3e2068377e6ff0d6fdaa"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1429a4b0f709f19ff3b0cf13675b2b9bfa8a7e79990003207a011c0db880a13"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:efedba7e13aa9a6c8407c48facfdfa108a5a4128e35f4c68f20c3407e4376aa9"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16863e2b132b761891d6c49f0a0f70030e0bcac4fd208117f6b7e053e68668d0"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-win32.whl", hash = "sha256:2ecabd9ccaa6e914e3dbb2aa46b76dede7eadc8cbf1b8083c94d936bcd5ffb49"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-win_amd64.whl", hash = "sha256:0b3f4c438e37d22b83e640f825ef0f37b95db9aa2d68203f2c9549375d0b2260"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5a79d65395ac5e6b0c2890935bad892eabb911c4aa8e8015067ddb37eea3d56c"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a5baf9267b752390252889f0c802ea13b52dfee5e369527da229189b8bd592e"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cb5a646930c5123f8461f6468901573f334c2c63c795b9af350063a736d0134"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:296230899df0b77dec4eb799bcea6fbe39a43707ce7bb166519c97b583cfcab3"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c62d401223f468eb4da32627bffc0c78ed516b03bb8a34a58be54d618b74d472"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3b69e934f0f2b677ec111b4d83f92dc1a3210a779f69bf905273192cf4ed433e"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-win32.whl", hash = "sha256:77d2edb1f54aff37e3318f611637171e8ec71472f1fdc7348b41dcb226f93d90"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-win_amd64.whl", hash = "sha256:b6c7ec2b1f4969fc19b65b7059ed00497e25f54069407a8701091beb69e591a5"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a8e3b0a7e09e94be7510d1661339d6b52daf202ed2f5b1f9f48ea34ee6f2d57"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b60203c63e8f984df92035610c5fb76d941254cf5d19751faab7d33b21e5ddc0"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1dc3eabd8c0232ee8387fbe03e0a62220a6f089e278b1f0aaf5e2d6210741ad"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:40ad017c672c00b9b663fcfcd5f0864a0a97828e2ee7ab0c140dc84058d194cf"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e42203d8d20dc704604862977b1470a122e4892791fe3ed165f041e4bf447a1b"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-win32.whl", hash = "sha256:2a4f4da89c74435f2bc61878cd08f3646b699e7d2eba97144030d1be44e27584"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-win_amd64.whl", hash = "sha256:b6bf767d14b77f6a18b6982cbbf29d71bede087edae495d11ab358280f304d8e"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc0c53579650a891f9b83fa3cecd4e00218e071d0ba00c4890f5be0c34887ed3"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:311710f9a2ee235f1403537b10c7687214bb1f2b9ebb52702c5aa4a77f0b3af7"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:408f8b0e2c04677e9c93f40eef3ab22f550fecb3011b187f66a096395ff3d9fd"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37a4b4fb0dd4d2669070fb05b8b8824afd0af57587393015baee1cf9890242d9"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a943d297126c9230719c27fcbbeab57ecd5d15b0bd6bfd26e91bfcfe64220621"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a089e218654e740a41388893e090d2e2c22c29028c9d1353feb38638820bbeb"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-win32.whl", hash = "sha256:fa561138a64f949f3e889eb9ab8c58e1504ab351d6cf55259dc4c248eaa19da6"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-win_amd64.whl", hash = "sha256:7d74336c65705b986d12a7e337ba27ab2b9d819993851b140efdf029248e818e"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae8c62fe2480dd61c532ccafdbce9b29dacc126fe8be0d9a927ca3e699b9491a"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2383146973a15435e4717f94c7509982770e3e54974c71f76500a0136f22810b"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8409de825f2c3b62ab15788635ccaec0c881c3f12a8af2b12ae4910a0a9aeef6"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0094c5dc698a5f78d3d1539853e8ecec02516b62b8223c970c86d44e7a80f6c7"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:edc16a50f5e1b7a06a2dcc1f2205b0b961074c123ed17ebda726f376a5ab0953"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f7703c2010355dd28f53deb644a05fc30f796bd8598b43f0ba678878780b6e4c"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-win32.whl", hash = "sha256:1f9a727312ff6ad5248a4367358e2cf7e625e98b1028b1d7ab7b806b7d757513"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-win_amd64.whl", hash = "sha256:a0ef36b28534f2a5771191be6edb44cc2673c7b2edf6deac6562400288664221"}, - {file = "SQLAlchemy-2.0.30-py3-none-any.whl", hash = "sha256:7108d569d3990c71e26a42f60474b4c02c8586c4681af5fd67e51a044fdea86a"}, - {file = "SQLAlchemy-2.0.30.tar.gz", hash = "sha256:2b1708916730f4830bc69d6f49d37f7698b5bd7530aca7f04f785f8849e95255"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f2a213c1b699d3f5768a7272de720387ae0122f1becf0901ed6eaa1abd1baf6c"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9fea3d0884e82d1e33226935dac990b967bef21315cbcc894605db3441347443"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ad7f221d8a69d32d197e5968d798217a4feebe30144986af71ada8c548e9fa"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2bee229715b6366f86a95d497c347c22ddffa2c7c96143b59a2aa5cc9eebbc"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cd5b94d4819c0c89280b7c6109c7b788a576084bf0a480ae17c227b0bc41e109"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:750900a471d39a7eeba57580b11983030517a1f512c2cb287d5ad0fcf3aebd58"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-win32.whl", hash = "sha256:7bd112be780928c7f493c1a192cd8c5fc2a2a7b52b790bc5a84203fb4381c6be"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-win_amd64.whl", hash = "sha256:5a48ac4d359f058474fadc2115f78a5cdac9988d4f99eae44917f36aa1476327"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f68470edd70c3ac3b6cd5c2a22a8daf18415203ca1b036aaeb9b0fb6f54e8298"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e2c38c2a4c5c634fe6c3c58a789712719fa1bf9b9d6ff5ebfce9a9e5b89c1ca"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd15026f77420eb2b324dcb93551ad9c5f22fab2c150c286ef1dc1160f110203"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2196208432deebdfe3b22185d46b08f00ac9d7b01284e168c212919891289396"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:352b2770097f41bff6029b280c0e03b217c2dcaddc40726f8f53ed58d8a85da4"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56d51ae825d20d604583f82c9527d285e9e6d14f9a5516463d9705dab20c3740"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-win32.whl", hash = "sha256:6e2622844551945db81c26a02f27d94145b561f9d4b0c39ce7bfd2fda5776dac"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-win_amd64.whl", hash = "sha256:ccaf1b0c90435b6e430f5dd30a5aede4764942a695552eb3a4ab74ed63c5b8d3"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3b74570d99126992d4b0f91fb87c586a574a5872651185de8297c6f90055ae42"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f77c4f042ad493cb8595e2f503c7a4fe44cd7bd59c7582fd6d78d7e7b8ec52c"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd1591329333daf94467e699e11015d9c944f44c94d2091f4ac493ced0119449"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74afabeeff415e35525bf7a4ecdab015f00e06456166a2eba7590e49f8db940e"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b9c01990d9015df2c6f818aa8f4297d42ee71c9502026bb074e713d496e26b67"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66f63278db425838b3c2b1c596654b31939427016ba030e951b292e32b99553e"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-win32.whl", hash = "sha256:0b0f658414ee4e4b8cbcd4a9bb0fd743c5eeb81fc858ca517217a8013d282c96"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-win_amd64.whl", hash = "sha256:fa4b1af3e619b5b0b435e333f3967612db06351217c58bfb50cee5f003db2a5a"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f43e93057cf52a227eda401251c72b6fbe4756f35fa6bfebb5d73b86881e59b0"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d337bf94052856d1b330d5fcad44582a30c532a2463776e1651bd3294ee7e58b"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c06fb43a51ccdff3b4006aafee9fcf15f63f23c580675f7734245ceb6b6a9e05"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:b6e22630e89f0e8c12332b2b4c282cb01cf4da0d26795b7eae16702a608e7ca1"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:79a40771363c5e9f3a77f0e28b3302801db08040928146e6808b5b7a40749c88"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-win32.whl", hash = "sha256:501ff052229cb79dd4c49c402f6cb03b5a40ae4771efc8bb2bfac9f6c3d3508f"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-win_amd64.whl", hash = "sha256:597fec37c382a5442ffd471f66ce12d07d91b281fd474289356b1a0041bdf31d"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dc6d69f8829712a4fd799d2ac8d79bdeff651c2301b081fd5d3fe697bd5b4ab9"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:23b9fbb2f5dd9e630db70fbe47d963c7779e9c81830869bd7d137c2dc1ad05fb"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a21c97efcbb9f255d5c12a96ae14da873233597dfd00a3a0c4ce5b3e5e79704"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a6a9837589c42b16693cf7bf836f5d42218f44d198f9343dd71d3164ceeeac"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc251477eae03c20fae8db9c1c23ea2ebc47331bcd73927cdcaecd02af98d3c3"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2fd17e3bb8058359fa61248c52c7b09a97cf3c820e54207a50af529876451808"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-win32.whl", hash = "sha256:c76c81c52e1e08f12f4b6a07af2b96b9b15ea67ccdd40ae17019f1c373faa227"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-win_amd64.whl", hash = "sha256:4b600e9a212ed59355813becbcf282cfda5c93678e15c25a0ef896b354423238"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b6cf796d9fcc9b37011d3f9936189b3c8074a02a4ed0c0fbbc126772c31a6d4"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:78fe11dbe37d92667c2c6e74379f75746dc947ee505555a0197cfba9a6d4f1a4"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc47dc6185a83c8100b37acda27658fe4dbd33b7d5e7324111f6521008ab4fe"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a41514c1a779e2aa9a19f67aaadeb5cbddf0b2b508843fcd7bafdf4c6864005"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:afb6dde6c11ea4525318e279cd93c8734b795ac8bb5dda0eedd9ebaca7fa23f1"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3f9faef422cfbb8fd53716cd14ba95e2ef655400235c3dfad1b5f467ba179c8c"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-win32.whl", hash = "sha256:fc6b14e8602f59c6ba893980bea96571dd0ed83d8ebb9c4479d9ed5425d562e9"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-win_amd64.whl", hash = "sha256:3cb8a66b167b033ec72c3812ffc8441d4e9f5f78f5e31e54dcd4c90a4ca5bebc"}, + {file = "SQLAlchemy-2.0.31-py3-none-any.whl", hash = "sha256:69f3e3c08867a8e4856e92d7afb618b95cdee18e0bc1647b77599722c9a28911"}, + {file = "SQLAlchemy-2.0.31.tar.gz", hash = "sha256:b607489dd4a54de56984a0c7656247504bd5523d9d0ba799aef59d4add009484"}, ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "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\""} +greenlet = {version = "!=0.4.17", markers = "python_version < \"3.13\" 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\")"} typing-extensions = ">=4.6.0" [package.extras] @@ -4488,15 +4502,15 @@ widechars = ["wcwidth"] [[package]] name = "tbb" -version = "2021.12.0" +version = "2021.13.0" description = "Intel® oneAPI Threading Building Blocks (oneTBB)" optional = true python-versions = "*" files = [ - {file = "tbb-2021.12.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:f2cc9a7f8ababaa506cbff796ce97c3bf91062ba521e15054394f773375d81d8"}, - {file = "tbb-2021.12.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:a925e9a7c77d3a46ae31c34b0bb7f801c4118e857d137b68f68a8e458fcf2bd7"}, - {file = "tbb-2021.12.0-py3-none-win32.whl", hash = "sha256:b1725b30c174048edc8be70bd43bb95473f396ce895d91151a474d0fa9f450a8"}, - {file = "tbb-2021.12.0-py3-none-win_amd64.whl", hash = "sha256:fc2772d850229f2f3df85f1109c4844c495a2db7433d38200959ee9265b34789"}, + {file = "tbb-2021.13.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:a2567725329639519d46d92a2634cf61e76601dac2f777a05686fea546c4fe4f"}, + {file = "tbb-2021.13.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:aaf667e92849adb012b8874d6393282afc318aca4407fc62f912ee30a22da46a"}, + {file = "tbb-2021.13.0-py3-none-win32.whl", hash = "sha256:6669d26703e9943f6164c6407bd4a237a45007e79b8d3832fe6999576eaaa9ef"}, + {file = "tbb-2021.13.0-py3-none-win_amd64.whl", hash = "sha256:3528a53e4bbe64b07a6112b4c5a00ff3c61924ee46c9c68e004a1ac7ad1f09c3"}, ] [[package]] @@ -5022,21 +5036,6 @@ files = [ {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] -[[package]] -name = "typing-inspect" -version = "0.9.0" -description = "Runtime inspection utilities for typing module." -optional = false -python-versions = "*" -files = [ - {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, - {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, -] - -[package.dependencies] -mypy-extensions = ">=0.3.0" -typing-extensions = ">=3.7.4" - [[package]] name = "tzdata" version = "2024.1" @@ -5364,4 +5363,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "4bee5fd118db71b39719ae0267f7fa3a0211b2d4ae3f18ab3d0ed40f5158ce64" +content-hash = "e6f81f1f5bef19b559e0620be9840eb7a57e0ffad86c9c5aeead2ff2a3c84e39" diff --git a/pyproject.toml b/pyproject.toml index cf0191927..87e36a34e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ packages = [{include = "sotopia"}] python = ">=3.10, <3.13" lxml = ">=4.9.3,<6.0.0" openai = "^1.11.0" -langchain = "0.1.5" +langchain = "~0.2.5" rich = "^13.6.0" PettingZoo = "1.24.3" redis-om = "^0.2.1" @@ -21,7 +21,7 @@ absl-py = "^2.0.0" together = "^0.2.4" pydantic = "1.10.12" beartype = "^0.14.0" -langchain-openai = ">=0.0.5,<0.0.7" +langchain-openai = "~0.1.8" litellm = "~1.23.12" # dependency versions for extras diff --git a/sotopia/agents/__init__.py b/sotopia/agents/__init__.py index 53794cad8..0abc3038e 100644 --- a/sotopia/agents/__init__.py +++ b/sotopia/agents/__init__.py @@ -8,7 +8,6 @@ HumanAgent, LLMAgent, ScriptWritingAgent, - SpeakAgent, ) from .redis_agent import RedisAgent @@ -17,7 +16,6 @@ "LLMAgent", "Agents", "HumanAgent", - "SpeakAgent", "generate_background", "generate_background_conversation", "RedisAgent", diff --git a/sotopia/agents/generate_agent_background.py b/sotopia/agents/generate_agent_background.py index 231639d23..ede46a0ec 100644 --- a/sotopia/agents/generate_agent_background.py +++ b/sotopia/agents/generate_agent_background.py @@ -2,14 +2,11 @@ import os from typing import Callable -from sotopia.generation_utils.generate import ( - convert_narratives, - generate_init_profile, -) +from sotopia.generation_utils.generate import convert_narratives, agenerate_init_profile from sotopia.messages import Message, ScriptBackground -def generate_background( +async def generate_background( info_json_file: str, basic_info: dict[str, str] ) -> tuple[str, str, str, str, list[dict[str, str]]]: if os.path.isfile(info_json_file): @@ -22,7 +19,7 @@ def generate_background( previous_messages = info_dict["messages"] else: initial_profile = str(basic_info) - profile = generate_init_profile( + profile = await agenerate_init_profile( model_name="gpt-3.5-turbo", basic_info=basic_info ) first_narrative = convert_narratives( diff --git a/sotopia/agents/llm_agent.py b/sotopia/agents/llm_agent.py index 045336ee6..7779ab97a 100644 --- a/sotopia/agents/llm_agent.py +++ b/sotopia/agents/llm_agent.py @@ -1,16 +1,14 @@ import asyncio from concurrent.futures import ThreadPoolExecutor -from typing import Callable, cast +from typing import cast from sotopia.agents import BaseAgent from sotopia.database import AgentProfile from sotopia.generation_utils.generate import ( LLM_Name, agenerate_action, + agenerate_goal, agenerate_script, - generate_action, - generate_action_speak, - generate_goal, ) from sotopia.messages import AgentAction, Observation from sotopia.messages.message_classes import ScriptBackground @@ -44,16 +42,8 @@ def __init__( def goal(self) -> str: if self._goal is not None: return self._goal - assert ( - len(self.inbox) > 0 - ), "attribute goal has to be called after at least one step" - goal = generate_goal( - self.model_name, - background=self.inbox[0][ - 1 - ].to_natural_language(), # Only consider the first message for now - ) - return goal + else: + raise Exception("Goal is not set.") @goal.setter def goal(self, goal: str) -> None: @@ -61,31 +51,25 @@ def goal(self, goal: str) -> None: def act( self, - obs: Observation, - gen_func: Callable[..., AgentAction] = generate_action, + _obs: Observation, ) -> AgentAction: + raise Exception("Sync act method is deprecated. Use aact instead.") + + async def aact(self, obs: Observation) -> AgentAction: self.recv_message("Environment", obs) - if len(obs.available_actions) == 1 and "none" in obs.available_actions: - return AgentAction(action_type="none", argument="") - else: - action = gen_func( + if self._goal is None: + self._goal = await agenerate_goal( self.model_name, - history="\n".join(f"{y.to_natural_language()}" for x, y in self.inbox), - turn_number=obs.turn_number, - action_types=obs.available_actions, - agent=self.agent_name, - goal=self.goal, + background=self.inbox[0][ + 1 + ].to_natural_language(), # Only consider the first message for now ) - return action - - async def aact(self, obs: Observation) -> AgentAction: - self.recv_message("Environment", obs) if len(obs.available_actions) == 1 and "none" in obs.available_actions: return AgentAction(action_type="none", argument="") else: - action, prompt = await agenerate_action( + action = await agenerate_action( self.model_name, history="\n".join(f"{y.to_natural_language()}" for x, y in self.inbox), turn_number=obs.turn_number, @@ -147,15 +131,6 @@ async def aact(self, obs: Observation) -> AgentAction: return returned_action -class SpeakAgent(LLMAgent): - def act( - self, - obs: Observation, - gen_func: Callable[..., AgentAction] = generate_action_speak, - ) -> AgentAction: - return super().act(obs, gen_func=gen_func) - - class HumanAgent(BaseAgent[Observation, AgentAction]): """ A human agent that takes input from the command line. diff --git a/sotopia/envs/evaluators.py b/sotopia/envs/evaluators.py index d3a9b5ab3..01d1cc4a8 100644 --- a/sotopia/envs/evaluators.py +++ b/sotopia/envs/evaluators.py @@ -273,7 +273,7 @@ async def __acall__( response: ( EnvResponsePlus | EnvResponse ) # fix type error from langchain 0.0.264. we don't need this line for langchain 0.0.263 - response, prompt = await agenerate( + response = await agenerate( model_name=self.model_name, template="""{history}, Based on previous interactions, evaluate how well participants achieve their goals. @@ -286,7 +286,6 @@ async def __acall__( ), temperature=temperature, ) - self.prompt = prompt response_list = [] # TODO: multiple agents for dimension in response.agent_1_evaluation.dict().keys(): diff --git a/sotopia/generation_utils/__init__.py b/sotopia/generation_utils/__init__.py index c5fb65099..91ccaccc9 100644 --- a/sotopia/generation_utils/__init__.py +++ b/sotopia/generation_utils/__init__.py @@ -2,14 +2,21 @@ EnvResponse, LLM_Name, agenerate_env_profile, - fill_in_background, - generate_goal, + agenerate, + agenerate_action, +) + +from .sync import ( + generate, + generate_action, ) __all__ = [ "EnvResponse", "agenerate_env_profile", "LLM_Name", - "fill_in_background", - "generate_goal", + "agenerate", + "agenerate_action", + "generate", + "generate_action", ] diff --git a/sotopia/generation_utils/generate.py b/sotopia/generation_utils/generate.py index c256a86c2..39a0d1548 100644 --- a/sotopia/generation_utils/generate.py +++ b/sotopia/generation_utils/generate.py @@ -1,7 +1,7 @@ import logging import os import re -from typing import Any, TypeVar +from typing import TypeVar import gin from beartype import beartype @@ -14,7 +14,6 @@ PromptTemplate, ) from langchain.schema import BaseOutputParser, OutputParserException -from langchain_community.chat_models import ChatLiteLLM from langchain_openai import ChatOpenAI from pydantic import BaseModel, Field from rich import print @@ -52,31 +51,6 @@ OutputType = TypeVar("OutputType", bound=object) -class PatchedChatLiteLLM(ChatLiteLLM): - max_tokens: int | None = None # type: ignore - - @property - def _default_params(self) -> dict[str, Any]: - """Get the default parameters for calling OpenAI API.""" - set_model_value = self.model - if self.model_name is not None: - set_model_value = self.model_name - - params = { - "model": set_model_value, - "force_timeout": self.request_timeout, - "stream": self.streaming, - "n": self.n, - "temperature": self.temperature, - "custom_llm_provider": self.custom_llm_provider, - **self.model_kwargs, - } - if self.max_tokens is not None: - params["max_tokens"] = self.max_tokens - - return params - - class EnvResponse(BaseModel): reasoning: str = Field( description="first reiterate agents' social goals and then reason about what agents say/do and whether that aligns with their goals." @@ -439,47 +413,6 @@ def format_bad_output( return reformat -@beartype -def generate( - model_name: str, - template: str, - input_values: dict[str, str], - output_parser: BaseOutputParser[OutputType], - temperature: float = 0.7, -) -> OutputType: - input_variables = re.findall(r"{(.*?)}", template) - assert ( - set(input_variables) == set(list(input_values.keys()) + ["format_instructions"]) - or set(input_variables) == set(list(input_values.keys())) - ), f"The variables in the template must match input_values except for format_instructions. Got {sorted(input_values.keys())}, expect {sorted(input_variables)}" - # process template - template = format_docstring(template) - chain = obtain_chain( - model_name=model_name, - template=template, - input_variables=input_variables, - temperature=temperature, - ) - if "format_instructions" not in input_values: - input_values["format_instructions"] = output_parser.get_format_instructions() - result = chain.predict([logging_handler], **input_values) - try: - parsed_result = output_parser.parse(result) - except KeyboardInterrupt: - raise KeyboardInterrupt - except Exception as e: - log.debug( - f"[red] Failed to parse result: {result}\nEncounter Exception {e}\nstart to reparse", - extra={"markup": True}, - ) - reformat_parsed_result = format_bad_output( - result, format_instructions=output_parser.get_format_instructions() - ) - parsed_result = output_parser.parse(reformat_parsed_result) - log.info(f"Generated result: {parsed_result}") - return parsed_result - - @gin.configurable @beartype async def agenerate( @@ -488,7 +421,7 @@ async def agenerate( input_values: dict[str, str], output_parser: BaseOutputParser[OutputType], temperature: float = 0.7, -) -> tuple[OutputType, str]: +) -> OutputType: input_variables = re.findall(r"{(.*?)}", template) assert ( set(input_variables) == set(list(input_values.keys()) + ["format_instructions"]) @@ -505,7 +438,6 @@ async def agenerate( if "format_instructions" not in input_values: input_values["format_instructions"] = output_parser.get_format_instructions() result = await chain.apredict([logging_handler], **input_values) - prompt = logging_handler.retrive_prompt() try: parsed_result = output_parser.parse(result) except Exception as e: @@ -520,36 +452,7 @@ async def agenerate( ) parsed_result = output_parser.parse(reformat_parsed_result) log.info(f"Generated result: {parsed_result}") - return parsed_result, prompt - - -# deprecated function -@beartype -def generate_episode( - model_name: str, - participants: str = "Jack (a greedy person), Rose", - topic: str = "lawsuit", - extra_info: str = "", -) -> EnvResponse: - """ - Using langchain to generate an example episode - """ - return generate( - model_name=model_name, - template=""" - Please generate a episode for the interaction between {participants} regarding {topic}. - You should generate the personal backgrounds and goals in this interaction. - Use the following extra info if given: {extra_info} - Please use the following format: - {format_instructions} - """, - input_values=dict( - participants=participants, - topic=topic, - extra_info=extra_info, - ), - output_parser=EnvResponsePydanticOutputParser(), - ) + return parsed_result @gin.configurable @@ -630,114 +533,6 @@ async def agenerate_enviroment_profile( ) -@beartype -def fill_in_background( - model_name: str, - partial_background: ScriptBackground, -) -> ScriptBackground: - """ - Fill in the missing information of the background - """ - return generate( - model_name=model_name, - template="""Please fill in all missing information of the given background, don't leave any tag: - {partial_background} - Please use the following format: - {format_instructions} - """, - input_values=dict( - partial_background=partial_background.to_natural_language(), - ), - output_parser=PydanticOutputParser(pydantic_object=ScriptBackground), - ) - - -@beartype -def generate_action( - model_name: str, - history: str, - turn_number: int, - action_types: list[ActionType], - agent: str, - goal: str, -) -> AgentAction: - """ - Using langchain to generate an example episode - """ - try: - return generate( - model_name=model_name, - template=""" - Imagine you are {agent}, your task is to act/speak like {agent} with {agent}'s social goal in mind. - You can find {agent}'s background and goal in the following history: - {history} - You are at Turn #{turn_number}. Your available action types are - {action_list}. - Note: You can "leave" this conversation if 1. this conversation makes you uncomfortable, 2. you find it uninteresting/you lose your patience, 3. you have achieved your social goals, 4. or for other reasons you want to leave. - - Please only generate a JSON string including the action type and the argument. - Your action should follow the given format: - {format_instructions} - """, - input_values=dict( - agent=agent, - turn_number=str(turn_number), - history=history, - action_list=" ".join(action_types), - ), - output_parser=PydanticOutputParser(pydantic_object=AgentAction), - ) - except KeyboardInterrupt: - raise KeyboardInterrupt - except Exception: - return AgentAction(action_type="none", argument="") - - -@beartype -def generate_action_speak( - model_name: str, - history: str, - turn_number: int, - action_types: list[ActionType], - agent: str, - goal: str, -) -> AgentAction: - """ - Using langchain to generate the action but only speak action is allowed - """ - try: - utterance = generate( - model_name=model_name, - template=""" - You are {agent}. - {history} - - You are at Turn #{turn_number}. Your available action type is speak. - Your goal is: {goal} - Follow the given format: - {agent} said: - should not include any quotation marks, "Turn #", or etc. - """, - input_values=dict( - agent=agent, - turn_number=str(turn_number), - history=history, - goal=goal, - ), - output_parser=StrOutputParser(), - ) - # delete the first line - utterance = utterance.replace(f"{agent} said:", "") - utterance = utterance.replace(f"Turn #{turn_number}:", "") - utterance = utterance.strip() - utterance = utterance.replace('"', "") - return AgentAction(action_type="speak", argument=utterance) - except KeyboardInterrupt: - raise KeyboardInterrupt - except Exception: - return AgentAction(action_type="none", argument="") - - @gin.configurable @beartype async def agenerate_action( @@ -749,7 +544,7 @@ async def agenerate_action( goal: str, temperature: float = 0.7, script_like: bool = False, -) -> tuple[AgentAction, str]: +) -> AgentAction: """ Using langchain to generate an example episode """ @@ -800,7 +595,7 @@ async def agenerate_action( temperature=temperature, ) except Exception: - return AgentAction(action_type="none", argument=""), "" + return AgentAction(action_type="none", argument="") @gin.configurable @@ -840,7 +635,7 @@ async def agenerate_script( history=history, agent=agent_name, ), - output_parser=ScriptOutputParser( + output_parser=ScriptOutputParser( # type: ignore[arg-type] agent_names=agent_names, background=background.to_natural_language(), single_turn=True, @@ -862,7 +657,7 @@ async def agenerate_script( input_values=dict( background=background.to_natural_language(), ), - output_parser=ScriptOutputParser( + output_parser=ScriptOutputParser( # type: ignore[arg-type] agent_names=agent_names, background=background.to_natural_language(), single_turn=False, @@ -896,11 +691,11 @@ def process_history( @beartype -def generate_init_profile(model_name: str, basic_info: dict[str, str]) -> str: +async def agenerate_init_profile(model_name: str, basic_info: dict[str, str]) -> str: """ Using langchain to generate the background """ - return generate( + return await agenerate( model_name=model_name, template="""Please expand a fictional background for {name}. Here is the basic information: {name}'s age: {age} @@ -934,9 +729,9 @@ def generate_init_profile(model_name: str, basic_info: dict[str, str]) -> str: @beartype -def convert_narratives(model_name: str, narrative: str, text: str) -> str: +async def convert_narratives(model_name: str, narrative: str, text: str) -> str: if narrative == "first": - return generate( + return await agenerate( model_name=model_name, template="""Please convert the following text into a first-person narrative. e.g, replace name, he, she, him, her, his, and hers with I, me, my, and mine. @@ -945,7 +740,7 @@ def convert_narratives(model_name: str, narrative: str, text: str) -> str: output_parser=StrOutputParser(), ) elif narrative == "second": - return generate( + return await agenerate( model_name=model_name, template="""Please convert the following text into a second-person narrative. e.g, replace name, he, she, him, her, his, and hers with you, your, and yours. @@ -958,11 +753,11 @@ def convert_narratives(model_name: str, narrative: str, text: str) -> str: @beartype -def generate_goal(model_name: str, background: str) -> str: +async def agenerate_goal(model_name: str, background: str) -> str: """ Using langchain to generate the background """ - return generate( + return await agenerate( model_name=model_name, template="""Please generate your goal based on the background: {background} diff --git a/sotopia/generation_utils/sync.py b/sotopia/generation_utils/sync.py new file mode 100644 index 000000000..a2ca63379 --- /dev/null +++ b/sotopia/generation_utils/sync.py @@ -0,0 +1,29 @@ +import asyncio +from concurrent.futures import ThreadPoolExecutor +from functools import wraps +from .generate import agenerate, agenerate_action + +from typing import Awaitable, Callable, ParamSpec, TypeVar + +P = ParamSpec("P") +T = TypeVar("T") + + +def async_to_sync(async_func: Callable[P, Awaitable[T]]) -> Callable[P, T]: + @wraps(async_func) + def wrapper(*args: P.args, **kwargs: P.kwargs) -> T: + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + with ThreadPoolExecutor() as executor: + future = executor.submit( + loop.run_until_complete, async_func(*args, **kwargs) + ) + result = future.result() + loop.close() + return result + + return wrapper + + +generate = async_to_sync(agenerate) +generate_action = async_to_sync(agenerate_action) diff --git a/sotopia/server.py b/sotopia/server.py index 01421f520..732cf16a2 100644 --- a/sotopia/server.py +++ b/sotopia/server.py @@ -13,7 +13,6 @@ LLMAgent, RedisAgent, ScriptWritingAgent, - SpeakAgent, ) from sotopia.agents.base_agent import BaseAgent from sotopia.database import EpisodeLog @@ -67,7 +66,9 @@ def run_sync_server( if agent_model == "human": agents[agent_name] = HumanAgent(agent_name) elif mode == "speak": - agents[agent_name] = SpeakAgent(agent_name, model_name=agent_model) + raise NotImplementedError( + "Deprecated. The original Speaker Agent is not implemented in the async context." + ) else: agents[agent_name] = LLMAgent(agent_name, model_name=agent_model) agents.reset() diff --git a/tests/generation_utils/test_generation.py b/tests/generation_utils/test_generation.py index 511b743fc..b0212a07d 100644 --- a/tests/generation_utils/test_generation.py +++ b/tests/generation_utils/test_generation.py @@ -3,34 +3,16 @@ from sotopia.generation_utils.generate import ( ListOfIntOutputParser, agenerate, - generate, ) -def test_generate_list_integer() -> None: - """ - Test that the integer generator works - """ - length, lower, upper = 5, -10, 10 - list_of_int = generate( - "gpt-3.5-turbo", - "{format_instructions}", - {}, - ListOfIntOutputParser(length, (lower, upper)), - ) - assert isinstance(list_of_int, list) - assert len(list_of_int) == length - assert all(isinstance(i, int) for i in list_of_int) - assert all(lower <= i <= upper for i in list_of_int) - - @pytest.mark.asyncio async def test_agenerate_list_integer() -> None: """ async version of test_generate_list_integer """ length, lower, upper = 5, -10, 10 - list_of_int, _ = await agenerate( + list_of_int = await agenerate( "gpt-3.5-turbo", "{format_instructions}", {}, @@ -49,7 +31,7 @@ async def test_agenerate_list_integer_together() -> None: async version of test_generate_list_integer """ length, lower, upper = 5, -10, 10 - list_of_int, _ = await agenerate( + list_of_int = await agenerate( "togethercomputer/llama-2-70b-chat", "{format_instructions}", {}, From 5818a890f9098fe18a13b3c05e214acdf8c536b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 18:01:45 -0400 Subject: [PATCH 8/9] Bump fastapi from 0.109.2 to 0.110.3 (#121) Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.109.2 to 0.110.3. - [Release notes](https://github.com/tiangolo/fastapi/releases) - [Commits](https://github.com/tiangolo/fastapi/compare/0.109.2...0.110.3) --- updated-dependencies: - dependency-name: fastapi dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 19 ++++++++++--------- pyproject.toml | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/poetry.lock b/poetry.lock index d0b2492a5..164acad5d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -840,22 +840,22 @@ files = [ [[package]] name = "fastapi" -version = "0.109.2" +version = "0.110.3" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = true python-versions = ">=3.8" files = [ - {file = "fastapi-0.109.2-py3-none-any.whl", hash = "sha256:2c9bab24667293b501cad8dd388c05240c850b58ec5876ee3283c47d6e1e3a4d"}, - {file = "fastapi-0.109.2.tar.gz", hash = "sha256:f3817eac96fe4f65a2ebb4baa000f394e55f5fccdaf7f75250804bc58f354f73"}, + {file = "fastapi-0.110.3-py3-none-any.whl", hash = "sha256:fd7600612f755e4050beb74001310b5a7e1796d149c2ee363124abdfa0289d32"}, + {file = "fastapi-0.110.3.tar.gz", hash = "sha256:555700b0159379e94fdbfc6bb66a0f1c43f4cf7060f25239af3d84b63a656626"}, ] [package.dependencies] pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.36.3,<0.37.0" +starlette = ">=0.37.2,<0.38.0" typing-extensions = ">=4.8.0" [package.extras] -all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] [[package]] name = "fastavro" @@ -2924,6 +2924,7 @@ description = "Nvidia JIT LTO Library" optional = true python-versions = ">=3" files = [ + {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-manylinux2014_aarch64.whl", hash = "sha256:004186d5ea6a57758fd6d57052a123c73a4815adf365eb8dd6a85c9eaa7535ff"}, {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d9714f27c1d0f0895cd8915c07a87a1d0029a0aa36acaf9156952ec2a8a12189"}, {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-win_amd64.whl", hash = "sha256:c3401dc8543b52d3a8158007a0c1ab4e9c768fcbd24153a48c86972102197ddd"}, ] @@ -4457,13 +4458,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "starlette" -version = "0.36.3" +version = "0.37.2" description = "The little ASGI library that shines." optional = true python-versions = ">=3.8" files = [ - {file = "starlette-0.36.3-py3-none-any.whl", hash = "sha256:13d429aa93a61dc40bf503e8c801db1f1bca3dc706b10ef2434a36123568f044"}, - {file = "starlette-0.36.3.tar.gz", hash = "sha256:90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080"}, + {file = "starlette-0.37.2-py3-none-any.whl", hash = "sha256:6fe59f29268538e5d0d182f2791a479a0c64638e6935d1c6989e63fb2699c6ee"}, + {file = "starlette-0.37.2.tar.gz", hash = "sha256:9af890290133b79fc3db55474ade20f6220a364a0402e0b556e7cd5e1e093823"}, ] [package.dependencies] @@ -5363,4 +5364,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "e6f81f1f5bef19b559e0620be9840eb7a57e0ffad86c9c5aeead2ff2a3c84e39" +content-hash = "2e9659e693e36195206a24d640372e1c8593259337195e6025788f322e21eec6" diff --git a/pyproject.toml b/pyproject.toml index 87e36a34e..45ca72440 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ langchain-openai = "~0.1.8" litellm = "~1.23.12" # dependency versions for extras -fastapi = { version = "^0.109.2", optional = true } +fastapi = { version = ">=0.109.2,<0.111.0", optional = true } tabulate = { version = "^0.9.0", optional = true } anthropic = { version = ">=0.26,<0.29", optional = true } xmltodict = { version = "^0.13.0", optional = true } From 701f2a8120123829f4390a9a5ff5fa3f43a7ad06 Mon Sep 17 00:00:00 2001 From: Hao Zhu Date: Wed, 26 Jun 2024 13:36:26 -0400 Subject: [PATCH 9/9] Setup everything for sotopia in one script (#122) * git ignore * add nextra site * change path to docs * Add installation instruction (#76) * fix an accordion bug * Add tabs for choosing platform in Redis Instructions * add platform tab * updated open in colab instruction * add agents.md/environments.md rename all_the_issues to troubleshooting * add auto set script * add more dataset choices * adding download data menu and protection when the path exists * Unify benchmark and install into `sotopia` cli command * move install and benchmark in to folders * make flow more rigorious and add tests * update linux direction * add restart directions * remove _renderer * add use docker test * call -> run * add shell=True * mkdir when the dirctory doesn't exist * remove docker test due to memory limit * add prompt mocking * add install cli * add a sleep to make sure that the redis is launched before stopping * add matrix os in pytest * add poetry to path on macos * Use install poetry action * make redis directory on mac * avoid permission issue on mac * update macos test * test docker * install docker with brew * set up docker * give up testing docker on mac * check if docker daemon is up and brew update * improve prompts * update prompt tests --------- Co-authored-by: XuhuiZhou Co-authored-by: Ruiyi Wang --- .github/workflows/tests.yml | 14 +- .gitignore | 2 + README.md | 4 +- docs/pages/_meta.json | 8 + docs/pages/agents.md | 0 docs/pages/environments.md | 0 docs/pages/index.mdx | 2 +- .../{all_the_issues.md => troubleshooting.md} | 2 +- poetry.lock | 573 ++++++++++-------- pyproject.toml | 5 +- sotopia/benchmark/__init__.py | 3 - sotopia/cli/__init__.py | 5 + sotopia/cli/app.py | 3 + sotopia/cli/benchmark/__init__.py | 3 + .../cli.py => cli/benchmark/benchmark.py} | 9 +- sotopia/cli/install/__init__.py | 3 + sotopia/cli/install/install.py | 407 +++++++++++++ sotopia/cli/install/menu.py | 115 ++++ sotopia/cli/install/published_datasets.json | 28 + sotopia/cli/rich_pixels/__init__.py | 9 + sotopia/cli/rich_pixels/_pixel.py | 52 ++ tests/cli/test_install.py | 56 ++ 22 files changed, 1017 insertions(+), 286 deletions(-) create mode 100644 docs/pages/agents.md create mode 100644 docs/pages/environments.md rename docs/pages/{all_the_issues.md => troubleshooting.md} (99%) delete mode 100644 sotopia/benchmark/__init__.py create mode 100644 sotopia/cli/__init__.py create mode 100644 sotopia/cli/app.py create mode 100644 sotopia/cli/benchmark/__init__.py rename sotopia/{benchmark/cli.py => cli/benchmark/benchmark.py} (99%) create mode 100644 sotopia/cli/install/__init__.py create mode 100644 sotopia/cli/install/install.py create mode 100644 sotopia/cli/install/menu.py create mode 100644 sotopia/cli/install/published_datasets.json create mode 100644 sotopia/cli/rich_pixels/__init__.py create mode 100644 sotopia/cli/rich_pixels/_pixel.py create mode 100644 tests/cli/test_install.py diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 46eb36c8f..36d4c2e51 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,19 +17,27 @@ on: jobs: Pytest: - runs-on: ubuntu-latest strategy: max-parallel: 5 + matrix: + os: [ubuntu-latest, macos-13] + + runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python 3.11 uses: actions/setup-python@v4 with: python-version: 3.11.2 + - name: Set up Docker + if: runner.os == 'ubuntu-latest' + uses: docker-practice/actions-setup-docker@master + timeout-minutes: 12 + - name: Install Poetry + uses: abatilo/actions-poetry@v2 - name: Install dependencies run: | - curl -sSL https://install.python-poetry.org | python3 poetry lock poetry install --with test -E chat - name: Test with pytest diff --git a/.gitignore b/.gitignore index 91991f7c0..757851f77 100644 --- a/.gitignore +++ b/.gitignore @@ -161,3 +161,5 @@ backup/* node_modules/* docs/.next/* docs/node_modules/* + +redis-data/* diff --git a/README.md b/README.md index a115d1d8a..511bd2a0e 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ For some experiments, TogetherAI key is required to run the code. Please set the conda env config vars set TOGETHER_API_KEY=your_key ``` -A redis-stack server is required to run the code. Please follow the [instruction](https://redis.io/docs/stack/get-started/install/docker/) to start a redis-stack server or use an existing server. You can also check [Q&A](/docs/all_the_issues.md) to initiate the redis server with the Sotopia data. +A redis-stack server is required to run the code. Please follow the [instruction](https://redis.io/docs/stack/get-started/install/docker/) to start a redis-stack server or use an existing server. You can also check [Q&A](/docs/troubleshooting.md) to initiate the redis server with the Sotopia data. The `REDIS_OM_URL` need to be set before loading and saving agents: ```bash @@ -156,7 +156,7 @@ To run a large batch of environments, you can change the `ENV_IDS` parameter in ## Getting access to your simulation After running experiments, you can go to the `examples/redis_stats.ipynb` notebook to check the existing episodes (Episode Log section), as well as calculate the performance. -For the original Sotopia simulation in our paper's experiments, you can find how to get them in the [Q&A](/docs/all_the_issues.md) section in the `./docs` folder. +For the original Sotopia simulation in our paper's experiments, you can find how to get them in the [Q&A](/docs/troubleshooting.md) section in the `./docs` folder. ## Adding new characters and environments You can use the following function with the `**kwargs` being the properties of the `AgentProfile` class. This is the same for the scenarios/environments. diff --git a/docs/pages/_meta.json b/docs/pages/_meta.json index 0d5395957..f96af59dc 100644 --- a/docs/pages/_meta.json +++ b/docs/pages/_meta.json @@ -7,6 +7,14 @@ "title": "Documentation", "type": "menu", "items": { + "agents": { + "title": "Agents", + "href": "/agents" + }, + "environments": { + "title": "Environments", + "href": "/environments" + }, "examples": { "title": "Examples", "href": "/examples" diff --git a/docs/pages/agents.md b/docs/pages/agents.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/environments.md b/docs/pages/environments.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx index 94c082c06..159b837b7 100644 --- a/docs/pages/index.mdx +++ b/docs/pages/index.mdx @@ -107,7 +107,7 @@ Redis stack is a required dependency for using Sotopia. There are two ways to se Docker is my thing. - Please follow the [instruction](https://redis.io/docs/stack/get-started/install/docker/) to start a redis-stack server or use an existing server. You can also check [Q&A](/docs/all_the_issues.md) to initiate the redis server with the Sotopia data. + Please follow the [instruction](https://redis.io/docs/stack/get-started/install/docker/) to start a redis-stack server or use an existing server. You can also check [Q&A](/docs/troubleshooting.md) to initiate the redis server with the Sotopia data. The `REDIS_OM_URL` need to be set before loading and saving agents: ```bash diff --git a/docs/pages/all_the_issues.md b/docs/pages/troubleshooting.md similarity index 99% rename from docs/pages/all_the_issues.md rename to docs/pages/troubleshooting.md index 9937dab19..db3fecc5c 100644 --- a/docs/pages/all_the_issues.md +++ b/docs/pages/troubleshooting.md @@ -1,4 +1,4 @@ -# Q&A +# Troubleshooting ## Missing episodes Large batch size may cause some episodes to be skipped. This is due to the fact that the server may not be able to handle the load. Try reducing the batch size. But you can also use the script in `examples/fix_missing_episodes.py` to fix the missing episodes. diff --git a/poetry.lock b/poetry.lock index 164acad5d..6f23f1e1d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -247,17 +247,17 @@ test-tox-coverage = ["coverage (>=5.5)"] [[package]] name = "boto3" -version = "1.34.130" +version = "1.34.133" description = "The AWS SDK for Python" optional = true python-versions = ">=3.8" files = [ - {file = "boto3-1.34.130-py3-none-any.whl", hash = "sha256:c163fb7135a94e7b8c8c478a44071c843f05e212fa4bec3105f8a437ecbf1bcb"}, - {file = "boto3-1.34.130.tar.gz", hash = "sha256:b781d267dd5e7583966e05697f6bd45e2f46c01dc619ba0860b042963ee69296"}, + {file = "boto3-1.34.133-py3-none-any.whl", hash = "sha256:da7e78c03270be872ad78301892396ffea56647efcb2c3a8621ef46a905541ab"}, + {file = "boto3-1.34.133.tar.gz", hash = "sha256:7071f8ce1f09113ca5630860fd590464e6325a4df55faae83c956225941016fc"}, ] [package.dependencies] -botocore = ">=1.34.130,<1.35.0" +botocore = ">=1.34.133,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -266,13 +266,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.130" +version = "1.34.133" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.8" files = [ - {file = "botocore-1.34.130-py3-none-any.whl", hash = "sha256:a3b36e9dac1ed31c4cb3a5c5e540a7d8a9b90ff1d17f87734e674154b41776d8"}, - {file = "botocore-1.34.130.tar.gz", hash = "sha256:a242b3b0a836b14f308a309565cd63e88654cec238f9b73abbbd3c0526db4c81"}, + {file = "botocore-1.34.133-py3-none-any.whl", hash = "sha256:f269dad8e17432d2527b97ed9f1fd30ec8dc705f8b818957170d1af484680ef2"}, + {file = "botocore-1.34.133.tar.gz", hash = "sha256:5ea609aa4831a6589e32eef052a359ad8d7311733b4d86a9d35dab4bd3ec80ff"}, ] [package.dependencies] @@ -557,63 +557,63 @@ test = ["pytest"] [[package]] name = "coverage" -version = "7.5.3" +version = "7.5.4" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a6519d917abb15e12380406d721e37613e2a67d166f9fb7e5a8ce0375744cd45"}, - {file = "coverage-7.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aea7da970f1feccf48be7335f8b2ca64baf9b589d79e05b9397a06696ce1a1ec"}, - {file = "coverage-7.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:923b7b1c717bd0f0f92d862d1ff51d9b2b55dbbd133e05680204465f454bb286"}, - {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62bda40da1e68898186f274f832ef3e759ce929da9a9fd9fcf265956de269dbc"}, - {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8b7339180d00de83e930358223c617cc343dd08e1aa5ec7b06c3a121aec4e1d"}, - {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:25a5caf742c6195e08002d3b6c2dd6947e50efc5fc2c2205f61ecb47592d2d83"}, - {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:05ac5f60faa0c704c0f7e6a5cbfd6f02101ed05e0aee4d2822637a9e672c998d"}, - {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:239a4e75e09c2b12ea478d28815acf83334d32e722e7433471fbf641c606344c"}, - {file = "coverage-7.5.3-cp310-cp310-win32.whl", hash = "sha256:a5812840d1d00eafae6585aba38021f90a705a25b8216ec7f66aebe5b619fb84"}, - {file = "coverage-7.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:33ca90a0eb29225f195e30684ba4a6db05dbef03c2ccd50b9077714c48153cac"}, - {file = "coverage-7.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f81bc26d609bf0fbc622c7122ba6307993c83c795d2d6f6f6fd8c000a770d974"}, - {file = "coverage-7.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7cec2af81f9e7569280822be68bd57e51b86d42e59ea30d10ebdbb22d2cb7232"}, - {file = "coverage-7.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55f689f846661e3f26efa535071775d0483388a1ccfab899df72924805e9e7cd"}, - {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50084d3516aa263791198913a17354bd1dc627d3c1639209640b9cac3fef5807"}, - {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:341dd8f61c26337c37988345ca5c8ccabeff33093a26953a1ac72e7d0103c4fb"}, - {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ab0b028165eea880af12f66086694768f2c3139b2c31ad5e032c8edbafca6ffc"}, - {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5bc5a8c87714b0c67cfeb4c7caa82b2d71e8864d1a46aa990b5588fa953673b8"}, - {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38a3b98dae8a7c9057bd91fbf3415c05e700a5114c5f1b5b0ea5f8f429ba6614"}, - {file = "coverage-7.5.3-cp311-cp311-win32.whl", hash = "sha256:fcf7d1d6f5da887ca04302db8e0e0cf56ce9a5e05f202720e49b3e8157ddb9a9"}, - {file = "coverage-7.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:8c836309931839cca658a78a888dab9676b5c988d0dd34ca247f5f3e679f4e7a"}, - {file = "coverage-7.5.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:296a7d9bbc598e8744c00f7a6cecf1da9b30ae9ad51c566291ff1314e6cbbed8"}, - {file = "coverage-7.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34d6d21d8795a97b14d503dcaf74226ae51eb1f2bd41015d3ef332a24d0a17b3"}, - {file = "coverage-7.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e317953bb4c074c06c798a11dbdd2cf9979dbcaa8ccc0fa4701d80042d4ebf1"}, - {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:705f3d7c2b098c40f5b81790a5fedb274113373d4d1a69e65f8b68b0cc26f6db"}, - {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1196e13c45e327d6cd0b6e471530a1882f1017eb83c6229fc613cd1a11b53cd"}, - {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:015eddc5ccd5364dcb902eaecf9515636806fa1e0d5bef5769d06d0f31b54523"}, - {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fd27d8b49e574e50caa65196d908f80e4dff64d7e592d0c59788b45aad7e8b35"}, - {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:33fc65740267222fc02975c061eb7167185fef4cc8f2770267ee8bf7d6a42f84"}, - {file = "coverage-7.5.3-cp312-cp312-win32.whl", hash = "sha256:7b2a19e13dfb5c8e145c7a6ea959485ee8e2204699903c88c7d25283584bfc08"}, - {file = "coverage-7.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:0bbddc54bbacfc09b3edaec644d4ac90c08ee8ed4844b0f86227dcda2d428fcb"}, - {file = "coverage-7.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f78300789a708ac1f17e134593f577407d52d0417305435b134805c4fb135adb"}, - {file = "coverage-7.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b368e1aee1b9b75757942d44d7598dcd22a9dbb126affcbba82d15917f0cc155"}, - {file = "coverage-7.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f836c174c3a7f639bded48ec913f348c4761cbf49de4a20a956d3431a7c9cb24"}, - {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:244f509f126dc71369393ce5fea17c0592c40ee44e607b6d855e9c4ac57aac98"}, - {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4c2872b3c91f9baa836147ca33650dc5c172e9273c808c3c3199c75490e709d"}, - {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dd4b3355b01273a56b20c219e74e7549e14370b31a4ffe42706a8cda91f19f6d"}, - {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f542287b1489c7a860d43a7d8883e27ca62ab84ca53c965d11dac1d3a1fab7ce"}, - {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:75e3f4e86804023e991096b29e147e635f5e2568f77883a1e6eed74512659ab0"}, - {file = "coverage-7.5.3-cp38-cp38-win32.whl", hash = "sha256:c59d2ad092dc0551d9f79d9d44d005c945ba95832a6798f98f9216ede3d5f485"}, - {file = "coverage-7.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:fa21a04112c59ad54f69d80e376f7f9d0f5f9123ab87ecd18fbb9ec3a2beed56"}, - {file = "coverage-7.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5102a92855d518b0996eb197772f5ac2a527c0ec617124ad5242a3af5e25f85"}, - {file = "coverage-7.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d1da0a2e3b37b745a2b2a678a4c796462cf753aebf94edcc87dcc6b8641eae31"}, - {file = "coverage-7.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8383a6c8cefba1b7cecc0149415046b6fc38836295bc4c84e820872eb5478b3d"}, - {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aad68c3f2566dfae84bf46295a79e79d904e1c21ccfc66de88cd446f8686341"}, - {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e079c9ec772fedbade9d7ebc36202a1d9ef7291bc9b3a024ca395c4d52853d7"}, - {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bde997cac85fcac227b27d4fb2c7608a2c5f6558469b0eb704c5726ae49e1c52"}, - {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:990fb20b32990b2ce2c5f974c3e738c9358b2735bc05075d50a6f36721b8f303"}, - {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3d5a67f0da401e105753d474369ab034c7bae51a4c31c77d94030d59e41df5bd"}, - {file = "coverage-7.5.3-cp39-cp39-win32.whl", hash = "sha256:e08c470c2eb01977d221fd87495b44867a56d4d594f43739a8028f8646a51e0d"}, - {file = "coverage-7.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:1d2a830ade66d3563bb61d1e3c77c8def97b30ed91e166c67d0632c018f380f0"}, - {file = "coverage-7.5.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:3538d8fb1ee9bdd2e2692b3b18c22bb1c19ffbefd06880f5ac496e42d7bb3884"}, - {file = "coverage-7.5.3.tar.gz", hash = "sha256:04aefca5190d1dc7a53a4c1a5a7f8568811306d7a8ee231c42fb69215571944f"}, + {file = "coverage-7.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6cfb5a4f556bb51aba274588200a46e4dd6b505fb1a5f8c5ae408222eb416f99"}, + {file = "coverage-7.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2174e7c23e0a454ffe12267a10732c273243b4f2d50d07544a91198f05c48f47"}, + {file = "coverage-7.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2214ee920787d85db1b6a0bd9da5f8503ccc8fcd5814d90796c2f2493a2f4d2e"}, + {file = "coverage-7.5.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1137f46adb28e3813dec8c01fefadcb8c614f33576f672962e323b5128d9a68d"}, + {file = "coverage-7.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b385d49609f8e9efc885790a5a0e89f2e3ae042cdf12958b6034cc442de428d3"}, + {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b4a474f799456e0eb46d78ab07303286a84a3140e9700b9e154cfebc8f527016"}, + {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5cd64adedf3be66f8ccee418473c2916492d53cbafbfcff851cbec5a8454b136"}, + {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e564c2cf45d2f44a9da56f4e3a26b2236504a496eb4cb0ca7221cd4cc7a9aca9"}, + {file = "coverage-7.5.4-cp310-cp310-win32.whl", hash = "sha256:7076b4b3a5f6d2b5d7f1185fde25b1e54eb66e647a1dfef0e2c2bfaf9b4c88c8"}, + {file = "coverage-7.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:018a12985185038a5b2bcafab04ab833a9a0f2c59995b3cec07e10074c78635f"}, + {file = "coverage-7.5.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:db14f552ac38f10758ad14dd7b983dbab424e731588d300c7db25b6f89e335b5"}, + {file = "coverage-7.5.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3257fdd8e574805f27bb5342b77bc65578e98cbc004a92232106344053f319ba"}, + {file = "coverage-7.5.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a6612c99081d8d6134005b1354191e103ec9705d7ba2754e848211ac8cacc6b"}, + {file = "coverage-7.5.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d45d3cbd94159c468b9b8c5a556e3f6b81a8d1af2a92b77320e887c3e7a5d080"}, + {file = "coverage-7.5.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed550e7442f278af76d9d65af48069f1fb84c9f745ae249c1a183c1e9d1b025c"}, + {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a892be37ca35eb5019ec85402c3371b0f7cda5ab5056023a7f13da0961e60da"}, + {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8192794d120167e2a64721d88dbd688584675e86e15d0569599257566dec9bf0"}, + {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:820bc841faa502e727a48311948e0461132a9c8baa42f6b2b84a29ced24cc078"}, + {file = "coverage-7.5.4-cp311-cp311-win32.whl", hash = "sha256:6aae5cce399a0f065da65c7bb1e8abd5c7a3043da9dceb429ebe1b289bc07806"}, + {file = "coverage-7.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:d2e344d6adc8ef81c5a233d3a57b3c7d5181f40e79e05e1c143da143ccb6377d"}, + {file = "coverage-7.5.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:54317c2b806354cbb2dc7ac27e2b93f97096912cc16b18289c5d4e44fc663233"}, + {file = "coverage-7.5.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:042183de01f8b6d531e10c197f7f0315a61e8d805ab29c5f7b51a01d62782747"}, + {file = "coverage-7.5.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6bb74ed465d5fb204b2ec41d79bcd28afccf817de721e8a807d5141c3426638"}, + {file = "coverage-7.5.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3d45ff86efb129c599a3b287ae2e44c1e281ae0f9a9bad0edc202179bcc3a2e"}, + {file = "coverage-7.5.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5013ed890dc917cef2c9f765c4c6a8ae9df983cd60dbb635df8ed9f4ebc9f555"}, + {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1014fbf665fef86cdfd6cb5b7371496ce35e4d2a00cda501cf9f5b9e6fced69f"}, + {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3684bc2ff328f935981847082ba4fdc950d58906a40eafa93510d1b54c08a66c"}, + {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:581ea96f92bf71a5ec0974001f900db495488434a6928a2ca7f01eee20c23805"}, + {file = "coverage-7.5.4-cp312-cp312-win32.whl", hash = "sha256:73ca8fbc5bc622e54627314c1a6f1dfdd8db69788f3443e752c215f29fa87a0b"}, + {file = "coverage-7.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:cef4649ec906ea7ea5e9e796e68b987f83fa9a718514fe147f538cfeda76d7a7"}, + {file = "coverage-7.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdd31315fc20868c194130de9ee6bfd99755cc9565edff98ecc12585b90be882"}, + {file = "coverage-7.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:02ff6e898197cc1e9fa375581382b72498eb2e6d5fc0b53f03e496cfee3fac6d"}, + {file = "coverage-7.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d05c16cf4b4c2fc880cb12ba4c9b526e9e5d5bb1d81313d4d732a5b9fe2b9d53"}, + {file = "coverage-7.5.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5986ee7ea0795a4095ac4d113cbb3448601efca7f158ec7f7087a6c705304e4"}, + {file = "coverage-7.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5df54843b88901fdc2f598ac06737f03d71168fd1175728054c8f5a2739ac3e4"}, + {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ab73b35e8d109bffbda9a3e91c64e29fe26e03e49addf5b43d85fc426dde11f9"}, + {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:aea072a941b033813f5e4814541fc265a5c12ed9720daef11ca516aeacd3bd7f"}, + {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:16852febd96acd953b0d55fc842ce2dac1710f26729b31c80b940b9afcd9896f"}, + {file = "coverage-7.5.4-cp38-cp38-win32.whl", hash = "sha256:8f894208794b164e6bd4bba61fc98bf6b06be4d390cf2daacfa6eca0a6d2bb4f"}, + {file = "coverage-7.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:e2afe743289273209c992075a5a4913e8d007d569a406ffed0bd080ea02b0633"}, + {file = "coverage-7.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b95c3a8cb0463ba9f77383d0fa8c9194cf91f64445a63fc26fb2327e1e1eb088"}, + {file = "coverage-7.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d7564cc09dd91b5a6001754a5b3c6ecc4aba6323baf33a12bd751036c998be4"}, + {file = "coverage-7.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44da56a2589b684813f86d07597fdf8a9c6ce77f58976727329272f5a01f99f7"}, + {file = "coverage-7.5.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e16f3d6b491c48c5ae726308e6ab1e18ee830b4cdd6913f2d7f77354b33f91c8"}, + {file = "coverage-7.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbc5958cb471e5a5af41b0ddaea96a37e74ed289535e8deca404811f6cb0bc3d"}, + {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a04e990a2a41740b02d6182b498ee9796cf60eefe40cf859b016650147908029"}, + {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ddbd2f9713a79e8e7242d7c51f1929611e991d855f414ca9996c20e44a895f7c"}, + {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b1ccf5e728ccf83acd313c89f07c22d70d6c375a9c6f339233dcf792094bcbf7"}, + {file = "coverage-7.5.4-cp39-cp39-win32.whl", hash = "sha256:56b4eafa21c6c175b3ede004ca12c653a88b6f922494b023aeb1e836df953ace"}, + {file = "coverage-7.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:65e528e2e921ba8fd67d9055e6b9f9e34b21ebd6768ae1c1723f4ea6ace1234d"}, + {file = "coverage-7.5.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:79b356f3dd5b26f3ad23b35c75dbdaf1f9e2450b6bcefc6d0825ea0aa3f86ca5"}, + {file = "coverage-7.5.4.tar.gz", hash = "sha256:a44963520b069e12789d0faea4e9fdb1e410cdc4aab89d94f7f55cbb7fef0353"}, ] [package.dependencies] @@ -722,33 +722,33 @@ vision = ["Pillow (>=9.4.0)"] [[package]] name = "debugpy" -version = "1.8.1" +version = "1.8.2" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"}, - {file = "debugpy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e"}, - {file = "debugpy-1.8.1-cp310-cp310-win32.whl", hash = "sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0"}, - {file = "debugpy-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd"}, - {file = "debugpy-1.8.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb"}, - {file = "debugpy-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099"}, - {file = "debugpy-1.8.1-cp311-cp311-win32.whl", hash = "sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146"}, - {file = "debugpy-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8"}, - {file = "debugpy-1.8.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539"}, - {file = "debugpy-1.8.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace"}, - {file = "debugpy-1.8.1-cp312-cp312-win32.whl", hash = "sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0"}, - {file = "debugpy-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98"}, - {file = "debugpy-1.8.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39"}, - {file = "debugpy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7"}, - {file = "debugpy-1.8.1-cp38-cp38-win32.whl", hash = "sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9"}, - {file = "debugpy-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234"}, - {file = "debugpy-1.8.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42"}, - {file = "debugpy-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703"}, - {file = "debugpy-1.8.1-cp39-cp39-win32.whl", hash = "sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23"}, - {file = "debugpy-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3"}, - {file = "debugpy-1.8.1-py2.py3-none-any.whl", hash = "sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242"}, - {file = "debugpy-1.8.1.zip", hash = "sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42"}, + {file = "debugpy-1.8.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7ee2e1afbf44b138c005e4380097d92532e1001580853a7cb40ed84e0ef1c3d2"}, + {file = "debugpy-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f8c3f7c53130a070f0fc845a0f2cee8ed88d220d6b04595897b66605df1edd6"}, + {file = "debugpy-1.8.2-cp310-cp310-win32.whl", hash = "sha256:f179af1e1bd4c88b0b9f0fa153569b24f6b6f3de33f94703336363ae62f4bf47"}, + {file = "debugpy-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:0600faef1d0b8d0e85c816b8bb0cb90ed94fc611f308d5fde28cb8b3d2ff0fe3"}, + {file = "debugpy-1.8.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:8a13417ccd5978a642e91fb79b871baded925d4fadd4dfafec1928196292aa0a"}, + {file = "debugpy-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acdf39855f65c48ac9667b2801234fc64d46778021efac2de7e50907ab90c634"}, + {file = "debugpy-1.8.2-cp311-cp311-win32.whl", hash = "sha256:2cbd4d9a2fc5e7f583ff9bf11f3b7d78dfda8401e8bb6856ad1ed190be4281ad"}, + {file = "debugpy-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:d3408fddd76414034c02880e891ea434e9a9cf3a69842098ef92f6e809d09afa"}, + {file = "debugpy-1.8.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:5d3ccd39e4021f2eb86b8d748a96c766058b39443c1f18b2dc52c10ac2757835"}, + {file = "debugpy-1.8.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62658aefe289598680193ff655ff3940e2a601765259b123dc7f89c0239b8cd3"}, + {file = "debugpy-1.8.2-cp312-cp312-win32.whl", hash = "sha256:bd11fe35d6fd3431f1546d94121322c0ac572e1bfb1f6be0e9b8655fb4ea941e"}, + {file = "debugpy-1.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:15bc2f4b0f5e99bf86c162c91a74c0631dbd9cef3c6a1d1329c946586255e859"}, + {file = "debugpy-1.8.2-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:5a019d4574afedc6ead1daa22736c530712465c0c4cd44f820d803d937531b2d"}, + {file = "debugpy-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40f062d6877d2e45b112c0bbade9a17aac507445fd638922b1a5434df34aed02"}, + {file = "debugpy-1.8.2-cp38-cp38-win32.whl", hash = "sha256:c78ba1680f1015c0ca7115671fe347b28b446081dada3fedf54138f44e4ba031"}, + {file = "debugpy-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:cf327316ae0c0e7dd81eb92d24ba8b5e88bb4d1b585b5c0d32929274a66a5210"}, + {file = "debugpy-1.8.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:1523bc551e28e15147815d1397afc150ac99dbd3a8e64641d53425dba57b0ff9"}, + {file = "debugpy-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e24ccb0cd6f8bfaec68d577cb49e9c680621c336f347479b3fce060ba7c09ec1"}, + {file = "debugpy-1.8.2-cp39-cp39-win32.whl", hash = "sha256:7f8d57a98c5a486c5c7824bc0b9f2f11189d08d73635c326abef268f83950326"}, + {file = "debugpy-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:16c8dcab02617b75697a0a925a62943e26a0330da076e2a10437edd9f0bf3755"}, + {file = "debugpy-1.8.2-py2.py3-none-any.whl", hash = "sha256:16e16df3a98a35c63c3ab1e4d19be4cbc7fdda92d9ddc059294f18910928e0ca"}, + {file = "debugpy-1.8.2.zip", hash = "sha256:95378ed08ed2089221896b9b3a8d021e642c24edc8fef20e5d4342ca8be65c00"}, ] [[package]] @@ -919,13 +919,13 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.15.3" +version = "3.15.4" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.15.3-py3-none-any.whl", hash = "sha256:0151273e5b5d6cf753a61ec83b3a9b7d8821c39ae9af9d7ecf2f9e2f17404103"}, - {file = "filelock-3.15.3.tar.gz", hash = "sha256:e1199bf5194a2277273dacd50269f0d87d0682088a3c561c15674ea9005d8635"}, + {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, + {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, ] [package.extras] @@ -1098,13 +1098,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 [[package]] name = "google-api-core" -version = "2.19.0" +version = "2.19.1" description = "Google API client core library" optional = true python-versions = ">=3.7" files = [ - {file = "google-api-core-2.19.0.tar.gz", hash = "sha256:cf1b7c2694047886d2af1128a03ae99e391108a08804f87cfd35970e49c9cd10"}, - {file = "google_api_core-2.19.0-py3-none-any.whl", hash = "sha256:8661eec4078c35428fd3f69a2c7ee29e342896b70f01d1a1cbcb334372dd6251"}, + {file = "google-api-core-2.19.1.tar.gz", hash = "sha256:f4695f1e3650b316a795108a76a1c416e6afb036199d1c1f1f110916df479ffd"}, + {file = "google_api_core-2.19.1-py3-none-any.whl", hash = "sha256:f12a9b8309b5e21d92483bbd47ce2c445861ec7d269ef6784ecc0ea8c1fa6125"}, ] [package.dependencies] @@ -1119,7 +1119,7 @@ grpcio-status = [ {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, ] proto-plus = ">=1.22.3,<2.0.0dev" -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +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,<6.0.0.dev0" requests = ">=2.18.0,<3.0.0.dev0" [package.extras] @@ -1208,17 +1208,17 @@ dev = ["Pillow", "absl-py", "black", "ipython", "nose2", "pandas", "pytype", "py [[package]] name = "googleapis-common-protos" -version = "1.63.1" +version = "1.63.2" description = "Common protobufs used in Google APIs" optional = true python-versions = ">=3.7" files = [ - {file = "googleapis-common-protos-1.63.1.tar.gz", hash = "sha256:c6442f7a0a6b2a80369457d79e6672bb7dcbaab88e0848302497e3ec80780a6a"}, - {file = "googleapis_common_protos-1.63.1-py2.py3-none-any.whl", hash = "sha256:0e1c2cdfcbc354b76e4a211a35ea35d6926a835cba1377073c4861db904a1877"}, + {file = "googleapis-common-protos-1.63.2.tar.gz", hash = "sha256:27c5abdffc4911f28101e635de1533fb4cfd2c37fbaa9174587c799fac90aa87"}, + {file = "googleapis_common_protos-1.63.2-py2.py3-none-any.whl", hash = "sha256:27a2499c7e8aff199665b22741997e485eccc8645aa9176c7c988e6fae507945"}, ] [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,<6.0.0.dev0" +protobuf = ">=3.20.2,<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,<6.0.0.dev0" [package.extras] grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] @@ -1677,22 +1677,22 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.1.0" +version = "8.0.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, - {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, + {file = "importlib_metadata-8.0.0-py3-none-any.whl", hash = "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f"}, + {file = "importlib_metadata-8.0.0.tar.gz", hash = "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "iniconfig" @@ -1828,72 +1828,72 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jiter" -version = "0.4.2" +version = "0.5.0" description = "Fast iterable JSON parser." optional = true python-versions = ">=3.8" files = [ - {file = "jiter-0.4.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c2b003ff58d14f5e182b875acd5177b2367245c19a03be9a2230535d296f7550"}, - {file = "jiter-0.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b48c77c25f094707731cd5bad6b776046846b60a27ee20efc8fadfb10a89415f"}, - {file = "jiter-0.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f50ad6b172bde4d45f4d4ea10c49282a337b8bb735afc99763dfa55ea84a743"}, - {file = "jiter-0.4.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95f6001e86f525fbbc9706db2078dc22be078b0950de55b92d37041930f5f940"}, - {file = "jiter-0.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16646ef23b62b007de80460d303ebb2d81e355dac9389c787cec87cdd7ffef2f"}, - {file = "jiter-0.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b4e847c13b0bf1255c711a92330e7a8cb8b5cdd1e37d7db309627bcdd3367ff"}, - {file = "jiter-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c536589be60e4c5f2b20fadc4db7e9f55d4c9df3551f29ddf1c4a18dcc9dd54"}, - {file = "jiter-0.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3b2763996167830889a854b4ded30bb90897f9b76be78069c50c3ec4540950e"}, - {file = "jiter-0.4.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:675e8ab98c99495091af6b6e9bf2b6353bcf81f25ab6ce27d36127e315b4505d"}, - {file = "jiter-0.4.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e48e43d9d999aaf55f53406b8846ff8cbe3e47ee4b9dc37e5a10a65ce760809f"}, - {file = "jiter-0.4.2-cp310-none-win32.whl", hash = "sha256:881b6e67c50bc36acb3570eda693763c8cd77d590940e06fa6d325d0da52ec1b"}, - {file = "jiter-0.4.2-cp310-none-win_amd64.whl", hash = "sha256:bb8f7b43259efc6add0d721ade2953e064b24e2026d26d979bc09ec080844cef"}, - {file = "jiter-0.4.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:24ad336ac47f274fa83f6fbedcabff9d3387c80f67c66b992688e6a8ba2c47e9"}, - {file = "jiter-0.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fc392a220095730afe365ce1516f2f88bb085a2fd29ea191be9c6e3c71713d9a"}, - {file = "jiter-0.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1fdc408de36c81460896de0176f2f7b9f3574dcd35693a0b2c00f4ca34c98e4"}, - {file = "jiter-0.4.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c10ad76722ee6a8c820b0db06a793c08b7d679e5201b9563015bd1e06c959a09"}, - {file = "jiter-0.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dbb46d1e9c82bba87f0cbda38413e49448a7df35b1e55917124bff9f38974a23"}, - {file = "jiter-0.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:194e28ef4b5f3b61408cb2ee6b6dcbcdb0c9063d01b92b01345b7605692849f5"}, - {file = "jiter-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0a447533eccd62748a727e058efa10a8d7cf1de8ffe1a4d705ecb41dad9090"}, - {file = "jiter-0.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5f7704d7260bbb88cca3453951af739589132b26e896a3144fa2dae2263716d7"}, - {file = "jiter-0.4.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:01427458bc9550f2eda09d425755330e7d0eb09adce099577433bebf05d28d59"}, - {file = "jiter-0.4.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:159b8416879c0053b17c352f70b67b749ef5b2924c6154318ecf71918aab0905"}, - {file = "jiter-0.4.2-cp311-none-win32.whl", hash = "sha256:f2445234acfb79048ce1a0d5d0e181abb9afd9e4a29d8d9988fe26cc5773a81a"}, - {file = "jiter-0.4.2-cp311-none-win_amd64.whl", hash = "sha256:e15a65f233b6b0e5ac10ddf3b97ceb18aa9ffba096259961641d78b4ee321bd5"}, - {file = "jiter-0.4.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d61d59521aea9745447ce50f74d39a16ef74ec9d6477d9350d77e75a3d774ad2"}, - {file = "jiter-0.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eef607dc0acc251923427808dbd017f1998ae3c1a0430a261527aa5cbb3a942"}, - {file = "jiter-0.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af6bf39954646e374fc47429c656372ac731a6a26b644158a5a84bcdbed33a47"}, - {file = "jiter-0.4.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f509d23606e476852ee46a2b65b5c4ad3905f17424d9cc19c1dffa1c94ba3c6"}, - {file = "jiter-0.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59672774daa44ee140aada0c781c82bee4d9ac5e522966186cfb6b3c217d8a51"}, - {file = "jiter-0.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24a0458efac5afeca254cf557b8a654e17013075a69905c78f88d557f129d871"}, - {file = "jiter-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8860766d1c293e75c1bb4e25b74fa987e3adf199cac3f5f9e6e49c2bebf092f"}, - {file = "jiter-0.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a109f3281b72bbf4921fe43db1005c004a38559ca0b6c4985add81777dfe0a44"}, - {file = "jiter-0.4.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:faa7e667454b77ad2f0ef87db39f4944de759617aadf210ea2b73f26bb24755f"}, - {file = "jiter-0.4.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3512f8b00cafb6780b427cb6282800d2bf8277161d9c917830661bd4ed1d3528"}, - {file = "jiter-0.4.2-cp312-none-win32.whl", hash = "sha256:853b35d508ee5b66d06630473c1c0b7bb5e29bf4785c9d2202437116c94f7e21"}, - {file = "jiter-0.4.2-cp312-none-win_amd64.whl", hash = "sha256:4a3a8197784278eb8b24cb02c45e1cad67c2ce5b5b758adfb19b87f74bbdff9c"}, - {file = "jiter-0.4.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ca2a4d750aed3154b89f2efb148609fc985fad8db739460797aaf9b478acedda"}, - {file = "jiter-0.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0e6c304b3cc6896256727e1fb8991c7179a345eca8224e201795e9cacf4683b0"}, - {file = "jiter-0.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cc34ac708ae1750d077e490321761ec4b9a055b994cbdd1d6fbd37099e4aa7b"}, - {file = "jiter-0.4.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c93383875ab8d2e4f760aaff335b4a12ff32d4f9cf49c4498d657734f611466"}, - {file = "jiter-0.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce197ee044add576afca0955b42142dd0312639adb6ebadbdbe4277f2855614f"}, - {file = "jiter-0.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a427716813ff65480ca5b5117cfa099f49b49cd38051f8609bd0d5493013ca0"}, - {file = "jiter-0.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:479990218353356234669e70fac53e5eb6f739a10db25316171aede2c97d9364"}, - {file = "jiter-0.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d35a91ec5ac74cf33234c431505299fa91c0a197c2dbafd47400aca7c69489d4"}, - {file = "jiter-0.4.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b27189847193708c94ad10ca0d891309342ae882725d2187cf5d2db02bde8d1b"}, - {file = "jiter-0.4.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:76c255308cd1093fb411a03756b7bb220e48d4a98c30cbc79ed448bf3978e27d"}, - {file = "jiter-0.4.2-cp38-none-win32.whl", hash = "sha256:bb77438060bad49cc251941e6701b31138365c8a0ddaf10cdded2fcc6dd30701"}, - {file = "jiter-0.4.2-cp38-none-win_amd64.whl", hash = "sha256:ce858af19f7ce0d4b51c9f6c0c9d08f1e9dcef1986c5875efd0674a7054292ca"}, - {file = "jiter-0.4.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:6128838a2f357b3921b2a3242d5dc002ae4255ecc8f9f05c20d56d7d2d79c5ad"}, - {file = "jiter-0.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f2420cebb9ba856cb57dcab1d2d8def949b464b0db09c22a4e4dbd52fff7b200"}, - {file = "jiter-0.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5d13d8128e853b320e00bb18bd4bb8b136cc0936091dc87633648fc688eb705"}, - {file = "jiter-0.4.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eba5d6e54f149c508ba88677f97d3dc7dd75e9980d234bbac8027ac6db0763a3"}, - {file = "jiter-0.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fad5d64af0bc0545237419bf4150d8de56f0bd217434bdd1a59730327252bef"}, - {file = "jiter-0.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d179e7bca89cf5719bd761dd37a341ff0f98199ecaa9c14af09792e47e977cc"}, - {file = "jiter-0.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36353caee9f103d8ee7bda077f6400505b0f370e27eabcab33a33d21de12a2a6"}, - {file = "jiter-0.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dd146c25bce576ca5db64fc7eccb8862af00f1f0e30108796953f12a53660e4c"}, - {file = "jiter-0.4.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:14b7c08cadbcd703041c66dc30e24e17de2f340281cac0e69374223ecf153aa4"}, - {file = "jiter-0.4.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a90f1a8b3d29aea198f8ea2b01148276ced8056e5103f32525266b3d880e65c9"}, - {file = "jiter-0.4.2-cp39-none-win32.whl", hash = "sha256:25b174997c780337b61ae57b1723455eecae9a17a9659044fd3c3b369190063f"}, - {file = "jiter-0.4.2-cp39-none-win_amd64.whl", hash = "sha256:bef62cea18521c5b99368147040c7e560c55098a35c93456f110678a2d34189a"}, - {file = "jiter-0.4.2.tar.gz", hash = "sha256:29b9d44f23f0c05f46d482f4ebf03213ee290d77999525d0975a17f875bf1eea"}, + {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, + {file = "jiter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e"}, + {file = "jiter-0.5.0-cp310-none-win32.whl", hash = "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf"}, + {file = "jiter-0.5.0-cp310-none-win_amd64.whl", hash = "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646"}, + {file = "jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb"}, + {file = "jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338"}, + {file = "jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4"}, + {file = "jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6"}, + {file = "jiter-0.5.0-cp38-none-win32.whl", hash = "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e"}, + {file = "jiter-0.5.0-cp38-none-win_amd64.whl", hash = "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb"}, + {file = "jiter-0.5.0-cp39-none-win32.whl", hash = "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61"}, + {file = "jiter-0.5.0-cp39-none-win_amd64.whl", hash = "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1"}, + {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, ] [[package]] @@ -2026,6 +2026,30 @@ async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\ langchain-core = ">=0.2.7,<0.3.0" langchain-text-splitters = ">=0.2.0,<0.3.0" langsmith = ">=0.1.17,<0.2.0" +numpy = {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""} +pydantic = ">=1,<3" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" +tenacity = ">=8.1.0,<9.0.0" + +[[package]] +name = "langchain" +version = "0.2.6" +description = "Building applications with LLMs through composability" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langchain-0.2.6-py3-none-any.whl", hash = "sha256:f86e8a7afd3e56f8eb5ba47f01dd00144fb9fc2f1db9873bd197347be2857aa4"}, + {file = "langchain-0.2.6.tar.gz", hash = "sha256:867f6add370c1e3911b0e87d3dd0e36aec1e8f513bf06131340fe8f151d89dc5"}, +] + +[package.dependencies] +aiohttp = ">=3.8.3,<4.0.0" +async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} +langchain-core = ">=0.2.10,<0.3.0" +langchain-text-splitters = ">=0.2.0,<0.3.0" +langsmith = ">=0.1.17,<0.2.0" numpy = [ {version = ">=1,<2", markers = "python_version < \"3.12\""}, {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, @@ -2034,7 +2058,7 @@ pydantic = ">=1,<3" PyYAML = ">=5.3" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-core" @@ -2057,13 +2081,13 @@ tenacity = ">=8.1.0,<9.0.0" [[package]] name = "langchain-core" -version = "0.2.9" +version = "0.2.10" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_core-0.2.9-py3-none-any.whl", hash = "sha256:426a5a4fea95a5db995ba5ab560b76edd4998fb6fe52ccc28ac987092a4cbfcd"}, - {file = "langchain_core-0.2.9.tar.gz", hash = "sha256:f1c59082642921727844e1cd0eb36d451edd1872c20e193aa3142aac03495986"}, + {file = "langchain_core-0.2.10-py3-none-any.whl", hash = "sha256:6eb72086b6bc86db9812da98f79e507c2209a15c0112aefd214a04182ada8586"}, + {file = "langchain_core-0.2.10.tar.gz", hash = "sha256:33d1fc234ab58c80476eb5bbde2107ef522a2ce8f46bdf47d9e1bd21e054208f"}, ] [package.dependencies] @@ -2076,13 +2100,13 @@ tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-openai" -version = "0.1.8" +version = "0.1.10" description = "An integration package connecting OpenAI and LangChain" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_openai-0.1.8-py3-none-any.whl", hash = "sha256:8125c84223e9f43b05defbca64eedbcf362fd78a680de6c25e64f973b34a8063"}, - {file = "langchain_openai-0.1.8.tar.gz", hash = "sha256:a11fcce15def7917c44232abda6baaa63dfc79fe44be1531eea650d39a44cd95"}, + {file = "langchain_openai-0.1.10-py3-none-any.whl", hash = "sha256:62eb000980eb45e4f16c88acdbaeccf3d59266554b0dd3ce6bebea1bbe8143dd"}, + {file = "langchain_openai-0.1.10.tar.gz", hash = "sha256:30f881f8ccaec28c054759837c41fd2a2264fcc5564728ce12e1715891a9ce3c"}, ] [package.dependencies] @@ -2123,6 +2147,22 @@ orjson = ">=3.9.14,<4.0.0" pydantic = ">=1,<3" requests = ">=2,<3" +[[package]] +name = "langsmith" +version = "0.1.82" +description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langsmith-0.1.82-py3-none-any.whl", hash = "sha256:9b3653e7d316036b0c60bf0bc3e280662d660f485a4ebd8e5c9d84f9831ae79c"}, + {file = "langsmith-0.1.82.tar.gz", hash = "sha256:c02e2bbc488c10c13b52c69d271eb40bd38da078d37b6ae7ae04a18bd48140be"}, +] + +[package.dependencies] +orjson = ">=3.9.14,<4.0.0" +pydantic = {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""} +requests = ">=2,<3" + [[package]] name = "litellm" version = "1.23.16" @@ -2596,38 +2636,38 @@ dill = ">=0.3.8" [[package]] name = "mypy" -version = "1.10.0" +version = "1.10.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, - {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, - {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, - {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, - {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, - {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, - {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, - {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, - {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, - {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, - {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, - {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, - {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, - {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, - {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, - {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, - {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, - {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, - {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, + {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, + {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, + {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, + {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, + {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, + {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, + {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, + {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, + {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, + {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, + {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, + {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, + {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, + {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, + {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, + {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, + {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, + {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, + {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, + {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, + {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, + {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, + {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, + {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, + {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, + {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, + {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, ] [package.dependencies] @@ -2924,7 +2964,6 @@ description = "Nvidia JIT LTO Library" optional = true python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-manylinux2014_aarch64.whl", hash = "sha256:004186d5ea6a57758fd6d57052a123c73a4815adf365eb8dd6a85c9eaa7535ff"}, {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d9714f27c1d0f0895cd8915c07a87a1d0029a0aa36acaf9156952ec2a8a12189"}, {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-win_amd64.whl", hash = "sha256:c3401dc8543b52d3a8158007a0c1ab4e9c768fcbd24153a48c86972102197ddd"}, ] @@ -2942,13 +2981,13 @@ files = [ [[package]] name = "openai" -version = "1.35.1" +version = "1.35.3" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.35.1-py3-none-any.whl", hash = "sha256:53ef8935cf916dc7ece67fee5a8a09fc4db5aadf4d6e95b5b7f767f3c4432e4d"}, - {file = "openai-1.35.1.tar.gz", hash = "sha256:d85973adc2f4fbb11ba20bfd948e3340b8352f6b8a02f1fa1c387c8eefac8d9d"}, + {file = "openai-1.35.3-py3-none-any.whl", hash = "sha256:7b26544cef80f125431c073ffab3811d2421fbb9e30d3bd5c2436aba00b042d5"}, + {file = "openai-1.35.3.tar.gz", hash = "sha256:d6177087f150b381d49499be782d764213fdf638d391b29ca692b84dd675a389"}, ] [package.dependencies] @@ -4096,39 +4135,39 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.4.9" +version = "0.4.10" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b262ed08d036ebe162123170b35703aaf9daffecb698cd367a8d585157732991"}, - {file = "ruff-0.4.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:98ec2775fd2d856dc405635e5ee4ff177920f2141b8e2d9eb5bd6efd50e80317"}, - {file = "ruff-0.4.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4555056049d46d8a381f746680db1c46e67ac3b00d714606304077682832998e"}, - {file = "ruff-0.4.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e91175fbe48f8a2174c9aad70438fe9cb0a5732c4159b2a10a3565fea2d94cde"}, - {file = "ruff-0.4.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e8e7b95673f22e0efd3571fb5b0cf71a5eaaa3cc8a776584f3b2cc878e46bff"}, - {file = "ruff-0.4.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2d45ddc6d82e1190ea737341326ecbc9a61447ba331b0a8962869fcada758505"}, - {file = "ruff-0.4.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78de3fdb95c4af084087628132336772b1c5044f6e710739d440fc0bccf4d321"}, - {file = "ruff-0.4.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06b60f91bfa5514bb689b500a25ba48e897d18fea14dce14b48a0c40d1635893"}, - {file = "ruff-0.4.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88bffe9c6a454bf8529f9ab9091c99490578a593cc9f9822b7fc065ee0712a06"}, - {file = "ruff-0.4.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:673bddb893f21ab47a8334c8e0ea7fd6598ecc8e698da75bcd12a7b9d0a3206e"}, - {file = "ruff-0.4.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8c1aff58c31948cc66d0b22951aa19edb5af0a3af40c936340cd32a8b1ab7438"}, - {file = "ruff-0.4.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:784d3ec9bd6493c3b720a0b76f741e6c2d7d44f6b2be87f5eef1ae8cc1d54c84"}, - {file = "ruff-0.4.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:732dd550bfa5d85af8c3c6cbc47ba5b67c6aed8a89e2f011b908fc88f87649db"}, - {file = "ruff-0.4.9-py3-none-win32.whl", hash = "sha256:8064590fd1a50dcf4909c268b0e7c2498253273309ad3d97e4a752bb9df4f521"}, - {file = "ruff-0.4.9-py3-none-win_amd64.whl", hash = "sha256:e0a22c4157e53d006530c902107c7f550b9233e9706313ab57b892d7197d8e52"}, - {file = "ruff-0.4.9-py3-none-win_arm64.whl", hash = "sha256:5d5460f789ccf4efd43f265a58538a2c24dbce15dbf560676e430375f20a8198"}, - {file = "ruff-0.4.9.tar.gz", hash = "sha256:f1cb0828ac9533ba0135d148d214e284711ede33640465e706772645483427e3"}, + {file = "ruff-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c2c4d0859305ac5a16310eec40e4e9a9dec5dcdfbe92697acd99624e8638dac"}, + {file = "ruff-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a79489607d1495685cdd911a323a35871abfb7a95d4f98fc6f85e799227ac46e"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1dd1681dfa90a41b8376a61af05cc4dc5ff32c8f14f5fe20dba9ff5deb80cd6"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75c53bb79d71310dc79fb69eb4902fba804a81f374bc86a9b117a8d077a1784"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18238c80ee3d9100d3535d8eb15a59c4a0753b45cc55f8bf38f38d6a597b9739"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d8f71885bce242da344989cae08e263de29752f094233f932d4f5cfb4ef36a81"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:330421543bd3222cdfec481e8ff3460e8702ed1e58b494cf9d9e4bf90db52b9d"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e9b6fb3a37b772628415b00c4fc892f97954275394ed611056a4b8a2631365e"}, + {file = "ruff-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f54c481b39a762d48f64d97351048e842861c6662d63ec599f67d515cb417f6"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:67fe086b433b965c22de0b4259ddfe6fa541c95bf418499bedb9ad5fb8d1c631"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:acfaaab59543382085f9eb51f8e87bac26bf96b164839955f244d07125a982ef"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3cea07079962b2941244191569cf3a05541477286f5cafea638cd3aa94b56815"}, + {file = "ruff-0.4.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:338a64ef0748f8c3a80d7f05785930f7965d71ca260904a9321d13be24b79695"}, + {file = "ruff-0.4.10-py3-none-win32.whl", hash = "sha256:ffe3cd2f89cb54561c62e5fa20e8f182c0a444934bf430515a4b422f1ab7b7ca"}, + {file = "ruff-0.4.10-py3-none-win_amd64.whl", hash = "sha256:67f67cef43c55ffc8cc59e8e0b97e9e60b4837c8f21e8ab5ffd5d66e196e25f7"}, + {file = "ruff-0.4.10-py3-none-win_arm64.whl", hash = "sha256:dd1fcee327c20addac7916ca4e2653fbbf2e8388d8a6477ce5b4e986b68ae6c0"}, + {file = "ruff-0.4.10.tar.gz", hash = "sha256:3aa4f2bc388a30d346c56524f7cacca85945ba124945fe489952aadb6b5cd804"}, ] [[package]] name = "s3transfer" -version = "0.10.1" +version = "0.10.2" description = "An Amazon S3 Transfer Manager" optional = true -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "s3transfer-0.10.1-py3-none-any.whl", hash = "sha256:ceb252b11bcf87080fb7850a224fb6e05c8a776bab8f2b64b7f25b969464839d"}, - {file = "s3transfer-0.10.1.tar.gz", hash = "sha256:5683916b4c724f799e600f41dd9e10a9ff19871bf87623cc8f491cb4f5fa0a19"}, + {file = "s3transfer-0.10.2-py3-none-any.whl", hash = "sha256:eca1c20de70a39daee580aef4986996620f365c4e0fda6a86100231d62f1bf69"}, + {file = "s3transfer-0.10.2.tar.gz", hash = "sha256:0711534e9356d3cc692fdde846b4a1e4b0cb6519971860796e6bc4c7aea00ef6"}, ] [package.dependencies] @@ -4261,45 +4300,45 @@ torch = ["safetensors[numpy]", "torch (>=1.10)"] [[package]] name = "scipy" -version = "1.13.1" +version = "1.14.0" description = "Fundamental algorithms for scientific computing in Python" optional = true -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, - {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, - {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, - {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, - {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, - {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, - {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, - {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, - {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, - {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, - {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7e911933d54ead4d557c02402710c2396529540b81dd554fc1ba270eb7308484"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:687af0a35462402dd851726295c1a5ae5f987bd6e9026f52e9505994e2f84ef6"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:07e179dc0205a50721022344fb85074f772eadbda1e1b3eecdc483f8033709b7"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a9c9a9b226d9a21e0a208bdb024c3982932e43811b62d202aaf1bb59af264b1"}, + {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076c27284c768b84a45dcf2e914d4000aac537da74236a0d45d82c6fa4b7b3c0"}, + {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42470ea0195336df319741e230626b6225a740fd9dce9642ca13e98f667047c0"}, + {file = "scipy-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:176c6f0d0470a32f1b2efaf40c3d37a24876cebf447498a4cefb947a79c21e9d"}, + {file = "scipy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:ad36af9626d27a4326c8e884917b7ec321d8a1841cd6dacc67d2a9e90c2f0359"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d056a8709ccda6cf36cdd2eac597d13bc03dba38360f418560a93050c76a16e"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f0a50da861a7ec4573b7c716b2ebdcdf142b66b756a0d392c236ae568b3a93fb"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:94c164a9e2498e68308e6e148646e486d979f7fcdb8b4cf34b5441894bdb9caf"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a7d46c3e0aea5c064e734c3eac5cf9eb1f8c4ceee756262f2c7327c4c2691c86"}, + {file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eee2989868e274aae26125345584254d97c56194c072ed96cb433f32f692ed8"}, + {file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3154691b9f7ed73778d746da2df67a19d046a6c8087c8b385bc4cdb2cfca74"}, + {file = "scipy-1.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c40003d880f39c11c1edbae8144e3813904b10514cd3d3d00c277ae996488cdb"}, + {file = "scipy-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:5b083c8940028bb7e0b4172acafda6df762da1927b9091f9611b0bcd8676f2bc"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff2438ea1330e06e53c424893ec0072640dac00f29c6a43a575cbae4c99b2b9"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:bbc0471b5f22c11c389075d091d3885693fd3f5e9a54ce051b46308bc787e5d4"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:64b2ff514a98cf2bb734a9f90d32dc89dc6ad4a4a36a312cd0d6327170339eb0"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:7d3da42fbbbb860211a811782504f38ae7aaec9de8764a9bef6b262de7a2b50f"}, + {file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d91db2c41dd6c20646af280355d41dfa1ec7eead235642178bd57635a3f82209"}, + {file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a01cc03bcdc777c9da3cfdcc74b5a75caffb48a6c39c8450a9a05f82c4250a14"}, + {file = "scipy-1.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:65df4da3c12a2bb9ad52b86b4dcf46813e869afb006e58be0f516bc370165159"}, + {file = "scipy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:4c4161597c75043f7154238ef419c29a64ac4a7c889d588ea77690ac4d0d9b20"}, + {file = "scipy-1.14.0.tar.gz", hash = "sha256:b5923f48cb840380f9854339176ef21763118a7300a88203ccd0bdd26e58527b"}, ] [package.dependencies] -numpy = ">=1.22.4,<2.3" +numpy = ">=1.23.5,<2.3" [package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "setuptools" @@ -4516,13 +4555,13 @@ files = [ [[package]] name = "tenacity" -version = "8.4.1" +version = "8.4.2" description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" files = [ - {file = "tenacity-8.4.1-py3-none-any.whl", hash = "sha256:28522e692eda3e1b8f5e99c51464efcc0b9fc86933da92415168bc1c4e2308fa"}, - {file = "tenacity-8.4.1.tar.gz", hash = "sha256:54b1412b878ddf7e1f1577cd49527bad8cdef32421bd599beac0c6c3f10582fd"}, + {file = "tenacity-8.4.2-py3-none-any.whl", hash = "sha256:9e6f7cf7da729125c7437222f8a522279751cdfbe6b67bfe64f75d3a348661b2"}, + {file = "tenacity-8.4.2.tar.gz", hash = "sha256:cd80a53a79336edba8489e767f729e4f391c896956b57140b5d7511a64bbd3ef"}, ] [package.extras] @@ -4992,13 +5031,13 @@ types-pyOpenSSL = "*" [[package]] name = "types-requests" -version = "2.32.0.20240602" +version = "2.32.0.20240622" description = "Typing stubs for requests" -optional = true +optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.32.0.20240602.tar.gz", hash = "sha256:3f98d7bbd0dd94ebd10ff43a7fbe20c3b8528acace6d8efafef0b6a184793f06"}, - {file = "types_requests-2.32.0.20240602-py3-none-any.whl", hash = "sha256:ed3946063ea9fbc6b5fc0c44fa279188bae42d582cb63760be6cb4b9d06c3de8"}, + {file = "types-requests-2.32.0.20240622.tar.gz", hash = "sha256:ed5e8a412fcc39159d6319385c009d642845f250c63902718f605cd90faade31"}, + {file = "types_requests-2.32.0.20240622-py3-none-any.whl", hash = "sha256:97bac6b54b5bd4cf91d407e62f0932a74821bc2211f22116d9ee1dd643826caf"}, ] [package.dependencies] @@ -5006,13 +5045,13 @@ urllib3 = ">=2" [[package]] name = "types-setuptools" -version = "70.0.0.20240524" +version = "70.1.0.20240625" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-70.0.0.20240524.tar.gz", hash = "sha256:e31fee7b9d15ef53980526579ac6089b3ae51a005a281acf97178e90ac71aff6"}, - {file = "types_setuptools-70.0.0.20240524-py3-none-any.whl", hash = "sha256:8f5379b9948682d72a9ab531fbe52932e84c4f38deda570255f9bae3edd766bc"}, + {file = "types-setuptools-70.1.0.20240625.tar.gz", hash = "sha256:eb7175c9a304de4de9f4dfd0f299c754ac94cd9e30a262fbb5ff3047a0a6c517"}, + {file = "types_setuptools-70.1.0.20240625-py3-none-any.whl", hash = "sha256:181986729bdae9fa7efc7d37f1578361739e35dd6ec456d37de8e8f3bd2be1ef"}, ] [[package]] @@ -5078,13 +5117,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.26.2" +version = "20.26.3" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, - {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, + {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, + {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, ] [package.dependencies] @@ -5364,4 +5403,4 @@ groq = ["groq"] [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.13" -content-hash = "2e9659e693e36195206a24d640372e1c8593259337195e6025788f322e21eec6" +content-hash = "bf350a60e7a47dd53d3024fad30e62b8a8eb9a2c3678b523202aafb6d3930928" diff --git a/pyproject.toml b/pyproject.toml index 45ca72440..c0a3e5765 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,6 @@ langchain = "~0.2.5" rich = "^13.6.0" PettingZoo = "1.24.3" redis-om = "^0.2.1" -types-tqdm = "*" gin-config = "^0.5.0" absl-py = "^2.0.0" together = "^0.2.4" @@ -42,6 +41,8 @@ pandas = { version = "^2.1.1", optional = true } pre-commit = "*" nbmake = "*" types-setuptools = "*" +types-requests = "*" +types-tqdm = "*" ruff = "*" [tool.poetry.group.test.dependencies] @@ -79,4 +80,4 @@ testpaths = ["tests"] python_files = "test_*.py" [tool.poetry.scripts] -sotopia_benchmark = "sotopia.benchmark:app" +sotopia = "sotopia.cli:app" diff --git a/sotopia/benchmark/__init__.py b/sotopia/benchmark/__init__.py deleted file mode 100644 index 72727355b..000000000 --- a/sotopia/benchmark/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .cli import app - -__all__ = ["app"] diff --git a/sotopia/cli/__init__.py b/sotopia/cli/__init__.py new file mode 100644 index 000000000..9eb681331 --- /dev/null +++ b/sotopia/cli/__init__.py @@ -0,0 +1,5 @@ +from .app import app +from .install import install +from .benchmark import benchmark + +__all__ = ["app", "install", "benchmark"] diff --git a/sotopia/cli/app.py b/sotopia/cli/app.py new file mode 100644 index 000000000..b0e7b8606 --- /dev/null +++ b/sotopia/cli/app.py @@ -0,0 +1,3 @@ +from typer import Typer + +app = Typer() diff --git a/sotopia/cli/benchmark/__init__.py b/sotopia/cli/benchmark/__init__.py new file mode 100644 index 000000000..4804e25ff --- /dev/null +++ b/sotopia/cli/benchmark/__init__.py @@ -0,0 +1,3 @@ +from .benchmark import benchmark + +__all__ = ["benchmark"] diff --git a/sotopia/benchmark/cli.py b/sotopia/cli/benchmark/benchmark.py similarity index 99% rename from sotopia/benchmark/cli.py rename to sotopia/cli/benchmark/benchmark.py index 9f519ac5b..18455f02c 100644 --- a/sotopia/benchmark/cli.py +++ b/sotopia/cli/benchmark/benchmark.py @@ -34,8 +34,7 @@ import typer from pathlib import Path - -app = typer.Typer() +from ..app import app def check_existing_episodes( @@ -264,7 +263,7 @@ def _set_up_logs( @app.command() -def cli( +def benchmark( model: str = typer.Option(..., help="The language model you want to benchmark."), partner_model: str = typer.Option( "together_ai/meta-llama/Llama-3-70b-chat-hf", @@ -297,7 +296,3 @@ def cli( verbose=False, push_to_db=True, ) - - -if __name__ == "__main__": - app() diff --git a/sotopia/cli/install/__init__.py b/sotopia/cli/install/__init__.py new file mode 100644 index 000000000..b4bb91e92 --- /dev/null +++ b/sotopia/cli/install/__init__.py @@ -0,0 +1,3 @@ +from .install import install + +__all__ = ["install"] diff --git a/sotopia/cli/install/install.py b/sotopia/cli/install/install.py new file mode 100644 index 000000000..746230cd5 --- /dev/null +++ b/sotopia/cli/install/install.py @@ -0,0 +1,407 @@ +import subprocess +from typing import Literal, Optional +from pydantic import BaseModel +import rich +import rich.errors +from ..rich_pixels import Pixels + +from rich.prompt import Prompt +from rich.segment import Segment +from rich.style import Style + +from pathlib import Path + +import typer +from .menu import Menu +import tempfile + +from ..app import app + + +def _get_system() -> Literal["Linux", "Darwin", "Windows"]: + import platform + + system = platform.system() + if system == "Linux": + return "Linux" + elif system == "Darwin": + return "Darwin" + elif system == "Windows": + return "Windows" + else: + raise ValueError( + f"You are using {system} which is not supported. Please use Linux, MacOS or Windows." + ) + + +class Dataset(BaseModel): + id: str + display_name: str + url: str + venue: str + license: str + citation: str + + +class Datasets(BaseModel): + datasets: list[Dataset] + + +def _get_dataset_to_be_loaded( + published_datasets: Datasets, console: rich.console.Console +) -> str: + menu = Menu( + *( + f"{dataset.display_name} ({dataset.venue}, {dataset.license})" + for dataset in published_datasets.datasets + ), + "None of the above, I want only an empty database.", + "No, I have a custom URL.", + start_index=0, + align="left", + rule_title="Select the dataset to be loaded", + ) + + dataset = menu.ask(return_index=True) + assert isinstance(dataset, int) + + if dataset < len(published_datasets.datasets): + console.log( + f"""Loading the database with data from {published_datasets.datasets[dataset].url}. +This data is from the {published_datasets.datasets[dataset].display_name}. +Licensed under {published_datasets.datasets[dataset].license}. +Please cite the following paper(s) if you use this data: +{published_datasets.datasets[dataset].citation}""" + ) + return published_datasets.datasets[dataset].url + elif dataset == len(published_datasets.datasets): + console.log("Starting redis with an empty database.") + return "" + else: + custom_load_database_url = Prompt.ask( + "Enter the URL to load the database with initial data from.", + ) + if custom_load_database_url == "": + console.log("Starting redis with an empty database.") + return "" + else: + console.log( + f"Loading the database with initial data from {custom_load_database_url}." + ) + return custom_load_database_url + + +_pixel_art = """\ + + +███████ ███████ ██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ +█████ ██ ██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ +█████ ███ ████████ ██████████████ ███████████████████████████ ████████████████xx████████████████████████x███████████████xxx█xxx███ +█████ ██████ ███████ █████ ███ ███ ████ ████ ██ ██████████ ███████xx██x██xxxxx████xxxxx███xxxxxxx███xxxxx███xxx█xxx███ +█████ ███ ████████ ████ ██ ███ █████ ██ ██ █ ██ ██ ██ ██████xx██xxx██xxxx██xx████████xxx████xxx███xx██xxx█xxx███ +█████ ██ █████████████ █ █████ ██ ████ █████ █ ██████ ██ ██ ████ ██████xx██xx█████xx██xxxxxx████xxx████xx████xx██xxx█xxx███ +█████ ██████ ███████ ██████ █ ████ ███ ████ ████ █ ████ ██ █ ████ ██████xx██xx█████xx████████xx██xxx████xx████xx██xxx█xxx███ +█████ ███ █████████ ███ █████ ███ ███ █ ███ ██ █████xx██xx█████xx██xxxxxxxx███xxxxx█xxxxxxxxx█xxx█xxx███ +█████ ██ ████████████████████████████████████████████████ ████████████████████████████████████████████████████████████████████████████████ +█████ █████ ██████████████████████████████████████████████████ ████████████████████████████████████████████████████████████████████████████████ + + +""" + + +@app.command() +def install( + use_docker: Optional[bool] = typer.Option(None, help="Install redis using docker."), + load_database: Optional[bool] = typer.Option( + None, help="Load the database with initial data." + ), + load_sotopia_pi_data: bool = typer.Option( + True, + help="Load the database with initial data from Sotopia π. Only applicable if `load_database` is True.", + ), + custom_database_url: Optional[str] = typer.Option( + None, help="Load the database with initial data from a custom URL." + ), + redis_data_path: Optional[str] = typer.Option( + None, + help="Path to store the redis data. Only applicable if `use_docker` is True.", + ), + overwrite_existing_data: Optional[bool] = typer.Option( + None, help="Overwrite existing data in the redis data path." + ), +) -> None: + console = rich.console.Console() + mapping = { + " ": Segment(" ", Style.parse("black on black")), + "█": Segment("█", Style.parse("white")), + "x": Segment("x", Style.parse("magenta on magenta")), + } + pixels = Pixels.from_ascii(_pixel_art, mapping) + console.print(pixels, justify="center") + system = _get_system() + + if use_docker is None: + if system == "Windows": + console.log( + "Installing Redis with Docker... Check if Docker Desktop is installed." + ) + use_docker = True + elif system == "Darwin": + use_docker = ( + Prompt.ask( + "Do you want to use Docker or Homebrew to install redis? We recommand you to use Docker.", + choices=["Docker", "Homebrew"], + default="Docker", + console=console, + ) + == "Docker" + ) + else: + use_docker = ( + Prompt.ask( + "Do you want to use Docker to install redis or directly install Redis stack binary? We recommand you to use Docker.", + choices=["Docker", "Binary"], + default="Docker", + console=console, + ) + == "Docker" + ) + + if use_docker: + try: + subprocess.check_output("command -v docker", shell=True) + except subprocess.CalledProcessError: + if system == "Darwin": + console.log( + """Docker is not installed. + Please check https://docs.docker.com/desktop/install/mac-install/, + or install it using homebrew with `brew install --cask docker`. + And then run this command again. + """ + ) + elif system == "Linux": + console.log( + """Docker is not installed. + Please check https://docs.docker.com/engine/install/ubuntu/. + And then run this command again. + """ + ) + else: + console.log( + """Docker is not installed. + Please check https://docs.docker.com/desktop/install/windows-install/. + And then run this command again. + """ + ) + exit(1) + try: + subprocess.check_output("docker ps", shell=True) + except subprocess.CalledProcessError: + if system == "Darwin": + console.log( + """Docker Daemon was not started. Please launch Docker App. + """ + ) + elif system == "Linux": + console.log( + """Docker Daemon was not started. Please run `dockerd` + """ + ) + else: + console.log( + """Docker Daemon was not started. Please launch Docker App. + """ + ) + exit(1) + else: + if system == "Windows": + console.log("""For Windows, unfortunately only docker is supported. + Check the official documentation: + https://redis.io/docs/latest/operate/oss_and_stack/install/install-stack/windows/. + """) + exit(1) + elif system == "Darwin": + # check if homebrew is installed + try: + subprocess.check_output("command -v brew", shell=True) + subprocess.run("brew update-reset", shell=True, check=True) + except subprocess.CalledProcessError: + console.log( + """Homebrew is required for install redis without docker on MacOS. + Please check https://brew.sh/. + And then run this command again. + """ + ) + exit(1) + + next_state: Literal["ask_data_source", "empty_database", "custom_url"] | None = None + url = "" + + if load_database is None: + load_database = ( + Prompt.ask( + "Do you want to load the database with published data?", + choices=["Yes", "No"], + default="Yes", + console=console, + ) + == "Yes" + ) + if load_database: + next_state = "ask_data_source" + else: + next_state = "empty_database" + elif not load_database: + next_state = "empty_database" + else: + if load_sotopia_pi_data: + next_state = "custom_url" + url = "https://huggingface.co/datasets/cmu-lti/sotopia-pi/resolve/main/dump.rdb?download=true" + elif custom_database_url is None: + next_state = "ask_data_source" + else: + next_state = "custom_url" + url = custom_database_url + + if next_state == "ask_data_source": + fn = Path(__file__).parent / "published_datasets.json" + published_datasets = Datasets.parse_file(fn) + url = _get_dataset_to_be_loaded(published_datasets, console) + next_state = "custom_url" + + assert next_state in ["custom_url", "empty_database"] + + tmpdir_context = tempfile.TemporaryDirectory() + tmpdir = tmpdir_context.__enter__() + + if url: + try: + subprocess.run(f"curl -L {url} -o {Path(tmpdir) / 'dump.rdb'}", shell=True) + console.log("Database downloaded successfully.") + except subprocess.CalledProcessError: + console.log("Database download failed. Please check the URL and try again.") + else: + console.log("Starting redis with an empty database.") + + if use_docker: + current_directory = Path(__file__).parent + if redis_data_path is None: + directory = Prompt.ask( + "Enter the directory where you want to store the data. Press enter to use the current directory.", + default=current_directory, + ) + else: + directory = redis_data_path + (Path(directory) / "redis-data").mkdir(parents=True, exist_ok=True) + if load_database: + if Path.exists(Path(directory) / "redis-data" / "dump.rdb"): + cover_existing = ( + Prompt.ask( + "The directory already contains a dump.rdb file. Do you want to overwrite it?", + choices=["Yes", "No"], + default="No", + console=console, + ) + if overwrite_existing_data is None + else "Yes" + if overwrite_existing_data + else "No" + ) + if cover_existing == "No": + console.log( + "Exiting the installation. Please provide a different directory." + ) + exit(0) + else: + (Path(tmpdir) / "dump.rdb").rename( + Path(directory) / "redis-data/dump.rdb" + ) + try: + subprocess.run( + f"docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 -v {directory}/redis-data:/data/ redis/redis-stack:latest", + shell=True, + check=True, + ) + console.log( + "Redis started successfully. To stop redis, run `docker stop redis-stack`. To restart, run `docker restart redis-stack`." + ) + except subprocess.CalledProcessError: + console.log("Redis start failed. Please check the logs and try again.") + else: + if system == "Darwin": + try: + subprocess.run( + "brew tap redis-stack/redis-stack", shell=True, check=True + ) + subprocess.run("brew install redis-stack", shell=True, check=True) + if load_database: + if Path("/opt/homebrew/var/db/redis-stack/dump.rdb").exists(): + cover_existing = ( + Prompt.ask( + "The directory already contains a dump.rdb file. Do you want to overwrite it?", + choices=["Yes", "No"], + default="No", + console=console, + ) + if overwrite_existing_data is None + else "Yes" + if overwrite_existing_data + else "No" + ) + if cover_existing == "No": + console.log( + "Exiting the installation. Please provide a different directory." + ) + exit(0) + else: + Path("/opt/homebrew/var/db/redis-stack/").mkdir( + parents=True, exist_ok=True + ) + subprocess.run( + f"mv {tmpdir}/dump.rdb /opt/homebrew/var/db/redis-stack/dump.rdb", + shell=True, + check=True, + ) + subprocess.run( + "redis-stack-server --daemonize yes", shell=True, check=True + ) + console.log( + "Redis started successfully. To stop redis, run `redis-cli shutdown`. To restart, run this script again." + ) + except subprocess.CalledProcessError: + console.log("Redis start failed. Please check the logs and try again.") + elif system == "Linux": + try: + subprocess.run( + "curl -fsSL https://packages.redis.io/redis-stack/redis-stack-server-7.2.0-v10.focal.x86_64.tar.gz -o redis-stack-server.tar.gz", + shell=True, + check=True, + ) + subprocess.run( + "tar -xvzf redis-stack-server.tar.gz", shell=True, check=True + ) + if load_database: + Path("./redis-stack-server-7.2.0-v10/var/db/redis-stack").mkdir( + parents=True, exist_ok=True + ) + subprocess.run( + f"mv {tmpdir}/dump.rdb ./redis-stack-server-7.2.0-v10/var/db/redis-stack/dump.rdb", + shell=True, + check=True, + ) + subprocess.run( + "./redis-stack-server-7.2.0-v10/bin/redis-stack-server --daemonize yes", + shell=True, + check=True, + ) + console.log( + "Redis started successfully. To stop redis, run `./redis-stack-server-7.2.0-v10/bin/redis-cli shutdown`. To restart, run this script again." + ) + except subprocess.CalledProcessError: + console.log("Redis start failed. Please check the logs and try again.") + + tmpdir_context.__exit__(None, None, None) + + +if __name__ == "__main__": + app() diff --git a/sotopia/cli/install/menu.py b/sotopia/cli/install/menu.py new file mode 100644 index 000000000..9d35a9f23 --- /dev/null +++ b/sotopia/cli/install/menu.py @@ -0,0 +1,115 @@ +# Intially created by: +# gbPagano +# https://github.com/gbPagano/rich_menu + +from typing import Literal +import click +from rich.align import Align +from rich.console import Group +from rich.live import Live +from rich.panel import Panel +from rich.rule import Rule +from rich.text import Text + + +class Menu: + def __init__( + self, + *options: str, + start_index: int = 0, + rule_title: str = "MENU", + panel_title: str = "", + color: str = "bold green", + align: Literal["left", "center", "right"] = "center", + selection_char: str = ">", + ): + self.options = options + self.index = start_index + self.rule_tile = rule_title + self.panel_title = panel_title + self.color = color + self.align = align + self.selection_char = selection_char + + def _get_click(self) -> str | None: + match click.getchar(): + case "\r": + return "enter" + case "\x1b[B" | "s" | "S" | "àP": + return "down" + case "\x1b[A" | "w" | "W" | "àH": + return "up" + case "\x1b[D" | "a" | "A" | "àK": + return "left" + case "\x1b[C" | "d" | "D" | "àM": + return "right" + case "\x1b": + return "exit" + case _: + return None + + def _update_index(self, key: str) -> None: + if key == "down": + self.index += 1 + elif key == "up": + self.index -= 1 + + if self.index > len(self.options) - 1: + self.index = 0 + elif self.index < 0: + self.index = len(self.options) - 1 + + @property + def _group(self) -> Group: + menu = Text(justify="left") + + selected = Text(self.selection_char + " ", self.color) + not_selected = Text(" " * (len(self.selection_char) + 1)) + selections = [not_selected] * len(self.options) + selections[self.index] = selected + + for idx, option in enumerate(self.options): + menu.append(Text.assemble(selections[idx], option + "\n")) + menu.rstrip() + + panel = Panel.fit(menu) + panel.title = Text(self.panel_title, self.color) + if self.rule_tile: + group = Group( + Rule(self.rule_tile, style=self.color), + Align(panel, self.align), + ) + else: + group = Group( + Align(panel, self.align), + ) + + return group + + def _clean_menu(self) -> None: + rule = 1 if self.rule_tile else 0 + for _ in range(len(self.options) + rule + 2): + print("\x1b[A\x1b[K", end="") + + def ask( + self, screen: bool = True, esc: bool = True, return_index: bool = False + ) -> str | int: + with Live(self._group, auto_refresh=False, screen=screen) as live: + live.update(self._group, refresh=True) + while True: + try: + key = self._get_click() + if key == "enter": + break + elif key == "exit" and esc: + exit() + elif key in ["up", "down"]: + self._update_index(key) + live.update(self._group, refresh=True) + except (KeyboardInterrupt, EOFError): + exit() + + if not screen: + self._clean_menu() + + return self.options[self.index] if not return_index else self.index diff --git a/sotopia/cli/install/published_datasets.json b/sotopia/cli/install/published_datasets.json new file mode 100644 index 000000000..f7600f94c --- /dev/null +++ b/sotopia/cli/install/published_datasets.json @@ -0,0 +1,28 @@ +{ + "datasets": [ + { + "id": "sotopia-pi", + "display_name": "Sotopia-\u03c0 Dataset", + "url": "https://huggingface.co/datasets/cmu-lti/sotopia-pi/resolve/main/dump.rdb?download=true", + "venue": "ACL 2024", + "license": "CC-BY-SA 4.0", + "citation": "@inproceedings{\n wang2024sotopiapi,\n title={SOTOPIA-$\\pi$: Interactive Learning of Socially Intelligent Language Agents},\n author={Ruiyi Wang and Haofei Yu and Wenxin Zhang and Zhengyang Qi and Maarten Sap and Graham Neubig and Yonatan Bisk and Hao Zhu},\"\n booktitle={Proceedings of the Annual Meeting of the Association for Computational Linguistics (ACL) 2024},\n year={2024},\n}\n@inproceedings{\n zhou2024sotopia,\n title={{SOTOPIA}: Interactive Evaluation for Social Intelligence in Language Agents},\n author={Xuhui Zhou and Hao Zhu and Leena Mathur and Ruohong Zhang and Haofei Yu and Zhengyang Qi and Louis-Philippe Morency and Yonatan Bisk and Daniel Fried and Graham Neubig and Maarten Sap},\n booktitle={The Twelfth International Conference on Learning Representations},\n year={2024},\n url={https://openreview.net/forum?id=mM7VurbA4r}\n}\n" + }, + { + "id": "sotopia", + "display_name": "Sotopia Dataset", + "url": "https://cmu.box.com/shared/static/xiivc5z8rnmi1zr6vmk1ohxslylvynur", + "venue": "ICLR 2024", + "license": "CC-BY-SA 4.0", + "citation": "@inproceedings{\n zhou2024sotopia,\n title={{SOTOPIA}: Interactive Evaluation for Social Intelligence in Language Agents},\n author={Xuhui Zhou and Hao Zhu and Leena Mathur and Ruohong Zhang and Haofei Yu and Zhengyang Qi and Louis-Philippe Morency and Yonatan Bisk and Daniel Fried and Graham Neubig and Maarten Sap},\n booktitle={The Twelfth International Conference on Learning Representations},\n year={2024},\n url={https://openreview.net/forum?id=mM7VurbA4r}\n}\n" + }, + { + "id": "agent_vs_script", + "display_name": "Agent vs. Script Dataset", + "url": "https://huggingface.co/datasets/cmu-lti/agent_vs_script/resolve/main/dump.rdb?download=true", + "venue": "arXiv", + "license": "AI2 Impact License", + "citation": "@misc{zhou2024real,\n title={Is this the real life? Is this just fantasy? The Misleading Success of Simulating Social Interactions With LLMs},\n author={Xuhui Zhou and Zhe Su and Tiwalayo Eisape and Hyunwoo Kim and Maarten Sap},\n year={2024}}\n eprint={2403.05020},\n archivePrefix={arXiv},\n}\n@inproceedings{\n zhou2024sotopia,\n title={{SOTOPIA}: Interactive Evaluation for Social Intelligence in Language Agents},\n author={Xuhui Zhou and Hao Zhu and Leena Mathur and Ruohong Zhang and Haofei Yu and Zhengyang Qi and Louis-Philippe Morency and Yonatan Bisk and Daniel Fried and Graham Neubig and Maarten Sap},\n booktitle={The Twelfth International Conference on Learning Representations},\n year={2024},\n url={https://openreview.net/forum?id=mM7VurbA4r}\n}\n" + } + ] +} diff --git a/sotopia/cli/rich_pixels/__init__.py b/sotopia/cli/rich_pixels/__init__.py new file mode 100644 index 000000000..d34237bbd --- /dev/null +++ b/sotopia/cli/rich_pixels/__init__.py @@ -0,0 +1,9 @@ +# Initially created by +# Darren Burns +# https://github.com/darrenburns/rich-pixels + +from ._pixel import Pixels + +__all__ = [ + "Pixels", +] diff --git a/sotopia/cli/rich_pixels/_pixel.py b/sotopia/cli/rich_pixels/_pixel.py new file mode 100644 index 000000000..09523edcf --- /dev/null +++ b/sotopia/cli/rich_pixels/_pixel.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +from typing import Iterable, Mapping, Optional + +from rich.console import Console, ConsoleOptions, RenderResult +from rich.segment import Segment, Segments + + +class Pixels: + def __init__(self) -> None: + self._segments: Segments | None = None + + @staticmethod + def from_segments( + segments: Iterable[Segment], + ) -> Pixels: + """Create a Pixels object from an Iterable of Segments instance.""" + pixels = Pixels() + pixels._segments = Segments(segments) + return pixels + + @staticmethod + def from_ascii( + grid: str, mapping: Optional[Mapping[str, Segment]] = None + ) -> Pixels: + """ + Create a Pixels object from a 2D-grid of ASCII characters. + Each ASCII character can be mapped to a Segment (a character and style combo), + allowing you to add a splash of colour to your grid. + + Args: + grid: A 2D grid of characters (a multi-line string). + mapping: Maps ASCII characters to Segments. Occurrences of a character + will be replaced with the corresponding Segment. + """ + if mapping is None: + mapping = {} + + if not grid: + return Pixels.from_segments([]) + + segments = [] + for character in grid: + segment = mapping.get(character, Segment(character)) + segments.append(segment) + + return Pixels.from_segments(segments) + + def __rich_console__( + self, console: Console, options: ConsoleOptions + ) -> RenderResult: + yield self._segments or "" diff --git a/tests/cli/test_install.py b/tests/cli/test_install.py new file mode 100644 index 000000000..350db9107 --- /dev/null +++ b/tests/cli/test_install.py @@ -0,0 +1,56 @@ +import platform +from typer.testing import CliRunner + +from sotopia.cli import app +import subprocess +import time + +runner = CliRunner() + + +def test_install() -> None: + if platform.system() == "Darwin": + result = runner.invoke( + app, + [ + "install", + "--no-use-docker", + "--no-load-database", + "--overwrite-existing-data", + ], + ) + assert result.exit_code == 0 + time.sleep(1) + subprocess.run("redis-cli shutdown", shell=True, check=True) + elif platform.system() == "Linux": + result = runner.invoke( + app, + [ + "install", + "--no-use-docker", + "--load-database", + "--overwrite-existing-data", + ], + ) + assert result.exit_code == 0 + time.sleep(1) + subprocess.run( + "./redis-stack-server-7.2.0-v10/bin/redis-cli shutdown", + shell=True, + check=True, + ) + + if platform.system() == "Darwin": + result = runner.invoke(app, ["install"], input="Homebrew\nNo\n") + assert result.exit_code == 0 + time.sleep(1) + subprocess.run("redis-cli shutdown", shell=True, check=True) + elif platform.system() == "Linux": + result = runner.invoke(app, ["install"], input="Docker\nNo\n\n") + assert result.exit_code == 0 + time.sleep(1) + subprocess.run( + "docker stop redis-stack", + shell=True, + check=True, + )