diff --git a/.github/workflows/ghcr_runtime.yml b/.github/workflows/ghcr-build.yml similarity index 73% rename from .github/workflows/ghcr_runtime.yml rename to .github/workflows/ghcr-build.yml index 4963398aa359..71f36b85fbe8 100644 --- a/.github/workflows/ghcr_runtime.yml +++ b/.github/workflows/ghcr-build.yml @@ -25,7 +25,69 @@ on: required: true default: '' +env: + BASE_IMAGE_FOR_HASH_EQUIVALENCE_TEST: nikolaik/python-nodejs:python3.11-nodejs22 + jobs: + # Builds the OpenHands Docker images + ghcr_build_app: + name: Build App Image + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + outputs: + hash_from_app_image: ${{ steps.get_hash_in_app_image.outputs.hash_from_app_image }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Free Disk Space (Ubuntu) + uses: jlumbroso/free-disk-space@main + with: + # this might remove tools that are actually needed, + # if set to "true" but frees about 6 GB + tool-cache: true + # all of these default to true, but feel free to set to + # "false" if necessary for your workflow + android: true + dotnet: true + haskell: true + large-packages: true + docker-images: false + swap-storage: true + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v3 + - name: Build and push app image + if: "!github.event.pull_request.head.repo.fork" + run: | + ./containers/build.sh openhands ${{ github.repository_owner }} --push + - name: Build app image + if: "github.event.pull_request.head.repo.fork" + run: | + ./containers/build.sh openhands image ${{ github.repository_owner }} + - name: Get hash in App Image + id: get_hash_in_app_image + run: | + # Lowercase the repository owner + export REPO_OWNER=${{ github.repository_owner }} + REPO_OWNER=$(echo $REPO_OWNER | tr '[:upper:]' '[:lower:]') + # Run the build script in the app image + docker run -e SANDBOX_USER_ID=0 -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/${REPO_OWNER}/openhands:${{ github.sha }} /bin/bash -c "mkdir -p containers/runtime; python3 openhands/runtime/utils/runtime_build.py --base_image ${{ env.BASE_IMAGE_FOR_HASH_EQUIVALENCE_TEST }} --build_folder containers/runtime --force_rebuild" 2>&1 | tee docker-outputs.txt + # Get the hash from the build script + hash_from_app_image=$(cat docker-outputs.txt | grep "Hash for docker build directory" | awk -F "): " '{print $2}' | uniq | head -n1) + echo "hash_from_app_image=$hash_from_app_image" >> $GITHUB_OUTPUT + echo "Hash from app image: $hash_from_app_image" + + # Builds the runtime Docker images ghcr_build_runtime: name: Build Image @@ -104,6 +166,56 @@ jobs: name: runtime-${{ matrix.base_image.tag }} path: /tmp/runtime-${{ matrix.base_image.tag }}.tar + verify_hash_equivalence_in_runtime_and_app: + name: Verify Hash Equivalence in Runtime and Docker images + runs-on: ubuntu-latest + needs: [ghcr_build_runtime, ghcr_build_app] + strategy: + fail-fast: false + matrix: + base_image: ['nikolaik'] + steps: + - uses: actions/checkout@v4 + - name: Cache Poetry dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cache/pypoetry + ~/.virtualenvs + key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }} + restore-keys: | + ${{ runner.os }}-poetry- + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + - name: Install poetry via pipx + run: pipx install poetry + - name: Install Python dependencies using Poetry + run: make install-python-dependencies + - name: Get hash in App Image + run: | + echo "Hash from app image: ${{ needs.ghcr_build_app.outputs.hash_from_app_image }}" + echo "hash_from_app_image=${{ needs.ghcr_build_app.outputs.hash_from_app_image }}" >> $GITHUB_ENV + + - name: Get hash using code (development mode) + run: | + mkdir -p containers/runtime + poetry run python3 openhands/runtime/utils/runtime_build.py --base_image ${{ env.BASE_IMAGE_FOR_HASH_EQUIVALENCE_TEST }} --build_folder containers/runtime --force_rebuild > output.txt 2>&1 + hash_from_code=$(cat output.txt | grep "Hash for docker build directory" | awk -F "): " '{print $2}' | uniq | head -n1) + echo "hash_from_code=$hash_from_code" >> $GITHUB_ENV + + - name: Compare hashes + run: | + echo "Hash from App Image: ${{ env.hash_from_app_image }}" + echo "Hash from Code: ${{ env.hash_from_code }}" + if [ "${{ env.hash_from_app_image }}" = "${{ env.hash_from_code }}" ]; then + echo "Hashes match!" + else + echo "Hashes do not match!" + exit 1 + fi + # Run unit tests with the EventStream runtime Docker images as root test_runtime_root: name: RT Unit Tests (Root) @@ -341,7 +453,7 @@ jobs: name: All Runtime Tests Passed if: ${{ !cancelled() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }} runs-on: ubuntu-latest - needs: [test_runtime_root, test_runtime_oh, runtime_integration_tests_on_linux] + needs: [test_runtime_root, test_runtime_oh, runtime_integration_tests_on_linux, verify_hash_equivalence_in_runtime_and_app] steps: - name: All tests passed run: echo "All runtime tests have passed successfully!" @@ -350,7 +462,7 @@ jobs: name: All Runtime Tests Passed if: ${{ cancelled() || contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} runs-on: ubuntu-latest - needs: [test_runtime_root, test_runtime_oh, runtime_integration_tests_on_linux] + needs: [test_runtime_root, test_runtime_oh, runtime_integration_tests_on_linux, verify_hash_equivalence_in_runtime_and_app] steps: - name: Some tests failed run: | diff --git a/.github/workflows/ghcr_app.yml b/.github/workflows/ghcr_app.yml deleted file mode 100644 index b9d349eb6886..000000000000 --- a/.github/workflows/ghcr_app.yml +++ /dev/null @@ -1,65 +0,0 @@ -# Workflow that builds, tests and then pushes the app docker images to the ghcr.io repository -name: Build and Publish App Image - -# Always run on "main" -# Always run on tags -# Always run on PRs -# Can also be triggered manually -on: - push: - branches: - - main - tags: - - '*' - pull_request: - workflow_dispatch: - inputs: - reason: - description: 'Reason for manual trigger' - required: true - default: '' - -jobs: - # Builds the OpenHands Docker images - ghcr_build: - name: Build App Image - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Free Disk Space (Ubuntu) - uses: jlumbroso/free-disk-space@main - with: - # this might remove tools that are actually needed, - # if set to "true" but frees about 6 GB - tool-cache: true - # all of these default to true, but feel free to set to - # "false" if necessary for your workflow - android: true - dotnet: true - haskell: true - large-packages: true - docker-images: false - swap-storage: true - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Login to GHCR - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v3 - - name: Build and push app image - if: "!github.event.pull_request.head.repo.fork" - run: | - ./containers/build.sh openhands ${{ github.repository_owner }} --push - - name: Build app image - if: "github.event.pull_request.head.repo.fork" - run: | - ./containers/build.sh openhands image ${{ github.repository_owner }} diff --git a/.gitignore b/.gitignore index 5a23f29a9062..b376c077715b 100644 --- a/.gitignore +++ b/.gitignore @@ -217,8 +217,6 @@ config.toml config.toml_ config.toml.bak -containers/agnostic_sandbox - # swe-bench-eval image_build_logs run_instance_logs diff --git a/containers/app/Dockerfile b/containers/app/Dockerfile index 0c4b21e14561..4d65c765451d 100644 --- a/containers/app/Dockerfile +++ b/containers/app/Dockerfile @@ -70,10 +70,11 @@ RUN playwright install --with-deps chromium COPY --chown=openhands:app --chmod=770 ./openhands ./openhands COPY --chown=openhands:app --chmod=777 ./openhands/runtime/plugins ./openhands/runtime/plugins COPY --chown=openhands:app --chmod=770 ./agenthub ./agenthub -COPY --chown=openhands:app --chmod=770 ./pyproject.toml ./pyproject.toml -COPY --chown=openhands:app --chmod=770 ./poetry.lock ./poetry.lock -COPY --chown=openhands:app --chmod=770 ./README.md ./README.md -COPY --chown=openhands:app --chmod=770 ./MANIFEST.in ./MANIFEST.in +COPY --chown=openhands:app ./pyproject.toml ./pyproject.toml +COPY --chown=openhands:app ./poetry.lock ./poetry.lock +COPY --chown=openhands:app ./README.md ./README.md +COPY --chown=openhands:app ./MANIFEST.in ./MANIFEST.in +COPY --chown=openhands:app ./LICENSE ./LICENSE # This is run as "openhands" user, and will create __pycache__ with openhands:openhands ownership RUN python openhands/core/download.py # No-op to download assets diff --git a/containers/sandbox/Dockerfile b/containers/sandbox/Dockerfile deleted file mode 100644 index c13f90d6d117..000000000000 --- a/containers/sandbox/Dockerfile +++ /dev/null @@ -1,44 +0,0 @@ -FROM ubuntu:22.04 - -# install basic packages -RUN apt-get update && apt-get install -y \ - curl \ - wget \ - git \ - vim \ - nano \ - unzip \ - zip \ - python3 \ - python3-pip \ - python3-venv \ - python3-dev \ - build-essential \ - openssh-server \ - sudo \ - gcc \ - jq \ - g++ \ - make \ - iproute2 \ - && rm -rf /var/lib/apt/lists/* - -RUN mkdir -p -m0755 /var/run/sshd - -# symlink python3 to python -RUN ln -s /usr/bin/python3 /usr/bin/python - -# ==== OpenHands Runtime Client ==== -RUN mkdir -p /openhands && mkdir -p /openhands/logs && chmod 777 /openhands/logs -RUN wget --progress=bar:force -O Miniforge3.sh "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh" -RUN bash Miniforge3.sh -b -p /openhands/miniforge3 -RUN chmod -R g+w /openhands/miniforge3 -RUN bash -c ". /openhands/miniforge3/etc/profile.d/conda.sh && conda config --set changeps1 False && conda config --append channels conda-forge" -RUN echo "" > /openhands/bash.bashrc -RUN rm -f Miniforge3.sh - -# - agentskills dependencies -RUN /openhands/miniforge3/bin/pip install --upgrade pip -RUN /openhands/miniforge3/bin/pip install jupyterlab notebook jupyter_kernel_gateway flake8 -RUN /openhands/miniforge3/bin/pip install python-docx PyPDF2 python-pptx pylatexenc openai -RUN /openhands/miniforge3/bin/pip install python-dotenv toml termcolor pydantic python-docx pyyaml docker pexpect tenacity e2b browsergym minio diff --git a/containers/sandbox/config.sh b/containers/sandbox/config.sh deleted file mode 100644 index 706a45d45f27..000000000000 --- a/containers/sandbox/config.sh +++ /dev/null @@ -1,4 +0,0 @@ -DOCKER_REGISTRY=ghcr.io -DOCKER_ORG=all-hands-ai -DOCKER_IMAGE=sandbox -DOCKER_BASE_DIR="." diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9e120dd13846..2b5331b7485b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "openhands-frontend", - "version": "0.9.5", + "version": "0.9.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "openhands-frontend", - "version": "0.9.5", + "version": "0.9.6", "dependencies": { "@monaco-editor/react": "^4.6.0", "@nextui-org/react": "^2.4.8", @@ -41,7 +41,7 @@ "@testing-library/jest-dom": "^6.5.0", "@testing-library/react": "^16.0.1", "@testing-library/user-event": "^14.5.2", - "@types/node": "^22.7.2", + "@types/node": "^22.7.3", "@types/react": "^18.3.9", "@types/react-dom": "^18.3.0", "@types/react-highlight": "^0.12.8", @@ -4860,9 +4860,9 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "22.7.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.2.tgz", - "integrity": "sha512-866lXSrpGpgyHBZUa2m9YNWqHDjjM0aBTJlNtYaGEw4rqY/dcD7deRVTbBBAJelfA7oaGDbNftXF/TL/A6RgoA==", + "version": "22.7.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.3.tgz", + "integrity": "sha512-qXKfhXXqGTyBskvWEzJZPUxSslAiLaB6JGP1ic/XTH9ctGgzdgYguuLP1C601aRTSDNlLb0jbKqXjZ48GNraSA==", "devOptional": true, "dependencies": { "undici-types": "~6.19.2" diff --git a/frontend/package.json b/frontend/package.json index 01164b1c8869..bcc559200f6a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -64,7 +64,7 @@ "@testing-library/jest-dom": "^6.5.0", "@testing-library/react": "^16.0.1", "@testing-library/user-event": "^14.5.2", - "@types/node": "^22.7.2", + "@types/node": "^22.7.3", "@types/react": "^18.3.9", "@types/react-dom": "^18.3.0", "@types/react-highlight": "^0.12.8", diff --git a/openhands/__init__.py b/openhands/__init__.py index 5ef398095fb5..885a4267f9e8 100644 --- a/openhands/__init__.py +++ b/openhands/__init__.py @@ -1,3 +1,6 @@ +import os + + def get_version(): try: from importlib.metadata import PackageNotFoundError, version @@ -19,6 +22,16 @@ def get_version(): except ImportError: pass + # Try getting the version from pyproject.toml + try: + root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + with open(os.path.join(root_dir, 'pyproject.toml'), 'r') as f: + for line in f: + if line.startswith('version ='): + return line.split('=')[1].strip().strip('"') + except FileNotFoundError: + pass + return 'unknown' diff --git a/openhands/runtime/utils/runtime_build.py b/openhands/runtime/utils/runtime_build.py index 468adfe56016..cd2cbc9e19f0 100644 --- a/openhands/runtime/utils/runtime_build.py +++ b/openhands/runtime/utils/runtime_build.py @@ -143,14 +143,23 @@ def prep_docker_build_folder( file.write(dockerfile_content) # Get the MD5 hash of the dir_path directory - dist_hash = dirhash(dir_path, 'md5') + dir_hash = dirhash( + dir_path, + 'md5', + ignore=[ + '.*/', # hidden directories + '__pycache__/', + '*.pyc', + ], + ) + hash = f'v{oh_version}_{dir_hash}' logger.info( f'Input base image: {base_image}\n' f'Skip init: {skip_init}\n' f'Extra deps: {extra_deps}\n' - f'Hash for docker build directory [{dir_path}] (contents: {os.listdir(dir_path)}): {dist_hash}\n' + f'Hash for docker build directory [{dir_path}] (contents: {os.listdir(dir_path)}): {hash}\n' ) - return dist_hash + return hash def get_runtime_image_repo_and_tag(base_image: str) -> tuple[str, str]: diff --git a/poetry.lock b/poetry.lock index b92e33bae815..f8be08f5880a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aenum" @@ -571,17 +571,17 @@ files = [ [[package]] name = "boto3" -version = "1.35.27" +version = "1.35.28" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.27-py3-none-any.whl", hash = "sha256:3da139ca038032e92086e26d23833b557f0c257520162bfd3d6f580bf8032c86"}, - {file = "boto3-1.35.27.tar.gz", hash = "sha256:10d0fe15670b83a3f26572ab20d9152a064cee4c54b5ea9a1eeb1f0c3b807a7b"}, + {file = "boto3-1.35.28-py3-none-any.whl", hash = "sha256:dc088b86a14f17d3cd2e96915c6ccfd31bce640dfe9180df579ed311bc6bf0fc"}, + {file = "boto3-1.35.28.tar.gz", hash = "sha256:8960fc458b9ba3c8a9890a607c31cee375db821f39aefaec9ff638248e81644a"}, ] [package.dependencies] -botocore = ">=1.35.27,<1.36.0" +botocore = ">=1.35.28,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -590,13 +590,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.27" +version = "1.35.28" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.27-py3-none-any.whl", hash = "sha256:c299c70b5330a8634e032883ce8a72c2c6d9fdbc985d8191199cb86b92e7cbbd"}, - {file = "botocore-1.35.27.tar.gz", hash = "sha256:f68875c26cd57a9d22c0f7a981ecb1636d7ce4d0e35797e04765b53e7bfed3e7"}, + {file = "botocore-1.35.28-py3-none-any.whl", hash = "sha256:b66c78f3d6379bd16f0362f07168fa7699cdda3921fc880047192d96f2c8c527"}, + {file = "botocore-1.35.28.tar.gz", hash = "sha256:115d13f2172d8e9fa92e8d913f0e80092b97624d190f46772ed2930d4a355d55"}, ] [package.dependencies] @@ -609,32 +609,32 @@ crt = ["awscrt (==0.21.5)"] [[package]] name = "browsergym" -version = "0.7.0" +version = "0.7.1" description = "BrowserGym: a gym environment for web task automation in the Chromium browser" optional = false python-versions = ">3.7" files = [ - {file = "browsergym-0.7.0-py3-none-any.whl", hash = "sha256:e2b98d2990ec1bfd80fd3e8034e60a60f363a5240be794e0ace975f24601d1a8"}, - {file = "browsergym-0.7.0.tar.gz", hash = "sha256:e1cd9812b32a9387bac42b726bf7669c35a46b5fe6d1faf939333f095d5a6ba5"}, + {file = "browsergym-0.7.1-py3-none-any.whl", hash = "sha256:af216abf3e1ad538e4d31e5bf96da03768ac4aabc9a566159355fa2b6af093da"}, + {file = "browsergym-0.7.1.tar.gz", hash = "sha256:c269eb8b6da4bd186c05529f3492a9bef2210a89e2cdae4b7557b6ae7091c28e"}, ] [package.dependencies] -browsergym-core = "0.7.0" -browsergym-experiments = "0.7.0" -browsergym-miniwob = "0.7.0" -browsergym-visualwebarena = "0.7.0" -browsergym-webarena = "0.7.0" +browsergym-core = "0.7.1" +browsergym-experiments = "0.7.1" +browsergym-miniwob = "0.7.1" +browsergym-visualwebarena = "0.7.1" +browsergym-webarena = "0.7.1" browsergym-workarena = "*" [[package]] name = "browsergym-core" -version = "0.7.0" +version = "0.7.1" description = "BrowserGym: a gym environment for web task automation in the Chromium browser" optional = false python-versions = ">3.9" files = [ - {file = "browsergym_core-0.7.0-py3-none-any.whl", hash = "sha256:4f4c7a153daa984701f76e81eaa358b4a9684e8f3fb4dcd80c807e7ed8112914"}, - {file = "browsergym_core-0.7.0.tar.gz", hash = "sha256:069987057dcdea2c25b1b631691f93d77c2d042108079c16874128dcc459d809"}, + {file = "browsergym_core-0.7.1-py3-none-any.whl", hash = "sha256:28a79537e91fd0dff639fbed9d1f3318b99f8aa5efe054f2468fc0bf2d220ba6"}, + {file = "browsergym_core-0.7.1.tar.gz", hash = "sha256:da6bdd190a8ccdc8394e68a2a17701b7af3208e0267ca7ed9fd33dc4c2c7ea99"}, ] [package.dependencies] @@ -643,67 +643,67 @@ gymnasium = ">=0.27" lxml = ">=4.9" numpy = ">=1.14" pillow = ">=10.1" -playwright = ">=1.32,<1.40" +playwright = ">=1.39,<2.0" pyparsing = ">=3" [[package]] name = "browsergym-experiments" -version = "0.7.0" +version = "0.7.1" description = "Experimentation tools for BrowserGym" optional = false python-versions = ">3.7" files = [ - {file = "browsergym_experiments-0.7.0-py3-none-any.whl", hash = "sha256:c10f810eb631622804ebbf5e5783636cf8aff2a53ea0e38bfcfb129273865b1b"}, - {file = "browsergym_experiments-0.7.0.tar.gz", hash = "sha256:9ee937720d2b84563851a2ae2c94c685da299fbadd957ba743ef7f1351fd0e23"}, + {file = "browsergym_experiments-0.7.1-py3-none-any.whl", hash = "sha256:0f3104da708436fe93460cd609590d28aa9dcbeda68d8a51599a56daaea7cd96"}, + {file = "browsergym_experiments-0.7.1.tar.gz", hash = "sha256:75f9e5676e625cb7ec4a5fbce8d6832708b01cb4e5af9c150cfd27182af60a74"}, ] [package.dependencies] -browsergym-core = "0.7.0" +browsergym-core = "0.7.1" tiktoken = ">=0.4" [[package]] name = "browsergym-miniwob" -version = "0.7.0" +version = "0.7.1" description = "MiniWoB++ benchmark for BrowserGym" optional = false python-versions = ">3.7" files = [ - {file = "browsergym_miniwob-0.7.0-py3-none-any.whl", hash = "sha256:9223400aa737dcbca79884a6174b67635ec5b913f490232b60e5391fc34eecb4"}, - {file = "browsergym_miniwob-0.7.0.tar.gz", hash = "sha256:b4d248541a86f9dc21c9fc5a03699ef16dfd96a97d9347d3c6ef4ae9145f691f"}, + {file = "browsergym_miniwob-0.7.1-py3-none-any.whl", hash = "sha256:69f560b5d0210a5db3b2672d0ac48e274170f765832e3628da3fd0ba694d3f40"}, + {file = "browsergym_miniwob-0.7.1.tar.gz", hash = "sha256:635909cbe0646985699fc65715c463e258c04dad16521bfa59cb0ae4ec797f8f"}, ] [package.dependencies] -browsergym-core = "0.7.0" +browsergym-core = "0.7.1" [[package]] name = "browsergym-visualwebarena" -version = "0.7.0" +version = "0.7.1" description = "VisualWebArena benchmark for BrowserGym" optional = false python-versions = ">3.7" files = [ - {file = "browsergym_visualwebarena-0.7.0-py3-none-any.whl", hash = "sha256:499124dd8a0619905049598428205cad4d3237e6acef80225f3c734f428b16b9"}, - {file = "browsergym_visualwebarena-0.7.0.tar.gz", hash = "sha256:78fd89a922b94b7de912b6ab44d48845a25283eb7265c526811542f6833edbaa"}, + {file = "browsergym_visualwebarena-0.7.1-py3-none-any.whl", hash = "sha256:bf9bb0d2f406276531aee10dd04371b152cfa2c703402291e57a04ea47847c43"}, + {file = "browsergym_visualwebarena-0.7.1.tar.gz", hash = "sha256:b26db1d75a9ecae7d97a1bbefad2d7ea10e49119e4aec8320cf6f8bcd265e45c"}, ] [package.dependencies] -browsergym-core = "0.7.0" +browsergym-core = "0.7.1" libvisualwebarena = "0.0.8" requests = "*" [[package]] name = "browsergym-webarena" -version = "0.7.0" +version = "0.7.1" description = "WebArena benchmark for BrowserGym" optional = false python-versions = ">3.7" files = [ - {file = "browsergym_webarena-0.7.0-py3-none-any.whl", hash = "sha256:d04b2cdadce47ffc9b4d6751f7f5dbd403e561cf4bf2b80801edcbb03bcf8ce6"}, - {file = "browsergym_webarena-0.7.0.tar.gz", hash = "sha256:f7b0839ca009962457a03c948261fb36fbcbababd60208132ec77f92c6a19a59"}, + {file = "browsergym_webarena-0.7.1-py3-none-any.whl", hash = "sha256:117cb2946d8a9b3536d0a55300eb28b7650c0e70339855bed8890f0f8fc887e9"}, + {file = "browsergym_webarena-0.7.1.tar.gz", hash = "sha256:568de29ab0a7a1a569855e1bb71af5cfd4e982156988a64e30ada3bfe309b399"}, ] [package.dependencies] -browsergym-core = "0.7.0" +browsergym-core = "0.7.1" libwebarena = "0.0.3" [[package]] @@ -1014,13 +1014,13 @@ numpy = "*" [[package]] name = "chromadb" -version = "0.5.9" +version = "0.5.11" description = "Chroma." optional = false python-versions = ">=3.8" files = [ - {file = "chromadb-0.5.9-py3-none-any.whl", hash = "sha256:0e7a05f03e0d27d31135abf8e681913c193c314fcbeeba456adeaa17395d697e"}, - {file = "chromadb-0.5.9.tar.gz", hash = "sha256:1e47fffe72625e1cddf2af4d570eb39aa06c2613d509dfeb9204ac57d6cf03d9"}, + {file = "chromadb-0.5.11-py3-none-any.whl", hash = "sha256:f02d9326869cea926f980bd6c9a0150a0ef2e151072f325998c16a9502fb4b25"}, + {file = "chromadb-0.5.11.tar.gz", hash = "sha256:252e970b3e1a27b594cc7b3685238691bf8eaa232225d4dee9e33ec83580775f"}, ] [package.dependencies] @@ -3845,19 +3845,19 @@ pydantic = ">=1.10" [[package]] name = "llama-index" -version = "0.11.13" +version = "0.11.14" description = "Interface between LLMs and your data" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "llama_index-0.11.13-py3-none-any.whl", hash = "sha256:9979153bed81e41c9dd9abe4b5ab136a582b9028aac5357100f13b921b6bc432"}, - {file = "llama_index-0.11.13.tar.gz", hash = "sha256:e15b30e3786aacd39a426b4d3bd3829bf7bb8b3fbafc08c737ff14a815992342"}, + {file = "llama_index-0.11.14-py3-none-any.whl", hash = "sha256:69447a25cb73f910146200e8f45579e0a6e5e390bb2818f229e68fbb625e0a2d"}, + {file = "llama_index-0.11.14.tar.gz", hash = "sha256:6d18093550bdf92442dc7aa0e4d9fef2616941e3d101409340d47c7a99b9f739"}, ] [package.dependencies] llama-index-agent-openai = ">=0.3.4,<0.4.0" llama-index-cli = ">=0.3.1,<0.4.0" -llama-index-core = ">=0.11.13,<0.12.0" +llama-index-core = ">=0.11.14,<0.12.0" llama-index-embeddings-openai = ">=0.2.4,<0.3.0" llama-index-indices-managed-llama-cloud = ">=0.3.0" llama-index-legacy = ">=0.9.48,<0.10.0" @@ -3903,13 +3903,13 @@ llama-index-llms-openai = ">=0.2.0,<0.3.0" [[package]] name = "llama-index-core" -version = "0.11.13.post1" +version = "0.11.14" description = "Interface between LLMs and your data" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "llama_index_core-0.11.13.post1-py3-none-any.whl", hash = "sha256:b71021ac86644898e723098a38bfc5f5b98bccb89e194854610b94ce6e3caeec"}, - {file = "llama_index_core-0.11.13.post1.tar.gz", hash = "sha256:2f2041cc176398f71be449e5aadcad261236fcbfdde9deb7d396512aecb3428a"}, + {file = "llama_index_core-0.11.14-py3-none-any.whl", hash = "sha256:e63e5b1f4daa56952a7846cbbf0265b1288909efaea866216a4c6fb65daa2923"}, + {file = "llama_index_core-0.11.14.tar.gz", hash = "sha256:6ff7be9f5bbb04be0d8064f76510edf79f8a9833ebae28b46261b274556827ca"}, ] [package.dependencies] @@ -7163,13 +7163,13 @@ files = [ [[package]] name = "reportlab" -version = "4.2.2" +version = "4.2.4" description = "The Reportlab Toolkit" optional = false python-versions = "<4,>=3.7" files = [ - {file = "reportlab-4.2.2-py3-none-any.whl", hash = "sha256:927616931637e2f13e2ee3b3b6316d7a07803170e258621cff7d138bde17fbb5"}, - {file = "reportlab-4.2.2.tar.gz", hash = "sha256:765eecbdd68491c56947e29c38b8b69b834ee5dbbdd2fb7409f08ebdebf04428"}, + {file = "reportlab-4.2.4-py3-none-any.whl", hash = "sha256:6e4d86647b8bfd772f475a58f9b0dcba4b340b1969f0db36333089f6ca9ab362"}, + {file = "reportlab-4.2.4.tar.gz", hash = "sha256:a00b57292e156a7bda84edf31d60c25578153076c8fb96331d0c59eddda052c8"}, ] [package.dependencies] @@ -9728,4 +9728,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "17c48fe9723bb3361424fb194ebf8019a260dd954f275b8616ff8cf64f46342d" +content-hash = "78e09d0b5c33f39ec951659658b5b4b46ba206d8f95e9a154be4e0ef869b7c79" diff --git a/pyproject.toml b/pyproject.toml index e69858825893..4395515db79d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ uvicorn = "*" types-toml = "*" numpy = "*" json-repair = "*" -browsergym = "0.7.0" # integrate browsergym as the browsing interface +browsergym = "0.7.1" # integrate browsergym as the browsing interface html2text = "*" e2b = "^0.17.1" pexpect = "*" @@ -55,7 +55,6 @@ pylatexenc = "*" tornado = "*" python-dotenv = "*" -libcst = "^1.4.0" [tool.poetry.group.llama-index.dependencies] llama-index = "*" llama-index-vector-stores-chroma = "*"