use crate::{Embed, tool::ToolEmbeddingDyn};
use serde::Serialize;
use super::embed::EmbedError;
#[derive(Clone, Serialize, Default, Eq, PartialEq)]
pub struct ToolSchema {
pub name: String,
pub context: serde_json::Value,
pub embedding_docs: Vec<String>,
}
impl Embed for ToolSchema {
fn embed(&self, embedder: &mut super::embed::TextEmbedder) -> Result<(), EmbedError> {
for doc in &self.embedding_docs {
embedder.embed(doc.clone());
}
Ok(())
}
}
impl ToolSchema {
pub fn try_from(tool: &dyn ToolEmbeddingDyn) -> Result<Self, EmbedError> {
Ok(ToolSchema {
name: tool.name(),
context: tool.context().map_err(EmbedError::new)?,
embedding_docs: tool.embedding_docs(),
})
}
}