[Fix] Remove unused aioboto3 dependency and botocore conflict workarounds

aioboto3 was listed as a dependency for async sagemaker calls but is not
imported anywhere in the codebase — async calls use httpx + botocore SigV4
instead. Removing it eliminates the unresolvable botocore version conflict
between boto3 and aiobotocore, along with all grep -v / --no-deps workarounds
across Dockerfiles and CI.

Also addresses Greptile review feedback: collapse redundant grpcio
python-version markers, bump pyproject.toml cryptography to 46.0.5 to
match Docker (GHSA-r6ph-v2qm-q3c2), and fix misleading .npmrc comment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Yuneng Jiang 2026-04-01 14:25:44 -07:00
parent 9c6d5f2b60
commit 85f72c9d24
No known key found for this signature in database
9 changed files with 40 additions and 108 deletions

View File

@ -34,8 +34,7 @@ commands:
command: |
python -m pip install --upgrade pip uv
# Use uv for the heavy requirements.txt (10-100x faster than pip)
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
# Use pip for test deps (small set, avoids uv strict-resolution
# conflicts with transitive dep pins like openai<2 and pydantic>=2.11.5)
pip install "pytest-mock==3.12.0" "pytest==7.3.1" "pytest-retry==1.6.3" \
@ -96,8 +95,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip uninstall fastuuid -y
pip install "mypy==1.18.2"
- run:
@ -162,7 +160,6 @@ jobs:
python-multipart prometheus-client==0.20.0 "pydantic==2.12.5" \
"diskcache==5.6.1" "Pillow==12.1.1" "jsonschema==4.23.0" \
"pytest-xdist==3.6.1" "pytest-timeout==2.2.0" "websockets==15.0.1"
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
pip install semantic_router --no-deps
pip install aurelio_sdk --no-deps
pip uninstall posthog -y
@ -258,7 +255,6 @@ jobs:
python-multipart prometheus-client==0.20.0 "pydantic==2.12.5" \
"diskcache==5.6.1" "Pillow==12.1.1" "jsonschema==4.23.0" \
"pytest-xdist==3.6.1" "pytest-timeout==2.2.0" "websockets==15.0.1"
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
pip install semantic_router --no-deps
pip install aurelio_sdk --no-deps
pip uninstall posthog -y
@ -353,7 +349,6 @@ jobs:
pip install "google-cloud-aiplatform==1.133.0"
pip install pyarrow
pip install "boto3==1.42.80"
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
pip install langchain
pip install lunary==0.2.5
pip install "azure-identity==1.25.3"
@ -425,8 +420,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-asyncio==0.21.1"
@ -474,8 +468,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "respx==0.22.0"
pip install "pytest-retry==1.6.3"
@ -532,8 +525,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "respx==0.22.0"
pip install "pytest-retry==1.6.3"
@ -575,8 +567,7 @@ jobs:
command: |
python -m pip install --upgrade pip uv
pip install wheel setuptools
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "respx==0.22.0"
pip install "pytest-retry==1.6.3"
@ -612,8 +603,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-asyncio==0.21.1"
@ -662,8 +652,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1" "pytest-retry==1.6.3" "pytest-cov==5.0.0" "pytest-asyncio==0.21.1" "respx==0.22.0" "pytest-xdist==3.6.1" "pytest-timeout==2.2.0" "websockets"
# Run pytest and generate JUnit XML report
- run:
@ -704,8 +693,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-cov==5.0.0"
@ -751,8 +739,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-cov==5.0.0"
@ -797,8 +784,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-cov==5.0.0"
@ -848,8 +834,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-cov==5.0.0"
@ -898,8 +883,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-asyncio==0.21.1"
@ -937,8 +921,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1" "pytest-retry==1.6.3" "pytest-cov==5.0.0" "pytest-asyncio==0.21.1" "respx==0.22.0" "pytest-xdist==3.6.1"
# Run pytest and generate JUnit XML report
- run:
@ -977,8 +960,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1" "pytest-retry==1.6.3" "pytest-cov==5.0.0" "pytest-asyncio==0.21.1" "respx==0.22.0" "pytest-xdist==3.6.1"
# Run pytest and generate JUnit XML report
- run:
@ -1057,8 +1039,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest-mock==3.12.0"
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
@ -1101,8 +1082,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "respx==0.22.0"
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
@ -1148,8 +1128,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install numpydoc
pip install "respx==0.22.0"
pip install "pytest==7.3.1"
@ -1198,8 +1177,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1" "pytest-retry==1.6.3" "pytest-cov==5.0.0" "pytest-asyncio==0.21.1" "respx==0.22.0" "pytest-xdist==3.6.1"
# Run pytest and generate JUnit XML report
- run:
@ -1239,8 +1217,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-cov==5.0.0"
@ -1273,8 +1250,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-cov==5.0.0"
@ -1326,8 +1302,7 @@ jobs:
name: Install Dependencies
command: |
python -m pip install --upgrade pip uv
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-cov==5.0.0"
@ -1407,8 +1382,7 @@ jobs:
command: |
python -m pip install --upgrade pip uv
pip install wheel setuptools
grep -v '^aioboto3' requirements.txt | uv pip install --system -r -
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
uv pip install --system -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-asyncio==0.21.1"
@ -1707,7 +1681,6 @@ jobs:
pip install "google-cloud-aiplatform==1.133.0"
pip install pyarrow
pip install "boto3==1.42.80"
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
pip install langchain
pip install "langfuse>=2.0.0"
pip install "logfire==0.29.0"
@ -1851,7 +1824,6 @@ jobs:
pip install "google-cloud-aiplatform==1.133.0"
pip install pyarrow
pip install "boto3==1.42.80"
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
pip install langchain
pip install "langchain_mcp_adapters==0.0.5"
pip install "langfuse>=2.0.0"
@ -1997,7 +1969,6 @@ jobs:
pip install "google-cloud-aiplatform==1.133.0"
pip install pyarrow
pip install "boto3==1.42.80"
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
pip install langchain
pip install "langfuse>=2.0.0"
pip install "logfire==0.29.0"
@ -2171,8 +2142,7 @@ jobs:
pip install "pytest-asyncio==0.21.1"
pip install aiohttp
python -m pip install --upgrade pip
grep -v '^aioboto3' requirements.txt | python -m pip install -r /dev/stdin
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
python -m pip install -r requirements.txt
- run:
name: Install dockerize
command: |
@ -2284,8 +2254,7 @@ jobs:
pip install "pytest-asyncio==0.21.1"
pip install aiohttp
python -m pip install --upgrade pip
grep -v '^aioboto3' requirements.txt | python -m pip install -r /dev/stdin
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
python -m pip install -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-mock==3.12.0"
@ -2423,8 +2392,7 @@ jobs:
pip install "pytest-asyncio==0.21.1"
pip install aiohttp
python -m pip install --upgrade pip
grep -v '^aioboto3' requirements.txt | python -m pip install -r /dev/stdin
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
python -m pip install -r requirements.txt
pip install "pytest==7.3.1"
pip install "pytest-retry==1.6.3"
pip install "pytest-mock==3.12.0"
@ -2665,8 +2633,7 @@ jobs:
pip install "langchain_openai==0.2.1"
pip install "langgraph==0.3.18"
pip install "fastuuid==0.13.5"
grep -v '^aioboto3' requirements.txt | pip install -r /dev/stdin
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
pip install -r requirements.txt
- run:
name: Install dockerize
command: |
@ -2831,8 +2798,7 @@ jobs:
pip install "boto3==1.42.80"
pip install "httpx==0.27.0"
pip install "claude-agent-sdk"
grep -v '^aioboto3' requirements.txt | pip install -r /dev/stdin
pip install --no-deps "aioboto3==15.5.0" "aiobotocore==2.25.1"
pip install -r requirements.txt
- run:
name: Install dockerize
command: |

