agents_runtime/agent/
api.rs1use super::builder::ConfigurableAgentBuilder;
7use super::config::{CreateDeepAgentParams, DeepAgentConfig};
8use super::runtime::DeepAgent;
9use crate::providers::{OpenAiChatModel, OpenAiConfig};
10use agents_core::llm::LanguageModel;
11use std::sync::Arc;
12
13pub fn get_default_model() -> anyhow::Result<Arc<dyn LanguageModel>> {
23 let config = OpenAiConfig {
24 api_key: std::env::var("OPENAI_API_KEY")
25 .map_err(|_| anyhow::anyhow!("OPENAI_API_KEY environment variable is required"))?,
26 model: "gpt-4o-mini".to_string(),
27 api_url: None,
28 custom_headers: Vec::new(),
29 };
30 let model: Arc<dyn LanguageModel> = Arc::new(OpenAiChatModel::new(config)?);
31 Ok(model)
32}
33
34pub fn create_deep_agent(params: CreateDeepAgentParams) -> anyhow::Result<DeepAgent> {
48 let CreateDeepAgentParams {
49 tools,
50 instructions,
51 middleware,
52 model,
53 subagents,
54 context_schema,
55 checkpointer,
56 tool_configs,
57 } = params;
58
59 if context_schema.is_some() {
60 tracing::warn!(
61 "context_schema parameter for create_deep_agent is not yet supported in Rust SDK"
62 );
63 }
64
65 if !middleware.is_empty() {
66 tracing::warn!("middleware parameter for create_deep_agent is not yet supported in Rust SDK ({} entries)", middleware.len());
67 }
68
69 let mut builder = ConfigurableAgentBuilder::new(instructions);
70
71 let model = match model {
72 Some(model) => model,
73 None => get_default_model()?,
74 };
75 builder = builder.with_model(model);
76
77 if !tools.is_empty() {
78 builder = builder.with_tools(tools);
79 }
80
81 if !subagents.is_empty() {
82 builder = builder.with_subagent_config(subagents);
83 }
84
85 if let Some(checkpointer) = checkpointer {
86 builder = builder.with_checkpointer(checkpointer);
87 }
88
89 if !tool_configs.is_empty() {
90 for (tool, policy) in tool_configs {
91 builder = builder.with_tool_interrupt(tool, policy);
92 }
93 }
94
95 builder.build()
96}
97
98pub fn create_async_deep_agent(params: CreateDeepAgentParams) -> anyhow::Result<DeepAgent> {
105 create_deep_agent(params)
106}
107
108pub(crate) fn create_deep_agent_from_config(config: DeepAgentConfig) -> DeepAgent {
110 super::runtime::create_deep_agent_from_config(config)
111}
112
113pub(crate) fn create_async_deep_agent_from_config(config: DeepAgentConfig) -> DeepAgent {
115 super::runtime::create_deep_agent_from_config(config)
116}