File size: 1,560 Bytes
cfc8e23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from typing import Any

from pydantic import BaseModel, Field


class DocumentSearchRequest(BaseModel):
    query: str = Field(..., description="Search query")
    top_k: int = Field(
        default=10, ge=1, le=50, description="Number of documents to retrieve"
    )


class RetrievedDocument(BaseModel):
    content: str = Field(..., description="Document content")
    metadata: dict[str, Any] = Field(
        default_factory=dict, description="Document metadata"
    )
    score: float | None = Field(None, description="Relevance score")
    chunk_id: int | None = Field(None, description="Chunk identifier")
    source_file: str | None = Field(None, description="Source filename")


class DocumentSearchResponse(BaseModel):
    query: str
    documents: list[RetrievedDocument]
    total_results: int
    retrieval_method: str = "hybrid"


class AnswerGenerationRequest(BaseModel):
    query: str = Field(..., description="Question to answer")
    top_k: int = Field(
        default=10, ge=1, le=50, description="Number of documents to use for context"
    )
    include_sources: bool = Field(
        default=True, description="Include source documents in response"
    )
    temperature: float = Field(default=0.1, ge=0, le=1, description="LLM temperature")
    max_tokens: int = Field(
        default=1000, ge=100, le=4000, description="Maximum tokens in response"
    )


class AnswerGenerationResponse(BaseModel):
    query: str
    answer: str
    sources: list[RetrievedDocument] | None = None
    retrieval_method: str
    documents_used: int