[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:
parent
9c6d5f2b60
commit
85f72c9d24
@ -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: |
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 && \
|
||||
|
||||
@ -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 = [
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user