@@ -27,14 +27,12 @@ impl Example for AddArgToTraitMethod {
|
||||
|
||||
async fn conversation(&self, cx: &mut ExampleContext) -> Result<()> {
|
||||
const FILENAME: &str = "assistant_tool.rs";
|
||||
cx.push_user_message(format!(
|
||||
let _ = cx.prompt(format!(
|
||||
r#"
|
||||
Add a `window: Option<gpui::AnyWindowHandle>` argument to the `Tool::run` trait method in {FILENAME},
|
||||
and update all the implementations of the trait and call sites accordingly.
|
||||
"#
|
||||
));
|
||||
|
||||
let _ = cx.run_to_end().await?;
|
||||
)).await?;
|
||||
|
||||
// Adds ignored argument to all but `batch_tool`
|
||||
|
||||
|
||||
@@ -29,16 +29,19 @@ impl Example for CodeBlockCitations {
|
||||
|
||||
async fn conversation(&self, cx: &mut ExampleContext) -> Result<()> {
|
||||
const FILENAME: &str = "assistant_tool.rs";
|
||||
cx.push_user_message(format!(
|
||||
r#"
|
||||
Show me the method bodies of all the methods of the `Tool` trait in {FILENAME}.
|
||||
|
||||
Please show each method in a separate code snippet.
|
||||
"#
|
||||
));
|
||||
|
||||
// Verify that the messages all have the correct formatting.
|
||||
let texts: Vec<String> = cx.run_to_end().await?.texts().collect();
|
||||
let texts: Vec<String> = cx
|
||||
.prompt(format!(
|
||||
r#"
|
||||
Show me the method bodies of all the methods of the `Tool` trait in {FILENAME}.
|
||||
|
||||
Please show each method in a separate code snippet.
|
||||
"#
|
||||
))
|
||||
.await?
|
||||
.texts()
|
||||
.collect();
|
||||
let closing_fence = format!("\n{FENCE}");
|
||||
|
||||
for text in texts.iter() {
|
||||
|
||||
@@ -22,30 +22,26 @@ impl Example for CommentTranslation {
|
||||
}
|
||||
|
||||
async fn conversation(&self, cx: &mut ExampleContext) -> Result<()> {
|
||||
cx.push_user_message(r#"
|
||||
Edit the following files and translate all their comments to italian, in this exact order:
|
||||
let response = cx.prompt(
|
||||
r#"
|
||||
Edit the following files and translate all their comments to italian, in this exact order:
|
||||
|
||||
- font-kit/src/family.rs
|
||||
- font-kit/src/canvas.rs
|
||||
- font-kit/src/error.rs
|
||||
"#);
|
||||
cx.run_to_end().await?;
|
||||
- font-kit/src/family.rs
|
||||
- font-kit/src/canvas.rs
|
||||
- font-kit/src/error.rs
|
||||
"#
|
||||
).await?;
|
||||
|
||||
let mut create_or_overwrite_count = 0;
|
||||
cx.agent_thread().read_with(cx, |thread, cx| {
|
||||
for message in thread.messages() {
|
||||
for tool_use in thread.tool_uses_for_message(message.id, cx) {
|
||||
if tool_use.name == "edit_file" {
|
||||
let input: EditFileToolInput = serde_json::from_value(tool_use.input)?;
|
||||
if !matches!(input.mode, EditFileMode::Edit) {
|
||||
create_or_overwrite_count += 1;
|
||||
}
|
||||
}
|
||||
for tool_call in response.tool_calls() {
|
||||
if tool_call.name == "edit_file" {
|
||||
let input = tool_call.parse_input::<EditFileToolInput>()?;
|
||||
if !matches!(input.mode, EditFileMode::Edit) {
|
||||
create_or_overwrite_count += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
anyhow::Ok(())
|
||||
})??;
|
||||
cx.assert_eq(create_or_overwrite_count, 0, "no_creation_or_overwrite")?;
|
||||
|
||||
Ok(())
|
||||
|
||||
@@ -48,8 +48,8 @@ impl Example for FileChangeNotificationExample {
|
||||
})?;
|
||||
|
||||
// Start conversation (specific message is not important)
|
||||
cx.push_user_message("Find all files in this repo");
|
||||
cx.run_turn().await?;
|
||||
cx.prompt_with_max_turns("Find all files in this repo", 1)
|
||||
.await?;
|
||||
|
||||
// Edit the README buffer - the model should get a notification on next turn
|
||||
buffer.update(cx, |buffer, cx| {
|
||||
@@ -58,7 +58,7 @@ impl Example for FileChangeNotificationExample {
|
||||
|
||||
// Run for some more turns.
|
||||
// The model shouldn't thank us for letting it know about the file change.
|
||||
cx.run_turns(3).await?;
|
||||
cx.proceed_with_max_turns(3).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -25,18 +25,19 @@ impl Example for FileSearchExample {
|
||||
|
||||
async fn conversation(&self, cx: &mut ExampleContext) -> Result<()> {
|
||||
const FILENAME: &str = "find_replace_file_tool.rs";
|
||||
cx.push_user_message(format!(
|
||||
r#"
|
||||
|
||||
let prompt = format!(
|
||||
r#"
|
||||
Look at the `{FILENAME}`. I want to implement a card for it. The card should implement the `Render` trait.
|
||||
|
||||
The card should show a diff. It should be a beautifully presented diff. The card "box" should look like what we show for
|
||||
markdown codeblocks (look at `MarkdownElement`). I want to see a red background for lines that were deleted and a green
|
||||
background for lines that were added. We should have a div per diff line.
|
||||
"#
|
||||
));
|
||||
);
|
||||
|
||||
let response = cx.run_turn().await?;
|
||||
let tool_use = response.expect_tool("find_path", cx)?;
|
||||
let response = cx.prompt_with_max_turns(prompt, 1).await?;
|
||||
let tool_use = response.expect_tool_call("find_path", cx)?;
|
||||
let input = tool_use.parse_input::<FindPathToolInput>()?;
|
||||
|
||||
let glob = input.glob;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use agent::GrepToolInput;
|
||||
use agent_settings::AgentProfileId;
|
||||
use anyhow::Result;
|
||||
use async_trait::async_trait;
|
||||
@@ -35,9 +36,9 @@ impl Example for GrepParamsEscapementExample {
|
||||
}
|
||||
|
||||
async fn conversation(&self, cx: &mut ExampleContext) -> Result<()> {
|
||||
// cx.push_user_message("How does the precedence/specificity work with Keymap contexts? I am seeing that `MessageEditor > Editor` is lower precendence than `Editor` which is surprising to me, but might be how it works");
|
||||
cx.push_user_message("Search for files containing the characters `>` or `<`");
|
||||
let response = cx.run_turns(2).await?;
|
||||
let response = cx
|
||||
.prompt_with_max_turns("Search for files containing the characters `>` or `<`", 2)
|
||||
.await?;
|
||||
let grep_input = response
|
||||
.find_tool_call("grep")
|
||||
.and_then(|tool_use| tool_use.parse_input::<GrepToolInput>().ok());
|
||||
|
||||
@@ -144,9 +144,8 @@ impl Example for DeclarativeExample {
|
||||
}
|
||||
|
||||
async fn conversation(&self, cx: &mut ExampleContext) -> Result<()> {
|
||||
cx.push_user_message(&self.prompt);
|
||||
let max_turns = self.metadata.max_turns.unwrap_or(1000);
|
||||
let _ = cx.run_turns(max_turns).await;
|
||||
let _ = cx.prompt_with_max_turns(&self.prompt, max_turns).await;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use agent::{EditFileMode, EditFileToolInput};
|
||||
use agent_settings::AgentProfileId;
|
||||
use anyhow::Result;
|
||||
use async_trait::async_trait;
|
||||
@@ -35,17 +36,14 @@ impl Example for FileOverwriteExample {
|
||||
}
|
||||
|
||||
async fn conversation(&self, cx: &mut ExampleContext) -> Result<()> {
|
||||
let response = cx.run_turns(1).await?;
|
||||
let file_overwritten = if let Some(tool_use) = response.find_tool_call("edit_file") {
|
||||
let input = tool_use.parse_input::<EditFileToolInput>()?;
|
||||
match input.mode {
|
||||
EditFileMode::Edit => false,
|
||||
EditFileMode::Create | EditFileMode::Overwrite => {
|
||||
input.path.ends_with("src/language_model_selector.rs")
|
||||
}
|
||||
let response = cx.proceed_with_max_turns(1).await?;
|
||||
let tool_use = response.expect_tool_call("edit_file", cx)?;
|
||||
let input = tool_use.parse_input::<EditFileToolInput>()?;
|
||||
let file_overwritten = match input.mode {
|
||||
EditFileMode::Edit => false,
|
||||
EditFileMode::Create | EditFileMode::Overwrite => {
|
||||
input.path.ends_with("src/language_model_selector.rs")
|
||||
}
|
||||
} else {
|
||||
false
|
||||
};
|
||||
|
||||
cx.assert(!file_overwritten, "File should be edited, not overwritten")
|
||||
|
||||
@@ -23,20 +23,19 @@ impl Example for Planets {
|
||||
}
|
||||
|
||||
async fn conversation(&self, cx: &mut ExampleContext) -> Result<()> {
|
||||
cx.push_user_message(
|
||||
r#"
|
||||
let response = cx
|
||||
.prompt(
|
||||
r#"
|
||||
Make a plain JavaScript web page which renders an animated 3D solar system.
|
||||
Let me drag to rotate the camera around.
|
||||
Do not use npm.
|
||||
"#
|
||||
.to_string(),
|
||||
);
|
||||
|
||||
let response = cx.run_to_end().await?;
|
||||
"#,
|
||||
)
|
||||
.await?;
|
||||
let mut open_tool_uses = 0;
|
||||
let mut terminal_tool_uses = 0;
|
||||
|
||||
for tool_use in response.tool_uses() {
|
||||
for tool_use in response.tool_calls() {
|
||||
if tool_use.name == OpenTool::name() {
|
||||
open_tool_uses += 1;
|
||||
} else if tool_use.name == TerminalTool::name() {
|
||||
|
||||
Reference in New Issue
Block a user