Spaces:
Running
Running
| from __future__ import annotations | |
| import time | |
| from typing import Any | |
| from fastapi import APIRouter, Query, Request | |
| from app.core.response import SuccessResponse | |
| router = APIRouter(prefix="/v1/templates", tags=["templates"]) | |
| def _response(request: Request, started: float, metadata: dict[str, Any]) -> SuccessResponse: | |
| return SuccessResponse( | |
| request_id=request.state.request_id, | |
| processing_time=round(time.monotonic() - started, 4), | |
| metadata=metadata, | |
| ) | |
| async def list_templates( | |
| request: Request, category: str | None = Query(default=None) | |
| ) -> SuccessResponse: | |
| """List metadata, parameters, and examples for every template version.""" | |
| started = time.monotonic() | |
| request.state.operation = "templates.list" | |
| templates = request.app.state.container.template_registry.list_templates(category) | |
| return _response( | |
| request, | |
| started, | |
| {"templates": templates, "count": len(templates), "category": category}, | |
| ) | |
| async def template_categories(request: Request) -> SuccessResponse: | |
| """List categories discovered dynamically from YAML definitions.""" | |
| started = time.monotonic() | |
| request.state.operation = "templates.categories" | |
| categories = request.app.state.container.template_registry.categories() | |
| return _response(request, started, {"categories": categories}) | |
| async def run_template(request: Request) -> SuccessResponse: | |
| """Resolve any supported media input and execute a versioned template.""" | |
| request.state.operation = "templates.run" | |
| container = request.app.state.container | |
| resolved = await container.resolver.resolve(request) | |
| return await container.template_executor.execute_request(resolved) | |
| async def template_details(request: Request, template_id: str) -> SuccessResponse: | |
| """Return complete metadata and pipeline details for a template reference.""" | |
| started = time.monotonic() | |
| request.state.operation = "templates.details" | |
| template = request.app.state.container.template_registry.template_details(template_id) | |
| return _response(request, started, {"template": template}) | |