use serde::{Deserialize, Serialize};
#[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>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HitlDecision {
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 {
pub fn approve() -> Self {
Self { decision: "approve".into(), reason: None, modified_args: None }
}
pub fn reject(reason: impl Into<String>) -> Self {
Self { decision: "reject".into(), reason: Some(reason.into()), modified_args: None }
}
pub fn modify(args: serde_json::Value) -> Self {
Self { decision: "modify".into(), reason: None, modified_args: Some(args) }
}
}
#[derive(Debug, Serialize)]
pub(crate) struct HitlDecideRequest {
pub decisions: Vec<HitlDecision>,
}