reasoninglayer 0.1.2

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

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ClarificationQuestionDto {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub choices: Option<Vec<serde_json::Value>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub default: Option<String>,
    pub field: String,
    pub id: String,
    pub question: String,
    #[serde(rename = "type")]
    pub question_type: String,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CycleOutcomeSummaryDto {
    pub actions_executed: u64,
    pub goals_achieved: u64,
    pub goals_failed: u64,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MaterializationSummaryDto {
    pub beliefs_created: u64,
    pub constraints_created: u64,
    pub curriculum_stages_created: u64,
    pub goal_created: bool,
    pub groundings_created: u64,
    pub guard_constraints_created: u64,
    pub rules_created: u64,
    #[serde(default)]
    pub sort_names: Vec<String>,
    pub sorts_created: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScenarioSummaryDto {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub agent_id: Option<String>,
    pub beliefs_created: u64,
    pub created_at: u64,
    pub prompt: String,
    pub rules_created: u64,
    pub scenario_id: String,
    pub sorts_created: u64,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CreateScenarioRequest {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub agent_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub answers: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub create_agent: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_curriculum: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable_grounding: Option<bool>,
    pub prompt: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub run_initial_cycle: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub session_id: Option<String>,
}

/// Response from scenario creation. Discriminated by `status`.
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "status", rename_all = "snake_case")]
pub enum CreateScenarioResponse {
    NeedsClarification {
        questions: Vec<ClarificationQuestionDto>,
        session_id: String,
        understood: serde_json::Value,
    },
    Complete {
        #[serde(default, skip_serializing_if = "Option::is_none")]
        agent_id: Option<String>,
        #[serde(default, skip_serializing_if = "Option::is_none")]
        cycle_outcome: Option<CycleOutcomeSummaryDto>,
        groundings_applied: u64,
        materialization: MaterializationSummaryDto,
        scenario: serde_json::Value,
        scenario_id: String,
        total_time_ms: u64,
    },
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListScenariosResponse {
    #[serde(default)]
    pub scenarios: Vec<ScenarioSummaryDto>,
    pub total: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetScenarioResponse {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub agent_id: Option<String>,
    pub beliefs_created: u64,
    pub constraints_created: u64,
    pub created_at: u64,
    pub guard_constraints_created: u64,
    pub prompt: String,
    pub rules_created: u64,
    pub scenario: serde_json::Value,
    pub scenario_id: String,
    pub sorts_created: u64,
    pub temporal_constraints_created: u64,
    pub webhook_actions_created: u64,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UpdateScenarioRequest {
    #[serde(default, skip_serializing_if = "Vec::is_empty")]
    pub add_beliefs: Vec<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Vec::is_empty")]
    pub add_constraints: Vec<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Vec::is_empty")]
    pub add_guard_constraints: Vec<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Vec::is_empty")]
    pub add_rules: Vec<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Vec::is_empty")]
    pub add_sorts: Vec<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Vec::is_empty")]
    pub add_temporal_constraints: Vec<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Vec::is_empty")]
    pub add_webhook_actions: Vec<serde_json::Value>,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UpdateScenarioResponse {
    pub beliefs_added: u64,
    pub constraints_added: u64,
    pub guard_constraints_added: u64,
    pub rules_added: u64,
    pub scenario_id: String,
    pub sorts_added: u64,
    pub temporal_constraints_added: u64,
    pub total_beliefs: u64,
    pub total_constraints: u64,
    pub total_guard_constraints: u64,
    pub total_rules: u64,
    pub total_sorts: u64,
    pub total_temporal_constraints: u64,
    pub total_webhook_actions: u64,
    pub webhook_actions_added: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VerificationStepDto {
    pub description: String,
    pub name: String,
    pub passed: bool,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LayerResultSummaryDto {
    pub facts_checked: u64,
    pub facts_satisfied: u64,
    pub layer: String,
    pub score: f64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FormalVerdictDto {
    pub confidence: f64,
    pub deterministic_facts: u64,
    #[serde(default)]
    pub layer_results: Vec<LayerResultSummaryDto>,
    pub overall_verdict: String,
    pub semantic_facts: u64,
    pub total_llm_calls: u64,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VerifyScenarioRequest {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub config: Option<serde_json::Value>,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VerifyScenarioResponse {
    pub confidence: f64,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub formal_verdict: Option<FormalVerdictDto>,
    pub scenario_id: String,
    #[serde(default)]
    pub steps: Vec<VerificationStepDto>,
    pub summary: String,
    pub verdict: String,
}