mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 07:03:53 +08:00
179 lines
5.9 KiB
Python
179 lines
5.9 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends, Query, Request
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.core.database import get_db
|
|
from app.core.responses import JavaJSONResponse, envelope, ok
|
|
from app.core.security import require_normal, require_super_admin
|
|
from app.repositories.config import ConfigRepository
|
|
from app.repositories.model import ModelRepository
|
|
from app.schemas.model import ModelConfigBody, ModelProviderBody
|
|
from app.services.config import ConfigService
|
|
from app.services.model import ModelProviderService, ModelService
|
|
|
|
model_router = APIRouter()
|
|
|
|
|
|
def _models(session: AsyncSession) -> ModelService:
|
|
return ModelService(ModelRepository(session))
|
|
|
|
|
|
def _providers(session: AsyncSession) -> ModelProviderService:
|
|
return ModelProviderService(ModelRepository(session))
|
|
|
|
|
|
async def _refresh_server_config(session: AsyncSession) -> None:
|
|
await ConfigService(ConfigRepository(session)).get_config(use_cache=False)
|
|
|
|
|
|
@model_router.get("/models/names")
|
|
async def model_names(
|
|
request: Request,
|
|
model_type: str = Query(alias="modelType"),
|
|
model_name: str | None = Query(default=None, alias="modelName"),
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> JavaJSONResponse:
|
|
require_normal(request)
|
|
return ok(await _models(session).names(model_type, model_name))
|
|
|
|
|
|
@model_router.get("/models/llm/names")
|
|
async def llm_names(
|
|
request: Request,
|
|
model_name: str | None = Query(default=None, alias="modelName"),
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> JavaJSONResponse:
|
|
require_normal(request)
|
|
return ok(await _models(session).llm_names(model_name))
|
|
|
|
|
|
@model_router.get("/models/list")
|
|
async def model_list(
|
|
request: Request,
|
|
model_type: str = Query(alias="modelType"),
|
|
model_name: str | None = Query(default=None, alias="modelName"),
|
|
page: str = "0",
|
|
limit: str = "10",
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> JavaJSONResponse:
|
|
require_super_admin(request)
|
|
return ok(await _models(session).model_page(model_type, model_name, page, limit))
|
|
|
|
|
|
@model_router.get("/models/provider/plugin/names")
|
|
async def plugin_names(request: Request, session: AsyncSession = Depends(get_db)) -> JavaJSONResponse:
|
|
user = require_normal(request)
|
|
return ok(await ModelRepository(session).list_plugins_for_user(user.id))
|
|
|
|
|
|
@model_router.get("/models/provider")
|
|
async def provider_list(
|
|
request: Request,
|
|
model_type: str | None = Query(default=None, alias="modelType"),
|
|
name: str | None = None,
|
|
page: str = "0",
|
|
limit: str = "10",
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> JavaJSONResponse:
|
|
require_super_admin(request)
|
|
return ok(await _providers(session).page(model_type, name, page, limit))
|
|
|
|
|
|
@model_router.post("/models/provider")
|
|
async def provider_add(
|
|
body: ModelProviderBody, request: Request, session: AsyncSession = Depends(get_db)
|
|
) -> JavaJSONResponse:
|
|
return ok(await _providers(session).add(body, require_super_admin(request)))
|
|
|
|
|
|
@model_router.put("/models/provider")
|
|
async def provider_edit(
|
|
body: ModelProviderBody, request: Request, session: AsyncSession = Depends(get_db)
|
|
) -> JavaJSONResponse:
|
|
return ok(await _providers(session).edit(body, require_super_admin(request)))
|
|
|
|
|
|
@model_router.post("/models/provider/delete")
|
|
async def provider_delete(
|
|
ids: list[str], request: Request, session: AsyncSession = Depends(get_db)
|
|
) -> JavaJSONResponse:
|
|
require_super_admin(request)
|
|
await _providers(session).delete(ids)
|
|
return ok()
|
|
|
|
|
|
@model_router.get("/models/{model_type}/provideTypes")
|
|
async def provider_types(
|
|
model_type: str, request: Request, session: AsyncSession = Depends(get_db)
|
|
) -> JavaJSONResponse:
|
|
require_super_admin(request)
|
|
return ok(await ModelRepository(session).list_providers_by_type(model_type))
|
|
|
|
|
|
@model_router.post("/models/{model_type}/{provide_code}")
|
|
async def model_add(
|
|
model_type: str,
|
|
provide_code: str,
|
|
body: ModelConfigBody,
|
|
request: Request,
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> JavaJSONResponse:
|
|
require_super_admin(request)
|
|
result = await _models(session).add(model_type, provide_code, body)
|
|
await _refresh_server_config(session)
|
|
return ok(result)
|
|
|
|
|
|
@model_router.put("/models/enable/{model_id}/{status}")
|
|
async def model_enable(
|
|
model_id: str, status: int, request: Request, session: AsyncSession = Depends(get_db)
|
|
) -> JavaJSONResponse:
|
|
require_super_admin(request)
|
|
message = await _models(session).enable(model_id, status)
|
|
return JavaJSONResponse(envelope(None, code=500, msg=message)) if message else ok()
|
|
|
|
|
|
@model_router.put("/models/{model_type}/{provide_code}/{model_id}")
|
|
async def model_edit(
|
|
model_type: str,
|
|
provide_code: str,
|
|
model_id: str,
|
|
body: ModelConfigBody,
|
|
request: Request,
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> JavaJSONResponse:
|
|
require_super_admin(request)
|
|
result = await _models(session).edit(model_type, provide_code, model_id, body)
|
|
await _refresh_server_config(session)
|
|
return ok(result)
|
|
|
|
|
|
@model_router.put("/models/default/{model_id}")
|
|
async def model_default(
|
|
model_id: str, request: Request, session: AsyncSession = Depends(get_db)
|
|
) -> JavaJSONResponse:
|
|
require_super_admin(request)
|
|
message = await _models(session).set_default(model_id)
|
|
if message:
|
|
return JavaJSONResponse(envelope(None, code=500, msg=message))
|
|
await _refresh_server_config(session)
|
|
return ok()
|
|
|
|
|
|
@model_router.get("/models/{model_id}")
|
|
async def model_get(
|
|
model_id: str, request: Request, session: AsyncSession = Depends(get_db)
|
|
) -> JavaJSONResponse:
|
|
require_super_admin(request)
|
|
return ok(await _models(session).get_model(model_id))
|
|
|
|
|
|
@model_router.delete("/models/{model_id}")
|
|
async def model_delete(
|
|
model_id: str, request: Request, session: AsyncSession = Depends(get_db)
|
|
) -> JavaJSONResponse:
|
|
require_super_admin(request)
|
|
await _models(session).delete(model_id)
|
|
return ok()
|