From 637aa87026c7e820d365fbb477915d983e833435 Mon Sep 17 00:00:00 2001 From: Phillip Munn <25081499+phillipmunn@users.noreply.github.com> Date: Sun, 23 Aug 2026 20:47:41 +0100 Subject: [PATCH] feat(server): Add OpenAI /v1/models/{model_id} endpoint --- python/freetoken/server/openai_api.py | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/python/freetoken/server/openai_api.py b/python/freetoken/server/openai_api.py index b4becd263..f88f656ad 100644 --- a/python/freetoken/server/openai_api.py +++ b/python/freetoken/server/openai_api.py @@ -143,6 +143,35 @@ async def v1_models(): default_reasoning_effort=default_effort, )]) + @app.get("/v1/models/{model_id:path}") + async def v1_model(model_id: str): + """Retrieve metadata for the currently served model. + + OpenAI-compatible clients may use this endpoint to validate a model + name before sending completion requests. + """ + state = get_state() + served_model_id = _served_model_name(state) + + if model_id != served_model_id: + return create_error_response( + f"The model '{model_id}' does not exist", + status_code=404, + err_type="invalid_request_error", + param="model", + code="model_not_found", + ) + + ctx = _model_context_length(state) + efforts, default_effort = await _effort_fields(state) + return ModelCard( + id=served_model_id, + root=state.config.model_path, + max_model_len=ctx, + context_length=ctx, + supported_reasoning_efforts=efforts, + default_reasoning_effort=default_effort, + ) async def handle_chat_completion( req: ChatCompletionRequest,