
This pull request introduces a new tool for streaming edits. The short-term goal is for this tool to replace the existing `EditFileTool`, but we want to get this out the door as soon as possible so that we can start testing it. `StreamingEditFileTool` is mutually exclusive with `EditFileTool`. It will be enabled by default for anyone who has the `agent-stream-edits` feature flag, as well as people that set `assistant.stream_edits` to `true` in their settings. ### Implementation Streaming is achieved by requesting a completion while the `edit_file` tool gets called. We invoke the model by taking the existing conversation with the agent and appending a prompt specifically tailored for editing. In that prompt, we ask the model to produce a stream of `<old_text>`/`<new_text>` tags. As the model streams text in, we incrementally parse it and start editing as soon as we can. ### Evals Note that, as part of this pull request, I also defined some new evals that I used to drive the behavior of the recursive LLM call. To run them, use this command: ```bash cargo test --package=assistant_tools --features eval -- eval_extract_handle_command_output ``` Or comment out the `#[cfg_attr(not(feature = "eval"), ignore)]` macro. I recommend running them one at a time, because right now we don't really have a way of orchestrating of all these evals. I think we should invest into that effort once the new agent panel goes live. Release Notes: - N/A --------- Co-authored-by: Nathan Sobo <nathan@zed.dev> Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de> Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
79 lines
2.2 KiB
TOML
79 lines
2.2 KiB
TOML
[package]
|
|
name = "assistant_tools"
|
|
version = "0.1.0"
|
|
edition.workspace = true
|
|
publish.workspace = true
|
|
license = "GPL-3.0-or-later"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[lib]
|
|
path = "src/assistant_tools.rs"
|
|
|
|
[features]
|
|
eval = []
|
|
|
|
[dependencies]
|
|
aho-corasick.workspace = true
|
|
anyhow.workspace = true
|
|
assistant_tool.workspace = true
|
|
assistant_settings.workspace = true
|
|
buffer_diff.workspace = true
|
|
chrono.workspace = true
|
|
collections.workspace = true
|
|
component.workspace = true
|
|
editor.workspace = true
|
|
derive_more.workspace = true
|
|
feature_flags.workspace = true
|
|
futures.workspace = true
|
|
gpui.workspace = true
|
|
handlebars = { workspace = true, features = ["rust-embed"] }
|
|
html_to_markdown.workspace = true
|
|
http_client.workspace = true
|
|
indoc.workspace = true
|
|
itertools.workspace = true
|
|
language.workspace = true
|
|
language_model.workspace = true
|
|
linkme.workspace = true
|
|
open.workspace = true
|
|
project.workspace = true
|
|
regex.workspace = true
|
|
rust-embed.workspace = true
|
|
schemars.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
settings.workspace = true
|
|
smallvec.workspace = true
|
|
streaming_diff.workspace = true
|
|
strsim.workspace = true
|
|
task.workspace = true
|
|
terminal.workspace = true
|
|
terminal_view.workspace = true
|
|
ui.workspace = true
|
|
util.workspace = true
|
|
web_search.workspace = true
|
|
workspace-hack.workspace = true
|
|
workspace.workspace = true
|
|
zed_llm_client.workspace = true
|
|
|
|
[dev-dependencies]
|
|
client = { workspace = true, features = ["test-support"] }
|
|
clock = { workspace = true, features = ["test-support"] }
|
|
collections = { workspace = true, features = ["test-support"] }
|
|
gpui = { workspace = true, features = ["test-support"] }
|
|
gpui_tokio.workspace = true
|
|
fs = { workspace = true, features = ["test-support"] }
|
|
language = { workspace = true, features = ["test-support"] }
|
|
language_model = { workspace = true, features = ["test-support"] }
|
|
language_models.workspace = true
|
|
project = { workspace = true, features = ["test-support"] }
|
|
rand.workspace = true
|
|
pretty_assertions.workspace = true
|
|
reqwest_client.workspace = true
|
|
settings = { workspace = true, features = ["test-support"] }
|
|
task = { workspace = true, features = ["test-support"]}
|
|
tempfile.workspace = true
|
|
tree-sitter-rust.workspace = true
|
|
workspace = { workspace = true, features = ["test-support"] }
|
|
unindent.workspace = true
|