from fastapi import APIRouter, Depends, HTTPException from core_domain import ChatCompletionRequestContract, ChatCompletionResponseContract, ServiceHealth from app.application.services import ModelGatewayApplicationService from app.bootstrap.settings import ModelGatewayServiceSettings from app.infrastructure.provider import ModelProviderClient, ModelProviderClientError router = APIRouter() def get_model_gateway_settings() -> ModelGatewayServiceSettings: return ModelGatewayServiceSettings() def get_model_gateway_application_service( settings: ModelGatewayServiceSettings = Depends(get_model_gateway_settings), ) -> ModelGatewayApplicationService: return ModelGatewayApplicationService( provider_client=ModelProviderClient(settings=settings), settings=settings, ) @router.get("/health", response_model=ServiceHealth) def health_check( settings: ModelGatewayServiceSettings = Depends(get_model_gateway_settings), ) -> ServiceHealth: provider_status = "configured" if settings.provider_base_url else "missing" return ServiceHealth(service="model-gateway-service", status="ok", database=provider_status) @router.post("/chat-completions", response_model=ChatCompletionResponseContract) def create_chat_completion( payload: ChatCompletionRequestContract, service: ModelGatewayApplicationService = Depends(get_model_gateway_application_service), ) -> ChatCompletionResponseContract: try: return service.create_chat_completion(payload) except ModelProviderClientError as exc: raise HTTPException(status_code=502, detail=str(exc)) from exc