Change summary
crates/assistant_tool/src/assistant_tool.rs | 15 ++++++++++++++-
crates/context_server/src/context_server_tool.rs | 8 +++++++-
2 files changed, 21 insertions(+), 2 deletions(-)
Detailed changes
@@ -4,7 +4,7 @@ mod tool_working_set;
use std::sync::Arc;
use anyhow::Result;
-use gpui::{App, Entity, Task};
+use gpui::{App, Entity, SharedString, Task};
use project::Project;
pub use crate::tool_registry::*;
@@ -14,6 +14,14 @@ pub fn init(cx: &mut App) {
ToolRegistry::default_global(cx);
}
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub enum ToolSource {
+ /// A native tool built-in to Zed.
+ Native,
+ /// A tool provided by a context server.
+ ContextServer { id: SharedString },
+}
+
/// A tool that can be used by a language model.
pub trait Tool: 'static + Send + Sync {
/// Returns the name of the tool.
@@ -22,6 +30,11 @@ pub trait Tool: 'static + Send + Sync {
/// Returns the description of the tool.
fn description(&self) -> String;
+ /// Returns the source of the tool.
+ fn source(&self) -> ToolSource {
+ ToolSource::Native
+ }
+
/// Returns the JSON schema that describes the tool's input.
fn input_schema(&self) -> serde_json::Value {
serde_json::Value::Object(serde_json::Map::default())
@@ -1,7 +1,7 @@
use std::sync::Arc;
use anyhow::{anyhow, bail, Result};
-use assistant_tool::Tool;
+use assistant_tool::{Tool, ToolSource};
use gpui::{App, Entity, Task};
use project::Project;
@@ -37,6 +37,12 @@ impl Tool for ContextServerTool {
self.tool.description.clone().unwrap_or_default()
}
+ fn source(&self) -> ToolSource {
+ ToolSource::ContextServer {
+ id: self.server_id.clone().into(),
+ }
+ }
+
fn input_schema(&self) -> serde_json::Value {
match &self.tool.input_schema {
serde_json::Value::Null => {