use super::enums::{RewardSource, RewardType};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OutcomeRewardRecord {
pub session_id: String,
pub total_reward: f64,
#[serde(default = "default_objective_key")]
pub objective_key: String,
#[serde(default)]
pub achievements_count: i32,
#[serde(default)]
pub total_steps: i32,
#[serde(default)]
pub metadata: HashMap<String, Value>,
#[serde(default)]
pub annotation: HashMap<String, Value>,
#[serde(default)]
pub created_at: Option<String>,
}
fn default_objective_key() -> String {
"reward".to_string()
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EventRewardRecord {
pub event_id: String,
pub session_id: String,
pub reward_value: f64,
#[serde(default = "default_objective_key")]
pub objective_key: String,
#[serde(default)]
pub reward_type: Option<RewardType>,
#[serde(default)]
pub key: Option<String>,
#[serde(default)]
pub turn_number: Option<i32>,
#[serde(default)]
pub source: Option<RewardSource>,
#[serde(default)]
pub annotation: HashMap<String, Value>,
#[serde(default)]
pub created_at: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RewardAggregates {
pub mean: f64,
#[serde(default)]
pub median: f64,
#[serde(default)]
pub std: f64,
#[serde(default)]
pub n: i32,
#[serde(default)]
pub min_value: Option<f64>,
#[serde(default)]
pub max_value: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CalibrationExample {
pub session_trace: Value,
pub event_rewards: Vec<f64>,
pub outcome_reward: f64,
#[serde(default)]
pub metadata: HashMap<String, Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GoldExample {
pub summary: String,
pub gold_score: f64,
pub gold_reasoning: String,
#[serde(default)]
pub session_trace: Option<Value>,
#[serde(default)]
pub metadata: HashMap<String, Value>,
}