llmrix-rust-sdk 1.0.0

Official Rust SDK for the llmrix AI Agent Platform API
Documentation
use serde::{Deserialize, Serialize};

/// Full request body for a chat turn.
#[derive(Debug, Default, Serialize)]
pub struct ChatRequest {
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub agent_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub metadata: Option<serde_json::Value>,
    #[serde(skip_serializing_if = "Vec::is_empty", default)]
    pub hitl_decisions: Vec<HitlDecision>,
}

/// A Human-In-The-Loop decision submitted to resume a paused agent run.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HitlDecision {
    /// `"approve"` | `"reject"` | `"modify"`
    pub decision: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub reason: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub modified_args: Option<serde_json::Value>,
}

impl HitlDecision {
    /// Approve the pending action.
    pub fn approve() -> Self {
        Self { decision: "approve".into(), reason: None, modified_args: None }
    }

    /// Reject the pending action with an optional reason.
    pub fn reject(reason: impl Into<String>) -> Self {
        Self { decision: "reject".into(), reason: Some(reason.into()), modified_args: None }
    }

    /// Approve with modified arguments.
    pub fn modify(args: serde_json::Value) -> Self {
        Self { decision: "modify".into(), reason: None, modified_args: Some(args) }
    }
}

/// Wire body for the HITL decide endpoint.
#[derive(Debug, Serialize)]
pub(crate) struct HitlDecideRequest {
    pub decisions: Vec<HitlDecision>,
}