Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
76bf280
test(responses): bump deprecated gemini-3-pro-preview to gemini-3.1-p…
mateo-berri Jun 1, 2026
f7c029d
fix: add mistral/ministral-8b-latest to model price map (#29453)
mateo-berri Jun 1, 2026
fe10858
fix(datadog): split oversized batches on 413 instead of re-queueing f…
yassin-berriai Jun 1, 2026
8190ff4
feat(otel): allowlist team_metadata sub-keys promoted to baggage (#29…
yassin-berriai Jun 1, 2026
65b6e04
fix: stop use_chat_completions_api flag from leaking into provider re…
mateo-berri Jun 1, 2026
29270a3
fix(anthropic, fireworks): inline legacy $ref defs in tool schemas (#…
milan-berri Jun 1, 2026
c908505
fix(proxy): omit OpenAI [DONE] on google-genai streamGenerateContent …
Sameerlite Jun 1, 2026
45d41f4
ci(release): create stable/X.Y.x line branch on X.Y.0 tags (#29457)
yuneng-berri Jun 1, 2026
1cce49b
fix(vector-stores): support engines URL for Vertex AI Search (#27885)
ryan-crabbe-berri Jun 1, 2026
609e1e9
fix(ui): render caller-supplied filter options in caller order (LIT-3…
ryan-crabbe-berri Jun 2, 2026
c233cbb
fix(batches): skip unnecessary batch input file reads (#29114)
Sameerlite Jun 2, 2026
68952a5
docs(agents): clarify when to create new test files (#29472)
Sameerlite Jun 2, 2026
e8fcb01
Litellm OSS Staging (#29161)
Sameerlite Jun 2, 2026
b7bbddb
fix(mcp): clear allowed_tools and tool overrides on MCP server edit (…
Sameerlite Jun 2, 2026
5fd2714
Litellm OSS Staging 010626 (#29422)
Sameerlite Jun 2, 2026
f48a87e
fix(ci): normalize whitespace before classname-to-path awk on test re…
mateo-berri Jun 2, 2026
c8bcfbb
feat(a2a): watsonx Orchestrate agent provider (#29410)
Sameerlite Jun 2, 2026
dba1f2d
fix(azure_ai): strip tool-level extra fields on 400 and retry (#29479)
Sameerlite Jun 2, 2026
d76950d
fix(docs): remove fixed dimensions from README hero image (#29496)
mateo-berri Jun 2, 2026
b84f7f8
Litellm oss staging (#29492)
Sameerlite Jun 2, 2026
84c4c12
fix: small CLAUDE.md nits (#29504)
mateo-berri Jun 2, 2026
b98a656
Add MCP semantic conventions to otelv2 (#29468)
yassin-berriai Jun 2, 2026
ce7b1fd
fix(passthrough): emit otel guardrail span when a guardrail blocks (#…
yassin-berriai Jun 2, 2026
efaafbb
fix(proxy): strip NUL bytes from spend log payloads to prevent Postgr…
milan-berri Jun 2, 2026
6d6eda8
[internal copy of #28008] Support MCP OAuth passthrough and issuer-sc…
mateo-berri Jun 2, 2026
ebbc5cc
feat(vector-stores): forward per-request params to Vertex AI Search (…
ryan-crabbe-berri Jun 2, 2026
4a81ec4
feat(proxy): add per-MCP-server RPM rate limiting for keys and teams …
Sameerlite Jun 2, 2026
c160258
fix(tests): drop module-level test calls that break local_testing col…
mateo-berri Jun 2, 2026
ae7ac72
feat(agents): add LangFlow agent provider with A2A session bridging (…
Sameerlite Jun 2, 2026
d991c47
fix(ui/agents): make A2A skill tags enterable and validated (#29512)
ryan-crabbe-berri Jun 2, 2026
f81d8ae
[internal copy of #29232] feat: route future Claude models to Anthrop…
mateo-berri Jun 2, 2026
3f33efd
fix(tests): drop import-time completion call in test_register_model (…
mateo-berri Jun 2, 2026
6a9f542
test: stabilize batch VCR coverage and stop live upload/network leaks…
mateo-berri Jun 2, 2026
a5ccd96
[internal copy of #29003] fix(vertex_ai): use user-supplied api_base …
mateo-berri Jun 2, 2026
3a1c6bb
feat(proxy): native /health/drain preStop hook for graceful shutdown …
yassin-berriai Jun 2, 2026
9d9558e
fix(auth): preserve 401 status for expired JWTs in OTel traces (#29510)
ryan-crabbe-berri Jun 2, 2026
f047b15
fix(otel): capture 401 error details in management endpoint spans (#2…
ryan-crabbe-berri Jun 2, 2026
1aed5e1
test(proxy/utils): pin bottom-of-file helper behavior (#29509)
yuneng-berri Jun 3, 2026
457f65e
test(proxy/utils): pin PrismaClient and spend-update behavior (#29488)
yuneng-berri Jun 3, 2026
b175990
test(proxy/utils): pin ProxyLogging behavior (#29485)
yuneng-berri Jun 3, 2026
08223e1
fix: missing span for guardrail passthrough (#29552)
yassin-berriai Jun 3, 2026
0a767ed
fix(auth): let internal users view search tools (#29542)
ryan-crabbe-berri Jun 3, 2026
8fbdfc7
fix: missing mcp otel attributes (#29554)
yassin-berriai Jun 3, 2026
d45e9e4
fix(proxy): resolve managed video model ids for auth (#29545)
shivamrawat1 Jun 3, 2026
b11833c
fix(key_generate): allow team members to create keys on org-scoped te…
milan-berri Jun 3, 2026
f3e2167
test(pass-through): move Gemini pass-through tests to gemini-3.1-flas…
mateo-berri Jun 3, 2026
c7ab9ad
Litellm oss staging 030626 (#29578)
Sameerlite Jun 3, 2026
48c9fab
Fix : a2a bugs 030626 (#29566)
Sameerlite Jun 3, 2026
53a206a
fix(anthropic/adapter): emit thinking block for reasoning_content-onl…
mateo-berri Jun 3, 2026
34293fa
ci: reproduce default-Windows wheel install to guard MAX_PATH (#29597)
yuneng-berri Jun 3, 2026
cc55662
fix(vertex): strip output_config.effort for Vertex Claude models that…
mateo-berri Jun 3, 2026
2453936
Litellm websocket improvements (#29563)
Sameerlite Jun 3, 2026
5119b94
feat(arize/phoenix): OpenInference rendering parity — tool_calls, cos…
milan-berri Jun 3, 2026
2bbdbfa
fix: passthrough endpoints duplicate logs (#29598)
mateo-berri Jun 3, 2026
84969aa
fix(ci): keep coverage rename green when a parallel node runs no test…
mateo-berri Jun 3, 2026
b4aee2c
test(vcr): close out the remaining VCR live-call leaks (#29603)
mateo-berri Jun 3, 2026
97ba7e1
fix(key_generate): exempt UI/CLI session tokens from the budget ceili…
yuneng-berri Jun 3, 2026
5ee526d
fix(realtime): allow null transcripts in stream logging payloads (#29…
milan-berri Jun 3, 2026
c7f1bcf
build(ui): migrate eslint to flat config and bump eslint-config-next …
ryan-crabbe-berri Jun 3, 2026
e941760
fix(key_generate): scope session-token team-key budget exemption to c…
yuneng-berri Jun 4, 2026
be7b931
fix(proxy): disable proxy buffering on streaming SSE responses (#29557)
mateo-berri Jun 4, 2026
9196098
fix(mcp): gate /public/mcp_hub strictly on litellm.public_mcp_servers…
michelligabriele Jun 4, 2026
443f0ca
ci(ui): frontend-lint job enforcing prettier + eslint on changed file…
ryan-crabbe-berri Jun 4, 2026
216c68d
fix(gemini): googleSearch + server-side tools and googleMaps JSON sch…
Sameerlite Jun 4, 2026
20dc6df
fix(proxy): passthrough 404 when SERVER_ROOT_PATH is set (#29658)
Sameerlite Jun 4, 2026
ed073d3
fix(gemini-realtime): use GA event names for Pipecat 1.3.x compatibil…
Sameerlite Jun 4, 2026
cb04196
Litellm oss staging 040626 (#29671)
Sameerlite Jun 4, 2026
7edf3a9
style(ui): run prettier --write across the dashboard (#29622)
ryan-crabbe-berri Jun 4, 2026
568d291
chore: ignore prettier dashboard reformat in git blame (#29695)
ryan-crabbe-berri Jun 4, 2026
f9142d7
fix(helm): Enable Backend Deployment to mount Gateway config.yaml (#2…
tin-berri Jun 4, 2026
9344f20
fix(proxy): add default=None to LiteLLM_TeamMembership.litellm_budget…
mateo-berri Jun 4, 2026
1dbf466
test: make custom_tokenizer proxy tests hermetic (#29643)
yuneng-berri Jun 4, 2026
770fff7
test(proxy): stop running real-DB tests in GitHub Actions unit jobs (…
ryan-crabbe-berri Jun 4, 2026
41e90a6
chore(ui): remove the bare-fetch lint rule (#29712)
ryan-crabbe-berri Jun 5, 2026
3bd89f2
Litellm jwt mapping virtualkeys (#28510)
shivamrawat1 Jun 5, 2026
f3811ce
refactor(ui): shared HTTP client + location-pinned fetch() lint rule …
ryan-crabbe-berri Jun 5, 2026
56aa55b
fix(proxy): stop team BYOK model name corruption on model edit (#29731)
yuneng-berri Jun 5, 2026
812a221
[internal copy of #29511] feat(guardrails): add sensitive data routin…
mateo-berri Jun 5, 2026
df704d9
fix(proxy/hooks): populate llm_provider on internal rate-limit errors…
mateo-berri Jun 5, 2026
2b7c97b
fix(vertex/anthropic): handle namespace tools and strip client_metada…
Sameerlite Jun 5, 2026
778a7f7
Support OAuth M2M for Databricks Apps A2A agents (#29586)
mateo-berri Jun 5, 2026
8259d6c
fix: small CLAUDE.md nit (#29749)
mateo-berri Jun 5, 2026
1c741b9
fix(anthropic): route Claude Opus 4.8 through adaptive thinking (#29702)
mateo-berri Jun 5, 2026
3f79222
fix(proxy): persist oauth2_flow on MCP server registration (#29690)
michelligabriele Jun 5, 2026
ffd0e9f
[internal copy of #27491] fix(realtime): Fix Realtime Audio Token Cos…
mateo-berri Jun 5, 2026
89f177b
fix(galileo): use ingest traces API and standard logging payload (#29…
Sameerlite Jun 5, 2026
074455c
fix(auth): expand all-team-models sentinel in can_key_call_model for …
Sameerlite Jun 5, 2026
939cff0
test(vcr): stop refreshing cassette TTL on read so cassettes lapse af…
mateo-berri Jun 5, 2026
84247d9
test(ci): record/replay OpenAI image gen so the spend E2E isn't outag…
mateo-berri Jun 5, 2026
a4f5703
fix(ui): route MCP playground auth by oauth2 mode instead of token_ur…
tin-berri Jun 5, 2026
4a5644d
refactor(ui): centralize proxy base URL resolution into tested resolv…
ryan-crabbe-berri Jun 5, 2026
d671a09
Litellm oss staging 050626 (#29774)
Sameerlite Jun 5, 2026
95e3d13
test(google): add google-genai SDK proxy integration tests (#29781)
Sameerlite Jun 5, 2026
b7f47a3
fix(jwt): use resolved DB user_id for spend on legacy email match (#2…
milan-berri Jun 5, 2026
e53bd7c
feat(ui): generate dashboard API types from the proxy OpenAPI spec (#…
ryan-crabbe-berri Jun 6, 2026
53cf3d8
fix(proxy): drop deleted team BYOK model name from team.models (#29820)
yuneng-berri Jun 6, 2026
4ec4ab9
feat(mcp): per-server env vars with global + per-user scopes (#28917)
mateo-berri Jun 6, 2026
6955e6f
refactor(ui): route behavior-preserving networking calls through apiC…
ryan-crabbe-berri Jun 6, 2026
22186f4
fix(ui): persist Tools-tab MCP OAuth token to DB (#29809)
tin-berri Jun 6, 2026
1f171ee
fix(ui): require new expiration when regenerating an expired key (#29…
milan-berri Jun 6, 2026
001bda3
refactor(ui): route query-building networking calls through apiClient…
ryan-crabbe-berri Jun 6, 2026
aa7845d
test(ci): make the image-gen record/replay proxy report cache mode an…
mateo-berri Jun 6, 2026
b3297fc
feat(proxy): hot-reload .env in dev when running with --reload (#29783)
mateo-berri Jun 6, 2026
21d2c3a
fix(ui): stop MCP playground tool calls from sending twice (#29821)
tin-berri Jun 6, 2026
51769a8
feat(fal_ai): add Nano Banana / Gemini 2.5 Flash Image generation sup…
mateo-berri Jun 6, 2026
1fbb78d
Title: Fix managed batch cancel credential resolution (#29734)
shivamrawat1 Jun 6, 2026
fdade8a
Title: fix(proxy): resolve vector store file list credentials from te…
shivamrawat1 Jun 6, 2026
1cff02f
refactor: convert AWS and GCP Terraform stacks into reusable modules …
yassin-berriai Jun 6, 2026
1975b96
chore: update Next.js build artifacts (2026-06-06 20:08 UTC, node v20…
yuneng-berri Jun 6, 2026
43c1037
fix(terraform/gcp): prompt for image_registry in DeployStack one-clic…
yassin-berriai Jun 6, 2026
38b28b9
fix(terraform/gcp): abandon SQL user on destroy (#29855)
yassin-berriai Jun 6, 2026
33c363d
Extend the record/replay proxy to chat, embeddings, moderations, rera…
mateo-berri Jun 6, 2026
f1667b9
chore(deps): bump deps (#29860)
yuneng-berri Jun 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
252 changes: 213 additions & 39 deletions .circleci/config.yml

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@

# Update pydantic code to fix warnings (GH-3600)
876840e9957bc7e9f7d6a2b58c4d7c53dad16481

# style(ui): run prettier --write across the dashboard (#29622)
7edf3a9cb55548b143df1692f4ed7c4681d7fcf7
3 changes: 2 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
*.ipynb linguist-vendored
*.ipynb linguist-vendored
ui/litellm-dashboard/src/lib/http/schema.d.ts linguist-generated
40 changes: 29 additions & 11 deletions .github/workflows/_test-unit-base.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ on:
required: false
type: number
default: 10
dist:
description: "pytest-xdist distribution mode (loadscope|load|worksteal|loadfile|no)"
required: false
type: string
default: "loadscope"
artifact-name:
description: "Unique name for the coverage artifact (must be unique per run)"
required: true
Expand Down Expand Up @@ -82,18 +87,31 @@ jobs:
MAX_FAILURES: ${{ inputs.max-failures }}
WORKERS: ${{ inputs.workers }}
RERUNS: ${{ inputs.reruns }}
DIST: ${{ inputs.dist }}
run: |
uv run --no-sync pytest ${TEST_PATH:?} \
--tb=short -vv \
--maxfail="${MAX_FAILURES}" \
-n "${WORKERS}" \
--reruns "${RERUNS}" \
--reruns-delay 1 \
--dist=loadscope \
--durations=20 \
--cov=./litellm \
--cov-report=xml:coverage.xml \
--cov-config=pyproject.toml
if [ "${WORKERS}" = "0" ]; then
uv run --no-sync pytest ${TEST_PATH:?} \
--tb=short -vv \
--maxfail="${MAX_FAILURES}" \
--reruns "${RERUNS}" \
--reruns-delay 1 \
--durations=20 \
--cov=./litellm \
--cov-report=xml:coverage.xml \
--cov-config=pyproject.toml
else
uv run --no-sync pytest ${TEST_PATH:?} \
--tb=short -vv \
--maxfail="${MAX_FAILURES}" \
-n "${WORKERS}" \
--reruns "${RERUNS}" \
--reruns-delay 1 \
--dist="${DIST}" \
--durations=20 \
--cov=./litellm \
--cov-report=xml:coverage.xml \
--cov-config=pyproject.toml
fi

- name: Save coverage report
if: always()
Expand Down
190 changes: 0 additions & 190 deletions .github/workflows/_test-unit-services-base.yml

This file was deleted.

84 changes: 84 additions & 0 deletions .github/workflows/check-ui-api-types.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Check UI API Types Sync

on:
pull_request:
paths:
- "litellm/proxy/**"
- "litellm/types/**"
- "ui/litellm-dashboard/src/lib/http/schema.d.ts"
- "ui/litellm-dashboard/scripts/gen-api-types.mjs"
- "ui/litellm-dashboard/package.json"
- "ui/litellm-dashboard/package-lock.json"
- ".github/workflows/check-ui-api-types.yml"

permissions:
contents: read

jobs:
check-sync:
name: Verify schema.d.ts matches the proxy OpenAPI spec
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout repository
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: "3.12"

- name: Set up uv
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
with:
version: "0.10.9"

- name: Cache uv dependencies
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: |
~/.cache/uv
.venv
key: ${{ runner.os }}-uv-${{ hashFiles('uv.lock') }}
restore-keys: |
${{ runner.os }}-uv-

- name: Install backend dependencies
run: uv sync --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router

- name: Generate Prisma client
env:
PRISMA_BINARY_CACHE_DIR: ${{ runner.temp }}/prisma-cache
run: uv run --no-sync prisma generate --schema litellm/proxy/schema.prisma

- name: Set up Node.js
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0
with:
node-version: "20"
cache: "npm"
cache-dependency-path: ui/litellm-dashboard/package-lock.json

- name: Install dashboard dependencies
working-directory: ui/litellm-dashboard
run: npm ci

- name: Regenerate types from the live spec
working-directory: ui/litellm-dashboard
env:
LITELLM_PYTHON: "uv run --no-sync python"
run: npm run gen:api

- name: Fail if types are stale
run: |
if ! git diff --exit-code -- ui/litellm-dashboard/src/lib/http/schema.d.ts; then
echo "::error file=ui/litellm-dashboard/src/lib/http/schema.d.ts::Generated API types are out of sync with the proxy OpenAPI spec."
echo ""
echo "A backend route or model changed without regenerating the dashboard types."
echo "To fix, run from ui/litellm-dashboard:"
echo " npm run gen:api"
echo "then commit the updated src/lib/http/schema.d.ts."
exit 1
fi
echo "schema.d.ts is in sync with the proxy OpenAPI spec."
25 changes: 25 additions & 0 deletions .github/workflows/create-release-branch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,28 @@ jobs:
sha: commitHash,
});
core.info(`Created branch ${branchName} at ${commitHash}`);

- name: Create stable line branch
env:
TAG: ${{ inputs.tag }}
COMMIT_HASH: ${{ inputs.commit_hash }}
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const tag = process.env.TAG;
const commitHash = process.env.COMMIT_HASH;

const match = tag.match(/^v?(\d+)\.(\d+)\.0$/);
if (!match) {
core.info(`Tag ${tag} is not the X.Y.0 stable opener; skipping stable line branch`);
return;
}
const lineBranch = `stable/${match[1]}.${match[2]}.x`;

await github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: `refs/heads/${lineBranch}`,
sha: commitHash,
});
core.info(`Created branch ${lineBranch} at ${commitHash}`);
Loading
Loading