diff --git a/src/models/__init__.py b/src/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/models/router.py b/src/models/router.py new file mode 100644 index 0000000..8ddb374 --- /dev/null +++ b/src/models/router.py @@ -0,0 +1,28 @@ +""" +Models router. +OpenAI-compatible /v1/models endpoint. +""" +import logging + +from fastapi import APIRouter + +from src.models import service +from src.models.schemas import ModelsResponse + +logger = logging.getLogger(__name__) + +router = APIRouter(prefix="/models", tags=["models"]) + + +@router.get("", response_model=ModelsResponse) +async def list_models() -> ModelsResponse: + """ + List available models (OpenAI-compatible). + + Currently returns mock model list. + + Returns: + List of available models + """ + logger.info("Listing available models") + return await service.list_models() diff --git a/src/models/schemas.py b/src/models/schemas.py new file mode 100644 index 0000000..bb450f8 --- /dev/null +++ b/src/models/schemas.py @@ -0,0 +1,18 @@ +""" +OpenAI-compatible models schemas. +""" +from src.core.models import CustomBaseModel + + +class Model(CustomBaseModel): + """OpenAI-compatible model object.""" + id: str + object: str = "model" + created: int + owned_by: str = "system" + + +class ModelsResponse(CustomBaseModel): + """OpenAI-compatible models list response.""" + object: str = "list" + data: list[Model] diff --git a/src/models/service.py b/src/models/service.py new file mode 100644 index 0000000..b362d68 --- /dev/null +++ b/src/models/service.py @@ -0,0 +1,34 @@ +""" +Models service. +Currently returns mock model list. +TODO: Fetch from Ollama in future. +""" +import time + +from src.models.schemas import Model, ModelsResponse + + +# Mock models (will be replaced with Ollama models later) +MOCK_MODELS = [ + {"id": "mistral-nemo:latest", "created": int(time.time())}, +] + + +async def list_models() -> ModelsResponse: + """ + List available models (mock implementation). + + Returns: + Mock list of models + """ + models = [ + Model( + id=model["id"], + object="model", + created=model["created"], + owned_by="system", + ) + for model in MOCK_MODELS + ] + + return ModelsResponse(object="list", data=models)