# Introduce a new \`StreamingEditFileTool\` \(\#29733\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/f891dfb358ad5e772b344337da8d5da32d84866a)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: f891dfb358ad5e772b344337da8d5da32d84866a

Requested commit: f891dfb358ad5e772b344337da8d5da32d84866a

Commit: f891dfb358ad5e772b344337da8d5da32d84866a

Tree: e00baa6adb6be8c0379730321317dc91130b2f9e

Author: Antonio Scandurra

Committer: GitHub

## Message

````
Introduce a new `StreamingEditFileTool` (#29733)

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>
````

## Parents

- [e3a2d52472b53b0fb44df75c66b63e6426b2fb7a](https://git.cafe/gitcafe/zed/commit/e3a2d52472b53b0fb44df75c66b63e6426b2fb7a?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/f891dfb358ad5e772b344337da8d5da32d84866a?format=markdown)
