Complete admin model management
This commit is contained in:
@@ -11,6 +11,7 @@ from app.models.admin import Admin
|
||||
from app.models.ai_config import ModelConfig, Prompt, SystemConfig
|
||||
from app.schemas.admin import EnableModelRequest, ModelSaveRequest, PromptSaveRequest, SystemConfigSaveRequest
|
||||
from app.services.admin_service import OperationLogService
|
||||
from app.services.model_service import ModelClientService
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@@ -59,13 +60,29 @@ def create_model(
|
||||
db: Session = Depends(get_db),
|
||||
current_admin: Admin = Depends(get_current_admin),
|
||||
) -> dict:
|
||||
if not payload.apiKey:
|
||||
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="API Key 不能为空")
|
||||
model = ModelConfig(
|
||||
provider=payload.provider,
|
||||
display_name=payload.displayName,
|
||||
api_type=payload.apiType,
|
||||
model_name=payload.modelName,
|
||||
base_url=payload.baseUrl,
|
||||
api_url=payload.apiUrl,
|
||||
api_key=payload.apiKey,
|
||||
auth_type=payload.authType,
|
||||
api_version=payload.apiVersion,
|
||||
temperature=payload.temperature,
|
||||
top_p=payload.topP,
|
||||
top_k=payload.topK,
|
||||
presence_penalty=payload.presencePenalty,
|
||||
frequency_penalty=payload.frequencyPenalty,
|
||||
max_token=payload.maxToken,
|
||||
context_window=payload.contextWindow,
|
||||
stream_enabled=payload.streamEnabled,
|
||||
response_format=payload.responseFormat,
|
||||
extra_params=payload.extraParams,
|
||||
remark=payload.remark,
|
||||
timeout_second=payload.timeoutSecond,
|
||||
enabled=0,
|
||||
)
|
||||
@@ -77,6 +94,46 @@ def create_model(
|
||||
return api_success(_model_dict(model))
|
||||
|
||||
|
||||
@router.put("/model/{model_id}")
|
||||
def update_model(
|
||||
model_id: int,
|
||||
payload: ModelSaveRequest,
|
||||
db: Session = Depends(get_db),
|
||||
current_admin: Admin = Depends(get_current_admin),
|
||||
) -> dict:
|
||||
model = db.get(ModelConfig, model_id)
|
||||
if model is None:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="模型不存在")
|
||||
|
||||
model.provider = payload.provider
|
||||
model.display_name = payload.displayName
|
||||
model.api_type = payload.apiType
|
||||
model.model_name = payload.modelName
|
||||
model.base_url = payload.baseUrl
|
||||
model.api_url = payload.apiUrl
|
||||
if payload.apiKey:
|
||||
model.api_key = payload.apiKey
|
||||
model.auth_type = payload.authType
|
||||
model.api_version = payload.apiVersion
|
||||
model.temperature = payload.temperature
|
||||
model.top_p = payload.topP
|
||||
model.top_k = payload.topK
|
||||
model.presence_penalty = payload.presencePenalty
|
||||
model.frequency_penalty = payload.frequencyPenalty
|
||||
model.max_token = payload.maxToken
|
||||
model.context_window = payload.contextWindow
|
||||
model.stream_enabled = payload.streamEnabled
|
||||
model.response_format = payload.responseFormat
|
||||
model.extra_params = payload.extraParams
|
||||
model.remark = payload.remark
|
||||
model.timeout_second = payload.timeoutSecond
|
||||
db.add(model)
|
||||
OperationLogService.write(db, admin_id=current_admin.id, module="model", action="update", target_id=model.id)
|
||||
db.commit()
|
||||
db.refresh(model)
|
||||
return api_success(_model_dict(model))
|
||||
|
||||
|
||||
@router.post("/model/enable")
|
||||
def enable_model(
|
||||
payload: EnableModelRequest,
|
||||
@@ -109,6 +166,21 @@ def delete_model(
|
||||
return api_success()
|
||||
|
||||
|
||||
@router.post("/model/{model_id}/test")
|
||||
def test_model(
|
||||
model_id: int,
|
||||
db: Session = Depends(get_db),
|
||||
current_admin: Admin = Depends(get_current_admin),
|
||||
) -> dict:
|
||||
model = db.get(ModelConfig, model_id)
|
||||
if model is None:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="模型不存在")
|
||||
result = ModelClientService.test_model(model)
|
||||
OperationLogService.write(db, admin_id=current_admin.id, module="model", action="test", target_id=model.id)
|
||||
db.commit()
|
||||
return api_success(result)
|
||||
|
||||
|
||||
@router.get("/config")
|
||||
def list_config(db: Session = Depends(get_db), current_admin: Admin = Depends(get_current_admin)) -> dict:
|
||||
configs = db.scalars(select(SystemConfig).order_by(SystemConfig.config_key.asc())).all()
|
||||
@@ -139,11 +211,25 @@ def _model_dict(model: ModelConfig) -> dict:
|
||||
return {
|
||||
"id": model.id,
|
||||
"provider": model.provider,
|
||||
"displayName": model.display_name,
|
||||
"apiType": model.api_type,
|
||||
"modelName": model.model_name,
|
||||
"baseUrl": model.base_url,
|
||||
"apiUrl": model.api_url,
|
||||
"apiKeyMasked": "******" if model.api_key else "",
|
||||
"authType": model.auth_type,
|
||||
"apiVersion": model.api_version,
|
||||
"temperature": float(model.temperature) if model.temperature is not None else None,
|
||||
"topP": float(model.top_p) if model.top_p is not None else None,
|
||||
"topK": model.top_k,
|
||||
"presencePenalty": float(model.presence_penalty) if model.presence_penalty is not None else None,
|
||||
"frequencyPenalty": float(model.frequency_penalty) if model.frequency_penalty is not None else None,
|
||||
"maxToken": model.max_token,
|
||||
"contextWindow": model.context_window,
|
||||
"streamEnabled": model.stream_enabled,
|
||||
"responseFormat": model.response_format,
|
||||
"extraParams": model.extra_params,
|
||||
"remark": model.remark,
|
||||
"timeoutSecond": model.timeout_second,
|
||||
"enabled": model.enabled,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user