use std::collections::BTreeMap;
use runifold_core::{CapabilityDescriptor, CapabilityId, CapabilityKind, EffectClass, RiskLevel};
use runifold_model::ToolSpec;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct ToolDescriptor {
pub id: CapabilityId,
pub name: String,
pub version: String,
pub description: String,
pub input_schema: Value,
pub output_schema: Value,
pub effect: EffectClass,
pub risk: RiskLevel,
pub metadata: BTreeMap<String, Value>,
}
impl ToolDescriptor {
pub fn capability(&self) -> CapabilityDescriptor {
CapabilityDescriptor {
id: self.id,
name: self.name.clone(),
version: self.version.clone(),
kind: CapabilityKind::Tool,
input_schema: self.input_schema.clone(),
output_schema: self.output_schema.clone(),
effect: self.effect,
risk: self.risk,
metadata: self.metadata.clone(),
}
}
pub fn model_spec(&self) -> ToolSpec {
ToolSpec {
name: self.name.clone(),
description: self.description.clone(),
input_schema: self.input_schema.clone(),
output_schema: Some(self.output_schema.clone()),
metadata: self.metadata.clone(),
}
}
}