Persist provider name and model config in the session (#5419)
This commit is contained in:
@@ -3,7 +3,7 @@ use std::future::Future;
|
||||
use std::pin::Pin;
|
||||
use std::sync::Arc;
|
||||
|
||||
use anyhow::{anyhow, Result};
|
||||
use anyhow::{anyhow, Context, Result};
|
||||
use futures::stream::BoxStream;
|
||||
use futures::{stream, FutureExt, Stream, StreamExt, TryStreamExt};
|
||||
use uuid::Uuid;
|
||||
@@ -1259,13 +1259,23 @@ impl Agent {
|
||||
prompt_manager.add_system_prompt_extra(instruction);
|
||||
}
|
||||
|
||||
pub async fn update_provider(&self, provider: Arc<dyn Provider>) -> Result<()> {
|
||||
pub async fn update_provider(
|
||||
&self,
|
||||
provider: Arc<dyn Provider>,
|
||||
session_id: &str,
|
||||
) -> Result<()> {
|
||||
let mut current_provider = self.provider.lock().await;
|
||||
*current_provider = Some(provider.clone());
|
||||
|
||||
self.update_router_tool_selector(Some(provider), None)
|
||||
self.update_router_tool_selector(Some(provider.clone()), None)
|
||||
.await?;
|
||||
Ok(())
|
||||
|
||||
SessionManager::update_session(session_id)
|
||||
.provider_name(provider.get_name())
|
||||
.model_config(provider.get_model_config())
|
||||
.apply()
|
||||
.await
|
||||
.context("Failed to persist provider config to session")
|
||||
}
|
||||
|
||||
pub async fn update_router_tool_selector(
|
||||
|
||||
@@ -18,6 +18,8 @@ use crate::providers::toolshim::{
|
||||
|
||||
use crate::agents::recipe_tools::dynamic_task_tools::should_enabled_subagents;
|
||||
use crate::session::SessionManager;
|
||||
#[cfg(test)]
|
||||
use crate::session::SessionType;
|
||||
use rmcp::model::Tool;
|
||||
|
||||
fn coerce_value(s: &str, schema: &Value) -> Value {
|
||||
@@ -439,9 +441,16 @@ mod tests {
|
||||
) -> anyhow::Result<()> {
|
||||
let agent = crate::agents::Agent::new();
|
||||
|
||||
let session = SessionManager::create_session(
|
||||
std::path::PathBuf::default(),
|
||||
"test-prepare-tools".to_string(),
|
||||
SessionType::Hidden,
|
||||
)
|
||||
.await?;
|
||||
|
||||
let model_config = ModelConfig::new("test-model").unwrap();
|
||||
let provider = std::sync::Arc::new(MockProvider { model_config });
|
||||
agent.update_provider(provider).await?;
|
||||
agent.update_provider(provider, &session.id).await?;
|
||||
|
||||
// Disable the router to trigger sorting
|
||||
agent.disable_router_for_recipe().await;
|
||||
|
||||
@@ -117,7 +117,7 @@ fn get_agent_messages(
|
||||
.map_err(|e| anyhow!("Failed to get sub agent session file path: {}", e))?;
|
||||
|
||||
agent
|
||||
.update_provider(task_config.provider)
|
||||
.update_provider(task_config.provider, &session_id)
|
||||
.await
|
||||
.map_err(|e| anyhow!("Failed to set provider on sub agent: {}", e))?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user