Spaces:
Running
Running
File size: 2,346 Bytes
fba6023 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | 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,
)
@router.get("", response_model=SuccessResponse)
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},
)
@router.get("/categories", response_model=SuccessResponse)
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})
@router.post("/run", response_model=SuccessResponse)
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)
@router.get("/{template_id}", response_model=SuccessResponse)
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})
|