use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use serde_json::Value as Json;
use crate::types::{Acceleration, Device};
#[derive(Debug, Clone, Default, Deserialize)]
pub struct SystemOneCreateParams {
pub model: String,
pub state: Json,
pub questions: IndexMap<String, Question>,
#[serde(skip)]
pub acceleration: Option<Acceleration>,
#[serde(skip)]
pub devices: Option<Vec<Device>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "lowercase")]
pub enum Question {
Noul {
instructions: Json,
#[serde(default, skip_serializing_if = "Option::is_none")]
criteria: Option<NoulCriteria>,
},
Choice {
instructions: Json,
criteria: IndexMap<String, Json>,
},
Score {
instructions: Json,
criteria: Vec<Json>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct NoulCriteria {
#[serde(default, rename = "true", skip_serializing_if = "Option::is_none")]
pub yes: Option<Json>,
#[serde(default, rename = "false", skip_serializing_if = "Option::is_none")]
pub no: Option<Json>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "lowercase")]
pub enum Answer {
Noul(NoulAnswer),
Choice(ChoiceAnswer),
Score(ScoreAnswer),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NoulAnswer {
pub noul: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChoiceAnswer {
pub choice: String,
pub confidence: f64,
pub probabilities: IndexMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScoreAnswer {
pub score: f64,
pub confidence: f64,
pub legend: IndexMap<String, Json>,
pub probabilities: IndexMap<String, f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SystemOneUsage {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub input_tokens: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub output_tokens: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SystemOneResponse {
pub model: String,
pub answers: IndexMap<String, Answer>,
#[serde(default)]
pub usage: SystemOneUsage,
}
#[derive(Deserialize)]
pub(crate) struct PredictorOutput {
pub answers: IndexMap<String, Answer>,
#[serde(default)]
pub usage: SystemOneUsage,
}