Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
179 commits
Select commit Hold shift + click to select a range
727a471
[Refactor] UI - Spend Logs: consolidate filter state and extract comp…
ryan-crabbe-berri May 19, 2026
92de742
fix(tests): replace shut-down gpt-4o-audio-preview with gpt-audio-1.5…
yuneng-berri May 19, 2026
1480ec6
chore(ci): bump versions (#28287)
yuneng-berri May 19, 2026
cde4b1a
feat: propagate team_id and team_alias to all child OTEL spans (#28273)
yassin-berriai May 19, 2026
3c3d131
Day 0 support : Gemini 3.5 Flash (#28268)
Sameerlite May 19, 2026
e59e34b
Gemini managed agents support (#28270)
Sameerlite May 19, 2026
99a63d5
feat(gemini): add gemini-3.1-flash-lite model cost map (#28320)
Sameerlite May 20, 2026
0fb7104
fix(spend_counter): seed Redis counter via SET NX to prevent cross-po…
milan-berri May 20, 2026
183092d
fix(proxy): normalize batch file IDs before ManagedObjectTable write …
Sameerlite May 20, 2026
7f563b2
fix(router): use forwarded model_id for native Azure container IDs (#…
Sameerlite May 20, 2026
2eeca2d
fix(ui): restore log filter loading indicator (#28282)
ryan-crabbe-berri May 20, 2026
5a00cb1
test(e2e): migrate runner to uv, add All Proxy Models key test (#28313)
ryan-crabbe-berri May 20, 2026
fb73995
feat(ui): team passthrough routes create parity + edit load fix (#28098)
ryan-crabbe-berri May 20, 2026
68efe69
fix(mcp): JWT on tools/list and REST tools/call server resolution (#2…
Sameerlite May 20, 2026
f3a669f
feat(interactions): migrate to Google Interactions API steps schema (…
Sameerlite May 20, 2026
f82ff7e
test(ui-e2e): admin key creation with a specific proxy model (#28365)
ryan-crabbe-berri May 20, 2026
fecf212
fix(vertex_ai): omit function_call id on Vertex Gemini 3.5+ tool turn…
Sameerlite May 20, 2026
718c463
feat(mcp): allow native MCP OAuth support for cursor (#28327)
Sameerlite May 20, 2026
8acf64e
fix(interactions): never drop streamed text deltas; always emit termi…
mateo-berri May 20, 2026
2f9ac77
fix(proxy): expose Prisma idle/connect timeout + extra DB URL params …
yassin-berriai May 21, 2026
9881969
Litellm oss staging 1 (#28337)
Sameerlite May 21, 2026
35520ad
fix: serialize guardrail_response to JSON in OTEL traces (#28362)
yassin-berriai May 21, 2026
f99fb5f
chore(ci): merge dev branch (#28314)
yuneng-berri May 21, 2026
e23d06d
test(realtime): expect session.created as xAI realtime initial event …
yuneng-berri May 21, 2026
79a5a7a
feat(tests): behavior-pinning harness + Key Tier-1 matrix (#28321)
yuneng-berri May 21, 2026
37ef8d9
fix(proxy): hydrate wildcard discovery credentials (#28284) (#28419)
yuneng-berri May 21, 2026
b7e978a
Litellm oss staging 04 21 2026 2 (#26569)
Sameerlite May 21, 2026
697a90e
fix: end user logs (#27758) (#28290)
yuneng-berri May 21, 2026
b60d467
fix(vertex_gemma): strip context_management from request body (#28438)
mateo-berri May 21, 2026
b557492
fix(logging): recalculate cost after router retry failures (#28476)
milan-berri May 21, 2026
10bd740
feat: add guardrail violation span attributes and fix missing spans o…
yassin-berriai May 21, 2026
67e6e5e
test(proxy): behavior-pinning matrix for team management endpoints (#…
yuneng-berri May 21, 2026
3f953df
test(vertex_ai): tolerate transient 500 in google maps grounding test…
yuneng-berri May 22, 2026
f1abe03
fix(docker): restore npm to non_root builder image (#28519)
yuneng-berri May 22, 2026
0715ed3
build(deps): bump next from 16.2.4 to 16.2.6 in /ui/litellm-dashboard…
yuneng-berri May 22, 2026
2a5dfcd
build(deps-dev): bump black to 26.3.1 and apply formatting (#28525)
yuneng-berri May 22, 2026
9fcd424
chore(deps): bump deps (#28528)
yuneng-berri May 22, 2026
07bcd2c
test(e2e): forward LITELLM_LICENSE to UI e2e proxy (#28398)
ryan-crabbe-berri May 22, 2026
d04373f
Add granian as a ASGI compliant web server. Provider better throughpu…
harish-berri May 22, 2026
d96e260
Fix conflicts and UI (#28477)
Sameerlite May 22, 2026
7a93cce
Add error_description and hint for oauth flows (#28471)
Sameerlite May 22, 2026
ef36e89
feat(mcp): Add tool call and tool list support via UI for Oauth mcps …
Sameerlite May 22, 2026
50a3f10
feat(proxy): persist allowlisted OIDC claims in CLI SSO poll (#28463)
Sameerlite May 22, 2026
21a21e0
fix(responses): use OpenAI SSEDecoder for Responses API streaming (#2…
Sameerlite May 22, 2026
e9f0edd
Litellm oss staging 2 (#28582)
Sameerlite May 22, 2026
b0b25ae
Include team alias in CLI JWT token (#28621)
mateo-berri May 22, 2026
985574b
fix(check_licenses): read PEP 639 license-expression metadata (#28529)
yuneng-berri May 22, 2026
f62ae93
test(proxy): behavior-pinning matrix for tier-2/3 key + team manageme…
yuneng-berri May 22, 2026
6439899
chore(test): remove dead old Playwright e2e suite (#28632)
ryan-crabbe-berri May 22, 2026
9600fda
fix(sagemaker): send native Cohere embed payload to Cohere SageMaker …
milan-berri May 22, 2026
a3c953e
style: apply black formatting to fix lint CI (LIT-3274) (#28639) (#28…
krrish-berri-2 May 22, 2026
1b141bc
fix(bedrock): decouple STS region from Bedrock aws_region_name (#28245)
milan-berri May 22, 2026
574ee75
test(streaming): tolerate Vertex 429 wrapped in MidStreamFallbackErro…
yuneng-berri May 22, 2026
f35e7eb
feat(guardrails): add Microsoft Purview DLP guardrail (#24966)
Sameerlite May 22, 2026
7270f72
fix(mcp): forward upstream initialize instructions on cold gateway in…
milan-berri May 22, 2026
492891c
CI: copy of #25177 (OCI GenAI: embeddings, streaming/reasoning fixes,…
mateo-berri May 23, 2026
3b2ce20
encrypt callback_vars in key/team metadata at rest (#27141)
Michael-RZ-Berri May 23, 2026
2eab9ee
perf: reduce per-request and per-chunk overhead across Anthropic stre…
yassin-berriai May 23, 2026
203b529
feat(azure): add speech transcription config support (#27482)
ishaan-berri May 23, 2026
5e16f20
test(proxy): phase-4 payload behavior pinning for tier-2/3 key + team…
yuneng-berri May 23, 2026
14c0a2b
feat(prometheus): emit per-token-type detail metrics (LIT-3220) (#283…
ishaan-berri May 23, 2026
886e91b
fix(otel): stamp http.response.status_code on all error responses (#2…
ryan-crabbe-berri May 23, 2026
8513d7f
chore: update Next.js build artifacts (2026-05-23 19:21 UTC, node v20…
yuneng-berri May 23, 2026
7c667b8
fix(helm): drop main- prefix from default image tag (#28710)
yuneng-berri May 23, 2026
3bcfe41
test(model_prices): allow audio_transcription_config in schema (#28708)
yuneng-berri May 23, 2026
5f73ad4
fix(team): refresh team cache on team_model_add/delete (LIT-3244) (#2…
yuneng-berri May 23, 2026
92d4bba
fix(ui/add-model): stop vertex_ai-anthropic_models from leaking under…
ryan-crabbe-berri May 23, 2026
4148667
Fix spend logs v2 route permissions (#28705)
ryan-crabbe-berri May 23, 2026
f45909c
fix(proxy): Bedrock Knowledge Base pass-through: preserve SigV4 heade…
milan-berri May 25, 2026
f9407bc
chore(tests): migrate Bedrock CI to AWS account 941277531214 (#28728)
mateo-berri May 25, 2026
30551de
fix(otel): export SERVER span on management-endpoint success without …
yassin-berriai May 25, 2026
5f75be5
chore(ci): merge dev branch (#28801)
yuneng-berri May 25, 2026
d98ada8
chore(ci): merge dev branch (#28657)
yuneng-berri May 25, 2026
c127968
fix(ui): show 2-decimal precision for max_budget on key overview (#28…
ryan-crabbe-berri May 25, 2026
66f10bc
feat(proxy): allow `llm_api_routes` virtual keys to list MCP servers …
ryan-crabbe-berri May 25, 2026
0d5040f
chore(ci): merge dev branch (#28807)
yuneng-berri May 26, 2026
7cd9850
fix(team): keep team_alias cache in sync on _cache_team_object writes…
yuneng-berri May 26, 2026
1b6788e
fix(proxy): hydrate wildcard discovery credentials (#28284) (#28822)
yuneng-berri May 26, 2026
48dd71b
ci: add daily oss-agent-shin branch creation workflow (#28829)
ishaan-berri May 26, 2026
f38c16c
test(proxy): add harness for proxy_server.py behavior-pinning (#28827)
yuneng-berri May 26, 2026
c23b19f
feat(openai): apply regional-processing cost uplift for EU/US data re…
mateo-berri May 26, 2026
48d7e15
chore(admin-ui): regenerate static export with trailingSlash: true (#…
mateo-berri May 26, 2026
96a2e8b
fix(azure): preserve AD token refresh in v1 OpenAI client path (#28627)
mateo-berri May 26, 2026
a8263cb
fix(ui): route API Reference back to query-param page (#28726)
ryan-crabbe-berri May 26, 2026
f75a7c6
fix(model-edit): allow clearing custom pricing on wildcard models (#2…
ryan-crabbe-berri May 26, 2026
533eab4
fix(tests/vcr): make Redis cassette cache replay deterministically (z…
mateo-berri May 26, 2026
fbff60e
fix(proxy): strip LiteLLM policy tracking from OpenAI batch metadata …
shivamrawat1 May 26, 2026
bd2d0ad
Litellm OpenAI double prefix bug (#28661)
shivamrawat1 May 26, 2026
d52fbfb
Litellm oss staging 250526 (#28770)
Sameerlite May 26, 2026
f17dfcd
fix(bedrock): align toolUse/toolSpec names and allow hyphens (#28874)
Sameerlite May 26, 2026
79a4909
fix(realtime): send TEXT frames and valid guardrail session.update (#…
Sameerlite May 26, 2026
123a9ce
fix(mcp): extend key access-group union to MCP servers (#28890)
ryan-crabbe-berri May 26, 2026
f25648c
fix(galileo): support hosted v2 spans API and string output extractio…
Sameerlite May 26, 2026
9c0a98c
fix(proxy): exclude proxy_server_request from its own body snapshot (…
michelligabriele May 26, 2026
3d0e0ce
[Feat] Add tool calling support for gemini and vertex ai live api (#2…
Sameerlite May 26, 2026
13512e7
refactor(ui): remove dead App Router scaffolding in (dashboard)/* (#2…
ryan-crabbe-berri May 26, 2026
a645d46
fix(docker): use system Node in componentized builders + retry apk ad…
yassin-berriai May 26, 2026
b6fd7f7
docs(agents): require consent before writing new third-party names (#…
yuneng-berri May 26, 2026
73e9071
refactor(ui): extract auth state into AuthContext (#28910)
ryan-crabbe-berri May 27, 2026
ea01533
fix(mcp): resolve team.access_group_ids → MCP servers (#28997)
ryan-crabbe-berri May 27, 2026
7cae5dc
test(ui): e2e cover team model edit + admin identity in navbar (#28652)
ryan-crabbe-berri May 27, 2026
b0ea013
test(e2e): cover add-fallback flow in Router Settings (#29069)
ryan-crabbe-berri May 27, 2026
9cac047
test(e2e): cover Team-BYOK add-model flow as proxy admin (#29068)
ryan-crabbe-berri May 27, 2026
157e7a0
fix(containers): record ownership for service-account keys + fix Pris…
Sameerlite May 28, 2026
bc31c57
test(e2e): cover add-MCP-server flow via discovery → custom form (#29…
ryan-crabbe-berri May 28, 2026
5699a06
test(e2e): cover AI Hub make-public flow and public model_hub_table (…
ryan-crabbe-berri May 28, 2026
95015de
feat: add support for claude code goal mode for bedrock opus output c…
mateo-berri May 28, 2026
5bd59b3
feat(guardrails): wire apply_guardrail into proxy logging callbacks (…
Sameerlite May 28, 2026
1cb19b1
chore(ci): merge dev brach (#29192)
yuneng-berri May 28, 2026
d5d6b26
fix: improve bedrock streaming hot path perf (#28720)
yassin-berriai May 28, 2026
eef1ec3
fix(proxy): enforce tag budgets for key-level tags (#29108)
Sameerlite May 28, 2026
69afcd0
fix(vertex-ai): use DB credentials in video handlers + implement Veo …
Sameerlite May 28, 2026
928f09f
fix(datadog): drain cost-management queue + opt-in FinOps tag allowli…
michelligabriele May 28, 2026
47c9266
feat(helm): split per-component ServiceAccounts for gateway, backend,…
yassin-berriai May 28, 2026
5e2d75d
bump deps (#29208) (#29226)
yuneng-berri May 28, 2026
76f56c3
fix(tests/vcr): mint Google OAuth tokens live to prevent stale-token …
yuneng-berri May 29, 2026
6b23d32
chore(cookbook): bump Go directive to 1.26.3 in gollem example (#29234)
yuneng-berri May 29, 2026
ffc113b
chore(ci): bump version (#29242)
yuneng-berri May 29, 2026
bae0459
feat(anthropic): add Claude Opus 4.8 and prune reasoning-effort flags…
mateo-berri May 29, 2026
01e83e2
fix(ci): restore real Bedrock batch S3 bucket and role in oai_misc_co…
mateo-berri May 29, 2026
9918a9c
fix(guardrails): persist disable_global_guardrails on keys (#29233)
ryan-crabbe-berri May 29, 2026
2bfbf14
test(e2e): cover Team Admin view + member + key flows (#29072)
ryan-crabbe-berri May 29, 2026
f27df8d
docs: hand-written CLAUDE.md; point GEMINI.md and AGENTS.md at it (#2…
mateo-berri May 29, 2026
68852ef
fix(teams): expose keys_count on /v2/team/list and wire UI Resources …
michelligabriele May 29, 2026
a55817c
fix(anthropic): stop injecting unsupported output_config.effort=xhigh…
mateo-berri May 29, 2026
10bda44
test(e2e): cover Internal Viewer nav, key, and team-info gating (#29075)
ryan-crabbe-berri May 29, 2026
fcd5760
test(e2e): cover Internal User key modal, team info, key page (#29074)
ryan-crabbe-berri May 29, 2026
5eafe1c
test(e2e): cover navbar Logout flow as proxy admin (#29076)
ryan-crabbe-berri May 29, 2026
909a5f5
fix(mcp): resolve key.access_group_ids → MCP servers (ungated) (#29195)
ryan-crabbe-berri May 29, 2026
0ffab87
fix(router): enforce deployment budgets for dynamically added models …
Sameerlite May 30, 2026
70d2748
fix(proxy): map stripped batch body.model to proxy alias for auth (#2…
Sameerlite May 30, 2026
c792df6
feat(mcp): support stateless and stateful clients via session-id rout…
Sameerlite May 30, 2026
1d9095f
fix(bedrock): support tool search results + chat annotations (#29120)
Sameerlite May 30, 2026
83fcaca
fix(mcp): ignore stale ids on key save (#29128)
Sameerlite May 30, 2026
af17400
feat(a2a): well-known agent-card discovery + LangGraph Platform mode …
Sameerlite May 30, 2026
c754c56
fix(proxy): link passthrough success spans to the SERVER root OTEL sp…
ryan-crabbe-berri May 30, 2026
581c30f
[internal copy of #29089] fix: duplicate claude code traces (#29311)
mateo-berri May 30, 2026
d82eb33
feat(otel): typed semconv-aligned OpenTelemetry instrumentation (#28909)
yassin-berriai May 30, 2026
12d29a3
tests(proxy_server): surface current behavior in tests (#29309)
yuneng-berri May 30, 2026
8928389
test(e2e): cover Internal User create-key flow when in no teams (#29083)
ryan-crabbe-berri May 30, 2026
37e6e2d
test(e2e): assert internal-user navbar identity is scoped to that use…
ryan-crabbe-berri May 30, 2026
3be3c1d
feat(otel): add team_metadata, http.route, and model names to inferen…
yassin-berriai May 30, 2026
4cc3dd7
feat(context_management): compact_20260112 polyfill for non-Anthropic…
Sameerlite May 30, 2026
967fed1
feat(enterprise): add RESEND_FROM_EMAIL for self-hosted Resend sends …
shivamrawat1 May 30, 2026
f11c12d
Revert "chore(tests): migrate Bedrock CI to AWS account 941277531214 …
mateo-berri May 30, 2026
ace3c65
fix(mcp): preserve source_url in GET /v1/mcp/server list responses (#…
shivamrawat1 May 30, 2026
2d4c13c
fix(mcp): preserve omitted fields on PUT /v1/mcp/server partial updat…
shivamrawat1 May 30, 2026
bfbb5d2
fix(ci): make litellm_internal_staging green (logging test + Bedrock …
mateo-berri May 30, 2026
94a043e
refactor(proxy/auth): normalize Bearer prefix in safe-hash helper (#2…
yuneng-berri May 30, 2026
152b117
test(reasoning-effort-grid): cover Claude Opus 4.8 across provider ro…
mateo-berri May 30, 2026
4c3efe9
fix(guardrails): return HTTP 400 for litellm content filter blocks (#…
shivamrawat1 May 30, 2026
7ca796b
fix(proxy): restrict vector store index create/delete to proxy admins…
shivamrawat1 May 30, 2026
ba26997
feat(pass_through): extend passthrough_managed_object_ids to Azure (#…
Sameerlite May 30, 2026
dc4f5b1
fix(proxy): enforce allowed_passthrough_routes for auth=true pass-thr…
shivamrawat1 May 31, 2026
90b5104
feat(mcp/auth): additive key access-group grants + opt-in member assi…
ryan-crabbe-berri May 31, 2026
7d1bd9d
fix(reset_budget): write only {spend, budget_reset_at} and stop pre-z…
yuneng-berri May 31, 2026
a9cc6ed
test(e2e): cover PROXY_LOGOUT_URL redirect on Logout (#29080)
ryan-crabbe-berri May 31, 2026
f0ebfb2
fix(ui): break logout redirect loop across origins (#29360)
yuneng-berri May 31, 2026
117136c
fix(openai-moderation): wire streaming flags through to unified dispa…
michelligabriele May 31, 2026
8b16b61
chore: update Next.js build artifacts (2026-05-31 02:04 UTC, node v20…
yuneng-berri May 31, 2026
80cf50d
fix(v3 limiter): cap no-max_tokens TPM floor at smallest configured l…
michelligabriele May 31, 2026
54ed5a4
fix(e2e): tolerate trailing slash in SERVER_ROOT_PATH login redirect …
yuneng-berri May 31, 2026
28c0d85
chore(deps): bump deps (#29373)
yuneng-berri May 31, 2026
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
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
  •  
  •  
  •  
97 changes: 56 additions & 41 deletions .circleci/config.yml

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@

**Please complete all items before asking a LiteLLM maintainer to review your PR**

- [ ] I have Added testing in the [`tests/test_litellm/`](https://github.com/BerriAI/litellm/tree/main/tests/test_litellm) directory, **Adding at least 1 test is a hard requirement** - [see details](https://docs.litellm.ai/docs/extras/contributing_code)
- [ ] I have added meaningful tests
- [ ] My PR passes all unit tests on [`make test-unit`](https://docs.litellm.ai/docs/extras/contributing_code)
- [ ] My PR's scope is as isolated as possible, it only solves 1 specific problem
- [ ] My PR's scope is as isolated as possible; it only solves 1 specific problem
- [ ] I have requested a Greptile review by commenting `@greptileai` and received a **Confidence Score of at least 4/5** before requesting a maintainer review

## Delays in PR merge?
Expand Down
28 changes: 28 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,31 @@ jobs:
uses: github/codeql-action/analyze@ebcb5b36ded6beda4ceefea6a8bc4cc885255bb3 # v3
with:
category: "/language:${{ matrix.language }}"
output: sarif-results
upload: failure-only

# py/weak-sensitive-data-hashing (CWE-328) fires on the OCI signing call at
# litellm/llms/oci/common_utils.py, which hashes the HTTP request body to
# produce the x-content-sha256 header required by the OCI HTTP signing spec —
# a content-integrity hash, not a password or secret hash. SHA-256 is mandated
# by Oracle for this header; see
# https://docs.oracle.com/en-us/iaas/Content/API/Concepts/signingrequests.htm
# The `usedforsecurity=False` flag on the hashlib.sha256 call already declares
# non-security intent, but CodeQL's taint flow still re-fires when callers
# further up the stack are modified. The suppression is scoped to this one
# file/rule pair via SARIF post-filtering so every other callsite of
# py/weak-sensitive-data-hashing in the repository continues to be analyzed.
- name: Filter SARIF (OCI sha256)
if: matrix.language == 'python'
uses: advanced-security/filter-sarif@2da736ff05ef065cb2894ac6892e47b5eac2c3c0 # v1.1
with:
patterns: |
-litellm/llms/oci/common_utils.py:py/weak-sensitive-data-hashing
input: sarif-results/python.sarif
output: sarif-results/python.sarif

- name: Upload SARIF
uses: github/codeql-action/upload-sarif@ebcb5b36ded6beda4ceefea6a8bc4cc885255bb3 # v3
with:
sarif_file: sarif-results
category: "/language:${{ matrix.language }}"
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}`);
47 changes: 47 additions & 0 deletions .github/workflows/create_daily_oss_agent_shin_branch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Create Daily oss-agent-shin Branch

on:
schedule:
- cron: "0 0 * * *" # Runs every day at midnight UTC
workflow_dispatch: # Allow manual trigger

jobs:
create-oss-agent-shin-branch:
if: github.repository == 'BerriAI/litellm'
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- name: Checkout repository
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
with:
fetch-depth: 0
persist-credentials: false

- name: Create daily oss-agent-shin branch
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Configure Git user
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

# Generate branch name with MM_DD_YYYY format
BRANCH_NAME="litellm_oss_agent_shin_$(date +'%m_%d_%Y')"
echo "Creating branch: $BRANCH_NAME"

# Fetch all branches
git fetch --all

# Check if the branch already exists
if git show-ref --verify --quiet refs/remotes/origin/$BRANCH_NAME; then
echo "Branch $BRANCH_NAME already exists. Skipping creation."
else
echo "Creating new branch: $BRANCH_NAME"
# Create the new branch from main
git checkout -b $BRANCH_NAME origin/main
# Push the new branch
git push origin $BRANCH_NAME
echo "Successfully created and pushed branch: $BRANCH_NAME"
fi
2 changes: 2 additions & 0 deletions .github/workflows/test-unit-proxy-db.yml
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,10 @@ jobs:
tests/proxy_unit_tests/test_models_fallback_endpoint.py
tests/proxy_unit_tests/test_google_endpoint_routing.py
tests/proxy_unit_tests/test_google_gemini_proxy_request.py
tests/proxy_unit_tests/test_gemini_agents_endpoints.py
tests/proxy_unit_tests/test_get_favicon.py
tests/proxy_unit_tests/test_get_image.py
tests/proxy_unit_tests/test_reducto_ocr_route.py
tests/proxy_unit_tests/test_ui_path_detection.py
tests/proxy_unit_tests/test_prompt_test_endpoint.py
tests/proxy_unit_tests/test_check_batch_cost.py
Expand Down
15 changes: 15 additions & 0 deletions .github/workflows/test-unit-proxy-endpoints.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
- litellm_internal_staging
- litellm_oss_branch
- "litellm_**"
workflow_dispatch:

permissions:
contents: read
Expand All @@ -32,6 +33,7 @@ jobs:
tests/test_litellm/proxy/image_endpoints
tests/test_litellm/proxy/vector_store_endpoints
tests/test_litellm/proxy/agent_endpoints
tests/test_litellm/proxy/a2a
tests/test_litellm/proxy/discovery_endpoints
tests/test_litellm/proxy/health_endpoints
tests/test_litellm/proxy/public_endpoints
Expand All @@ -42,3 +44,16 @@ jobs:
workers: 2
reruns: 2
artifact-name: proxy-endpoints

# Behavior-pinning tests for litellm/proxy/proxy_server.py. Owns its
# own job (not a path on the proxy-endpoints job above) so its budget
# is independent and its coverage artifact is uploaded separately.
# See: https://www.notion.so/36c43b8acdab81ee845fd5365128a2fc
proxy-server:
uses: ./.github/workflows/_test-unit-base.yml
with:
test-path: tests/test_litellm/proxy/proxy_server
workers: 4
reruns: 2
timeout-minutes: 60
artifact-name: proxy-server
34 changes: 34 additions & 0 deletions .github/workflows/test-unit-proxy-mgmt-behavior.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: "Unit Tests: Proxy Management-Endpoint Behavior Pinning"

on:
pull_request:
branches:
- main
- litellm_internal_staging
- litellm_oss_branch
- "litellm_**"

permissions:
contents: read
id-token: write
pull-requests: write

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
proxy-mgmt-behavior:
uses: ./.github/workflows/_test-unit-services-base.yml
with:
test-path: tests/proxy_behavior
# workers=0 (no xdist): the world seed is a single shared Postgres
# state — two xdist workers both call seed_world() and race on the
# ``behavior-pin-budget`` row, producing UniqueViolation + cascading
# missing-membership FK failures. The whole suite is ~7s sequentially,
# so the cost of disabling parallelism here is negligible.
workers: 0
reruns: 0
enable-postgres: true
artifact-name: proxy-mgmt-behavior
timeout-minutes: 15
25 changes: 25 additions & 0 deletions .github/workflows/test_server_root_path.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,31 @@ jobs:
docker logs litellm-test
exit 1

- name: Setup Node for Playwright
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "20"

- name: Install UI deps and Chromium
working-directory: ui/litellm-dashboard
run: |
npm ci
npx playwright install --with-deps chromium

- name: Run SERVER_ROOT_PATH redirect e2e
working-directory: ui/litellm-dashboard
env:
SERVER_ROOT_PATH: ${{ matrix.root_path }}
run: npx playwright test --config=e2e_tests/serverRootPath.config.ts

- name: Upload Playwright artifacts on failure
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: playwright-trace-${{ strategy.job-index }}
path: ui/litellm-dashboard/test-results/
retention-days: 7

- name: Cleanup
if: always()
run: |
Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ litellm/tests/config_*.yaml
litellm/tests/langfuse.log
langfuse.log
.langfuse.log
.pin_list.txt
.cov_new.xml
litellm/tests/test_custom_logger.py
litellm/tests/langfuse.log
litellm/tests/dynamo*.log
Expand Down Expand Up @@ -120,4 +122,5 @@ crash.log
crash.*.log
# .terraform.lock.hcl is intentionally NOT ignored — it pins provider versions
# and should be committed.
.vscode
.vscode
.pin_list.txt
Loading
Loading