mirror of
https://github.com/arkorty/B.Tech-Project-III.git
synced 2026-04-19 12:41:48 +00:00
58 lines
2.0 KiB
Python
58 lines
2.0 KiB
Python
"""Data models for ThirdEye."""
|
|
from pydantic import BaseModel, Field
|
|
from typing import Optional
|
|
from datetime import datetime
|
|
import uuid
|
|
|
|
|
|
class Signal(BaseModel):
|
|
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
|
|
group_id: str
|
|
lens: str = "unknown" # dev, product, client, community
|
|
type: str # architecture_decision, tech_debt, etc.
|
|
summary: str
|
|
entities: list[str] = []
|
|
severity: str = "low" # low, medium, high, critical
|
|
status: str = "unknown" # proposed, decided, implemented, unresolved
|
|
sentiment: str = "neutral"
|
|
urgency: str = "none"
|
|
raw_quote: str = ""
|
|
source_messages: list[int] = []
|
|
timestamp: str = Field(default_factory=lambda: datetime.utcnow().isoformat())
|
|
keywords: list[str] = []
|
|
|
|
|
|
class Pattern(BaseModel):
|
|
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
|
|
group_id: str
|
|
type: str # frequency_spike, knowledge_silo, recurring_issue, sentiment_trend, stale_item
|
|
description: str
|
|
severity: str = "info" # info, warning, critical
|
|
evidence_signal_ids: list[str] = []
|
|
recommendation: str = ""
|
|
detected_at: str = Field(default_factory=lambda: datetime.utcnow().isoformat())
|
|
is_active: bool = True
|
|
|
|
|
|
class CrossGroupInsight(BaseModel):
|
|
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
|
|
type: str # blocked_handoff, conflicting_decision, information_silo, promise_reality_gap, duplicated_effort
|
|
description: str
|
|
group_a: dict = {} # {name, group_id, evidence}
|
|
group_b: dict = {}
|
|
severity: str = "warning"
|
|
recommendation: str = ""
|
|
detected_at: str = Field(default_factory=lambda: datetime.utcnow().isoformat())
|
|
is_resolved: bool = False
|
|
|
|
|
|
class GroupConfig(BaseModel):
|
|
group_id: str
|
|
group_name: str = ""
|
|
lens_mode: str = "auto" # auto, dev, product, client, community
|
|
detected_lens: str = "unknown"
|
|
confidence: float = 0.0
|
|
is_active: bool = True
|
|
message_count: int = 0
|
|
signal_count: int = 0
|