Skip to main content

kbolt_types/
search.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
4pub enum SearchMode {
5    Auto,
6    Deep,
7    Keyword,
8    Semantic,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
12pub struct SearchRequest {
13    pub query: String,
14    pub mode: SearchMode,
15    pub space: Option<String>,
16    pub collections: Vec<String>,
17    pub limit: usize,
18    pub min_score: f32,
19    pub no_rerank: bool,
20    pub debug: bool,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
24pub struct SearchResponse {
25    pub results: Vec<SearchResult>,
26    pub query: String,
27    pub requested_mode: SearchMode,
28    pub effective_mode: SearchMode,
29    pub pipeline: SearchPipeline,
30    pub staleness_hint: Option<String>,
31    pub elapsed_ms: u64,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
35pub struct SearchPipeline {
36    pub keyword: bool,
37    pub dense: bool,
38    pub expansion: bool,
39    pub rerank: bool,
40    pub notices: Vec<SearchPipelineNotice>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
44pub struct SearchPipelineNotice {
45    pub step: SearchPipelineStep,
46    pub reason: SearchPipelineUnavailableReason,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
50#[serde(rename_all = "snake_case")]
51pub enum SearchPipelineStep {
52    Dense,
53    Rerank,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
57#[serde(rename_all = "snake_case")]
58pub enum SearchPipelineUnavailableReason {
59    NotConfigured,
60    ModelNotAvailable,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
64pub struct SearchResult {
65    pub docid: String,
66    pub path: String,
67    pub title: String,
68    pub space: String,
69    pub collection: String,
70    pub heading: Option<String>,
71    pub text: String,
72    pub score: f32,
73    pub signals: Option<SearchSignals>,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
77pub struct SearchSignals {
78    pub bm25: Option<f32>,
79    pub dense: Option<f32>,
80    pub fusion: f32,
81    pub reranker: Option<f32>,
82}