Sessions required (#5548)
Co-authored-by: Douwe Osinga <douwe@squareup.com>
This commit is contained in:
@@ -6,7 +6,7 @@ use goose::config::ExtensionEntry;
|
||||
use goose::conversation::Conversation;
|
||||
use goose::permission::permission_confirmation::PrincipalType;
|
||||
use goose::providers::base::{ConfigKey, ModelInfo, ProviderMetadata, ProviderType};
|
||||
use goose::session::{Session, SessionInsights};
|
||||
use goose::session::{Session, SessionInsights, SessionType};
|
||||
use rmcp::model::{
|
||||
Annotations, Content, EmbeddedResource, Icon, ImageContent, JsonObject, RawAudioContent,
|
||||
RawEmbeddedResource, RawImageContent, RawResource, RawTextContent, ResourceContents, Role,
|
||||
@@ -444,6 +444,7 @@ derive_utoipa!(Icon as IconSchema);
|
||||
ModelInfo,
|
||||
Session,
|
||||
SessionInsights,
|
||||
SessionType,
|
||||
Conversation,
|
||||
IconSchema,
|
||||
goose::session::extension_data::ExtensionData,
|
||||
|
||||
@@ -18,6 +18,7 @@ use goose::prompt_template::render_global_file;
|
||||
use goose::providers::{create, create_with_named_model};
|
||||
use goose::recipe::Recipe;
|
||||
use goose::recipe_deeplink;
|
||||
use goose::session::session_manager::SessionType;
|
||||
use goose::session::{Session, SessionManager};
|
||||
use goose::{
|
||||
agents::{extension::ToolInfo, extension_manager::get_parameter_names},
|
||||
@@ -137,15 +138,16 @@ async fn start_agent(
|
||||
let counter = state.session_counter.fetch_add(1, Ordering::SeqCst) + 1;
|
||||
let name = format!("New session {}", counter);
|
||||
|
||||
let mut session = SessionManager::create_session(PathBuf::from(&working_dir), name)
|
||||
.await
|
||||
.map_err(|err| {
|
||||
error!("Failed to create session: {}", err);
|
||||
ErrorResponse {
|
||||
message: format!("Failed to create session: {}", err),
|
||||
status: StatusCode::BAD_REQUEST,
|
||||
}
|
||||
})?;
|
||||
let mut session =
|
||||
SessionManager::create_session(PathBuf::from(&working_dir), name, SessionType::User)
|
||||
.await
|
||||
.map_err(|err| {
|
||||
error!("Failed to create session: {}", err);
|
||||
ErrorResponse {
|
||||
message: format!("Failed to create session: {}", err),
|
||||
status: StatusCode::BAD_REQUEST,
|
||||
}
|
||||
})?;
|
||||
|
||||
if let Some(recipe) = original_recipe {
|
||||
SessionManager::update_session(&session.id)
|
||||
|
||||
@@ -257,17 +257,30 @@ pub async fn reply(
|
||||
|
||||
let session_config = SessionConfig {
|
||||
id: session_id.clone(),
|
||||
working_dir: session.working_dir.clone(),
|
||||
schedule_id: session.schedule_id.clone(),
|
||||
execution_mode: None,
|
||||
max_turns: None,
|
||||
retry_config: None,
|
||||
};
|
||||
|
||||
let user_message = match messages.last() {
|
||||
Some(msg) => msg,
|
||||
_ => {
|
||||
let _ = stream_event(
|
||||
MessageEvent::Error {
|
||||
error: "Reply started with empty messages".to_string(),
|
||||
},
|
||||
&task_tx,
|
||||
&task_cancel,
|
||||
)
|
||||
.await;
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
let mut stream = match agent
|
||||
.reply(
|
||||
messages.clone(),
|
||||
Some(session_config.clone()),
|
||||
user_message.clone(),
|
||||
session_config,
|
||||
Some(task_cancel.clone()),
|
||||
)
|
||||
.await
|
||||
|
||||
@@ -115,7 +115,6 @@ async fn create_schedule(
|
||||
paused: false,
|
||||
current_session_id: None,
|
||||
process_start_time: None,
|
||||
execution_mode: req.execution_mode.or(Some("background".to_string())), // Default to background
|
||||
};
|
||||
scheduler
|
||||
.add_scheduled_job(job.clone())
|
||||
|
||||
Reference in New Issue
Block a user