Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions responses_api_models/vllm_model/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,9 @@ def _preprocess_chat_completion_create_params(self, request: Request, body_dict:
chat_template_kwargs = deepcopy(self.config.chat_template_kwargs)

metadata = body_dict.get("metadata", dict())
if metadata is None:
metadata = {}
body_dict["metadata"] = metadata

# Merge global config chat_template_kwargs with per-request overrides in metadata (e.g. per-sample reasoning on/off)
metadata_chat_template_kwargs_str = metadata.get("chat_template_kwargs", "{}")
Expand Down
24 changes: 24 additions & 0 deletions responses_api_models/vllm_model/tests/test_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -3306,6 +3306,30 @@ async def mock_create_chat_completion(**kwargs):
assert captured_kwargs["min_tokens"] == 20
assert captured_kwargs["new_param"] == "value"

def test_metadata_none_normalizes_to_empty_dict(self) -> None:
config = VLLMModelConfig(
host="0.0.0.0",
port=8081,
base_url="http://api.openai.com/v1",
api_key="dummy_key", # pragma: allowlist secret
model="dummy-model",
entrypoint="",
name="",
return_token_id_information=False,
uses_reasoning_parser=False,
)
model = VLLMModel(config=config, server_client=MagicMock(spec=ServerClient))

body = {
"model": "dummy-model",
"messages": [{"role": "user", "content": "hello"}],
"metadata": None,
}
result = model._preprocess_chat_completion_create_params(MagicMock(), body)

assert result["messages"][0]["content"] == "hello"
assert result["metadata"] == {}


# ──────────────────────────────────────────────────────────────────────────────
# Audio sidechannel splice (metadata.audio_data → user-message content block)
Expand Down