feat(stage10): implement vision integration
This commit is contained in:
@@ -471,4 +471,134 @@ class EvidenceScoreRelationModel(Base):
|
||||
__table_args__ = (
|
||||
Index("ix_evidence_score_relations_score_id", "score_id"),
|
||||
Index("ix_evidence_score_relations_related_claim_id", "related_claim_id"),
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Stage 10 — Vision Evidence Extraction
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class VisionCaptureType(str, enum.Enum):
|
||||
"""Klassifikation der visuellen Erfassung (Stage 10)."""
|
||||
|
||||
RAW_IMAGE = "raw_image"
|
||||
DIAGRAM = "diagram"
|
||||
CHART = "chart"
|
||||
SCREENSHOT = "screenshot"
|
||||
INFOGRAPHIC = "infographic"
|
||||
PDF_LAYOUT = "pdf_layout"
|
||||
|
||||
|
||||
class VisionEvidenceLevel(str, enum.Enum):
|
||||
"""Evidenz-Level einer visuellen Evidenz (Stage 10)."""
|
||||
|
||||
HIGH = "high"
|
||||
MEDIUM = "medium"
|
||||
LOW = "low"
|
||||
UNCERTAIN = "uncertain"
|
||||
|
||||
|
||||
class VisionEntityType(str, enum.Enum):
|
||||
"""Kategorie einer erkannten Entity aus einem Bild (Stage 10)."""
|
||||
|
||||
DATE = "date"
|
||||
PERSON = "person"
|
||||
ORGANIZATION = "organization"
|
||||
LOCATION = "location"
|
||||
NUMBER = "number"
|
||||
STATISTIC = "statistic"
|
||||
GRAPH_ELEMENT = "graph_element"
|
||||
|
||||
|
||||
class VisionEvidenceModel(Base):
|
||||
"""Einzelne visuell extrahierte Evidenz (Stage 10).
|
||||
|
||||
Felder:
|
||||
uuid: Primärschlüssel (UUID)
|
||||
research_run_id: Research-Run-Zuordnung
|
||||
source_id: Quelle, von der das Bild stammt
|
||||
capture_type: Art der visuellen Erfassung
|
||||
extracted_text: Vom Vision-Modell extrahierter Text
|
||||
image_data_url: Data-URL oder base64-codiertes Bild (optional)
|
||||
entities: JSON mit erkannten Entities
|
||||
confidence: Confidence 0.0–1.0
|
||||
confidence_label: Confidence als Label (HIGH/MEDIUM/LOW/UNCERTAIN)
|
||||
evidence_level: Evidenz-Level (HIGH/MEDIUM/LOW/UNCERTAIN)
|
||||
created_at / updated_at: Zeitstempel
|
||||
"""
|
||||
|
||||
__tablename__ = "vision_evidence"
|
||||
|
||||
id = Column(String(36), primary_key=True, default=lambda: str(uuid4()))
|
||||
research_run_id = Column(String(36), nullable=False)
|
||||
source_id = Column(String(36), ForeignKey("sources.id"), nullable=False)
|
||||
|
||||
capture_type = Column(Enum(VisionCaptureType), nullable=False)
|
||||
|
||||
extracted_text = Column(Text, nullable=False)
|
||||
image_data_url = Column(Text, nullable=True)
|
||||
entities = Column(JSON, nullable=False, default=dict)
|
||||
|
||||
confidence = Column(Float, nullable=False, default=0.5)
|
||||
confidence_label = Column(String(16), nullable=False, default="medium")
|
||||
evidence_level = Column(Enum(VisionEvidenceLevel), nullable=False, default=VisionEvidenceLevel.MEDIUM)
|
||||
|
||||
created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
|
||||
updated_at = Column(DateTime, nullable=False, default=datetime.utcnow)
|
||||
|
||||
# Relationships
|
||||
source = relationship("SourceModel")
|
||||
|
||||
__table_args__ = (
|
||||
Index("ix_vision_evidence_research_run_id", "research_run_id"),
|
||||
Index("ix_vision_evidence_capture_type", "capture_type"),
|
||||
Index("ix_vision_evidence_source_id", "source_id"),
|
||||
)
|
||||
|
||||
|
||||
class VisionEntityModel(Base):
|
||||
"""Erkannte Entity aus einem visuellen Bild (Stage 10).
|
||||
|
||||
Felder:
|
||||
uuid: Primärschlüssel (UUID)
|
||||
evidence_id: FK zur VisionEvidence
|
||||
entity_type: Kategorie der Entity
|
||||
entity_value: Der erkannte Wert
|
||||
context: Kontextbeschreibung
|
||||
confidence: Confidence 0.0–1.0
|
||||
created_at: Zeitstempel
|
||||
"""
|
||||
|
||||
__tablename__ = "vision_entities"
|
||||
|
||||
id = Column(String(36), primary_key=True, default=lambda: str(uuid4()))
|
||||
evidence_id = Column(
|
||||
String(36),
|
||||
ForeignKey("vision_evidence.id"),
|
||||
nullable=False,
|
||||
)
|
||||
|
||||
entity_type = Column(Enum(VisionEntityType), nullable=False)
|
||||
entity_value = Column(Text, nullable=False)
|
||||
context = Column(Text, nullable=True)
|
||||
confidence = Column(Float, nullable=False, default=0.5)
|
||||
|
||||
created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
|
||||
|
||||
# Relationships
|
||||
evidence = relationship("VisionEvidenceModel", back_populates="entities")
|
||||
|
||||
__table_args__ = (
|
||||
Index("ix_vision_entities_evidence_id", "evidence_id"),
|
||||
Index("ix_vision_entities_entity_type", "entity_type"),
|
||||
)
|
||||
|
||||
|
||||
# Back-populate the backref for VisionEntityModel
|
||||
VisionEvidenceModel.entities = relationship(
|
||||
"VisionEntityModel",
|
||||
back_populates="evidence",
|
||||
cascade="all, delete-orphan",
|
||||
foreign_keys="VisionEntityModel.evidence_id",
|
||||
)
|
||||
Reference in New Issue
Block a user