use everruns_core::AssembledTurnContext;
use crate::{ContentPart, MessageRole, ModelSpec};
#[derive(Debug, Clone)]
pub struct SessionContext {
pub model: ModelSpec,
pub messages: Vec<ContextMessage>,
pub tools: Vec<ToolInfo>,
pub instructions: String,
pub locale: Option<String>,
pub plugin_warnings: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct ContextMessage {
pub role: MessageRole,
pub content: Vec<ContentPart>,
}
#[derive(Debug, Clone)]
pub struct ToolInfo {
pub name: String,
pub description: String,
pub parameters: serde_json::Value,
}
impl SessionContext {
pub(crate) fn from_runtime(
context: AssembledTurnContext,
plugin_warnings: Vec<String>,
) -> Self {
let model = context.model_with_provider.canonical_parts().0;
let messages = context
.messages
.into_iter()
.map(|message| ContextMessage {
role: message.role,
content: message.content,
})
.collect();
let tools = context
.runtime_agent
.tools
.iter()
.map(|tool| ToolInfo {
name: tool.name().to_string(),
description: tool.description().to_string(),
parameters: tool.parameters().clone(),
})
.collect();
Self {
model,
messages,
tools,
instructions: context.runtime_agent.system_prompt,
locale: context.resolved_locale,
plugin_warnings,
}
}
}