mirror of
https://github.com/aljazceru/goose.git
synced 2025-12-19 15:14:21 +01:00
feat: add experiment manager to control whether we enable a feature (#1287)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use cliclack::spinner;
|
||||
use console::style;
|
||||
use goose::agents::{extension::Envs, ExtensionConfig};
|
||||
use goose::config::{Config, ConfigError, ExtensionEntry, ExtensionManager};
|
||||
use goose::config::{Config, ConfigError, ExperimentManager, ExtensionEntry, ExtensionManager};
|
||||
use goose::message::Message;
|
||||
use goose::providers::{create, providers};
|
||||
use mcp_core::Tool;
|
||||
@@ -153,7 +153,7 @@ pub async fn handle_configure() -> Result<(), Box<dyn Error>> {
|
||||
.item(
|
||||
"settings",
|
||||
"Goose Settings",
|
||||
"Set the Goose Mode, Tool Output, and more",
|
||||
"Set the Goose Mode, Tool Output, Experiment and more",
|
||||
)
|
||||
.interact()?;
|
||||
|
||||
@@ -622,14 +622,24 @@ pub fn remove_extension_dialog() -> Result<(), Box<dyn Error>> {
|
||||
}
|
||||
|
||||
pub fn configure_settings_dialog() -> Result<(), Box<dyn Error>> {
|
||||
let setting_type = cliclack::select("What setting would you like to configure?")
|
||||
let mut setting_select_builder = cliclack::select("What setting would you like to configure?")
|
||||
.item("goose_mode", "Goose Mode", "Configure Goose mode")
|
||||
.item(
|
||||
"tool_output",
|
||||
"Tool Output",
|
||||
"Show more or less tool output",
|
||||
)
|
||||
.interact()?;
|
||||
);
|
||||
|
||||
// Conditionally add the "Toggle Experiment" option
|
||||
if ExperimentManager::is_enabled("EXPERIMENT_CONFIG")? {
|
||||
setting_select_builder = setting_select_builder.item(
|
||||
"experiment",
|
||||
"Toggle Experiment",
|
||||
"Enable or disable an experiment feature",
|
||||
);
|
||||
}
|
||||
|
||||
let setting_type = setting_select_builder.interact()?;
|
||||
|
||||
match setting_type {
|
||||
"goose_mode" => {
|
||||
@@ -638,6 +648,9 @@ pub fn configure_settings_dialog() -> Result<(), Box<dyn Error>> {
|
||||
"tool_output" => {
|
||||
configure_tool_output_dialog()?;
|
||||
}
|
||||
"experiment" => {
|
||||
toggle_experiments_dialog()?;
|
||||
}
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
@@ -718,3 +731,43 @@ pub fn configure_tool_output_dialog() -> Result<(), Box<dyn Error>> {
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Configure experiment features that can be used with goose
|
||||
/// Dialog for toggling which experiments are enabled/disabled
|
||||
pub fn toggle_experiments_dialog() -> Result<(), Box<dyn Error>> {
|
||||
let experiments = ExperimentManager::get_all()?;
|
||||
|
||||
if experiments.is_empty() {
|
||||
cliclack::outro("No experiments supported yet.")?;
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// Get currently enabled experiments for the selection
|
||||
let enabled_experiments: Vec<&String> = experiments
|
||||
.iter()
|
||||
.filter(|(_, enabled)| *enabled)
|
||||
.map(|(name, _)| name)
|
||||
.collect();
|
||||
|
||||
// Let user toggle experiments
|
||||
let selected = cliclack::multiselect(
|
||||
"enable experiments: (use \"space\" to toggle and \"enter\" to submit)",
|
||||
)
|
||||
.required(false)
|
||||
.items(
|
||||
&experiments
|
||||
.iter()
|
||||
.map(|(name, _)| (name, name.as_str(), ""))
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
.initial_values(enabled_experiments)
|
||||
.interact()?;
|
||||
|
||||
// Update enabled status for each experiments
|
||||
for name in experiments.iter().map(|(name, _)| name) {
|
||||
ExperimentManager::set_enabled(name, selected.iter().any(|&s| s.as_str() == name))?;
|
||||
}
|
||||
|
||||
cliclack::outro("Experiments settings updated successfully")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user