Spaces:
Running
Running
| """Schemas for daily work input and tech-stack inference.""" | |
| from datetime import date | |
| from typing import List, Literal, Optional | |
| from pydantic import BaseModel, Field | |
| class DailyWorkInput(BaseModel): | |
| """User free-form input describing work performed.""" | |
| raw_text: str = Field( | |
| ..., | |
| min_length=3, | |
| max_length=4000, | |
| description="Casual statement by the user (RU/EN), e.g. 'Залита плита перекрытия А-В/1-3'", | |
| ) | |
| date_from: date | |
| date_to: date | |
| axes: Optional[str] = Field( | |
| default=None, | |
| max_length=200, | |
| description="Grid axes mentioned, e.g. 'А-В / 1-3'", | |
| ) | |
| project_id: Optional[str] = Field( | |
| default=None, | |
| max_length=64, | |
| description="Optional project_uuid — wires inference_history rows", | |
| ) | |
| class TechStep(BaseModel): | |
| """One inferred engineering step in the synthesized tech-stack.""" | |
| order: int = Field(..., ge=1) | |
| title: str = Field(..., description="Short RU title") | |
| description: str = Field(..., description="Detailed description") | |
| duration_hours: Optional[float] = None | |
| required_acts: List[str] = Field( | |
| default_factory=list, | |
| description="Names of Belarusian acts (TKP SNiP) required after this step", | |
| ) | |
| dependencies: List[int] = Field( | |
| default_factory=list, | |
| description="Step orders that must be completed before this one", | |
| ) | |
| weather_sensitive: bool = False | |
| class TechStackPayload(BaseModel): | |
| """Strict schema the LLM must fill — no service-side metadata fields.""" | |
| inferred_summary: str = Field(..., description="Chief-engineer summary in Russian") | |
| steps: List[TechStep] | |
| required_documents: List[str] = Field( | |
| default_factory=list, | |
| description="List of Belarusian document/act types triggered", | |
| ) | |
| missing_info_prompts: List[str] = Field( | |
| default_factory=list, | |
| description="Checklist prompts where critical data is missing", | |
| ) | |
| class TechStack(TechStackPayload): | |
| """Full inferred tech-stack with envelope metadata added by the service.""" | |
| source_input: str | |
| model_used: str | |
| generated_at: str | |
| class InferredWorkResponse(BaseModel): | |
| """Top-level response returned to the frontend.""" | |
| tech_stack: TechStack | |
| request_id: str | |
| class DocumentRequest(BaseModel): | |
| template_name: Literal[ | |
| "act_hidden_works", | |
| "act_osmotr_responsibility", | |
| "general_work_log", | |
| "material_certificate", | |
| ] | |
| project_id: str | |
| context: dict = Field(default_factory=dict) | |
| output_format: Literal["docx"] = "docx" | |