feat: add custom_metadata to OpenAIModel to unify /v1/models with /v1/openai/v1/models (#4051)

We need to remove `/v1/openai/v1` paths shortly. There is one trouble --
our current `/v1/openai/v1/models` endpoint provides different data than
`/v1/models`. Unfortunately our tests target the latter (llama-stack
customized) behavior. We need to get to true OpenAI compatibility.

This is step 1: adding `custom_metadata` field to `OpenAIModel` that
includes all the extra stuff we add in the native `/v1/models` response.
This can be extracted on the consumer end by look at
`__pydantic_extra__` or other similar fields.

This PR:
- Adds `custom_metadata` field to `OpenAIModel` class in
`src/llama_stack/apis/models/models.py`
- Modified `openai_list_models()` in
`src/llama_stack/core/routing_tables/models.py` to populate
custom_metadata

Next Steps
1. Update stainless client to use `/v1/openai/v1/models` instead of
`/v1/models`
2. Migrate tests to read from `custom_metadata`
3. Remove `/v1/openai/v1/` prefix entirely and consolidate to single
`/v1/models` endpoint
This commit is contained in:
Ashwin Bharambe 2025-11-03 15:56:07 -08:00 committed by GitHub
parent 2381714904
commit 44096512b5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 218 additions and 61 deletions

View file

@ -166,6 +166,14 @@ async def test_models_routing_table(cached_disk_dist_registry):
assert "test_provider/test-model" in openai_model_ids
assert "test_provider/test-model-2" in openai_model_ids
# Verify custom_metadata is populated with Llama Stack-specific data
for openai_model in openai_models.data:
assert openai_model.custom_metadata is not None
assert "model_type" in openai_model.custom_metadata
assert "provider_id" in openai_model.custom_metadata
assert "provider_resource_id" in openai_model.custom_metadata
assert openai_model.custom_metadata["provider_id"] == "test_provider"
# Test get_object_by_identifier
model = await table.get_object_by_identifier("model", "test_provider/test-model")
assert model is not None