reasoninglayer 0.1.2

Rust client SDK for the Reasoning Layer API
Documentation
//! RL training DTOs.

use std::collections::BTreeMap;

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RlPolicyConfigDto {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub discount_factor: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exploration_decay: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exploration_rate: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub learning_rate: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub min_exploration: Option<f64>,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RlTrainRequest {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub curiosity_bonus_amount: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_auto_curriculum: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_cognitive_cycle: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_curiosity_bonus: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_deliberation_scaling: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_expert_gating: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_imagination_learning: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_neural_dqn: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_ontological_grounding: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_plasticity_schedule: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_self_play: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_state_encoder: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_world_model: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub encoding_dim: Option<u32>,
    pub environment_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expert_gate_entropy_coefficient: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expert_gate_learning_rate: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expert_gate_temperature: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hidden_dim: Option<u32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub max_steps_per_episode: Option<u32>,
    pub num_episodes: u32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub rl_config: Option<RlPolicyConfigDto>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub self_play_exchange_mode: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub self_play_num_agents: Option<u32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub self_play_num_rounds: Option<u32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub self_play_quality_threshold: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub self_play_social_observation: Option<bool>,
    pub tenant_id: String,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RlTrainResponse {
    #[serde(default)]
    pub avg_reward_last_10: f64,
    #[serde(default)]
    pub cognitive_cycles_run: u64,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub collapse_episodes: Option<Vec<u64>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub contrastive_losses: Option<Vec<f64>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub curriculum_adjustments: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub curriculum_backtracks: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub curriculum_stage_reached: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub deliberative_decisions: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dynamics_losses: Option<Vec<f64>>,
    #[serde(default)]
    pub episode_rewards: Vec<f64>,
    #[serde(default)]
    pub episode_steps: Vec<u64>,
    #[serde(default)]
    pub episodes_completed: u64,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expert_avg_entropy: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expert_avg_weights: Option<BTreeMap<String, f64>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expert_collapse_recoveries: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expert_final_weights: Option<BTreeMap<String, f64>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub final_contrastive_temperature: Option<f64>,
    #[serde(default)]
    pub final_exploration_rate: f64,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub final_imagination_steps: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub imagination_transitions: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mode_distribution: Option<BTreeMap<String, f64>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub peer_demonstrations_consumed: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub plasticity_phase_transitions: Option<Vec<Vec<serde_json::Value>>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reactive_decisions: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub self_play_agent_fitnesses: Option<Vec<Vec<f64>>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub self_play_best_fitness: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub self_play_mean_fitness_per_round: Option<Vec<f64>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sort_aware_training_steps: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sorts_discovered: Option<u64>,
    #[serde(default)]
    pub total_transitions: u64,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub trajectories_exchanged: Option<u64>,
}