Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
crates/goose/src/agents/snapshots/*.snap linguist-language=Text
20 changes: 9 additions & 11 deletions crates/goose/src/agents/agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1341,6 +1341,8 @@ impl Agent {

let extensions_info = self.extension_manager.get_extensions_info().await;
tracing::debug!("Retrieved {} extensions info", extensions_info.len());
let (extension_count, tool_count) =
self.extension_manager.get_extension_and_tool_counts().await;

// Get model name from provider
let provider = self.provider().await.map_err(|e| {
Expand All @@ -1352,15 +1354,12 @@ impl Agent {
tracing::debug!("Using model: {}", model_name);

let prompt_manager = self.prompt_manager.lock().await;
let system_prompt = prompt_manager.build_system_prompt(
extensions_info,
self.frontend_instructions.lock().await.clone(),
self.extension_manager
.suggest_disable_extensions_prompt()
.await,
model_name,
false,
);
let system_prompt = prompt_manager
.builder(model_name)
.with_extensions(extensions_info.into_iter())
.with_frontend_instructions(self.frontend_instructions.lock().await.clone())
.with_extension_and_tool_counts(extension_count, tool_count)
.build();

let recipe_prompt = prompt_manager.get_recipe_prompt().await;
let tools = self
Expand Down Expand Up @@ -1584,8 +1583,7 @@ mod tests {
);

let prompt_manager = agent.prompt_manager.lock().await;
let system_prompt =
prompt_manager.build_system_prompt(vec![], None, Value::Null, "gpt-4o", false);
let system_prompt = prompt_manager.builder("gpt-4o").build();

let final_output_tool_ref = agent.final_output_tool.lock().await;
let final_output_tool_system_prompt =
Expand Down
24 changes: 2 additions & 22 deletions crates/goose/src/agents/extension_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,7 @@ impl ExtensionManager {
Ok(())
}

pub async fn suggest_disable_extensions_prompt(&self) -> Value {
pub async fn get_extension_and_tool_counts(&self) -> (usize, usize) {
let enabled_extensions_count = self.extensions.lock().await.len();

let total_tools = self
Expand All @@ -558,27 +558,7 @@ impl ExtensionManager {
.map(|tools| tools.len())
.unwrap_or(0);

// Check if either condition is met
const MIN_EXTENSIONS: usize = 5;
const MIN_TOOLS: usize = 50;

if enabled_extensions_count > MIN_EXTENSIONS || total_tools > MIN_TOOLS {
Value::String(format!(
"The user currently has enabled {} extensions with a total of {} tools. \
Since this exceeds the recommended limits ({} extensions or {} tools), \
you should ask the user if they would like to disable some extensions for this session.\n\n\
Use the search_available_extensions tool to find extensions available to disable. \
You should only disable extensions found from the search_available_extensions tool. \
List all the extensions available to disable in the response. \
Explain that minimizing extensions helps with the recall of the correct tools to use.",
enabled_extensions_count,
total_tools,
MIN_EXTENSIONS,
MIN_TOOLS,
))
} else {
Value::String(String::new()) // Empty string if under limits
}
(enabled_extensions_count, total_tools)
}

pub async fn list_extensions(&self) -> ExtensionResult<Vec<String>> {
Expand Down
Loading
Loading