61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
|
|
"""Dvādaśa head output schemas: claims, risks, structured outputs per head."""
|
|||
|
|
|
|||
|
|
from enum import Enum
|
|||
|
|
|
|||
|
|
from pydantic import BaseModel, Field
|
|||
|
|
|
|||
|
|
from fusionagi.schemas.grounding import Citation
|
|||
|
|
|
|||
|
|
|
|||
|
|
class HeadId(str, Enum):
|
|||
|
|
"""Identifiers for the 11 content heads plus Witness meta-controller."""
|
|||
|
|
|
|||
|
|
LOGIC = "logic"
|
|||
|
|
RESEARCH = "research"
|
|||
|
|
SYSTEMS = "systems"
|
|||
|
|
STRATEGY = "strategy"
|
|||
|
|
PRODUCT = "product"
|
|||
|
|
SECURITY = "security"
|
|||
|
|
SAFETY = "safety"
|
|||
|
|
RELIABILITY = "reliability"
|
|||
|
|
COST = "cost"
|
|||
|
|
DATA = "data"
|
|||
|
|
DEVEX = "devex"
|
|||
|
|
WITNESS = "witness"
|
|||
|
|
|
|||
|
|
|
|||
|
|
class HeadClaim(BaseModel):
|
|||
|
|
"""Atomic statement from a head with confidence and evidence."""
|
|||
|
|
|
|||
|
|
claim_text: str = Field(..., min_length=1, description="The atomic claim statement")
|
|||
|
|
confidence: float = Field(..., ge=0.0, le=1.0, description="Confidence in [0, 1]")
|
|||
|
|
evidence: list[Citation] = Field(default_factory=list, description="Citations, tool results, reasoning steps")
|
|||
|
|
assumptions: list[str] = Field(default_factory=list, description="Assumptions made")
|
|||
|
|
|
|||
|
|
|
|||
|
|
class HeadRisk(BaseModel):
|
|||
|
|
"""Risk or failure mode identified by a head."""
|
|||
|
|
|
|||
|
|
description: str = Field(..., min_length=1, description="Description of the risk")
|
|||
|
|
severity: str = Field(default="medium", description="low, medium, high, critical")
|
|||
|
|
|
|||
|
|
|
|||
|
|
class HeadOutput(BaseModel):
|
|||
|
|
"""Structured output from a Dvādaśa head."""
|
|||
|
|
|
|||
|
|
head_id: HeadId = Field(..., description="Which head produced this")
|
|||
|
|
summary: str = Field(..., min_length=1, description="1–3 sentence summary")
|
|||
|
|
claims: list[HeadClaim] = Field(default_factory=list, description="Atomic claims with confidence")
|
|||
|
|
risks: list[HeadRisk] = Field(default_factory=list, description="Failure modes identified")
|
|||
|
|
questions: list[str] = Field(default_factory=list, description="Only if absolutely necessary")
|
|||
|
|
recommended_actions: list[str] = Field(default_factory=list, description="Suggested next steps")
|
|||
|
|
tone_guidance: str = Field(default="", description="For persona consistency")
|
|||
|
|
|
|||
|
|
|
|||
|
|
__all__ = [
|
|||
|
|
"HeadId",
|
|||
|
|
"HeadClaim",
|
|||
|
|
"HeadRisk",
|
|||
|
|
"HeadOutput",
|
|||
|
|
]
|