
Exposes a new "edit files" tool that the model can use to apply modifications to files in the project. The main model provides instructions and the tool uses a separate "editor" model (Claude 3.5 by default) to generate search/replace blocks like Aider does: ````markdown mathweb/flask/app.py ```python <<<<<<< SEARCH from flask import Flask ======= import math from flask import Flask >>>>>>> REPLACE ``` ```` The search/replace blocks are parsed and applied as they stream in. If a block fails to parse, the tool will apply the other edits and report an error pointing to the part of the input where it occurred. This should allow the model to fix it. Release Notes: - N/A --------- Co-authored-by: Antonio Scandurra <me@as-cii.com>
52 lines
1.3 KiB
Rust
52 lines
1.3 KiB
Rust
mod tool_registry;
|
|
mod tool_working_set;
|
|
|
|
use std::sync::Arc;
|
|
|
|
use anyhow::Result;
|
|
use gpui::{App, Entity, SharedString, Task};
|
|
use language_model::LanguageModelRequestMessage;
|
|
use project::Project;
|
|
|
|
pub use crate::tool_registry::*;
|
|
pub use crate::tool_working_set::*;
|
|
|
|
pub fn init(cx: &mut App) {
|
|
ToolRegistry::default_global(cx);
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, 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.
|
|
fn name(&self) -> String;
|
|
|
|
/// 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())
|
|
}
|
|
|
|
/// Runs the tool with the provided input.
|
|
fn run(
|
|
self: Arc<Self>,
|
|
input: serde_json::Value,
|
|
messages: &[LanguageModelRequestMessage],
|
|
project: Entity<Project>,
|
|
cx: &mut App,
|
|
) -> Task<Result<String>>;
|
|
}
|