feat: complete image console and add verified REST and MCP workflows
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
"""供应商与模型 API。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, HTTPException
|
||||
|
||||
from ..providers import ProviderError
|
||||
from ..schemas import DiscoverIn, ModelUpsertIn, ProviderIn
|
||||
from ..services import providers as svc
|
||||
|
||||
router = APIRouter(prefix="/api/providers", tags=["providers"])
|
||||
|
||||
|
||||
@router.get("")
|
||||
def list_providers():
|
||||
return svc.list_providers()
|
||||
|
||||
|
||||
@router.post("")
|
||||
def save_provider(payload: ProviderIn):
|
||||
try:
|
||||
return svc.save_provider(payload.model_dump())
|
||||
except ProviderError as exc:
|
||||
raise HTTPException(status_code=exc.status, detail=exc.message)
|
||||
|
||||
|
||||
@router.delete("/{provider_id}")
|
||||
def delete_provider(provider_id: str):
|
||||
svc.delete_provider(provider_id)
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
@router.post("/discover")
|
||||
def discover_with_credentials(payload: DiscoverIn):
|
||||
"""尚未保存供应商时,用手填的 Base URL + Key 临时拉取模型清单。"""
|
||||
try:
|
||||
return svc.discover_with_credentials(
|
||||
payload.adapter, payload.base_url.rstrip("/"), payload.api_key
|
||||
)
|
||||
except ProviderError as exc:
|
||||
raise HTTPException(status_code=exc.status, detail=exc.message)
|
||||
|
||||
|
||||
@router.post("/{provider_id}/discover")
|
||||
def discover_provider_models(provider_id: str):
|
||||
"""按已保存的供应商拉取上游模型(命中规则:模型 ID 含 image)。"""
|
||||
try:
|
||||
return svc.discover(provider_id)
|
||||
except ProviderError as exc:
|
||||
raise HTTPException(status_code=exc.status, detail=exc.message)
|
||||
|
||||
|
||||
@router.post("/{provider_id}/models")
|
||||
def upsert_provider_models(provider_id: str, payload: ModelUpsertIn):
|
||||
"""保存勾选的模型,并设置启用状态(未勾选的自动停用)。"""
|
||||
try:
|
||||
return svc.upsert_models(
|
||||
provider_id,
|
||||
payload.model_ids,
|
||||
enabled=payload.enabled,
|
||||
note=payload.note or "自动发现",
|
||||
exclusive=True,
|
||||
)
|
||||
except ProviderError as exc:
|
||||
raise HTTPException(status_code=exc.status, detail=exc.message)
|
||||
Reference in New Issue
Block a user