use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EvalQuery {
pub id: String,
pub query: String,
pub category: QueryCategory,
#[serde(default)]
pub tags: Vec<QueryTag>,
pub language: Option<String>,
pub primary_answer: GroundTruth,
#[serde(default)]
pub acceptable_answers: Vec<GroundTruth>,
#[serde(default)]
pub negative_examples: Vec<GroundTruth>,
pub split: Split,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GroundTruth {
pub name: String,
pub file: String,
#[serde(default)]
pub line_start: Option<u32>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum QueryCategory {
IdentifierLookup,
BehavioralSearch,
ConceptualSearch,
TypeFiltered,
CrossLanguage,
StructuralSearch,
Negation,
MultiStep,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum QueryTag {
CrossFile,
RecentAdd,
NoiseTolerant,
SynonymHeavy,
Acronym,
CaseSensitive,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Split {
Train,
HeldOut,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EvalQuerySet {
pub version: String,
pub created: String,
pub description: String,
pub queries: Vec<EvalQuery>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryResult {
pub run_id: String,
pub query_id: String,
pub config_id: String,
pub rank_of_correct: Option<u32>,
pub reciprocal_rank: f64,
pub top_1_correct: bool,
pub top_5_correct: bool,
pub top_5_acceptable: bool,
pub top_1_score: f64,
pub top_2_score: f64,
pub retrieval_ms: f64,
pub rerank_ms: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AggregateMetrics {
pub config_id: String,
pub n: usize,
pub r_at_1: MetricWithCI,
pub r_at_5: MetricWithCI,
pub r_at_5_acceptable: MetricWithCI,
pub mrr: MetricWithCI,
#[serde(default)]
pub per_category: Vec<CategoryMetrics>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MetricWithCI {
pub value: f64,
pub ci_lower: f64,
pub ci_upper: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CategoryMetrics {
pub category: QueryCategory,
pub n: usize,
pub r_at_1: MetricWithCI,
pub mrr: MetricWithCI,
}