Change `ToolOutput` to `ToolView` (#11682)

Kyle Kelley created

Additionally, the internal `ToolView` trait used by the registry is now
called `InternalToolView`.

This should make it a bit easier to understand that the `ToolView` is
intended for a `gpui::View` (implementing `Render`). It does still feel
like more could be merged here but I think the built tools are now a bit
clearer.

Release Notes:

- N/A

Change summary

crates/assistant2/src/tools/annotate_code.rs      |  4 +-
crates/assistant2/src/tools/create_buffer.rs      |  4 +-
crates/assistant2/src/tools/project_index.rs      |  4 +-
crates/assistant_tooling/src/assistant_tooling.rs |  4 +-
crates/assistant_tooling/src/tool_registry.rs     | 18 ++++++++--------
5 files changed, 17 insertions(+), 17 deletions(-)

Detailed changes

crates/assistant2/src/tools/annotate_code.rs 🔗

@@ -1,5 +1,5 @@
 use anyhow::Result;
-use assistant_tooling::{LanguageModelTool, ProjectContext, ToolOutput};
+use assistant_tooling::{LanguageModelTool, ProjectContext, ToolView};
 use editor::{
     display_map::{BlockContext, BlockDisposition, BlockProperties, BlockStyle},
     Editor, MultiBuffer,
@@ -230,7 +230,7 @@ impl Render for AnnotationResultView {
     }
 }
 
-impl ToolOutput for AnnotationResultView {
+impl ToolView for AnnotationResultView {
     type Input = AnnotationInput;
     type SerializedState = Option<String>;
 

crates/assistant2/src/tools/create_buffer.rs 🔗

@@ -1,5 +1,5 @@
 use anyhow::{anyhow, Result};
-use assistant_tooling::{LanguageModelTool, ProjectContext, ToolOutput};
+use assistant_tooling::{LanguageModelTool, ProjectContext, ToolView};
 use editor::Editor;
 use gpui::{prelude::*, Model, Task, View, WeakView};
 use project::Project;
@@ -65,7 +65,7 @@ impl Render for CreateBufferView {
     }
 }
 
-impl ToolOutput for CreateBufferView {
+impl ToolView for CreateBufferView {
     type Input = CreateBufferInput;
 
     type SerializedState = ();

crates/assistant2/src/tools/project_index.rs 🔗

@@ -1,5 +1,5 @@
 use anyhow::Result;
-use assistant_tooling::{LanguageModelTool, ToolOutput};
+use assistant_tooling::{LanguageModelTool, ToolView};
 use collections::BTreeMap;
 use file_icons::FileIcons;
 use gpui::{prelude::*, AnyElement, Model, Task};
@@ -232,7 +232,7 @@ impl Render for ProjectIndexView {
     }
 }
 
-impl ToolOutput for ProjectIndexView {
+impl ToolView for ProjectIndexView {
     type Input = CodebaseQuery;
     type SerializedState = SerializedState;
 

crates/assistant_tooling/src/assistant_tooling.rs 🔗

@@ -8,6 +8,6 @@ pub use attachment_registry::{
 };
 pub use project_context::ProjectContext;
 pub use tool_registry::{
-    LanguageModelTool, SavedToolFunctionCall, ToolFunctionCall, ToolFunctionDefinition, ToolOutput,
-    ToolRegistry,
+    LanguageModelTool, SavedToolFunctionCall, ToolFunctionCall, ToolFunctionDefinition,
+    ToolRegistry, ToolView,
 };

crates/assistant_tooling/src/tool_registry.rs 🔗

@@ -31,11 +31,11 @@ enum ToolFunctionCallState {
     #[default]
     Initializing,
     NoSuchTool,
-    KnownTool(Box<dyn ToolView>),
-    ExecutedTool(Box<dyn ToolView>),
+    KnownTool(Box<dyn InternalToolView>),
+    ExecutedTool(Box<dyn InternalToolView>),
 }
 
-trait ToolView {
+trait InternalToolView {
     fn view(&self) -> AnyView;
     fn generate(&self, project: &mut ProjectContext, cx: &mut WindowContext) -> String;
     fn try_set_input(&self, input: &str, cx: &mut WindowContext);
@@ -69,7 +69,7 @@ pub struct ToolFunctionDefinition {
 }
 
 pub trait LanguageModelTool {
-    type View: ToolOutput;
+    type View: ToolView;
 
     /// Returns the name of the tool.
     ///
@@ -85,7 +85,7 @@ pub trait LanguageModelTool {
 
     /// Returns the OpenAI Function definition for the tool, for direct use with OpenAI's API.
     fn definition(&self) -> ToolFunctionDefinition {
-        let root_schema = schema_for!(<Self::View as ToolOutput>::Input);
+        let root_schema = schema_for!(<Self::View as ToolView>::Input);
 
         ToolFunctionDefinition {
             name: self.name(),
@@ -98,7 +98,7 @@ pub trait LanguageModelTool {
     fn view(&self, cx: &mut WindowContext) -> View<Self::View>;
 }
 
-pub trait ToolOutput: Render {
+pub trait ToolView: Render {
     /// The input type that will be passed in to `execute` when the tool is called
     /// by the language model.
     type Input: DeserializeOwned + JsonSchema;
@@ -121,7 +121,7 @@ pub trait ToolOutput: Render {
 struct RegisteredTool {
     enabled: AtomicBool,
     type_id: TypeId,
-    build_view: Box<dyn Fn(&mut WindowContext) -> Box<dyn ToolView>>,
+    build_view: Box<dyn Fn(&mut WindowContext) -> Box<dyn InternalToolView>>,
     definition: ToolFunctionDefinition,
 }
 
@@ -304,7 +304,7 @@ impl ToolRegistry {
     }
 }
 
-impl<T: ToolOutput> ToolView for View<T> {
+impl<T: ToolView> InternalToolView for View<T> {
     fn view(&self) -> AnyView {
         self.clone().into()
     }
@@ -404,7 +404,7 @@ mod test {
         }
     }
 
-    impl ToolOutput for WeatherView {
+    impl ToolView for WeatherView {
         type Input = WeatherQuery;
 
         type SerializedState = WeatherResult;