use super::builder::ConfigurableAgentBuilder;
use super::config::{CreateDeepAgentParams, DeepAgentConfig};
use super::runtime::DeepAgent;
use crate::providers::{OpenAiChatModel, OpenAiConfig};
use agents_core::llm::LanguageModel;
use std::sync::Arc;
pub fn get_default_model() -> anyhow::Result<Arc<dyn LanguageModel>> {
let config = OpenAiConfig {
api_key: std::env::var("OPENAI_API_KEY")
.map_err(|_| anyhow::anyhow!("OPENAI_API_KEY environment variable is required"))?,
model: "gpt-4o-mini".to_string(),
api_url: None,
custom_headers: Vec::new(),
};
let model: Arc<dyn LanguageModel> = Arc::new(OpenAiChatModel::new(config)?);
Ok(model)
}
pub fn create_deep_agent(params: CreateDeepAgentParams) -> anyhow::Result<DeepAgent> {
let CreateDeepAgentParams {
tools,
instructions,
middleware,
model,
subagents,
context_schema,
checkpointer,
tool_configs,
} = params;
if context_schema.is_some() {
tracing::warn!(
"context_schema parameter for create_deep_agent is not yet supported in Rust SDK"
);
}
if !middleware.is_empty() {
tracing::warn!("middleware parameter for create_deep_agent is not yet supported in Rust SDK ({} entries)", middleware.len());
}
let mut builder = ConfigurableAgentBuilder::new(instructions);
let model = match model {
Some(model) => model,
None => get_default_model()?,
};
builder = builder.with_model(model);
if !tools.is_empty() {
builder = builder.with_tools(tools);
}
if !subagents.is_empty() {
builder = builder.with_subagent_config(subagents);
}
if let Some(checkpointer) = checkpointer {
builder = builder.with_checkpointer(checkpointer);
}
if !tool_configs.is_empty() {
for (tool, policy) in tool_configs {
builder = builder.with_tool_interrupt(tool, policy);
}
}
builder.build()
}
pub fn create_async_deep_agent(params: CreateDeepAgentParams) -> anyhow::Result<DeepAgent> {
create_deep_agent(params)
}
pub(crate) fn create_deep_agent_from_config(config: DeepAgentConfig) -> DeepAgent {
super::runtime::create_deep_agent_from_config(config)
}
pub(crate) fn create_async_deep_agent_from_config(config: DeepAgentConfig) -> DeepAgent {
super::runtime::create_deep_agent_from_config(config)
}