From c240f876b155068731a92f0e14596c58485f71af Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 1 Jul 2025 09:15:34 -0600 Subject: [PATCH] Restructure agent2 modules --- crates/agent2/Cargo.toml | 2 +- crates/agent2/src/agent2.rs | 6 +++ crates/agent2/src/prompts.rs | 8 +++- crates/agent2/src/{agent.rs => thread.rs} | 19 +++----- crates/agent2/src/{ => thread}/tests.rs | 44 ++++++++++--------- .../src/{ => thread}/tests/test_tools.rs | 0 crates/agent2/src/tools/glob.rs | 2 +- 7 files changed, 44 insertions(+), 37 deletions(-) create mode 100644 crates/agent2/src/agent2.rs rename crates/agent2/src/{agent.rs => thread.rs} (98%) rename crates/agent2/src/{ => thread}/tests.rs (90%) rename crates/agent2/src/{ => thread}/tests/test_tools.rs (100%) diff --git a/crates/agent2/Cargo.toml b/crates/agent2/Cargo.toml index 48a548715e320e09890d9283f84feaa966559eff..d4a234fe50ce512363828198c362d97ddd592ce5 100644 --- a/crates/agent2/Cargo.toml +++ b/crates/agent2/Cargo.toml @@ -6,7 +6,7 @@ license = "GPL-3.0-or-later" publish = false [lib] -path = "src/agent.rs" +path = "src/agent2.rs" [lints] workspace = true diff --git a/crates/agent2/src/agent2.rs b/crates/agent2/src/agent2.rs new file mode 100644 index 0000000000000000000000000000000000000000..577bf170dd2cb655fac601edcc8a6be39d303f0e --- /dev/null +++ b/crates/agent2/src/agent2.rs @@ -0,0 +1,6 @@ +mod prompts; +mod templates; +mod thread; +mod tools; + +pub use thread::*; diff --git a/crates/agent2/src/prompts.rs b/crates/agent2/src/prompts.rs index b66e2328564400e718885ea4082fec3523a31901..f11eaf426b040848502d1957b68f1f3e45cc1f10 100644 --- a/crates/agent2/src/prompts.rs +++ b/crates/agent2/src/prompts.rs @@ -1,4 +1,10 @@ -use super::*; +use crate::{ + templates::{BaseTemplate, Template, Templates, WorktreeData}, + thread::Prompt, +}; +use anyhow::Result; +use gpui::{App, Entity}; +use project::Project; struct BasePrompt { project: Entity, diff --git a/crates/agent2/src/agent.rs b/crates/agent2/src/thread.rs similarity index 98% rename from crates/agent2/src/agent.rs rename to crates/agent2/src/thread.rs index 03880d602bef2099f35945c647986f9ef194735b..c5b3572b5fb43b54c9fc01cad52aa77d427ca66b 100644 --- a/crates/agent2/src/agent.rs +++ b/crates/agent2/src/thread.rs @@ -1,24 +1,17 @@ -mod prompts; -mod templates; -#[cfg(test)] -mod tests; -mod tools; - -use anyhow::{Result, anyhow}; +use crate::templates::Templates; +use anyhow::{anyhow, Result}; use futures::{channel::mpsc, future}; -use gpui::{App, Context, Entity, SharedString, Task}; +use gpui::{App, Context, SharedString, Task}; use language_model::{ CompletionIntent, CompletionMode, LanguageModel, LanguageModelCompletionError, LanguageModelCompletionEvent, LanguageModelRequest, LanguageModelRequestMessage, LanguageModelRequestTool, LanguageModelToolResult, LanguageModelToolResultContent, LanguageModelToolSchemaFormat, LanguageModelToolUse, MessageContent, Role, StopReason, }; -use project::Project; use schemars::{JsonSchema, Schema}; use serde::Deserialize; use smol::stream::StreamExt; use std::{collections::BTreeMap, sync::Arc}; -use templates::{BaseTemplate, Template, Templates, WorktreeData}; use util::ResultExt; #[derive(Debug)] @@ -29,11 +22,11 @@ pub struct AgentMessage { pub type AgentResponseEvent = LanguageModelCompletionEvent; -trait Prompt { +pub trait Prompt { fn render(&self, prompts: &Templates, cx: &App) -> Result; } -pub struct Agent { +pub struct Thread { messages: Vec, completion_mode: CompletionMode, /// Holds the task that handles agent interaction until the end of the turn. @@ -47,7 +40,7 @@ pub struct Agent { // action_log: Entity, } -impl Agent { +impl Thread { pub fn new(templates: Arc) -> Self { Self { messages: Vec::new(), diff --git a/crates/agent2/src/tests.rs b/crates/agent2/src/thread/tests.rs similarity index 90% rename from crates/agent2/src/tests.rs rename to crates/agent2/src/thread/tests.rs index 477faf97cba5bf58b93b8fda3599f0920589f388..9bbf95c6cf16703494d17e21a86a941aded3235e 100644 --- a/crates/agent2/src/tests.rs +++ b/crates/agent2/src/thread/tests.rs @@ -1,12 +1,16 @@ use super::*; -use client::{Client, UserStore, proto::language_server_prompt_request}; +use client::{proto::language_server_prompt_request, Client, UserStore}; use fs::FakeFs; -use gpui::{AppContext, TestAppContext}; -use language_model::LanguageModelRegistry; +use gpui::{AppContext, Entity, TestAppContext}; +use language_model::{ + LanguageModel, LanguageModelCompletionError, LanguageModelCompletionEvent, + LanguageModelRegistry, MessageContent, StopReason, +}; use reqwest_client::ReqwestClient; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use std::time::Duration; +use smol::stream::StreamExt; +use std::{sync::Arc, time::Duration}; mod test_tools; use test_tools::*; @@ -69,21 +73,19 @@ async fn test_basic_tool_calls(cx: &mut TestAppContext) { vec![StopReason::ToolUse, StopReason::EndTurn] ); agent.update(cx, |agent, _cx| { - assert!( - agent - .messages - .last() - .unwrap() - .content - .iter() - .any(|content| { - if let MessageContent::Text(text) = content { - text.contains("Ding") - } else { - false - } - }) - ); + assert!(agent + .messages + .last() + .unwrap() + .content + .iter() + .any(|content| { + if let MessageContent::Text(text) = content { + text.contains("Ding") + } else { + false + } + })); }); } @@ -200,7 +202,7 @@ fn stop_events( struct AgentTest { model: Arc, - agent: Entity, + agent: Entity, } async fn setup(cx: &mut TestAppContext) -> AgentTest { @@ -210,7 +212,7 @@ async fn setup(cx: &mut TestAppContext) -> AgentTest { // let project = Project::test(fs.clone(), [], cx).await; // let action_log = cx.new(|_| ActionLog::new(project.clone())); let templates = Templates::new(); - let agent = cx.new(|_| Agent::new(templates)); + let agent = cx.new(|_| Thread::new(templates)); let model = cx .update(|cx| { diff --git a/crates/agent2/src/tests/test_tools.rs b/crates/agent2/src/thread/tests/test_tools.rs similarity index 100% rename from crates/agent2/src/tests/test_tools.rs rename to crates/agent2/src/thread/tests/test_tools.rs diff --git a/crates/agent2/src/tools/glob.rs b/crates/agent2/src/tools/glob.rs index 9f325e1955aef567e94f4afee25fcf02f8304f6e..9434311aaf37470af77f5116833106681f46eb25 100644 --- a/crates/agent2/src/tools/glob.rs +++ b/crates/agent2/src/tools/glob.rs @@ -9,7 +9,7 @@ use worktree::Snapshot as WorktreeSnapshot; use crate::{ templates::{GlobTemplate, Template, Templates}, - AgentTool, + thread::AgentTool, }; // Description is dynamic, see `fn description` below