Enterprise Agent with Shared Compliance Preset

Tip

What you’ll learn How to define and apply reusable configuration presets.

Source: 22_presets.py

from adk_fluent import Agent
from adk_fluent.presets import Preset


def audit_before_model(callback_context, llm_request):
    """Log all LLM requests for SOC2 compliance audit trail."""
    pass


def audit_after_model(callback_context, llm_response):
    """Log all LLM responses for compliance review."""
    pass


# Define a reusable compliance preset for all enterprise agents
compliance = Preset(
    model="gemini-2.5-flash",
    before_model=audit_before_model,
    after_model=audit_after_model,
)

# Apply the preset to multiple domain-specific agents with .use()
billing_agent = (
    Agent("billing_agent").instruct("Handle billing inquiries, invoices, and payment disputes.").use(compliance)
)

hr_agent = (
    Agent("hr_agent").instruct("Answer employee questions about benefits, PTO, and company policies.").use(compliance)
)
# Native ADK has no preset mechanism. Reusing config requires:
#   base_kwargs = dict(model="gemini-2.5-flash", before_model_callback=audit_log)
#   agent1 = LlmAgent(name="a1", instruction="Do X.", **base_kwargs)
#   agent2 = LlmAgent(name="a2", instruction="Do Y.", **base_kwargs)
#
# This breaks down when you need callbacks to accumulate or
# when different builders have different alias mappings.

Equivalence

# Both agents got the model from preset
assert billing_agent._config["model"] == "gemini-2.5-flash"
assert hr_agent._config["model"] == "gemini-2.5-flash"

# Both agents got the compliance audit callbacks
assert audit_before_model in billing_agent._callbacks["before_model_callback"]
assert audit_after_model in billing_agent._callbacks["after_model_callback"]
assert audit_before_model in hr_agent._callbacks["before_model_callback"]
assert audit_after_model in hr_agent._callbacks["after_model_callback"]

# .use() returns self for chaining -- instructions are preserved
assert billing_agent._config["instruction"] == "Handle billing inquiries, invoices, and payment disputes."