llmrix-rust-sdk 1.0.0

Official Rust SDK for the llmrix AI Agent Platform API
Documentation
use serde::Deserialize;
use std::collections::HashMap;

// ---------------------------------------------------------------------------
// Lifecycle
// ---------------------------------------------------------------------------

#[derive(Debug, Clone, Deserialize, Default)]
pub struct RunStartEvent {
    #[serde(default)]
    pub run_id: String,
    #[serde(default)]
    pub thread_id: String,
}

#[derive(Debug, Clone, Deserialize, Default)]
pub struct RunEndEvent {
    #[serde(default)]
    pub run_id: String,
    #[serde(default)]
    pub thread_id: String,
}

// ---------------------------------------------------------------------------
// Messages
// ---------------------------------------------------------------------------

/// Incremental text fragment from the assistant.
/// Concatenate successive `content` values to reconstruct the full message.
#[derive(Debug, Clone, Deserialize, Default)]
pub struct MessageChunkEvent {
    #[serde(default)]
    pub content: String,
    #[serde(default)]
    pub id: String,
}

// ---------------------------------------------------------------------------
// Tools
// ---------------------------------------------------------------------------

#[derive(Debug, Clone, Deserialize, Default)]
pub struct ToolStartEvent {
    #[serde(default)]
    pub id: String,
    #[serde(default)]
    pub name: String,
    #[serde(default)]
    pub args: HashMap<String, serde_json::Value>,
}

#[derive(Debug, Clone, Deserialize, Default)]
pub struct ToolEndEvent {
    #[serde(default)]
    pub id: String,
    #[serde(default)]
    pub name: String,
    #[serde(default)]
    pub result: String,
    #[serde(default)]
    pub error: bool,
}

#[derive(Debug, Clone, Deserialize, Default)]
pub struct SubagentStartEvent {
    #[serde(default)]
    pub id: String,
    #[serde(default)]
    pub agent_name: String,
}

#[derive(Debug, Clone, Deserialize, Default)]
pub struct SubagentEndEvent {
    #[serde(default)]
    pub id: String,
    #[serde(default)]
    pub agent_name: String,
    #[serde(default)]
    pub error: bool,
}

// ---------------------------------------------------------------------------
// HITL
// ---------------------------------------------------------------------------

/// Emitted when the agent pauses awaiting human approval.
/// Call `ChatResource::decide` to resume the run.
#[derive(Debug, Clone, Deserialize, Default)]
pub struct HitlInterruptEvent {
    #[serde(default)]
    pub id: String,
    #[serde(default)]
    pub action_name: String,
    #[serde(default)]
    pub action_args: HashMap<String, serde_json::Value>,
    #[serde(default)]
    pub description: String,
}

// ---------------------------------------------------------------------------
// Error / cancel
// ---------------------------------------------------------------------------

#[derive(Debug, Clone, Deserialize, Default)]
pub struct ErrorEvent {
    #[serde(default)]
    pub message: String,
    #[serde(default)]
    pub error_code: String,
}

#[derive(Debug, Clone, Deserialize, Default)]
pub struct CancelledEvent {
    #[serde(default)]
    pub reason: String,
}

// ---------------------------------------------------------------------------
// Heartbeat
// ---------------------------------------------------------------------------

/// Periodic keep-alive. Applications may safely ignore this variant.
#[derive(Debug, Clone, Default)]
pub struct HeartbeatEvent;

// ---------------------------------------------------------------------------
// Sealed sum type
// ---------------------------------------------------------------------------

/// All SSE event variants. Match on this enum to handle specific events:
///
/// ```rust,no_run
/// # use llmrix_rust_sdk::streaming::event::StreamEvent;
/// # let event = StreamEvent::Heartbeat;
/// match &event {
///     StreamEvent::MessageChunk(e) => print!("{}", e.content),
///     StreamEvent::RunEnd(_) => println!("\n[done]"),
///     _ => {}
/// }
/// ```
#[derive(Debug, Clone)]
pub enum StreamEvent {
    RunStart(RunStartEvent),
    RunEnd(RunEndEvent),
    MessageChunk(MessageChunkEvent),
    ToolStart(ToolStartEvent),
    ToolEnd(ToolEndEvent),
    SubagentStart(SubagentStartEvent),
    SubagentEnd(SubagentEndEvent),
    HitlInterrupt(HitlInterruptEvent),
    Error(ErrorEvent),
    Cancelled(CancelledEvent),
    Heartbeat,
}