use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PydanticAiToolCapability {
pub name: String,
pub description: String,
pub required_permission: String,
pub resource_id: String,
}
impl PydanticAiToolCapability {
pub fn new(
name: impl Into<String>,
description: impl Into<String>,
required_permission: impl Into<String>,
resource_id: impl Into<String>,
) -> Self {
Self {
name: name.into(),
description: description.into(),
required_permission: required_permission.into(),
resource_id: resource_id.into(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PydanticAiCapability {
pub id: String,
pub description: String,
pub instructions: String,
pub defer_loading: bool,
pub tools: Vec<PydanticAiToolCapability>,
}
impl PydanticAiCapability {
pub fn new(
id: impl Into<String>,
description: impl Into<String>,
instructions: impl Into<String>,
) -> Self {
Self {
id: id.into(),
description: description.into(),
instructions: instructions.into(),
defer_loading: false,
tools: Vec::new(),
}
}
#[must_use]
pub fn defer_loading(mut self, defer_loading: bool) -> Self {
self.defer_loading = defer_loading;
self
}
#[must_use]
pub fn with_tool(mut self, tool: PydanticAiToolCapability) -> Self {
self.tools.push(tool);
self
}
pub fn to_json(&self) -> Result<String, serde_json::Error> {
serde_json::to_string(self)
}
}
#[cfg(test)]
mod tests;