Skip to content

merging v1.81.3-stable#7

Merged
Raman-12321 merged 5770 commits intoLamatic:lamatic-mainfrom
BerriAI:main
Feb 9, 2026
Merged

merging v1.81.3-stable#7
Raman-12321 merged 5770 commits intoLamatic:lamatic-mainfrom
BerriAI:main

Conversation

@Raman-12321
Copy link

Title

Relevant issues

Pre-Submission checklist

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

  • I have Added testing in the tests/litellm/ directory, Adding at least 1 test is a hard requirement - see details
  • I have added a screenshot of my new test passing locally
  • My PR passes all unit tests on make test-unit
  • My PR's scope is as isolated as possible, it only solves 1 specific problem

Type

🆕 New Feature
🐛 Bug Fix
🧹 Refactoring
📖 Documentation
🚄 Infrastructure
✅ Test

Changes

Lucky-Lodhi2004 and others added 30 commits February 4, 2026 13:10
- Add promptFeedback.blockReason check in chunk_parser
- Return content_filter finish_reason when blocked
- Extract content filter logic into _check_prompt_level_content_filter() method
- Update unit tests to reflect simplified implementation

Signed-off-by: Kris Xia <xiajiayi0506@gmail.com>
[Fix] Unique Constraint on Daily Tables + Logging When Updates Fail
[Feature] UI - Search Tools: Show Config Defined Search Tools
Cast message to dict before calling pop() to satisfy mypy's type checker.
The message is typed as a Union of TypedDicts which don't have the
'provider_specific_fields' key, but the runtime check already confirms
it's a dict with this key.
#20365)

* fix(a2a): use text/event-stream SSE format for message/stream endpoint

The A2A gateway's streaming response was using application/x-ndjson
Content-Type and raw NDJSON body format. The A2A protocol spec requires
text/event-stream with SSE framing (data: ...\n\n).

The official a2a-sdk client validates the Content-Type header and raises
SSEError when it doesn't contain text/event-stream.

Changes:
- Changed media_type from application/x-ndjson to text/event-stream
- Updated response body to use SSE framing (data: prefix + \n\n suffix)
- Added tests validating Content-Type and SSE body format

Fixes #20278

* Potential fix for code scanning alert no. 4045: Information exposure through an exception

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* test(a2a): add manual SSE format validation script

Adds a manual test script that:
1. Starts a real A2A agent on port 10001
2. Starts LiteLLM proxy with the agent registered
3. Makes a streaming request to the proxy's A2A gateway
4. Validates Content-Type header is text/event-stream
5. Validates body uses SSE framing (data: ...\n\n)

Run: python tests/a2a_manual/test_a2a_sse_manual.py

---------

