medilang-tech / app /schemas.py
Dama03's picture
first push of the AI
411a994
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"]