View File

@ -34,10 +34,7 @@ RUN ls -1 dist/*.whl | head -1
RUN pip install dist/*.whl
# install dependencies as wheels
# aioboto3/aiobotocore have an unresolvable botocore conflict with boto3 1.42.x
# Install them separately with --no-deps to bypass resolution
RUN grep -v '^aioboto3' requirements.txt | pip wheel --no-cache-dir --wheel-dir=/wheels/ -r /dev/stdin \
&& pip wheel --no-cache-dir --no-deps --wheel-dir=/wheels/ "aioboto3==15.5.0" "aiobotocore==2.25.1"
RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt
# ensure pyjwt is used, not jwt
RUN pip uninstall jwt -y
@ -93,8 +90,6 @@ COPY --from=builder /app/dist/*.whl .
COPY --from=builder /wheels/ /wheels/
# Install the built wheel using pip; again using a wildcard if it's the only file
# --no-deps: all wheels are pre-built in /wheels/, skip resolution to avoid
# the boto3/aiobotocore botocore version conflict (no compatible aioboto3 exists yet)
RUN pip install *.whl /wheels/* --no-index --find-links=/wheels/ --no-deps && rm -f *.whl && rm -rf /wheels
# Replace the nodejs-wheel-binaries bundled node with the system node (fixes CVE-2025-55130)

View File

@ -29,10 +29,7 @@ RUN ls -1 dist/*.whl | head -1
RUN pip install dist/*.whl
# install dependencies as wheels
# aioboto3/aiobotocore have an unresolvable botocore conflict with boto3 1.42.x
# Install them separately with --no-deps to bypass resolution
RUN grep -v '^aioboto3' requirements.txt | pip wheel --no-cache-dir --wheel-dir=/wheels/ -r /dev/stdin \
&& pip wheel --no-cache-dir --no-deps --wheel-dir=/wheels/ "aioboto3==15.5.0" "aiobotocore==2.25.1"
RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt
# Runtime stage
FROM $LITELLM_RUNTIME_IMAGE AS runtime
@ -47,8 +44,6 @@ COPY --from=builder /app/dist/*.whl .
COPY --from=builder /wheels/ /wheels/
# Install the built wheel using pip; again using a wildcard if it's the only file
# --no-deps: all wheels are pre-built in /wheels/, skip resolution to avoid
# the boto3/aiobotocore botocore version conflict (no compatible aioboto3 exists yet)
RUN pip install *.whl /wheels/* --no-index --find-links=/wheels/ --no-deps && rm -f *.whl && rm -rf /wheels
# Convert Windows line endings to Unix for entrypoint scripts

View File

@ -40,10 +40,7 @@ RUN ls -1 dist/*.whl | head -1
RUN pip install dist/*.whl
# install dependencies as wheels
# aioboto3/aiobotocore have an unresolvable botocore conflict with boto3 1.42.x
# Install them separately with --no-deps to bypass resolution
RUN grep -v '^aioboto3' requirements.txt | pip wheel --no-cache-dir --wheel-dir=/wheels/ -r /dev/stdin \
&& pip wheel --no-cache-dir --no-deps --wheel-dir=/wheels/ "aioboto3==15.5.0" "aiobotocore==2.25.1"
RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt
# Runtime stage
FROM $LITELLM_RUNTIME_IMAGE AS runtime
@ -85,8 +82,6 @@ COPY --from=builder /app/dist/*.whl .
COPY --from=builder /wheels/ /wheels/
# Install the built wheel using pip; again using a wildcard if it's the only file
# --no-deps: all wheels are pre-built in /wheels/, skip resolution to avoid
# the boto3/aiobotocore botocore version conflict (no compatible aioboto3 exists yet)
RUN pip install *.whl /wheels/* --no-index --find-links=/wheels/ --no-deps && rm -f *.whl && rm -rf /wheels
# SECURITY FIX: nodejs-wheel-binaries (pip package used by Prisma) bundles a complete

View File

@ -25,11 +25,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
COPY requirements.txt .
# Install Python dependencies with cache mount for faster rebuilds
# aioboto3/aiobotocore have an unresolvable botocore conflict with boto3 1.42.x
# Install them separately with --no-deps to bypass resolution
RUN --mount=type=cache,target=/root/.cache/pip \
grep -v '^aioboto3' requirements.txt | pip wheel --no-cache-dir --wheel-dir=/wheels/ -r /dev/stdin \
&& pip wheel --no-cache-dir --no-deps --wheel-dir=/wheels/ "aioboto3==15.5.0" "aiobotocore==2.25.1"
pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt
# Fix JWT dependency conflicts early
RUN pip uninstall jwt -y || true && \
@ -112,8 +109,6 @@ COPY --from=builder /wheels/ /wheels/
COPY --from=builder /app/dist/*.whl .
# Install all dependencies in one step with no-cache for smaller image
# --no-deps: all wheels are pre-built in /wheels/, skip resolution to avoid
# the boto3/aiobotocore botocore version conflict (no compatible aioboto3 exists yet)
RUN pip install --no-cache-dir *.whl /wheels/* --no-index --find-links=/wheels/ --no-deps && \
rm -f *.whl && \
rm -rf /wheels

View File

@ -31,10 +31,7 @@ RUN for i in 1 2 3; do \
# Cache Python dependencies
COPY requirements.txt .
# aioboto3/aiobotocore have an unresolvable botocore conflict with boto3 1.42.x
# Install them separately with --no-deps to bypass resolution
RUN grep -v '^aioboto3' requirements.txt | pip wheel --no-cache-dir --wheel-dir=/wheels/ -r /dev/stdin \
&& pip wheel --no-cache-dir --no-deps --wheel-dir=/wheels/ "aioboto3==15.5.0" "aiobotocore==2.25.1" \
RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt \
&& pip wheel --no-cache-dir --wheel-dir=/wheels/ "semantic_router==0.1.11" "aurelio-sdk==0.0.19" "PyJWT==2.12.0"
# Copy source after dependency layers
@ -44,8 +41,8 @@ COPY . .
ENV LITELLM_NON_ROOT=true
# Build Admin UI using the upstream command order while keeping a single RUN layer
# NOTE: --userconfig /dev/null bypasses .npmrc (which has ignore-scripts=true and
# min-release-age=3d) for this step only. This is safe because npm ci installs from
# NOTE: .npmrc (which has ignore-scripts=true and min-release-age=3d) is temporarily
# renamed during npm install/ci. This is safe because npm ci installs from
# package-lock.json with pinned versions + integrity hashes.
RUN mkdir -p /var/lib/litellm/ui && \
mv /app/.npmrc /app/.npmrc.bak && \
@ -165,8 +162,7 @@ ENV PRISMA_BINARY_CACHE_DIR=/app/.cache/prisma-python/binaries \
XDG_CACHE_HOME=/app/.cache
# Install packages from wheels and optional extras without network
RUN grep -v '^aioboto3' requirements.txt | pip install --no-index --find-links=/wheels/ -r /dev/stdin && \
pip install --no-index --no-deps --find-links=/wheels/ "aioboto3==15.5.0" "aiobotocore==2.25.1" && \
RUN pip install --no-index --find-links=/wheels/ -r requirements.txt && \
pip install --no-index --find-links=/wheels/ /wheels/litellm-*-py3-none-any.whl && \
pip install --no-index --find-links=/wheels/ --no-deps semantic_router==0.1.11 && \
pip install --no-index --find-links=/wheels/ aurelio-sdk==0.0.19 && \

View File

@ -48,7 +48,7 @@ apscheduler = {version = "3.11.2", optional = true}
fastapi-sso = { version = "0.16.0", optional = true }
PyJWT = { version = "2.12.1", optional = true, python = ">=3.9" }
python-multipart = { version = "0.0.20", optional = true}
cryptography = {version = "43.0.3", optional = true} # Docker uses 46.0.5; pyproject uses 43.0.3 for Poetry Python 3.9.0/3.9.1 compat
cryptography = {version = "46.0.5", optional = true} # GHSA-r6ph-v2qm-q3c2
prisma = {version = "0.11.0", optional = true}
azure-identity = {version = "1.25.3", optional = true, python = ">=3.9"}
azure-keyvault-secrets = {version = "4.10.0", optional = true}
@ -73,10 +73,7 @@ mlflow = {version = "3.9.0", optional = true, python = ">=3.10"} # not in PyPI p
soundfile = {version = "0.12.1", optional = true}
pyroscope-io = {version = "0.8.16", optional = true, markers = "sys_platform != 'win32'"}
# grpcio: pinned to 1.80.0 (past reconnect bug #38290 in 1.68.x, has Python 3.14 wheels)
grpcio = [
{version = "1.80.0", python = "<3.14", optional = true},
{version = "1.80.0", python = ">=3.14", optional = true},
]
grpcio = {version = "1.80.0", optional = true}
[tool.poetry.extras]
proxy = [

View File

@ -19,7 +19,7 @@ uvicorn==0.33.0 # server dep
gunicorn==23.0.0 # server dep
fastuuid==0.14.0 # for uuid4
uvloop==0.21.0 # uvicorn dep, gives us much better performance under load
boto3==1.42.80 # aws bedrock/sagemaker calls (has bedrock-agentcore-control, compatible with aioboto3)
boto3==1.42.80 # aws bedrock/sagemaker calls
redis==5.2.1 # redis caching
redisvl==0.4.1 ## redis semantic caching
prisma==0.11.0 # for db
@ -52,8 +52,7 @@ opentelemetry-sdk==1.28.0
opentelemetry-exporter-otlp==1.28.0
a2a-sdk==0.3.25 ; python_version >= "3.10"
# grpcio: pinned to 1.80.0 (past reconnect bug #38290 in 1.68.x, has Python 3.14 wheels)
grpcio==1.80.0; python_version < "3.14"
grpcio==1.80.0; python_version >= "3.14"
grpcio==1.80.0
sentry_sdk==2.21.0 # for sentry error handling
detect-secrets==1.5.0 # Enterprise - secret detection / masking in LLM requests
tzdata==2025.1 # IANA time zone database
@ -67,7 +66,6 @@ tokenizers==0.22.2 # for calculating usage
click==8.1.8 # for proxy cli
rich==13.9.4 # for litellm proxy cli
jinja2==3.1.6 # for prompt templates
aioboto3==15.5.0 # for async sagemaker calls
aiohttp==3.13.5 # for network calls
tenacity==8.5.0 # for retrying requests, when litellm.num_retries set
pydantic==2.12.5 # proxy + openai req. + mcp
@ -79,12 +77,10 @@ pypdf==6.9.2 # for PDF text extraction in RAG ingestion (CVE-2026-27888)
# Transitive deps pinned to prevent floating between builds
aiofiles==24.1.0 # transitive dep (langfuse)
aioitertools==0.12.0 # transitive dep (aiobotocore)
colorlog==6.10.1 # transitive dep (ddtrace)
grpc-google-iam-v1==0.14.3 # transitive dep (google-cloud-iam)
hf-xet==1.4.2 # transitive dep (huggingface_hub)
requests-toolbelt==1.0.0 # transitive dep (langfuse)
wrapt==1.17.2 # transitive dep (aiobotocore)
########################
# LITELLM ENTERPRISE DEPENDENCIES

View File

@ -131,7 +131,6 @@ tiktoken: >=0.8.0 # Unknown license
click: >=8.1.7 # Unknown license
rich: >=13.7.1 # Unknown license
aiohttp: >=3.10.2 # Unknown license
aioboto3: >=12.3.0 # Unknown license
tenacity: >=8.2.3 # Unknown license
pydantic: >=2.10.2 # Unknown license
jsonschema: >=4.22.0 # Unknown license
@ -146,5 +145,3 @@ grpcio: >=1.69.0 # Apache License 2.0
jaraco.context: >=6.1.0 # Unknown license
pypdf: >=6.6.2 # BSD-3-Clause license - https://github.com/py-pdf/pypdf/blob/main/LICENSE
hf-xet: >=1.4.2 # Apache 2.0 License - https://github.com/huggingface/xet-tools/blob/main/LICENSE
aioitertools: >=0.12.0 # MIT License - https://github.com/omnilib/aioitertools/blob/main/LICENSE
wrapt: >=1.17.0 # BSD License - https://github.com/GrahamDumpleton/wrapt/blob/develop/LICENSE