| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- from __future__ import annotations
- from datetime import datetime
- from typing import List, Optional
- from uuid import uuid4
- from pydantic import BaseModel, Field
- def generate_id() -> str:
- """Generate deterministic-looking ids for templates and categories."""
- return uuid4().hex
- class VariableDefinition(BaseModel):
- """Schema describing each dynamic input value for a template."""
- name: str = Field(..., description="变量唯一名称,用于在模板中引用")
- label: str = Field(..., description="变量可视化展示名称")
- description: Optional[str] = Field(None, description="变量说明提示")
- data_type: str = Field(
- "string",
- description="变量类型, 例如 string/number/boolean/options",
- )
- required: bool = Field(False, description="是否为必填字段")
- default: Optional[str] = Field(None, description="默认值")
- class TemplateBase(BaseModel):
- name: str
- category: str
- description: Optional[str] = None
- output_description: Optional[str] = None
- call_method: Optional[str] = None
- input_variables: List[VariableDefinition] = Field(default_factory=list)
- template_body: str = Field(..., description="Jinja2 模板正文")
- class TemplateCreate(TemplateBase):
- pass
- class TemplateUpdate(BaseModel):
- name: Optional[str] = None
- category: Optional[str] = None
- description: Optional[str] = None
- output_description: Optional[str] = None
- call_method: Optional[str] = None
- input_variables: Optional[List[VariableDefinition]] = None
- template_body: Optional[str] = None
- class TemplateRecord(TemplateBase):
- id: str = Field(default_factory=generate_id)
- created_at: datetime = Field(default_factory=datetime.utcnow)
- updated_at: datetime = Field(default_factory=datetime.utcnow)
- class TemplateRenderRequest(BaseModel):
- template_id: str
- parameters: dict
- class TemplatePreviewRequest(BaseModel):
- template_body: str
- parameters: dict = Field(default_factory=dict)
- class TemplateRenderResponse(BaseModel):
- rendered_text: str
|