1#![cfg_attr(docsrs, feature(doc_cfg))]
2#![warn(unreachable_pub)]
3#![cfg_attr(not(test), forbid(unsafe_code))]
4#![cfg_attr(test, deny(unsafe_code))]
5#![warn(missing_docs)]
6extern crate self as gemini_adk_rs;
68
69pub mod a2a;
70pub mod agent;
71pub mod agent_config;
72pub mod agent_session;
73pub mod agent_tool;
74pub mod agents;
75pub mod artifacts;
76pub mod auth;
77pub mod clock;
78pub mod code_executors;
79pub mod confirmation;
80pub mod context;
81pub mod credentials;
82pub mod error;
83pub mod evaluation;
84pub mod events;
85pub mod expr;
86pub mod extract;
87pub mod flow;
88pub mod frame;
89pub mod instruction;
90pub mod live;
91pub mod llm;
92pub mod llm_agent;
93pub mod memory;
94pub mod middleware;
95pub mod optimization;
96pub mod orchestration;
97pub mod planners;
98pub mod plugin;
99pub mod primitives;
100pub mod processors;
101pub mod router;
102pub mod run_config;
103pub mod runner;
104pub mod session;
105pub mod skills;
106pub mod state;
107pub mod tape;
108pub mod telemetry;
109pub mod text;
110pub mod text_agent_tool;
111pub mod text_runner;
112pub mod tool;
113pub mod tools;
114pub mod toolset;
115pub mod utils;
116pub mod workflow;
117
118#[cfg(test)]
119pub(crate) mod test_helpers;
120
121pub type BoxFuture<T> = std::pin::Pin<Box<dyn std::future::Future<Output = T> + Send + 'static>>;
128
129pub type StatePredicate = std::sync::Arc<dyn Fn(&State) -> bool + Send + Sync>;
132
133pub type AsyncSourceFn<In = State> = std::sync::Arc<
141 dyn Fn(
142 In,
143 ) -> std::pin::Pin<
144 Box<dyn std::future::Future<Output = Result<serde_json::Value, String>> + Send>,
145 > + Send
146 + Sync,
147>;
148
149pub use a2a::{A2aMessage, A2aPart, to_a2a_message, to_a2a_parts, to_adk_event, to_genai_parts};
151pub use agent::Agent;
152pub use agent_tool::AgentTool;
153pub use agents::{LoopAgent, ParallelAgent, SequentialAgent};
154#[cfg(feature = "gcs-artifacts")]
155pub use artifacts::GcsArtifactService;
156pub use artifacts::{Artifact, ArtifactService, FileArtifactService, InMemoryArtifactService};
157pub use auth::{
158 AuthConfig, AuthHandler, AuthScheme, CredentialExchanger, CredentialExchangerRegistry,
159 OAuthGrantType,
160};
161pub use code_executors::{
162 BuiltInCodeExecutor, CodeExecutionInput, CodeExecutionResult, CodeExecutor, CodeFile,
163};
164pub use confirmation::{
165 ConfirmationProvider, ConfirmationRequest, StaticConfirmation, ToolConfirmation,
166};
167pub use context::{AgentEvent, CallbackContext, InvocationContext, ToolContext};
168pub use credentials::{
169 AuthCredential, CredentialError, CredentialService, InMemoryCredentialService,
170};
171pub use error::{AgentError, AgentResult, ConfigError, ToolError};
172pub use events::{Event, EventActions, EventType, StructuredEvent};
173pub use extract::{Extract, Recognizer, RecordExtractor};
174pub use flow::{
175 CompiledFlow, Enforcement, Flow, FlowError, FlowErrors, FlowExplanation, FlowMonitor,
176 FlowStack, Guard, Overlay, RepairPolicy, Resume, SharedFlowMonitor, SharedFlowStack,
177 StepAction, ToolSurface, Verdict, Violation, on_enter,
178};
179pub use frame::{ConfirmPolicy, Frame, FrameSpec, SlotRecognizer, SlotSpec, SlotValidator};
180#[doc(hidden)]
185pub mod __macros {
186 pub use async_trait;
187 pub use schemars;
188 pub use serde;
189 pub use serde_json;
190
191 use crate::error::ToolError;
192
193 pub fn tool_output<T: serde::Serialize>(value: T) -> Result<serde_json::Value, ToolError> {
195 serde_json::to_value(value).map_err(|e| {
196 ToolError::ExecutionFailed(format!("the tool's output is not valid JSON: {e}"))
197 })
198 }
199
200 pub fn tool_result<T, E>(result: Result<T, E>) -> Result<serde_json::Value, ToolError>
202 where
203 T: serde::Serialize,
204 E: Into<Box<dyn std::error::Error + Send + Sync>>,
205 {
206 result.map_err(ToolError::from_error).and_then(tool_output)
207 }
208}
209
210pub use gemini_adk_macros_rs::Extract;
217pub use gemini_adk_macros_rs::Frame;
221pub use gemini_adk_macros_rs::tool;
225pub use instruction::inject_session_state;
226pub use live::{
227 EventCallbacks, ExecutionMode, LiveHandle, LiveSessionBuilder, LlmExtractor, PersistenceError,
228 SessionHook, ToolCallSummary, TranscriptBuffer, TranscriptTurn, TurnExtractor,
229};
230pub use llm::{BaseLlm, GeminiLlm, GeminiLlmParams, LlmRegistry, LlmRequest, LlmResponse};
231pub use llm_agent::{LlmAgent, LlmAgentBuilder};
232pub use memory::{InMemoryMemoryService, MemoryEntry, MemoryService};
233pub use middleware::{Middleware, MiddlewareChain};
234pub use orchestration::{AgentMode, Resolver, call_agent, provenance};
235pub use plugin::{Plugin, PluginManager, PluginResult};
236pub use processors::{
237 ContentFilter, InstructionInserter, RequestProcessor, RequestProcessorChain, ResponseProcessor,
238 ResponseProcessorChain,
239};
240pub use router::AgentRegistry;
241pub use run_config::{RunConfig, StreamingMode};
242pub use runner::Runner;
243#[cfg(feature = "database-sessions")]
244pub use session::DatabaseSessionService;
245pub use session::{InMemorySessionService, Session, SessionId, SessionService, db_schema};
246pub use state::{FileJournalSink, JournalSink, MemoryJournalSink};
247pub use state::{PrefixedState, ReadOnlyPrefixedState, StateError};
248pub use state::{SlotEvidence, State, StateMutation, StateMutationOrigin};
249pub use text::{
250 DispatchTextAgent, FallbackTextAgent, FnTextAgent, JoinTextAgent, LlmTextAgent, LoopTextAgent,
251 MapOverTextAgent, ParallelTextAgent, RaceTextAgent, RouteRule, RouteTextAgent,
252 SequentialTextAgent, TapTextAgent, TaskRegistry, TextAgent, TimeoutTextAgent,
253};
254pub use text_agent_tool::TextAgentTool;
255pub use text_runner::{RunEvent, TextRunner};
256pub use tool::{SimpleTool, ToolDispatcher, ToolFunction, ToolPolicy, TypedTool};
257pub use tools::GoogleSearchTool;
258pub use tools::long_running::LongRunningFunctionTool;
259pub use tools::mcp::{McpConnectionParams, McpTool, McpToolset};
260pub use toolset::{StaticToolset, Toolset};
261pub use utils::model_name::{extract_model_name, is_gemini_model, is_gemini2_or_above};
262pub use utils::variant::{GoogleLlmVariant, get_google_llm_variant};
263
264pub use a2a::{AgentCard, AgentSkill, RemoteA2aAgent, RemoteA2aAgentConfig};
266
267pub use evaluation::{
269 EvalCase, EvalMetric, EvalResult, EvalSet, Evaluator, Invocation, LlmAsJudge,
270 PerInvocationResult, ResponseEvaluator, TrajectoryEvaluator,
271};
272
273pub use planners::{BuiltInPlanner, PlanReActPlanner, Planner, PlannerError};
275
276pub use optimization::{
278 AgentOptimizer, EvalSample, OptimizerError, OptimizerResult, Sampler, SimplePromptOptimizer,
279 SimplePromptOptimizerConfig,
280};
281
282pub use code_executors::{
284 ContainerCodeExecutor, ContainerCodeExecutorConfig, UnsafeLocalCodeExecutor,
285};
286#[cfg(feature = "vertex-ai-code-executor")]
287pub use code_executors::{VertexAiCodeExecutor, VertexAiCodeExecutorConfig};
288
289pub use plugin::{ContextFilterPlugin, GlobalInstructionPlugin, ReflectRetryToolPlugin};
291
292pub use memory::{VertexAiMemoryBankConfig, VertexAiMemoryBankService};
294#[cfg(feature = "vertex-ai-rag")]
295pub use memory::{VertexAiRagMemoryConfig, VertexAiRagMemoryService};
296
297#[cfg(feature = "postgres-sessions")]
299pub use session::{PostgresSessionConfig, PostgresSessionService};
300pub use session::{SqliteSessionConfig, SqliteSessionService};
301#[cfg(feature = "vertex-ai-sessions")]
302pub use session::{VertexAiSessionConfig, VertexAiSessionService};
303
304pub use tools::retrieval::{BaseRetrievalTool, FilesRetrievalTool, RetrievalResult};
306#[cfg(feature = "vertex-ai-rag")]
307pub use tools::retrieval::{VertexAiRagConfig, VertexAiRagRetrievalTool};
308pub use tools::{
309 BashToolPolicy, DiscoveryEngineSearchTool, Example, ExampleTool, ExecuteBashTool, ExitLoopTool,
310 GetUserChoiceTool, LoadMemoryTool, PreloadMemoryTool, TransferToAgentTool, UrlContextTool,
311 VertexAiSearchConfig, VertexAiSearchTool,
312};
313
314pub use agent_config::{
316 AgentConfig, AgentConfigError, ToolConfig as AgentToolConfig, discover_agent_configs,
317};
318
319pub use gemini_genai_rs;