agents_runtime/agent/
api.rs1use super::builder::ConfigurableAgentBuilder;
7use super::config::{CreateDeepAgentParams, DeepAgentConfig};
8use super::runtime::DeepAgent;
9use crate::providers::{AnthropicConfig, AnthropicMessagesModel};
10use agents_core::llm::LanguageModel;
11use std::sync::Arc;
12
13pub fn get_default_model() -> anyhow::Result<Arc<dyn LanguageModel>> {
17 let config = AnthropicConfig {
18 api_key: std::env::var("ANTHROPIC_API_KEY")
19 .map_err(|_| anyhow::anyhow!("ANTHROPIC_API_KEY environment variable is required"))?,
20 model: "claude-sonnet-4-20250514".to_string(),
21 max_output_tokens: 64000,
22 api_url: None,
23 api_version: None,
24 };
25 let model: Arc<dyn LanguageModel> = Arc::new(AnthropicMessagesModel::new(config)?);
26 Ok(model)
27}
28
29pub fn create_deep_agent(params: CreateDeepAgentParams) -> anyhow::Result<DeepAgent> {
43 let CreateDeepAgentParams {
44 tools,
45 instructions,
46 middleware,
47 model,
48 subagents,
49 context_schema,
50 checkpointer,
51 tool_configs,
52 } = params;
53
54 if context_schema.is_some() {
55 tracing::warn!(
56 "context_schema parameter for create_deep_agent is not yet supported in Rust SDK"
57 );
58 }
59
60 if !middleware.is_empty() {
61 tracing::warn!("middleware parameter for create_deep_agent is not yet supported in Rust SDK ({} entries)", middleware.len());
62 }
63
64 let mut builder = ConfigurableAgentBuilder::new(instructions);
65
66 let model = match model {
67 Some(model) => model,
68 None => get_default_model()?,
69 };
70 builder = builder.with_model(model);
71
72 if !tools.is_empty() {
73 builder = builder.with_tools(tools);
74 }
75
76 if !subagents.is_empty() {
77 builder = builder.with_subagent_config(subagents);
78 }
79
80 if let Some(checkpointer) = checkpointer {
81 builder = builder.with_checkpointer(checkpointer);
82 }
83
84 if !tool_configs.is_empty() {
85 for (tool, policy) in tool_configs {
86 builder = builder.with_tool_interrupt(tool, policy);
87 }
88 }
89
90 builder.build()
91}
92
93pub fn create_async_deep_agent(params: CreateDeepAgentParams) -> anyhow::Result<DeepAgent> {
100 create_deep_agent(params)
101}
102
103pub(crate) fn create_deep_agent_from_config(config: DeepAgentConfig) -> DeepAgent {
105 super::runtime::create_deep_agent_from_config(config)
106}
107
108pub(crate) fn create_async_deep_agent_from_config(config: DeepAgentConfig) -> DeepAgent {
110 super::runtime::create_deep_agent_from_config(config)
111}