feat(workspace): add workspace models configuration update endpoint

- Add PUT endpoint to update workspace LLM, embedding, and rerank model configurations
- Create WorkspaceModelsUpdate schema for model configuration update requests
- Create WorkspaceModelsConfig schema for model configuration responses with proper validation
- Implement update_workspace_models_configs service method to persist model configuration changes
- Update workspace_models_configs GET endpoint to return validated WorkspaceModelsConfig response
- Reorganize imports across controller, schema, and service files for consistency and readability
- Add proper logging for model configuration updates with user and workspace context
This commit is contained in:
Ke Sun
2025-12-24 18:21:36 +08:00
parent 9cf8d5cb0a
commit d8336503bc
3 changed files with 163 additions and 49 deletions

View File

@@ -1,9 +1,17 @@
import email
from pydantic import BaseModel, Field, EmailStr, field_serializer, computed_field, ConfigDict
import datetime
import email
import uuid
from typing import Literal
from app.models.workspace_model import WorkspaceRole, InviteStatus
from typing import Literal, Optional
from app.models.workspace_model import InviteStatus, WorkspaceRole
from pydantic import (
BaseModel,
ConfigDict,
EmailStr,
Field,
computed_field,
field_serializer,
)
class WorkspaceBase(BaseModel):
@@ -170,3 +178,19 @@ class InviteValidateResponse(BaseModel):
class InviteAcceptRequest(BaseModel):
token: str = Field(..., description="邀请令牌")
class WorkspaceModelsUpdate(BaseModel):
"""工作空间模型配置更新请求"""
llm: Optional[uuid.UUID] = Field(default=None, description="LLM模型ID")
embedding: Optional[uuid.UUID] = Field(default=None, description="嵌入模型ID")
rerank: Optional[uuid.UUID] = Field(default=None, description="重排序模型ID")
class WorkspaceModelsConfig(BaseModel):
"""工作空间模型配置响应"""
model_config = ConfigDict(from_attributes=True)
llm: Optional[str] = Field(default=None, description="LLM模型ID")
embedding: Optional[str] = Field(default=None, description="嵌入模型ID")
rerank: Optional[str] = Field(default=None, description="重排序模型ID")