Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
7f2cfcd
feat: add Xiaomi MiMo-V2.5-Pro and MiMo-V2.5 OpenRouter model entries…
TorvaldUtne May 19, 2026
d979dd5
fix(ui): trim whitespace from MCP inspector tool call inputs (#28203)
oss-agent-shin May 19, 2026
f63a9e8
gemini-3.1-flash-lite pricing (#27933)
mubashir1osmani May 19, 2026
1a8f0d6
fix: incorrect /v1/agents request example (#28131)
IshaMeera May 19, 2026
5a01291
fix(anthropic): accept dict-shape reasoning_effort from Responses bri…
cwang-otto May 19, 2026
9b9b279
feat: add pricing entry for openrouter/google/gemini-3.1-flash-lite (…
ro31337 May 19, 2026
fa12141
fix(router): wrap aresponses streaming iterator for mid-stream fallba…
cwang-otto May 20, 2026
ceeade2
fix(router): unblock staging — mypy + coverage for aresponses streami…
cwang-otto May 20, 2026
62f6c06
fix(responses): forward timeout on completion transformation path (An…
cwang-otto May 18, 2026
56f430e
feat(ui): add pause/resume Switch to the models table (#28151)
Cyberfilo May 18, 2026
6a56f6d
fix(responses): merge sync completion kwargs to avoid duplicate keys
Sameerlite May 20, 2026
9736b29
Use proxy base URL for CLI SSO form action (#28271)
boarder7395 May 20, 2026
73a518a
fix(tests): add mistral/ministral-8b-2512 to cost map and backfill in…
mateo-berri May 20, 2026
65510d3
fix(tests): drop unnecessary del of conftest backfill loop vars
mateo-berri May 20, 2026
3e18cbb
Merge origin/litellm_internal_staging into litellm_oss_staging_1
claude May 20, 2026
f73a9e3
fix(router): harden streaming fallback wrapper for bridge iterators
cursoragent May 20, 2026
41ffd03
fix(router): use safe_deep_copy for fallback metadata snapshot
claude May 20, 2026
7939a82
test(ci): skip chronically flaky build_and_test integration tests
mateo-berri May 20, 2026
2847b4f
fix: preserve explicit timeout=0 in responses API handler
cursoragent May 20, 2026
e84fcdd
fix(ui): guard model_info access in pause Switch with optional chaining
mateo-berri May 20, 2026
6e316ff
fix(ui): guard model_info access in pause Switch onChange handler
mateo-berri May 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions litellm/llms/anthropic/chat/transformation.py
Original file line number Diff line number Diff line change
Expand Up @@ -1506,9 +1506,21 @@ def map_openai_params( # noqa: PLR0915
optional_params["metadata"] = {"user_id": value}
elif param == "thinking":
optional_params["thinking"] = value
elif param == "reasoning_effort" and isinstance(value, str):
elif param == "reasoning_effort":
# Accept both string ("low") and dict ({"effort": "low",
# "summary": "concise"}). The Responses->Chat parser keeps the
# full dict when `summary` is set (see #25359), so a dict here
# is the standard shape Otto/OpenAI-Responses-Bridge callers
# send. Coerce to the effort string before mapping — same
# shape-tolerance the GPT-5 path already implements in
# `_normalize_reasoning_effort_for_chat_completion`.
effort_value = value
if isinstance(effort_value, dict):
effort_value = effort_value.get("effort")
if not isinstance(effort_value, str):
continue
mapped_thinking = AnthropicConfig._map_reasoning_effort(
reasoning_effort=value,
reasoning_effort=effort_value,
model=model,
llm_provider=self.custom_llm_provider or "anthropic",
)
Expand All @@ -1519,12 +1531,12 @@ def map_openai_params( # noqa: PLR0915
optional_params["thinking"] = mapped_thinking
if AnthropicConfig._is_adaptive_thinking_model(model):
mapped_effort = REASONING_EFFORT_TO_OUTPUT_CONFIG_EFFORT.get(
value
effort_value
)
if mapped_effort is None:
AnthropicConfig._raise_invalid_reasoning_effort(
model=model,
value=value,
value=effort_value,
llm_provider=self.custom_llm_provider or "anthropic",
)
optional_params["output_config"] = {"effort": mapped_effort}
Expand Down
52 changes: 52 additions & 0 deletions litellm/model_prices_and_context_window_backup.json
Original file line number Diff line number Diff line change
Expand Up @@ -27296,6 +27296,58 @@
"supports_web_search": true,
"tpm": 800000
},
"openrouter/google/gemini-3.1-flash-lite": {
"cache_read_input_token_cost": 2.5e-08,
"cache_read_input_token_cost_per_audio_token": 5e-08,
"input_cost_per_audio_token": 5e-07,
"input_cost_per_token": 2.5e-07,
"litellm_provider": "openrouter",
"max_audio_length_hours": 8.4,
"max_audio_per_prompt": 1,
"max_images_per_prompt": 3000,
"max_input_tokens": 1048576,
"max_output_tokens": 65536,
"max_pdf_size_mb": 30,
"max_tokens": 65536,
"max_video_length": 1,
"max_videos_per_prompt": 10,
"mode": "chat",
"output_cost_per_reasoning_token": 1.5e-06,
"output_cost_per_token": 1.5e-06,
"rpm": 2000,
"source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-3.1-flash-lite",
"supported_endpoints": [
"/v1/chat/completions",
"/v1/completions",
"/v1/batch"
],
"supported_modalities": [
"text",
"image",
"audio",
"video"
],
"supported_output_modalities": [
"text"
],
"supports_audio_input": true,
"supports_audio_output": false,
"supports_code_execution": true,
"supports_file_search": true,
"supports_function_calling": true,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_url_context": true,
"supports_video_input": true,
"supports_vision": true,
"supports_web_search": true,
"tpm": 800000
},
"openrouter/google/gemini-3.1-pro-preview": {
"cache_read_input_token_cost": 2e-07,
"cache_read_input_token_cost_above_200k_tokens": 4e-07,
Expand Down
2 changes: 1 addition & 1 deletion litellm/proxy/_lazy_openapi_snapshot.json
Original file line number Diff line number Diff line change
Expand Up @@ -3171,7 +3171,7 @@
]
},
"post": {
"description": "Create a new agent\n\nExample Request:\n```bash\ncurl -X POST \"http://localhost:4000/agents\" \\\n -H \"Authorization: Bearer <your_api_key>\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"agent\": {\n \"agent_name\": \"my-custom-agent\",\n \"agent_card_params\": {\n \"protocolVersion\": \"1.0\",\n \"name\": \"Hello World Agent\",\n \"description\": \"Just a hello world agent\",\n \"url\": \"http://localhost:9999/\",\n \"version\": \"1.0.0\",\n \"defaultInputModes\": [\"text\"],\n \"defaultOutputModes\": [\"text\"],\n \"capabilities\": {\n \"streaming\": true\n },\n \"skills\": [\n {\n \"id\": \"hello_world\",\n \"name\": \"Returns hello world\",\n \"description\": \"just returns hello world\",\n \"tags\": [\"hello world\"],\n \"examples\": [\"hi\", \"hello world\"]\n }\n ]\n },\n \"litellm_params\": {\n \"make_public\": true\n }\n }\n }'\n```",
"description": "Create a new agent\n\nExample Request:\n```bash\ncurl -X POST \"http://localhost:4000/v1/agents\" \\\n -H \"Authorization: Bearer <your_api_key>\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"agent_name\": \"my-custom-agent\",\n \"agent_card_params\": {\n \"protocolVersion\": \"1.0\",\n \"name\": \"Hello World Agent\",\n \"description\": \"Just a hello world agent\",\n \"url\": \"http://localhost:9999/\",\n \"version\": \"1.0.0\",\n \"defaultInputModes\": [\"text\"],\n \"defaultOutputModes\": [\"text\"],\n \"capabilities\": {\n \"streaming\": true\n },\n \"skills\": [\n {\n \"id\": \"hello_world\",\n \"name\": \"Returns hello world\",\n \"description\": \"just returns hello world\",\n \"tags\": [\"hello world\"],\n \"examples\": [\"hi\", \"hello world\"]\n }\n ]\n },\n \"litellm_params\": {\n \"make_public\": true\n }\n }'\n```",
"operationId": "create_agent_v1_agents_post",
"requestBody": {
"content": {
Expand Down
5 changes: 4 additions & 1 deletion litellm/proxy/management_endpoints/ui_sso.py
Original file line number Diff line number Diff line change
Expand Up @@ -1798,7 +1798,10 @@ async def cli_sso_callback(

from fastapi.responses import HTMLResponse

verify_url = str(request.url_for("cli_sso_complete", login_id=key))
verify_url = get_custom_url(
request_base_url=str(request.base_url),
route=f"sso/cli/complete/{key}",
)
html_content = _render_cli_sso_verification_page(
verify_url=verify_url,
browser_complete_token=browser_complete_token,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,7 @@ def response_api_handler(
litellm_completion_response: Union[
ModelResponse, litellm.CustomStreamWrapper
] = litellm.completion(
**litellm_completion_request,
**kwargs,
**completion_args,
)

if isinstance(litellm_completion_response, ModelResponse):
Expand Down
1 change: 1 addition & 0 deletions litellm/responses/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -1115,6 +1115,7 @@ def responses(
stream=stream,
extra_headers=extra_headers,
extra_body=extra_body,
timeout=timeout if timeout is not None else request_timeout,
**kwargs,
)

Expand Down
Loading
Loading