use serde::{Deserialize, Serialize};
use crate::decimal::Decimal;
use crate::ids::{ArtifactId, CalibrationId, DatasetId};
use crate::limits::DESCRIPTOR_V1;
use crate::schema;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct CalibrationArtifact {
pub schema: String,
pub binding: CalibrationBinding,
pub options: Vec<String>,
pub parameters: CalibrationParameters,
}
crate::document::document!(
CalibrationArtifact,
schema::CALIBRATION,
DESCRIPTOR_V1,
CalibrationId
);
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct CalibrationBinding {
pub artifact: ArtifactId,
pub task: String,
pub question: String,
pub dataset: DatasetId,
pub method: CalibrationMethod,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
pub enum CalibrationMethod {
#[serde(rename = "temperature/1")]
Temperature1,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "snake_case", deny_unknown_fields)]
pub enum CalibrationParameters {
Temperature { temperature: Decimal },
}