File size: 2,266 Bytes
409c17a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""

Presentation Layer - Pydantic Schemas for API

"""
from datetime import datetime
from typing import List, Optional

from pydantic import BaseModel, Field


class QueryRequest(BaseModel):
    """Query request schema"""

    query_text: str = Field(..., min_length=1, max_length=5000, description="User question")
    department: str = Field(..., description="Department context")
    user_id: Optional[str] = Field(None, description="User identifier")
    session_id: Optional[str] = Field(None, description="Session identifier")
    top_k: int = Field(10, ge=1, le=50, description="Number of results to return")
    temperature: float = Field(0.7, ge=0.0, le=1.0, description="LLM temperature")
    max_tokens: int = Field(2048, ge=100, le=4096, description="Max tokens in response")
    filters: dict = Field(default_factory=dict, description="Additional filters")


class SourceSchema(BaseModel):
    """Source citation schema"""

    title: str
    content: str
    relevance_score: float
    document_id: str
    chunk_index: int
    metadata: dict = Field(default_factory=dict)


class QueryResponse(BaseModel):
    """Query response schema"""

    query_id: str
    answer: str
    sources: List[SourceSchema]
    confidence: float
    processing_time_ms: int
    tokens_used: int
    model: str


class DocumentUploadRequest(BaseModel):
    """Document upload request schema"""

    department: str = Field(..., description="Department for the document")
    metadata: dict = Field(default_factory=dict, description="Additional metadata")


class DocumentResponse(BaseModel):
    """Document response schema"""

    id: str
    title: str
    filename: str
    file_type: str
    file_size: int
    department: str
    status: str
    uploaded_at: datetime
    indexed_at: Optional[datetime] = None
    metadata: dict = Field(default_factory=dict)


class HealthResponse(BaseModel):
    """Health check response"""

    status: str
    version: str
    timestamp: datetime
    services: dict = Field(default_factory=dict)


class ErrorResponse(BaseModel):
    """Error response schema"""

    error: str
    detail: Optional[str] = None
    request_id: Optional[str] = None