File size: 1,157 Bytes
b62e029
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9496080
 
b62e029
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# api/schemas/search.py

from typing import Any, Dict, List, Optional

from pydantic import BaseModel, Field


# ---------------------------
# Request
# ---------------------------
class SearchRequest(BaseModel):
    query: str = Field(..., description="Search query")
    top_k: int = Field(default=5, ge=1, le=50)

    # optional
    use_reranking: Optional[bool] = True
    include_llm_context: Optional[bool] = True

# ---------------------------
# Document metadata
# ---------------------------
class DocumentMetadata(BaseModel):
    doc_id: int
    title: str
    lang: str
    url: Optional[str] = None
    date_modified: Optional[str] = None

# ---------------------------
# Result item (LLM-friendly)
# ---------------------------
class SearchResultItem(BaseModel):
    chunk_id: int
    text: str
    score: float = Field(..., description="Reranking score (0.0 to 1.0)")
    metadata: DocumentMetadata
    scoring_details: Optional[Dict[str, Any]] = None     # optional

# ---------------------------
# Response
# ---------------------------
class SearchResponse(BaseModel):
    query: str
    results: List[SearchResultItem]
    latency_ms: int