Skip to content

Conversation

@raghav-stripe
Copy link
Contributor

@raghav-stripe raghav-stripe commented Nov 23, 2025

Title

Propagate model ID header (x-litellm-model-id) on error responses

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

Bug Fix

Changes

This PR ensures the x-litellm-model-id header is consistently returned on both successful and failed requests across all endpoints (/v1/chat/completions, /v1/responses, /v1/messages) for sync and streaming calls.

Previously, the model ID header was only returned on successful requests, and only for chat completions + responses API. It was missing on messages entirely, and responses API streaming as well, as well as error cases (non-200) for all the endpoints. This causes issues for clients who need to track which specific deployment handled their request, especially when debugging errors / tracking for metrics!

The fix extracts the model_id from the router's metadata (litellm_metadata) which is populated during routing and persists throughout the request lifecycle, including when errors occur after a deployment has been selected. This ensures consistent behavior across all response types (success, streaming, and error).

Test Results

Passing unit test screenshot:
image

Start the server:

poetry run litellm --config config.yaml --port 4000

/v1/chat/completions

Success - Non-streaming:

curl -v http://localhost:4000/v1/chat/completions \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "messages": [{"role": "user", "content": "Hi"}]}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Success - Streaming:

curl -v http://localhost:4000/v1/chat/completions \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "messages": [{"role": "user", "content": "Hi"}], "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Error - Bad Request:

curl -v http://localhost:4000/v1/chat/completions \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "messages": [{"role": "user", "content": "Hi"}], "reasoning_effort": "low"}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Error - Streaming Bad Request:

curl -v http://localhost:4000/v1/chat/completions \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "messages": [{"role": "user", "content": "Hi"}], "reasoning_effort": "low", "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Success - Non-streaming - Cross-provider to Bedrock:

curl -v http://localhost:4000/v1/chat/completions \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "messages": [{"role": "user", "content": "Hi"}]}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

Success - Streaming - Cross-provider to Bedrock:

curl -v http://localhost:4000/v1/chat/completions \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "messages": [{"role": "user", "content": "Hi"}], "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

Error - Bad Request - Cross-provider to Bedrock:

curl -v http://localhost:4000/v1/chat/completions \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "messages": [{"role": "user", "content": "Hi"}], "max_tokens": 0}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

Error - Streaming Bad Request - Cross-provider to Bedrock:

curl -v http://localhost:4000/v1/chat/completions \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "messages": [{"role": "user", "content": "Hi"}], "max_tokens": 0, "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

/v1/messages

Success - Non-streaming:

curl -v http://localhost:4000/v1/messages \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "max_tokens": 10, "messages": [{"role": "user", "content": "Hi"}]}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

Success - Streaming:

curl -v http://localhost:4000/v1/messages \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "max_tokens": 10, "messages": [{"role": "user", "content": "Hi"}], "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

Error - Bad Request:

curl -v http://localhost:4000/v1/messages \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "max_tokens": 0, "messages": [{"role": "user", "content": "Hi"}]}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

Error - Streaming Bad Request:

curl -v http://localhost:4000/v1/messages \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "max_tokens": 0, "messages": [{"role": "user", "content": "Hi"}], "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

Success - Non-streaming - Cross-provider from OpenAI:

curl -v http://localhost:4000/v1/messages \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "max_tokens": 10, "messages": [{"role": "user", "content": "Hi"}]}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Success - Streaming - Cross-provider from OpenAI:

curl -v http://localhost:4000/v1/messages \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "max_tokens": 10, "messages": [{"role": "user", "content": "Hi"}], "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Error - Bad Request - Cross-provider from OpenAI:

curl -v http://localhost:4000/v1/messages \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "max_tokens": 10, "messages": [{"role": "user", "content": "Hi"}], "reasoning_effort": "low"}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Error - Streaming Bad Request - Cross-provider from OpenAI:

curl -v http://localhost:4000/v1/messages \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "max_tokens": 10, "messages": [{"role": "user", "content": "Hi"}], "reasoning_effort": "low", "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

/v1/responses

Success - Non-streaming:

curl -v http://localhost:4000/v1/responses \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "input": "Hi"}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Success - Streaming:

curl -v http://localhost:4000/v1/responses \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "input": "Hi", "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Error - Bad Request:

curl -v http://localhost:4000/v1/responses \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "input": "Hi", "temperature": 2.5}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Error - Streaming Bad Request:

curl -v http://localhost:4000/v1/responses \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "gpt-4.1", "input": "Hi", "temperature": 2.5, "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 91f84a8c74066cd29acc087803ba323645417b95f9e55096bf8e3827149e8492

Success - Non-streaming - Cross-provider to Bedrock:

curl -v http://localhost:4000/v1/responses \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "input": "Hi"}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

Success - Streaming - Cross-provider to Bedrock:

curl -v http://localhost:4000/v1/responses \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "input": "Hi", "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

Error - Bad Request - Cross-provider to Bedrock:

curl -v http://localhost:4000/v1/responses \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "input": "Hi", "temperature": 2.5}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

Error - Streaming Bad Request - Cross-provider to Bedrock:

curl -v http://localhost:4000/v1/responses \
  -H 'Authorization: Bearer sk-master' \
  -H 'Content-Type: application/json' \
  -d '{"model": "claude-sonnet-4", "input": "Hi", "temperature": 2.5, "stream": true}' \
  2>&1 | grep -i "x-litellm-model-id"
< x-litellm-model-id: 0d410bc56f642789e11dec790cf9c3ba46c680f1b6e25c5a9cf171bb1f2f3791

@vercel
Copy link

vercel bot commented Nov 23, 2025

@raghav-stripe is attempting to deploy a commit to the CLERKIEAI Team on Vercel.

A member of the Team first needs to authorize it.

@raghav-stripe raghav-stripe marked this pull request as ready for review November 23, 2025 02:47
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.

1 participant