from enum import Enum from typing import List, Optional from pydantic import BaseModel, Field class CodeTaskType(str, Enum): GENERATE = "generate" FIX = "fix" EXPLAIN = "explain" REFACTOR = "refactor" REVIEW = "review" UNKNOWN = "unknown" class SourceType(str, Enum): STACKOVERFLOW = "stackoverflow" GITHUB = "github" MODEL = "model" class RetrievedEvidence(BaseModel): source_type: SourceType title: str = Field(..., min_length=1) snippet: str = Field(..., min_length=1) url: Optional[str] = None score: Optional[float] = None class ResponseMeta(BaseModel): used_model: str = Field(..., min_length=1) fallback_used: bool = False retrieval_used: bool = False source_count: int = 0 processing_time_ms: Optional[int] = None class CodeXRequest(BaseModel): message: str = Field(..., min_length=1) session_id: Optional[str] = None mode: Optional[CodeTaskType] = None language: Optional[str] = None code: Optional[str] = None error_message: Optional[str] = None framework: Optional[str] = None file_name: Optional[str] = None previous_context: Optional[str] = None use_retrieval: bool = True class CodeXResponse(BaseModel): answer: str = Field(..., min_length=1) task_type: CodeTaskType code_output: Optional[str] = None explanation: Optional[str] = None warnings: List[str] = Field(default_factory=list) sources: List[RetrievedEvidence] = Field(default_factory=list) needs_clarification: bool = False meta: ResponseMeta