Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
183 commits
Select commit Hold shift + click to select a range
1eb1a94
docs: sync main page (src/pages/index.md) with docs/index.md
Chesars Jan 17, 2026
9dc0856
feat: jwt mapping vkeyv
Harshit28j Feb 28, 2026
465adce
feat reaq changes
Harshit28j Feb 28, 2026
941129c
fix: resolve field mismatches and direct DB query in jwt key mapping
Harshit28j Mar 1, 2026
9633909
Update litellm/proxy/management_endpoints/jwt_key_mapping_endpoints.py
Harshit28j Mar 1, 2026
0f9d380
fix: add pagination to jwt key mapping list endpoint
Harshit28j Mar 1, 2026
0e2dd4a
Update litellm/proxy/management_endpoints/jwt_key_mapping_endpoints.py
Harshit28j Mar 1, 2026
911ba14
fix: address remaining greptile feedback for jwt key mapping
Harshit28j Mar 1, 2026
28a48ac
fix: add @log_db_metrics and move jwt mapping before auth_builder
Harshit28j Mar 1, 2026
a3cdf6c
fix(streaming): don't emit finish_reason on output_item.done for func…
dsteeley Mar 2, 2026
a14ef27
test: fix copy-paste print message in multi-tool-call test
dsteeley Mar 2, 2026
565a527
Merge remote-tracking branch 'upstream/main' into pr-22553
dsteeley Mar 3, 2026
8665e92
chore: regenerate poetry.lock to match pyproject.toml (#3)
github-actions[bot] Mar 3, 2026
36999b2
[Chore] update mcp documentation for header forwarding
Sameerlite Mar 4, 2026
39cdd3d
test(streaming): add comprehensive parallel tool call integration test
dsteeley Mar 4, 2026
4059b4f
Merge pull request #19280 from Chesars/docs/update-main-page-index
Chesars Mar 4, 2026
fb8bd60
fix(streaming): prevent Vertex AI Claude content truncation when fini…
Mar 4, 2026
12691dc
fix: WebSearch interception fails with thinking enabled + SpendLimit …
Mar 4, 2026
4d97818
fix(tools): gracefully repair truncated JSON in tool call arguments
Mar 4, 2026
2f15686
fix: address greptile feedback - redact hashed tokens, proper error c…
Harshit28j Mar 4, 2026
63459d6
docs: add JWT-to-Virtual-Key mapping documentation
Harshit28j Mar 4, 2026
36e63bd
Update litellm/proxy/management_endpoints/jwt_key_mapping_endpoints.py
Harshit28j Mar 4, 2026
bca8730
Merge remote-tracking branch 'upstream/main'
Chesars Mar 4, 2026
20a41a6
fix: update gemini-live model supported_endpoints to /vertex_ai/live
Chesars Dec 15, 2025
ddf9598
fix: use /v1/realtime for gemini/ provider live model
Chesars Dec 15, 2025
0e1a633
fix: update mode to realtime for gemini-live models
Chesars Dec 17, 2025
028dd3f
Merge pull request #22814 from Chesars/fix/gemini-live-supported-endp…
Chesars Mar 4, 2026
09e1a06
fix(ui): allow internal users/team admins to select guardrails when c…
ishaan-jaff Mar 4, 2026
0909eee
add missing bedrock models (#22810)
marty-sullivan Mar 4, 2026
063a1a4
Update litellm/proxy/management_endpoints/jwt_key_mapping_endpoints.py
Harshit28j Mar 4, 2026
b7f43d4
feat(ui): add time to first token (TTFT) to logs (#22819)
ishaan-jaff Mar 4, 2026
7512f7d
fix(lint): resolve PLR0915 too-many-statements in 4 files
jquinter Mar 4, 2026
e335dd7
fix(sap provider layer): enable response-format for anthropic models …
guilherme-segantini Mar 5, 2026
9a4bacd
fix: add missing spec_path column to LiteLLM_MCPServerTable schema (#…
ishaan-jaff Mar 5, 2026
28fe9fa
fix: complexity_router crashes on list-format message content (OpenAI…
tombii Mar 5, 2026
07cb6d5
Merge pull request #22372 from BerriAI/litellm_jwt_vkey_map
Harshit28j Mar 5, 2026
614a9fe
Fix MCP server search in playground (#22824)
ishaan-jaff Mar 5, 2026
e3810b4
feat: make model selection optional when creating virtual keys (#22826)
ishaan-jaff Mar 5, 2026
e34960b
[Test] UI - Projects: add Vitest unit tests for all Projects components
yuneng-jiang Mar 5, 2026
06d1616
remove unused exports from networking.tsx
yuneng-jiang Mar 5, 2026
9501a16
[Fix] Docs build broken due to mismatched @docusaurus package versions
yuneng-jiang Mar 5, 2026
6ca7187
Merge pull request #22827 from BerriAI/litellm_cleanup_networking_exp…
yuneng-jiang Mar 5, 2026
e4dd3ef
Merge pull request #22829 from BerriAI/litellm_projects_vitest
yuneng-jiang Mar 5, 2026
a33d3e0
Merge pull request #22830 from BerriAI/litellm_fix_docs_build
yuneng-jiang Mar 5, 2026
dd183a7
[Feat] UI - Allow sorting MCPs by created_at, Display name date (#22…
ishaan-jaff Mar 5, 2026
9897df5
feat(mcp): allow admins to override tool name and description per MCP…
ishaan-jaff Mar 5, 2026
b6c2028
chore for release notes
shivamrawat1 Mar 5, 2026
440ae89
Merge pull request #22833 from BerriAI/doc_update_for_v1.82.0
shivamrawat1 Mar 5, 2026
c60ea18
chore
shivamrawat1 Mar 5, 2026
9c20f4f
Merge pull request #22834 from BerriAI/doc_update_v1.81.14.stable
shivamrawat1 Mar 5, 2026
1c46495
new update
shivamrawat1 Mar 5, 2026
588b9b7
Merge pull request #22837 from BerriAI/doc_update_v1.81.14.stable
shivamrawat1 Mar 5, 2026
5bd692e
doc change
shivamrawat1 Mar 5, 2026
7f4d1bc
Merge pull request #22838 from BerriAI/doc_update_v1.81.14.pip
shivamrawat1 Mar 5, 2026
38ea5ab
Delete ttft-logs-screenshot.png
ishaan-jaff Mar 5, 2026
fa1b7b1
[Fix] UI - MCP Servers: align Current Team section with tabs
yuneng-jiang Mar 5, 2026
cb4aee5
fix: remove px-6 from table wrapper to align with tabs
yuneng-jiang Mar 5, 2026
726a8cc
[Feature] Add option to hide bouncing icon in header
yuneng-jiang Mar 5, 2026
caa0296
docs(v1.82.0): add v1/messages routing note and caution to release notes
Sameerlite Mar 5, 2026
6e59fe8
Merge pull request #22845 from BerriAI/litellm_mcp_tab_spacing
yuneng-jiang Mar 5, 2026
6aeceb6
Merge pull request #22846 from BerriAI/litellm_hide_bounce_icon
yuneng-jiang Mar 5, 2026
335c4d4
Merge pull request #22851 from BerriAI/litellm_v182-messages-routing-…
Sameerlite Mar 5, 2026
51d876c
[Fix] UI - Keys: Organization shows Not Set due to org_id/organizatio…
yuneng-jiang Mar 5, 2026
96b75be
[Feature] RBAC for Vector Stores and Agents
yuneng-jiang Mar 5, 2026
7eafac8
Fix remaining org_id fallbacks in filter_helpers and TeamVirtualKeysT…
yuneng-jiang Mar 5, 2026
3c389ad
Merge pull request #22857 from BerriAI/litellm_fix_key_org_id_seriali…
yuneng-jiang Mar 5, 2026
df7e3aa
feat(provider): add Amazon Bedrock Mantle as a first-class provider
mubashir1osmani Mar 5, 2026
1089945
feat(ui): add Amazon Bedrock Mantle to provider UI
mubashir1osmani Mar 5, 2026
4a4bcce
docs: add Amazon Bedrock Mantle provider page
mubashir1osmani Mar 5, 2026
1bb713b
feat(mcp): BYOK MCP servers with OAuth 2.1 PKCE authorization flow (#…
ishaan-jaff Mar 5, 2026
cc989b1
fix(bedrock): strip scope from cache_control for Anthropic messages
Sameerlite Mar 5, 2026
482bc93
fix(azure_ai): strip scope from cache_control for Anthropic messages
Sameerlite Mar 5, 2026
ff7024b
Update ui/litellm-dashboard/src/components/provider_info_helpers.tsx
mubashir1osmani Mar 5, 2026
1bf0a3a
Update ui/litellm-dashboard/src/components/provider_info_helpers.tsx
mubashir1osmani Mar 5, 2026
b3f3918
fix(provider): register bedrock_mantle in model_list and models_by_pr…
mubashir1osmani Mar 5, 2026
f7d5ff9
Merge pull request #22692 from giulio-leone/fix/vertex-ai-streaming-t…
Sameerlite Mar 5, 2026
cdf2d67
Merge pull request #22503 from giulio-leone/fix/graceful-tool-args-re…
Sameerlite Mar 5, 2026
a2c11d4
fix(vertex_ai): drop unsupported output_config parameter from all req…
Sameerlite Mar 5, 2026
028e687
feat(agents): add static_headers and extra_headers fields to schema a…
Sameerlite Mar 5, 2026
07ee1e9
feat(agents): persist static_headers and extra_headers in agent registry
Sameerlite Mar 5, 2026
16a30b5
feat(agents): add merge_agent_headers utility
Sameerlite Mar 5, 2026
20a4eea
feat(agents): forward custom headers to backend A2A agents
Sameerlite Mar 5, 2026
6e9c7c4
feat(agents): add Prisma migration for agent header columns
Sameerlite Mar 5, 2026
fd53678
test(agents): add tests for A2A custom header forwarding
Sameerlite Mar 5, 2026
36d279a
feat(ui/agents): add Authentication Headers section to agent create/e…
Sameerlite Mar 5, 2026
b3bbcd3
fix(lint): remove unreachable None check in _resolve_fine_tuning_timeout
jquinter Mar 5, 2026
9a13c76
Merge pull request #22553 from dsteeley/fix/streaming-multi-tool-call…
Sameerlite Mar 5, 2026
0133d11
fix: replace assert with RuntimeError and fix return type annotation
jquinter Mar 5, 2026
175d090
docs(agents): add A2A agent authentication headers guide
Sameerlite Mar 5, 2026
db8e909
fix(test): add 'realtime' to model mode enum in schema validation
jquinter Mar 5, 2026
594499e
Add tests
Sameerlite Mar 5, 2026
1c7f93f
Update litellm/fine_tuning/main.py
jquinter Mar 5, 2026
04c904f
fix(agents): fix header isolation, streaming trace headers, and patch…
Sameerlite Mar 5, 2026
f45a9df
fix(mypy): resolve type errors across 9 files
jquinter Mar 5, 2026
16f415a
fix(schema): remove duplicate spec_path field in LiteLLM_MCPServerTable
jquinter Mar 5, 2026
de18b47
Merge pull request #22891 from BerriAI/fix/prisma-schema-duplicate-sp…
jquinter Mar 5, 2026
44498da
Merge pull request #22887 from BerriAI/fix/schema-add-realtime-mode
jquinter Mar 5, 2026
ad2969b
Merge pull request #22890 from BerriAI/fix/mypy-type-errors
jquinter Mar 5, 2026
c1076de
fix(types): address type-safety issues from mypy PR review
jquinter Mar 5, 2026
b52bd43
Merge pull request #22822 from BerriAI/fix/plr0915-too-many-statements
jquinter Mar 5, 2026
6a8adf8
docs(anthropic): add v1/messages → /responses parameter mapping refer…
Sameerlite Mar 5, 2026
dd0ccdd
fix(o-series): generalize is_model_o_series_model to match any o+digi…
Sameerlite Mar 5, 2026
bb1297f
feat(cost): add azure_ai/mistral-document-ai-2512 to model cost map
Sameerlite Mar 5, 2026
4fda3e8
Merge pull request #22896 from BerriAI/litellm_mistral-document-ai-25…
Sameerlite Mar 5, 2026
501671a
fix(agents): PUT update_agent_in_db clears static_headers and extra_h…
Sameerlite Mar 5, 2026
c04c120
Merge pull request #22884 from BerriAI/litellm_vertex-output-config-drop
Sameerlite Mar 5, 2026
0620f99
Merge pull request #22867 from BerriAI/litellm_bedrock-azure-cache-co…
Sameerlite Mar 5, 2026
a282bf9
Merge pull request #22893 from BerriAI/litellm_messages-to-responses-…
Sameerlite Mar 5, 2026
5183a6e
Merge pull request #22866 from mubashir1osmani/feat/bedrock-mantle-pr…
Sameerlite Mar 5, 2026
b04ba60
fix(websearch): downgrade max_tokens adjustment log level
Mar 5, 2026
660de94
fix: change all verbose_logger.warning → info in websearch handler
Mar 5, 2026
6b7d767
feat(anthropic): support top-level cache_control for automatic prompt…
giulio-leone Mar 5, 2026
023794b
fix(merge): resolve conflict with main in cost_tracking_settings
jquinter Mar 5, 2026
6db3f2f
Merge pull request #22892 from BerriAI/fix/greptile-type-safety-impro…
jquinter Mar 5, 2026
7b0ed0f
fix: replace sk-fake with safe test key to avoid secret scanner
Mar 5, 2026
b9a8d42
Add day 0 support for gpt-5.4
Sameerlite Mar 5, 2026
d6310ff
fix: downgrade WebSearch logs from info to debug to reduce production…
Mar 5, 2026
3b457b5
Add day 0 support for gpt-5.4
Sameerlite Mar 5, 2026
8dca085
Merge pull request #22916 from BerriAI/litellm_gpt-5.4_day_0
Sameerlite Mar 5, 2026
a42132f
fix(passthrough): propagate Azure 429/5xx errors in async streaming i…
ishaan-jaff Mar 5, 2026
cf376d2
Fix doc
Sameerlite Mar 5, 2026
9df686e
Merge pull request #22917 from BerriAI/litellm_gpt-4.5_fix
Sameerlite Mar 5, 2026
cae1f5f
Fix doc
Sameerlite Mar 5, 2026
46fa9a3
Merge pull request #22918 from BerriAI/litellm_gpt-4.5_fix
Sameerlite Mar 5, 2026
c919031
feat(proxy): include user_email in jwt upsert user creation (#22915)
spencer-burridge Mar 5, 2026
04f3833
Fix doc
Sameerlite Mar 5, 2026
7aff1dc
Merge pull request #22919 from BerriAI/litellm_gpt-4.5_fix
Sameerlite Mar 5, 2026
6d4a281
fix(gemini): handle 'minimal' reasoning_effort param for gemini-3.1-f…
Varad2001 Mar 5, 2026
f06e9e6
Fix doc
Sameerlite Mar 5, 2026
728e5b1
Merge pull request #22922 from BerriAI/litellm_gpt-4.5_fix
Sameerlite Mar 5, 2026
bf9c96b
Merge pull request #22679 from giulio-leone/fix/websearch-thinking-co…
Sameerlite Mar 5, 2026
503eb2f
fix: don't close HTTP/SDK clients on LLMClientCache eviction (#22925)
ishaan-jaff Mar 5, 2026
725c0c1
Prisma DB Failure Detection and Self-Healing (#21059)
castrapel Mar 5, 2026
32e5e55
feat(models): add chatgpt gpt-5.3 oauth aliases
vincentkoc Mar 4, 2026
53b3b13
chore(models): sync backup map for chatgpt gpt-5.3 aliases
vincentkoc Mar 4, 2026
ffd65d2
docs(chatgpt): document gpt-5.3 oauth model variants
vincentkoc Mar 4, 2026
801e2d6
test(chatgpt): cover gpt-5.3 oauth alias registration
vincentkoc Mar 4, 2026
dc19cc2
docs(chatgpt): remove gpt-5.3 model ID list block
vincentkoc Mar 4, 2026
f1e4e4a
feat(models): add gpt-5.4-pro and chatgpt 5.4 aliases
vincentkoc Mar 5, 2026
86d04ef
chore(models): sync backup for gpt-5.4-pro and chatgpt 5.4
vincentkoc Mar 5, 2026
e358e3a
docs(openai): add gpt-5.4 and gpt-5.4-pro model rows
vincentkoc Mar 5, 2026
ef7be61
docs(chatgpt): include gpt-5.4 and gpt-5.4-pro examples
vincentkoc Mar 5, 2026
68ab37c
test(chatgpt): add gpt-5.4 alias registration coverage
vincentkoc Mar 5, 2026
9a37fe2
test(openai): add gpt-5.4 detection and xhigh assertions
vincentkoc Mar 5, 2026
4e3c957
docs(chatgpt): add gpt-5.3-chat-latest proxy example
vincentkoc Mar 5, 2026
3d027c0
fix(bedrock): filter out `custom` field from tools to prevent 400 err…
weiguangli-io Mar 5, 2026
4e7b0fc
[Test] Add Vitest unit tests for policies components
yuneng-jiang Mar 5, 2026
fb935a6
test(chatgpt): restore gpt-5.2 codex transformation coverage
vincentkoc Mar 5, 2026
ba3ce77
test(openai): cover gpt-5.4-pro parameter behavior
vincentkoc Mar 5, 2026
b3c092f
[Fix] Address code review: delegate team admin check to shared helper…
yuneng-jiang Mar 5, 2026
271e80c
Merge pull request #22932 from BerriAI/litellm_policies_vitest_tests
yuneng-jiang Mar 5, 2026
79817ff
[Fix] Constrain feature_name to Literal, deduplicate runtime flags, f…
yuneng-jiang Mar 5, 2026
05d2ccd
[Fix] PATCH /update/ui_settings now merges with existing record inste…
yuneng-jiang Mar 5, 2026
20ce6dd
Fix apac.anthropic.claude-sonnet-4-6 -> au.anthropic.claude-sonnet-4-…
anttttti Mar 5, 2026
d904b92
[Fix] Sync UI settings into general_settings on proxy startup
yuneng-jiang Mar 6, 2026
92b3160
Merge pull request #22858 from BerriAI/litellm_rbac_vector_agents
yuneng-jiang Mar 6, 2026
53a1e31
feat(spend-logs): add truncation note when error logs are truncated f…
krrishdholakia Mar 6, 2026
d0e4804
Fix team usage spend showing lower than expected values
yuneng-jiang Mar 6, 2026
8d539db
Fix admin viewer unable to see all organizations
ryan-crabbe Mar 6, 2026
bc23c08
Merge pull request #22940 from BerriAI/litellm_fix_admin_viewer_org_list
ryan-crabbe Mar 6, 2026
ec600aa
feat(ui): add Chat UI — ChatGPT-like interface with MCP tools and str…
ishaan-jaff Mar 6, 2026
baa5d72
docs: add PayGo/priority cost tracking for Gemini Vertex AI
Sameerlite Mar 6, 2026
31c43ba
Merge pull request #22948 from BerriAI/litellm_vertex-paygo-docs
Sameerlite Mar 6, 2026
57596ca
Merge pull request #22920 from Varad2001/litellm_gemini_3.1_reasoning…
Sameerlite Mar 6, 2026
20ec949
Merge pull request #22734 from vincentkoc/vincentkoc-code/chatgpt-53-…
Sameerlite Mar 6, 2026
91a8937
Merge pull request #22750 from BerriAI/litellm_mcp_doc_update
Sameerlite Mar 6, 2026
bc481f4
Merge pull request #22895 from BerriAI/litellm_o-series-generalize-de…
Sameerlite Mar 6, 2026
83e237b
fix(chat): fix /ui/chat routing, Suspense boundary, serverRootPath su…
ishaan-jaff Mar 6, 2026
0505034
feat(openai): add gpt-5.4-pro to model map
Sameerlite Mar 6, 2026
ad59aa0
Merge pull request #22954 from BerriAI/litellm_gpt-5-4-pro-model-map
Sameerlite Mar 6, 2026
8b2dd4f
fix(pricing): add supports_web_search for OpenAI gpt-5.1/5.2/5.3 mode…
yudelevi Mar 6, 2026
99c4f3c
Merge pull request #22938 from BerriAI/litellm_fix_team_usage_spend
yuneng-jiang Mar 6, 2026
e468b02
[Fix] Key Expiry Default Duration - support null to never expire
yuneng-jiang Mar 6, 2026
8523bb6
Merge pull request #22956 from BerriAI/litellm_key_null_duration
yuneng-jiang Mar 6, 2026
6ba2e9f
feat(gpt-5): add supports_none_reasoning_effort and supports_xhigh_re…
Sameerlite Mar 6, 2026
0d699d0
Merge pull request #22953 from BerriAI/litellm_gpt5_reasoning_model_map
Sameerlite Mar 6, 2026
c23eb5a
feat(azure_ai): add router flat cost when response contains actual model
Sameerlite Mar 6, 2026
118cad8
Merge pull request #22957 from BerriAI/litellm_azure-model-router-cos…
Sameerlite Mar 6, 2026
159c477
feat(proxy): client-side provider API key precedence for Anthropic /v…
Sameerlite Mar 6, 2026
e9d797b
fix(proxy): do not forward Authorization header to LLM provider when …
Sameerlite Mar 6, 2026
447b760
Merge pull request #22964 from BerriAI/litellm_claude-code-byok
Sameerlite Mar 6, 2026
8b0375f
Merge pull request #22888 from BerriAI/litellm_a2a-custom-headers
Sameerlite Mar 6, 2026
ed4e2f0
fix(otel): reduce span attribute duplication and fix orphaned guardra…
Harshit28j Mar 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
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,8 @@ When opening issues or pull requests, follow these templates:

Using helpers like `supports_reasoning` (which read from `model_prices_and_context_window.json` / `get_model_info`) allows future model updates to "just work" without code changes.

9. **Never close HTTP/SDK clients on cache eviction**: Do not add `close()`, `aclose()`, or `create_task(close_fn())` inside `LLMClientCache._remove_key()` or any cache eviction path. Evicted clients may still be held by in-flight requests; closing them causes `RuntimeError: Cannot send a request, as the client has been closed.` in production after the cache TTL (1 hour) expires. Connection cleanup is handled at shutdown by `close_litellm_async_clients()`. See PR #22247 for the full incident history.

## HELPFUL RESOURCES

- Main documentation: https://docs.litellm.ai/
Expand Down
15 changes: 14 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,17 @@ LiteLLM is a unified interface for 100+ LLM providers with two main components:
### Enterprise Features
- Enterprise-specific code in `enterprise/` directory
- Optional features enabled via environment variables
- Separate licensing and authentication for enterprise features
- Separate licensing and authentication for enterprise features

### HTTP Client Cache Safety
- **Never close HTTP/SDK clients on cache eviction.** `LLMClientCache._remove_key()` must not call `close()`/`aclose()` on evicted clients — they may still be used by in-flight requests. Doing so causes `RuntimeError: Cannot send a request, as the client has been closed.` after the 1-hour TTL expires. Cleanup happens at shutdown via `close_litellm_async_clients()`.

### Troubleshooting: DB schema out of sync after proxy restart
`litellm-proxy-extras` runs `prisma migrate deploy` on startup using **its own** bundled migration files, which may lag behind schema changes in the current worktree. Symptoms: `Unknown column`, `Invalid prisma invocation`, or missing data on new fields.

**Diagnose:** Run `\d "TableName"` in psql and compare against `schema.prisma` — missing columns confirm the issue.

**Fix options:**
1. **Create a Prisma migration** (permanent) — run `prisma migrate dev --name <description>` in the worktree. The generated file will be picked up by `prisma migrate deploy` on next startup.
2. **Apply manually for local dev** — `psql -d litellm -c "ALTER TABLE ... ADD COLUMN IF NOT EXISTS ..."` after each proxy start. Fine for dev, not for production.
3. **Update litellm-proxy-extras** — if the package is installed from PyPI, its migration directory must include the new file. Either update the package or run the migration manually until the next release ships it.
97 changes: 97 additions & 0 deletions docs/my-website/blog/gpt_5_4/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
---
slug: gpt_5_4
title: "Day 0 Support: GPT-5.4"
date: 2026-03-05T10:00:00
authors:
- name: Sameer Kankute
title: SWE @ LiteLLM (LLM Translation)
url: https://www.linkedin.com/in/sameer-kankute/
image_url: https://pbs.twimg.com/profile_images/2001352686994907136/ONgNuSk5_400x400.jpg
- name: Krrish Dholakia
title: "CEO, LiteLLM"
url: https://www.linkedin.com/in/krish-d/
image_url: https://pbs.twimg.com/profile_images/1298587542745358340/DZv3Oj-h_400x400.jpg
- name: Ishaan Jaff
title: "CTO, LiteLLM"
url: https://www.linkedin.com/in/reffajnaahsi/
image_url: https://pbs.twimg.com/profile_images/1613813310264340481/lz54oEiB_400x400.jpg
description: "GPT-5.4 model support in LiteLLM"
tags: [openai, gpt-5.4, completion]
hide_table_of_contents: false
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

LiteLLM now supports fully GPT-5.4!

## Docker Image

```bash
docker pull ghcr.io/berriai/litellm:v1.81.14-stable.gpt-5.4_patch
```

## Usage

<Tabs>
<TabItem value="proxy" label="LiteLLM Proxy">

**1. Setup config.yaml**

```yaml
model_list:
- model_name: gpt-5.4
litellm_params:
model: openai/gpt-5.4
api_key: os.environ/OPENAI_API_KEY
```

**2. Start the proxy**

```bash
docker run -d \
-p 4000:4000 \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
-v $(pwd)/config.yaml:/app/config.yaml \
ghcr.io/berriai/litellm:v1.81.14-stable.gpt-5.4_patch \
--config /app/config.yaml
```

**3. Test it**

```bash
curl -X POST "http://0.0.0.0:4000/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $LITELLM_KEY" \
-d '{
"model": "gpt-5.4",
"messages": [
{"role": "user", "content": "Write a Python function to check if a number is prime."}
]
}'
```

</TabItem>
<TabItem value="sdk" label="LiteLLM SDK">

```python
from litellm import completion

response = completion(
model="openai/gpt-5.4",
messages=[
{"role": "user", "content": "Write a Python function to check if a number is prime."}
],
)

print(response.choices[0].message.content)
```

</TabItem>
</Tabs>

## Notes

- Restart your container to get the cost tracking for this model.
- Use `/responses` for better model performance.
- GPT-5.4 supports reasoning, function calling, vision, and tool-use — see the [OpenAI provider docs](../../docs/providers/openai) for advanced usage.
252 changes: 252 additions & 0 deletions docs/my-website/docs/a2a_agent_headers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

# A2A Agent Authentication Headers

Forward authentication credentials (Bearer tokens, API keys, etc.) from clients to backend A2A agents.

## Overview

When LiteLLM proxies a request to a backend A2A agent, the agent may require its own authentication headers. There are three ways to supply them:

| Method | Who configures | How it works |
|---|---|---|
| **Static headers** | Admin (UI / API) | Always sent, regardless of client request |
| **Forward client headers** | Admin (UI / API) | Header names to extract from client request and forward |
| **Convention-based** | Client (no admin config) | Client sends `x-a2a-{agent_name}-{header}` — automatically routed |

All three methods can be combined. **Static headers always win** on key conflicts.

---

## Method 1 — Static Headers

Admin-configured headers that are always sent to the backend agent. Use this for server-to-server tokens or internal credentials that clients should never see or override.

<Tabs>
<TabItem value="ui" label="UI">

1. Go to **Agents** in the LiteLLM dashboard.
2. Create or edit an agent.
3. Open the **Authentication Headers** panel.
4. Under **Static Headers**, click **Add Static Header** and fill in the header name and value.

</TabItem>
<TabItem value="api" label="REST API">

```bash
curl -X POST http://localhost:4000/v1/agents \
-H "Authorization: Bearer sk-admin" \
-H "Content-Type: application/json" \
-d '{
"agent_name": "my-agent",
"agent_card_params": { ... },
"static_headers": {
"Authorization": "Bearer internal-server-token",
"X-Internal-Service": "litellm-proxy"
}
}'
```

To update an existing agent:

```bash
curl -X PATCH http://localhost:4000/v1/agents/{agent_id} \
-H "Authorization: Bearer sk-admin" \
-H "Content-Type: application/json" \
-d '{
"static_headers": {
"Authorization": "Bearer new-token"
}
}'
```

</TabItem>
</Tabs>

**Client call — no special headers needed:**

```bash
curl -X POST http://localhost:4000/a2a/my-agent \
-H "Authorization: Bearer sk-client-key" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0", "id": "1", "method": "message/send",
"params": { "message": { "role": "user", "parts": [{"kind": "text", "text": "Hello"}], "messageId": "msg-1" } }
}'
```

The backend agent receives `Authorization: Bearer internal-server-token` without the client ever knowing the value.

---

## Method 2 — Forward Client Headers

Admin specifies a list of header **names**. When the client sends a request that includes those headers, LiteLLM extracts their values and forwards them to the backend agent. The client controls the values; the admin controls which headers are eligible to be forwarded.

<Tabs>
<TabItem value="ui" label="UI">

1. Go to **Agents** in the LiteLLM dashboard.
2. Create or edit an agent.
3. Open the **Authentication Headers** panel.
4. Under **Forward Client Headers**, type header names and press **Enter** (e.g. `x-api-key`, `Authorization`).

</TabItem>
<TabItem value="api" label="REST API">

```bash
curl -X POST http://localhost:4000/v1/agents \
-H "Authorization: Bearer sk-admin" \
-H "Content-Type: application/json" \
-d '{
"agent_name": "my-agent",
"agent_card_params": { ... },
"extra_headers": ["x-api-key", "x-user-token"]
}'
```

</TabItem>
</Tabs>

**Client call — include the forwarded headers:**

```bash
curl -X POST http://localhost:4000/a2a/my-agent \
-H "Authorization: Bearer sk-client-key" \
-H "x-api-key: user-secret-value" \
-H "Content-Type: application/json" \
-d '{ ... }'
```

The backend agent receives `x-api-key: user-secret-value`.

:::note
Header name matching is **case-insensitive**. If the client sends `X-API-Key` and `extra_headers` lists `x-api-key`, they match.
:::

---

## Method 3 — Convention-Based Forwarding

Clients can forward headers to a specific agent without any admin pre-configuration by using the naming convention:

```
x-a2a-{agent_name_or_id}-{header_name}: value
```

LiteLLM parses these headers automatically and routes them to the matching agent only.

**Examples:**

| Client header sent | Agent name/ID | Forwarded as |
|---|---|---|
| `x-a2a-my-agent-authorization: Bearer tok` | `my-agent` | `authorization: Bearer tok` |
| `x-a2a-my-agent-x-api-key: secret` | `my-agent` | `x-api-key: secret` |
| `x-a2a-abc123-authorization: Bearer tok` | agent ID `abc123` | `authorization: Bearer tok` |

```bash
curl -X POST http://localhost:4000/a2a/my-agent \
-H "Authorization: Bearer sk-client-key" \
-H "x-a2a-my-agent-authorization: Bearer agent-specific-token" \
-H "Content-Type: application/json" \
-d '{ ... }'
```

The `x-a2a-other-agent-authorization` header sent in the same request is **not** forwarded to `my-agent` — it is silently ignored.

:::tip Matches both agent name and agent ID
Both the human-readable name (e.g. `my-agent`) and the UUID (e.g. `abc123-...`) are valid. Use whichever is convenient for the client.
:::

---

## Merge Precedence

When multiple methods supply the same header name, **static headers win**:

```
dynamic (forwarded/convention) → merged ← static (overlays, wins)
```

Example:

| Source | `Authorization` value |
|---|---|
| Client sends (via `extra_headers` or convention) | `Bearer client-token` |
| Admin-configured `static_headers` | `Bearer server-token` |
| **What the backend agent receives** | **`Bearer server-token`** |

This ensures admin-controlled credentials cannot be overridden by client requests.

---

## Combining All Three Methods

```bash
# Register agent with static + forwarded headers
curl -X POST http://localhost:4000/v1/agents \
-H "Authorization: Bearer sk-admin" \
-H "Content-Type: application/json" \
-d '{
"agent_name": "my-agent",
"agent_card_params": { ... },
"static_headers": {
"X-Internal-Token": "secret123"
},
"extra_headers": ["x-user-id"]
}'

# Client call using all three mechanisms
curl -X POST http://localhost:4000/a2a/my-agent \
-H "Authorization: Bearer sk-client-key" \
-H "x-user-id: user-42" \
-H "x-a2a-my-agent-x-request-id: req-abc" \
-H "Content-Type: application/json" \
-d '{ ... }'
```

The backend agent receives:

```
X-Internal-Token: secret123 ← static header (always)
x-user-id: user-42 ← forwarded (in extra_headers)
x-request-id: req-abc ← convention-based (x-a2a-my-agent-*)
X-LiteLLM-Trace-Id: <uuid> ← LiteLLM internal
X-LiteLLM-Agent-Id: <agent-id> ← LiteLLM internal
```

---

## Header Isolation

Each agent invocation uses an isolated HTTP connection. Headers configured for agent A are **never** sent to agent B, even if both agents are running and receiving requests simultaneously.

---

## API Reference

### `POST /v1/agents` / `PATCH /v1/agents/{agent_id}`

| Field | Type | Description |
|---|---|---|
| `static_headers` | `object` | `{"Header-Name": "value"}` — always forwarded |
| `extra_headers` | `string[]` | Header names to extract from client request and forward |

### Agent Response

Both fields are returned in `GET /v1/agents` and `GET /v1/agents/{agent_id}`:

```json
{
"agent_id": "...",
"agent_name": "my-agent",
"static_headers": { "X-Internal-Token": "secret123" },
"extra_headers": ["x-user-id"],
...
}
```

:::caution
`static_headers` values are stored in the database and returned by the API. Treat them as you would any credential — do not store sensitive long-lived tokens here if your API is publicly accessible. Consider using short-lived tokens or environment-injected secrets instead.
:::
Loading
Loading