68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
"""
|
|
Response contracts, enums, and data models (Rules 102, 103, 104, 105, 116):
|
|
- ResponseType Enum
|
|
- QuestionIntent Enum
|
|
- ResponseContext Input Contract
|
|
- ResponseResult Output Contract
|
|
- FactConfidence Model
|
|
"""
|
|
|
|
from enum import Enum
|
|
from typing import Optional, List, Dict, Any
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class ResponseType(str, Enum):
|
|
GREETING = "greeting"
|
|
ACKNOWLEDGEMENT = "acknowledgement"
|
|
FOLLOW_UP = "follow_up"
|
|
CLARIFICATION = "clarification"
|
|
REFUSAL = "refusal"
|
|
UNKNOWN = "unknown"
|
|
SAFETY = "safety"
|
|
CRISIS = "crisis"
|
|
COMPLETION = "completion"
|
|
|
|
|
|
class QuestionIntent(str, Enum):
|
|
SYMPTOM_NAME = "symptom_name"
|
|
SYMPTOM_DURATION = "symptom_duration"
|
|
SYMPTOM_SEVERITY = "symptom_severity"
|
|
SYMPTOM_LOCATION = "symptom_location"
|
|
SYMPTOM_ONSET = "symptom_onset"
|
|
SYMPTOM_FREQUENCY = "symptom_frequency"
|
|
SYMPTOM_TRIGGER = "symptom_trigger"
|
|
ASSOCIATED_SYMPTOMS = "associated_symptoms"
|
|
|
|
MEDICAL_HISTORY = "medical_history"
|
|
MEDICATIONS = "medications"
|
|
ALLERGIES = "allergies"
|
|
FAMILY_HISTORY = "family_history"
|
|
SURGICAL_HISTORY = "surgical_history"
|
|
|
|
|
|
class ResponseContext(BaseModel):
|
|
language: str = "en"
|
|
patient_message: str
|
|
intent: str = "fact_extraction"
|
|
primary_symptom: Optional[str] = None
|
|
missing_information: Optional[str] = None
|
|
selected_question: Optional[str] = None
|
|
question_intent: Optional[QuestionIntent] = None
|
|
safety_status: str = "normal"
|
|
onboarding_completed: bool = False
|
|
current_state: Optional[Dict[str, Any]] = None
|
|
|
|
|
|
class ResponseResult(BaseModel):
|
|
response: str
|
|
language: str = "en"
|
|
question_intent: Optional[str] = None
|
|
response_type: ResponseType = ResponseType.FOLLOW_UP
|
|
|
|
|
|
class FactConfidence(BaseModel):
|
|
source: str = "patient"
|
|
method: str = "explicit"
|
|
confidence: float = 1.0
|