feat: (tool router) adds extension name in vector db & search tool (#2855)

This commit is contained in:
Wendy Tang
2025-06-13 10:28:02 -07:00
committed by GitHub
parent 9368a242ce
commit de5fc9b450
5 changed files with 119 additions and 37 deletions
@@ -22,7 +22,7 @@ pub enum RouterToolSelectionStrategy {
#[async_trait]
pub trait RouterToolSelector: Send + Sync {
async fn select_tools(&self, params: Value) -> Result<Vec<Content>, ToolError>;
async fn index_tools(&self, tools: &[Tool]) -> Result<(), ToolError>;
async fn index_tools(&self, tools: &[Tool], extension_name: &str) -> Result<(), ToolError>;
async fn remove_tool(&self, tool_name: &str) -> Result<(), ToolError>;
async fn record_tool_call(&self, tool_name: &str) -> Result<(), ToolError>;
async fn get_recent_tool_calls(&self, limit: usize) -> Result<Vec<String>, ToolError>;
@@ -76,6 +76,9 @@ impl RouterToolSelector for VectorToolSelector {
let k = params.get("k").and_then(|v| v.as_u64()).unwrap_or(5) as usize;
// Extract extension_name from params if present
let extension_name = params.get("extension_name").and_then(|v| v.as_str());
// Check if provider supports embeddings
if !self.embedding_provider.supports_embeddings() {
return Err(ToolError::ExecutionError(
@@ -98,7 +101,7 @@ impl RouterToolSelector for VectorToolSelector {
let vector_db = self.vector_db.read().await;
let tools = vector_db
.search_tools(query_embedding, k)
.search_tools(query_embedding, k, extension_name)
.await
.map_err(|e| ToolError::ExecutionError(format!("Failed to search tools: {}", e)))?;
@@ -119,7 +122,7 @@ impl RouterToolSelector for VectorToolSelector {
Ok(selected_tools)
}
async fn index_tools(&self, tools: &[Tool]) -> Result<(), ToolError> {
async fn index_tools(&self, tools: &[Tool], extension_name: &str) -> Result<(), ToolError> {
let texts_to_embed: Vec<String> = tools
.iter()
.map(|tool| {
@@ -155,6 +158,7 @@ impl RouterToolSelector for VectorToolSelector {
description: tool.description.clone(),
schema: schema_str,
vector,
extension_name: extension_name.to_string(),
}
})
.collect();