"""等待用户补充的问题""" from typing import Self from pydantic import Field, model_validator from app.schemas.base import ExtensibleModel, NonBlankString class ClarificationOption(ExtensibleModel): id: NonBlankString = Field(description="本题内唯一的选项 ID") label: NonBlankString = Field(description="简短选项名称") description: NonBlankString = Field(description="一句话说明选择的影响或推荐依据") recommended: bool = False class Clarification(ExtensibleModel): question: NonBlankString = Field( description="一个简短、具体、便于用户回答的澄清问题" ) options: list[ClarificationOption] = Field( default_factory=list, description="适合选择时提供 2–3 个互斥选项,否则留空,自由输入由客户端提供", ) @model_validator(mode="after") def validate_options(self) -> Self: if len(self.options) not in (0, 2, 3): raise ValueError("选项应为空或包含 2–3 项") if len({option.id for option in self.options}) != len(self.options): raise ValueError("选项 ID 不能重复") if sum(option.recommended for option in self.options) > 1: raise ValueError("最多一个推荐选项") self.options.sort(key=lambda option: not option.recommended) return self