|
from pydantic import BaseModel, Field |
|
from typing import Optional, Dict, Any, List |
|
from datetime import datetime |
|
from enum import Enum |
|
|
|
class QueryType(str, Enum): |
|
"""查詢類型枚舉""" |
|
SEARCH = "search" |
|
CREATE = "create" |
|
UPDATE = "update" |
|
DELETE = "delete" |
|
ANALYTICS = "analytics" |
|
UNKNOWN = "unknown" |
|
|
|
class NLPAnalysisRequest(BaseModel): |
|
"""NLP 分析請求模型""" |
|
message: str = Field(..., description="用戶輸入的訊息") |
|
user_id: Optional[str] = Field(None, description="用戶ID") |
|
context: Optional[Dict[str, Any]] = Field(default_factory=dict, description="上下文資訊") |
|
|
|
class NLPAnalysisResult(BaseModel): |
|
"""NLP 分析結果模型""" |
|
query_type: QueryType = Field(..., description="查詢類型") |
|
intent: str = Field(..., description="用戶意圖") |
|
entities: Dict[str, Any] = Field(default_factory=dict, description="提取的實體") |
|
confidence: float = Field(..., ge=0.0, le=1.0, description="信心度") |
|
parameters: Dict[str, Any] = Field(default_factory=dict, description="查詢參數") |
|
|
|
class DatabaseQuery(BaseModel): |
|
"""資料庫查詢模型""" |
|
table_name: str = Field(..., description="資料表名稱") |
|
operation: str = Field(..., description="操作類型") |
|
conditions: Optional[Dict[str, Any]] = Field(default_factory=dict, description="查詢條件") |
|
data: Optional[Dict[str, Any]] = Field(default_factory=dict, description="要操作的資料") |
|
limit: Optional[int] = Field(None, description="查詢限制數量") |
|
offset: Optional[int] = Field(None, description="查詢偏移量") |
|
|
|
class DatabaseResult(BaseModel): |
|
"""資料庫查詢結果模型""" |
|
success: bool = Field(..., description="是否成功") |
|
data: Optional[List[Dict[str, Any]]] = Field(default_factory=list, description="查詢結果資料") |
|
count: Optional[int] = Field(None, description="結果數量") |
|
error: Optional[str] = Field(None, description="錯誤訊息") |
|
|
|
class LineMessage(BaseModel): |
|
"""LINE 訊息模型""" |
|
user_id: str = Field(..., description="用戶ID") |
|
message: str = Field(..., description="訊息內容") |
|
timestamp: datetime = Field(default_factory=datetime.now, description="時間戳記") |
|
message_type: str = Field(default="text", description="訊息類型") |
|
|
|
class UserProfile(BaseModel): |
|
"""用戶資料模型""" |
|
user_id: str = Field(..., description="用戶ID") |
|
display_name: Optional[str] = Field(None, description="顯示名稱") |
|
status_message: Optional[str] = Field(None, description="狀態訊息") |
|
picture_url: Optional[str] = Field(None, description="頭像URL") |
|
created_at: datetime = Field(default_factory=datetime.now, description="建立時間") |
|
updated_at: datetime = Field(default_factory=datetime.now, description="更新時間") |
|
|
|
class APIResponse(BaseModel): |
|
"""API 回應模型""" |
|
success: bool = Field(..., description="是否成功") |
|
message: str = Field(..., description="回應訊息") |
|
data: Optional[Any] = Field(None, description="回應資料") |
|
error: Optional[str] = Field(None, description="錯誤訊息") |