diff --git a/.circleci/scripts/classify_changes.sh b/.circleci/scripts/classify_changes.sh index d2ab3478397..54222a0a8b5 100755 --- a/.circleci/scripts/classify_changes.sh +++ b/.circleci/scripts/classify_changes.sh @@ -19,7 +19,7 @@ while IFS= read -r file || [ -n "$file" ]; do esac case "$file" in *.md | *.mdx) : ;; - pyproject.toml | */pyproject.toml | uv.lock | uv.toml | .python-version | rust-toolchain.toml | litellm-rust/* | litellm/__init__.py | litellm/proxy/proxy_server.py | litellm/*mcp* | tests/*mcp* | litellm/integrations/arize/* | tests/base_sdk_tests/* | scripts/check_mcp_sdk_install.py | .github/workflows/test-mcp-dependency-resolution.yml | .github/actions/detect-changes/* | .github/actions/setup-uv-with-retries/* | .github/actions/cache-cargo-build/* | .github/scripts/detect_changes.sh | .github/scripts/uv_sync_with_retries.sh | .circleci/scripts/classify_changes.sh | tests/unit/test_circleci_path_filter.py | tests/unit/test_detect_changes.py) + pyproject.toml | */pyproject.toml | uv.lock | uv.toml | .python-version | rust-toolchain.toml | litellm-rust/* | litellm/__init__.py | litellm/proxy/proxy_server.py | litellm/*mcp* | tests/*mcp* | litellm/integrations/arize/* | tests/base_sdk_tests/* | scripts/check_mcp_sdk_install.py | .github/workflows/test-mcp-dependency-resolution.yml | .github/actions/detect-changes/* | .github/actions/setup-uv-with-retries/* | .github/actions/cache-cargo-build/* | .github/scripts/detect_changes.sh | .circleci/scripts/classify_changes.sh | tests/unit/test_circleci_path_filter.py | tests/unit/test_detect_changes.py) has_mcp_dependencies=true ;; esac case "$file" in diff --git a/.github/scripts/uv_sync_with_retries.sh b/.github/scripts/uv_sync_with_retries.sh deleted file mode 100755 index 85ed75af566..00000000000 --- a/.github/scripts/uv_sync_with_retries.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -max_attempts="${UV_SYNC_MAX_ATTEMPTS:-5}" -delay_seconds="${UV_SYNC_RETRY_DELAY_SECONDS:-15}" - -export CARGO_HTTP_MULTIPLEXING="${CARGO_HTTP_MULTIPLEXING:-false}" -export CARGO_NET_RETRY="${CARGO_NET_RETRY:-5}" - -if [[ "$#" -eq 0 ]]; then - echo "usage: $0 " >&2 - exit 2 -fi - -for attempt in $(seq 1 "${max_attempts}"); do - echo "uv sync attempt ${attempt}/${max_attempts}" - status=0 - if uv sync "$@"; then - exit 0 - else - status=$? - fi - - if [[ "${attempt}" -eq "${max_attempts}" ]]; then - echo "uv sync failed after ${max_attempts} attempts" >&2 - exit "${status}" - fi - - echo "uv sync failed; retrying in ${delay_seconds}s..." - sleep "${delay_seconds}" -done diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml index dfad57dc5ab..2b3f3931dc5 100644 --- a/.github/workflows/codspeed.yml +++ b/.github/workflows/codspeed.yml @@ -12,7 +12,6 @@ on: - ".github/workflows/codspeed.yml" - ".github/actions/setup-uv-with-retries/**" - ".github/actions/cache-cargo-build/**" - - ".github/scripts/uv_sync_with_retries.sh" pull_request: branches: - main @@ -24,7 +23,6 @@ on: - ".github/workflows/codspeed.yml" - ".github/actions/setup-uv-with-retries/**" - ".github/actions/cache-cargo-build/**" - - ".github/scripts/uv_sync_with_retries.sh" # Allow CodSpeed to trigger backtest performance analysis # in order to generate initial data workflow_dispatch: @@ -70,7 +68,7 @@ jobs: - name: Install the wheel into the benchmark environment run: | - UV_PROJECT_ENVIRONMENT="${RUNNER_TEMP}/benchmark-venv" .github/scripts/uv_sync_with_retries.sh --frozen --no-default-groups --group benchmarks --no-install-project --python 3.12 + UV_PROJECT_ENVIRONMENT="${RUNNER_TEMP}/benchmark-venv" uv sync --frozen --no-default-groups --group benchmarks --no-install-project --python 3.12 uv pip install --python "${RUNNER_TEMP}/benchmark-venv/bin/python" --no-deps dist/*.whl - name: Collect benchmarks diff --git a/.github/workflows/e2e_record_replay.yml b/.github/workflows/e2e_record_replay.yml index ca52f0b4d81..4ae0f68e3f3 100644 --- a/.github/workflows/e2e_record_replay.yml +++ b/.github/workflows/e2e_record_replay.yml @@ -66,7 +66,7 @@ jobs: - name: Install dependencies run: | - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra proxy + uv sync --frozen --group ci --group proxy-dev --extra proxy - name: Cache Prisma binaries uses: ./.github/actions/cache-prisma-binaries @@ -164,7 +164,7 @@ jobs: - name: Install dependencies run: | - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra proxy + uv sync --frozen --group ci --group proxy-dev --extra proxy - name: Cache Prisma binaries uses: ./.github/actions/cache-prisma-binaries diff --git a/.github/workflows/mutation-test.yml b/.github/workflows/mutation-test.yml index be271538bdf..41dd008f5c4 100644 --- a/.github/workflows/mutation-test.yml +++ b/.github/workflows/mutation-test.yml @@ -70,7 +70,7 @@ jobs: - name: Install dependencies run: | - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml + uv sync --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml - name: Cache Prisma binaries uses: ./.github/actions/cache-prisma-binaries diff --git a/.github/workflows/test-e2e-redis-chaos.yml b/.github/workflows/test-e2e-redis-chaos.yml index 8f351a7a647..b954138c2ee 100644 --- a/.github/workflows/test-e2e-redis-chaos.yml +++ b/.github/workflows/test-e2e-redis-chaos.yml @@ -65,7 +65,7 @@ jobs: - name: Install dependencies run: | - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --group e2e-dev --extra proxy + uv sync --frozen --group ci --group proxy-dev --group e2e-dev --extra proxy - name: Cache Prisma binaries uses: ./.github/actions/cache-prisma-binaries diff --git a/.github/workflows/test-linting.yml b/.github/workflows/test-linting.yml index 3b9a2614725..210feb6aae8 100644 --- a/.github/workflows/test-linting.yml +++ b/.github/workflows/test-linting.yml @@ -412,7 +412,7 @@ jobs: - name: Install backend dependencies if: steps.changes.outputs.relevant == 'true' - run: .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router + run: uv sync --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router - name: Cache Prisma binaries if: steps.changes.outputs.relevant == 'true' diff --git a/.github/workflows/test-mcp-dependency-resolution.yml b/.github/workflows/test-mcp-dependency-resolution.yml index 3f0d1260e49..107d6dda081 100644 --- a/.github/workflows/test-mcp-dependency-resolution.yml +++ b/.github/workflows/test-mcp-dependency-resolution.yml @@ -27,7 +27,6 @@ on: - ".github/actions/setup-uv-with-retries/**" - ".github/actions/cache-cargo-build/**" - ".github/scripts/detect_changes.sh" - - ".github/scripts/uv_sync_with_retries.sh" - ".circleci/scripts/classify_changes.sh" permissions: @@ -85,7 +84,7 @@ jobs: for extra in core mcp proxy; do args=() if [ "$extra" != core ]; then args=(--extra "$extra"); fi - UV_PROJECT_ENVIRONMENT=".venv-$extra" .github/scripts/uv_sync_with_retries.sh --frozen --no-dev --no-editable --python ${{ matrix.python-version }} "${args[@]}" + UV_PROJECT_ENVIRONMENT=".venv-$extra" uv sync --frozen --no-dev --no-editable --python ${{ matrix.python-version }} "${args[@]}" uv pip check --python ".venv-$extra" if [ "$extra" = core ]; then checker=("$GITHUB_WORKSPACE/tests/base_sdk_tests/check_base_sdk_install.py") diff --git a/.github/workflows/test-merge-smoke.yml b/.github/workflows/test-merge-smoke.yml index 0d1cc6596de..88f26794f73 100644 --- a/.github/workflows/test-merge-smoke.yml +++ b/.github/workflows/test-merge-smoke.yml @@ -53,7 +53,7 @@ jobs: version: "0.10.9" - name: Install dependencies - run: .github/scripts/uv_sync_with_retries.sh --frozen --extra proxy --extra cli --group dev --group proxy-dev --python ${{ matrix.python-version }} + run: uv sync --frozen --extra proxy --extra cli --group dev --group proxy-dev --python ${{ matrix.python-version }} - name: Create the loopback-only network namespace run: | @@ -118,7 +118,7 @@ jobs: version: "0.10.9" - name: Install every extra and dependency group - run: .github/scripts/uv_sync_with_retries.sh --frozen --all-groups --all-extras --python ${{ matrix.python-version }} + run: uv sync --frozen --all-groups --all-extras --python ${{ matrix.python-version }} - name: Import the SDK, the proxy server and the enterprise package run: .venv/bin/python -c "import litellm, litellm.proxy.proxy_server, litellm_enterprise" @@ -149,7 +149,7 @@ jobs: version: "0.10.9" - name: Install dependencies - run: .github/scripts/uv_sync_with_retries.sh --frozen --no-install-workspace --group dev --python 3.11 + run: uv sync --frozen --no-install-workspace --group dev --python 3.11 - name: Run the Windows tests run: uv run --no-sync python -m pytest --tb=short -v tests/windows_tests @@ -189,7 +189,7 @@ jobs: version: "0.10.9" - name: Install the test client dependencies - run: .github/scripts/uv_sync_with_retries.sh --frozen --no-install-workspace --extra proxy --group dev --python 3.12 + run: uv sync --frozen --no-install-workspace --extra proxy --group dev --python 3.12 - name: Build the image from the published package run: docker build -t litellm-build-from-pip:smoke -f docker/build_from_pip/Dockerfile.build_from_pip . diff --git a/.github/workflows/test-terraform-provider.yml b/.github/workflows/test-terraform-provider.yml index ff9db13bd25..78575d7cc7e 100644 --- a/.github/workflows/test-terraform-provider.yml +++ b/.github/workflows/test-terraform-provider.yml @@ -103,7 +103,7 @@ jobs: - name: Install dependencies run: | - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router + uv sync --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router - name: Cache Prisma binaries uses: ./.github/actions/cache-prisma-binaries diff --git a/.github/workflows/test-unit.yml b/.github/workflows/test-unit.yml index cb1b595f3f0..cf476d36512 100644 --- a/.github/workflows/test-unit.yml +++ b/.github/workflows/test-unit.yml @@ -982,9 +982,9 @@ jobs: run: | diff -u model_prices_and_context_window.json litellm/model_prices_and_context_window_backup.json if [ -z "$RUST_BRIDGE_ARTIFACT" ]; then - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml --extra caching --extra extra_proxy --extra proxy-runtime --extra utils + uv sync --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml --extra caching --extra extra_proxy --extra proxy-runtime --extra utils else - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml --extra caching --extra extra_proxy --extra proxy-runtime --extra utils --no-install-project + uv sync --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml --extra caching --extra extra_proxy --extra proxy-runtime --extra utils --no-install-project uv pip install --no-deps --python .venv/bin/python rust-bridge-dist/*.whl cp rust-bridge-dist/litellm/rust_bridge/_native.abi3.so litellm/rust_bridge/_native.abi3.so uv run --no-sync python -c "import importlib.metadata; import litellm.rust_bridge._native; print(importlib.metadata.version('litellm'))" @@ -1227,7 +1227,7 @@ jobs: - name: Install dependencies if: steps.changes.outputs.decision != 'skip' run: | - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router + uv sync --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router - name: Cache Prisma binaries if: steps.changes.outputs.decision != 'skip' @@ -1328,7 +1328,7 @@ jobs: - name: Install dependencies if: steps.changes.outputs.decision != 'skip' run: | - .github/scripts/uv_sync_with_retries.sh --frozen --group dev --group proxy-dev --extra proxy --no-install-workspace + uv sync --frozen --group dev --group proxy-dev --extra proxy --no-install-workspace uv pip install "openai==${OPENAI_VERSION:?}" --exclude-newer-package openai=2026-10-07T00:00:00Z uv run --no-sync python -c 'import os, openai; assert openai.__version__ == os.environ["OPENAI_VERSION"], openai.__version__' @@ -1420,9 +1420,9 @@ jobs: RUST_BRIDGE_ARTIFACT: ${{ needs.rust-bridge.outputs.artifact }} run: | if [ -z "$RUST_BRIDGE_ARTIFACT" ]; then - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml --extra caching --extra extra_proxy --extra proxy-runtime --extra utils + uv sync --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml --extra caching --extra extra_proxy --extra proxy-runtime --extra utils else - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml --extra caching --extra extra_proxy --extra proxy-runtime --extra utils --no-install-project + uv sync --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml --extra caching --extra extra_proxy --extra proxy-runtime --extra utils --no-install-project uv pip install --no-deps --python .venv/bin/python rust-bridge-dist/*.whl cp rust-bridge-dist/litellm/rust_bridge/_native.abi3.so litellm/rust_bridge/_native.abi3.so fi diff --git a/.github/workflows/weekly_load_anomaly.yml b/.github/workflows/weekly_load_anomaly.yml index 0ba4df89cc4..4d7b1852e13 100644 --- a/.github/workflows/weekly_load_anomaly.yml +++ b/.github/workflows/weekly_load_anomaly.yml @@ -52,7 +52,7 @@ jobs: - name: Install dependencies run: | - .github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra proxy + uv sync --frozen --group ci --group proxy-dev --extra proxy - name: Cache Prisma binaries uses: ./.github/actions/cache-prisma-binaries