File size: 2,364 Bytes
1367957
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from pydantic import BaseModel, Field
from typing import Optional, Dict, Any, List
from datetime import datetime


class ChatRequest(BaseModel):
    """Chat request schema"""
    message: str = Field(..., min_length=1, max_length=1000)
    session_id: str = Field(default="default")
    domain: Optional[str] = Field(default="general_medical")
    enable_reasoning: bool = Field(default=True)
    use_real_time: bool = Field(default=True)
    max_papers: int = Field(default=15, ge=1, le=50)

    class Config:
        json_schema_extra = {
            "example": {
                "message": "Compare deep learning vs traditional ML in medical imaging",
                "session_id": "user_123",
                "domain": "medical_imaging",
                "enable_reasoning": True,
                "use_real_time": True,
                "max_papers": 15
            }
        }


class ChatResponse(BaseModel):
    """Chat response schema"""
    success: bool
    message: str
    session_id: str
    processing_time: Optional[float] = None
    confidence_score: Optional[float] = None
    papers_used: Optional[int] = None
    reasoning_used: Optional[bool] = None
    error: Optional[str] = None
    raw_response: Optional[Dict[str, Any]] = None

    class Config:
        json_schema_extra = {
            "example": {
                "success": True,
                "message": "Here's the comparison...",
                "session_id": "user_123",
                "processing_time": 23.86,
                "confidence_score": 86.7,
                "papers_used": 13,
                "reasoning_used": True
            }
        }


class SessionCreate(BaseModel):
    """Session creation schema"""
    user_id: Optional[str] = None
    initial_domain: Optional[str] = "general_medical"


class DomainInfo(BaseModel):
    """Domain information"""
    id: str
    name: str
    icon: str
    description: Optional[str] = None


class WebSocketMessage(BaseModel):
    """WebSocket message schema"""
    type: str  # "message", "typing", "error", "init_session"
    message: Optional[str] = None
    session_id: Optional[str] = None
    domain: Optional[str] = None
    enable_reasoning: Optional[bool] = None
    use_real_time: Optional[bool] = None
    max_papers: Optional[int] = None