PMFlow/backend/app/services/ai_pmo/semantic_context/packet_schema.py

68 lines
1.7 KiB
Python

from __future__ import annotations
from typing import Any, Optional
from pydantic import BaseModel, ConfigDict, Field
from .decision_schema import ModeCard
class SemanticContextTurn(BaseModel):
model_config = ConfigDict(extra="ignore")
role: str
text: str
class SemanticContextThread(BaseModel):
model_config = ConfigDict(extra="ignore")
thread_key: Optional[str] = None
conversation_scope_key: Optional[str] = None
thread_summary: Optional[str] = None
recent_turns: list[SemanticContextTurn] = Field(default_factory=list)
open_questions: list[str] = Field(default_factory=list)
class SemanticContextTopic(BaseModel):
model_config = ConfigDict(extra="ignore")
topic_workspace_id: int
topic_key: str
source_system: str
channel_ref: Optional[str] = None
conversation_scope_key: Optional[str] = None
thread_key: Optional[str] = None
mode: str
status: str
plan_status: Optional[str] = None
facts: Optional[Any] = None
goals: Optional[Any] = None
constraints: Optional[Any] = None
metadata: Optional[Any] = None
class SemanticContextDraftSnapshot(BaseModel):
model_config = ConfigDict(extra="ignore")
draft_workspace_id: int
state: str
draft_version: int
requirement_card: Optional[Any] = None
draft_payload: Optional[Any] = None
required_confirmations: list[str] = Field(default_factory=list)
class SemanticContextPacket(BaseModel):
model_config = ConfigDict(extra="ignore")
packet_version: str = "v1"
tenant_id: int
operator_user_id: int
topic_workspace_id: int
latest_user_message: str
topic: SemanticContextTopic
draft: SemanticContextDraftSnapshot | None = None
thread: SemanticContextThread
mode_card: ModeCard