diff --git a/crates/openfang-api/src/routes.rs b/crates/openfang-api/src/routes.rs index 456d867f0..a7b18f3af 100644 --- a/crates/openfang-api/src/routes.rs +++ b/crates/openfang-api/src/routes.rs @@ -225,6 +225,7 @@ pub async fn list_agents(State(state): State>) -> impl IntoRespons "auth_status": auth_status, "ready": ready, "profile": e.manifest.profile, + "temperature": e.manifest.model.temperature, "identity": { "emoji": e.identity.emoji, "avatar_url": e.identity.avatar_url, @@ -1362,6 +1363,7 @@ pub async fn get_agent( "mcp_servers": entry.manifest.mcp_servers, "mcp_servers_mode": if entry.manifest.mcp_servers.is_empty() { "all" } else { "allowlist" }, "fallback_models": entry.manifest.fallback_models, + "temperature": entry.manifest.model.temperature, })), ) } @@ -8644,6 +8646,7 @@ pub struct PatchAgentConfigRequest { pub api_key_env: Option, pub base_url: Option, pub fallback_models: Option>, + pub temperature: Option, } /// PATCH /api/agents/{id}/config — Hot-update agent name, description, system prompt, and identity. @@ -8865,6 +8868,27 @@ pub async fn patch_agent_config( } } + // Update temperature + if let Some(temp) = req.temperature { + if !(0.0..=2.0).contains(&temp) { + return ( + StatusCode::BAD_REQUEST, + Json(serde_json::json!({"error": "Temperature must be between 0.0 and 2.0"})), + ); + } + if state + .kernel + .registry + .update_temperature(agent_id, temp) + .is_err() + { + return ( + StatusCode::NOT_FOUND, + Json(serde_json::json!({"error": "Agent not found"})), + ); + } + } + // Persist updated manifest to database so changes survive restart if let Some(entry) = state.kernel.registry.get(agent_id) { if let Err(e) = state.kernel.memory.save_agent(&entry) { diff --git a/crates/openfang-api/static/index_body.html b/crates/openfang-api/static/index_body.html index 539f1aa29..e30bc18a5 100644 --- a/crates/openfang-api/static/index_body.html +++ b/crates/openfang-api/static/index_body.html @@ -1025,6 +1025,7 @@

+