Spaces:
Runtime error
Runtime error
| """Pydantic domain types for the Chief Engineer. | |
| Adapted from microfactory-lab `core/src/types.ts` — stripped of routing, | |
| economic, energy, and tick concepts (over-scope per pattern-review.md §7). | |
| Only what the compounding-knowledge loop needs. | |
| """ | |
| from __future__ import annotations | |
| from pydantic import BaseModel, Field | |
| MATERIALS = ["PLA", "PETG", "ABS", "TPU"] | |
| # geometry_type doubles as a retrieval key (pattern-review.md §3/§9) | |
| GEOMETRY_TYPES = ["overhang", "bridge", "stringing", "adhesion", "vase"] | |
| OUTCOMES = ["success", "failed_sag", "failed_stringing"] | |
| # where the part sits on the heated bed — drives edge-cooling warp + adhesion risk | |
| BED_POSITIONS = ["center", "edge", "corner"] | |
| class Job(BaseModel): | |
| geometry_type: str | |
| material: str | |
| description: str = "" | |
| mesh_path: str | None = None | |
| bed_position: str = "center" # center|edge|corner — affects warp/adhesion | |
| class Environment(BaseModel): | |
| temp: float = Field(description="Ambient temperature °C") | |
| humidity: float = Field(description="Ambient humidity %") | |
| printer: str = "Creality Ender 3 V2" # simulated machine (220×220×250 bed) | |
| class PrintSettings(BaseModel): | |
| nozzle_temp: float | |
| bed_temp: float | |
| retraction_mm: float | |
| fan_pct: float | |
| first_layer_fan_pct: float | |
| layer_height: float = 0.2 # mm — drives virtual-print preview cross-sections | |
| class RiskRegion(BaseModel): | |
| location: str # human description, e.g. "underside of the overhang" | |
| risk: str # "sag" | "stringing" | "adhesion" | "warping" | ... | |
| why: str # one-line rationale | |
| anchor_hint: str | None = None # optional geometry hint for the 3D annotation | |
| class Advice(BaseModel): | |
| """The Chief Engineer's structured proposal (the LLM's output).""" | |
| reasoning: str # the EVALUATION of precedent — the load-bearing text | |
| settings: PrintSettings | |
| risks: list[RiskRegion] = [] | |
| class LessonEntry(BaseModel): | |
| """Append-only ledger record. Schema is locked (02-ARCHITECTURE.md).""" | |
| job_id: str | |
| material: str | |
| geometry_type: str | |
| env_temp: float | |
| env_humidity: float | |
| outcome: str | |
| lesson: str | |
| source: str = "earned" # "seed" | "earned" | |
| timestamp: str | |