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}