use serde::{Deserialize, Serialize};
use super::query::{SearchResult, default_limit, default_min_score};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "rag", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum SearchStrategy {
Semantic,
Keyword,
GitHistory,
#[cfg(feature = "code-analysis")]
CodeNavigation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "rag", derive(schemars::JsonSchema))]
pub struct EnsembleRequest {
pub query: String,
#[serde(default)]
pub path: Option<String>,
#[serde(default)]
pub project: Option<String>,
#[serde(default = "default_limit")]
pub limit: usize,
#[serde(default = "default_min_score")]
pub min_score: f32,
#[serde(default)]
pub strategies: Vec<SearchStrategy>,
#[serde(default)]
pub file_extensions: Vec<String>,
#[serde(default)]
pub languages: Vec<String>,
#[serde(default)]
pub spectral_rerank: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnsembleResponse {
pub results: Vec<SearchResult>,
pub duration_ms: u64,
pub strategies_used: Vec<String>,
pub per_strategy_counts: std::collections::HashMap<String, usize>,
}