Stringly typed config (#5463)

This commit is contained in:
Jack Amadeo
2025-10-30 15:13:32 -04:00
committed by GitHub
parent 1714990d42
commit 2970b5fa34
30 changed files with 243 additions and 275 deletions
+10 -16
View File
@@ -12,7 +12,7 @@ use axum::{
use goose::config::PermissionManager;
use goose::agents::ExtensionConfig;
use goose::config::Config;
use goose::config::{Config, GooseMode};
use goose::model::ModelConfig;
use goose::prompt_template::render_global_file;
use goose::providers::{create, create_with_named_model};
@@ -211,15 +211,12 @@ async fn resume_agent(
let config = Config::global();
let provider_result = async {
let provider_name: String =
config
.get_param("GOOSE_PROVIDER")
.map_err(|_| ErrorResponse {
message: "Could not configure agent: missing provider".into(),
status: StatusCode::INTERNAL_SERVER_ERROR,
})?;
let provider_name: String = config.get_goose_provider().map_err(|_| ErrorResponse {
message: "Could not configure agent: missing provider".into(),
status: StatusCode::INTERNAL_SERVER_ERROR,
})?;
let model: String = config.get_param("GOOSE_MODEL").map_err(|_| ErrorResponse {
let model: String = config.get_goose_model().map_err(|_| ErrorResponse {
message: "Could not configure agent: missing model".into(),
status: StatusCode::INTERNAL_SERVER_ERROR,
})?;
@@ -348,7 +345,7 @@ async fn get_tools(
Query(query): Query<GetToolsQuery>,
) -> Result<Json<Vec<ToolInfo>>, StatusCode> {
let config = Config::global();
let goose_mode = config.get_param("GOOSE_MODE").unwrap_or("auto".to_string());
let goose_mode = config.get_goose_mode().unwrap_or(GooseMode::Auto);
let agent = state.get_agent_for_route(query.session_id).await?;
let permission_manager = PermissionManager::default();
@@ -360,9 +357,9 @@ async fn get_tools(
let permission = permission_manager
.get_user_permission(&tool.name)
.or_else(|| {
if goose_mode == "smart_approve" {
if goose_mode == GooseMode::SmartApprove {
permission_manager.get_smart_approve_permission(&tool.name)
} else if goose_mode == "approve" {
} else if goose_mode == GooseMode::Approve {
Some(PermissionLevel::AskBefore)
} else {
None
@@ -406,10 +403,7 @@ async fn update_agent_provider(
.await?;
let config = Config::global();
let model = match payload
.model
.or_else(|| config.get_param("GOOSE_MODEL").ok())
{
let model = match payload.model.or_else(|| config.get_goose_model().ok()) {
Some(m) => m,
None => {
tracing::error!("No model specified");
+1 -1
View File
@@ -251,7 +251,7 @@ async fn transcribe_elevenlabs_handler(
// Migrate to secret storage
if let Err(e) = config.set(
"ELEVENLABS_API_KEY",
serde_json::Value::String(key.clone()),
&serde_json::Value::String(key.clone()),
true,
) {
tracing::error!("Failed to migrate ElevenLabs API key: {:?}", e);
@@ -101,7 +101,7 @@ pub async fn upsert_config(
Json(query): Json<UpsertConfigQuery>,
) -> Result<Json<Value>, StatusCode> {
let config = Config::global();
let result = config.set(&query.key, query.value, query.is_secret);
let result = config.set(&query.key, &query.value, query.is_secret);
match result {
Ok(_) => Ok(Json(Value::String(format!("Upserted key {}", query.key)))),