diff --git a/crates/goose-cli/src/commands/session.rs b/crates/goose-cli/src/commands/session.rs index 1771d716a0..6fe74ef2f7 100644 --- a/crates/goose-cli/src/commands/session.rs +++ b/crates/goose-cli/src/commands/session.rs @@ -5,7 +5,7 @@ use crate::session::Session; use goose::agent::Agent; use goose::providers::factory; -use crate::prompt::CliclackPrompt; +use crate::prompt::cliclack::CliclackPrompt; use rand::{distributions::Alphanumeric, Rng}; use crate::commands::expected_config::get_recommended_models; diff --git a/crates/goose-cli/src/prompt.rs b/crates/goose-cli/src/prompt/cliclack.rs similarity index 83% rename from crates/goose-cli/src/prompt.rs rename to crates/goose-cli/src/prompt/cliclack.rs index 2ebb495968..eb33146d46 100644 --- a/crates/goose-cli/src/prompt.rs +++ b/crates/goose-cli/src/prompt/cliclack.rs @@ -5,47 +5,7 @@ use bat::WrappingMode; use cliclack::{input, spinner}; use goose::models::message::{Message, MessageContent}; -pub trait Prompt { - fn render(&mut self, message: Box); - fn get_input(&mut self) -> Result; - fn show_busy(&self); - fn hide_busy(&self); - fn close(&self); - fn goose_ready(&self) { - self.draw_goose(); - } - - fn draw_goose(&self) { - println!( - r#" - __ - ( 0)> - || - || - __||_ - <=/ \=> - \_____/ - | | - ^ ^ - "# - ); - } -} - -pub struct Input { - pub input_type: InputType, - pub content: Option, // Optional content as sometimes the user may be issuing a command eg. (Exit) -} - -pub enum InputType { - Message, // User sent a message - Exit, // User wants to exit the session -} - -pub enum Theme { - Light, - Dark, -} +use super::prompt::{Input, InputType, Prompt, Theme}; pub struct CliclackPrompt { spinner: cliclack::ProgressBar, @@ -136,18 +96,16 @@ impl Prompt for CliclackPrompt { for message_content in &message.content { match message_content { MessageContent::Text(text) => print(&text.text, theme), - MessageContent::ToolRequest(tool_request) => { - match &tool_request.tool_call { - Ok(call) => { - print_tool_request( - &serde_json::to_string_pretty(&call.arguments).unwrap(), - theme, - &call.name, - ); - } - Err(e) => print(&e.to_string(), theme), + MessageContent::ToolRequest(tool_request) => match &tool_request.tool_call { + Ok(call) => { + print_tool_request( + &serde_json::to_string_pretty(&call.arguments).unwrap(), + theme, + &call.name, + ); } - } + Err(e) => print(&e.to_string(), theme), + }, MessageContent::ToolResponse(tool_response) => { match &tool_response.tool_result { Ok(output) => { @@ -166,7 +124,7 @@ impl Prompt for CliclackPrompt { } Err(e) => print(&e.to_string(), theme), } - }, + } MessageContent::Image(image) => { println!("Image: [data: {}, type: {}]", image.data, image.mime_type); } diff --git a/crates/goose-cli/src/prompt/mod.rs b/crates/goose-cli/src/prompt/mod.rs new file mode 100644 index 0000000000..b17e551eaa --- /dev/null +++ b/crates/goose-cli/src/prompt/mod.rs @@ -0,0 +1,2 @@ +pub mod cliclack; +pub mod prompt; diff --git a/crates/goose-cli/src/prompt/prompt.rs b/crates/goose-cli/src/prompt/prompt.rs new file mode 100644 index 0000000000..e792523399 --- /dev/null +++ b/crates/goose-cli/src/prompt/prompt.rs @@ -0,0 +1,44 @@ +use anyhow::Result; +use goose::models::message::Message; + +pub trait Prompt { + fn render(&mut self, message: Box); + fn get_input(&mut self) -> Result; + fn show_busy(&self); + fn hide_busy(&self); + fn close(&self); + fn goose_ready(&self) { + self.draw_goose(); + } + + fn draw_goose(&self) { + println!( + r#" + __ + ( 0)> + || + || + __||_ + <=/ \=> + \_____/ + | | + ^ ^ + "# + ); + } +} + +pub struct Input { + pub input_type: InputType, + pub content: Option, // Optional content as sometimes the user may be issuing a command eg. (Exit) +} + +pub enum InputType { + Message, // User sent a message + Exit, // User wants to exit the session +} + +pub enum Theme { + Light, + Dark, +} diff --git a/crates/goose-cli/src/session.rs b/crates/goose-cli/src/session.rs index 23e7a01a62..c123ad8350 100644 --- a/crates/goose-cli/src/session.rs +++ b/crates/goose-cli/src/session.rs @@ -1,8 +1,7 @@ use anyhow::Result; use futures::StreamExt; -use crate::prompt::InputType; -use crate::prompt::Prompt; +use crate::prompt::prompt::{InputType, Prompt}; use goose::agent::Agent; use goose::developer::DeveloperSystem;