gemini_adk_fluent_rs/lib.rs
1#![warn(missing_docs)]
2//! # gemini-adk-fluent-rs
3//!
4//! Fluent developer experience layer for the Gemini Live agent stack.
5//! This is the highest-level crate in the workspace, providing a builder API,
6//! operator algebra, and composition modules that sit on top of
7//! [`gemini_adk_rs`] (agent runtime) and [`gemini_genai_rs`] (wire protocol).
8//!
9//! ## Module Organization
10//!
11//! | Module | Purpose |
12//! |--------|---------|
13//! | [`builder`] | Copy-on-write immutable `AgentBuilder` for declarative agent configuration |
14//! | [`compose`] | S·C·T·P·M·A operator algebra for composing agent primitives |
15//! | [`live`] | `Live` session handle — callback-driven full-duplex event handling |
16//! | [`live_builders`] | Builder types for live session configuration |
17//! | [`operators`] | Operator combinators for composing agents |
18//! | [`patterns`] | Pre-built composition patterns for common use cases |
19//! | [`testing`] | Test utilities and mock helpers |
20//!
21//! ## Quick Start
22//!
23//! ```rust,ignore
24//! use gemini_adk_fluent_rs::prelude::*;
25//!
26//! let agent = AgentBuilder::new("my-agent")
27//! .model(GeminiModel::Gemini2_0Flash)
28//! .instruction("You are a helpful assistant.")
29//! .build();
30//! ```
31//!
32//! ## Relationship to Other Crates
33//!
34//! - **`gemini-live`** (L0): Wire protocol, transport, types — re-exported via [`gemini_genai_rs`]
35//! - **`gemini-adk-rs`** (L1): Agent runtime, tools, sessions — re-exported via [`gemini_adk_rs`]
36//! - **`gemini-adk-fluent-rs`** (L2): This crate — ergonomic builder API and composition
37
38pub mod a2a;
39pub mod builder;
40pub mod compose;
41pub mod live;
42pub mod live_builders;
43pub mod operators;
44pub mod patterns;
45pub mod testing;
46
47pub use gemini_adk_rs;
48pub use gemini_genai_rs;
49
50/// Clone multiple bindings for use in `move` closures, reducing Arc/clone boilerplate.
51///
52/// # Example
53///
54/// ```rust,ignore
55/// use gemini_adk_fluent_rs::let_clone;
56/// use std::sync::Arc;
57///
58/// let state = Arc::new(42);
59/// let writer = Arc::new("hello");
60///
61/// let_clone!(state, writer);
62/// tokio::spawn(async move {
63/// println!("{state} {writer}");
64/// });
65/// ```
66#[macro_export]
67macro_rules! let_clone {
68 ($($name:ident),+ $(,)?) => {
69 $(let $name = $name.clone();)+
70 };
71}
72
73/// Convenience re-exports for common types across all layers.
74pub mod prelude {
75 pub use crate::a2a::{A2AServer, AgentRegistry, RemoteAgent, SkillDeclaration};
76 pub use crate::builder::*;
77 pub use crate::compose::{Ctx, A, C, E, G, M, P, S, T};
78 pub use crate::live::Live;
79 pub use crate::live_builders::*;
80 pub use crate::operators::*;
81 pub use crate::patterns::*;
82 pub use crate::testing::*;
83 // Note: gemini_adk_rs::agent::Agent trait is NOT re-exported here because
84 // it conflicts with the L2 Agent type alias (= AgentBuilder).
85 // Use gemini_adk_rs::agent::Agent directly if you need the L1 trait.
86 pub use gemini_adk_rs::agent_session::*;
87 pub use gemini_adk_rs::error::{AgentError, ToolError};
88 pub use gemini_adk_rs::live::{
89 CallbackMode, ContextDelivery, DefaultResultFormatter, DeferredWriter, EventCallbacks,
90 ExtractionTrigger, FsPersistence, LiveEvent, LiveHandle, LiveSessionBuilder, LlmExtractor,
91 MemoryPersistence, NeedsFulfillment, PendingContext, RepairAction, RepairConfig,
92 ResultFormatter, SessionPersistence, SessionSnapshot, SoftTurnDetector, SteeringMode,
93 ToolExecutionMode, TranscriptBuffer, TranscriptTurn, TurnExtractor,
94 };
95 pub use gemini_adk_rs::llm::{BaseLlm, GeminiLlm, GeminiLlmParams, LlmRequest, LlmResponse};
96 pub use gemini_adk_rs::state::{State, StateKey};
97 pub use gemini_adk_rs::text::{
98 DispatchTextAgent, FallbackTextAgent, FnTextAgent, JoinTextAgent, LlmTextAgent,
99 LoopTextAgent, MapOverTextAgent, ParallelTextAgent, RaceTextAgent, RouteRule,
100 RouteTextAgent, SequentialTextAgent, TapTextAgent, TaskRegistry, TextAgent,
101 TimeoutTextAgent,
102 };
103 // New ADK-JS parity types
104 pub use gemini_adk_rs::confirmation::ToolConfirmation;
105 pub use gemini_adk_rs::context::{CallbackContext, ToolContext};
106 pub use gemini_adk_rs::credentials::{
107 AuthCredential, CredentialService, InMemoryCredentialService,
108 };
109 pub use gemini_adk_rs::instruction::inject_session_state;
110 pub use gemini_adk_rs::llm::LlmRegistry;
111 pub use gemini_adk_rs::run_config::{RunConfig, StreamingMode};
112 pub use gemini_adk_rs::text_runner::InMemoryRunner;
113 pub use gemini_adk_rs::toolset::{StaticToolset, Toolset};
114 pub use gemini_genai_rs::prelude::*;
115}