File size: 4,650 Bytes
2a8faae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
"""
API Models and Schemas for Medical RAG AI Advisor
"""
from pydantic import BaseModel, Field
from typing import Optional, List, Dict, Any
from enum import Enum


class QueryType(str, Enum):
    """Types of medical queries supported"""
    GENERAL = "general"
    DRUG_INTERACTION = "drug_interaction"
    SIDE_EFFECTS = "side_effects"
    GUIDELINES = "guidelines"
    COMPARISON = "comparison"


class QueryRequest(BaseModel):
    """Request model for medical queries"""
    query: str = Field(..., description="Medical question or query", min_length=1)
    query_type: Optional[QueryType] = Field(None, description="Type of medical query")
    context: Optional[str] = Field(None, description="Additional context for the query")
    patient_info: Optional[Dict[str, Any]] = Field(None, description="Patient information if relevant")


class QueryResponse(BaseModel):
    """Response model for medical queries"""
    response: str = Field(..., description="AI-generated medical response")
    sources: Optional[List[str]] = Field(None, description="Sources used for the response")
    confidence: Optional[float] = Field(None, description="Confidence score of the response")
    query_type: Optional[QueryType] = Field(None, description="Detected or specified query type")
    processing_time: Optional[float] = Field(None, description="Time taken to process the query")


class StreamChunk(BaseModel):
    """Model for streaming response chunks"""
    chunk: str = Field(..., description="Chunk of the streaming response")
    is_final: bool = Field(False, description="Whether this is the final chunk")


class SideEffectReport(BaseModel):
    """Model for side effect reporting"""
    drug_name: str = Field(..., description="Name of the drug")
    side_effects: str = Field(..., description="Reported side effects")
    patient_age: Optional[int] = Field(None, description="Patient age")
    patient_gender: Optional[str] = Field(None, description="Patient gender")
    dosage: Optional[str] = Field(None, description="Drug dosage")
    duration: Optional[str] = Field(None, description="Duration of treatment")
    severity: Optional[str] = Field(None, description="Severity of side effects")
    outcome: Optional[str] = Field(None, description="Outcome of the side effects")
    additional_details: Optional[str] = Field(None, description="Additional clinical details")


class SideEffectResponse(BaseModel):
    """Response model for side effect reporting"""
    report_id: str = Field(..., description="Unique identifier for the report")
    status: str = Field(..., description="Status of the report submission")
    message: str = Field(..., description="Confirmation message")
    recommendations: Optional[List[str]] = Field(None, description="Clinical recommendations")


class ComparisonRequest(BaseModel):
    """Request model for provider/treatment comparisons"""
    providers: List[str] = Field(..., description="List of providers to compare", min_items=2)
    criteria: Optional[List[str]] = Field(None, description="Specific criteria for comparison")


class ComparisonResponse(BaseModel):
    """Response model for provider/treatment comparisons"""
    comparison: str = Field(..., description="Detailed comparison analysis")
    summary: Dict[str, Any] = Field(..., description="Summary of key differences")
    recommendations: Optional[str] = Field(None, description="Recommendations based on comparison")


class InitializationStatus(BaseModel):
    """Initialization status response model"""
    is_complete: bool = Field(..., description="Whether initialization is complete")
    status_message: str = Field(..., description="Current initialization status")
    is_successful: bool = Field(..., description="Whether initialization was successful")
    error: Optional[str] = Field(None, description="Initialization error if any")


class HealthStatus(BaseModel):
    """Health check response model"""
    status: str = Field(..., description="API health status")
    version: str = Field(..., description="API version")
    timestamp: str = Field(..., description="Current timestamp")
    components: Dict[str, str] = Field(..., description="Status of system components")
    initialization: Optional[InitializationStatus] = Field(None, description="Background initialization status")


class ErrorResponse(BaseModel):
    """Error response model"""
    error: str = Field(..., description="Error type")
    message: str = Field(..., description="Error message")
    details: Optional[Dict[str, Any]] = Field(None, description="Additional error details")
    timestamp: str = Field(..., description="Error timestamp")