Skip to main content

systemprompt_evaluation/
extension.rs

1//! Extension registration — wires the evaluation schemas (runs, cases,
2//! results, pairs, judge calls, rubrics) and their reconcile migrations into
3//! the extension framework.
4//!
5//! Copyright (c) systemprompt.io — Business Source License 1.1.
6//! See <https://systemprompt.io> for licensing details.
7
8use systemprompt_extension::prelude::*;
9
10#[derive(Debug, Clone, Copy, Default)]
11pub struct EvaluationExtension;
12
13impl Extension for EvaluationExtension {
14    fn metadata(&self) -> ExtensionMetadata {
15        ExtensionMetadata {
16            id: "evaluation",
17            name: "Evaluation",
18            version: env!("CARGO_PKG_VERSION"),
19        }
20    }
21
22    fn schemas(&self) -> Vec<SchemaDefinition> {
23        vec![
24            SchemaDefinition::new("eval_runs", include_str!("../schema/eval_runs.sql"))
25                .with_required_columns(vec!["id".into(), "kind".into(), "status".into()]),
26            SchemaDefinition::new("eval_cases", include_str!("../schema/eval_cases.sql"))
27                .with_required_columns(vec!["id".into(), "name".into(), "prompt_body".into()]),
28            SchemaDefinition::new("eval_results", include_str!("../schema/eval_results.sql"))
29                .with_required_columns(vec!["id".into(), "run_id".into(), "verdict".into()]),
30            SchemaDefinition::new("eval_pairs", include_str!("../schema/eval_pairs.sql"))
31                .with_required_columns(vec!["id".into(), "run_id".into(), "winner".into()]),
32            SchemaDefinition::new(
33                "eval_judge_calls",
34                include_str!("../schema/eval_judge_calls.sql"),
35            )
36            .with_required_columns(vec!["conversation_id".into()]),
37            SchemaDefinition::new("eval_rubrics", include_str!("../schema/eval_rubrics.sql"))
38                .with_required_columns(vec!["id".into(), "name".into()]),
39        ]
40    }
41
42    fn dependencies(&self) -> Vec<&'static str> {
43        vec!["ai"]
44    }
45
46    fn migrations(&self) -> Vec<Migration> {
47        extension_migrations!()
48    }
49}
50
51register_extension!(EvaluationExtension);