feat: add custom_metadata to OpenAIModel to unify /v1/models with /v1/openai/v1/models

Goal is to consolidate model listing endpoints. This is step 1: adding custom_metadata
field to OpenAIModel that includes model_type, provider_id, provider_resource_id, and
all model metadata from the native /v1/models response.

Next steps: update stainless client to use /v1/openai/v1/models, migrate tests to read
from custom_metadata, then remove /v1/openai/v1/ prefix entirely.
This commit is contained in:
Ashwin Bharambe 2025-11-03 15:11:58 -08:00
parent 415fd9e36b
commit 3af73b754a
3 changed files with 16 additions and 0 deletions

View file

@ -90,12 +90,14 @@ class OpenAIModel(BaseModel):
:object: The object type, which will be "model"
:created: The Unix timestamp in seconds when the model was created
:owned_by: The owner of the model
:custom_metadata: Llama Stack-specific metadata including model_type, provider info, and additional metadata
"""
id: str
object: Literal["model"] = "model"
created: int
owned_by: str
custom_metadata: dict[str, Any] | None = None
class OpenAIListModelsResponse(BaseModel):

View file

@ -134,6 +134,12 @@ class ModelsRoutingTable(CommonRoutingTableImpl, Models):
object="model",
created=int(time.time()),
owned_by="llama_stack",
custom_metadata={
"model_type": model.model_type,
"provider_id": model.provider_id,
"provider_resource_id": model.provider_resource_id,
**model.metadata,
},
)
for model in all_models
]

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