Spaces:
Sleeping
Sleeping
File size: 2,024 Bytes
240c946 | 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 62 63 64 65 66 67 68 69 70 71 | """Provider management routes."""
from __future__ import annotations
from typing import Any
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel, Field
from src.app.api import get_db, get_file_store
router = APIRouter(prefix="/providers", tags=["providers"])
class ProviderCreateRequest(BaseModel):
provider_id: str = Field(min_length=1)
display_name: str = Field(min_length=1)
runtime_type: str = Field(min_length=1)
model_id_or_path: str = Field(min_length=1)
family: str = Field(min_length=1)
endpoint: str | None = None
auth_mode: str = "none"
timeout: int = Field(default=120, gt=0)
prompt_template: str | None = None
class ProviderResponse(BaseModel):
provider_id: str
data: dict[str, Any]
@router.post("", status_code=201)
async def register_provider(req: ProviderCreateRequest) -> ProviderResponse:
"""Register a new provider profile."""
db = get_db()
store = get_file_store()
data = req.model_dump()
db.save_provider_record(req.provider_id, data)
store.save_provider(req.provider_id, data)
return ProviderResponse(provider_id=req.provider_id, data=data)
@router.get("")
async def list_providers() -> list[dict[str, Any]]:
"""List all registered providers."""
db = get_db()
return db.list_provider_records()
@router.get("/{provider_id}")
async def get_provider(provider_id: str) -> dict[str, Any]:
"""Get a provider by ID."""
db = get_db()
record = db.get_provider_record(provider_id)
if record is None:
raise HTTPException(status_code=404, detail=f"Provider '{provider_id}' not found")
return record
@router.delete("/{provider_id}", status_code=204)
async def delete_provider(provider_id: str) -> None:
"""Delete a provider."""
db = get_db()
store = get_file_store()
if not db.delete_provider_record(provider_id):
raise HTTPException(status_code=404, detail=f"Provider '{provider_id}' not found")
store.delete_provider(provider_id)
|