Spaces:
Running
Running
| """ | |
| Pydantic 模型定義 | |
| 統一管理 API 請求/回應的資料結構 | |
| """ | |
| from datetime import datetime | |
| from typing import List, Optional | |
| from pydantic import BaseModel, EmailStr, Field | |
| # ===== 用戶相關 ===== | |
| class UserCreate(BaseModel): | |
| """用戶註冊請求""" | |
| name: str | |
| email: EmailStr | |
| password: str = Field(min_length=6) | |
| class UserLogin(BaseModel): | |
| """用戶登入請求""" | |
| email: EmailStr | |
| password: str | |
| class UserInfo(BaseModel): | |
| """用戶資訊""" | |
| id: str | |
| name: str | |
| email: EmailStr | |
| created_at: datetime | |
| class UserPublic(BaseModel): | |
| """用戶公開資訊回應""" | |
| success: bool | |
| user: UserInfo | |
| class UserLoginPublicResponse(BaseModel): | |
| """用戶登入回應""" | |
| success: bool | |
| user: UserInfo | |
| token: Optional[str] = None | |
| # ===== 對話相關 ===== | |
| class ChatCreateRequest(BaseModel): | |
| """建立對話請求""" | |
| user_id: str | |
| title: Optional[str] = "新對話" | |
| class ChatTitleUpdateRequest(BaseModel): | |
| """更新對話標題請求""" | |
| title: str | |
| class ChatPublic(BaseModel): | |
| """對話公開資訊""" | |
| chat_id: str | |
| user_id: str | |
| title: str | |
| created_at: datetime | |
| updated_at: datetime | |
| class ChatSummary(BaseModel): | |
| """對話摘要""" | |
| chat_id: str | |
| title: str | |
| updated_at: datetime | |
| class ChatListResponse(BaseModel): | |
| """對話列表回應""" | |
| chats: List[ChatSummary] | |
| # ===== 訊息相關 ===== | |
| class MessageCreateRequest(BaseModel): | |
| """建立訊息請求""" | |
| sender: str | |
| content: str | |
| class MessagePublic(BaseModel): | |
| """訊息公開資訊""" | |
| sender: str | |
| content: str | |
| timestamp: datetime | |
| class ChatDetailResponse(ChatPublic): | |
| """對話詳情回應(含訊息)""" | |
| messages: List[MessagePublic] | |
| # ===== 檔案分析 ===== | |
| class FileAnalysisRequest(BaseModel): | |
| """檔案分析請求""" | |
| filename: str | |
| content: str | |
| mime_type: str | |
| user_prompt: Optional[str] = "請分析這個檔案的內容" | |
| class FileAnalysisResponse(BaseModel): | |
| """檔案分析回應""" | |
| success: bool | |
| filename: str | |
| analysis: Optional[str] = None | |
| error: Optional[str] = None | |
| # ===== 語音相關 ===== | |
| class SpeakerLabelBindRequest(BaseModel): | |
| """語音標籤綁定請求""" | |
| speaker_label: str | |