File size: 2,433 Bytes
411a994
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
from pydantic import BaseModel, EmailStr, Field
from typing import Optional, Literal, List
from datetime import datetime


class UserCreate(BaseModel):
    email: Optional[EmailStr] = None
    password: Optional[str] = None
    preferred_language: str = Field(default="fr")


class UserOut(BaseModel):
    id: str  # Supabase auth user UUID
    preferred_language: str
    email: Optional[EmailStr] = None
    created_at: datetime

    class Config:
        from_attributes = True


class Token(BaseModel):
    access_token: str
    token_type: str = "bearer"


class ConversationCreate(BaseModel):
    user_id: Optional[str] = None
    context: Optional[str] = ""


class ConversationOut(BaseModel):
    id: int
    user_id: Optional[str]
    started_at: datetime
    context: str

    class Config:
        from_attributes = True


class MessageCreate(BaseModel):
    conversation_id: int
    message_type: Literal["text", "audio", "image"] = "text"
    content: str
    role: Literal["user", "assistant"] = "user"


class MessageOut(BaseModel):
    id: int
    conversation_id: int
    message_type: str
    content: str
    role: str
    timestamp: datetime

    class Config:
        from_attributes = True


class ChatRequest(BaseModel):
    conversation_id: Optional[int] = None
    text: str
    language: str = "fr"


class ChatResponse(BaseModel):
    reply: str
    conversation_id: int


class TranscribeRequest(BaseModel):
    audio_url: Optional[str] = None
    language: Optional[str] = None


class TranscribeResponse(BaseModel):
    text: str


class AnalyzeImageRequest(BaseModel):
    image_url: str
    prompt: Optional[str] = None


class AnalyzeImageResponse(BaseModel):
    result: str


class TranslateRequest(BaseModel):
    text: str
    target_language: str


class TranslateResponse(BaseModel):
    text: str


# Unified chat endpoint models
class UnifiedChatRequest(BaseModel):
    message: str
    message_type: Literal["text", "audio", "image"] = "text"
    user_id: Optional[str] = None
    language: Optional[str] = None
    history: Optional[List[str]] = None


class UnifiedContext(BaseModel):
    similar_cases_found: int
    most_probable_diagnosis: Optional[str] = None
    confidence_level: Literal["high", "medium", "low"]
    advice: str


class UnifiedChatResponse(BaseModel):
    response: str
    context: UnifiedContext
    suggested_actions: List[str]
    language: Literal["fr", "en"]