Spaces:
Sleeping
Sleeping
| """Pydantic models for form generator API.""" | |
| from typing import Any, Dict, List, Optional | |
| from pydantic import BaseModel, Field | |
| class GenerateFormRequest(BaseModel): | |
| """Request for full form generation from description.""" | |
| description: str = Field(description="User description of the form to generate") | |
| conversation_context: Optional[List[str]] = Field(default=None, description="Recent chat messages for context") | |
| user_goals: Optional[List[str]] = Field(default=None, description="User-stated goals for the form") | |
| preferred_field_types: Optional[List[str]] = Field(default=None, description="Preferred field types to favor") | |
| must_have_logic: Optional[bool] = Field(default=None, description="Whether conditional logic is required") | |
| class FormFieldRef(BaseModel): | |
| """Minimal field representation for refine context.""" | |
| id: str = "" | |
| type: str = "" | |
| label: str = "" | |
| required: bool = False | |
| placeholder: Optional[str] = None | |
| description: Optional[str] = None | |
| options: Optional[List[Dict[str, Any]]] = None | |
| settings: Optional[Dict[str, Any]] = None | |
| validation: Optional[Dict[str, Any]] = None | |
| conditionalLogic: Optional[Dict[str, Any]] = None | |
| class RefineFormRequest(BaseModel): | |
| """Request for surgical refine (diff) of existing form.""" | |
| user_request: str = Field(description="User's edit request in plain language") | |
| current_fields: List[Dict[str, Any]] = Field(description="Current form fields as JSON-serializable list") | |
| current_title: str = Field(default="", description="Current form title") | |
| conversation_context: Optional[List[str]] = Field(default=None, description="Recent chat messages for context") | |
| class RefineDiffChange(BaseModel): | |
| """Partial update for an existing field (only include keys that changed).""" | |
| id: str | |
| label: Optional[str] = None | |
| required: Optional[bool] = None | |
| placeholder: Optional[str] = None | |
| description: Optional[str] = None | |
| options: Optional[List[Dict[str, Any]]] = None | |
| settings: Optional[Dict[str, Any]] = None | |
| validation: Optional[Dict[str, Any]] = None | |
| conditionalLogic: Optional[Dict[str, Any]] = None | |
| class RefineDiffAddition(BaseModel): | |
| """New field to add (must have id, type, label, required).""" | |
| id: str | |
| type: str | |
| label: str | |
| required: bool = False | |
| placeholder: Optional[str] = None | |
| description: Optional[str] = None | |
| options: Optional[List[Dict[str, Any]]] = None | |
| settings: Optional[Dict[str, Any]] = None | |
| validation: Optional[Dict[str, Any]] = None | |
| class RefineDiff(BaseModel): | |
| """Diff returned by refine: changes, additions, removals.""" | |
| changes: List[Dict[str, Any]] = Field(default_factory=list) | |
| additions: List[Dict[str, Any]] = Field(default_factory=list) | |
| removals: List[str] = Field(default_factory=list) | |
| class GenerateFormResponse(BaseModel): | |
| """Response from generate-form: form JSON and metadata.""" | |
| formJSON: Dict[str, Any] = Field(description="Form with title, description?, fields") | |
| metadata: Dict[str, Any] = Field(default_factory=dict) | |
| warnings: Optional[List[str]] = None | |
| class RefineFormResponse(BaseModel): | |
| """Response from refine-form: diff only.""" | |
| diff: RefineDiff = Field(description="Changes, additions, removals") | |
| class PlanFormQuestionOption(BaseModel): | |
| """Single option for a select/radio clarification question.""" | |
| value: str = Field(description="Option value") | |
| label: str = Field(description="Display label") | |
| class PlanFormQuestion(BaseModel): | |
| """One clarifying question to show before generate/refine.""" | |
| id: str = Field(description="Unique id for the question") | |
| label: str = Field(description="Question text") | |
| type: str = Field(default="single", description="single | multi | text") | |
| options: Optional[List[PlanFormQuestionOption]] = Field(default=None) | |
| required: bool = Field(default=True) | |
| class PlanFormRequest(BaseModel): | |
| """Request for plan-form-request (clarification planning).""" | |
| description: str = Field(description="User description of the form they want") | |
| current_fields: Optional[List[Dict[str, Any]]] = Field(default=None) | |
| current_title: Optional[str] = Field(default="") | |
| class PlanFormResponse(BaseModel): | |
| """Response from plan-form-request.""" | |
| should_ask_questions: bool = Field(description="Whether to show clarifying questions") | |
| questions: List[PlanFormQuestion] = Field(default_factory=list) | |
| reasoning_summary: str = Field(default="", description="Short summary for UI status") | |