rig_core/embeddings/tool.rs
1//! Embeddable tool descriptions and serialized tool context.
2//!
3//! ```
4//! use rig_core::embeddings::ToolSchema;
5//!
6//! let schema = ToolSchema {
7//! name: "search".into(),
8//! embedding_docs: vec!["Search documents".into()],
9//! ..Default::default()
10//! };
11//! assert_eq!(schema.embedding_docs.len(), 1);
12//! ```
13
14use crate::Embed;
15use serde::Serialize;
16
17use super::embed::EmbedError;
18
19/// Tool name, serialized context, and text descriptions for embedding-based retrieval.
20#[derive(Clone, Serialize, Default, Eq, PartialEq)]
21pub struct ToolSchema {
22 pub name: String,
23 pub context: serde_json::Value,
24 pub embedding_docs: Vec<String>,
25}
26
27impl Embed for ToolSchema {
28 fn embed(&self, embedder: &mut super::embed::TextEmbedder) -> Result<(), EmbedError> {
29 for doc in &self.embedding_docs {
30 embedder.embed(doc.clone());
31 }
32 Ok(())
33 }
34}