Co-authored-by: shin-bot-litellm <shin-bot-litellm@users.noreply.github.com>
Co-authored-by: Ishaan Jaff <ishaanjaffer0324@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
…en using non anthropic providers (#20442)

* _translate_openai_content_to_anthropic

* test_response_format_consistency

* test fixes unit tests

* test fix

* fix: use dict access for anthropic content blocks in tests (#20447)

The translate_openai_response_to_anthropic method returns dicts, not objects.
Changed .type/.text/.thinking attribute access to dict ['key'] access.

---------

Co-authored-by: shin-bot-litellm <shin-bot-litellm@berri.ai>
* feat: remove_callbacks_by_type

* feat: _init_semantic_filter_settings_in_db

* add MCP semantic filtering settings endpoints

* v0 - semantic filter UI

* fix endpint _init_semantic_filter_settings_in_db

* refactor ui

* add LITELLM_UI_ALLOW_HEADERS

* ui fix

* ui fix
…0353)

* docs: improve Okta SSO setup guide with step-by-step instructions

- Add clear steps for creating OIDC app in Okta Admin Console
- Document critical Authorization Server Access Policy configuration
- Add troubleshooting table for common errors
- Link to official Okta documentation for detailed UI instructions
- Fix incorrect OAuth endpoint examples (was using Auth0 URLs)

* docs: add Okta console screenshots for SSO setup guide

- Add screenshot showing Sign-in redirect URI configuration
- Add screenshot showing Client Credentials location
- Add screenshot showing Authorization Server Access Policy setup

* docs: replace Okta screenshots with annotated Scribe versions

- Replace screenshots with Scribe-annotated versions highlighting key areas
- Add step-by-step screenshots for Authorization Server Access Policy setup
- Remove old unannotated screenshots
…ation (#20431)

The cast(Any, message) pattern was used to suppress typed-dict mutation
warnings, but the parameter has no type annotation so it's unnecessary.
Direct assignment works and eliminates the F401 unused-import lint error.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Add OpenRouter Qwen3-235B-A22B models to the pricing configuration:
- openrouter/qwen/qwen3-235b-a22b-2507
- openrouter/qwen/qwen3-235b-a22b-thinking-2507

Closes request from PR #13019 comments.
- Add allow_team_guardrail_config field to TeamTable and DeletedTeamTable
- Add migration 20260205091235_allow_team_guardrail_config
…ion_5_feb

bump: litellm-proxy-extras 0.4.29 → 0.4.30
Co-authored-by: Cursor <cursoragent@cursor.com>
…ion_5_feb

chore: update poetry.lock for litellm-proxy-extras 0.4.30
Harshit28j and others added 28 commits February 7, 2026 22:23
Add a missing check symbol for /audio/transcriptions, which seems to be supported already, according to the docs at https://docs.litellm.ai/docs/providers/elevenlabs
* support policy mapping on team key level

* update document

* update document

* address comments

* update document

* add unit test for new feature

* add more test case
…19233)

* feat: add support for anthropic_messages call type in prompt caching

* test: move anthropic_messages prompt caching test to main router test file

* add tutorial on using claude code with prompt cache routing
…ation (#20680)

Adds documentation for the litellm.proxy_auth feature that automatically
obtains and refreshes OAuth2/JWT tokens when connecting to a LiteLLM Proxy.
Remove incorrect `:0` suffix from regional Bedrock model identifiers:
- us.anthropic.claude-opus-4-6-v1:0 → us.anthropic.claude-opus-4-6-v1
- au.anthropic.claude-opus-4-6-v1:0 (duplicate removed)

The `:0` suffix is invalid for Bedrock inference profile ARNs and causes
"The provided model identifier is invalid" errors when calling the model.

Fixes #20562
The VirtualKeysTable crashed when rendering keys with null or undefined
models field. The className expression tried to access .length on null,
throwing a TypeError that broke the entire keys table.

Added Array.isArray() guard before accessing .length on the models value.

Fixes #20611
* docs: add callback registration optimization to v1.81.9 release notes (#20681)

* docs: add callback registration optimization to v1.81.9 release notes

* Update v1.81.9.md

---------

Co-authored-by: Alexsander Hamir <alexsanderhamirgomesbaptista@gmail.com>

* Fix spend logs pickle error with Pydantic models

Replace copy.deepcopy() with Pydantic-safe serialization to avoid
"cannot pickle '_thread.RLock' object" errors when request/response
redaction is enabled.

Changes:
- Add _convert_to_json_serializable_dict() helper that uses
  model_dump() for Pydantic models instead of pickle
- Replace copy.deepcopy() calls in request and response redaction
  paths with the new helper function
- Recursively handles nested dicts, lists, and Pydantic models

Root cause: Pydantic v2 BaseModel instances contain internal
_thread.RLock objects for thread-safety. When copy.deepcopy()
attempts to pickle these objects, it fails because threading
primitives cannot be pickled.

Fixes #20647

* chore: remove unused copy import

Remove unused copy import that was causing lint failure. The copy.deepcopy()
calls were replaced with _convert_to_json_serializable_dict() helper function
in the previous commit, making the copy module no longer needed.

---------

Co-authored-by: ryan-crabbe <128659760+ryan-crabbe@users.noreply.github.com>
Co-authored-by: Alexsander Hamir <alexsanderhamirgomesbaptista@gmail.com>
#20666)

Vertex AI requires Anthropic beta flags in the request body
(anthropic_beta array), not as HTTP headers. The Bedrock handler
already extracts user-specified beta headers from the headers dict,
but the Vertex handler was missing this, causing extra_headers like
interleaved-thinking-2025-05-14 to be silently dropped.

This extracts anthropic-beta values from optional_params extra_headers
and merges them into the anthropic_beta request body field, and also
removes extra_headers from the request body since the parent's
transform_request spreads optional_params into data.
first_id and last_id in the video list response were returned as raw
provider IDs while data[].id was properly wrapped with
encode_video_id_with_provider(). This caused pagination to break when
clients passed unencoded cursors back as the `after` parameter.

- Encode first_id/last_id in transform_video_list_response
- Decode the `after` param in transform_video_list_request via
  extract_original_video_id()
- Add 6 unit tests covering encoding, decoding, passthrough, and
  full round-trip pagination

Fixes #20708

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…index-mapping

fix(responses): preserve tool call argument deltas when streaming id is omitted
add missing indexes on VerificationToken table
…hinking-blocks

fix(streaming): preserve interleaved thinking/redacted_thinking blocks
…ncoding

Fix video list pagination cursors not encoded with provider metadata
@Raman-12321 Raman-12321 merged commit 87a66d5 into Lamatic:lamatic-main Feb 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.