File size: 1,575 Bytes
c895815
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c61c167
 
c895815
 
 
 
 
c61c167
c895815
 
 
 
 
 
 
 
a708b2e
c895815
 
 
 
 
 
 
 
 
 
 
c61c167
7f9a28e
 
 
 
 
 
 
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
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