kbolt-types 0.1.7

Shared request and response types for kbolt
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum SearchMode {
    Auto,
    Deep,
    Keyword,
    Semantic,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SearchRequest {
    pub query: String,
    pub mode: SearchMode,
    pub space: Option<String>,
    pub collections: Vec<String>,
    pub limit: usize,
    pub min_score: f32,
    pub no_rerank: bool,
    pub debug: bool,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SearchResponse {
    pub results: Vec<SearchResult>,
    pub query: String,
    pub requested_mode: SearchMode,
    pub effective_mode: SearchMode,
    pub pipeline: SearchPipeline,
    pub staleness_hint: Option<String>,
    pub elapsed_ms: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
pub struct SearchPipeline {
    pub keyword: bool,
    pub dense: bool,
    pub expansion: bool,
    pub rerank: bool,
    pub notices: Vec<SearchPipelineNotice>,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SearchPipelineNotice {
    pub step: SearchPipelineStep,
    pub reason: SearchPipelineUnavailableReason,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum SearchPipelineStep {
    Dense,
    Rerank,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum SearchPipelineUnavailableReason {
    NotConfigured,
    ModelNotAvailable,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SearchResult {
    pub docid: String,
    pub path: String,
    pub title: String,
    pub space: String,
    pub collection: String,
    pub heading: Option<String>,
    pub text: String,
    pub score: f32,
    pub signals: Option<SearchSignals>,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SearchSignals {
    pub bm25: Option<f32>,
    pub dense: Option<f32>,
    pub fusion: f32,
    pub reranker: Option<f32>,
}