Available on crate features
functional and graph only.Expand description
§Functional API for Graph Workflows
The Functional API provides a higher-level programming model for adk-graph
that allows developers to write agent workflows as normal async Rust functions
with automatic checkpointing, typed state reducers, and interrupt/resume support.
§Overview
Rather than manually constructing nodes, edges, and routers, developers annotate
functions with #[entrypoint] and #[task] macros and use standard Rust control
flow (if, for, match, loop) to express workflow logic.
This module is gated behind the functional feature flag.
§Features
TaskContext: Runtime context for tasks providing state, checkpointing, and streamingReducedValue<T>: Append-only state container persisted across checkpointsUntrackedValue<T>: Transient state container excluded from checkpointsMessagesValue: Chat message container with ID-based deduplicationTypedReducer: Custom merge strategies for typed state valuesExecutionLog: Task completion tracking for resume-skip behaviorStateSchemaValidator: Schema validation for initial state and task output
§Quick Start
ⓘ
use adk_graph::functional::{TaskContext, ReducedValue, MessagesValue};
use adk_rust_macros::{entrypoint, task};
#[task]
async fn fetch_data(ctx: &mut TaskContext) -> Result<String, FunctionalError> {
ctx.emit(serde_json::json!({"status": "fetching"})).await;
Ok("data result".to_string())
}
#[task(retry(max_attempts = 3, backoff = "1s"))]
async fn process(ctx: &mut TaskContext, data: &str) -> Result<String, FunctionalError> {
Ok(format!("processed: {data}"))
}
#[entrypoint]
async fn my_workflow(ctx: &mut TaskContext) -> Result<(), FunctionalError> {
let data = fetch_data(ctx).await?;
let result = process(ctx, &data).await?;
ctx.set("output", serde_json::json!(result));
Ok(())
}§Typed State Reducers
ⓘ
use adk_graph::functional::{ReducedValue, UntrackedValue, MessagesValue, ChatMessage, MessageRole};
// Append-only accumulator — persisted across checkpoints
let mut results: ReducedValue<String> = ReducedValue::default();
results.push("step 1 output".to_string());
results.push("step 2 output".to_string());
assert_eq!(results.len(), 2);
// Transient value — excluded from checkpoints
let mut temp: UntrackedValue<Vec<u8>> = UntrackedValue::default();
temp.set(vec![1, 2, 3]);
// Chat messages with deduplication
let mut messages = MessagesValue::default();
messages.push(ChatMessage {
id: "msg-1".to_string(),
role: MessageRole::User,
content: "Hello".to_string(),
metadata: Default::default(),
});Modules§
- execution_
log - Execution log for tracking task completion status within a workflow run.
- messages
- Chat message container with ID-based deduplication.
- reducers
- Typed state reducers for the Functional API.
- schema
- State schema validation for the functional API.
- typed_
reducer - Typed reducer trait and built-in reducer implementations.
Structs§
- Append
Reducer - Built-in reducer: append to a Vec (list concatenation).
- Chat
Message - A chat message with a unique identifier.
- Execution
Log - Tracks task completion status within a workflow run. Stored as part of the checkpoint metadata.
- Merge
Reducer - Built-in reducer: deep merge for JSON-like structures.
- Messages
Value - Chat message container with ID-based deduplication.
- Reduced
Value - Append-only state container. Accumulates values across tasks. Persisted to checkpoints on each task completion.
- Replace
Reducer - Built-in reducer: replace with incoming value (last-write-wins).
- State
Schema Validator - Validates workflow state against a declared schema.
- Task
Context - Runtime context passed to
#[entrypoint]and#[task]functions. - Task
Record - A record of a single task’s execution state.
- Untracked
Value - Transient runtime value excluded from checkpoints.
Enums§
- Expected
Type - Expected JSON value type for a state field.
- Functional
Error - Errors specific to the functional API.
- Message
Role - A chat message role indicating the sender of a message.
- Task
Status - The lifecycle status of a task within a workflow execution.
Traits§
- Typed
Reducer - Trait for defining custom merge strategies for state values.