Skip to main content

rustev_contract/
calibration.rs

1//! Calibration artifacts, `rustev.calibration/1` (spec 002, 3.6).
2//!
3//! An artifact names the transformation and what it is bound to. Applying it
4//! establishes which transformation was applied, not that the result is
5//! calibrated on current data; that is measured by evaluation over named data.
6
7use serde::{Deserialize, Serialize};
8
9use crate::decimal::Decimal;
10use crate::ids::{ArtifactId, CalibrationId, DatasetId};
11use crate::limits::DESCRIPTOR_V1;
12use crate::schema;
13
14#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
15#[serde(deny_unknown_fields)]
16pub struct CalibrationArtifact {
17    pub schema: String,
18    pub binding: CalibrationBinding,
19    /// The options, in the step's declared order.
20    pub options: Vec<String>,
21    pub parameters: CalibrationParameters,
22}
23
24crate::document::document!(
25    CalibrationArtifact,
26    schema::CALIBRATION,
27    DESCRIPTOR_V1,
28    CalibrationId
29);
30
31/// What the calibration was fitted for.
32#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
33#[serde(deny_unknown_fields)]
34pub struct CalibrationBinding {
35    pub artifact: ArtifactId,
36    pub task: String,
37    /// The step id of the question.
38    pub question: String,
39    pub dataset: DatasetId,
40    pub method: CalibrationMethod,
41}
42
43/// The only method in increment 1.
44#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
45pub enum CalibrationMethod {
46    /// `softmax(z / T)` over logits, or over natural logarithms of masses.
47    #[serde(rename = "temperature/1")]
48    Temperature1,
49}
50
51#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
52#[serde(rename_all = "snake_case", deny_unknown_fields)]
53pub enum CalibrationParameters {
54    /// Temperature in `(0, 1000]`.
55    Temperature { temperature: Decimal },
56}