Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
43054a2
fix: langfuse trace leak key on model params
Harshit28j Feb 26, 2026
20bf3aa
fix: pop sensitive keys from langfuse
Harshit28j Mar 10, 2026
9f15a99
Merge branch 'main' into litellm_langfuse_key_leakage
Harshit28j Mar 10, 2026
8831c8d
fixes
AlexKer Mar 11, 2026
249f4fd
Merge branch 'main' into baseten-update
AlexKer Mar 13, 2026
feee689
fix: set oauth2_flow when building MCPServer in _execute_with_mcp_client
joereyna Mar 12, 2026
377b79a
fix: add oauth2_flow to NewMCPServerRequest and guard auto-detect wit…
joereyna Mar 13, 2026
cd7b258
fix: narrow oauth2_flow type to Literal in NewMCPServerRequest
joereyna Mar 14, 2026
6970e10
fix: align DefaultInternalUserParams Pydantic default with runtime fa…
ryan-crabbe Mar 14, 2026
c60f1dd
test: add regression test for fresh-instance default role sync
ryan-crabbe Mar 14, 2026
c95783e
Update tests/test_litellm/proxy/ui_crud_endpoints/test_proxy_setting_…
ryan-crabbe Mar 14, 2026
aa744fb
Merge branch 'main' into fix/mcp-rest-m2m-oauth2-flow
joereyna Mar 16, 2026
4f2fe33
Merge pull request #23666 from BerriAI/litellm_fix-default-user-perms…
ryan-crabbe Mar 16, 2026
5d33cc6
Add unit tests for 5 previously untested UI dashboard files
yuneng-jiang Mar 16, 2026
0c17393
fix: remove skip decorators from m2m tests now that oauth2_flow is set
joereyna Mar 16, 2026
eba8df5
Merge pull request #23773 from BerriAI/litellm_/reverent-panini
yuneng-jiang Mar 16, 2026
bc810f9
[Fix] Privilege escalation: restrict /key/block, /key/unblock, and ma…
yuneng-jiang Mar 16, 2026
016667b
chore(ui): migrate DefaultUserSettings buttons from Tremor to antd
ryan-crabbe Mar 16, 2026
278c9ba
[Infra] Merging RC Branch with Main (#23786)
yuneng-jiang Mar 16, 2026
55c7ba9
Update litellm/proxy/management_endpoints/key_management_endpoints.py
yuneng-jiang Mar 16, 2026
2d98b49
Merge pull request #23781 from BerriAI/litellm_key_admin_privilege_es…
yuneng-jiang Mar 16, 2026
d58b0a9
fix: clear oauth2_flow when client_credentials set without token_url
joereyna Mar 16, 2026
5befc02
chore(ui): use antd danger prop instead of tailwind for Remove button
ryan-crabbe Mar 16, 2026
8695171
Merge pull request #23787 from BerriAI/litellm_migrate-default-user-s…
ryan-crabbe Mar 16, 2026
c37cf23
Merge remote-tracking branch 'origin' into litellm_ui_logs_filter_2
yuneng-jiang Mar 16, 2026
67482db
feat: fetch blog posts from docs RSS feed instead of static JSON on G…
ryan-crabbe Mar 16, 2026
e4c8f95
Merge pull request #23468 from joereyna/fix/mcp-rest-m2m-oauth2-flow
yuneng-jiang Mar 16, 2026
12facb2
fix: remove unused Any import from get_blog_posts
ryan-crabbe Mar 16, 2026
57bba3b
[Fix] UI - Logs: Fix empty filter results showing stale data
yuneng-jiang Mar 16, 2026
c951b33
[Fix] Reapply empty filter fix after merge with main
yuneng-jiang Mar 16, 2026
31a677e
Merge pull request #23792 from BerriAI/litellm_ui_logs_filter_2
yuneng-jiang Mar 16, 2026
2ebea08
Merge remote-tracking branch 'origin/main' into litellm_internal_dev_…
yuneng-jiang Mar 16, 2026
0d45b1d
Merge pull request #23791 from BerriAI/litellm_update-blog-posts-rss
ryan-crabbe Mar 16, 2026
bc752fb
[Fix] Prevent internal users from creating invalid keys via key/gener…
yuneng-jiang Mar 17, 2026
208740a
[Fix] Remove duplicate get_team_object call in _validate_update_key_data
yuneng-jiang Mar 17, 2026
c8c4774
Merge pull request #23795 from BerriAI/litellm_fix_internal_user_inva…
yuneng-jiang Mar 17, 2026
4a92db8
[Fix] Skip key_alias re-validation on update/regenerate when alias un…
yuneng-jiang Mar 17, 2026
616b311
Merge pull request #23798 from BerriAI/litellm_skip_alias_revalidatio…
yuneng-jiang Mar 17, 2026
a771fe5
[Fix] Update log filter test to match empty-result behavior
yuneng-jiang Mar 17, 2026
53d96c8
[Feature] Disable custom API key values via UI setting
yuneng-jiang Mar 17, 2026
72aa5fc
[Fix] Add disable_custom_api_keys to UISettings Pydantic model
yuneng-jiang Mar 17, 2026
d15c2d5
fix: Register DynamoAI guardrail initializer and enum entry (#23752)
Harshit28j Mar 17, 2026
9661249
docs: add v1.82.3 release notes and update provider_endpoints_support…
joereyna Mar 17, 2026
c687e63
[Feature] Add disable_custom_api_keys toggle to UI Settings page
yuneng-jiang Mar 17, 2026
245a3d2
Revert "docs: add v1.82.3 release notes and update provider_endpoints…
Mar 17, 2026
0b0fe7e
[Fix] Rename toggle label to "Disable custom Virtual key values"
yuneng-jiang Mar 17, 2026
471e0f1
[Fix] Remove "API" from custom key description text
yuneng-jiang Mar 17, 2026
c098eca
fix(ui): CSV export empty on Global Usage page
ryan-crabbe Mar 17, 2026
a087c44
Merge pull request #23812 from BerriAI/litellm_disable_custom_api_keys
yuneng-jiang Mar 17, 2026
cde28aa
Merge pull request #23819 from BerriAI/litellm_fix-csv-export
ryan-crabbe Mar 17, 2026
302292c
Merge remote-tracking branch 'origin/main' into litellm_ryan_march_16
ryan-crabbe Mar 17, 2026
ad62071
Merge pull request #22188 from BerriAI/litellm_langfuse_key_leakage
yuneng-jiang Mar 17, 2026
dcbaa05
Merge pull request #23826 from BerriAI/litellm_yj_march_16_2026
yuneng-jiang Mar 17, 2026
467706e
Revert "fix: langfuse trace leak key on model params"
yuneng-jiang Mar 17, 2026
b4c9c8a
Merge pull request #23868 from BerriAI/revert-22188-litellm_langfuse_…
yuneng-jiang Mar 17, 2026
a622a1f
Merge pull request #23827 from BerriAI/litellm_internal_dev_03_16_2026
yuneng-jiang Mar 17, 2026
ef9cc33
Merge pull request #23822 from BerriAI/litellm_ryan_march_16
ryan-crabbe Mar 17, 2026
e5dcb2a
fix: support served_model_name for Baseten dedicated deployments
AlexKer Mar 17, 2026
c461ab2
Merge remote-tracking branch 'upstream/main' into baseten-update
AlexKer Mar 17, 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
31 changes: 20 additions & 11 deletions docs/my-website/docs/providers/baseten.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ for chunk in response:

## Usage with LiteLLM Proxy

### Model API

1. **Config**:
```yaml
model_list:
Expand All @@ -91,16 +93,23 @@ model_list:
api_key: your-baseten-api-key
```

Comment thread
AlexKer marked this conversation as resolved.
2. **Request**:
```python
import openai
client = openai.OpenAI(
api_key="sk-1234",
base_url="http://0.0.0.0:4000"
)
### Dedicated Deployment

response = client.chat.completions.create(
model="baseten-model",
messages=[{"role": "user", "content": "Hello!"}]
)
If your dedicated deployment uses a `served_model_name` in your Baseten `config.yaml`, you must supply `served_model_name` to specify the model name sent in the request body, and supply the model id under the `model` field.

1. **Config**:
```yaml
model_list:
- model_name: baseten-model # external user facing
litellm_params:
model: baseten/1234abcd # model id from Baseten dashboard
served_model_name: baseten-hosted/zai-org/GLM-5 # model name specified in Baseten config.yaml
api_key: os.environ/BASETEN_API_KEY
```

- `model: baseten/1234abcd` — the 8-digit deployment ID, used to route to `https://model-1234abcd.api.baseten.co/environments/production/sync/v1`
- `served_model_name` — sent as the `model` field in the request body, matching your deployment's configured model name

:::note
`served_model_name` is optional. If your deployment's model name is empty, you can omit it and just use `model: baseten/{deployment_id}`.
:::
26 changes: 25 additions & 1 deletion litellm/llms/baseten/chat.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from typing import Optional
from typing import List, Optional

from litellm.llms.openai.chat.gpt_transformation import OpenAIGPTConfig
from litellm.types.llms.openai import AllMessageValues


class BasetenConfig(OpenAIGPTConfig):
Expand Down Expand Up @@ -82,6 +84,28 @@ def map_openai_params(
optional_params[param] = value
return optional_params

def transform_request(
self,
model: str,
messages: List[AllMessageValues],
optional_params: dict,
litellm_params: dict,
headers: dict,
) -> dict:
# For dedicated deployments, the model is the deployment ID (e.g. "wd1lndkw")
# but the server may expect a different model name in the request body
served_model_name = litellm_params.get("served_model_name")
if served_model_name:
model = served_model_name
Comment thread
AlexKer marked this conversation as resolved.

return super().transform_request(
model=model,
messages=messages,
optional_params=optional_params,
litellm_params=litellm_params,
headers=headers,
)

def _get_openai_compatible_provider_info(
self, api_base: str, api_key: str
) -> tuple:
Expand Down
48 changes: 48 additions & 0 deletions tests/test_litellm/llms/baseten/chat/test_baseten_completions.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,53 @@ def test_model_api_inference(self):
assert api_key == "test-key"


class TestBasetenTransformRequest:
"""Test Baseten transform_request with served_model_name"""

def test_transform_request_with_served_model_name(self):
"""Test that served_model_name overrides the model in request body"""
config = BasetenConfig()

result = config.transform_request(
model="wd1lndkw",
messages=[{"role": "user", "content": "Hello!"}],
optional_params={},
litellm_params={"served_model_name": "baseten-hosted/zai-org/GLM-5"},
headers={},
)

assert result["model"] == "baseten-hosted/zai-org/GLM-5"
assert result["messages"] == [{"role": "user", "content": "Hello!"}]

def test_transform_request_without_served_model_name(self):
"""Test that model is used as-is when served_model_name is not set"""
config = BasetenConfig()

result = config.transform_request(
model="wd1lndkw",
messages=[{"role": "user", "content": "Hello!"}],
optional_params={},
litellm_params={},
headers={},
)

assert result["model"] == "wd1lndkw"

def test_transform_request_model_api_with_served_model_name(self):
"""Test served_model_name also works for Model API models"""
config = BasetenConfig()

result = config.transform_request(
model="openai/gpt-oss-120b",
messages=[{"role": "user", "content": "Hello!"}],
optional_params={"max_tokens": 100},
litellm_params={"served_model_name": "my-custom-name"},
headers={},
)

assert result["model"] == "my-custom-name"
assert result["max_tokens"] == 100


if __name__ == "__main__":
pytest.main([__file__])
Loading