from pydantic import BaseModel from typing import Optional class RecommendItem(BaseModel): type: str # product / activity / article id: int name: str description: str = "" cover_image: str = "" price: Optional[float] = None url: str = "" score: float = 0.0 reason: str = "" class RecommendRequest(BaseModel): user_id: int query: str = "" tags: list[str] = [] types: Optional[list[str]] = None limit: int = 5 context: Optional[dict] = None class RecommendResponse(BaseModel): items: list[RecommendItem] source: str = "" # sql / vector / hybrid trace_id: str = ""