adk_cli/
serve.rs

1use adk_core::AgentLoader;
2use adk_server::{ServerConfig, create_app};
3use adk_session::InMemorySessionService;
4use anyhow::Result;
5use std::sync::Arc;
6
7#[allow(dead_code)] // Part of CLI API, not currently used
8pub async fn run_serve(agent_loader: Arc<dyn AgentLoader>, port: u16) -> Result<()> {
9    // Initialize telemetry with ADK-Go style exporter
10    let span_exporter = adk_telemetry::init_with_adk_exporter("adk-server")
11        .map_err(|e| anyhow::anyhow!("Failed to initialize telemetry: {}", e))?;
12
13    let session_service = Arc::new(InMemorySessionService::new());
14
15    let config = ServerConfig::new(agent_loader, session_service).with_span_exporter(span_exporter);
16
17    let app = create_app(config);
18
19    let addr = format!("0.0.0.0:{}", port);
20    let listener = tokio::net::TcpListener::bind(&addr).await?;
21
22    println!("ADK Server starting on http://{}", addr);
23    println!("Press Ctrl+C to stop");
24
25    axum::serve(listener, app).await?;
26
27    Ok(())
28}