From 70e3e233d55a21ace491e8b08a3ae82ad6dfb16c Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Tue, 20 Jan 2026 11:28:33 +0000 Subject: [PATCH 01/35] docs: Add http_server and a2a_message connector pages --- modules/ROOT/nav.adoc | 7 + .../examples/agents/agent-config-multi.yaml | 147 +++++++++ .../examples/agents/agent-config-single.yaml | 48 +++ .../agents/system-prompt-order-analytics.txt | 32 ++ .../pages/agents/architecture-patterns.adoc | 234 +++++++++++++++ .../ai-agents/pages/agents/create-agent.adoc | 198 ++++++++++++ .../ai-agents/pages/agents/fundamentals.adoc | 154 ++++++++++ modules/ai-agents/pages/agents/overview.adoc | 56 ++++ .../pages/agents/prompt-best-practices.adoc | 282 ++++++++++++++++++ .../ai-agents/pages/agents/quickstart.adoc | 80 +++++ .../components/inputs/http_server.adoc | 3 + .../components/processors/a2a_message.adoc | 3 + 12 files changed, 1244 insertions(+) create mode 100644 modules/ai-agents/examples/agents/agent-config-multi.yaml create mode 100644 modules/ai-agents/examples/agents/agent-config-single.yaml create mode 100644 modules/ai-agents/examples/agents/system-prompt-order-analytics.txt create mode 100644 modules/ai-agents/pages/agents/architecture-patterns.adoc create mode 100644 modules/ai-agents/pages/agents/create-agent.adoc create mode 100644 modules/ai-agents/pages/agents/fundamentals.adoc create mode 100644 modules/ai-agents/pages/agents/overview.adoc create mode 100644 modules/ai-agents/pages/agents/prompt-best-practices.adoc create mode 100644 modules/ai-agents/pages/agents/quickstart.adoc create mode 100644 modules/develop/pages/connect/components/inputs/http_server.adoc create mode 100644 modules/develop/pages/connect/components/processors/a2a_message.adoc diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index ce168d2ab..24f2f775a 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -70,6 +70,13 @@ ** xref:security:cloud-safety-reliability.adoc[Safety and Reliability] * xref:ai-agents:index.adoc[AI Agents] +** xref:ai-agents:agents/overview.adoc[Agents] +*** xref:ai-agents:agents/quickstart.adoc[Quickstart] +*** xref:ai-agents:agents/fundamentals.adoc[Agent Fundamentals] +*** xref:ai-agents:agents/architecture-patterns.adoc[Architecture Patterns] +*** xref:ai-agents:agents/create-agent.adoc[Create an Agent] +*** xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices] +*** xref:ai-agents:agents/a2a-workflows.adoc[Agent-to-Agent Workflows] ** xref:ai-agents:mcp/overview.adoc[MCP Overview] ** xref:ai-agents:mcp/local/index.adoc[Redpanda Cloud Management MCP Server] *** xref:ai-agents:mcp/local/overview.adoc[Overview] diff --git a/modules/ai-agents/examples/agents/agent-config-multi.yaml b/modules/ai-agents/examples/agents/agent-config-multi.yaml new file mode 100644 index 000000000..cd5f64082 --- /dev/null +++ b/modules/ai-agents/examples/agents/agent-config-multi.yaml @@ -0,0 +1,147 @@ +# Example: Multi-Agent Configuration (Root + Subagents) +# This is a conceptual example showing how a multi-agent architecture might be configured. +# Actual configuration is done through the Redpanda Cloud Console UI. + +# Root Agent - Orchestrates and delegates to subagents +root_agent: + name: ecommerce-orchestrator + description: Orchestrates e-commerce operations across specialized agents + + model: + provider: anthropic + name: claude-opus-4 + temperature: 0.2 + + system_prompt: | + You are an e-commerce orchestration agent. You coordinate operations + across three specialized agents: Order, Inventory, and Customer. + + Available subagents: + - order_agent: Manages order operations + - inventory_agent: Manages stock and inventory + - customer_agent: Manages customer profiles + + Your job is to: + 1. Understand user requests + 2. Determine which subagent(s) to call + 3. Combine results into coherent responses + + Rules: + - Delegate to subagents rather than calling tools directly + - Wait for subagent responses before proceeding + - Handle errors from subagents gracefully + + # Root agent has delegation tools + mcp_servers: + - name: agent-delegation + tools: + - call_order_agent + - call_inventory_agent + - call_customer_agent + + subagents: + - order_agent + - inventory_agent + - customer_agent + + max_iterations: 15 + +# Subagent 1: Order Agent +order_agent: + name: order-agent + description: Handles order management operations + + model: + provider: openai + name: gpt-4o + + system_prompt: | + You are an order management agent. You handle order retrieval, + status updates, and order calculations. + + Available tools: + - get_order + - update_order_status + - calculate_total + + Rules: + - Always validate order IDs before operations + - Never modify orders marked as completed + + mcp_servers: + - name: order-tools + tools: + - get_order + - update_order_status + - calculate_total + + max_iterations: 5 + +# Subagent 2: Inventory Agent +inventory_agent: + name: inventory-agent + description: Handles inventory and stock management + + model: + provider: openai + name: gpt-4o + + system_prompt: | + You are an inventory management agent. You check stock levels + and manage inventory reservations. + + Available tools: + - check_stock + - reserve_inventory + - release_inventory + + Rules: + - Always verify product IDs exist before operations + - Never reserve more than available stock + + mcp_servers: + - name: inventory-tools + tools: + - check_stock + - reserve_inventory + - release_inventory + + max_iterations: 5 + +# Subagent 3: Customer Agent +customer_agent: + name: customer-agent + description: Handles customer profile and history + + model: + provider: openai + name: gpt-4o + + system_prompt: | + You are a customer management agent. You retrieve customer + profiles and order history. + + Available tools: + - get_customer_profile + - get_order_history + - update_preferences + + Rules: + - Never expose sensitive customer data (passwords, payment info) + - Limit order history to last 100 orders by default + + mcp_servers: + - name: customer-tools + tools: + - get_customer_profile + - get_order_history + - update_preferences + + max_iterations: 5 + +# Security +secrets: + - name: openai-api-key + reference: openai_key_secret + - name: anthropic-api-key + reference: anthropic_key_secret diff --git a/modules/ai-agents/examples/agents/agent-config-single.yaml b/modules/ai-agents/examples/agents/agent-config-single.yaml new file mode 100644 index 000000000..9778a5978 --- /dev/null +++ b/modules/ai-agents/examples/agents/agent-config-single.yaml @@ -0,0 +1,48 @@ +# Example: Single Agent Configuration +# This is a conceptual example showing how a single-agent setup might be configured. +# Actual configuration is done through the Redpanda Cloud Console UI. + +agent: + name: order-analytics-agent + description: Analyzes customer orders and provides insights + + # LLM configuration + model: + provider: openai + name: gpt-4o + temperature: 0.1 + max_tokens: 2000 + + # System prompt defines agent behavior + system_prompt: | + You are an order analytics agent. + + Responsibilities: + - Answer questions about customer orders + - Analyze recent order trends + + Available tools: + - get_customer_orders + - analyze_recent_orders + + Rules: + - Present structured data as tables + - Never expose payment information + - Only analyze data from the last 90 days unless explicitly requested + + # MCP servers provide tools + mcp_servers: + - name: order-tools + tools: + - get_customer_orders + - analyze_recent_orders + - calculate_order_metrics + + # Execution settings + max_iterations: 10 + timeout_seconds: 60 + + # Security + secrets: + - name: openai-api-key + reference: openai_key_secret diff --git a/modules/ai-agents/examples/agents/system-prompt-order-analytics.txt b/modules/ai-agents/examples/agents/system-prompt-order-analytics.txt new file mode 100644 index 000000000..7b179babc --- /dev/null +++ b/modules/ai-agents/examples/agents/system-prompt-order-analytics.txt @@ -0,0 +1,32 @@ +You are an order analytics agent. + +Responsibilities: +- Answer questions about customer orders +- Analyze recent order trends +- Provide insights on order patterns and anomalies + +Available tools: +- get_customer_orders: Retrieve order history for a specific customer +- analyze_recent_orders: Analyze orders within a time window +- calculate_order_metrics: Compute aggregated metrics (total value, average order size, etc.) + +Rules: +- Present structured data as tables +- Always state the analysis time window clearly +- Never expose payment information (card numbers, CVV, billing addresses) +- Only analyze data from the last 90 days unless explicitly requested +- If asked for payment details, respond: "I cannot access payment information for security reasons" +- Use UTC timezone for all timestamps +- Round currency values to 2 decimal places + +Output format: +- Use markdown tables for order lists +- Include column headers: Order ID, Date, Customer, Status, Total +- Provide summary statistics after tables (total orders, total value, date range) +- Explain any trends or anomalies you observe + +Example response structure: +1. State the query and time window +2. Present the data in a table +3. Provide summary statistics +4. Note any interesting patterns or anomalies diff --git a/modules/ai-agents/pages/agents/architecture-patterns.adoc b/modules/ai-agents/pages/agents/architecture-patterns.adoc new file mode 100644 index 000000000..2eda395e5 --- /dev/null +++ b/modules/ai-agents/pages/agents/architecture-patterns.adoc @@ -0,0 +1,234 @@ += Agent Architecture Patterns +:description: Design maintainable agent systems with single-agent and multi-agent patterns based on domain complexity. +:page-topic-type: best-practices +:learning-objective-1: Evaluate single-agent versus multi-agent architectures for your use case +:learning-objective-2: Choose appropriate LLM models based on task requirements +:learning-objective-3: Apply agent boundary design principles for maintainability + +Design agent systems that are maintainable, discoverable, and reliable by choosing the right architecture pattern and applying clear boundary principles. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== Single-agent pattern + +Use a single-agent architecture when your problem domain is focused and doesn't require specialized subsystems. + +=== When to use + +Single-agent architectures work best for: + +* Narrow domain with limited scope +* Single data source or simple integrations +* Tasks that don't require specialized subsystems + +=== Example use cases + +Single agents are appropriate for: + +* **Customer order lookup agent**: Retrieves order history and status from a single topic +* **Weather information agent**: Queries weather APIs and returns formatted data +* **Product inventory checker**: Checks stock levels across warehouses + +=== Trade-offs + +Single agents offer simplicity at the cost of scalability: + +* **Simpler to build and maintain**: One system prompt, one tool set, one deployment +* **Limited by single system prompt and tool set**: All capabilities must coexist in one agent +* **Difficult to scale to complex multi-domain problems**: Adding features increases complexity rapidly + +Use single agents when your domain won't expand significantly over time. + +== Root agent with subagents pattern + +Use a multi-agent architecture when your problem spans multiple domains, requires specialized expertise, or involves governance boundaries. + +=== When to use + +Multi-agent architectures are appropriate for: + +* Complex domains spanning multiple areas +* Multiple data sources requiring different access patterns +* Tasks requiring specialized expertise or governance boundaries + +=== Architecture + +In a multi-agent system: + +* **Root agent orchestrates and delegates**: Interprets user requests and routes them to appropriate subagents +* **Each subagent has focused domain expertise**: Owns a specific business area or capability +* **Explicit boundaries between agents**: Clear separation of responsibilities and tools +* **Subagents expose domain-specific tools**: Tools are scoped to the agent that needs them + +=== Example: E-commerce platform + +A typical e-commerce agent system includes: + +* **Root agent**: Interprets user requests and delegates to specialists +* **Order agent**: Order processing, history lookup, status updates +* **Inventory agent**: Stock checks, availability, warehouse operations +* **Customer agent**: Profile management, preferences, history + +=== Benefits + +Multi-agent architectures provide: + +* **Changes isolated to specific domains**: Update the order agent without affecting inventory +* **Easier debugging**: Narrow scope per agent means fewer potential failure points +* **Clear governance boundaries**: Different teams can own different agents +* **Parallel development**: Multiple teams can build agents simultaneously + +Use multi-agent architectures when you expect the system to grow, require team boundaries, or need governance separation. + +== Model selection guide + +Choose models based on task complexity, latency requirements, and cost constraints. + +=== Task complexity + +Match model capability to reasoning requirements: + +[cols="1,2,3"] +|=== +| Task Type | Recommended Models | Description + +| Simple queries +| Haiku 4.5, GPT-5 mini +| Basic lookups, straightforward responses, minimal reasoning required + +| Balanced workloads +| Sonnet 4.5, Gemini 3.0 pro flash +| Moderate complexity tasks requiring some analysis and reasoning + +| Complex reasoning +| Opus 4.5, GPT-5.2, Gemini 3.0 pro +| Multi-step problem solving, advanced analysis, sophisticated reasoning chains +|=== + +=== Latency requirements + +Match model speed to user expectations: + +.Real-time responses +Choose faster models for interactive use cases: + +* Haiku 4.5 +* GPT-5 mini +* Gemini 3.0 pro flash + +.Batch processing +Optimize for accuracy over speed when users don't wait for results. + +=== Cost constraints + +Balance capability with usage volume: + +.High volume +Use cost-effective models for frequent requests: + +* Haiku 4.5 +* GPT-5 mini + +.Critical accuracy +Use premium models when errors are costly: + +* Opus 4.5 +* GPT-5.2 + +=== Model families + +Reference external documentation for model details: + +* OpenAI GPT: link:https://platform.openai.com/docs/models[GPT-5, GPT-5 mini^] +* Google Gemini: link:https://ai.google.dev/gemini-api/docs[Gemini 3.0 pro, Gemini 3.0 pro flash^] +* Anthropic Claude: link:https://docs.anthropic.com/claude/docs/models-overview[Opus 4.5, Sonnet 4.5, Haiku 4.5^] + +== Design principles + +Follow these principles to create maintainable agent systems. + +=== Explicit agent boundaries + +Each agent should have clear scope and responsibilities. + +Define each agent with: + +* Clear scope definition in system prompt +* Specific tool set for its domain +* Well-defined inputs and outputs + +Do not create agents with overlapping responsibilities. Overlapping domains create confusion about which agent handles which requests. + +=== Tool scoping per agent + +Assign tools to the agent that needs them. Don't give all agents access to all tools. + +.Do +Give each agent only the tools it needs: + +[,yaml] +---- +# Order agent +tools: + - get_orders + - update_order_status + +# Inventory agent +tools: + - check_stock + - reserve_inventory +---- + +.Don't +Don't share all tools across agents: + +[,yaml] +---- +# Both agents have access to all tools +tools: + - get_orders + - update_order_status + - check_stock + - reserve_inventory +---- + +Tool scoping reduces the risk of tool misuse and makes debugging easier. + +=== Error handling and fallbacks + +Design agents to handle failures gracefully. + +Implement error handling that: + +* Uses retry logic for transient failures +* Provides clear error messages to users +* Logs errors for debugging + +Distinguish between transient failures (network timeouts) and permanent failures (invalid parameters). Retry the first, report the second immediately. + +== Summary + +Choose architecture patterns based on domain complexity and organizational needs: + +[cols="1,2,2"] +|=== +| Pattern | Use When | Trade-off + +| Single agent +| Narrow domain, simple tasks +| Limited scalability + +| Multi-agent +| Complex domains, multiple systems +| Higher operational complexity +|=== + +== Next steps + +* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Explore tool design patterns +* xref:ai-agents:agents/fundamentals.adoc[]: Review agent component fundamentals +* xref:ai-agents:mcp/remote/best-practices.adoc[]: Learn MCP tool best practices diff --git a/modules/ai-agents/pages/agents/create-agent.adoc b/modules/ai-agents/pages/agents/create-agent.adoc new file mode 100644 index 000000000..bd98f9d2b --- /dev/null +++ b/modules/ai-agents/pages/agents/create-agent.adoc @@ -0,0 +1,198 @@ += Create an Agent +:description: Configure agents with model selection, system prompts, tool connections, and execution parameters. +:page-topic-type: how-to +:personas: ai_agent_developer +:learning-objective-1: Configure an agent with model selection and system prompt +:learning-objective-2: Connect MCP servers and select tools for your agent +:learning-objective-3: Set agent execution parameters including max iterations + +Create a new AI agent through the Redpanda Cloud Console. This guide walks you through configuring the agent's model, system prompt, tools, and execution settings. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== Prerequisites + +* Redpanda Cloud cluster with Remote MCP enabled +* At least one MCP server deployed with tools +* LLM provider API key (OpenAI, Google, or Anthropic) +* System prompt prepared (see xref:ai-agents:agents/prompt-best-practices.adoc[]) + +== Access the agents UI + +. Log in to the Redpanda Cloud Console. +. Navigate to your cluster. +. Click *Agents* in the left navigation. + +== Create a new agent + +=== Configure basic settings + +. Click *Create Agent*. +. Enter an agent name. +. Optionally, add a description. + +=== Choose a model + +. In the *Model* section, select your LLM provider: ++ +* OpenAI (GPT models) +* Google (Gemini models) +* Anthropic (Claude models) + +. Select the specific model version: ++ +* For balanced performance: Sonnet 4.5, Gemini 3.0 pro flash, GPT-5 mini +* For complex reasoning: Opus 4.5, Gemini 3.0 pro, GPT-5.2 +* For cost-effective tasks: Haiku 4.5, GPT-5 mini + +For model selection guidance, see xref:ai-agents:agents/architecture-patterns.adoc[]. + +=== Add API keys as secrets + +. In the *API Key* section, click *Add Secret*. +. Choose one: ++ +* *Use existing secret*: Select from your Secrets Store +* *Create new secret*: Enter your LLM provider API key + +. Name your secret (for example: `openai-api-key`). +. Click *Save*. + +=== Write the system prompt + +. In the *System Prompt* section, enter your prompt. +. Follow these guidelines: ++ +* Define agent role and responsibilities +* List available tools +* Specify constraints and safety rules +* Set output format expectations + +. Use the *Preview* button to review formatted prompt. + +Example system prompt structure: + +[,text] +---- +You are an [agent role]. + +Responsibilities: +- [Task 1] +- [Task 2] + +Available tools: +- [tool_name]: [description] + +Never: +- [Constraint 1] +- [Constraint 2] + +Response format: +- [Format guideline] +---- + +For complete prompt guidelines, see xref:ai-agents:agents/prompt-best-practices.adoc[]. + +=== Add MCP servers and select tools + +. In the *Tools* section, click *Add MCP Server*. +. Select an MCP server from your cluster. +. The UI displays all tools exposed by that server. +. Select which tools this agent can use: ++ +* Check the box next to each tool +* Review tool descriptions to confirm they match agent needs + +. Repeat to add tools from multiple MCP servers. +. Verify your tool selection: ++ +* Ensure tools match those listed in your system prompt +* Remove tools the agent doesn't need (principle of least privilege) + +=== Add subagents (optional) + +For multi-agent architectures: + +. In the *Subagents* section, click *Add Subagent*. +. Select an existing agent to use as a subagent. +. The root agent can delegate tasks to subagents. +. Configure delegation: ++ +* Define when to use this subagent +* Set access permissions + +For multi-agent design patterns, see xref:ai-agents:agents/a2a-workflows.adoc[]. + +=== Set max iterations + +. In the *Execution Settings* section, configure *Max Iterations*. +. This limits how many tool calls the agent can make per request. +. Recommended values: ++ +* Simple queries: 3-5 iterations +* Complex workflows: 10-15 iterations +* Multi-step analysis: 20+ iterations + +. Higher limits increase: ++ +* Agent capability (can complete complex tasks) +* Cost (more LLM calls) +* Latency (longer response times) + +=== Review and create + +. Review all settings: ++ +* Model and API key +* System prompt +* Selected tools +* Max iterations + +. Click *Create Agent*. +. Wait for agent creation to complete. + +== Test your agent + +. In the agent details view, click *Test*. +. Enter a test query. +. Verify the agent: ++ +* Selects appropriate tools +* Follows system prompt constraints +* Returns expected output format + +. Iterate on system prompt or tool selection as needed. + +== Examples + +=== Simple query agent + +* *Model*: Haiku 4.5 (fast, cost-effective) +* *Tools*: Single MCP server with `get_orders` tool +* *Max iterations*: 5 +* *Use case*: Customer order lookups + +=== Complex analytics agent + +* *Model*: Sonnet 4.5 (balanced) +* *Tools*: Multiple servers with data query, aggregation, and formatting tools +* *Max iterations*: 15 +* *Use case*: Multi-step data analysis + +=== Multi-agent orchestrator + +* *Model*: Opus 4.5 (advanced reasoning) +* *Tools*: Agent delegation tools +* *Subagents*: Order Agent, Inventory Agent, Customer Agent +* *Max iterations*: 20 +* *Use case*: E-commerce operations + +== Next steps + +* xref:ai-agents:agents/prompt-best-practices.adoc[]: Refine your system prompts +* xref:ai-agents:mcp/remote/create-tool.adoc[]: Create additional tools +* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems diff --git a/modules/ai-agents/pages/agents/fundamentals.adoc b/modules/ai-agents/pages/agents/fundamentals.adoc new file mode 100644 index 000000000..c0b6d697c --- /dev/null +++ b/modules/ai-agents/pages/agents/fundamentals.adoc @@ -0,0 +1,154 @@ += Agent Fundamentals +:description: Understand the four essential components of an AI agent and how they work together. +:page-topic-type: concepts +:learning-objective-1: Describe the four essential components of an AI agent +:learning-objective-2: Explain how system prompts constrain agent behavior +:learning-objective-3: Distinguish between focused and unfocused tool designs + +Every AI agent consists of four essential components that work together to interpret user intent and accomplish tasks. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== Agent components + +An AI agent consists of four components: + +. System prompt: Defines scope, behavior, and constraints +. LLM: Performs reasoning and tool selection +. Tools: External capabilities exposed via MCP +. Context: Conversation state and relevant inputs + +Everything else builds on these primitives. + +== System prompts + +The system prompt defines agent behavior. It should explicitly specify: + +* The agent's role +* Its responsibilities +* Which tools are available +* Expected response structure +* Hard constraints and exclusions + +Clear constraints prevent unintended behavior and reduce tool misuse. + +=== Example: Order analytics agent + +[,text] +---- +You are an order analytics agent. + +Responsibilities: +- Answer questions about customer orders +- Analyze recent order trends + +Available tools: +- get_customer_orders +- analyze_recent_orders + +Rules: +- Present structured data as tables +- Always state the analysis time window +- Never expose payment information +- Only analyze data from the last 90 days unless explicitly requested +---- + +This prompt defines scope (order analytics), lists available actions (two tools), and sets clear boundaries (no payment information, 90-day window). + +== Tools + +Tools are the actions your agent can take. With Redpanda Cloud: + +* You define tools as MCP servers +* Each tool is a Redpanda Connect configuration with a component and meta block +* The LLM discovers and invokes tools automatically +* Tools access streaming data, databases, APIs, or services + +Choose tools that are: + +* Focused: One clear purpose per tool +* Reliable: Consistent results for the same inputs +* Observable: Can log actions for debugging + +For detailed guidance on creating tools, see xref:ai-agents:mcp/remote/create-tool.adoc[]. + +=== Tool design principles + +Keep each tool focused on a single action. Instead of one tool that "manages orders," create separate tools for: + +* `get_customer_orders`: Retrieve order history +* `update_order_status`: Change order state +* `calculate_order_total`: Compute costs + +Focused tools are easier to test, debug, and reason about. + +== LLM selection + +The LLM performs reasoning, interprets prompts, and decides which tools to use. Choose models based on: + +* Task complexity: Simple queries vs. multi-step workflows +* Latency requirements: Real-time responses vs. batch processing +* Cost constraints: Balance capability with usage volume + +Model families available through Redpanda Cloud integrations: + +* OpenAI GPT models: Strong general-purpose reasoning +* Anthropic Claude models: Extended context windows +* Google Gemini models: Multimodal capabilities + +For agent architectures that combine multiple models, see xref:ai-agents:agents/architecture-patterns.adoc[]. + +== Context + +Context includes: + +* Conversation history: Previous messages in the session +* Retrieved data: Results from tools or database queries +* Streaming context: Real-time events from Redpanda topics + +Effective context management: + +* Keep conversation history focused (prune irrelevant turns) +* Use streaming data for real-time decisions +* Store long-term state in databases, not conversation memory + +=== Context window limits + +Every LLM has a context window (the total amount of text it can process). When the conversation history plus tool results exceeds this limit, the agent fails or loses information. + +Strategies to manage context: + +* Summarize old conversations: Replace early messages with summaries +* Use semantic search: Retrieve only relevant conversation turns +* Store state externally: Put order details in a database, not in chat history + +=== Streaming context + +Agents can process real-time events from Redpanda topics as part of their context. This enables use cases like: + +* Monitoring dashboards that answer questions about live metrics +* Alert systems that detect anomalies in streaming data +* Recommendation engines that adapt to current user behavior + +== How components work together + +Here's the flow when a user makes a request: + +. User sends a message ("What were our sales yesterday?") +. LLM receives the system prompt, conversation history, and the user message +. LLM decides which tool(s) to invoke based on the system prompt +. Tools execute and return results +. LLM incorporates tool results into context +. LLM generates a response to the user + +This cycle repeats until the agent completes the task or reaches a stopping condition. + +== Next steps + +* xref:ai-agents:agents/quickstart.adoc[]: Get your first agent running +* xref:ai-agents:agents/create-agent.adoc[]: Create an agent through the UI +* xref:ai-agents:agents/architecture-patterns.adoc[]: Explore agent design patterns diff --git a/modules/ai-agents/pages/agents/overview.adoc b/modules/ai-agents/pages/agents/overview.adoc new file mode 100644 index 000000000..77840c924 --- /dev/null +++ b/modules/ai-agents/pages/agents/overview.adoc @@ -0,0 +1,56 @@ += AI Agents Overview +:description: Learn what AI agents are and how Redpanda Cloud supports agent development with real-time streaming. +:page-topic-type: overview +:learning-objective-1: Identify what AI agents are and their primary use cases +:learning-objective-2: Identify the benefits of using Redpanda Cloud for agent development +:learning-objective-3: Evaluate whether building agents with Redpanda Cloud fits your requirements + +AI agents are systems that combine large language models with the ability to execute actions and process data. Redpanda Cloud provides real-time streaming infrastructure and standardized tool access to support agent development. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== What is an AI agent? + +An AI agent is a system built around a large language model that can: + +* Interpret user intent +* Decide which actions are required +* Invoke external tools +* Process live and historical data +* Chain multiple steps into a workflow + +AI agents differ from text-only LLMs by executing actions and invoking external tools. + +== Key benefits + +Redpanda Cloud provides: + +* Real-time streaming data: Access live events instead of batch snapshots +* Remote MCP support: Standardized tool access via Model Context Protocol +* Managed infrastructure: Deployment, scaling, and security handled for you +* Low-latency execution: Tools run close to your data +* Integrated secrets: Securely manage API keys and credentials + +== Use cases + +Agents built with Redpanda Cloud are ideal for: + +* Real-time customer support: Agents that query order history, inventory status, and shipping data from streaming topics +* Operational intelligence: Agents that analyze live metrics and logs to answer questions about system health +* Data enrichment workflows: Agents that augment streaming data with external API calls or database lookups +* Multi-system orchestration: Agents that coordinate actions across multiple services using streaming events as triggers + +== Limitations + +* Remote MCP requires a Redpanda Cloud cluster +* Tool execution latency depends on data source and processing complexity +* Agent quality depends on LLM selection and system prompt design + +== Next steps + +* xref:ai-agents:agents/quickstart.adoc[]: Get your first agent running +* xref:ai-agents:agents/fundamentals.adoc[]: Learn the four essential components diff --git a/modules/ai-agents/pages/agents/prompt-best-practices.adoc b/modules/ai-agents/pages/agents/prompt-best-practices.adoc new file mode 100644 index 000000000..d1b6b7ed8 --- /dev/null +++ b/modules/ai-agents/pages/agents/prompt-best-practices.adoc @@ -0,0 +1,282 @@ += System Prompt Best Practices +:description: Write system prompts that produce reliable, predictable agent behavior through clear constraints and tool guidance. +:page-topic-type: best-practices +:personas: ai_agent_developer +:learning-objective-1: Identify effective system prompt patterns for agent reliability +:learning-objective-2: Apply constraint patterns to prevent unintended agent behavior +:learning-objective-3: Evaluate system prompts for clarity and completeness + +Write system prompts that produce reliable, predictable agent behavior. Good prompts define scope, specify constraints, and guide tool usage. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== Role definition + +=== Be specific about agent identity + +Define what the agent does, not what it is. + +.Do +[,text] +---- +You are an order fulfillment agent for an e-commerce platform. You help customers track orders, update shipping addresses, and process returns. +---- + +.Don't +[,text] +---- +You are a helpful assistant. +---- + +=== Define what the agent does and doesn't do + +Explicitly state boundaries: + +* What tasks the agent handles +* What tasks it should refuse or delegate +* When to ask for human assistance + +[,text] +---- +Responsibilities: +- Track customer orders +- Update shipping addresses +- Process returns up to $500 + +Do not: +- Provide product recommendations (redirect to website) +- Process refunds above $500 (escalate to manager) +- Access orders from other customers +---- + +== Tool specification + +=== List available tools + +Name each tool the agent can use: + +[,text] +---- +Available tools: +- get_customer_orders: Retrieve order history for a customer +- update_order_status: Change order state (shipped, delivered, canceled) +- calculate_refund: Compute refund amount based on return policy +---- + +=== Explain when to use each tool + +Provide decision criteria for tool selection. + +.Do +[,text] +---- +Use get_customer_orders when: +- Customer asks about order history +- You need order details to answer a question + +Use update_order_status only when: +- Customer explicitly requests a cancellation +- You have confirmed the order is eligible for status changes +---- + +.Don't +[,text] +---- +Use the tools as needed. +---- + +== Constraints and safety + +=== Specify hard limits + +Use "never" for absolute constraints: + +[,text] +---- +Never: +- Expose customer payment information +- Process refunds above $500 without manager approval +- Access orders from other customers +---- + +=== Define data boundaries + +Specify what data the agent can access: + +[,text] +---- +Data access: +- Only orders from the last 90 days +- Only data for the authenticated customer +- No access to employee records or internal systems +---- + +=== Set response guidelines + +Control output format and content: + +[,text] +---- +Response guidelines: +- Present order details as tables +- Always include order numbers in responses +- State the analysis time window when showing trends +- If you cannot complete a task, explain why and suggest alternatives +---- + +== Context and conversation management + +=== Handle ambiguous requests + +Guide the agent on how to clarify: + +[,text] +---- +When request is unclear: +1. Ask clarifying questions +2. Suggest common interpretations +3. Do not guess customer intent +---- + +=== Define conversation boundaries + +Set limits on conversation scope: + +[,text] +---- +Conversation scope: +- Answer questions about orders, shipping, and returns +- Do not provide product recommendations (redirect to website) +- Do not engage in general conversation unrelated to orders +---- + +== Output formatting + +=== Specify structure + +Define how the agent presents information: + +[,text] +---- +Output format: +- Use tables for multiple items +- Use bulleted lists for steps or options +- Use code blocks for tracking numbers or order IDs +- Include units (dollars, kilograms) in all numeric values +---- + +== Testing your prompt + +Evaluate system prompts by testing: + +* **Boundary adherence**: Does the agent refuse out-of-scope requests? +* **Tool selection**: Does it choose the right tool for each task? +* **Constraint compliance**: Does it follow "never" rules? +* **Clarity under ambiguity**: Does it ask questions when unclear? + +== Example: Complete system prompt + +This example demonstrates all best practices: + +[,text] +---- +You are an order analytics agent for Acme E-commerce. + +Responsibilities: +- Answer questions about customer order trends +- Analyze order data from Redpanda topics +- Provide insights on order patterns + +Available tools: +- get_customer_orders: Retrieve order history (parameters: customer_id, start_date, end_date) +- analyze_recent_orders: Compute order statistics (parameters: time_window, group_by) + +When to use tools: +- Use get_customer_orders for individual customer queries +- Use analyze_recent_orders for trend analysis across multiple orders + +Never: +- Expose customer payment information or addresses +- Analyze data older than 90 days unless explicitly requested +- Make business recommendations without data to support them + +Data access: +- Only orders from the authenticated customer account +- Maximum of 90 days of historical data + +Response guidelines: +- Present structured data as tables +- Always state the analysis time window +- Include order counts in trend summaries +- If data is unavailable, explain the limitation + +When request is unclear: +- Ask which time period to analyze +- Confirm whether to include canceled orders +- Do not assume customer intent +---- + +== Common anti-patterns + +=== Vague role definition + +.Don't +[,text] +---- +You are a helpful AI assistant. +---- + +Why: Doesn't constrain behavior or set expectations. + +=== Missing constraints + +.Don't +[,text] +---- +You can access customer data to help answer questions. +---- + +Why: No boundaries on what data or how much history. + +=== Implicit tool selection + +.Don't +[,text] +---- +Use the available tools to complete tasks. +---- + +Why: Agent must guess which tool applies when. + +== Summary + +[cols="1,2,2"] +|=== +| Element | Purpose | Example + +| Role definition +| Sets agent identity and scope +| "You are an order fulfillment agent" + +| Tool specification +| Guides tool selection +| "Use get_orders when customer asks about history" + +| Constraints +| Prevents unsafe behavior +| "Never expose payment information" + +| Response format +| Controls output structure +| "Present order details as tables" +|=== + +== Next steps + +* xref:ai-agents:agents/quickstart.adoc[]: Create an agent with your system prompt +* xref:ai-agents:agents/fundamentals.adoc[]: Review agent components +* xref:ai-agents:mcp/remote/best-practices.adoc[]: Learn MCP tool design patterns diff --git a/modules/ai-agents/pages/agents/quickstart.adoc b/modules/ai-agents/pages/agents/quickstart.adoc new file mode 100644 index 000000000..c03cb70e7 --- /dev/null +++ b/modules/ai-agents/pages/agents/quickstart.adoc @@ -0,0 +1,80 @@ += AI Agent Quickstart +:description: Get started with AI agents using Redpanda Cloud by creating a cluster, deploying a tool, and connecting an AI client. +:page-topic-type: tutorial +:personas: ai_agent_developer, evaluator +:learning-objective-1: Create a Redpanda Cloud cluster with Remote MCP enabled +:learning-objective-2: Deploy your first MCP tool +:learning-objective-3: Connect an AI client to your agent tools + +This quickstart gets you up and running with your first AI agent using Redpanda Cloud. You'll create a cluster, deploy a simple tool, and connect an AI client. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== Prerequisites + +* Redpanda Cloud account +* Claude Code, Claude Desktop, or another MCP-compatible AI client +* Basic familiarity with YAML + +== What you'll build + +A simple agent that can query data from a Redpanda topic using a custom MCP tool. + +== Create a cluster + +. Log in to the Redpanda Cloud Console. +. Create a new cluster. +. During cluster creation, enable Remote MCP. +. Enable the Secrets Store. +. Wait for the cluster to become ready. + +For detailed cluster creation steps, see the Redpanda Cloud documentation. + +== Deploy your first MCP tool + +You'll create a simple tool that queries recent data from a topic. + +For step-by-step instructions on creating and deploying MCP tools, see xref:ai-agents:mcp/remote/quickstart.adoc[]. + +The MCP quickstart walks you through: + +* Writing a Redpanda Connect configuration with a component and meta block +* Defining tool parameters and descriptions +* Deploying the tool to your cluster +* Testing tool execution + +== Connect your AI client + +Once your MCP tool is deployed, connect your AI client: + +. Get your cluster's MCP server URL from the Redpanda Cloud Console. +. Configure your AI client with the MCP server URL. +. Authenticate using your Redpanda Cloud credentials. + +For client-specific setup instructions, see xref:ai-agents:mcp/remote/quickstart.adoc[]. + +== Test your agent + +Try a natural language query that uses your tool: + +[.no-copy] +---- +Show me the last 10 messages from the orders topic +---- + +The agent will: + +. Understand your intent +. Discover the available tool +. Invoke the tool with appropriate parameters +. Return formatted results + +== Next steps + +* xref:ai-agents:agents/fundamentals.adoc[]: Learn core concepts for building agents +* xref:ai-agents:agents/architecture-patterns.adoc[]: Explore common architecture patterns +* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find reusable tool patterns diff --git a/modules/develop/pages/connect/components/inputs/http_server.adoc b/modules/develop/pages/connect/components/inputs/http_server.adoc new file mode 100644 index 000000000..48b7a3343 --- /dev/null +++ b/modules/develop/pages/connect/components/inputs/http_server.adoc @@ -0,0 +1,3 @@ += http_server +:page-aliases: components:inputs/http_server.adoc +include::redpanda-connect:components:inputs/http_server.adoc[tag=single-source] diff --git a/modules/develop/pages/connect/components/processors/a2a_message.adoc b/modules/develop/pages/connect/components/processors/a2a_message.adoc new file mode 100644 index 000000000..b4067524b --- /dev/null +++ b/modules/develop/pages/connect/components/processors/a2a_message.adoc @@ -0,0 +1,3 @@ += a2a_message +:page-aliases: components:processors/a2a_message.adoc +include::redpanda-connect:components:partial$components/cloud-only/processors/a2a_message.adoc[tag=single-source] From 5f5525d5a74302c93e3ba343e823cc8a697bb1f9 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Tue, 20 Jan 2026 18:18:09 +0000 Subject: [PATCH 02/35] Improve AI agents documentation readability and structure - Fix period usage in numbered steps and bold labels across all AI agent docs - Add descriptive link text to xref anchor links for better accessibility - Redesign monitor-agents.adoc reducing lists from 9 to 2, converting to prose and tables - Create observability index page - Fix broken xref from billing.adoc to observability/concepts.adoc --- .github/workflows/test-mcp-examples.yaml | 44 +- modules/ROOT/nav.adoc | 59 ++- .../examples/agents/agent-config-multi.yaml | 147 ------ .../examples/agents/agent-config-single.yaml | 48 -- .../agents/system-prompt-order-analytics.txt | 32 -- .../{ => mcp-tools/caches}/memory_cache.yaml | 0 .../caches}/redpanda_cache.yaml | 0 .../mcp-tools/caches/session_cache.yaml | 13 + .../mcp-tools/inputs/consume_redpanda.yaml | 22 + .../inputs/event_driven_workflow.yaml | 35 ++ .../inputs}/generate_input.yaml | 0 .../mcp-tools/inputs/read_events.yaml | 21 + .../mcp-tools/inputs/stream_processing.yaml | 28 ++ .../mcp-tools/outputs/publish_event.yaml | 20 + .../outputs/publish_with_timestamp.yaml | 25 + .../outputs}/redpanda_output.yaml | 0 .../redpanda_output_with_processors.yaml | 0 .../processors}/customer_enrichment.yaml | 0 .../mcp-tools/processors/enrich_order.yaml | 15 + .../gcp_bigquery_select_processor.yaml | 0 .../processors/get_customer_history.yaml | 38 ++ .../processors/get_order_status.yaml | 48 ++ .../processors/get_shipping_info.yaml | 38 ++ .../processors/get_weather_complete.yaml | 55 +++ .../processors/get_weather_simple.yaml | 17 + .../processors}/http_processor.yaml | 0 .../mcp-tools/processors/lookup_customer.yaml | 23 + .../processors}/observable_tool.yaml | 0 .../mcp-tools/processors/openai_chat.yaml | 27 ++ .../processors/openai_embeddings.yaml | 20 + .../processors}/order_workflow.yaml | 0 .../mcp-tools/processors/search_jira.yaml | 31 ++ .../processors/transform_validate.yaml | 40 ++ .../processors}/weather_service.yaml | 0 .../snippets/bloblang_this_context.yaml | 15 + .../examples/mcp-tools/snippets/defaults.yaml | 20 + .../mcp-tools/snippets/interpolation.yaml | 13 + .../examples/mcp-tools/snippets/secrets.yaml | 14 + .../test-mcp-tools.sh} | 127 ++--- .../pipelines/agent-transformation.yaml | 32 ++ .../examples/pipelines/async-workflows.yaml | 32 ++ .../pipelines/event-driven-invocation.yaml | 30 ++ .../pipelines/fraud-detection-routing.yaml | 75 +++ .../pipelines/fraud-detection-simple.yaml | 30 ++ .../pipelines/multi-agent-orchestration.yaml | 35 ++ .../pipelines/streaming-enrichment.yaml | 35 ++ .../examples/pipelines/test-pipelines.sh | 114 +++++ modules/ai-agents/examples/testing.adoc | 290 ------------ .../ai-agents/pages/agents/a2a-concepts.adoc | 158 +++++++ .../pages/agents/architecture-patterns.adoc | 300 +++++++----- .../ai-agents/pages/agents/build-index.adoc | 5 + modules/ai-agents/pages/agents/concepts.adoc | 264 +++++++++++ .../ai-agents/pages/agents/create-agent.adoc | 148 ++++-- .../ai-agents/pages/agents/fundamentals.adoc | 154 ------- .../pages/agents/get-started-index.adoc | 5 + modules/ai-agents/pages/agents/index.adoc | 5 + .../pages/agents/integration-index.adoc | 6 + .../pages/agents/integration-overview.adoc | 128 ++++++ modules/ai-agents/pages/agents/overview.adoc | 64 +-- .../agents/pipeline-integration-patterns.adoc | 143 ++++++ .../pages/agents/prompt-best-practices.adoc | 236 ++++++++-- .../ai-agents/pages/agents/quickstart.adoc | 196 ++++++-- .../pages/agents/troubleshooting.adoc | 435 ++++++++++++++++++ .../tutorials/customer-support-agent.adoc | 336 ++++++++++++++ modules/ai-agents/pages/mcp/index.adoc | 5 + .../ai-agents/pages/mcp/local/quickstart.adoc | 6 +- .../pages/mcp/remote/admin-guide.adoc | 41 -- .../ai-agents/pages/mcp/remote/concepts.adoc | 130 +----- .../pages/mcp/remote/create-tool.adoc | 205 +-------- .../pages/mcp/remote/manage-servers.adoc | 11 +- .../ai-agents/pages/mcp/remote/overview.adoc | 24 +- .../pages/mcp/remote/quickstart.adoc | 11 +- .../pages/mcp/remote/scale-resources.adoc | 2 +- .../pages/mcp/remote/tool-patterns.adoc | 117 ++--- .../pages/observability/concepts.adoc | 147 ++++++ .../ai-agents/pages/observability/index.adoc | 5 + .../pages/observability/monitor-agents.adoc | 176 +++++++ .../monitor-mcp-servers.adoc} | 14 +- modules/billing/pages/billing.adoc | 2 +- .../examples/cookbooks/jira/create-issue.yaml | 28 ++ .../examples/cookbooks/jira/input-once.yaml | 18 + .../cookbooks/jira/input-periodic.yaml | 19 + .../cookbooks/jira/test-jira-examples.sh | 53 +++ .../develop/pages/connect/cookbooks/jira.adoc | 158 +++++++ 84 files changed, 3934 insertions(+), 1529 deletions(-) delete mode 100644 modules/ai-agents/examples/agents/agent-config-multi.yaml delete mode 100644 modules/ai-agents/examples/agents/agent-config-single.yaml delete mode 100644 modules/ai-agents/examples/agents/system-prompt-order-analytics.txt rename modules/ai-agents/examples/{ => mcp-tools/caches}/memory_cache.yaml (100%) rename modules/ai-agents/examples/{ => mcp-tools/caches}/redpanda_cache.yaml (100%) create mode 100644 modules/ai-agents/examples/mcp-tools/caches/session_cache.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/inputs/consume_redpanda.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/inputs/event_driven_workflow.yaml rename modules/ai-agents/examples/{ => mcp-tools/inputs}/generate_input.yaml (100%) create mode 100644 modules/ai-agents/examples/mcp-tools/inputs/read_events.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/inputs/stream_processing.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/outputs/publish_event.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/outputs/publish_with_timestamp.yaml rename modules/ai-agents/examples/{ => mcp-tools/outputs}/redpanda_output.yaml (100%) rename modules/ai-agents/examples/{ => mcp-tools/outputs}/redpanda_output_with_processors.yaml (100%) rename modules/ai-agents/examples/{ => mcp-tools/processors}/customer_enrichment.yaml (100%) create mode 100644 modules/ai-agents/examples/mcp-tools/processors/enrich_order.yaml rename modules/ai-agents/examples/{ => mcp-tools/processors}/gcp_bigquery_select_processor.yaml (100%) create mode 100644 modules/ai-agents/examples/mcp-tools/processors/get_customer_history.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/get_order_status.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/get_shipping_info.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/get_weather_complete.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/get_weather_simple.yaml rename modules/ai-agents/examples/{ => mcp-tools/processors}/http_processor.yaml (100%) create mode 100644 modules/ai-agents/examples/mcp-tools/processors/lookup_customer.yaml rename modules/ai-agents/examples/{ => mcp-tools/processors}/observable_tool.yaml (100%) create mode 100644 modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/openai_embeddings.yaml rename modules/ai-agents/examples/{ => mcp-tools/processors}/order_workflow.yaml (100%) create mode 100644 modules/ai-agents/examples/mcp-tools/processors/search_jira.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/transform_validate.yaml rename modules/ai-agents/examples/{ => mcp-tools/processors}/weather_service.yaml (100%) create mode 100644 modules/ai-agents/examples/mcp-tools/snippets/bloblang_this_context.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/snippets/defaults.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/snippets/interpolation.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/snippets/secrets.yaml rename modules/ai-agents/examples/{test-mcp-examples.sh => mcp-tools/test-mcp-tools.sh} (62%) create mode 100644 modules/ai-agents/examples/pipelines/agent-transformation.yaml create mode 100644 modules/ai-agents/examples/pipelines/async-workflows.yaml create mode 100644 modules/ai-agents/examples/pipelines/event-driven-invocation.yaml create mode 100644 modules/ai-agents/examples/pipelines/fraud-detection-routing.yaml create mode 100644 modules/ai-agents/examples/pipelines/fraud-detection-simple.yaml create mode 100644 modules/ai-agents/examples/pipelines/multi-agent-orchestration.yaml create mode 100644 modules/ai-agents/examples/pipelines/streaming-enrichment.yaml create mode 100755 modules/ai-agents/examples/pipelines/test-pipelines.sh delete mode 100644 modules/ai-agents/examples/testing.adoc create mode 100644 modules/ai-agents/pages/agents/a2a-concepts.adoc create mode 100644 modules/ai-agents/pages/agents/build-index.adoc create mode 100644 modules/ai-agents/pages/agents/concepts.adoc delete mode 100644 modules/ai-agents/pages/agents/fundamentals.adoc create mode 100644 modules/ai-agents/pages/agents/get-started-index.adoc create mode 100644 modules/ai-agents/pages/agents/index.adoc create mode 100644 modules/ai-agents/pages/agents/integration-index.adoc create mode 100644 modules/ai-agents/pages/agents/integration-overview.adoc create mode 100644 modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc create mode 100644 modules/ai-agents/pages/agents/troubleshooting.adoc create mode 100644 modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc create mode 100644 modules/ai-agents/pages/mcp/index.adoc delete mode 100644 modules/ai-agents/pages/mcp/remote/admin-guide.adoc create mode 100644 modules/ai-agents/pages/observability/concepts.adoc create mode 100644 modules/ai-agents/pages/observability/index.adoc create mode 100644 modules/ai-agents/pages/observability/monitor-agents.adoc rename modules/ai-agents/pages/{mcp/remote/monitor-activity.adoc => observability/monitor-mcp-servers.adoc} (86%) create mode 100644 modules/develop/examples/cookbooks/jira/create-issue.yaml create mode 100644 modules/develop/examples/cookbooks/jira/input-once.yaml create mode 100644 modules/develop/examples/cookbooks/jira/input-periodic.yaml create mode 100755 modules/develop/examples/cookbooks/jira/test-jira-examples.sh create mode 100644 modules/develop/pages/connect/cookbooks/jira.adoc diff --git a/.github/workflows/test-mcp-examples.yaml b/.github/workflows/test-mcp-examples.yaml index 969adf4c6..c4b2d9cfb 100644 --- a/.github/workflows/test-mcp-examples.yaml +++ b/.github/workflows/test-mcp-examples.yaml @@ -1,22 +1,18 @@ -name: Test MCP Examples +name: Test Pipeline Examples on: - push: - branches: - - main - paths: - - 'modules/ai-agents/examples/**/*.yaml' - - 'modules/ai-agents/examples/test-mcp-examples.sh' pull_request: branches: - main paths: - 'modules/ai-agents/examples/**/*.yaml' - - 'modules/ai-agents/examples/test-mcp-examples.sh' + - 'modules/ai-agents/examples/**/*.sh' + - 'modules/develop/examples/**/*.yaml' + - 'modules/develop/examples/**/*.sh' jobs: test-all-examples: - name: Test All MCP Examples + name: Test All Pipeline Examples runs-on: ubuntu-latest steps: @@ -39,15 +35,33 @@ jobs: sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 sudo chmod +x /usr/local/bin/yq - - name: Make test script executable - run: chmod +x modules/ai-agents/examples/test-mcp-examples.sh + - name: Make test scripts executable + run: | + find modules/ai-agents/examples -name "*.sh" -exec chmod +x {} \; + find modules/develop/examples -name "*.sh" -exec chmod +x {} \; 2>/dev/null || true + + - name: Run MCP tools tests + run: | + cd modules/ai-agents/examples/mcp-tools + ./test-mcp-tools.sh + + - name: Run ai-agents pipeline tests + run: | + cd modules/ai-agents/examples/pipelines + ./test-pipelines.sh - - name: Run MCP examples tests + - name: Run cookbook tests run: | - cd modules/ai-agents/examples - ./test-mcp-examples.sh + for dir in modules/develop/examples/cookbooks/*/; do + if [[ -f "${dir}test-"*".sh" ]]; then + echo "Testing ${dir}..." + cd "${dir}" + ./test-*.sh + cd - > /dev/null + fi + done - name: Test Summary if: always() run: | - echo "::notice title=MCP Examples Testing::All Cloud MCP examples have been validated" + echo "::notice title=Pipeline Examples Testing::All pipeline examples have been validated" diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 24f2f775a..c59048850 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -70,31 +70,41 @@ ** xref:security:cloud-safety-reliability.adoc[Safety and Reliability] * xref:ai-agents:index.adoc[AI Agents] -** xref:ai-agents:agents/overview.adoc[Agents] -*** xref:ai-agents:agents/quickstart.adoc[Quickstart] -*** xref:ai-agents:agents/fundamentals.adoc[Agent Fundamentals] -*** xref:ai-agents:agents/architecture-patterns.adoc[Architecture Patterns] -*** xref:ai-agents:agents/create-agent.adoc[Create an Agent] -*** xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices] -*** xref:ai-agents:agents/a2a-workflows.adoc[Agent-to-Agent Workflows] -** xref:ai-agents:mcp/overview.adoc[MCP Overview] -** xref:ai-agents:mcp/local/index.adoc[Redpanda Cloud Management MCP Server] -*** xref:ai-agents:mcp/local/overview.adoc[Overview] -*** xref:ai-agents:mcp/local/quickstart.adoc[Quickstart] -*** xref:ai-agents:mcp/local/configuration.adoc[Configure] -** xref:ai-agents:mcp/remote/index.adoc[Remote MCP] -*** xref:ai-agents:mcp/remote/overview.adoc[Overview] -*** xref:ai-agents:mcp/remote/quickstart.adoc[Quickstart] -*** xref:ai-agents:mcp/remote/concepts.adoc[Concepts] -*** xref:ai-agents:mcp/remote/create-tool.adoc[Create a Tool] -*** xref:ai-agents:mcp/remote/best-practices.adoc[Best Practices] -*** xref:ai-agents:mcp/remote/tool-patterns.adoc[Tool Patterns] -*** xref:ai-agents:mcp/remote/troubleshooting.adoc[Troubleshooting] -*** xref:ai-agents:mcp/remote/admin-guide.adoc[Admin Guide] +** xref:ai-agents:agents/index.adoc[Agents] +*** xref:ai-agents:agents/get-started-index.adoc[Get Started] +**** xref:ai-agents:agents/overview.adoc[Overview] +**** xref:ai-agents:agents/concepts.adoc[Concepts] +**** xref:ai-agents:agents/quickstart.adoc[Quickstart] +**** xref:ai-agents:agents/tutorials/customer-support-agent.adoc[Multi-Tool Orchestration] +*** xref:ai-agents:agents/build-index.adoc[Build Agents] +**** xref:ai-agents:agents/create-agent.adoc[Create an Agent] +**** xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices] +**** xref:ai-agents:agents/architecture-patterns.adoc[Architecture Patterns] +**** xref:ai-agents:agents/troubleshooting.adoc[Troubleshoot] +*** xref:ai-agents:agents/integration-index.adoc[Agent Integrations] +**** xref:ai-agents:agents/integration-overview.adoc[Integration Patterns] +**** xref:ai-agents:agents/pipeline-integration-patterns.adoc[Pipeline to Agent] +**** xref:ai-agents:agents/a2a-concepts.adoc[A2A Protocol] +** xref:ai-agents:mcp/index.adoc[MCP] +*** xref:ai-agents:mcp/overview.adoc[Overview] +*** xref:ai-agents:mcp/remote/index.adoc[Remote MCP] +**** xref:ai-agents:mcp/remote/overview.adoc[Overview] +**** xref:ai-agents:mcp/remote/concepts.adoc[Concepts] +**** xref:ai-agents:mcp/remote/quickstart.adoc[Quickstart] +**** xref:ai-agents:mcp/remote/create-tool.adoc[Create a Tool] +**** xref:ai-agents:mcp/remote/best-practices.adoc[Best Practices] +**** xref:ai-agents:mcp/remote/tool-patterns.adoc[Tool Patterns] +**** xref:ai-agents:mcp/remote/troubleshooting.adoc[Troubleshoot] **** xref:ai-agents:mcp/remote/manage-servers.adoc[Manage Servers] **** xref:ai-agents:mcp/remote/scale-resources.adoc[Scale Resources] -**** xref:ai-agents:mcp/remote/monitor-activity.adoc[Monitor Activity] - +*** xref:ai-agents:mcp/local/index.adoc[Redpanda Cloud Management MCP Server] +**** xref:ai-agents:mcp/local/overview.adoc[Overview] +**** xref:ai-agents:mcp/local/quickstart.adoc[Quickstart] +**** xref:ai-agents:mcp/local/configuration.adoc[Configure] +** xref:ai-agents:observability/index.adoc[Observability] +*** xref:ai-agents:observability/concepts.adoc[Concepts] +*** xref:ai-agents:observability/monitor-agents.adoc[Monitor Agents] +*** xref:ai-agents:observability/monitor-mcp-servers.adoc[Monitor MCP Servers] * xref:develop:connect/about.adoc[Redpanda Connect] ** xref:develop:connect/connect-quickstart.adoc[Quickstart] ** xref:develop:connect/configuration/about.adoc[] @@ -131,6 +141,7 @@ **** xref:develop:connect/components/inputs/gcp_spanner_cdc.adoc[] **** xref:develop:connect/components/inputs/generate.adoc[] **** xref:develop:connect/components/inputs/http_client.adoc[] +**** xref:develop:connect/components/inputs/http_server.adoc[] **** xref:develop:connect/components/inputs/inproc.adoc[] **** xref:develop:connect/components/inputs/kafka.adoc[] **** xref:develop:connect/components/inputs/kafka_franz.adoc[] @@ -230,6 +241,7 @@ **** xref:develop:connect/components/outputs/timeplus.adoc[] *** xref:develop:connect/components/processors/about.adoc[] +**** xref:develop:connect/components/processors/a2a_message.adoc[] **** xref:develop:connect/components/processors/archive.adoc[] **** xref:develop:connect/components/processors/avro.adoc[] **** xref:develop:connect/components/processors/aws_bedrock_chat.adoc[] @@ -385,6 +397,7 @@ *** xref:develop:connect/cookbooks/joining_streams.adoc[] *** xref:develop:connect/cookbooks/redpanda_migrator.adoc[] *** xref:develop:connect/cookbooks/rag.adoc[] +*** xref:develop:connect/cookbooks/jira.adoc[] * xref:develop:index.adoc[Develop] ** xref:develop:kafka-clients.adoc[] diff --git a/modules/ai-agents/examples/agents/agent-config-multi.yaml b/modules/ai-agents/examples/agents/agent-config-multi.yaml deleted file mode 100644 index cd5f64082..000000000 --- a/modules/ai-agents/examples/agents/agent-config-multi.yaml +++ /dev/null @@ -1,147 +0,0 @@ -# Example: Multi-Agent Configuration (Root + Subagents) -# This is a conceptual example showing how a multi-agent architecture might be configured. -# Actual configuration is done through the Redpanda Cloud Console UI. - -# Root Agent - Orchestrates and delegates to subagents -root_agent: - name: ecommerce-orchestrator - description: Orchestrates e-commerce operations across specialized agents - - model: - provider: anthropic - name: claude-opus-4 - temperature: 0.2 - - system_prompt: | - You are an e-commerce orchestration agent. You coordinate operations - across three specialized agents: Order, Inventory, and Customer. - - Available subagents: - - order_agent: Manages order operations - - inventory_agent: Manages stock and inventory - - customer_agent: Manages customer profiles - - Your job is to: - 1. Understand user requests - 2. Determine which subagent(s) to call - 3. Combine results into coherent responses - - Rules: - - Delegate to subagents rather than calling tools directly - - Wait for subagent responses before proceeding - - Handle errors from subagents gracefully - - # Root agent has delegation tools - mcp_servers: - - name: agent-delegation - tools: - - call_order_agent - - call_inventory_agent - - call_customer_agent - - subagents: - - order_agent - - inventory_agent - - customer_agent - - max_iterations: 15 - -# Subagent 1: Order Agent -order_agent: - name: order-agent - description: Handles order management operations - - model: - provider: openai - name: gpt-4o - - system_prompt: | - You are an order management agent. You handle order retrieval, - status updates, and order calculations. - - Available tools: - - get_order - - update_order_status - - calculate_total - - Rules: - - Always validate order IDs before operations - - Never modify orders marked as completed - - mcp_servers: - - name: order-tools - tools: - - get_order - - update_order_status - - calculate_total - - max_iterations: 5 - -# Subagent 2: Inventory Agent -inventory_agent: - name: inventory-agent - description: Handles inventory and stock management - - model: - provider: openai - name: gpt-4o - - system_prompt: | - You are an inventory management agent. You check stock levels - and manage inventory reservations. - - Available tools: - - check_stock - - reserve_inventory - - release_inventory - - Rules: - - Always verify product IDs exist before operations - - Never reserve more than available stock - - mcp_servers: - - name: inventory-tools - tools: - - check_stock - - reserve_inventory - - release_inventory - - max_iterations: 5 - -# Subagent 3: Customer Agent -customer_agent: - name: customer-agent - description: Handles customer profile and history - - model: - provider: openai - name: gpt-4o - - system_prompt: | - You are a customer management agent. You retrieve customer - profiles and order history. - - Available tools: - - get_customer_profile - - get_order_history - - update_preferences - - Rules: - - Never expose sensitive customer data (passwords, payment info) - - Limit order history to last 100 orders by default - - mcp_servers: - - name: customer-tools - tools: - - get_customer_profile - - get_order_history - - update_preferences - - max_iterations: 5 - -# Security -secrets: - - name: openai-api-key - reference: openai_key_secret - - name: anthropic-api-key - reference: anthropic_key_secret diff --git a/modules/ai-agents/examples/agents/agent-config-single.yaml b/modules/ai-agents/examples/agents/agent-config-single.yaml deleted file mode 100644 index 9778a5978..000000000 --- a/modules/ai-agents/examples/agents/agent-config-single.yaml +++ /dev/null @@ -1,48 +0,0 @@ -# Example: Single Agent Configuration -# This is a conceptual example showing how a single-agent setup might be configured. -# Actual configuration is done through the Redpanda Cloud Console UI. - -agent: - name: order-analytics-agent - description: Analyzes customer orders and provides insights - - # LLM configuration - model: - provider: openai - name: gpt-4o - temperature: 0.1 - max_tokens: 2000 - - # System prompt defines agent behavior - system_prompt: | - You are an order analytics agent. - - Responsibilities: - - Answer questions about customer orders - - Analyze recent order trends - - Available tools: - - get_customer_orders - - analyze_recent_orders - - Rules: - - Present structured data as tables - - Never expose payment information - - Only analyze data from the last 90 days unless explicitly requested - - # MCP servers provide tools - mcp_servers: - - name: order-tools - tools: - - get_customer_orders - - analyze_recent_orders - - calculate_order_metrics - - # Execution settings - max_iterations: 10 - timeout_seconds: 60 - - # Security - secrets: - - name: openai-api-key - reference: openai_key_secret diff --git a/modules/ai-agents/examples/agents/system-prompt-order-analytics.txt b/modules/ai-agents/examples/agents/system-prompt-order-analytics.txt deleted file mode 100644 index 7b179babc..000000000 --- a/modules/ai-agents/examples/agents/system-prompt-order-analytics.txt +++ /dev/null @@ -1,32 +0,0 @@ -You are an order analytics agent. - -Responsibilities: -- Answer questions about customer orders -- Analyze recent order trends -- Provide insights on order patterns and anomalies - -Available tools: -- get_customer_orders: Retrieve order history for a specific customer -- analyze_recent_orders: Analyze orders within a time window -- calculate_order_metrics: Compute aggregated metrics (total value, average order size, etc.) - -Rules: -- Present structured data as tables -- Always state the analysis time window clearly -- Never expose payment information (card numbers, CVV, billing addresses) -- Only analyze data from the last 90 days unless explicitly requested -- If asked for payment details, respond: "I cannot access payment information for security reasons" -- Use UTC timezone for all timestamps -- Round currency values to 2 decimal places - -Output format: -- Use markdown tables for order lists -- Include column headers: Order ID, Date, Customer, Status, Total -- Provide summary statistics after tables (total orders, total value, date range) -- Explain any trends or anomalies you observe - -Example response structure: -1. State the query and time window -2. Present the data in a table -3. Provide summary statistics -4. Note any interesting patterns or anomalies diff --git a/modules/ai-agents/examples/memory_cache.yaml b/modules/ai-agents/examples/mcp-tools/caches/memory_cache.yaml similarity index 100% rename from modules/ai-agents/examples/memory_cache.yaml rename to modules/ai-agents/examples/mcp-tools/caches/memory_cache.yaml diff --git a/modules/ai-agents/examples/redpanda_cache.yaml b/modules/ai-agents/examples/mcp-tools/caches/redpanda_cache.yaml similarity index 100% rename from modules/ai-agents/examples/redpanda_cache.yaml rename to modules/ai-agents/examples/mcp-tools/caches/redpanda_cache.yaml diff --git a/modules/ai-agents/examples/mcp-tools/caches/session_cache.yaml b/modules/ai-agents/examples/mcp-tools/caches/session_cache.yaml new file mode 100644 index 000000000..851773db9 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/caches/session_cache.yaml @@ -0,0 +1,13 @@ +# In-memory cache for session data +# Example of cache tool +# tag::complete[] +label: session-cache + +memory: + default_ttl: 300s + +meta: + mcp: + enabled: true + description: "In-memory cache for session data" +# end::complete[] diff --git a/modules/ai-agents/examples/mcp-tools/inputs/consume_redpanda.yaml b/modules/ai-agents/examples/mcp-tools/inputs/consume_redpanda.yaml new file mode 100644 index 000000000..841dd5aaa --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/inputs/consume_redpanda.yaml @@ -0,0 +1,22 @@ +# Consume events from Redpanda topics +# Use for event-driven AI agents, audit logs, or data change streams +label: consume-events + +# tag::component[] +redpanda: + seed_brokers: [ "${REDPANDA_BROKERS}" ] + topics: [ "user-events" ] + consumer_group: "mcp-event-processor" + start_from_oldest: true + tls: + enabled: true + sasl: + - mechanism: "${REDPANDA_SASL_MECHANISM}" + username: "${REDPANDA_SASL_USERNAME}" + password: "${REDPANDA_SASL_PASSWORD}" +# end::component[] + +meta: + mcp: + enabled: true + description: "Consume events from user-events topic" diff --git a/modules/ai-agents/examples/mcp-tools/inputs/event_driven_workflow.yaml b/modules/ai-agents/examples/mcp-tools/inputs/event_driven_workflow.yaml new file mode 100644 index 000000000..53dadb15b --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/inputs/event_driven_workflow.yaml @@ -0,0 +1,35 @@ +# Event-driven workflow orchestration +# Use for multi-step processes, saga patterns, microservice coordination +label: order-workflow + +# tag::component[] +redpanda: + seed_brokers: [ "${REDPANDA_BROKERS}" ] + topics: [ "order-events" ] + consumer_group: "workflow-orchestrator" + tls: + enabled: true + sasl: + - mechanism: "${REDPANDA_SASL_MECHANISM}" + username: "${REDPANDA_SASL_USERNAME}" + password: "${REDPANDA_SASL_PASSWORD}" + processors: + - switch: + - check: this.event_type == "order_created" + processors: + - http: + url: "${secrets.INVENTORY_API}/reserve" + verb: POST + body: '{"order_id": "${! this.order_id }", "items": ${! json("items") }}' + - check: this.event_type == "payment_confirmed" + processors: + - http: + url: "${secrets.FULFILLMENT_API}/ship" + verb: POST + body: '{"order_id": "${! this.order_id }"}' +# end::component[] + +meta: + mcp: + enabled: true + description: "Process order events and orchestrate fulfillment workflow" diff --git a/modules/ai-agents/examples/generate_input.yaml b/modules/ai-agents/examples/mcp-tools/inputs/generate_input.yaml similarity index 100% rename from modules/ai-agents/examples/generate_input.yaml rename to modules/ai-agents/examples/mcp-tools/inputs/generate_input.yaml diff --git a/modules/ai-agents/examples/mcp-tools/inputs/read_events.yaml b/modules/ai-agents/examples/mcp-tools/inputs/read_events.yaml new file mode 100644 index 000000000..8627214f5 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/inputs/read_events.yaml @@ -0,0 +1,21 @@ +# Read events from Redpanda +# Example of input tool +# tag::complete[] +label: read-events + +redpanda: # <1> + seed_brokers: ["${REDPANDA_BROKERS}"] + topics: ["events"] + consumer_group: "mcp-reader" + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${secrets.MCP_USERNAME}" + password: "${secrets.MCP_PASSWORD}" + +meta: + mcp: + enabled: true + description: "Read events from Redpanda" +# end::complete[] diff --git a/modules/ai-agents/examples/mcp-tools/inputs/stream_processing.yaml b/modules/ai-agents/examples/mcp-tools/inputs/stream_processing.yaml new file mode 100644 index 000000000..0afbd9c14 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/inputs/stream_processing.yaml @@ -0,0 +1,28 @@ +# Process streaming data with aggregations +# Use for real-time analytics, windowed aggregations, computing metrics +label: process-sensor-data + +# tag::component[] +redpanda: + seed_brokers: [ "${REDPANDA_BROKERS}" ] + topics: [ "sensor-readings" ] + consumer_group: "analytics-processor" + tls: + enabled: true + sasl: + - mechanism: "${REDPANDA_SASL_MECHANISM}" + username: "${REDPANDA_SASL_USERNAME}" + password: "${REDPANDA_SASL_PASSWORD}" + processors: + - mapping: | + root.sensor_id = this.sensor_id + root.avg_temperature = this.readings.map_each(r -> r.temperature).mean() + root.max_temperature = this.readings.map_each(r -> r.temperature).max() + root.reading_count = this.readings.length() + root.window_end = now() +# end::component[] + +meta: + mcp: + enabled: true + description: "Process sensor readings and compute aggregations" diff --git a/modules/ai-agents/examples/mcp-tools/outputs/publish_event.yaml b/modules/ai-agents/examples/mcp-tools/outputs/publish_event.yaml new file mode 100644 index 000000000..748aea014 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/outputs/publish_event.yaml @@ -0,0 +1,20 @@ +# Publish event to Redpanda +# Example of output tool +# tag::complete[] +label: publish-event + +redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: "processed-events" + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${secrets.MCP_USERNAME}" + password: "${secrets.MCP_PASSWORD}" + +meta: + mcp: + enabled: true + description: "Publish event to Redpanda" +# end::complete[] diff --git a/modules/ai-agents/examples/mcp-tools/outputs/publish_with_timestamp.yaml b/modules/ai-agents/examples/mcp-tools/outputs/publish_with_timestamp.yaml new file mode 100644 index 000000000..93fcd82f5 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/outputs/publish_with_timestamp.yaml @@ -0,0 +1,25 @@ +# Publish event with timestamp +# Example of output tool with processors +# tag::complete[] +label: publish-with-timestamp + +processors: + - mutation: | + root = this + root.published_at = now() + +redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: "processed-events" + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${secrets.MCP_USERNAME}" + password: "${secrets.MCP_PASSWORD}" + +meta: + mcp: + enabled: true + description: "Add timestamp and publish to Redpanda" +# end::complete[] diff --git a/modules/ai-agents/examples/redpanda_output.yaml b/modules/ai-agents/examples/mcp-tools/outputs/redpanda_output.yaml similarity index 100% rename from modules/ai-agents/examples/redpanda_output.yaml rename to modules/ai-agents/examples/mcp-tools/outputs/redpanda_output.yaml diff --git a/modules/ai-agents/examples/redpanda_output_with_processors.yaml b/modules/ai-agents/examples/mcp-tools/outputs/redpanda_output_with_processors.yaml similarity index 100% rename from modules/ai-agents/examples/redpanda_output_with_processors.yaml rename to modules/ai-agents/examples/mcp-tools/outputs/redpanda_output_with_processors.yaml diff --git a/modules/ai-agents/examples/customer_enrichment.yaml b/modules/ai-agents/examples/mcp-tools/processors/customer_enrichment.yaml similarity index 100% rename from modules/ai-agents/examples/customer_enrichment.yaml rename to modules/ai-agents/examples/mcp-tools/processors/customer_enrichment.yaml diff --git a/modules/ai-agents/examples/mcp-tools/processors/enrich_order.yaml b/modules/ai-agents/examples/mcp-tools/processors/enrich_order.yaml new file mode 100644 index 000000000..604f1da65 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/enrich_order.yaml @@ -0,0 +1,15 @@ +# Enrich order with customer data +# Example of processor tool with HTTP call +# tag::complete[] +label: enrich-order + +processors: + - http: + url: "https://api.example.com/lookup" + verb: GET + +meta: + mcp: + enabled: true + description: "Enrich order with customer data" +# end::complete[] diff --git a/modules/ai-agents/examples/gcp_bigquery_select_processor.yaml b/modules/ai-agents/examples/mcp-tools/processors/gcp_bigquery_select_processor.yaml similarity index 100% rename from modules/ai-agents/examples/gcp_bigquery_select_processor.yaml rename to modules/ai-agents/examples/mcp-tools/processors/gcp_bigquery_select_processor.yaml diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_customer_history.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_customer_history.yaml new file mode 100644 index 000000000..183e4f84b --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/get_customer_history.yaml @@ -0,0 +1,38 @@ +label: get_customer_history + +processors: + - mapping: | + let customer_id = this.customer_id + root = if $customer_id == "CUST-100" { + { + "customer_id": $customer_id, + "orders": [ + {"order_id": "ORD-12345", "status": "shipped", "total": 1299.99, "order_date": "2025-01-10"}, + {"order_id": "ORD-67890", "status": "processing", "total": 299.98, "order_date": "2025-01-14"}, + {"order_id": "ORD-11111", "status": "delivered", "total": 89.99, "order_date": "2024-12-20"} + ], + "total_orders": 3 + } + } else if $customer_id == "CUST-999" { + { + "customer_id": $customer_id, + "orders": [], + "total_orders": 0, + "message": "No orders found for this customer" + } + } else { + { + "error": true, + "message": "Customer not found" + } + } + +meta: + mcp: + enabled: true + description: "Retrieve order history. Use CUST-100 (has orders) or CUST-999 (no orders) for testing." + properties: + - name: customer_id + type: string + description: "The customer ID (format CUST-XXX)" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_order_status.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_order_status.yaml new file mode 100644 index 000000000..7e78f8ca9 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/get_order_status.yaml @@ -0,0 +1,48 @@ +label: get_order_status + +processors: + - mapping: | + let order_id = this.order_id + root = if $order_id == "ORD-12345" { + { + "order_id": $order_id, + "status": "shipped", + "items": [{"name": "Laptop", "quantity": 1, "price": 1299.99}], + "total": 1299.99, + "order_date": "2025-01-10", + "customer_id": "CUST-100" + } + } else if $order_id == "ORD-67890" { + { + "order_id": $order_id, + "status": "processing", + "items": [{"name": "Headphones", "quantity": 2, "price": 149.99}], + "total": 299.98, + "order_date": "2025-01-14", + "customer_id": "CUST-100" + } + } else if $order_id == "ORD-99999" { + { + "error": true, + "message": "Order not found" + } + } else { + { + "order_id": $order_id, + "status": "pending", + "items": [{"name": "Generic Item", "quantity": 1, "price": 49.99}], + "total": 49.99, + "order_date": "2025-01-15", + "customer_id": "CUST-999" + } + } + +meta: + mcp: + enabled: true + description: "Retrieve order status and details. Use ORD-12345 (shipped), ORD-67890 (processing), or ORD-99999 (not found) for testing." + properties: + - name: order_id + type: string + description: "The order ID (format ORD-XXXXX)" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_shipping_info.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_shipping_info.yaml new file mode 100644 index 000000000..40ca21dfa --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/get_shipping_info.yaml @@ -0,0 +1,38 @@ +label: get_shipping_info + +processors: + - mapping: | + let order_id = this.order_id + root = if $order_id == "ORD-12345" { + { + "order_id": $order_id, + "tracking_number": "FX1234567890", + "carrier": "FedEx", + "status": "in_transit", + "estimated_delivery": "2025-01-17", + "last_location": "San Francisco Distribution Center", + "last_update": "2025-01-15T14:30:00Z" + } + } else if $order_id == "ORD-67890" { + { + "order_id": $order_id, + "error": true, + "message": "Order has not shipped yet" + } + } else { + { + "order_id": $order_id, + "error": true, + "message": "No shipping information available" + } + } + +meta: + mcp: + enabled: true + description: "Get tracking and shipping information. ORD-12345 has shipping info, ORD-67890 has not shipped yet." + properties: + - name: order_id + type: string + description: "The order ID to track" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_weather_complete.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_weather_complete.yaml new file mode 100644 index 000000000..5e57cc929 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/get_weather_complete.yaml @@ -0,0 +1,55 @@ +# Complete weather tool with validation, error handling, and response formatting +# tag::complete[] +label: get-weather + +processors: + # Validate and sanitize input + - label: validate_city + mutation: | + root.city = if this.city.or("").trim() == "" { + throw("city is required") + } else { + this.city.trim().lowercase().re_replace_all("[^a-z\\s\\-]", "") + } + root.units = this.units.or("metric") + + # Fetch weather data + - label: fetch_weather + try: + - http: + url: 'https://wttr.in/${! json("city") }?format=j1' + verb: GET + timeout: 10s + + - mutation: | + root.weather = { + "location": this.nearest_area.0.areaName.0.value, + "country": this.nearest_area.0.country.0.value, + "temperature_c": this.current_condition.0.temp_C, + "temperature_f": this.current_condition.0.temp_F, + "condition": this.current_condition.0.weatherDesc.0.value, + "humidity": this.current_condition.0.humidity, + "wind_kph": this.current_condition.0.windspeedKmph + } + + # Handle errors gracefully + - label: handle_errors + catch: + - mutation: | + root.error = true + root.message = "Failed to fetch weather: " + error() + +meta: + mcp: + enabled: true + description: "Get current weather for a city. Returns temperature, conditions, humidity, and wind speed." + properties: + - name: city + type: string + description: "City name (e.g., 'London', 'New York', 'Tokyo')" + required: true + - name: units + type: string + description: "Temperature units: 'metric' or 'imperial' (default: metric)" + required: false +# end::complete[] diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_weather_simple.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_weather_simple.yaml new file mode 100644 index 000000000..445bf7679 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/get_weather_simple.yaml @@ -0,0 +1,17 @@ +# Simple weather tool - minimal example +# tag::complete[] +http: + url: "https://wttr.in/${! this.city }?format=j1" + verb: GET + +meta: + mcp: + enabled: true + name: get_weather + description: "Get current weather for a city" + properties: + - name: city + type: string + description: "City name" + required: true +# end::complete[] diff --git a/modules/ai-agents/examples/http_processor.yaml b/modules/ai-agents/examples/mcp-tools/processors/http_processor.yaml similarity index 100% rename from modules/ai-agents/examples/http_processor.yaml rename to modules/ai-agents/examples/mcp-tools/processors/http_processor.yaml diff --git a/modules/ai-agents/examples/mcp-tools/processors/lookup_customer.yaml b/modules/ai-agents/examples/mcp-tools/processors/lookup_customer.yaml new file mode 100644 index 000000000..6fba9edfa --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/lookup_customer.yaml @@ -0,0 +1,23 @@ +# Look up customer by ID from PostgreSQL +# Example of sql_select processor tool +# tag::complete[] +label: lookup-customer # <1> + +sql_select: # <2> + driver: postgres + dsn: "${secrets.DATABASE_URL}" + table: customers + columns: ["id", "name", "email", "plan"] + where: id = ? + args_mapping: '[this.customer_id]' + +meta: # <3> + mcp: + enabled: true + description: "Look up a customer by ID and return their profile." + properties: + - name: customer_id + type: string + description: "The customer's unique identifier" + required: true +# end::complete[] diff --git a/modules/ai-agents/examples/observable_tool.yaml b/modules/ai-agents/examples/mcp-tools/processors/observable_tool.yaml similarity index 100% rename from modules/ai-agents/examples/observable_tool.yaml rename to modules/ai-agents/examples/mcp-tools/processors/observable_tool.yaml diff --git a/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml b/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml new file mode 100644 index 000000000..55da6473d --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml @@ -0,0 +1,27 @@ +# OpenAI chat completion for sentiment analysis +# Use for text generation, classification, summarization +label: analyze-feedback + +# tag::component[] +openai_chat_completion: + api_key: "${secrets.OPENAI_API_KEY}" + model: "gpt-4" + prompt: | + Analyze this customer feedback and provide: + 1. Sentiment (positive/negative/neutral) + 2. Key themes + 3. Actionable insights + + Feedback: ${! json("feedback_text") } + max_tokens: 500 +# end::component[] + +meta: + mcp: + enabled: true + description: "Analyze customer feedback for sentiment and themes" + properties: + - name: feedback_text + type: string + description: "The customer feedback text to analyze" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/openai_embeddings.yaml b/modules/ai-agents/examples/mcp-tools/processors/openai_embeddings.yaml new file mode 100644 index 000000000..0c7f15f8e --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/openai_embeddings.yaml @@ -0,0 +1,20 @@ +# Generate embeddings with OpenAI +# Use for semantic search, RAG pipelines, similarity matching +label: generate-embeddings + +# tag::component[] +openai_embeddings: + api_key: "${secrets.OPENAI_API_KEY}" + model: "text-embedding-3-small" + text: ${! json("content") } +# end::component[] + +meta: + mcp: + enabled: true + description: "Generate vector embeddings for text content" + properties: + - name: content + type: string + description: "Text content to generate embeddings for" + required: true diff --git a/modules/ai-agents/examples/order_workflow.yaml b/modules/ai-agents/examples/mcp-tools/processors/order_workflow.yaml similarity index 100% rename from modules/ai-agents/examples/order_workflow.yaml rename to modules/ai-agents/examples/mcp-tools/processors/order_workflow.yaml diff --git a/modules/ai-agents/examples/mcp-tools/processors/search_jira.yaml b/modules/ai-agents/examples/mcp-tools/processors/search_jira.yaml new file mode 100644 index 000000000..7ef2d6673 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/search_jira.yaml @@ -0,0 +1,31 @@ +# Search Jira issues using JQL +# Requires Enterprise license +# tag::complete[] +label: search-jira + +processors: + - generate: + count: 1 + mapping: | + root.jql = this.jql + root.maxResults = this.max_results.or(50) + root.fields = ["key", "summary", "status", "assignee", "priority"] + - jira: + base_url: "${secrets.JIRA_BASE_URL}" + username: "${secrets.JIRA_USERNAME}" + api_token: "${secrets.JIRA_API_TOKEN}" + +meta: + mcp: + enabled: true + description: "Search Jira issues using JQL. Returns matching issues with key, summary, status, assignee, and priority." + properties: + - name: jql + type: string + description: "JQL query (e.g., 'project = DOC AND status = Open')" + required: true + - name: max_results + type: number + description: "Maximum issues to return (default: 50)" + required: false +# end::complete[] diff --git a/modules/ai-agents/examples/mcp-tools/processors/transform_validate.yaml b/modules/ai-agents/examples/mcp-tools/processors/transform_validate.yaml new file mode 100644 index 000000000..d7b38dab3 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/transform_validate.yaml @@ -0,0 +1,40 @@ +# Transform and validate data with Bloblang +# Use for parsing, validation, filtering, enrichment +label: transform-user-data + +processors: + # tag::mapping[] + - mapping: | + # Parse and validate incoming data + root.user_id = this.user_id.or(throw("user_id is required")) + root.timestamp = now().ts_format("2006-01-02T15:04:05Z07:00") + + # Transform and enrich + root.email_domain = this.email.split("@").index(1) + root.is_premium = this.subscription_tier == "premium" + + # Filter sensitive data + root.profile = this.profile.without("ssn", "credit_card") + # end::mapping[] + +meta: + mcp: + enabled: true + description: "Transform and validate user data" + properties: + - name: user_id + type: string + description: "User identifier" + required: true + - name: email + type: string + description: "User email address" + required: true + - name: subscription_tier + type: string + description: "Subscription level" + required: false + - name: profile + type: object + description: "User profile data" + required: false diff --git a/modules/ai-agents/examples/weather_service.yaml b/modules/ai-agents/examples/mcp-tools/processors/weather_service.yaml similarity index 100% rename from modules/ai-agents/examples/weather_service.yaml rename to modules/ai-agents/examples/mcp-tools/processors/weather_service.yaml diff --git a/modules/ai-agents/examples/mcp-tools/snippets/bloblang_this_context.yaml b/modules/ai-agents/examples/mcp-tools/snippets/bloblang_this_context.yaml new file mode 100644 index 000000000..18409d0a1 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/snippets/bloblang_this_context.yaml @@ -0,0 +1,15 @@ +# Bloblang 'this' context examples +# Use 'this' to access message fields in mutation, mapping, or args_mapping + +# tag::mutation[] +mutation: | + root.search_query = this.query.lowercase() + root.max_results = this.limit.or(10) +# end::mutation[] + +# tag::args_mapping[] +sql_select: + table: orders + where: customer_id = ? AND status = ? + args_mapping: '[this.customer_id, this.status.or("active")]' +# end::args_mapping[] diff --git a/modules/ai-agents/examples/mcp-tools/snippets/defaults.yaml b/modules/ai-agents/examples/mcp-tools/snippets/defaults.yaml new file mode 100644 index 000000000..2360420bc --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/snippets/defaults.yaml @@ -0,0 +1,20 @@ +# Handling optional parameters with defaults + +# tag::mutation[] +mutation: | + root.city = this.city # Required - will error if missing + root.units = this.units.or("metric") # Optional with default + root.limit = this.limit.or(10).number() # Optional, converted to number +# end::mutation[] + +# tag::properties[] +properties: + - name: city + type: string + description: "City name to look up" + required: true + - name: units + type: string + description: "Temperature units: 'metric' or 'imperial' (default: metric)" + required: false +# end::properties[] diff --git a/modules/ai-agents/examples/mcp-tools/snippets/interpolation.yaml b/modules/ai-agents/examples/mcp-tools/snippets/interpolation.yaml new file mode 100644 index 000000000..90bd0d8c5 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/snippets/interpolation.yaml @@ -0,0 +1,13 @@ +# Bloblang interpolation in string fields +# Use ${! ... } to embed expressions in URLs, topics, headers + +# tag::http_url[] +http: + url: 'https://api.weather.com/v1/current?city=${! json("city") }&units=${! json("units").or("metric") }' +# end::http_url[] + +# tag::redpanda_topic[] +redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] # <1> + topic: '${! json("topic_name") }' # <2> +# end::redpanda_topic[] diff --git a/modules/ai-agents/examples/mcp-tools/snippets/secrets.yaml b/modules/ai-agents/examples/mcp-tools/snippets/secrets.yaml new file mode 100644 index 000000000..3ac6f98db --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/snippets/secrets.yaml @@ -0,0 +1,14 @@ +# Using secrets in tool configurations +# Reference secrets with ${secrets.SECRET_NAME} syntax + +# tag::example[] +http: + url: "https://api.example.com/data" + headers: + Authorization: "Bearer ${secrets.API_TOKEN}" + +sql_select: + driver: postgres + dsn: "${secrets.DATABASE_URL}" + table: customers +# end::example[] diff --git a/modules/ai-agents/examples/test-mcp-examples.sh b/modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh similarity index 62% rename from modules/ai-agents/examples/test-mcp-examples.sh rename to modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh index 068f7306a..f815a561f 100755 --- a/modules/ai-agents/examples/test-mcp-examples.sh +++ b/modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh @@ -7,8 +7,8 @@ # 2. MCP metadata validation (enabled, description, properties) # # Usage: -# ./test-mcp-examples.sh # Run all tests -# ./test-mcp-examples.sh --lint-only # Only lint, skip metadata validation +# ./test-mcp-tools.sh # Run all tests +# ./test-mcp-tools.sh --lint-only # Only lint, skip metadata validation # # Unlike rp-connect-docs, Cloud MCP tools cannot be tested with # `rpk connect run` because they are standalone tool definitions, not @@ -24,10 +24,13 @@ BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' -# Get script directory +# Get script directory (script lives inside mcp-tools/) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" +# Component type directories +COMPONENT_DIRS=("inputs" "outputs" "processors" "caches") + # Counters TOTAL_TOOLS=0 PASSED_LINT=0 @@ -61,20 +64,24 @@ echo -e "📦 ${CYAN}SECTION 1: MCP Tool Linting${NC}" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" -# Count YAML files -file_count=$(find . -maxdepth 1 -name "*.yaml" | wc -l | tr -d ' ') -TOTAL_TOOLS=$file_count - -echo -n -e "${BLUE}📁 examples/${NC} ($file_count files)... " - -if output=$(rpk connect mcp-server lint --skip-env-var-check . 2>&1); then - echo -e "${GREEN}✓ PASSED${NC}" - PASSED_LINT=$file_count -else - echo -e "${RED}✗ FAILED${NC}" - echo "$output" | sed 's/^/ /' | head -20 - FAILED_LINT=$file_count -fi +for dir in "${COMPONENT_DIRS[@]}"; do + if [[ -d "$dir" ]]; then + file_count=$(find "$dir" -maxdepth 1 -name "*.yaml" | wc -l | tr -d ' ') + if [[ $file_count -gt 0 ]]; then + TOTAL_TOOLS=$((TOTAL_TOOLS + file_count)) + echo -n -e "${BLUE}📁 $dir/${NC} ($file_count files)... " + + if output=$(rpk connect mcp-server lint --skip-env-var-check "$dir" 2>&1); then + echo -e "${GREEN}✓ PASSED${NC}" + PASSED_LINT=$((PASSED_LINT + file_count)) + else + echo -e "${RED}✗ FAILED${NC}" + echo "$output" | sed 's/^/ /' | head -20 + FAILED_LINT=$((FAILED_LINT + file_count)) + fi + fi + fi +done # ============================================================================ # SECTION 2: MCP Metadata Validation @@ -99,17 +106,19 @@ if $RUN_METADATA; then fi if $RUN_METADATA; then - for file in *.yaml; do - if [[ -f "$file" ]]; then - echo -n -e " ${BLUE}$file${NC}... " - - # Check if .meta.mcp exists - if $use_yq; then - mcp_exists=$(yq eval '.meta.mcp' "$file" 2>/dev/null) - enabled=$(yq eval '.meta.mcp.enabled' "$file" 2>/dev/null) - description=$(yq eval '.meta.mcp.description' "$file" 2>/dev/null) - else - mcp_exists=$(python3 -c " + for dir in "${COMPONENT_DIRS[@]}"; do + if [[ -d "$dir" ]]; then + for file in "$dir"/*.yaml; do + if [[ -f "$file" ]]; then + echo -n -e " ${BLUE}$file${NC}... " + + # Check if .meta.mcp exists + if $use_yq; then + mcp_exists=$(yq eval '.meta.mcp' "$file" 2>/dev/null) + enabled=$(yq eval '.meta.mcp.enabled' "$file" 2>/dev/null) + description=$(yq eval '.meta.mcp.description' "$file" 2>/dev/null) + else + mcp_exists=$(python3 -c " import yaml try: with open('$file') as f: @@ -120,7 +129,7 @@ try: except: print('null') " 2>/dev/null) - enabled=$(python3 -c " + enabled=$(python3 -c " import yaml try: with open('$file') as f: @@ -130,7 +139,7 @@ try: except: print('null') " 2>/dev/null) - description=$(python3 -c " + description=$(python3 -c " import yaml try: with open('$file') as f: @@ -140,22 +149,24 @@ try: except: print('null') " 2>/dev/null) - fi - - # Validate - if [[ "$mcp_exists" == "null" || -z "$mcp_exists" ]]; then - echo -e "${YELLOW}SKIPPED${NC} (no MCP metadata)" - SKIPPED=$((SKIPPED + 1)) - elif [[ "$enabled" != "true" ]]; then - echo -e "${YELLOW}WARNING${NC} (mcp.enabled not true)" - SKIPPED=$((SKIPPED + 1)) - elif [[ "$description" == "null" || -z "$description" ]]; then - echo -e "${RED}FAILED${NC} (missing description)" - FAILED_METADATA=$((FAILED_METADATA + 1)) - else - echo -e "${GREEN}PASSED${NC}" - PASSED_METADATA=$((PASSED_METADATA + 1)) - fi + fi + + # Validate + if [[ "$mcp_exists" == "null" || -z "$mcp_exists" ]]; then + echo -e "${YELLOW}SKIPPED${NC} (no MCP metadata)" + SKIPPED=$((SKIPPED + 1)) + elif [[ "$enabled" != "true" ]]; then + echo -e "${YELLOW}WARNING${NC} (mcp.enabled not true)" + SKIPPED=$((SKIPPED + 1)) + elif [[ "$description" == "null" || -z "$description" ]]; then + echo -e "${RED}FAILED${NC} (missing description)" + FAILED_METADATA=$((FAILED_METADATA + 1)) + else + echo -e "${GREEN}PASSED${NC}" + PASSED_METADATA=$((PASSED_METADATA + 1)) + fi + fi + done fi done fi @@ -173,16 +184,20 @@ echo "━━━━━━━━━━━━━━━━━━━━━━━━ echo "" secrets_issues=0 -for file in *.yaml; do - if [[ -f "$file" ]]; then - # Check for non-Cloud secrets patterns (${VAR} without secrets. prefix) - # Exclude: - # - ${! ... } which is Bloblang interpolation - # - ${REDPANDA_BROKERS} which is platform-injected - if grep -E '\$\{[A-Z_]+\}' "$file" | grep -v '\${secrets\.' | grep -v '\${!' | grep -v '\${REDPANDA_BROKERS}' > /dev/null 2>&1; then - echo -e " ${BLUE}$file${NC}... ${YELLOW}WARNING${NC} (uses env vars instead of \${secrets.X})" - secrets_issues=$((secrets_issues + 1)) - fi +for dir in "${COMPONENT_DIRS[@]}"; do + if [[ -d "$dir" ]]; then + for file in "$dir"/*.yaml; do + if [[ -f "$file" ]]; then + # Check for non-Cloud secrets patterns (${VAR} without secrets. prefix) + # Exclude: + # - ${! ... } which is Bloblang interpolation + # - ${REDPANDA_BROKERS} which is platform-injected + if grep -E '\$\{[A-Z_]+\}' "$file" | grep -v '\${secrets\.' | grep -v '\${!' | grep -v '\${REDPANDA_BROKERS}' > /dev/null 2>&1; then + echo -e " ${BLUE}$file${NC}... ${YELLOW}WARNING${NC} (uses env vars instead of \${secrets.X})" + secrets_issues=$((secrets_issues + 1)) + fi + fi + done fi done diff --git a/modules/ai-agents/examples/pipelines/agent-transformation.yaml b/modules/ai-agents/examples/pipelines/agent-transformation.yaml new file mode 100644 index 000000000..b4c14609c --- /dev/null +++ b/modules/ai-agents/examples/pipelines/agent-transformation.yaml @@ -0,0 +1,32 @@ +# Agent as transformation node +# Uses agent reasoning for complex transformations (natural language to SQL) +input: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topics: [nl-queries] + consumer_group: query-converter + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" + +pipeline: + # tag::processors[] + processors: + - a2a_message: + agent_card_url: "${AGENT_CARD_URL}" + prompt: "Convert to SQL: ${!this.natural_language_query}" + # end::processors[] + +output: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: sql-queries + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" diff --git a/modules/ai-agents/examples/pipelines/async-workflows.yaml b/modules/ai-agents/examples/pipelines/async-workflows.yaml new file mode 100644 index 000000000..38b0daf91 --- /dev/null +++ b/modules/ai-agents/examples/pipelines/async-workflows.yaml @@ -0,0 +1,32 @@ +# Asynchronous workflow pipeline +# Processes events in the background with acceptable latency +# tag::pipeline[] +input: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topics: [daily-reports] + consumer_group: report-analyzer + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" + +pipeline: + processors: + - a2a_message: + agent_card_url: "${AGENT_CARD_URL}" + prompt: "Summarize this report: ${!content()}" +# end::pipeline[] + +output: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: report-summaries + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" diff --git a/modules/ai-agents/examples/pipelines/event-driven-invocation.yaml b/modules/ai-agents/examples/pipelines/event-driven-invocation.yaml new file mode 100644 index 000000000..677beb960 --- /dev/null +++ b/modules/ai-agents/examples/pipelines/event-driven-invocation.yaml @@ -0,0 +1,30 @@ +# Event-driven agent invocation pipeline +# Invokes an agent for each event in a stream +input: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topics: [transactions] + consumer_group: fraud-detector + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" + +pipeline: + processors: + - a2a_message: + agent_card_url: "${AGENT_CARD_URL}" + prompt: "Analyze this transaction: ${!content()}" + +output: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: fraud-alerts + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" diff --git a/modules/ai-agents/examples/pipelines/fraud-detection-routing.yaml b/modules/ai-agents/examples/pipelines/fraud-detection-routing.yaml new file mode 100644 index 000000000..452eacebb --- /dev/null +++ b/modules/ai-agents/examples/pipelines/fraud-detection-routing.yaml @@ -0,0 +1,75 @@ +# Fraud detection pipeline with score-based routing +# Analyzes every transaction and routes to different topics based on fraud score +input: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topics: [transactions] + consumer_group: fraud-detector + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" + +pipeline: + processors: + - branch: + request_map: | + root.transaction_id = this.id + root.amount = this.amount + root.merchant = this.merchant + root.user_id = this.user_id + processors: + - a2a_message: + agent_card_url: "${AGENT_CARD_URL}" + prompt: | + Analyze this transaction for fraud: + Amount: ${! json("amount") } + Merchant: ${! json("merchant") } + User: ${! json("user_id") } + + Return JSON: { "fraud_score": 0-100, "reason": "explanation", "recommend_block": true/false } + result_map: | + root = this + root.fraud_analysis = content() + + - mapping: | + root = this + meta fraud_score = this.fraud_analysis.fraud_score + +output: + switch: + cases: + - check: 'meta("fraud_score") >= 80' + output: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: fraud-alerts-high + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" + - check: 'meta("fraud_score") >= 50' + output: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: fraud-alerts-medium + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" + - output: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: transactions-cleared + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" diff --git a/modules/ai-agents/examples/pipelines/fraud-detection-simple.yaml b/modules/ai-agents/examples/pipelines/fraud-detection-simple.yaml new file mode 100644 index 000000000..debb8baa6 --- /dev/null +++ b/modules/ai-agents/examples/pipelines/fraud-detection-simple.yaml @@ -0,0 +1,30 @@ +# Fraud detection pipeline that invokes an agent for every transaction +# Replace AGENT_CARD_URL with your actual agent card URL +input: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topics: [transactions] + consumer_group: fraud-detector + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" + +pipeline: + processors: + - a2a_message: + agent_card_url: "${AGENT_CARD_URL}" + prompt: "Analyze this transaction: ${!content()}" + +output: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: fraud-alerts + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" diff --git a/modules/ai-agents/examples/pipelines/multi-agent-orchestration.yaml b/modules/ai-agents/examples/pipelines/multi-agent-orchestration.yaml new file mode 100644 index 000000000..934d168ba --- /dev/null +++ b/modules/ai-agents/examples/pipelines/multi-agent-orchestration.yaml @@ -0,0 +1,35 @@ +# Multi-agent pipeline orchestration +# Chains multiple agents in sequence: translate -> analyze sentiment -> route +input: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topics: [international-feedback] + consumer_group: feedback-processor + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" + +pipeline: + # tag::processors[] + processors: + - a2a_message: + agent_card_url: "${TRANSLATOR_AGENT_URL}" + - a2a_message: + agent_card_url: "${SENTIMENT_AGENT_URL}" + - a2a_message: + agent_card_url: "${ROUTER_AGENT_URL}" + # end::processors[] + +output: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: processed-feedback + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" diff --git a/modules/ai-agents/examples/pipelines/streaming-enrichment.yaml b/modules/ai-agents/examples/pipelines/streaming-enrichment.yaml new file mode 100644 index 000000000..3f544d50d --- /dev/null +++ b/modules/ai-agents/examples/pipelines/streaming-enrichment.yaml @@ -0,0 +1,35 @@ +# Streaming data enrichment pipeline +# Adds AI-generated metadata (sentiment) to events +input: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topics: [customer-feedback] + consumer_group: sentiment-enricher + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" + +pipeline: + # tag::processors[] + processors: + - branch: + request_map: 'root = this.text' + processors: + - a2a_message: + agent_card_url: "${AGENT_CARD_URL}" + result_map: 'root.sentiment = content()' + # end::processors[] + +output: + redpanda: + seed_brokers: ["${REDPANDA_BROKERS}"] + topic: enriched-feedback + tls: + enabled: true + sasl: + - mechanism: SCRAM-SHA-256 + username: "${REDPANDA_USERNAME}" + password: "${REDPANDA_PASSWORD}" diff --git a/modules/ai-agents/examples/pipelines/test-pipelines.sh b/modules/ai-agents/examples/pipelines/test-pipelines.sh new file mode 100755 index 000000000..7945649fb --- /dev/null +++ b/modules/ai-agents/examples/pipelines/test-pipelines.sh @@ -0,0 +1,114 @@ +#!/usr/bin/env bash +# +# Test script for Redpanda Cloud pipeline examples +# +# This script uses rpk connect lint to validate pipeline configurations. +# Cloud-specific processors (like a2a_message) are not available in the local +# CLI, so those errors are expected and noted. +# +# Usage: +# ./test-pipelines.sh +# +# Exit codes: +# 0 - All files have valid YAML structure (Cloud processor errors are expected) +# 1 - YAML syntax errors or unexpected failures + +set -euo pipefail + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +CYAN='\033[0;36m' +NC='\033[0m' + +# Get script directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +# Counters +TOTAL=0 +PASSED=0 +CLOUD_PROCESSOR_ERRORS=0 +FAILED=0 + +echo "🧪 Redpanda Cloud Pipeline Examples - Test Suite" +echo "=================================================" +echo "" + +# Check for rpk +if ! command -v rpk &> /dev/null; then + echo -e "${RED}Error: rpk is required${NC}" + echo "Install rpk: https://docs.redpanda.com/current/get-started/rpk-install/" + exit 1 +fi + +echo -e "${CYAN}Using:${NC} $(rpk version 2>/dev/null | head -1 || echo 'rpk')" +echo "" + +# ============================================================================ +# Lint each pipeline file +# ============================================================================ + +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo -e "📦 ${CYAN}Pipeline Linting${NC}" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" + +for file in *.yaml; do + if [[ -f "$file" ]]; then + TOTAL=$((TOTAL + 1)) + echo -n -e " ${BLUE}$file${NC}... " + + # Run rpk connect lint + output=$(rpk connect lint --skip-env-var-check "$file" 2>&1) || true + + if [[ -z "$output" ]]; then + # No output means success + echo -e "${GREEN}PASSED${NC}" + PASSED=$((PASSED + 1)) + elif echo "$output" | grep -q "a2a_message\|unable to infer.*a2a"; then + # Cloud-specific processor error (expected) + echo -e "${YELLOW}OK${NC} (Cloud processor - requires Redpanda Cloud)" + CLOUD_PROCESSOR_ERRORS=$((CLOUD_PROCESSOR_ERRORS + 1)) + elif echo "$output" | grep -qi "yaml\|parse\|syntax"; then + # YAML syntax error (unexpected) + echo -e "${RED}FAILED${NC}" + echo "$output" | sed 's/^/ /' + FAILED=$((FAILED + 1)) + else + # Other lint error + echo -e "${YELLOW}WARNING${NC}" + echo "$output" | sed 's/^/ /' | head -5 + CLOUD_PROCESSOR_ERRORS=$((CLOUD_PROCESSOR_ERRORS + 1)) + fi + fi +done + +# ============================================================================ +# Summary +# ============================================================================ + +echo "" +echo "=================================================" +echo "📊 Test Summary" +echo "=================================================" +echo -e "Total files: $TOTAL" +echo -e "Fully passed: $PASSED" +echo -e "Cloud processors: $CLOUD_PROCESSOR_ERRORS (expected - requires Cloud)" +echo -e "Failed: $FAILED" +echo "──────────────────────────────────────────────────" + +if [[ $FAILED -gt 0 ]]; then + echo -e "${RED}❌ $FAILED file(s) have YAML errors${NC}" + exit 1 +else + echo -e "${GREEN}✅ All files valid${NC}" + if [[ $CLOUD_PROCESSOR_ERRORS -gt 0 ]]; then + echo "" + echo -e "${YELLOW}Note: $CLOUD_PROCESSOR_ERRORS file(s) use Cloud-specific processors (a2a_message)${NC}" + echo -e "${YELLOW}These require deployment to Redpanda Cloud for full validation.${NC}" + fi + exit 0 +fi diff --git a/modules/ai-agents/examples/testing.adoc b/modules/ai-agents/examples/testing.adoc deleted file mode 100644 index 96d8525ab..000000000 --- a/modules/ai-agents/examples/testing.adoc +++ /dev/null @@ -1,290 +0,0 @@ -= Test MCP Examples -:description: Automated testing strategies for Redpanda Cloud MCP server examples. - -This document describes the automated testing strategies for Redpanda Cloud MCP server examples. - -All MCP examples are automatically tested to ensure: - -. YAML syntax and structure are correct -. MCP metadata is complete and valid -. Component schemas match Redpanda Connect specifications -. Secrets syntax uses Cloud Secrets Store format (`${secrets.X}`) - -== Testing approaches - -=== Configuration linting - -Validate MCP tool configurations using `rpk connect lint`: - -[,bash] ----- -# Lint a single MCP tool -rpk connect lint weather_service.yaml - -# Lint all examples -rpk connect lint *.yaml - -# Lint with environment variable checking skipped (recommended for MCP) -rpk connect lint --skip-env-var-check *.yaml ----- - -This checks for common issues such as: - -* YAML syntax errors -* Unknown component types -* Invalid field names -* Type mismatches -* Missing required fields - -=== MCP metadata validation - -The test script validates MCP-specific metadata for all tool examples: - -[,bash] ----- -# Run all tests (includes linting + MCP validation) -./test-mcp-examples.sh - -# Test specific files -./test-mcp-examples.sh weather_*.yaml ----- - -MCP metadata validation checks: - -* Presence of `meta.mcp` section -* `enabled: true` is set -* `description` field exists and is non-empty -* `properties` are properly structured (if present) - -=== Unit testing limitations - -MCP tool examples are standalone component definitions (`label:`, `processors:`, `meta:`), not full pipelines with `input:`, `pipeline:`, `output:` sections. This means they cannot use inline `tests:` sections like cookbook examples do. - -The `rpk connect test` command requires full pipeline structure with paths like `/pipeline/processors/0`, which don't exist in MCP tool definitions. - -For testing MCP tools: - -- Ensure syntax and schema correctness. -- Verify MCP metadata has proper description and properties. -- Perform manual testing using the Cloud Console MCP Server interface to test tools end-to-end. - -== MCP tool structure - -MCP tools are structured as standalone components: - -[,yaml] ----- -label: weather-service -processors: - - label: fetch_weather_data - http: - url: 'https://wttr.in/${! @city }?format=j1' - verb: GET - - - label: format_response - mutation: | - root = { - "city": @city, - "temperature": this.current_condition.0.temp_C.number() - } - -meta: - mcp: - enabled: true - description: "Get current weather conditions for any city worldwide" - properties: - - name: city - type: string - description: "Name of the city" - required: true ----- - -== Test script usage - -The `test-mcp-examples.sh` script provides automated validation: - -[,bash] ----- -# Test all examples -./test-mcp-examples.sh - -# Test specific files -./test-mcp-examples.sh weather_*.yaml -./test-mcp-examples.sh customer_*.yaml ----- - -The script provides color-coded output: - -[,console] ----- -🧪 Redpanda Connect MCP Examples Test Suite (Cloud) -==================================================== - -📄 Testing: weather_service.yaml - Linting weather_service.yaml... PASSED - Validating MCP metadata... PASSED - -==================================================== -📊 Test Summary -==================================================== -Total configs tested: 10 -Passed: 10 -Failed: 0 - -✅ All tests passed! ----- - -== Manual end-to-end testing - -For comprehensive validation, test MCP tools using the Cloud Console: - -. Navigate to your Cloud cluster's MCP Server configuration -. Add or update your MCP tool configuration -. Use the Cloud Console's MCP Inspector to locate your tool -. Verify the tool executes correctly and returns expected results - -This validates: - -* Tool loads correctly in the MCP server -* Tool executes with provided parameters -* Responses are formatted correctly -* Secrets are properly resolved from Cloud Secrets Store - -== GitHub Actions CI/CD - -Automated tests run on every push and pull request using GitHub Actions. - -The workflow tests all examples whenever: - -* Any `.yaml` file in `modules/ai-agents/examples/` changes -* The test script itself is modified - -See `.github/workflows/test-mcp-examples.yaml` for the complete workflow. - -== Best practices - -=== Use descriptive tool names - -[,yaml] ----- -# Good -label: fetch-customer-orders - -# Bad -label: tool1 ----- - -=== Write clear MCP descriptions - -[,yaml] ----- -# Good -meta: - mcp: - description: "Fetch a customer's order history and calculate spending metrics over the last 30 days" - -# Bad -meta: - mcp: - description: "Get orders" ----- - -=== Document all properties - -[,yaml] ----- -# Good -properties: - - name: customer_id - type: string - description: "Unique identifier for the customer" - required: true - - name: days - type: number - description: "Number of days to look back (default: 30)" - required: false - -# Bad -properties: - - name: id - type: string - required: true ----- - -=== Use Cloud Secrets Store for sensitive data - -[,yaml] ----- -# Cloud format - uses Secrets Store -sql_select: - driver: "postgres" - dsn: "${secrets.POSTGRES_DSN}" - table: "customers" ----- - -=== Tag your examples - -[,yaml] ----- -meta: - tags: [ example, weather, api ] # Helps organize and filter - mcp: - enabled: true ----- - -== Adding new examples - -When adding new MCP tool examples: - -. **Create your YAML file** in `modules/ai-agents/examples/`: -+ -[,bash] ----- -cd modules/ai-agents/examples -touch my-new-tool.yaml ----- - -. **Include complete MCP metadata:** -+ -[,yaml] ----- -label: my-new-tool -processors: - # Your processor configuration - -meta: - mcp: - enabled: true - description: "Clear, task-oriented description" - properties: - - name: param_name - type: string - description: "Parameter purpose and constraints" - required: true ----- - -. **Lint your example:** -+ -[,bash] ----- -rpk connect lint --skip-env-var-check my-new-tool.yaml ----- - -. **Run automated tests:** -+ -[,bash] ----- -./test-mcp-examples.sh my-new-tool.yaml ----- - -. **Test in Cloud Console (recommended):** -+ -Deploy your MCP server configuration and test the tool through the Cloud Console AI interface. - -. **Commit your example:** -+ -[,bash] ----- -git add modules/ai-agents/examples/my-new-tool.yaml -git commit -m "Add my-new-tool MCP example" ----- diff --git a/modules/ai-agents/pages/agents/a2a-concepts.adoc b/modules/ai-agents/pages/agents/a2a-concepts.adoc new file mode 100644 index 000000000..0cb02ecc0 --- /dev/null +++ b/modules/ai-agents/pages/agents/a2a-concepts.adoc @@ -0,0 +1,158 @@ += A2A Protocol +:description: Learn how the A2A protocol enables agent discovery and communication. +:page-topic-type: concepts +:page-aliases: agents/external-app-integration.adoc +:personas: ai_agent_developer, app_developer, streaming_developer +:learning-objective-1: Describe the A2A protocol and its role in agent communication +:learning-objective-2: Explain how agent cards enable discovery +:learning-objective-3: Identify how authentication secures agent communication + +The Agent-to-Agent (A2A) protocol is an open standard for agent communication and discovery. Redpanda Cloud uses A2A for both external integration and internal pipeline-to-agent communication. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== What is the A2A protocol? + +The Agent-to-Agent (A2A) protocol is an open standard that defines how agents discover, communicate with, and invoke each other. + +Agents that implement A2A expose their capabilities through a standardized agent card. This allows other systems to interact with them without prior knowledge of their implementation. + +The protocol provides: + +* **Standardized discovery:** Agent cards describe capabilities in a machine-readable format. +* **Platform independence:** Any system can call any A2A-compliant agent. +* **Version negotiation:** Protocol versions ensure compatibility between agents. +* **Communication mode flexibility:** Supports synchronous request/response and streaming. + +For the complete specification, see link:https://a2a.ag/spec[a2a.ag/spec^]. + +== Agent cards + +Every A2A-compliant agent exposes an agent card at a well-known URL. + +The agent card is a JSON document that describes what the agent can do and how to interact with it. + +[#agent-card-location] +=== Agent card location + +Redpanda Cloud agents expose their agent cards at the `/.well-known/agent-card.json` subpath of the agent URL. You can find the agent URL on the agent overview page in the Redpanda Cloud Console under *Agentic AI* > *AI Agents*. + +For example, if your agent URL is `\https://my-agent.ai-agents.abc123.cloud.redpanda.com`, your agent card URL is `\https://my-agent.ai-agents.abc123.cloud.redpanda.com/.well-known/agent-card.json`. + +The `.well-known` path follows internet standards for service discovery, making agents discoverable without configuration. + +=== Agent card contents + +An agent card describes: + +* **Agent capabilities:** Skills and tools the agent provides. +* **Input/output formats:** Expected request and response structures. +* **Protocol version:** A2A specification version the agent supports. +* **Communication modes:** Whether the agent supports synchronous calls, streaming, or both. + +Example agent card structure: + +[source,json] +---- +{ + "a2a_version": "1.0", + "name": "Fraud Detection Agent", + "description": "Analyzes transactions for fraudulent activity", + "capabilities": { + "streaming": true, + "synchronous": true + }, + "input_schema": { + "type": "object", + "properties": { + "transaction": { + "type": "object" + } + } + } +} +---- + +== Where A2A is used in Redpanda Cloud + +Redpanda Cloud uses the A2A protocol in two contexts: + +=== External integration + +External applications and agents hosted outside Redpanda Cloud use A2A to call Redpanda Cloud agents. This includes backend services, CLI tools, custom UIs, and agents hosted on other platforms. + +For integration pattern guidance, see xref:ai-agents:agents/integration-overview.adoc[]. + +=== Internal pipeline-to-agent integration + +Redpanda Connect pipelines use the xref:develop:connect/components/processors/a2a_message.adoc[`a2a_message`] processor to invoke agents for each event in a stream: + +---- +Redpanda Connect Pipeline sends events to a2a_message (A2A) which invokes Redpanda Cloud Agent +---- + +Use cases: + +* Real-time fraud detection on every transaction. +* Streaming data enrichment with AI-generated fields. +* Event-driven agent invocation for automated processing. + +The xref:develop:connect/components/processors/a2a_message.adoc[`a2a_message`] processor uses A2A protocol internally to discover and call agents. For pipeline patterns, see xref:ai-agents:agents/pipeline-integration-patterns.adoc[]. + +== How agents discover each other + +A2A enables dynamic discovery without hardcoded configuration: + +. The caller fetches the agent card from the well-known URL. +. The caller checks the protocol version and supported communication modes. +. The caller uses the input schema from the agent card to format the request properly. +. The caller sends the request to the agent's endpoint. + +This discovery model allows: + +* New agents to become available immediately once deployed +* Existing agents to update their capabilities while callers adapt dynamically +* Callers to understand exactly what agents do through self-describing agent cards + +== Authentication + +A2A-compliant agents require authentication to prevent unauthorized access. + +Redpanda Cloud agents use OAuth2 client credentials flow. When you create an agent, the system provisions a service account with a client ID and secret. + +External callers use these credentials to obtain access tokens: + +. Agent creation automatically provisions a service account with credentials. +. Applications exchange the client ID and secret for a time-limited access token via OAuth2. +. Applications include the access token in the Authorization header when calling the agent endpoint. +. When tokens expire, applications exchange credentials again for a new token. + +This flow ensures: + +* **Credentials stay secure:** Applications never send them directly to agents, only access tokens. +* **Exposure is limited:** Tokens expire, reducing the window for compromised credentials. +* **Integration is standard:** Applications can use existing OAuth2 libraries. + +=== External integration + +External applications must authenticate using the service account credentials. Each agent has its own service account. + +For step-by-step authentication instructions, see xref:security:cloud-authentication.adoc[]. + +=== Internal integration + +The `a2a_message` processor handles authentication automatically. Pipelines don't need to manage credentials explicitly because they run within the Redpanda Cloud cluster with appropriate permissions. + +== Protocol versions + +The A2A protocol uses semantic versioning (major.minor.patch). Agents declare their supported version in the agent card. + +== Next steps + +* xref:ai-agents:agents/integration-overview.adoc[]: Choose the right integration pattern for your use case +* xref:ai-agents:agents/create-agent.adoc[]: Create an agent that exposes an A2A agent card +* link:https://a2a.ag/spec[A2A Protocol Specification^]: Complete technical reference diff --git a/modules/ai-agents/pages/agents/architecture-patterns.adoc b/modules/ai-agents/pages/agents/architecture-patterns.adoc index 2eda395e5..146cdbc77 100644 --- a/modules/ai-agents/pages/agents/architecture-patterns.adoc +++ b/modules/ai-agents/pages/agents/architecture-patterns.adoc @@ -1,6 +1,7 @@ = Agent Architecture Patterns :description: Design maintainable agent systems with single-agent and multi-agent patterns based on domain complexity. :page-topic-type: best-practices +:personas: ai_agent_developer, streaming_developer :learning-objective-1: Evaluate single-agent versus multi-agent architectures for your use case :learning-objective-2: Choose appropriate LLM models based on task requirements :learning-objective-3: Apply agent boundary design principles for maintainability @@ -13,202 +14,243 @@ After reading this page, you will be able to: * [ ] {learning-objective-2} * [ ] {learning-objective-3} -== Single-agent pattern +== Why architecture matters + +Agent architecture determines how you manage complexity as your system grows. The right pattern depends on your domain complexity, organizational structure, and how you expect requirements to evolve. + +=== When simple agents become unmaintainable + +Single agents work well initially but break down as complexity grows. -Use a single-agent architecture when your problem domain is focused and doesn't require specialized subsystems. +Warning signs include system prompts exceeding 2000 words, too many tools for the LLM to select correctly, multiple teams modifying the same agent, and changes in one domain breaking others. These symptoms indicate you need architectural boundaries, not just better prompts. -=== When to use +=== Domain complexity drives architecture -Single-agent architectures work best for: +Match agent architecture to domain structure: -* Narrow domain with limited scope -* Single data source or simple integrations -* Tasks that don't require specialized subsystems +[cols="2,3,3"] +|=== +| Domain Characteristics | Architecture Fit | Reasoning -=== Example use cases +| Single business area, stable requirements +| Single agent +| Simplicity outweighs flexibility needs -Single agents are appropriate for: +| Multiple business areas, shared infrastructure +| Root agent with internal subagents +| Domain separation without deployment complexity -* **Customer order lookup agent**: Retrieves order history and status from a single topic -* **Weather information agent**: Queries weather APIs and returns formatted data -* **Product inventory checker**: Checks stock levels across warehouses +| Cross-organization workflows, independent evolution +| External agent-to-agent +| Organizational boundaries require system boundaries +|=== === Trade-offs -Single agents offer simplicity at the cost of scalability: +Every architecture pattern involves trade-offs. + +- *Latency versus isolation:* Internal subagents have lower latency because they avoid network calls, but they share a failure domain. External agents have higher latency due to network overhead, but they provide independent failure isolation. + +- *Shared state versus independence:* Single deployments share model, budget, and policies but offer less flexibility. Multiple deployments allow independent scaling and updates but add coordination complexity. + +- *Complexity now versus complexity later:* Starting simple means faster initial development but may require refactoring. Starting structured requires more upfront work but makes the system easier to extend. + +For foundational concepts on how agents execute and manage complexity, see xref:ai-agents:agents/concepts.adoc[]. + +== Single-agent pattern + +A single-agent architecture uses one agent with one system prompt and one tool set to handle all requests. + +This pattern works best for narrow domains with limited scope, single data sources, and tasks that don't require specialized subsystems. -* **Simpler to build and maintain**: One system prompt, one tool set, one deployment -* **Limited by single system prompt and tool set**: All capabilities must coexist in one agent -* **Difficult to scale to complex multi-domain problems**: Adding features increases complexity rapidly +=== When to use single agents -Use single agents when your domain won't expand significantly over time. +Use single agents for focused problems that won't expand significantly. + +Examples include order lookup agents that retrieve history from a single topic, weather agents that query APIs and return formatted data, and inventory checkers that report stock levels. + +=== Trade-offs + +Single agents are simpler to build and maintain. You have one system prompt, one tool set, and one deployment. + +However, all capabilities must coexist in one agent. Adding features increases complexity rapidly, making single agents difficult to scale to multi-domain problems. == Root agent with subagents pattern -Use a multi-agent architecture when your problem spans multiple domains, requires specialized expertise, or involves governance boundaries. +A multi-agent architecture uses a root agent that delegates to specialized internal subagents. -=== When to use +This pattern works for complex domains spanning multiple areas, multiple data sources with different access patterns, and tasks requiring specialized expertise within one deployment. -Multi-agent architectures are appropriate for: +NOTE: Subagents in Redpanda Cloud are internal specialists within a single agent. They share the parent agent's model, budget, and policies, but each can have different names, descriptions, system prompts, and MCP tools. -* Complex domains spanning multiple areas -* Multiple data sources requiring different access patterns -* Tasks requiring specialized expertise or governance boundaries +=== How it works -=== Architecture +The root agent interprets user requests and routes them to appropriate subagents. -In a multi-agent system: +Each subagent owns a specific business area with focused expertise. Subagents access only the MCP tools they need. -* **Root agent orchestrates and delegates**: Interprets user requests and routes them to appropriate subagents -* **Each subagent has focused domain expertise**: Owns a specific business area or capability -* **Explicit boundaries between agents**: Clear separation of responsibilities and tools -* **Subagents expose domain-specific tools**: Tools are scoped to the agent that needs them +All subagents share the same LLM model and budget from the parent agent. === Example: E-commerce platform -A typical e-commerce agent system includes: +A typical e-commerce agent includes a root agent that interprets requests and delegates to specialists, an order subagent for processing, history, and status updates, an inventory subagent for stock checks and warehouse operations, and a customer subagent for profiles, preferences, and history. All subagents share the same model but have different system prompts and tool access. -* **Root agent**: Interprets user requests and delegates to specialists -* **Order agent**: Order processing, history lookup, status updates -* **Inventory agent**: Stock checks, availability, warehouse operations -* **Customer agent**: Profile management, preferences, history +=== Why choose internal subagents -=== Benefits +Internal subagents provide domain isolation, allowing you to update the order subagent without affecting inventory. Debugging is easier because each subagent has narrow scope and fewer potential failure points. All subagents share resources, reducing complexity and cost compared to separate deployments. Use internal subagents when you need domain separation within a single agent deployment. -Multi-agent architectures provide: +== External agent-to-agent pattern -* **Changes isolated to specific domains**: Update the order agent without affecting inventory -* **Easier debugging**: Narrow scope per agent means fewer potential failure points -* **Clear governance boundaries**: Different teams can own different agents -* **Parallel development**: Multiple teams can build agents simultaneously +External A2A integration connects agents across organizational boundaries, platforms, or independent systems. -Use multi-agent architectures when you expect the system to grow, require team boundaries, or need governance separation. +NOTE: Cross-agent calling between separate Redpanda Cloud agents is not supported. This pattern applies to connecting Redpanda Cloud agents with external agents you host elsewhere. -== Model selection guide +=== When to use external A2A + +Use external A2A for multi-organization workflows that coordinate agents across company boundaries, for platform integration connecting Redpanda Cloud agents with agents hosted elsewhere, and when agents require different deployment environments such as GPU clusters, air-gapped networks, or regional constraints. + +=== How it works + +Agents communicate using the xref:ai-agents:agents/a2a-concepts.adoc[A2A protocol], a standard HTTP-based protocol for discovery and invocation. Each agent manages its own credentials and access control independently, and can deploy, scale, and update without coordinating with other agents. Agent cards define capabilities without exposing implementation details. + +=== Example: Multi-platform customer service + +A customer service workflow might span multiple platforms: + +* Redpanda Cloud agent accesses real-time order and inventory data +* CRM agent hosted elsewhere manages customer profiles and support tickets +* Payment agent from a third party handles transactions in a secure environment + +Each agent runs on its optimal infrastructure while coordinating through A2A. + +=== Why choose external A2A + +External A2A lets different teams own and deploy their agents independently, with each agent choosing its own LLM, tools, and infrastructure. Sensitive operations stay in controlled environments with security isolation, and you can add agents incrementally without rewriting existing systems. -Choose models based on task complexity, latency requirements, and cost constraints. +=== Trade-offs -=== Task complexity +External A2A adds network latency on every cross-agent call, and authentication complexity multiplies with each agent requiring credential management. Removing capabilities or changing contracts requires coordination across consuming systems, and debugging requires tracing requests across organizational boundaries. -Match model capability to reasoning requirements: +=== Choosing between patterns -[cols="1,2,3"] +[cols="1,2,2"] |=== -| Task Type | Recommended Models | Description +| Use Case | Internal Subagents | External A2A + +| Domain separation within one team +| Recommended +| Unnecessary complexity + +| Cross-organization workflows +| Not possible +| Required -| Simple queries -| Haiku 4.5, GPT-5 mini -| Basic lookups, straightforward responses, minimal reasoning required +| Shared infrastructure acceptable +| Simpler +| Use external if independence needed -| Balanced workloads -| Sonnet 4.5, Gemini 3.0 pro flash -| Moderate complexity tasks requiring some analysis and reasoning +| Different deployment requirements +| Limited (same cluster) +| Full flexibility -| Complex reasoning -| Opus 4.5, GPT-5.2, Gemini 3.0 pro -| Multi-step problem solving, advanced analysis, sophisticated reasoning chains +| Real-time performance critical +| Lower latency +| Higher latency |=== -=== Latency requirements +For implementation details on external A2A integration, see xref:ai-agents:agents/integration-overview.adoc[]. -Match model speed to user expectations: +== Common anti-patterns -.Real-time responses -Choose faster models for interactive use cases: +Avoid these architecture mistakes that lead to unmaintainable agent systems. -* Haiku 4.5 -* GPT-5 mini -* Gemini 3.0 pro flash +=== The monolithic prompt -.Batch processing -Optimize for accuracy over speed when users don't wait for results. +A monolithic prompt is a single 3000+ word system prompt covering multiple domains. -=== Cost constraints +This pattern fails because LLM confusion increases with prompt length, multiple teams modify the same prompt creating conflicts and unclear ownership, and changes to one domain risk breaking others. -Balance capability with usage volume: +Split into domain-specific subagents instead. Each subagent gets a focused prompt under 500 words. -.High volume -Use cost-effective models for frequent requests: +=== The tool explosion -* Haiku 4.5 -* GPT-5 mini +A tool explosion occurs when a single agent has 30+ tools from every MCP server in the cluster. -.Critical accuracy -Use premium models when errors are costly: +This pattern fails because the LLM struggles to choose correctly from large tool sets, tool descriptions compete for limited prompt space, and the agent invokes wrong tools with similar names, wasting iteration budget on selection mistakes. -* Opus 4.5 -* GPT-5.2 +Limit tools per agent. Use subagents to partition tools by domain. For tool design patterns, see xref:ai-agents:mcp/remote/tool-patterns.adoc[]. -=== Model families +=== Premature A2A splitting -Reference external documentation for model details: +Premature splitting creates three separate A2A agents when all logic could fit in one agent with internal subagents. -* OpenAI GPT: link:https://platform.openai.com/docs/models[GPT-5, GPT-5 mini^] -* Google Gemini: link:https://ai.google.dev/gemini-api/docs[Gemini 3.0 pro, Gemini 3.0 pro flash^] -* Anthropic Claude: link:https://docs.anthropic.com/claude/docs/models-overview[Opus 4.5, Sonnet 4.5, Haiku 4.5^] +This pattern fails because network latency affects every cross-agent call, authentication complexity multiplies with three sets of credentials, debugging requires correlating logs across systems, and you manage three deployments instead of one. -== Design principles +Start with internal subagents for domain separation. Split to external A2A only when you need organizational boundaries or different infrastructure. -Follow these principles to create maintainable agent systems. +=== Unbounded tool chaining -=== Explicit agent boundaries +Unbounded chaining sets max iterations to 100, returns hundreds of items from tools, and places no constraints on tool call frequency. -Each agent should have clear scope and responsibilities. +This pattern fails because the context window fills with tool results, requests time out before completion, costs spiral with many iterations multiplied by large context, and the agent loses track of the original goal. -Define each agent with: +Design workflows to complete in 20-30 iterations. Return paginated results from tools. Add prompt constraints like "Never call the same tool more than 3 times per request." -* Clear scope definition in system prompt -* Specific tool set for its domain -* Well-defined inputs and outputs +== Model selection guide -Do not create agents with overlapping responsibilities. Overlapping domains create confusion about which agent handles which requests. +Choose models based on task complexity, latency requirements, and cost constraints. The Redpanda Cloud Console displays available models with descriptions when creating agents. -=== Tool scoping per agent +=== Match models to task complexity + +For simple queries, choose cost-effective models such as Haiku. + +For balanced workloads, choose mid-tier models. Look for standard names like base GPT versions, or Sonnet tiers. + +For complex reasoning, choose premium models. Look for labels like Opus or the highest version numbers. + +=== Balance latency and model size + +For real-time responses, choose smaller models. Use models optimized for speed, such as Mini or base tiers. -Assign tools to the agent that needs them. Don't give all agents access to all tools. +For batch processing, optimize for accuracy over speed. Use larger models when users don't wait for results. -.Do -Give each agent only the tools it needs: +=== Optimize for cost and volume -[,yaml] ----- -# Order agent -tools: - - get_orders - - update_order_status +For high volume, use cost-effective models. Smaller tiers reduce costs while maintaining acceptable quality. -# Inventory agent -tools: - - check_stock - - reserve_inventory ----- +For critical accuracy, use premium models. Higher costs are justified when errors are costly. -.Don't -Don't share all tools across agents: +=== Model provider documentation -[,yaml] ----- -# Both agents have access to all tools -tools: - - get_orders - - update_order_status - - check_stock - - reserve_inventory ----- +For complete model specifications, capabilities, and pricing: -Tool scoping reduces the risk of tool misuse and makes debugging easier. +* link:https://platform.openai.com/docs/models[OpenAI Models^] +* link:https://docs.anthropic.com/claude/docs/models-overview[Anthropic Claude Models^] +* link:https://ai.google.dev/gemini-api/docs/models[Google Gemini Models^] + +== Design principles + +Follow these principles to create maintainable agent systems. + +=== Explicit agent boundaries + +Each agent should have clear scope and responsibilities. Define scope explicitly in the system prompt, assign a specific tool set for the agent's domain, and specify well-defined inputs and outputs. + +Do not create agents with overlapping responsibilities. Overlapping domains create confusion about which agent handles which requests. + +=== Tool scoping per agent + +Assign tools to the agent that needs them. Don't give all agents access to all tools. Limit tool access based on agent purpose. + +Tool scoping reduces misuse risk and makes debugging easier. === Error handling and fallbacks Design agents to handle failures gracefully. -Implement error handling that: - -* Uses retry logic for transient failures -* Provides clear error messages to users -* Logs errors for debugging +Use retry logic for transient failures like network timeouts. Report permanent failures like invalid parameters immediately. -Distinguish between transient failures (network timeouts) and permanent failures (invalid parameters). Retry the first, report the second immediately. +Provide clear error messages to users. Log errors for debugging. == Summary @@ -219,16 +261,22 @@ Choose architecture patterns based on domain complexity and organizational needs | Pattern | Use When | Trade-off | Single agent -| Narrow domain, simple tasks +| Narrow domain, single organization | Limited scalability -| Multi-agent -| Complex domains, multiple systems +| Internal subagents +| Complex domains, shared infrastructure | Higher operational complexity + +| External A2A +| Multi-organization, independent systems +| Network latency, coordination overhead |=== == Next steps +* xref:ai-agents:agents/integration-overview.adoc[]: Choose between agents invoking tools and pipelines calling agents +* xref:ai-agents:agents/a2a-concepts.adoc[]: Learn how the A2A protocol enables agent communication * xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Explore tool design patterns -* xref:ai-agents:agents/fundamentals.adoc[]: Review agent component fundamentals +* xref:ai-agents:agents/overview.adoc[]: Review agent components * xref:ai-agents:mcp/remote/best-practices.adoc[]: Learn MCP tool best practices diff --git a/modules/ai-agents/pages/agents/build-index.adoc b/modules/ai-agents/pages/agents/build-index.adoc new file mode 100644 index 000000000..f3679805d --- /dev/null +++ b/modules/ai-agents/pages/agents/build-index.adoc @@ -0,0 +1,5 @@ += Build Agents +:page-layout: index +:description: Create production AI agents with effective prompts and scalable architecture. + +Create agents, write effective prompts, and design scalable agent systems. diff --git a/modules/ai-agents/pages/agents/concepts.adoc b/modules/ai-agents/pages/agents/concepts.adoc new file mode 100644 index 000000000..f1e66fed1 --- /dev/null +++ b/modules/ai-agents/pages/agents/concepts.adoc @@ -0,0 +1,264 @@ += Agent Concepts +:description: Understand how agents execute, manage context, invoke tools, and handle errors. +:page-topic-type: concepts +:personas: ai_agent_developer, streaming_developer, data_engineer +:learning-objective-1: Explain how agents execute reasoning loops and make tool invocation decisions +:learning-objective-2: Describe how agents manage context and state across interactions +:learning-objective-3: Identify error handling strategies for agent failures + +Agents execute through a reasoning loop where the LLM analyzes context, decides which tools to invoke, processes results, and repeats until the task completes. Understanding this execution model helps you design reliable agent systems. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== Agent execution model + +Every agent request follows a reasoning loop. The agent doesn't execute all tool calls at once. Instead, it makes decisions iteratively. + +=== The reasoning loop + +When an agent receives a request: + +. **LLM receives context**: System prompt, conversation history, user request, and previous tool results +. **LLM decides action**: Choose to invoke a tool, request more information, or respond to user +. **Tool executes** (if chosen): Tool runs and returns results. +. **Context grows**: Tool results added to conversation history +. **Loop repeats**: LLM reasons again with expanded context. + +The loop continues until one of these conditions is met: + +* Agent completes the task and responds to the user +* Agent reaches max iterations limit +* Agent encounters an unrecoverable error + +=== Why iterations matter + +Each iteration includes three phases: + +. **LLM reasoning**: The model processes the growing context to decide the next action. +. **Tool invocation**: If the agent decides to call a tool, execution happens and waits for results. +. **Context expansion**: Tool results are added to the conversation history for the next iteration. + +This creates a cost/capability/latency triangle: + +* **Higher iteration limits**: Agent can complete complex tasks but costs more and takes longer. +* **Lower iteration limits**: Faster, cheaper responses but agent may fail on complex requests. + +==== Cost calculation + +Calculate the approximate cost per request by estimating average context tokens per iteration: + +---- +Cost per request = (iterations x context tokens x model price per token) +---- + +Example with 30 iterations at $0.000002 per token: + +---- +Iteration 1: 500 tokens x $0.000002 = $0.001 +Iteration 15: 2000 tokens x $0.000002 = $0.004 +Iteration 30: 4000 tokens x $0.000002 = $0.008 + +Total: ~$0.013 per request +---- + +Actual costs vary based on: + +* Tool result sizes (large results increase context) +* Model pricing (varies by provider and model tier) +* Task complexity (determines iteration count) + +Setting max iterations creates a cost/capability trade-off: + +[cols="1,1,2,1", options="header"] +|=== +|Limit |Range |Use Case |Cost + +|Low +|10-20 +|Simple queries, single tool calls +|Cost-effective + +|Medium +|30-50 +|Multi-step workflows, tool chaining +|Balanced + +|High +|50-100 +|Complex analysis, exploratory tasks +|Higher +|=== + +Iteration limits prevent runaway costs when agents encounter complex or ambiguous requests. + +== MCP tool invocation patterns + +MCP tools extend agent capabilities beyond text generation. Understanding when and how tools execute helps you design effective tool sets. + +=== Synchronous tool execution + +In Redpanda Cloud, tool calls block the agent. When the agent decides to invoke a tool, it pauses and waits while the tool executes (querying a database, calling an API, or processing data). When the tool returns its result, the agent resumes reasoning. + +This synchronous model means latency adds up across multiple tool calls, the agent sees tool results sequentially rather than in parallel, and long-running tools can delay or fail agent requests due to timeouts. + +=== Tool selection decisions + +The LLM decides which tool to invoke based on system prompt guidance (such as "Use get_orders when customer asks about history"), tool descriptions from the MCP schema that define parameters and purpose, and conversation context where previous tool results influence the next tool choice. Agents can invoke the same tool multiple times with different parameters if the task requires it. + +=== Tool chaining + +Agents chain tools when one tool's output feeds another tool's input. For example, an agent might first call `get_customer_info(customer_id)` to retrieve details, then use that data to call `get_order_history(customer_email)`. + +Tool chaining requires sufficient max iterations because each step in the chain consumes one iteration. + +=== Tool granularity considerations + +Tool design affects agent behavior. Coarse-grained tools that do many things result in fewer tool calls but less flexibility and more complex implementation. Fine-grained tools that each do one thing require more tool calls but offer higher composability and simpler implementation. + +Choose granularity based on how often you'll reuse tool logic across workflows, whether intermediate results help with debugging, and how much control you want over tool invocation order. + +For tool design guidance, see xref:ai-agents:mcp/remote/best-practices.adoc[]. + +== Context and state management + +Agents handle two types of information: conversation context (what's been discussed) and state (persistent data across sessions). + +=== Conversation context + +The agent's context includes the system prompt (always present), user messages, agent responses, tool invocation requests, and tool results. + +Agents persist conversation context within a session. When you use the *Inspector* tab in the Redpanda Cloud Console, it automatically maintains session state across multiple requests. For programmatic access, applications must pass a session ID to maintain conversation continuity across requests. + +All conversation data is stored in the agent's sessions topic. For details on accessing conversation history, see <>. + +=== Context window limits + +LLM context windows limit how much history fits. Small models support 8K-32K tokens, medium models support 32K-128K tokens, and large models support 128K-1M+ tokens. + +When context exceeds the limit, the oldest tool results get truncated, the agent loses access to early conversation details, and may ask for information it already retrieved. + +Design workflows to complete within context limits. Avoid unbounded tool chaining. + +=== State across conversations + +Redpanda Cloud automatically persists conversation history and task execution data to agent-specific topics: + +* *Sessions topic* (`redpanda.aiagent..sessions`): Stores all conversation messages and history +* *Tasks topic* (`redpanda.aiagent..tasks`): Stores task execution records with status and artifacts + +The *Inspector* tab automatically manages sessions for you. For programmatic integration, pass a session ID in API requests to maintain conversation continuity. + +You can consume from these topics to: + +* Review past conversations and agent responses +* Analyze conversation patterns and common requests +* Debug agent behavior by examining full conversation history +* Build conversation analytics and monitoring dashboards +* Implement custom conversation management in your application + +For complete details on topic schemas and usage, see <>. + +If you need additional state management beyond conversation history, create tools that read/write to custom state stores, or pass relevant context in each request. + +[[agent-data-topics]] +== Agent data topics + +Each agent automatically creates two topics for storing session and task data: + +* `redpanda.aiagent..sessions`: Conversation history and session state +* `redpanda.aiagent..tasks`: Task execution records with status and artifacts + +Two schemas are also registered: `redpanda-session-value` and `redpanda-a2a-task-value`. + +Redpanda uses these topics internally to persist conversation history and reload context when sessions resume. This allows agents to maintain continuity across interactions. + +These topics and schemas are managed automatically by Redpanda. If you delete either a topic or schema, they are recreated automatically. However, deleting a topic permanently deletes all stored data (including conversation history), and the topic comes back empty. Do not produce your own data to these topics. They are reserved for agent data. + +For guidance on consuming these topics, analyzing conversation history, and monitoring agent performance, see xref:ai-agents:observability/monitor-agents.adoc[]. + +=== Sessions topic + +The sessions topic stores conversation data, including all messages exchanged between users and the agent: + +[source,json] +---- +{ + "id": "agent-chat-abc123-WqyUmxv0fuACoSE69MCx4", + "messages": [ + { + "role": "MESSAGE_ROLE_USER", + "content": [ + { + "kind": "PART_KIND_TEXT", + "text": "What's the weather in Seattle?" + } + ] + }, + { + "role": "MESSAGE_ROLE_ASSISTANT", + "content": [ + { + "kind": "PART_KIND_TEXT", + "text": "The current weather in Seattle is 52°F with light rain." + } + ] + } + ], + "metadata": {} +} +---- + +Use session data for debugging conversation flow, auditing agent interactions, and building conversation analytics. + +=== Tasks topic + +The tasks topic stores execution records for each agent task, including status, artifacts, message history, and token usage: + +[source,json] +---- +{ + "id": "019bc2d5-13e0-785b-9ff4-a218708e52bc", + "contextId": "agent-chat-abc123-oGoqyBCeH5RHTsit8qpRi", + "status": { + "state": "TASK_STATE_COMPLETED", + "timestamp": "2026-01-15T18:05:03.993157355Z" + }, + "artifacts": [ + { + "artifactId": "019bc2d5-186a-76c7-97d1-feb13c75a2d4", + "parts": [ + { + "text": "The current weather in Seattle is 52°F with light rain." + } + ] + } + ], + "history": [...], + "metadata": { + "usage": { + "input_tokens": 64, + "output_tokens": 9, + "total_tokens": 130 + } + } +} +---- + +Task states include: + +* `TASK_STATE_COMPLETED`: Task finished successfully +* `TASK_STATE_FAILED`: Task encountered an error +* `TASK_STATE_RUNNING`: Task is in progress + +Use task data for monitoring task completion rates, tracking token usage and costs, debugging failed tasks, and building operational dashboards. + +== Next steps + +* xref:ai-agents:agents/architecture-patterns.adoc[]: Apply these concepts to design patterns +* xref:ai-agents:agents/quickstart.adoc[]: See execution concepts in action +* xref:ai-agents:agents/prompt-best-practices.adoc[]: Write prompts that guide agent reasoning +* xref:ai-agents:mcp/remote/best-practices.adoc[]: Design tools that work well with agent execution diff --git a/modules/ai-agents/pages/agents/create-agent.adoc b/modules/ai-agents/pages/agents/create-agent.adoc index bd98f9d2b..55f88ba15 100644 --- a/modules/ai-agents/pages/agents/create-agent.adoc +++ b/modules/ai-agents/pages/agents/create-agent.adoc @@ -1,7 +1,7 @@ = Create an Agent :description: Configure agents with model selection, system prompts, tool connections, and execution parameters. :page-topic-type: how-to -:personas: ai_agent_developer +:personas: ai_agent_developer, app_developer, streaming_developer :learning-objective-1: Configure an agent with model selection and system prompt :learning-objective-2: Connect MCP servers and select tools for your agent :learning-objective-3: Set agent execution parameters including max iterations @@ -16,42 +16,75 @@ After reading this page, you will be able to: == Prerequisites -* Redpanda Cloud cluster with Remote MCP enabled -* At least one MCP server deployed with tools -* LLM provider API key (OpenAI, Google, or Anthropic) -* System prompt prepared (see xref:ai-agents:agents/prompt-best-practices.adoc[]) +* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] with Remote MCP enabled. +* At least one xref:ai-agents:mcp/remote/overview.adoc[Remote MCP server] deployed with tools. +* LLM provider API key (OpenAI, Google, or Anthropic). +* System prompt prepared (see xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices]). == Access the agents UI -. Log in to the Redpanda Cloud Console. +. Log in to the link:https://cloud.redpanda.com[Redpanda Cloud Console^]. . Navigate to your cluster. -. Click *Agents* in the left navigation. +. Click *Agentic AI* > *AI Agents* in the left navigation. -== Create a new agent - -=== Configure basic settings +== Configure basic settings . Click *Create Agent*. -. Enter an agent name. -. Optionally, add a description. +. Enter a display name (3-128 characters, alphanumeric with spaces, hyphens, underscores, or slashes). +. Optionally, add a description (maximum 256 characters). +. Select a resource tier based on your workload characteristics: ++ +Resource tiers control CPU and memory allocated to your agent. Choose based on: ++ +* **Concurrency:** How many simultaneous requests the agent handles. +* **Tool memory:** Whether tools process large datasets in memory. +* **Response time:** How quickly the agent needs to respond. ++ +Available tiers: ++ +* XSmall: 100m CPU, 400M RAM (single-user testing, simple queries) +* Small: 200m CPU, 800M RAM (light workloads, few concurrent users) +* Medium: 300m CPU, 1200M RAM (recommended for most production use cases) +* Large: 400m CPU, 1600M RAM (high concurrency or memory-intensive tools) +* XLarge: 500m CPU, 2G RAM (very high concurrency or large data processing) ++ +Start with Medium for production workloads. Monitor CPU and memory usage, then adjust if you see resource constraints. + +. Optionally, add tags (maximum 16 tags) for organization and filtering: ++ +* Keys: Maximum 64 characters, must be unique +* Values: Maximum 256 characters, allowed characters: letters, numbers, spaces, and `_.:/=+-@` + +== Choose a model -=== Choose a model +Agents use large language models (LLMs) to interpret user intent and decide which tools to invoke. . In the *Model* section, select your LLM provider: + * OpenAI (GPT models) * Google (Gemini models) * Anthropic (Claude models) +* OpenAI Compatible (custom OpenAI-compatible endpoints) + +. If using OpenAI Compatible, provide the base URL: ++ +* Base URL is required for OpenAI Compatible +* Must start with `http://` or `https://` +* Example: `https://api.example.com/v1` -. Select the specific model version: +. Select the specific model version from the dropdown. + -* For balanced performance: Sonnet 4.5, Gemini 3.0 pro flash, GPT-5 mini -* For complex reasoning: Opus 4.5, Gemini 3.0 pro, GPT-5.2 -* For cost-effective tasks: Haiku 4.5, GPT-5 mini +The Console shows available models with descriptions. -For model selection guidance, see xref:ai-agents:agents/architecture-patterns.adoc[]. +For detailed model specifications and pricing: -=== Add API keys as secrets +* link:https://platform.openai.com/docs/models[OpenAI Models^] +* link:https://docs.anthropic.com/claude/docs/models-overview[Anthropic Claude Models^] +* link:https://ai.google.dev/gemini-api/docs/models[Google Gemini Models^] + +For model selection based on architecture patterns, see xref:ai-agents:agents/architecture-patterns.adoc#model-selection-guide[Model selection guide]. + +== Add API keys as secrets . In the *API Key* section, click *Add Secret*. . Choose one: @@ -62,9 +95,9 @@ For model selection guidance, see xref:ai-agents:agents/architecture-patterns.ad . Name your secret (for example: `openai-api-key`). . Click *Save*. -=== Write the system prompt +== Write the system prompt -. In the *System Prompt* section, enter your prompt. +. In the *System Prompt* section, enter your prompt (minimum 10 characters). . Follow these guidelines: + * Define agent role and responsibilities @@ -95,9 +128,9 @@ Response format: - [Format guideline] ---- -For complete prompt guidelines, see xref:ai-agents:agents/prompt-best-practices.adoc[]. +For complete prompt guidelines, see xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices]. -=== Add MCP servers and select tools +== Add MCP servers and select tools . In the *Tools* section, click *Add MCP Server*. . Select an MCP server from your cluster. @@ -113,35 +146,35 @@ For complete prompt guidelines, see xref:ai-agents:agents/prompt-best-practices. * Ensure tools match those listed in your system prompt * Remove tools the agent doesn't need (principle of least privilege) -=== Add subagents (optional) +== Add subagents (optional) -For multi-agent architectures: +Subagents are internal specialists within a single agent. Each subagent can have its own name, description, system prompt, and MCP tools, but all subagents share the parent agent's model, budget, and policies. . In the *Subagents* section, click *Add Subagent*. -. Select an existing agent to use as a subagent. -. The root agent can delegate tasks to subagents. -. Configure delegation: +. Configure the subagent: + -* Define when to use this subagent -* Set access permissions +* *Name*: 1-64 characters, only letters, numbers, hyphens, and underscores (for example: `order-agent` or `Order_Agent`) +* *Description*: Maximum 256 characters (optional) +* *System Prompt*: Minimum 10 characters, domain-specific instructions +* *MCP Tools*: Select tools this subagent can access + +The root agent orchestrates and delegates work to appropriate subagents based on the request. -For multi-agent design patterns, see xref:ai-agents:agents/a2a-workflows.adoc[]. +For multi-agent design patterns, see xref:ai-agents:agents/architecture-patterns.adoc[Agent Architecture Patterns]. === Set max iterations -. In the *Execution Settings* section, configure *Max Iterations*. -. This limits how many tool calls the agent can make per request. -. Recommended values: -+ -* Simple queries: 3-5 iterations -* Complex workflows: 10-15 iterations -* Multi-step analysis: 20+ iterations +Max iterations determine how many reasoning loops the agent can perform before stopping. Each iteration consumes tokens and adds latency. For detailed cost calculations and the cost/capability/latency trade-off, see xref:ai-agents:agents/concepts.adoc[]. -. Higher limits increase: +. In the *Execution Settings* section, configure *Max Iterations* (range: 10-100, default: 30). ++ +Choose based on task complexity: + -* Agent capability (can complete complex tasks) -* Cost (more LLM calls) -* Latency (longer response times) +* **Simple queries** (10-20): Single tool call, direct answers, minimal reasoning +* **Balanced workflows** (20-40): Multiple tool calls, data aggregation, moderate analysis +* **Complex analysis** (40-100): Exploratory queries, extensive tool chaining, deep reasoning ++ +Start with 30 for most use cases. === Review and create @@ -152,9 +185,28 @@ For multi-agent design patterns, see xref:ai-agents:agents/a2a-workflows.adoc[]. * Selected tools * Max iterations +. Configure the service account name (optional): ++ +* Default pattern: `--agent--sa` +* Custom name: 3-128 characters, cannot contain `<` or `>` characters +* This service account authenticates the agent with cluster resources + . Click *Create Agent*. + . Wait for agent creation to complete. +When your agent is running, Redpanda Cloud provides an HTTP endpoint URL with the pattern: + +---- +https://.ai-agents.. +---- + +You can use this URL to call your agent programmatically or integrate it with external systems. + +The *Inspector* tab in the Cloud Console automatically uses this URL to connect to your agent for testing. + +For programmatic access or external agent integration, see xref:ai-agents:agents/integration-overview.adoc[]. + == Test your agent . In the agent details view, click *Test*. @@ -171,21 +223,21 @@ For multi-agent design patterns, see xref:ai-agents:agents/a2a-workflows.adoc[]. === Simple query agent -* *Model*: Haiku 4.5 (fast, cost-effective) +* *Model*: Claude Haiku 4.5 (fast, cost-effective) * *Tools*: Single MCP server with `get_orders` tool -* *Max iterations*: 5 +* *Max iterations*: 10 * *Use case*: Customer order lookups === Complex analytics agent -* *Model*: Sonnet 4.5 (balanced) +* *Model*: Claude Sonnet 4.5 (balanced) * *Tools*: Multiple servers with data query, aggregation, and formatting tools -* *Max iterations*: 15 +* *Max iterations*: 30 * *Use case*: Multi-step data analysis === Multi-agent orchestrator -* *Model*: Opus 4.5 (advanced reasoning) +* *Model*: Claude Opus 4.5 (advanced reasoning) * *Tools*: Agent delegation tools * *Subagents*: Order Agent, Inventory Agent, Customer Agent * *Max iterations*: 20 @@ -193,6 +245,8 @@ For multi-agent design patterns, see xref:ai-agents:agents/a2a-workflows.adoc[]. == Next steps +* xref:ai-agents:agents/integration-overview.adoc[]: Connect your agent to external applications and pipelines * xref:ai-agents:agents/prompt-best-practices.adoc[]: Refine your system prompts * xref:ai-agents:mcp/remote/create-tool.adoc[]: Create additional tools * xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems +* xref:ai-agents:agents/troubleshooting.adoc[]: Diagnose and fix common agent issues diff --git a/modules/ai-agents/pages/agents/fundamentals.adoc b/modules/ai-agents/pages/agents/fundamentals.adoc deleted file mode 100644 index c0b6d697c..000000000 --- a/modules/ai-agents/pages/agents/fundamentals.adoc +++ /dev/null @@ -1,154 +0,0 @@ -= Agent Fundamentals -:description: Understand the four essential components of an AI agent and how they work together. -:page-topic-type: concepts -:learning-objective-1: Describe the four essential components of an AI agent -:learning-objective-2: Explain how system prompts constrain agent behavior -:learning-objective-3: Distinguish between focused and unfocused tool designs - -Every AI agent consists of four essential components that work together to interpret user intent and accomplish tasks. - -After reading this page, you will be able to: - -* [ ] {learning-objective-1} -* [ ] {learning-objective-2} -* [ ] {learning-objective-3} - -== Agent components - -An AI agent consists of four components: - -. System prompt: Defines scope, behavior, and constraints -. LLM: Performs reasoning and tool selection -. Tools: External capabilities exposed via MCP -. Context: Conversation state and relevant inputs - -Everything else builds on these primitives. - -== System prompts - -The system prompt defines agent behavior. It should explicitly specify: - -* The agent's role -* Its responsibilities -* Which tools are available -* Expected response structure -* Hard constraints and exclusions - -Clear constraints prevent unintended behavior and reduce tool misuse. - -=== Example: Order analytics agent - -[,text] ----- -You are an order analytics agent. - -Responsibilities: -- Answer questions about customer orders -- Analyze recent order trends - -Available tools: -- get_customer_orders -- analyze_recent_orders - -Rules: -- Present structured data as tables -- Always state the analysis time window -- Never expose payment information -- Only analyze data from the last 90 days unless explicitly requested ----- - -This prompt defines scope (order analytics), lists available actions (two tools), and sets clear boundaries (no payment information, 90-day window). - -== Tools - -Tools are the actions your agent can take. With Redpanda Cloud: - -* You define tools as MCP servers -* Each tool is a Redpanda Connect configuration with a component and meta block -* The LLM discovers and invokes tools automatically -* Tools access streaming data, databases, APIs, or services - -Choose tools that are: - -* Focused: One clear purpose per tool -* Reliable: Consistent results for the same inputs -* Observable: Can log actions for debugging - -For detailed guidance on creating tools, see xref:ai-agents:mcp/remote/create-tool.adoc[]. - -=== Tool design principles - -Keep each tool focused on a single action. Instead of one tool that "manages orders," create separate tools for: - -* `get_customer_orders`: Retrieve order history -* `update_order_status`: Change order state -* `calculate_order_total`: Compute costs - -Focused tools are easier to test, debug, and reason about. - -== LLM selection - -The LLM performs reasoning, interprets prompts, and decides which tools to use. Choose models based on: - -* Task complexity: Simple queries vs. multi-step workflows -* Latency requirements: Real-time responses vs. batch processing -* Cost constraints: Balance capability with usage volume - -Model families available through Redpanda Cloud integrations: - -* OpenAI GPT models: Strong general-purpose reasoning -* Anthropic Claude models: Extended context windows -* Google Gemini models: Multimodal capabilities - -For agent architectures that combine multiple models, see xref:ai-agents:agents/architecture-patterns.adoc[]. - -== Context - -Context includes: - -* Conversation history: Previous messages in the session -* Retrieved data: Results from tools or database queries -* Streaming context: Real-time events from Redpanda topics - -Effective context management: - -* Keep conversation history focused (prune irrelevant turns) -* Use streaming data for real-time decisions -* Store long-term state in databases, not conversation memory - -=== Context window limits - -Every LLM has a context window (the total amount of text it can process). When the conversation history plus tool results exceeds this limit, the agent fails or loses information. - -Strategies to manage context: - -* Summarize old conversations: Replace early messages with summaries -* Use semantic search: Retrieve only relevant conversation turns -* Store state externally: Put order details in a database, not in chat history - -=== Streaming context - -Agents can process real-time events from Redpanda topics as part of their context. This enables use cases like: - -* Monitoring dashboards that answer questions about live metrics -* Alert systems that detect anomalies in streaming data -* Recommendation engines that adapt to current user behavior - -== How components work together - -Here's the flow when a user makes a request: - -. User sends a message ("What were our sales yesterday?") -. LLM receives the system prompt, conversation history, and the user message -. LLM decides which tool(s) to invoke based on the system prompt -. Tools execute and return results -. LLM incorporates tool results into context -. LLM generates a response to the user - -This cycle repeats until the agent completes the task or reaches a stopping condition. - -== Next steps - -* xref:ai-agents:agents/quickstart.adoc[]: Get your first agent running -* xref:ai-agents:agents/create-agent.adoc[]: Create an agent through the UI -* xref:ai-agents:agents/architecture-patterns.adoc[]: Explore agent design patterns diff --git a/modules/ai-agents/pages/agents/get-started-index.adoc b/modules/ai-agents/pages/agents/get-started-index.adoc new file mode 100644 index 000000000..70856d47d --- /dev/null +++ b/modules/ai-agents/pages/agents/get-started-index.adoc @@ -0,0 +1,5 @@ += Get Started with AI Agents +:page-layout: index +:description: Learn what AI agents are and build your first agent in Redpanda Cloud. + +Start here to understand AI agents and build your first one. diff --git a/modules/ai-agents/pages/agents/index.adoc b/modules/ai-agents/pages/agents/index.adoc new file mode 100644 index 000000000..a07f6ad68 --- /dev/null +++ b/modules/ai-agents/pages/agents/index.adoc @@ -0,0 +1,5 @@ += AI Agents +:page-layout: index +:description: Build AI agents that use Redpanda Cloud for real-time streaming data and tool execution. + +Build AI agents that combine large language models with MCP tools to process streaming data and execute actions. diff --git a/modules/ai-agents/pages/agents/integration-index.adoc b/modules/ai-agents/pages/agents/integration-index.adoc new file mode 100644 index 000000000..7a4b5672e --- /dev/null +++ b/modules/ai-agents/pages/agents/integration-index.adoc @@ -0,0 +1,6 @@ += Agent Integration +:page-layout: index +:description: Connect agents to external applications, pipelines, and other systems. + +Choose integration patterns and connect agents to your systems. + diff --git a/modules/ai-agents/pages/agents/integration-overview.adoc b/modules/ai-agents/pages/agents/integration-overview.adoc new file mode 100644 index 000000000..51089058d --- /dev/null +++ b/modules/ai-agents/pages/agents/integration-overview.adoc @@ -0,0 +1,128 @@ += Integration Patterns Overview +:description: Choose the right integration pattern for connecting agents, pipelines, and external applications. +:page-topic-type: best-practices +:personas: ai_agent_developer, streaming_developer, app_developer, data_engineer +:learning-objective-1: Choose the integration pattern that fits your use case +:learning-objective-2: Apply appropriate authentication for internal versus external integration +:learning-objective-3: Select the right communication protocol for your integration scenario + +Redpanda Cloud supports multiple integration patterns for agents, pipelines, and external applications. Choose the pattern that matches your integration scenario. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== Integration scenarios + +Redpanda Cloud supports three primary integration scenarios based on who initiates the call and where the caller is located: + +[cols="1,2,2,1"] +|=== +| Scenario | Description | When to Use | Guide + +| Agent needs capabilities +| Your agent invokes MCP tools to fetch data, call APIs, or access external systems on-demand +| Agent-initiated, synchronous, interactive workflows +| xref:ai-agents:mcp/remote/tool-patterns.adoc[] + +| Pipeline processes events +| Your Redpanda Connect pipeline invokes agents for each event in a stream using the `a2a_message` processor +| Event-driven, automated, high-volume stream processing +| xref:ai-agents:agents/pipeline-integration-patterns.adoc[] + +| External system calls agent +| Your application or agent (hosted outside Redpanda Cloud) calls Redpanda Cloud agents using the A2A protocol +| Backend services, CLI tools, custom UIs, multi-platform agent workflows +| xref:ai-agents:agents/a2a-concepts.adoc[] +|=== + +== Common use cases by pattern + +Each integration pattern serves different scenarios based on how data flows and who initiates the interaction. + +[[agent-needs-capabilities]] +=== Agent needs capabilities (MCP tools) + +Use MCP tools when your agent needs on-demand access to data or capabilities. + +The agent decides when to invoke tools as part of its reasoning process. It waits for responses before continuing. + +This pattern works well for interactive workflows: customer support lookups, approval flows, or context-aware chatbots. + +Avoid MCP tools for high-volume stream processing or automated workflows without user interaction. Use pipeline-initiated integration instead. + +For implementation details, see xref:ai-agents:mcp/remote/tool-patterns.adoc[]. + +[[pipeline-processes-events]] +=== Pipeline processes events (`a2a_message`) + +Use the `a2a_message` processor when your pipeline needs to invoke agents for every event in a stream. + +The pipeline controls when agents execute. This pattern is ideal for automated, high-volume processing where each event requires AI reasoning. + +Common scenarios include real-time fraud detection, sentiment scoring for customer reviews, and content moderation that classifies and routes content. + +For implementation details, see xref:ai-agents:agents/pipeline-integration-patterns.adoc[]. + +=== External system calls agent + +Use external integration when your applications, services, or agents hosted outside Redpanda Cloud need to call Redpanda Cloud agents. + +External systems send requests using the A2A protocol and receive responses synchronously. This works for backend services, CLI tools, custom UIs, and agents hosted on other platforms. + +Common scenarios include backend services analyzing data as part of workflows, CLI tools invoking agents for batch tasks, custom UIs displaying agent responses, CRM agents coordinating with Redpanda agents, and multi-platform workflows spanning different infrastructure. + +To learn how the A2A protocol enables this integration, see xref:ai-agents:agents/a2a-concepts.adoc[]. + +== Pattern comparison + +The following table compares the two primary internal integration patterns: + +[cols="1,2,2"] +|=== +| Criterion | Agents Invoking MCP Tools | Pipelines Calling Agents + +| Trigger +| User question or agent decision +| Event arrival in topic + +| Frequency +| Ad-hoc, irregular, as needed +| Continuous, every event + +| Latency +| Low (agent waits for response) +| Higher (async acceptable) + +| Control Flow +| Agent decides when to invoke +| Pipeline decides when to invoke + +| Use Case +| "Fetch me data", "Run this query" +| "Process this stream", "Enrich all events" + +| Human in Loop +| Often yes (user-driven) +| Often no (automated) +|=== + +== Security considerations for external integration + +When integrating external applications with Redpanda Cloud agents, protect credentials and tokens. + +=== Protect service account credentials + +Store the client ID and secret in secure credential stores, not in code. Use environment variables or secrets management systems. Rotate credentials if compromised and restrict access based on the principle of least privilege. + +=== Protect access tokens + +Access tokens grant full access to the agent. Anyone with a valid token can send requests, receive responses, and consume agent resources (subject to rate limits). Treat access tokens like passwords and never log them or include them in error messages. + +== Next steps + +* xref:ai-agents:agents/a2a-concepts.adoc[]: Learn about the A2A protocol that powers agent communication +* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Explore MCP tool patterns and examples +* xref:ai-agents:agents/pipeline-integration-patterns.adoc[]: Build pipelines that call agents diff --git a/modules/ai-agents/pages/agents/overview.adoc b/modules/ai-agents/pages/agents/overview.adoc index 77840c924..045342c9a 100644 --- a/modules/ai-agents/pages/agents/overview.adoc +++ b/modules/ai-agents/pages/agents/overview.adoc @@ -1,9 +1,10 @@ = AI Agents Overview :description: Learn what AI agents are and how Redpanda Cloud supports agent development with real-time streaming. :page-topic-type: overview -:learning-objective-1: Identify what AI agents are and their primary use cases -:learning-objective-2: Identify the benefits of using Redpanda Cloud for agent development -:learning-objective-3: Evaluate whether building agents with Redpanda Cloud fits your requirements +:personas: evaluator, ai_agent_developer, app_developer, streaming_developer +:learning-objective-1: Describe what AI agents are and their essential components +:learning-objective-2: Explain how Redpanda Cloud streaming infrastructure benefits agent architectures +:learning-objective-3: Identify use cases where Redpanda Cloud agents provide value AI agents are systems that combine large language models with the ability to execute actions and process data. Redpanda Cloud provides real-time streaming infrastructure and standardized tool access to support agent development. @@ -15,42 +16,53 @@ After reading this page, you will be able to: == What is an AI agent? -An AI agent is a system built around a large language model that can: +An AI agent is a system built around a large language model that can interpret user intent, decide which actions are required, invoke external tools, process live and historical data, and chain multiple steps into a workflow. AI agents differ from text-only LLMs by executing actions and invoking external tools. -* Interpret user intent -* Decide which actions are required -* Invoke external tools -* Process live and historical data -* Chain multiple steps into a workflow +== How agents work -AI agents differ from text-only LLMs by executing actions and invoking external tools. +Every AI agent consists of four essential components: -== Key benefits +* *System prompt*: Defines the agent's role, responsibilities, and constraints +* *LLM*: Interprets user intent and decides which tools to invoke +* *Tools*: External capabilities exposed through the Model Context Protocol (MCP) +* *Context*: Conversation history, tool results, and real-time events from Redpanda topics + +Agents can invoke Redpanda Connect components as tools on-demand. Redpanda Connect pipelines can also invoke agents for event-driven processing. This bidirectional integration supports both interactive workflows and automated streaming. + +When a user makes a request, the LLM receives the system prompt and context, decides which tools to invoke, and processes the results. This cycle repeats until the task completes. -Redpanda Cloud provides: +For a deeper understanding of how agents execute, manage context, and maintain state, see xref:ai-agents:agents/concepts.adoc[]. + +== Key benefits -* Real-time streaming data: Access live events instead of batch snapshots -* Remote MCP support: Standardized tool access via Model Context Protocol -* Managed infrastructure: Deployment, scaling, and security handled for you -* Low-latency execution: Tools run close to your data -* Integrated secrets: Securely manage API keys and credentials +Redpanda Cloud provides real-time streaming data so agents access live events instead of batch snapshots. Remote MCP support enables standardized tool access. Managed infrastructure handles deployment, scaling, and security for you. Low-latency execution means tools run close to your data. Integrated secrets management securely stores API keys and credentials. == Use cases -Agents built with Redpanda Cloud are ideal for: +AI agents in Redpanda Cloud unlock new capabilities across multiple fields. + +=== For AI agent developers + +Build agents grounded in real-time data instead of static snapshots. Connect your agent to live order status, inventory levels, and customer history so responses reflect current business state, not stale training data. + +=== For application developers + +Add conversational AI to existing applications without rebuilding your backend. Expose your services as MCP tools and let agents orchestrate complex multi-step workflows through natural language. + +=== For streaming developers -* Real-time customer support: Agents that query order history, inventory status, and shipping data from streaming topics -* Operational intelligence: Agents that analyze live metrics and logs to answer questions about system health -* Data enrichment workflows: Agents that augment streaming data with external API calls or database lookups -* Multi-system orchestration: Agents that coordinate actions across multiple services using streaming events as triggers +Process every event with AI reasoning at scale. Invoke agents automatically from pipelines for fraud detection, content moderation, or sentiment analysis. No batch jobs, no delayed insights. == Limitations -* Remote MCP requires a Redpanda Cloud cluster -* Tool execution latency depends on data source and processing complexity -* Agent quality depends on LLM selection and system prompt design +* Agents are available only on xref:get-started:cluster-types/byoc/index.adoc[BYOC clusters] +* MCP servers must be hosted in Redpanda Cloud clusters +* Cross-agent calling between separate agents hosted in Redpanda Cloud is not currently supported (use internal subagents for delegation within a single agent) == Next steps * xref:ai-agents:agents/quickstart.adoc[]: Get your first agent running -* xref:ai-agents:agents/fundamentals.adoc[]: Learn the four essential components +* xref:ai-agents:agents/concepts.adoc[]: Understand agent execution, context, and state management +* xref:ai-agents:agents/architecture-patterns.adoc[]: Explore agent design patterns +* xref:ai-agents:agents/integration-overview.adoc[]: Choose between agents invoking tools and pipelines calling agents +* xref:ai-agents:agents/create-agent.adoc[]: Create an agent through the Cloud Console diff --git a/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc b/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc new file mode 100644 index 000000000..ba2d064b5 --- /dev/null +++ b/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc @@ -0,0 +1,143 @@ += Pipeline Integration Patterns +:description: Build Redpanda Connect pipelines that invoke agents for event-driven processing and streaming enrichment. +:page-topic-type: best-practices +:personas: streaming_developer, ai_agent_developer +:learning-objective-1: Identify when pipelines should call agents for stream processing +:learning-objective-2: pass:q[Design event-driven agent invocation using the `a2a_message` processor] +:learning-objective-3: Implement streaming enrichment with AI-generated fields + +Build Redpanda Connect pipelines that invoke agents for automated, event-driven processing. Pipelines use the `a2a_message` processor to call agents for each event in a stream when you need AI reasoning, classification, or enrichment at scale. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +This page focuses on pipelines calling agents (pipeline-initiated integration). For agents invoking MCP tools, see xref:ai-agents:agents/integration-overview.adoc#agent-needs-capabilities[Agent needs capabilities]. For external applications calling agents, see xref:ai-agents:agents/integration-overview.adoc#external-system-calls-agent[External system calls agent]. + +== How pipelines invoke agents + +Pipelines use the xref:develop:connect/components/processors/a2a_message.adoc[`a2a_message`] processor to invoke agents for each event in a stream. The processor uses the xref:ai-agents:agents/a2a-concepts.adoc[A2A protocol] to discover and communicate with agents. + +When the `a2a_message` processor receives an event, it sends the event data to the specified agent along with any prompt you provide. The agent processes the event using its reasoning capabilities and returns a response. The processor then adds the agent's response to the event for further processing or output. + +The pipeline determines when to invoke agents based on events, not agent reasoning. + +== When to use this pattern + +Use the `a2a_message` processor when pipelines need AI reasoning for every event in a stream. + +The `a2a_message` processor is appropriate when: + +* **Every event needs AI analysis:** Each message requires reasoning, classification, or decision-making. +* **You need streaming enrichment:** Add AI-generated fields to events at scale. +* **Processing is fully automated:** No human in the loop, event-driven workflows. +* **Batch latency is acceptable:** Agent reasoning time is tolerable for your use case. +* **You're handling high-volume streams:** Processing thousands or millions of events. + +== Use cases + +Use the `a2a_message` processor in pipelines for these common patterns. + +=== Event-driven agent invocation + +Invoke agents automatically for each event: + +[source,yaml] +---- +include::ai-agents:example$pipelines/event-driven-invocation.yaml[] +---- + +Replace `AGENT_CARD_URL` with your actual agent card URL. See xref:ai-agents:agents/a2a-concepts.adoc#agent-card-location[Agent card location]. + +**Use case:** Real-time fraud detection on every transaction. + +=== Streaming data enrichment + +Add AI-generated metadata to events: + +[source,yaml] +---- +include::ai-agents:example$pipelines/streaming-enrichment.yaml[tag=processors,indent=0] +---- + +Replace `AGENT_CARD_URL` with your actual agent card URL. See xref:ai-agents:agents/a2a-concepts.adoc#agent-card-location[Agent card location]. + +**Use case:** Add sentiment scores to every customer review in real-time. + +=== Asynchronous workflows + +Process events in the background: + +[source,yaml] +---- +include::ai-agents:example$pipelines/async-workflows.yaml[tag=pipeline,indent=0] +---- + +Replace `AGENT_CARD_URL` with your actual agent card URL. See xref:ai-agents:agents/a2a-concepts.adoc#agent-card-location[Agent card location]. + +**Use case:** Nightly batch summarization of reports where latency is acceptable. + +=== Multi-agent pipeline orchestration + +Chain multiple agents in sequence: + +[source,yaml] +---- +include::ai-agents:example$pipelines/multi-agent-orchestration.yaml[tag=processors,indent=0] +---- + +Replace the agent URL variables with your actual agent card URLs. See xref:ai-agents:agents/a2a-concepts.adoc#agent-card-location[Agent card location]. + +**Use case:** Translate feedback, analyze sentiment, then route to appropriate team. + +=== Agent as transformation node + +Use agent reasoning for complex transformations: + +[source,yaml] +---- +include::ai-agents:example$pipelines/agent-transformation.yaml[tag=processors,indent=0] +---- + +Replace `AGENT_CARD_URL` with your actual agent card URL. See xref:ai-agents:agents/a2a-concepts.adoc#agent-card-location[Agent card location]. + +**Use case:** Convert natural language queries to SQL for downstream processing. + +== When not to use this pattern + +Do not use the `a2a_message` processor when: + +* Users need to interact with agents interactively. +* The transformation is simple and does not require AI reasoning. +* Agents need to dynamically decide what data to fetch based on context. + +For a detailed comparison between pipeline-initiated and agent-initiated integration patterns, see xref:ai-agents:agents/integration-overview.adoc#pattern-comparison[Pattern comparison]. + +== Example: Real-time fraud detection + +This example shows a complete pipeline that analyzes every transaction with an agent. + +=== Pipeline configuration + +[source,yaml] +---- +include::ai-agents:example$pipelines/fraud-detection-routing.yaml[] +---- + +Replace `AGENT_CARD_URL` with your agent card URL. See xref:ai-agents:agents/a2a-concepts.adoc#agent-card-location[Agent card location]. + +This pipeline: + +* Consumes every transaction from the `transactions` topic. +* Sends each transaction to the fraud detection agent using `a2a_message`. +* Routes transactions to different topics based on fraud score. +* Runs continuously, analyzing every transaction in real-time. + +== Next steps + +* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Explore MCP tool patterns for agent-initiated integration +* xref:ai-agents:agents/integration-overview.adoc[]: Review all integration patterns +* xref:ai-agents:agents/a2a-concepts.adoc[]: Learn how the `a2a_message` processor uses the A2A protocol +* xref:develop:connect/components/processors/about.adoc[]: Learn about Redpanda Connect processors diff --git a/modules/ai-agents/pages/agents/prompt-best-practices.adoc b/modules/ai-agents/pages/agents/prompt-best-practices.adoc index d1b6b7ed8..fff63e421 100644 --- a/modules/ai-agents/pages/agents/prompt-best-practices.adoc +++ b/modules/ai-agents/pages/agents/prompt-best-practices.adoc @@ -1,7 +1,7 @@ = System Prompt Best Practices :description: Write system prompts that produce reliable, predictable agent behavior through clear constraints and tool guidance. :page-topic-type: best-practices -:personas: ai_agent_developer +:personas: ai_agent_developer, app_developer, streaming_developer :learning-objective-1: Identify effective system prompt patterns for agent reliability :learning-objective-2: Apply constraint patterns to prevent unintended agent behavior :learning-objective-3: Evaluate system prompts for clarity and completeness @@ -16,6 +16,8 @@ After reading this page, you will be able to: == Role definition +Define what your agent does and the boundaries of its responsibilities. A clear role prevents scope creep and helps the agent refuse out-of-scope requests appropriately. + === Be specific about agent identity Define what the agent does, not what it is. @@ -34,11 +36,7 @@ You are a helpful assistant. === Define what the agent does and doesn't do -Explicitly state boundaries: - -* What tasks the agent handles -* What tasks it should refuse or delegate -* When to ask for human assistance +Explicitly state boundaries: what tasks the agent handles, what tasks it should refuse or delegate, and when to ask for human assistance. [,text] ---- @@ -55,6 +53,8 @@ Do not: == Tool specification +Tell the agent which tools are available and when to use them. Explicit tool guidance reduces errors and prevents the agent from guessing when to invoke capabilities. + === List available tools Name each tool the agent can use: @@ -91,17 +91,7 @@ Use the tools as needed. == Constraints and safety -=== Specify hard limits - -Use "never" for absolute constraints: - -[,text] ----- -Never: -- Expose customer payment information -- Process refunds above $500 without manager approval -- Access orders from other customers ----- +Set explicit boundaries to prevent unintended agent behavior. === Define data boundaries @@ -130,6 +120,8 @@ Response guidelines: == Context and conversation management +Guide the agent on how to handle unclear requests and stay within conversation scope. These guidelines keep interactions focused and prevent the agent from making assumptions. + === Handle ambiguous requests Guide the agent on how to clarify: @@ -154,8 +146,61 @@ Conversation scope: - Do not engage in general conversation unrelated to orders ---- +== Error handling + +Guide agents to handle failures gracefully through clear prompt instructions. Agent errors fall into two categories: tool failures (external system issues) and reasoning failures (agent confusion or limits). + +=== Tool failure types + +Tools can fail for multiple reasons. Transient failures include network timeouts, temporary unavailability, and rate limits. Permanent failures include invalid parameters, permission denied, and resource not found errors. Partial failures occur when tools return incomplete data or warnings. + +=== Graceful degradation + +Design prompts so agents continue when tools fail: + +.Example prompt guidance for graceful degradation +[,text] +---- +When a tool fails: +1. Attempt an alternative tool if available +2. If no alternative exists, explain the limitation +3. Offer partial results if you retrieved some data before failure +4. Do not make up information to fill gaps +---- + +Agents that degrade gracefully provide value even when systems are partially down. + +Implement retries in tools, not in agent prompts. The tool should retry network calls automatically before returning an error to the agent. + +=== Escalation patterns + +Some failures require human intervention. Budget exceeded errors occur when max iterations are reached before task completion. Insufficient tools means no tool is available for the required action. Ambiguous requests happen when the agent can't determine user intent after clarification attempts. Data access failures occur when multiple tools fail with no alternative path. + +Design prompts to recognize escalation conditions: + +.Example prompt guidance for escalation +[,text] +---- +When you cannot complete the task: +1. Explain what you tried and why it didn't work +2. Tell the user what information or capability is missing +3. Suggest how they can help (provide more details, contact support, etc.) +---- + +=== Common error scenarios + +Include guidance for specific error types in your system prompt: + +**Timeout during tool execution:** When a tool takes longer than the agent timeout limit, the agent receives a timeout error in context. The agent should explain the delay to the user and suggest a retry. + +**Invalid tool parameters:** When the agent passes a wrong data type or missing required field, the tool returns a validation error. The agent should reformat parameters and retry, or ask the user for correct input. + +**Authentication failure:** When a tool can't access a protected resource, it returns a permission denied error. The agent should explain the access limitation without exposing credentials or internal details. + == Output formatting +Control how the agent presents information to users. Consistent formatting makes responses easier to read and ensures critical information appears in predictable locations. + === Specify structure Define how the agent presents information: @@ -169,14 +214,83 @@ Output format: - Include units (dollars, kilograms) in all numeric values ---- -== Testing your prompt +[[evaluation-and-testing]] +== Evaluation and testing + +Test system prompts systematically to verify behavior matches intent. + +Follow this process to validate prompts: + +[cols="1,2,2"] +|=== +| Test Type | What to Test | Example + +| Boundary cases +| Requests at edge of agent scope +| Just inside: "Track order 123" (should work) + +Just outside: "Recommend products" (should refuse) + +Ambiguous: "Help with my order" (should clarify) + +| Tool selection +| Agent chooses correct tools +| Create requests requiring each tool + +Test multiple applicable tools (verify best choice) + +Test no applicable tools (verify explanation) + +| Constraint compliance +| Agent follows "never" rules +| Explicit forbidden: "Show payment methods" + +Indirect forbidden: "What's the credit card number?" + +Verify refusal with explanation + +| Error handling +| Tool failures and limitations +| Disable MCP server tool temporarily + +Send request requiring disabled tool + +Verify graceful response (no fabricated data) + +| Ambiguous requests +| Clarification behavior +| Vague: "Check my stuff" + +Verify specific questions: "Orders, returns, or account?" + +Ensure no guessing of user intent +|=== + +== Design principles + +Apply these principles when writing system prompts to create reliable agent systems. + +=== Design for inspectability + +Make agent reasoning transparent so you can debug by reading conversation history. Your system prompt should encourage clear explanations: + +[,text] +---- +Response format: +- State what you're doing before calling each tool +- Explain why you chose this tool over alternatives +- If a tool fails, describe what went wrong and what you tried +---- + +Log all tool invocations with parameters, record tool results in structured format, and store agent responses with reasoning traces. Opaque agents that "just work" are impossible to fix when they break. + +=== Design for testability + +Test agents with boundary cases (requests at the edge of agent capability), error injection (simulate tool failures to verify graceful degradation), context limits (long conversations approaching token limits), and ambiguous requests (unclear user input to verify clarification behavior). + +Use the systematic testing approach in <>. + +=== Design for cost control + +Write clear system prompts that reduce wasted iterations. Vague prompts cause agent confusion and unnecessary tool calls. Each wasted iteration costs tokens. -Evaluate system prompts by testing: +Guide agents to: -* **Boundary adherence**: Does the agent refuse out-of-scope requests? -* **Tool selection**: Does it choose the right tool for each task? -* **Constraint compliance**: Does it follow "never" rules? -* **Clarity under ambiguity**: Does it ask questions when unclear? +* Request only needed data from tools (use pagination, filters) +* Avoid redundant tool calls (check context before calling) +* Stop when the task completes (don't continue exploring) + +For cost management strategies including iteration limits and monitoring, see xref:ai-agents:agents/concepts.adoc[]. == Example: Complete system prompt @@ -222,61 +336,89 @@ When request is unclear: == Common anti-patterns +Avoid these patterns that lead to unpredictable agent behavior. + === Vague role definition +Define specific agent responsibilities and scope. + +Generic role definitions fail because the agent has no guidance on what tasks to handle, what requests to refuse, or when to escalate to humans. + .Don't [,text] ---- You are a helpful AI assistant. ---- -Why: Doesn't constrain behavior or set expectations. +This doesn't constrain behavior or set expectations. The agent might attempt tasks outside its capabilities or handle requests it should refuse. + +.Do +[,text] +---- +You are an order fulfillment agent for an e-commerce platform. You help customers track orders, update shipping addresses, and process returns up to $500. + +Do not: +- Provide product recommendations (redirect to website) +- Process refunds above $500 (escalate to manager) +---- + +Clear scope prevents the agent from attempting out-of-scope tasks and defines escalation boundaries. === Missing constraints +Set explicit boundaries on data access and operations. + +Without constraints, agents may access sensitive data, process excessive historical records, or perform operations beyond their authorization. + .Don't [,text] ---- You can access customer data to help answer questions. ---- -Why: No boundaries on what data or how much history. +This provides no boundaries on what data, how much history, or which customers. The agent might retrieve payment information, access other customers' data, or query years of records. + +.Do +[,text] +---- +Data access: +- Only orders from the authenticated customer +- Maximum of 90 days of historical data +- No access to payment methods or billing addresses +---- + +Explicit boundaries prevent unauthorized access and scope queries to reasonable limits. === Implicit tool selection +Specify when to use each tool with clear decision criteria. + +Vague tool guidance forces agents to guess based on tool names alone, leading to wrong tool choices, unnecessary calls, or skipped tools. + .Don't [,text] ---- Use the available tools to complete tasks. ---- -Why: Agent must guess which tool applies when. - -== Summary - -[cols="1,2,2"] -|=== -| Element | Purpose | Example - -| Role definition -| Sets agent identity and scope -| "You are an order fulfillment agent" +The agent must guess which tool applies when. This leads to calling the wrong tool first, calling all tools unnecessarily, or fabricating answers without using tools. -| Tool specification -| Guides tool selection -| "Use get_orders when customer asks about history" +.Do +[,text] +---- +Use get_customer_orders when: +- Customer asks about order history +- You need order details to answer a question -| Constraints -| Prevents unsafe behavior -| "Never expose payment information" +Use update_order_status only when: +- Customer explicitly requests a cancellation +- You have confirmed the order is eligible for status changes +---- -| Response format -| Controls output structure -| "Present order details as tables" -|=== +Decision criteria enable reliable tool selection based on request context. == Next steps * xref:ai-agents:agents/quickstart.adoc[]: Create an agent with your system prompt -* xref:ai-agents:agents/fundamentals.adoc[]: Review agent components +* xref:ai-agents:agents/overview.adoc[]: Review agent components * xref:ai-agents:mcp/remote/best-practices.adoc[]: Learn MCP tool design patterns diff --git a/modules/ai-agents/pages/agents/quickstart.adoc b/modules/ai-agents/pages/agents/quickstart.adoc index c03cb70e7..a7e2adf58 100644 --- a/modules/ai-agents/pages/agents/quickstart.adoc +++ b/modules/ai-agents/pages/agents/quickstart.adoc @@ -1,14 +1,14 @@ = AI Agent Quickstart -:description: Get started with AI agents using Redpanda Cloud by creating a cluster, deploying a tool, and connecting an AI client. +:description: Create your first AI agent in Redpanda Cloud that generates and publishes event data through natural language commands. :page-topic-type: tutorial :personas: ai_agent_developer, evaluator -:learning-objective-1: Create a Redpanda Cloud cluster with Remote MCP enabled -:learning-objective-2: Deploy your first MCP tool -:learning-objective-3: Connect an AI client to your agent tools +:learning-objective-1: Create an AI agent in Redpanda Cloud that uses MCP tools +:learning-objective-2: Configure the agent with a system prompt and model selection +:learning-objective-3: Test the agent by generating and publishing events through natural language -This quickstart gets you up and running with your first AI agent using Redpanda Cloud. You'll create a cluster, deploy a simple tool, and connect an AI client. +Build your first AI agent in Redpanda Cloud. You'll create an agent that understands natural language requests and uses MCP tools to generate and publish event data to Redpanda topics. -After reading this page, you will be able to: +After completing this quickstart, you will be able to: * [ ] {learning-objective-1} * [ ] {learning-objective-2} @@ -16,65 +16,179 @@ After reading this page, you will be able to: == Prerequisites -* Redpanda Cloud account -* Claude Code, Claude Desktop, or another MCP-compatible AI client -* Basic familiarity with YAML +* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] (agents are not available on Dedicated or Serverless clusters) + +* Completed the xref:ai-agents:mcp/remote/quickstart.adoc[Remote MCP Quickstart] to create an MCP server with the following tools deployed: ++ +** `generate_input`: Generates fake user event data +** `redpanda_output`: Publishes data to Redpanda topics + +* API key from one of these providers: ++ +** link:https://platform.openai.com/api-keys[OpenAI API key^] +** link:https://console.anthropic.com/settings/keys[Anthropic API key^] +** link:https://aistudio.google.com/app/apikey[Google AI API key^] == What you'll build -A simple agent that can query data from a Redpanda topic using a custom MCP tool. +An Event Data Manager agent that: + +* Generates fake user event data (logins, purchases, page views) +* Publishes events to Redpanda topics +* Understands natural language requests like "Generate 5 login events and publish them" -== Create a cluster +The agent orchestrates the `generate_input` and `redpanda_output` tools you created in the MCP quickstart. -. Log in to the Redpanda Cloud Console. -. Create a new cluster. -. During cluster creation, enable Remote MCP. -. Enable the Secrets Store. -. Wait for the cluster to become ready. +== Create the agent -For detailed cluster creation steps, see the Redpanda Cloud documentation. +. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud Console^]. -== Deploy your first MCP tool +. Navigate to your cluster and click *Agentic AI* > *AI Agents* in the left navigation. -You'll create a simple tool that queries recent data from a topic. +. Click *Create Agent*. -For step-by-step instructions on creating and deploying MCP tools, see xref:ai-agents:mcp/remote/quickstart.adoc[]. +. Configure basic settings: ++ +* *Display Name*: `event-data-manager` +* *Description*: `Generates and publishes fake user event data to Redpanda topics` +* *Resource Tier*: Select *XSmall* (sufficient for this quickstart) -The MCP quickstart walks you through: +. Choose your LLM provider and model: ++ +* *Provider*: Select OpenAI, Anthropic, or Google +* *Model*: Choose any balanced model from the dropdown -* Writing a Redpanda Connect configuration with a component and meta block -* Defining tool parameters and descriptions -* Deploying the tool to your cluster -* Testing tool execution +. Add your API key: ++ +* Click *Add Secret* under *API Key* +* Select *Create new secret* +* *Secret Name*: `-api-key` (for example, `openai-api-key`) +* *Secret Value*: Paste your API key +* Click *Save* + +. Write the system prompt: ++ +[,text] +---- +You are an Event Data Manager agent for Redpanda Cloud. -== Connect your AI client +Your responsibilities: +- Generate realistic fake user event data +- Publish events to Redpanda topics +- Help users test streaming data pipelines -Once your MCP tool is deployed, connect your AI client: +Available tools: +- generate_input: Creates fake user events (login, logout, purchase, view) +- redpanda_output: Publishes data to the events topic + +When a user asks you to generate events: +1. Use generate_input to create the event data +2. Use redpanda_output to publish the events to Redpanda +3. Confirm how many events were published + +Always publish events after generating them unless the user explicitly says not to. + +Response format: +- State what you're doing before calling each tool +- Show the generated event data +- Confirm successful publication with a count +---- -. Get your cluster's MCP server URL from the Redpanda Cloud Console. -. Configure your AI client with the MCP server URL. -. Authenticate using your Redpanda Cloud credentials. +. Select MCP tools: ++ +* Click *Add MCP Server* +* Select the `event-data-generator` server (created in the MCP quickstart) +* Check both tools: +** `generate_input` +** `redpanda_output` -For client-specific setup instructions, see xref:ai-agents:mcp/remote/quickstart.adoc[]. +. Set execution parameters: ++ +* *Max Iterations*: `30` (allows multiple tool calls per request) + +. Review your configuration and click *Create Agent*. + +. Wait for the agent status to change from *Starting* to *Running*. == Test your agent -Try a natural language query that uses your tool: +Now test your agent with natural language requests. +. In the agent details view, open the *Inspector* tab. + +. Try these example requests: ++ +.Generate and publish 3 events +[%collapsible] +==== [.no-copy] ---- -Show me the last 10 messages from the orders topic +Generate 3 user events and publish them to the events topic. ---- -The agent will: +The agent should respond with these steps: + +. Call `generate_input` to create 3 fake user events. +. Call `redpanda_output` to publish them to the `events` topic. +. Confirm the events were published. -. Understand your intent -. Discover the available tool -. Invoke the tool with appropriate parameters -. Return formatted results +You should see the agent's reasoning and the tool execution results. +==== ++ +.Generate specific event types +[%collapsible] +==== +[.no-copy] +---- +Create 5 login events for testing and publish them to Redpanda. +---- + +The agent understands the request requires login events specifically and generates appropriate test data. +==== ++ +.Generate events without publishing +[%collapsible] +==== +[.no-copy] +---- +Show me what 3 sample purchase events would look like, but don't publish them yet. +---- + +The agent calls only `generate_input` and displays the data without publishing. +==== + +. Navigate to *Topics* in the left navigation to verify events were published to the `events` topic. + +== Iterate on your agent + +Try modifying the agent to change its behavior: + +. Click *Edit configuration* in the agent details view. + +. Update the system prompt to change how the agent responds. For example: ++ +* Add constraints: "Never publish more than 10 events at once" +* Change output format: "Always format events as a table" +* Add validation: "Before publishing, show the user the generated data and ask for confirmation" + +. Click *Save* to update the agent. + +. Test your changes in the *Inspector* tab. + +== Troubleshoot + +For comprehensive troubleshooting guidance, see xref:ai-agents:agents/troubleshooting.adoc[]. + +Common quickstart issues: + +**Events not appearing in topic:** Verify the `events` topic exists and review the MCP server logs for publishing errors. == Next steps -* xref:ai-agents:agents/fundamentals.adoc[]: Learn core concepts for building agents -* xref:ai-agents:agents/architecture-patterns.adoc[]: Explore common architecture patterns -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find reusable tool patterns +You've created an agent that orchestrates MCP tools through natural language. Explore more: + +* xref:ai-agents:agents/overview.adoc[]: Learn the four essential agent components +* xref:ai-agents:agents/create-agent.adoc[]: Deep dive into agent configuration options +* xref:ai-agents:agents/prompt-best-practices.adoc[]: Write better system prompts +* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems +* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find more tool patterns to add to your agent diff --git a/modules/ai-agents/pages/agents/troubleshooting.adoc b/modules/ai-agents/pages/agents/troubleshooting.adoc new file mode 100644 index 000000000..cc8a23ae6 --- /dev/null +++ b/modules/ai-agents/pages/agents/troubleshooting.adoc @@ -0,0 +1,435 @@ += Troubleshoot AI Agents +:description: Diagnose and fix common issues with AI agents including deployment failures, runtime behavior problems, and tool execution errors. +:page-topic-type: troubleshooting +:personas: ai_agent_developer, app_developer, streaming_developer +:learning-objective-1: Diagnose deployment failures and resource allocation errors +:learning-objective-2: Resolve runtime behavior issues including tool selection and iteration limits +:learning-objective-3: Fix tool execution problems and authentication failures + +Use this page to diagnose and fix common issues with AI agents, including deployment failures, runtime behavior problems, tool execution errors, and integration issues. + +== Deployment issues + +Fix issues that prevent agents from connecting to required resources. + +=== MCP server connection failures + +**Symptoms:** Agent starts but the tools don't respond or return connection errors. + +**Causes:** + +* MCP server stopped or crashed after agent creation +* Network connectivity issues between agent and MCP server +* MCP server authentication or permission issues + +**Solution:** + +. Verify MCP server status in *Agentic AI* > *Remote MCP*. +. Check MCP server logs for errors. +. Restart the MCP server if needed. +. Verify agent has permission to access the MCP server. + +**Prevention:** + +* Monitor MCP server health +* Use appropriate retry logic in tools + +== Runtime behavior issues + +Resolve problems with agent decision-making, tool selection, and response generation. + +=== Agent not calling tools + +**Symptoms:** Agent responds without calling any tools, or fabricates information instead of using tools. + +**Causes:** + +* System prompt doesn't clearly specify when to use tools +* Tool descriptions are vague or missing +* LLM model lacks sufficient reasoning capability +* Max iterations is too low + +**Solution:** + +. Strengthen tool usage guidance in your system prompt: ++ +[,text] +---- +ALWAYS use get_order_status when customer mentions an order ID. +NEVER respond about order status without calling the tool first. +---- + +. Review tool descriptions in your MCP server configuration. +. Use a more capable model (GPT-4, Claude Sonnet, or equivalent). +. Increase max iterations if the agent is stopping before reaching tools. + +**Prevention:** + +* Write explicit tool selection criteria in system prompts +* Test agents with the xref:ai-agents:agents/prompt-best-practices.adoc#evaluation-and-testing[systematic testing approach] +* Use models appropriate for your task complexity + +=== Calling wrong tools + +**Symptoms:** Agent selects incorrect tools for the task, or calls tools with invalid parameters. + +**Causes:** + +* Tool descriptions are ambiguous or overlap +* Too many similar tools confuse the LLM +* System prompt doesn't provide clear tool selection guidance + +**Solution:** + +. Make tool descriptions more specific and distinct. +. Add "when to use" guidance to your system prompt: ++ +[,text] +---- +Use get_order_status when: +- Customer provides an order ID (ORD-XXXXX) +- You need to check current order state + +Use get_shipping_info when: +- Order status is "shipped" +- Customer asks about delivery or tracking +---- + +. Reduce the number of tools you expose to the agent. +. Use subagents to partition tools by domain. + +**Prevention:** + +* Follow tool design patterns in xref:ai-agents:mcp/remote/tool-patterns.adoc[] +* Limit each agent to 10-15 tools maximum +* Test boundary cases where multiple tools might apply + +=== Stuck in loops or exceeding max iterations + +**Symptoms:** Agent reaches max iterations without completing the task, or repeatedly calls the same tool with the same parameters. + +**Causes:** + +* Tool returns errors that the agent doesn't know how to handle +* Agent doesn't recognize when the task is complete +* Tool returns incomplete data that prompts another call +* System prompt encourages exhaustive exploration + +**Solution:** + +. Add completion criteria to your system prompt: ++ +[,text] +---- +When you have retrieved all requested information: +1. Present the results to the user +2. Stop calling additional tools +3. Do not explore related data unless asked +---- + +. Add error handling guidance: ++ +[,text] +---- +If a tool fails after 2 attempts: +- Explain what went wrong +- Do not retry the same tool again +- Move on or ask for user guidance +---- + +. Review tool output to ensure it signals completion clearly. +. Increase max iterations if the task legitimately requires many steps. + +**Prevention:** + +* Design tools to return complete information in one call +* Set max iterations appropriate for task complexity (see xref:ai-agents:agents/concepts.adoc#why-iterations-matter[Why iterations matter]) +* Test with ambiguous requests that might cause loops + +=== Making up information + +**Symptoms:** Agent provides plausible-sounding answers without calling tools, or invents data when tools fail. + +**Causes:** + +* System prompt doesn't explicitly forbid fabrication +* Agent treats tool failures as suggestions rather than requirements +* Model is hallucinating due to lack of constraints + +**Solution:** + +. Add explicit constraints to your system prompt: ++ +[,text] +---- +Critical rules: +- NEVER make up order numbers, tracking numbers, or customer data +- If a tool fails, explain the failure - do not guess +- If you don't have information, say so explicitly +---- + +. Test error scenarios by temporarily disabling tools. +. Use a more capable model that follows instructions better. + +**Prevention:** + +* Include "never fabricate" rules in all system prompts +* Test with requests that require unavailable data +* Monitor transcripts and session topic for fabricated responses + +== Performance issues + +Diagnose and fix issues related to agent speed and resource consumption. + +=== Slow response times + +**Symptoms:** Agent takes 10+ seconds to respond to simple queries. + +**Causes:** + +* LLM model is slow (large context processing) +* Too many tool calls in sequence +* Tools themselves are slow (database queries, API calls) +* Large context window from long conversation history + +**Solution:** + +. Use a faster model for simple queries: +.. Haiku or GPT-4o Mini for straightforward tasks +.. Reserve larger models for complex reasoning +. Review conversation history in Inspector to identify unnecessary tool calls. +. Optimize tool implementations: +.. Add caching where appropriate +.. Reduce query complexity +.. Return only needed data (use pagination, filters) +. Clear conversation history in Inspector if context is very large. + +**Prevention:** + +* Right-size model selection based on task complexity +* Design tools to execute quickly (< 2 seconds ideal) +* Set appropriate max iterations to prevent excessive exploration +* Monitor token usage and conversation length + +=== High token costs + +**Symptoms:** Token usage is higher than expected, costs are increasing rapidly. + +**Causes:** + +* Max iterations configured too high +* Agent making unnecessary tool calls +* Large tool results filling context window +* Long conversation history not being managed +* Using expensive models for simple tasks + +**Solution:** + +. Review token usage in the tasks topic. +. Lower max iterations for this agent. +. Optimize tool responses to return less data: ++ +[,text] +---- +Bad: Return all 10,000 customer records +Good: Return paginated results, 20 records at a time +---- + +. Add cost control guidance to system prompt: ++ +[,text] +---- +Efficiency guidelines: +- Request only the data you need +- Stop when you have enough information +- Do not call tools speculatively +---- + +. Switch to a more cost-effective model for simple queries. +. Clear conversation history periodically in Inspector. + +**Prevention:** + +* Set appropriate max iterations (10-20 for simple, 30-40 for complex) +* Design tools to return minimal necessary data +* Monitor token usage trends +* See cost calculation guidance in xref:ai-agents:agents/concepts.adoc#cost-calculation[Cost calculation] + +== Tool execution issues + +Fix problems with timeouts, invalid parameters, and error responses. + +=== Tool timeouts + +**Symptoms:** Tools fail with timeout errors, agent receives incomplete results. + +**Causes:** + +* External API is slow or unresponsive +* Database query is too complex +* Network latency between tool and external system +* Tool processing large datasets in memory + +**Solution:** + +. Add timeout handling to tool implementation: ++ +[,yaml] +---- +http: + url: https://api.example.com/data + timeout: "5s" # Set explicit timeout +---- + +. Optimize external queries: +.. Add database indexes +.. Reduce query scope +.. Cache frequent queries +. Increase tool timeout if operation legitimately takes longer. +. Add retry logic for transient failures. + +**Prevention:** + +* Set explicit timeouts in all tool configurations +* Test tools under load +* Monitor external API performance +* Design tools to fail fast on unavailable services + +=== Invalid parameters + +**Symptoms:** Tools return validation errors about missing or incorrectly formatted parameters. + +**Causes:** + +* Tool schema doesn't match implementation +* Agent passes wrong data types +* Required parameters not marked as required in schema +* Agent misunderstands parameter purpose + +**Solution:** + +. Verify tool schema matches implementation: ++ +[,yaml] +---- +input_schema: + properties: + order_id: + type: string # Must match what tool expects + description: "Order ID in format ORD-12345" +---- + +. Add parameter validation to tools. +. Improve parameter descriptions in tool schema. +. Add examples to tool descriptions: ++ +[,yaml] +---- +description: | + Get order status by order ID. + Example: get_order_status(order_id="ORD-12345") +---- + +**Prevention:** + +* Write detailed parameter descriptions +* Include format requirements and examples +* Test tools with invalid inputs to verify error messages +* Use JSON Schema validation in tool implementations + +=== Tool returns errors + +**Symptoms:** Tools execute but return error responses or unexpected data formats. + +**Causes:** + +* External API returned error +* Tool implementation has bugs +* Data format changed in external system +* Tool lacks error handling + +**Solution:** + +. Check tool logs in MCP server. +. Test tool directly (outside agent context). +. Verify external system is operational. +. Add error handling to tool implementation: ++ +[,yaml] +---- +processors: + - try: + - http: + url: ${API_URL} + catch: + - mapping: | + root.error = "API unavailable: " + error() +---- + +. Update agent system prompt to handle this error type. + +**Prevention:** + +* Implement comprehensive error handling in tools +* Monitor external system health +* Add retries for transient failures +* Log all tool errors for analysis + +== Integration issues + +Fix problems with external applications calling agents and pipeline-to-agent integration. + +=== Pipeline integration failures + +**Symptoms:** Pipelines using `a2a_message` processor fail or timeout. + +**Causes:** + +* Agent URL is incorrect in pipeline configuration +* Agent is not running or restarting +* Agent timeout is too low for pipeline workload +* Authentication issues between pipeline and agent +* High event volume overwhelming agent + +**Solution:** + +. Verify agent URL in pipeline configuration: ++ +[,yaml] +---- +processors: + - a2a_message: + agent_card_url: "https://CORRECT-AGENT-URL/.well-known/agent-card.json" +---- + +. Check agent status and resource allocation. +. Increase agent resource tier for high-volume pipelines. +. Add error handling in pipeline: ++ +[,yaml] +---- +processors: + - try: + - a2a_message: + agent_card_url: ${AGENT_URL} + catch: + - log: + message: "Agent invocation failed: ${! error() }" +---- + +**Prevention:** + +* Test pipeline-agent integration with low volume first +* Size agent resources appropriately for event rate +* See integration patterns in xref:ai-agents:agents/pipeline-integration-patterns.adoc[] + +== Monitor and debug agents + +For comprehensive guidance on monitoring agent activity, analyzing conversation history, tracking token usage, and debugging issues, see xref:ai-agents:observability/monitor-agents.adoc[]. + +== Next steps + +* xref:ai-agents:agents/prompt-best-practices.adoc[]: Write better system prompts to prevent common issues +* xref:ai-agents:agents/concepts.adoc[]: Understand agent execution and context management +* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Design reliable tools +* xref:ai-agents:agents/architecture-patterns.adoc[]: Apply scalable design patterns diff --git a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc new file mode 100644 index 000000000..bcc324632 --- /dev/null +++ b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc @@ -0,0 +1,336 @@ += Learn Multi-Tool Agent Orchestration +:description: Learn how agents coordinate multiple tools, make decisions based on conversation context, and handle errors through building a customer support agent. +:page-topic-type: tutorial +:personas: ai_agent_developer, streaming_developer +:learning-objective-1: Explain how agents use conversation context to decide which tools to invoke +:learning-objective-2: Apply tool orchestration patterns to handle multi-step workflows +:learning-objective-3: Evaluate how system prompt design affects agent tool selection + +Build a customer support agent to learn how agents orchestrate multiple tools, make context-aware decisions, and handle incomplete data. + +After completing this tutorial, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== What you'll learn + +Agents become powerful when they coordinate multiple tools to solve complex problems. A single-tool agent can retrieve order status. A multi-tool agent can check order status, fetch tracking information, look up customer history, and decide which tools to invoke based on conversation context. + +This tutorial teaches multi-tool orchestration through a customer support scenario. You'll see how agents: + +* **Use conversation context to choose tools**: The agent analyzes what the user said and what data it already has to decide which tool to call next. +* **Chain tools in sequence**: When an order is "shipped", the agent follows up with tracking information automatically. +* **Handle missing information**: When users provide incomplete requests, the agent asks clarifying questions instead of guessing. +* **Recover from errors**: When tools return no data, the agent explains the limitation without fabricating information. + +The patterns you practice here apply to any multi-tool scenario: data analysis agents coordinating query and visualization tools, workflow automation agents chaining approval and notification tools, or research agents combining search and summarization tools. + +== The scenario + +Customer support teams handle repetitive questions: "Where is my order?", "What's my tracking number?", "Show me my order history." Human agents waste time on lookups that could be automated. + +An effective support agent needs three capabilities: + +1. **Order status lookup**: Check current order state and contents +2. **Shipping information**: Retrieve tracking numbers and delivery estimates +3. **Order history**: Show past purchases for a customer + +The challenge: users phrase requests differently ("Where's my package?", "Track order ORD-12345", "My recent orders"), and agents must choose the right tool based on context. + +== Prerequisites + +* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] with Remote MCP enabled. +* LLM provider API key (this tutorial uses OpenAI). + +== Design the MCP tools + +Before an agent can orchestrate tools, you need tools to orchestrate. The design principle: each tool should do one thing well, returning structured data the agent can reason about. + +=== Tool granularity matters + +You could create a single `handle_customer_request` tool that takes a natural language query and returns an answer. This approach fails because: + +* The agent can't inspect intermediate results +* Tool chaining becomes impossible (no way to pass order status to shipping lookup) +* Error handling is opaque (did the order lookup fail or the shipping lookup?) + +Instead, create focused tools: + +* `get_order_status`: Returns order state and contents +* `get_shipping_info`: Returns tracking data +* `get_customer_history`: Returns past orders + +This granularity enables the agent to chain tools (check order status, see it's shipped, fetch tracking info) and handle errors at each step. + +=== Deploy the tools + +. Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud Console^] +. Go to *Agentic AI* > *Remote MCP* +. Click *Create MCP Server* +. Configure the server: ++ +* *Name*: `customer-support-tools` +* *Description*: `Tools for customer support agent` + +. Add the first tool with this YAML configuration: ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/get_order_status.yaml[] +---- ++ +This tool uses the `mapping` processor to return mock data. The mock approach enables testing without external dependencies. In production, replace `mapping` with `http` to call your actual order API. ++ +Notice the tool's design: ++ +* **Single responsibility**: Only retrieves order status, nothing else +* **Structured output**: Returns JSON the agent can parse +* **Predictable format**: Always includes `order_id`, `status`, `items`, `total` + +. Select *Processor* from the component type dropdown, then click *Lint* to validate. + +. Click *Add Tool* and add the second tool: ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/get_shipping_info.yaml[] +---- ++ +This tool demonstrates conditional data: it only returns tracking information when the order has shipped. When an order hasn't shipped yet, the tool returns an empty result. The agent must handle this case. ++ +Select *Processor* from the component type dropdown, then click *Lint*. + +. Click *Add Tool* and add the third tool: ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/get_customer_history.yaml[] +---- ++ +This tool returns multiple orders, demonstrating list-handling. The agent must format multiple results clearly for users. ++ +Select *Processor* from the component type dropdown, then click *Lint*. + +. Click *Create MCP Server* + +Wait for the server status to show *Running*. You now have three focused tools the agent can orchestrate. + +== Write the system prompt + +The system prompt teaches the agent how to orchestrate tools. Without explicit guidance, the agent must guess when to use each tool, often choosing incorrectly or ignoring tools entirely. + +=== Implicit tool selection + +Make tool usage explicit. + +When the prompt doesn't specify when to use tools, the agent must guess based on tool names and descriptions alone. This leads to wrong tool choices, unnecessary calls, or skipped tools entirely. + +.Don't +[,text] +---- +You have access to order, shipping, and customer history tools. +---- + +The agent sees three tools but lacks decision criteria. When a user asks "Where's my order?", the agent might call the wrong tool first, call all tools unnecessarily, or skip tools and fabricate an answer. + +.Do +[,text] +---- +When to use tools: +- Use get_order_status when customer provides an order ID +- Use get_shipping_info when order status is "shipped" +- Use get_customer_history when customer asks about past orders +---- + +Explicit criteria create reliable tool selection. The agent follows clear rules instead of guessing. + +=== Implicit tool chaining + +Specify how tool results inform the next action. + +Without chaining instructions, agents treat each tool call as independent. They miss opportunities to combine data or make redundant calls. + +.Don't +[,text] +---- +Use get_order_status to check orders. +Use get_shipping_info for tracking information. +---- + +The agent calls `get_order_status`, receives status "shipped", but doesn't know to follow up with shipping information. Users get incomplete answers. + +.Do +[,text] +---- +If order is "shipped", follow up with get_shipping_info to provide tracking details. +---- + +The agent uses the first tool's result (whether the status is "shipped") to decide whether to invoke the second tool. This creates context-aware behavior. + +=== Missing error constraints + +Prevent fabrication when tools fail. + +Without explicit constraints, agents invent plausible-sounding data when tools return errors or empty results. This creates hallucinations. + +.Don't +[,text] +---- +Help customers track their orders. +---- + +When `get_order_status` returns no data, the agent might invent an order status, tracking number, or delivery date that sounds real but is completely fabricated. + +.Do +[,text] +---- +Never: +- Make up tracking numbers or delivery dates +- Guess customer intent + +If order not found, ask customer to verify the order ID. +---- + +Explicit constraints force the agent to acknowledge limitations instead of fabricating information. + +=== Create the agent + +Create the customer support agent with the designed system prompt. + +. Go to *Agentic AI* > *AI Agents* +. Click *Create Agent* +. Configure the agent: ++ +* *Name*: `customer-support-agent` +* *Description*: `Helps customers track orders and shipping` +* *Resource Tier*: Medium +* *Model*: OpenAI GPT-4o or Claude Sonnet (models with strong reasoning) +* *API Key*: Your LLM provider API key +* *MCP Server*: Select `customer-support-tools` +* *Max Iterations*: 30 + +. In the *System Prompt* field, enter this configuration: ++ +[source,text] +---- +You are a customer support agent for Acme E-commerce. + +Responsibilities: +- Help customers track their orders +- Provide shipping information and estimated delivery dates +- Look up customer order history +- Answer questions about order status + +Available tools: +- get_order_status: Use when customer asks about a specific order +- get_shipping_info: Use when customer needs tracking or delivery information +- get_customer_history: Use when customer asks about past orders or "my orders" + +When to use each tool: +- If customer provides an order ID (ORD-XXXXX), use get_order_status first +- If customer asks "where is my order?", ask for the order ID before using tools +- If order is "shipped", follow up with get_shipping_info to provide tracking details +- If customer asks about "all my orders" or past purchases, use get_customer_history + +Never: +- Expose customer payment information (credit cards, billing addresses) +- Make up tracking numbers or delivery dates +- Guarantee delivery dates (use "estimated" language) +- Process refunds or cancellations (escalate to human agent) + +Error handling: +- If order not found, ask customer to verify the order ID +- If shipping info unavailable, explain the order may not have shipped yet +- If customer history is empty, confirm the customer ID and explain no orders found + +Response format: +- Start with a friendly greeting +- Present order details in a clear, structured way +- For order status, include: order ID, status, items, total +- For shipping, include: carrier, tracking number, estimated delivery, last known location +- Always include next steps or offer additional help + +Example response structure: +1. Acknowledge the customer's question +2. Present the information from tools +3. Provide next steps or additional context +4. Ask if they need anything else +---- + +. Click *Create Agent*. + +Wait for the agent status to show *Running*. + +== Observe orchestration in action + +Testing reveals how the agent makes decisions. Watch the conversation panel in the built-in chat interface to see the agent's reasoning process unfold. + +. Go to *Agentic AI* > *AI Agents* +. Click on `customer-support-agent`. +. Open the *Inspector* tab. + +=== Tool chaining based on status + +.Query +---- +Hi, I'd like to check on order ORD-12345 +---- + +The agent uses the first tool's result (whether the status is "shipped") to decide whether to invoke the second tool. This demonstrates context-aware tool chaining. + +Try changing ORD-12345 to ORD-67890. This order has status "processing", so the agent calls only `get_order_status` (no shipping info exists yet). The agent chains tools only when appropriate. + +=== Clarification before tool invocation + +Clear the conversation history to reset context. Then test this query: + +.Query +---- +Where is my order? +---- + +The agent recognizes incomplete requests and asks clarifying questions instead of guessing or calling tools with missing parameters. This demonstrates pre-condition checking. + +Notice the agent calls zero tools. Effective orchestration includes knowing when NOT to invoke tools. + +=== List handling + +.Query +---- +Can you show me my recent orders? My customer ID is CUST-100. +---- + +The agent handles list results by formatting them clearly for users. Try CUST-999 (returns empty list) to see how the agent handles the no-results case. + +=== Error recovery + +.Query +---- +Check order ORD-99999 +---- + +The agent detects tool failures and handles them gracefully. Critically, the agent does NOT fabricate tracking numbers or order details. This demonstrates error recovery without hallucination. + +Compare this to what happens without the "Never make up tracking numbers" constraint: remove that line from the system prompt and retest. The agent might invent plausible-sounding but fake tracking information. + +== Troubleshoot + +For comprehensive troubleshooting guidance, see xref:ai-agents:agents/troubleshooting.adoc[]. + +=== Test with mock data + +The mock tools in this tutorial only recognize specific test IDs: + +* Orders: ORD-12345, ORD-67890, ORD-99999 +* Customers: CUST-100, CUST-999 + +Use these documented test IDs when testing the agent. If you replace the mock tools with real API calls, verify that your API endpoints return the expected data structures. + +== Next steps + +* xref:ai-agents:mcp/remote/tool-patterns.adoc#call-external-apis[Call external APIs]: Replace mock tools with HTTP API calls +* xref:ai-agents:agents/prompt-best-practices.adoc[]: Learn more system prompt patterns +* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems +* xref:ai-agents:agents/troubleshooting.adoc[]: Debug agent behavior issues diff --git a/modules/ai-agents/pages/mcp/index.adoc b/modules/ai-agents/pages/mcp/index.adoc new file mode 100644 index 000000000..797fabcff --- /dev/null +++ b/modules/ai-agents/pages/mcp/index.adoc @@ -0,0 +1,5 @@ += MCP +:page-layout: index +:description: Use the Model Context Protocol (MCP) to build tools that extend AI agent capabilities with real-time data and external integrations. + +Connect AI agents to your data and systems using MCP servers hosted in Redpanda Cloud or on your local machine. diff --git a/modules/ai-agents/pages/mcp/local/quickstart.adoc b/modules/ai-agents/pages/mcp/local/quickstart.adoc index 875d4e5a0..0408f950f 100644 --- a/modules/ai-agents/pages/mcp/local/quickstart.adoc +++ b/modules/ai-agents/pages/mcp/local/quickstart.adoc @@ -3,7 +3,7 @@ :description: Connect your Claude AI agent to your Redpanda Cloud account and clusters using the Redpanda Cloud Management MCP Server. :page-topic-type: tutorial :personas: ai_agent_developer, platform_admin -// Reader journey: "I'm new" → first hands-on experience +// Reader journey: "I'm new" - seeking first hands-on experience // Learning objectives - what readers will achieve by completing this quickstart: :learning-objective-1: Authenticate to Redpanda Cloud with rpk :learning-objective-2: Install the MCP integration for Claude @@ -29,7 +29,7 @@ TIP: For other clients, see xref:ai-agents:mcp/local/configuration.adoc[]. == Set up the MCP server -. Verify your `rpk` version +. Verify your `rpk` version. + ```bash rpk version @@ -37,7 +37,7 @@ rpk version + Ensure the version is at least 25.2.3. -. Log in to Redpanda Cloud +. Log in to Redpanda Cloud. + ```bash rpk cloud login diff --git a/modules/ai-agents/pages/mcp/remote/admin-guide.adoc b/modules/ai-agents/pages/mcp/remote/admin-guide.adoc deleted file mode 100644 index 214e3070f..000000000 --- a/modules/ai-agents/pages/mcp/remote/admin-guide.adoc +++ /dev/null @@ -1,41 +0,0 @@ -= Remote MCP Server Administration Guide -:description: Overview of administrative tasks for managing MCP servers in Redpanda Cloud. -:page-topic-type: overview -:personas: platform_admin, ai_agent_developer -// Reader journey: "I operate and maintain" -// Learning objectives - what readers can learn from this page: -:learning-objective-1: Identify available MCP server administrative tasks -:learning-objective-2: Navigate to administrative resources -:learning-objective-3: Describe the server lifecycle stages - -Use these resources to manage it throughout its lifecycle, from editing and scaling to monitoring and deletion. - -After reading this page, you will be able to: - -* [ ] {learning-objective-1} -* [ ] {learning-objective-2} -* [ ] {learning-objective-3} - -== Server lifecycle management - -Manage the basic lifecycle of your MCP servers, including editing configurations, pausing to save costs, and deleting. - -See xref:ai-agents:mcp/remote/manage-servers.adoc[]. - -== Resource scaling - -Adjust your MCP server's compute resources to match workload demands and optimize costs. Resource allocation directly affects your billing charges. - -See xref:ai-agents:mcp/remote/scale-resources.adoc[]. - -== Monitoring and observability - -Monitor your MCP server's activity using OpenTelemetry traces. Track tool invocations, measure performance, debug failures, and integrate with observability platforms. - -See xref:ai-agents:mcp/remote/monitor-activity.adoc[]. - -== Next steps - -* xref:ai-agents:mcp/remote/best-practices.adoc[Learn best practices] for building robust tools. -* xref:develop:connect/configuration/secret-management.adoc[Manage secrets] that MCP server tools use. -* xref:billing:billing.adoc#remote-mcp-billing-metrics[Review MCP billing] to optimize costs. diff --git a/modules/ai-agents/pages/mcp/remote/concepts.adoc b/modules/ai-agents/pages/mcp/remote/concepts.adoc index 16e78912c..678b919dd 100644 --- a/modules/ai-agents/pages/mcp/remote/concepts.adoc +++ b/modules/ai-agents/pages/mcp/remote/concepts.adoc @@ -23,141 +23,23 @@ include::redpanda-connect:ai-agents:partial$mcp/concepts/component-mapping.adoc[ // Execution model - single-sourced from partial include::redpanda-connect:ai-agents:partial$mcp/concepts/execution-model.adoc[] +MCP tools use an agent-initiated execution model where agents invoke tools on-demand. Redpanda also supports pipeline-initiated integration where pipelines call agents using the `a2a_message` processor. For guidance on choosing between these patterns, see xref:ai-agents:agents/integration-overview.adoc[]. + [[component-selection]] == Choose the right component type // Component selection guide - single-sourced from partial include::redpanda-connect:ai-agents:partial$mcp/concepts/component-selection.adoc[] -[[execution-log]] -== Execution log and observability - -Every MCP server automatically emits OpenTelemetry traces to a topic called `redpanda.otel_traces`. These traces provide detailed observability into your MCP server's operations, creating a complete execution log. - -=== Traces and spans - -OpenTelemetry traces provide a complete picture of how a request flows through your system: - -* A _trace_ represents the entire lifecycle of a request (for example, a tool invocation from start to finish). -* A _span_ represents a single unit of work within that trace (such as a data processing operation or an external API call). -* A trace contains one or more spans organized hierarchically, showing how operations relate to each other. - -With 100% sampling, every operation is captured, creating a complete execution log that you can use for debugging, monitoring, and performance analysis. - -=== How Redpanda stores traces - -The `redpanda.otel_traces` topic stores OpenTelemetry spans in JSON format, following the https://opentelemetry.io/docs/specs/otel/protocol/[OpenTelemetry Protocol (OTLP)^] specification. A Protobuf schema named `redpanda.otel_traces-value` is also automatically registered with the topic, enabling clients to deserialize trace data correctly. - -The `redpanda.otel_traces` topic and its schema are managed automatically by Redpanda. If you delete either the topic or the schema, they are recreated automatically. However, deleting the topic permanently deletes all trace data, and the topic comes back empty. Do not produce your own data to this topic. It is reserved for OpenTelemetry traces. - -Each span in the execution log represents a specific operation performed by your MCP server, such as: - -* Tool invocation requests -* Data processing operations -* External API calls -* Error conditions -* Performance metrics - -=== Topic configuration and lifecycle - -The `redpanda.otel_traces` topic has a predefined retention policy. Configuration changes to this topic are not supported. If you modify settings, Redpanda reverts them to the default values. - -The topic persists in your cluster even after all MCP servers are deleted, allowing you to retain historical trace data for analysis. - -Trace data may contain sensitive information from your tool inputs and outputs. Consider implementing appropriate glossterm:ACL[,access control lists (ACLs)] for the `redpanda.otel_traces` topic, and review the data in traces before sharing or exporting to external systems. - -=== Understand the trace structure - -Each span captures a unit of work. Here's what a typical MCP tool invocation looks like: - -[,json] ----- -{ - "traceId": "71cad555b35602fbb35f035d6114db54", - "spanId": "43ad6bc31a826afd", - "name": "http_processor", - "attributes": [ - {"key": "city_name", "value": {"stringValue": "london"}}, - {"key": "result_length", "value": {"intValue": "198"}} - ], - "startTimeUnixNano": "1765198415253280028", - "endTimeUnixNano": "1765198424660663434", - "instrumentationScope": {"name": "rpcn-mcp"}, - "status": {"code": 0, "message": ""} -} ----- - -Key elements to understand: - -* **`traceId`**: Links all spans belonging to the same request. Use this to follow a tool invocation through its entire lifecycle. -* **`name`**: The tool name (`http_processor` in this example). This tells you which tool was invoked. -* **`instrumentationScope.name`**: When this is `rpcn-mcp`, the span represents an MCP tool. When it's `redpanda-connect`, it's internal processing. -* **`attributes`**: Context about the operation, like input parameters or result metadata. -* **`status.code`**: `0` means success, `2` means error. - -=== Parent-child relationships - -Traces show how operations relate. A tool invocation (parent) may trigger internal operations (children): - -[,json] ----- -{ - "traceId": "71cad555b35602fbb35f035d6114db54", - "spanId": "ed45544a7d7b08d4", - "parentSpanId": "43ad6bc31a826afd", - "name": "http", - "instrumentationScope": {"name": "redpanda-connect"}, - "status": {"code": 0, "message": ""} -} ----- - -The `parentSpanId` links this child span to the parent tool invocation. Both share the same `traceId`, so you can reconstruct the complete operation. - -=== Error events in traces - -When something goes wrong, traces capture error details: - -[,json] ----- -{ - "traceId": "71cad555b35602fbb35f035d6114db54", - "spanId": "ba332199f3af6d7f", - "parentSpanId": "43ad6bc31a826afd", - "name": "http_request", - "events": [ - { - "name": "event", - "timeUnixNano": "1765198420254169629", - "attributes": [{"key": "error", "value": {"stringValue": "type"}}] - } - ], - "status": {"code": 0, "message": ""} -} ----- - -The `events` array captures what happened and when. Use `timeUnixNano` to see exactly when the error occurred within the operation. - -=== Traces compared to audit logs - -OpenTelemetry traces are designed for observability and debugging, not audit logging or compliance. - -Traces provide: - -* Hierarchical view of request flow through your system (parent-child span relationships) -* Detailed timing information for performance analysis -* Ability to reconstruct execution paths and identify bottlenecks -* Insights into how operations flow through distributed systems - -Traces are not: +== Observability -* Immutable audit records for compliance purposes -* Designed for "who did what" accountability tracking +MCP servers automatically emit OpenTelemetry traces for monitoring and debugging. For detailed information about traces, spans, and the trace structure, see xref:ai-agents:observability/concepts.adoc[]. -For monitoring tasks like consuming traces, debugging failures, and measuring performance, see xref:ai-agents:mcp/remote/monitor-activity.adoc[]. +To monitor MCP server activity, consume traces, and debug failures, see xref:ai-agents:observability/monitor-mcp-servers.adoc[]. == Next steps -* xref:ai-agents:mcp/remote/create-tool.adoc[] +* xref:ai-agents:mcp/remote/create-tool.adoc[]: Create MCP tools for your agents * xref:ai-agents:mcp/remote/best-practices.adoc[]: Apply naming and design guidelines * xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find reusable patterns * xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose common issues diff --git a/modules/ai-agents/pages/mcp/remote/create-tool.adoc b/modules/ai-agents/pages/mcp/remote/create-tool.adoc index 73a080526..579728b2d 100644 --- a/modules/ai-agents/pages/mcp/remote/create-tool.adoc +++ b/modules/ai-agents/pages/mcp/remote/create-tool.adoc @@ -33,7 +33,7 @@ Cloud Console:: -- . Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud Console^]. -. Navigate to *Remote MCP* and either create a new MCP server or edit an existing one. +. Navigate to *Agentic AI* > *Remote MCP* and either create a new MCP server or edit an existing one. . In the *Tools* section, click *Add Tool*. @@ -64,25 +64,7 @@ Here's an example using the xref:develop:connect/components/processors/sql_selec [source,yaml] ---- -label: lookup-customer # <1> - -sql_select: # <2> - driver: postgres - dsn: "${secrets.DATABASE_URL}" - table: customers - columns: ["id", "name", "email", "plan"] - where: id = ? - args_mapping: '[this.customer_id]' - -meta: # <3> - mcp: - enabled: true - description: "Look up a customer by ID and return their profile." - properties: - - name: customer_id - type: string - description: "The customer's unique identifier" - required: true +include::ai-agents:example$mcp-tools/processors/lookup_customer.yaml[tag=complete,indent=0] ---- <1> **Label**: Becomes the tool name. @@ -104,17 +86,7 @@ xref:develop:connect/components/processors/about.adoc[Processors] transform, fil .Processor tool [source,yaml] ---- -label: enrich-order - -processors: - - http: - url: "https://api.example.com/lookup" - verb: GET - -meta: - mcp: - enabled: true - description: "Enrich order with customer data" +include::ai-agents:example$mcp-tools/processors/enrich_order.yaml[tag=complete,indent=0] ---- xref:develop:connect/components/inputs/about.adoc[Inputs] read data from sources, xref:develop:connect/components/outputs/about.adoc[outputs] write data to destinations, and xref:develop:connect/components/caches/about.adoc[caches] store and retrieve data. Define these components directly at the top level: @@ -122,59 +94,20 @@ xref:develop:connect/components/inputs/about.adoc[Inputs] read data from sources .Input tool [source,yaml] ---- -label: read-events - -redpanda: # <1> - seed_brokers: ["${REDPANDA_BROKERS}"] - topics: ["events"] - consumer_group: "mcp-reader" - tls: - enabled: true - sasl: - - mechanism: SCRAM-SHA-256 - username: "${secrets.MCP_USERNAME}" - password: "${secrets.MCP_PASSWORD}" - -meta: - mcp: - enabled: true - description: "Read events from Redpanda" +include::ai-agents:example$mcp-tools/inputs/read_events.yaml[tag=complete,indent=0] ---- <1> The component name (`redpanda`) is at the top level, not wrapped in `input:`. .Output tool [source,yaml] ---- -label: publish-event - -redpanda: - seed_brokers: ["${REDPANDA_BROKERS}"] - topic: "processed-events" - tls: - enabled: true - sasl: - - mechanism: SCRAM-SHA-256 - username: "${secrets.MCP_USERNAME}" - password: "${secrets.MCP_PASSWORD}" - -meta: - mcp: - enabled: true - description: "Publish event to Redpanda" +include::ai-agents:example$mcp-tools/outputs/publish_event.yaml[tag=complete,indent=0] ---- .Cache tool [source,yaml] ---- -label: session-cache - -memory: - default_ttl: 300s - -meta: - mcp: - enabled: true - description: "In-memory cache for session data" +include::ai-agents:example$mcp-tools/caches/session_cache.yaml[tag=complete,indent=0] ---- Outputs can include a `processors:` section to transform data before publishing: @@ -182,27 +115,7 @@ Outputs can include a `processors:` section to transform data before publishing: .Output tool with processors [source,yaml] ---- -label: publish-with-timestamp - -processors: - - mutation: | - root = this - root.published_at = now() - -redpanda: - seed_brokers: ["${REDPANDA_BROKERS}"] - topic: "processed-events" - tls: - enabled: true - sasl: - - mechanism: SCRAM-SHA-256 - username: "${secrets.MCP_USERNAME}" - password: "${secrets.MCP_PASSWORD}" - -meta: - mcp: - enabled: true - description: "Add timestamp and publish to Redpanda" +include::ai-agents:example$mcp-tools/outputs/publish_with_timestamp.yaml[tag=complete,indent=0] ---- See xref:ai-agents:mcp/remote/tool-patterns.adoc#outputs-with-processors[outputs with processors] for more examples. @@ -216,6 +129,7 @@ The `meta.mcp` block defines how AI clients discover and interact with your tool include::redpanda-connect:ai-agents:partial$mcp/create-tool/mcp-metadata-fields-table.adoc[] +[#mcp-property-fields] ==== Property fields include::redpanda-connect:ai-agents:partial$mcp/create-tool/property-fields-table.adoc[] @@ -239,17 +153,12 @@ Use `this` to access message fields directly in processors like `mutation`, `map [source,yaml] ---- -mutation: | - root.search_query = this.query.lowercase() - root.max_results = this.limit.or(10) +include::ai-agents:example$mcp-tools/snippets/bloblang_this_context.yaml[tag=mutation,indent=0] ---- [source,yaml] ---- -sql_select: - table: orders - where: customer_id = ? AND status = ? - args_mapping: '[this.customer_id, this.status.or("active")]' +include::ai-agents:example$mcp-tools/snippets/bloblang_this_context.yaml[tag=args_mapping,indent=0] ---- === In string fields (interpolation) @@ -258,15 +167,12 @@ Use `${! ... }` interpolation to embed Bloblang expressions inside string values [source,yaml] ---- -http: - url: 'https://api.weather.com/v1/current?city=${! json("city") }&units=${! json("units").or("metric") }' +include::ai-agents:example$mcp-tools/snippets/interpolation.yaml[tag=http_url,indent=0] ---- [source,yaml] ---- -redpanda: - seed_brokers: ["${REDPANDA_BROKERS}"] # <1> - topic: '${! json("topic_name") }' # <2> +include::ai-agents:example$mcp-tools/snippets/interpolation.yaml[tag=redpanda_topic,indent=0] ---- <1> `$\{VAR}` without `!` is environment variable substitution, not Bloblang. <2> `${! ... }` with `!` is Bloblang interpolation that accesses message data. @@ -279,25 +185,14 @@ Use `.or(default)` to handle missing optional parameters: [source,yaml] ---- -mutation: | - root.city = this.city # Required - will error if missing - root.units = this.units.or("metric") # Optional with default - root.limit = this.limit.or(10).number() # Optional, converted to number +include::ai-agents:example$mcp-tools/snippets/defaults.yaml[tag=mutation,indent=0] ---- Declare which parameters are required in your `meta.mcp.properties`: [source,yaml] ---- -properties: - - name: city - type: string - description: "City name to look up" - required: true - - name: units - type: string - description: "Temperature units: 'metric' or 'imperial' (default: metric)" - required: false +include::ai-agents:example$mcp-tools/snippets/defaults.yaml[tag=properties,indent=0] ---- [[secrets]] @@ -309,15 +204,7 @@ Reference secrets using `${secrets.SECRET_NAME}` syntax: [source,yaml] ---- -http: - url: "https://api.example.com/data" - headers: - Authorization: "Bearer ${secrets.API_TOKEN}" - -sql_select: - driver: postgres - dsn: "${secrets.DATABASE_URL}" - table: customers +include::ai-agents:example$mcp-tools/snippets/secrets.yaml[tag=example,indent=0] ---- When you add secret references to your tool configuration, the Cloud Console automatically detects them and provides an interface to create the required secrets. @@ -361,63 +248,13 @@ Here's a complete tool that wraps the `http` processor to fetch weather data: [source,yaml] ---- -label: get-weather - -processors: - # Validate and sanitize input - - label: validate_city - mutation: | - root.city = if this.city.or("").trim() == "" { - throw("city is required") - } else { - this.city.trim().lowercase().re_replace_all("[^a-z\\s\\-]", "") - } - root.units = this.units.or("metric") - - # Fetch weather data - - label: fetch_weather - try: - - http: - url: 'https://wttr.in/${! json("city") }?format=j1' - verb: GET - timeout: 10s - - - mutation: | - root.weather = { - "location": this.nearest_area.0.areaName.0.value, - "country": this.nearest_area.0.country.0.value, - "temperature_c": this.current_condition.0.temp_C, - "temperature_f": this.current_condition.0.temp_F, - "condition": this.current_condition.0.weatherDesc.0.value, - "humidity": this.current_condition.0.humidity, - "wind_kph": this.current_condition.0.windspeedKmph - } - - # Handle errors gracefully - - label: handle_errors - catch: - - mutation: | - root.error = true - root.message = "Failed to fetch weather: " + error() - -meta: - mcp: - enabled: true - description: "Get current weather for a city. Returns temperature, conditions, humidity, and wind speed." - properties: - - name: city - type: string - description: "City name (e.g., 'London', 'New York', 'Tokyo')" - required: true - - name: units - type: string - description: "Temperature units: 'metric' or 'imperial' (default: metric)" - required: false +include::ai-agents:example$mcp-tools/processors/get_weather_complete.yaml[tag=complete,indent=0] ---- == Next steps -* xref:ai-agents:mcp/remote/best-practices.adoc[]: Apply naming and design guidelines. -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find patterns for databases, APIs, and Redpanda. -* xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose common issues. -* xref:develop:connect/components/about.adoc[]: Browse all available components. +* xref:ai-agents:agents/quickstart.adoc[]: Build an AI agent that uses your tools +* xref:ai-agents:mcp/remote/best-practices.adoc[]: Apply naming and design guidelines +* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find patterns for databases, APIs, and Redpanda +* xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose common issues +* xref:develop:connect/components/about.adoc[]: Browse all available components diff --git a/modules/ai-agents/pages/mcp/remote/manage-servers.adoc b/modules/ai-agents/pages/mcp/remote/manage-servers.adoc index d6cb056eb..92cbb9ba8 100644 --- a/modules/ai-agents/pages/mcp/remote/manage-servers.adoc +++ b/modules/ai-agents/pages/mcp/remote/manage-servers.adoc @@ -1,5 +1,6 @@ = Manage Remote MCP Servers :description: Learn how to edit, stop, start, and delete MCP servers in Redpanda Cloud. +:page-aliases: ai-agents:mcp/remote/admin-guide.adoc :page-topic-type: how-to :personas: platform_admin, ai_agent_developer // Reader journey: "I operate and maintain" @@ -29,7 +30,7 @@ You can update the configuration, resources, or metadata of an MCP server at any Cloud Console:: + -- -. In the Redpanda Cloud Console, navigate to *Remote MCP*. +. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. . Find the MCP server you want to edit and click its name. . Click *Edit configuration*. . Make your changes. @@ -72,7 +73,7 @@ Stopping a server pauses all tool execution and releases compute resources, but Cloud Console:: + -- -. In the Redpanda Cloud Console, navigate to *Remote MCP*. +. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. . Find the server you want to stop. . Click the three dots and select *Stop*. . Confirm the action. @@ -103,7 +104,7 @@ Resume a stopped server to restore its functionality. Cloud Console:: + -- -. In the Redpanda Cloud Console, navigate to *Remote MCP*. +. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. . Find the stopped server. . Click the three dots and select *Start*. . Wait for the status to show *Running* before reconnecting clients. @@ -134,7 +135,7 @@ Deleting a server permanently removes it. You cannot undo this action. Redpanda Cloud Console:: + -- -. In the Redpanda Cloud Console, navigate to *Remote MCP*. +. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. . Find the server you want to delete. . Click the three dots and select *Delete*. . Confirm the deletion when prompted. @@ -162,5 +163,5 @@ Deletion is immediate and permanent. Make sure you have backed up any important == Next steps * xref:ai-agents:mcp/remote/scale-resources.adoc[Scale MCP server resources] to optimize performance and costs. -* xref:ai-agents:mcp/remote/monitor-activity.adoc[Monitor MCP server activity] using OpenTelemetry traces. +* xref:ai-agents:observability/monitor-mcp-servers.adoc[Monitor MCP server activity] using OpenTelemetry traces. * xref:ai-agents:mcp/remote/best-practices.adoc[Learn best practices] for building robust tools. diff --git a/modules/ai-agents/pages/mcp/remote/overview.adoc b/modules/ai-agents/pages/mcp/remote/overview.adoc index bc3d11845..05b563861 100644 --- a/modules/ai-agents/pages/mcp/remote/overview.adoc +++ b/modules/ai-agents/pages/mcp/remote/overview.adoc @@ -40,11 +40,11 @@ include::redpanda-connect:ai-agents:partial$mcp/overview/use-cases-table.adoc[] Remote MCP servers sit between AI clients and your data: -. Your AI agent connects to your MCP server using `rpk cloud mcp proxy` or direct authentication +. Your AI agent connects to your MCP server using `rpk cloud mcp proxy` or direct authentication. . A user asks their AI agent something like "What's the weather in London?" -. The server finds the matching tool and runs your Redpanda Connect configuration -. Your configuration fetches data, transforms it, and returns a structured response -. The AI agent gets the data and can use it to answer the user +. The server finds the matching tool and runs your Redpanda Connect configuration. +. Your configuration fetches data, transforms it, and returns a structured response. +. The AI agent gets the data and can use it to answer the user. === What a tool looks like @@ -54,20 +54,7 @@ Here's a minimal example that returns weather data: [source,yaml] ---- -http: - url: "https://wttr.in/${! this.city }?format=j1" - verb: GET - -meta: - mcp: - enabled: true - name: get_weather - description: "Get current weather for a city" - properties: - - name: city - type: string - description: "City name" - required: true +include::ai-agents:example$mcp-tools/processors/get_weather_simple.yaml[tag=complete,indent=0] ---- When an AI client asks about weather, it calls this tool with the city name. The tool fetches data from the weather API and returns it. @@ -78,6 +65,7 @@ include::redpanda-connect:ai-agents:partial$mcp/overview/specification-support.a == Next steps * xref:ai-agents:mcp/remote/quickstart.adoc[] +* xref:ai-agents:agents/overview.adoc[]: Learn about Redpanda AI Agents that use MCP tools * xref:ai-agents:mcp/remote/concepts.adoc[]: Learn about execution and component types * xref:ai-agents:mcp/remote/create-tool.adoc[]: Create custom tools step by step * link:https://modelcontextprotocol.io/[Model Context Protocol documentation^] diff --git a/modules/ai-agents/pages/mcp/remote/quickstart.adoc b/modules/ai-agents/pages/mcp/remote/quickstart.adoc index a778df103..09815fd0b 100644 --- a/modules/ai-agents/pages/mcp/remote/quickstart.adoc +++ b/modules/ai-agents/pages/mcp/remote/quickstart.adoc @@ -181,7 +181,7 @@ Cloud Console:: -- . Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud Console^]. -. Navigate to *Remote MCP*. +. Navigate to *Agentic AI* > *Remote MCP*. + This page shows a list of existing servers. @@ -304,10 +304,10 @@ Now that your MCP server is running with two tools available, you'll connect Cla When you connect Claude Code: -. Claude automatically discovers your `generate_input` and `redpanda_output` tools -. You can ask Claude in natural language to perform tasks using these tools -. Claude decides which tools to call and in what order based on your request -. The Redpanda CLI acts as a secure proxy, forwarding Claude's tool requests to your MCP server in the cloud +. Claude automatically discovers your `generate_input` and `redpanda_output` tools. +. You can ask Claude in natural language to perform tasks using these tools. +. Claude decides which tools to call and in what order based on your request. +. The Redpanda CLI acts as a secure proxy, forwarding Claude's tool requests to your MCP server in the cloud. This example uses Claude Code, but the same pattern works with any MCP-compatible client. @@ -389,6 +389,7 @@ For detailed solutions, see xref:ai-agents:mcp/remote/troubleshooting.adoc[]. You've deployed an MCP server and connected Claude Code to your Redpanda cluster. Here's where to go next: +* xref:ai-agents:agents/quickstart.adoc[]: Build and deploy an AI agent that uses your MCP tools * xref:ai-agents:mcp/remote/concepts.adoc[]: Understand how MCP tools differ from pipelines * xref:ai-agents:mcp/remote/create-tool.adoc[]: Build production-quality tools with validation * xref:ai-agents:mcp/remote/best-practices.adoc[]: Apply naming and design guidelines diff --git a/modules/ai-agents/pages/mcp/remote/scale-resources.adoc b/modules/ai-agents/pages/mcp/remote/scale-resources.adoc index f6bb7c375..3c4d948b7 100644 --- a/modules/ai-agents/pages/mcp/remote/scale-resources.adoc +++ b/modules/ai-agents/pages/mcp/remote/scale-resources.adoc @@ -27,7 +27,7 @@ You must have an existing MCP server. If you do not have one, see xref:ai-agents Cloud Console:: + -- -. In the Redpanda Cloud Console, navigate to *Remote MCP*. +. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. . Find the MCP server you want to scale and click its name. . Click *Edit configuration*. . Under *Resources*, select a new size: diff --git a/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc b/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc index 1348419f1..3d01e1d70 100644 --- a/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc +++ b/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc @@ -16,8 +16,6 @@ After reading this page, you will be able to: * [ ] {learning-objective-2} * [ ] {learning-objective-3} - - [[read-data]] == Read data @@ -32,7 +30,7 @@ Use xref:develop:connect/components/inputs/about.adoc[inputs] to create tools th [source,yaml] ---- -include::ai-agents:example$generate_input.yaml[] +include::ai-agents:example$mcp-tools/inputs/generate_input.yaml[] ---- See also: xref:develop:connect/components/inputs/generate.adoc[`generate` input component] @@ -46,17 +44,7 @@ See also: xref:develop:connect/components/inputs/generate.adoc[`generate` input [source,yaml] ---- -redpanda: - seed_brokers: [ "${REDPANDA_BROKERS}" ] - topics: [ "user-events" ] - consumer_group: "mcp-event-processor" - start_from_oldest: true - tls: - enabled: true - sasl: - - mechanism: "${REDPANDA_SASL_MECHANISM}" - username: "${REDPANDA_SASL_USERNAME}" - password: "${REDPANDA_SASL_PASSWORD}" +include::ai-agents:example$mcp-tools/inputs/consume_redpanda.yaml[tag=component,indent=0] ---- See also: xref:develop:connect/components/inputs/redpanda.adoc[`redpanda` input] @@ -70,23 +58,7 @@ See also: xref:develop:connect/components/inputs/redpanda.adoc[`redpanda` input] [source,yaml] ---- -redpanda: - seed_brokers: [ "${REDPANDA_BROKERS}" ] - topics: [ "sensor-readings" ] - consumer_group: "analytics-processor" - tls: - enabled: true - sasl: - - mechanism: "${REDPANDA_SASL_MECHANISM}" - username: "${REDPANDA_SASL_USERNAME}" - password: "${REDPANDA_SASL_PASSWORD}" - processors: - - mapping: | - root.sensor_id = this.sensor_id - root.avg_temperature = this.readings.map_each(r -> r.temperature).mean() - root.max_temperature = this.readings.map_each(r -> r.temperature).max() - root.reading_count = this.readings.length() - root.window_end = now() +include::ai-agents:example$mcp-tools/inputs/stream_processing.yaml[tag=component,indent=0] ---- See also: xref:develop:connect/components/inputs/redpanda.adoc[`redpanda` input] @@ -105,7 +77,7 @@ Use xref:develop:connect/components/processors/about.adoc[processors] to fetch d [source,yaml] ---- -include::ai-agents:example$http_processor.yaml[] +include::ai-agents:example$mcp-tools/processors/http_processor.yaml[] ---- See also: xref:develop:connect/components/processors/http.adoc[`http` processor], xref:develop:connect/components/processors/mutation.adoc[`mutation` processor] @@ -119,11 +91,27 @@ See also: xref:develop:connect/components/processors/http.adoc[`http` processor] [source,yaml] ---- -include::ai-agents:example$gcp_bigquery_select_processor.yaml[] +include::ai-agents:example$mcp-tools/processors/gcp_bigquery_select_processor.yaml[] ---- See also: xref:develop:connect/components/processors/gcp_bigquery_select.adoc[`gcp_bigquery_select` processor], xref:develop:connect/components/processors/sql_select.adoc[`sql_select` processor] +[[jira-queries]] +=== Query Jira issues + +*When to use:* Fetching tickets by status, checking assignments, finding recent issues, or building AI agents that interact with project management data. + +*Example use cases:* Get open bugs for a sprint, find issues assigned to a user, list recently updated tickets, search by custom fields. + +NOTE: The `jira` processor is available on Dedicated and BYOC clusters. + +[source,yaml] +---- +include::ai-agents:example$mcp-tools/processors/search_jira.yaml[tag=complete,indent=0] +---- + +For more patterns including pagination, custom fields, and creating issues via the HTTP processor, see xref:develop:connect/cookbooks/jira.adoc[]. + [[ai-llm-integration]] === Integrate with AI/LLM services @@ -135,17 +123,7 @@ See also: xref:develop:connect/components/processors/gcp_bigquery_select.adoc[`g [source,yaml] ---- -openai_chat_completion: - api_key: "${secrets.OPENAI_API_KEY}" - model: "gpt-4" - prompt: | - Analyze this customer feedback and provide: - 1. Sentiment (positive/negative/neutral) - 2. Key themes - 3. Actionable insights - - Feedback: ${! json("feedback_text") } - max_tokens: 500 +include::ai-agents:example$mcp-tools/processors/openai_chat.yaml[tag=component,indent=0] ---- See also: xref:develop:connect/components/processors/openai_chat_completion.adoc[`openai_chat_completion`], xref:develop:connect/components/processors/openai_embeddings.adoc[`openai_embeddings`] @@ -154,10 +132,7 @@ See also: xref:develop:connect/components/processors/openai_chat_completion.adoc [source,yaml] ---- -openai_embeddings: - api_key: "${secrets.OPENAI_API_KEY}" - model: "text-embedding-3-small" - text: ${! json("content") } +include::ai-agents:example$mcp-tools/processors/openai_embeddings.yaml[tag=component,indent=0] ---- See also: xref:develop:connect/components/processors/cohere_embeddings.adoc[`cohere_embeddings`], xref:develop:connect/components/processors/gcp_vertex_ai_embeddings.adoc[`gcp_vertex_ai_embeddings`] @@ -176,7 +151,7 @@ Use xref:develop:connect/components/outputs/about.adoc[outputs] to write data to [source,yaml] ---- -include::ai-agents:example$redpanda_output.yaml[] +include::ai-agents:example$mcp-tools/outputs/redpanda_output.yaml[] ---- See also: xref:develop:connect/components/outputs/redpanda.adoc[`redpanda` output] @@ -189,7 +164,7 @@ Output tools can include processors to transform data before publishing. This pa [source,yaml] ---- -include::ai-agents:example$redpanda_output_with_processors.yaml[] +include::ai-agents:example$mcp-tools/outputs/redpanda_output_with_processors.yaml[] ---- [[caching]] @@ -202,13 +177,13 @@ include::ai-agents:example$redpanda_output_with_processors.yaml[] .Redpanda-backed cache [source,yaml] ---- -include::ai-agents:example$redpanda_cache.yaml[] +include::ai-agents:example$mcp-tools/caches/redpanda_cache.yaml[] ---- .In-memory cache [source,yaml] ---- -include::ai-agents:example$memory_cache.yaml[] +include::ai-agents:example$mcp-tools/caches/memory_cache.yaml[] ---- See also: xref:develop:connect/components/caches/memory.adoc[`memory` cache], xref:develop:connect/components/outputs/redpanda.adoc[`redpanda` output] @@ -227,17 +202,7 @@ Use Bloblang and processors to transform, validate, and route data. [source,yaml] ---- -mapping: | - # Parse and validate incoming data - root.user_id = this.user_id.or(throw("user_id is required")) - root.timestamp = now().ts_format("2006-01-02T15:04:05Z07:00") - - # Transform and enrich - root.email_domain = this.email.split("@").index(1) - root.is_premium = this.subscription_tier == "premium" - - # Filter sensitive data - root.profile = this.profile.without("ssn", "credit_card") +include::ai-agents:example$mcp-tools/processors/transform_validate.yaml[tag=mapping,indent=0] ---- See also: xref:develop:connect/components/processors/mapping.adoc[`mapping` processor], xref:develop:connect/guides/bloblang/about.adoc[Bloblang guide] @@ -251,30 +216,7 @@ See also: xref:develop:connect/components/processors/mapping.adoc[`mapping` proc [source,yaml] ---- -redpanda: - seed_brokers: [ "${REDPANDA_BROKERS}" ] - topics: [ "order-events" ] - consumer_group: "workflow-orchestrator" - tls: - enabled: true - sasl: - - mechanism: "${REDPANDA_SASL_MECHANISM}" - username: "${REDPANDA_SASL_USERNAME}" - password: "${REDPANDA_SASL_PASSWORD}" - processors: - - switch: - - check: this.event_type == "order_created" - processors: - - http: - url: "${secrets.INVENTORY_API}/reserve" - verb: POST - body: '{"order_id": "${! this.order_id }", "items": ${! json("items") }}' - - check: this.event_type == "payment_confirmed" - processors: - - http: - url: "${secrets.FULFILLMENT_API}/ship" - verb: POST - body: '{"order_id": "${! this.order_id }"}' +include::ai-agents:example$mcp-tools/inputs/event_driven_workflow.yaml[tag=component,indent=0] ---- See also: xref:develop:connect/components/inputs/redpanda.adoc[`redpanda` input] @@ -310,6 +252,7 @@ include::redpanda-connect:ai-agents:partial$mcp/tool-patterns/production-workflo == Next steps +* xref:ai-agents:agents/integration-overview.adoc[]: Choose between agents invoking MCP tools and pipelines calling agents * xref:ai-agents:mcp/remote/create-tool.adoc[]: Step-by-step tool creation guide * xref:ai-agents:mcp/remote/best-practices.adoc[]: Apply naming and design guidelines * xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose and fix common issues diff --git a/modules/ai-agents/pages/observability/concepts.adoc b/modules/ai-agents/pages/observability/concepts.adoc new file mode 100644 index 000000000..461d8da86 --- /dev/null +++ b/modules/ai-agents/pages/observability/concepts.adoc @@ -0,0 +1,147 @@ += Transcripts and AI Observability +:description: Understand how Redpanda captures execution traces for agents and MCP servers using OpenTelemetry. +:page-topic-type: concepts +:personas: ai_agent_developer, platform_admin, data_engineer +:learning-objective-1: Explain how traces and spans capture execution flow +:learning-objective-2: Interpret trace structure for debugging and monitoring +:learning-objective-3: Distinguish between observability traces and audit logs + +Redpanda automatically captures execution traces for both AI agents and MCP servers, providing complete observability into how your agentic systems operate. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== What are transcripts + +Every agent and MCP server automatically emits OpenTelemetry traces to a topic called `redpanda.otel_traces`. These traces provide detailed observability into operations, creating complete transcripts. + +Transcripts capture: + +* Tool invocations and results +* Agent reasoning steps +* Data processing operations +* External API calls +* Error conditions +* Performance metrics + +With 100% sampling, every operation is captured, creating complete transcripts that you can use for debugging, monitoring, and performance analysis. + +== Traces and spans + +OpenTelemetry traces provide a complete picture of how a request flows through your system: + +* A _trace_ represents the entire lifecycle of a request (for example, a tool invocation from start to finish). +* A _span_ represents a single unit of work within that trace (such as a data processing operation or an external API call). +* A trace contains one or more spans organized hierarchically, showing how operations relate to each other. + +[[opentelemetry-traces-topic]] +== How Redpanda stores traces + +The `redpanda.otel_traces` topic stores OpenTelemetry spans in JSON format, following the https://opentelemetry.io/docs/specs/otel/protocol/[OpenTelemetry Protocol (OTLP)^] specification. A Protobuf schema named `redpanda.otel_traces-value` is also automatically registered with the topic, enabling clients to deserialize trace data correctly. + +The `redpanda.otel_traces` topic and its schema are managed automatically by Redpanda. If you delete either the topic or the schema, they are recreated automatically. However, deleting the topic permanently deletes all trace data, and the topic comes back empty. Do not produce your own data to this topic. It is reserved for OpenTelemetry traces. + +=== Topic configuration and lifecycle + +The `redpanda.otel_traces` topic has a predefined retention policy. Configuration changes to this topic are not supported. If you modify settings, Redpanda reverts them to the default values. + +The topic persists in your cluster even after all agents and MCP servers are deleted, allowing you to retain historical trace data for analysis. + +Trace data may contain sensitive information from your tool inputs and outputs. Consider implementing appropriate glossterm:ACL[,access control lists (ACLs)] for the `redpanda.otel_traces` topic, and review the data in traces before sharing or exporting to external systems. + +== Understand the trace structure + +Each span captures a unit of work. Here's what a typical MCP tool invocation looks like: + +[,json] +---- +{ + "traceId": "71cad555b35602fbb35f035d6114db54", + "spanId": "43ad6bc31a826afd", + "name": "http_processor", + "attributes": [ + {"key": "city_name", "value": {"stringValue": "london"}}, + {"key": "result_length", "value": {"intValue": "198"}} + ], + "startTimeUnixNano": "1765198415253280028", + "endTimeUnixNano": "1765198424660663434", + "instrumentationScope": {"name": "rpcn-mcp"}, + "status": {"code": 0, "message": ""} +} +---- + +Key elements to understand: + +* **`traceId`**: Links all spans belonging to the same request. Use this to follow a tool invocation through its entire lifecycle. +* **`name`**: The tool or operation name (`http_processor` in this example). This tells you which component was invoked. +* **`instrumentationScope.name`**: When this is `rpcn-mcp`, the span represents an MCP tool. When it's `redpanda-connect`, it's internal processing. +* **`attributes`**: Context about the operation, like input parameters or result metadata. +* **`status.code`**: `0` means success, `2` means error. + +== Parent-child relationships + +Traces show how operations relate. A tool invocation (parent) may trigger internal operations (children): + +[,json] +---- +{ + "traceId": "71cad555b35602fbb35f035d6114db54", + "spanId": "ed45544a7d7b08d4", + "parentSpanId": "43ad6bc31a826afd", + "name": "http", + "instrumentationScope": {"name": "redpanda-connect"}, + "status": {"code": 0, "message": ""} +} +---- + +The `parentSpanId` links this child span to the parent tool invocation. Both share the same `traceId`, so you can reconstruct the complete operation. + +== Error events in traces + +When something goes wrong, traces capture error details: + +[,json] +---- +{ + "traceId": "71cad555b35602fbb35f035d6114db54", + "spanId": "ba332199f3af6d7f", + "parentSpanId": "43ad6bc31a826afd", + "name": "http_request", + "events": [ + { + "name": "event", + "timeUnixNano": "1765198420254169629", + "attributes": [{"key": "error", "value": {"stringValue": "type"}}] + } + ], + "status": {"code": 0, "message": ""} +} +---- + +The `events` array captures what happened and when. Use `timeUnixNano` to see exactly when the error occurred within the operation. + +== Traces compared to audit logs + +OpenTelemetry traces are designed for observability and debugging, not audit logging or compliance. + +Traces provide: + +* Hierarchical view of request flow through your system (parent-child span relationships) +* Detailed timing information for performance analysis +* Ability to reconstruct execution paths and identify bottlenecks +* Insights into how operations flow through distributed systems + +Traces are not: + +* Immutable audit records for compliance purposes +* Designed for "who did what" accountability tracking + +For compliance and audit requirements, use the session and task topics for agents, which provide records of agent conversations and execution. + +== Next steps + +* xref:ai-agents:observability/monitor-agents.adoc[]: Monitor agent execution and performance +* xref:ai-agents:observability/monitor-mcp-servers.adoc[]: Monitor MCP server activity diff --git a/modules/ai-agents/pages/observability/index.adoc b/modules/ai-agents/pages/observability/index.adoc new file mode 100644 index 000000000..e9d504341 --- /dev/null +++ b/modules/ai-agents/pages/observability/index.adoc @@ -0,0 +1,5 @@ += AI Observability +:page-layout: index +:description: Monitor and debug AI agents and MCP servers using OpenTelemetry traces, execution transcripts, and agent data topics. + +Monitor your AI agents and MCP servers with built-in observability tools that capture execution traces, conversation history, and performance metrics. diff --git a/modules/ai-agents/pages/observability/monitor-agents.adoc b/modules/ai-agents/pages/observability/monitor-agents.adoc new file mode 100644 index 000000000..fe6a36f43 --- /dev/null +++ b/modules/ai-agents/pages/observability/monitor-agents.adoc @@ -0,0 +1,176 @@ += Monitor Agent Activity +:description: Monitor agent execution, analyze conversation history, track token usage, and debug issues using Inspector, Transcripts, and agent data topics. +:page-topic-type: how-to +:personas: ai_agent_developer, platform_admin +:learning-objective-1: Test agents interactively using the Inspector tab +:learning-objective-2: Consume session and task topics for analysis +:learning-objective-3: Debug agent behavior using Transcripts + +Monitor your agents to track performance, analyze conversations, debug issues, and optimize costs. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +For conceptual background on traces and observability, see xref:ai-agents:observability/concepts.adoc[]. + +== Prerequisites + +You must have a running agent. If you do not have one, see xref:ai-agents:agents/quickstart.adoc[]. + +== Test agents interactively + +The *Inspector* tab provides real-time conversation testing and debugging. Use it to test agent responses interactively, view full conversation history, see tool invocations and results, monitor token usage per request, and test error scenarios. + +=== Access the Inspector + +. Navigate to *Agentic AI* > *AI Agents* in the Redpanda Cloud Console. +. Click your agent name. +. Open the *Inspector* tab. +. Enter test queries and review responses. +. Check the conversation panel to see tool calls. +. Start a new session to test fresh conversations. + +=== Testing best practices + +Test your agents systematically with these scenarios: + +* **Boundary cases**: Test requests at the edge of agent capabilities to verify scope enforcement. +* **Error handling**: Request unavailable data to verify graceful degradation. +* **Iteration count**: Monitor how many iterations complex requests require. +* **Ambiguous input**: Send vague queries to verify clarification behavior. +* **Token usage**: Track tokens per request to estimate costs. + +== View execution traces + +The *Transcripts* view shows agent execution traces with detailed timing and error information. Transcripts capture agent startup and initialization, request and response flow, tool invocations and results, error messages and failures, token usage per request, and OpenTelemetry trace data. + +=== Access Transcripts + +. Navigate to *Agentic AI* > *AI Agents*. +. Click your agent name. +. Click *Transcripts* in the left navigation. +. Select a transcript to view execution details. + +Use Transcripts when diagnosing deployment issues (agent won't start), debugging tool execution errors, investigating unexpected agent behavior, analyzing conversation flow, or verifying tool selection logic. + +== Consume agent data topics + +Agents emit structured data to two Redpanda topics for monitoring and analysis. + +=== Sessions topic + +The sessions topic (`redpanda.aiagent..sessions`) contains all conversation messages. This topic lets you review past conversations, analyze conversation patterns, debug multi-turn interactions, and understand context management. + +=== Tasks topic + +The tasks topic (`redpanda.aiagent..tasks`) contains task execution records with status and artifacts. Use this topic to monitor task completion rates, track token usage and costs, debug failed tasks, and analyze agent performance. + +=== Access agent topics + +[tabs] +===== +Cloud Console:: ++ +-- +. Navigate to *Topics* in the Redpanda Cloud Console. +. Find `redpanda.aiagent..sessions` or `redpanda.aiagent..tasks`. +. Click *Messages* to view recent data. +. Use filters to search for specific sessions or task states. +-- + +rpk:: ++ +-- +Consume recent sessions: + +[,bash] +---- +rpk topic consume redpanda.aiagent..sessions --offset end -n 10 +---- + +Consume recent tasks: + +[,bash] +---- +rpk topic consume redpanda.aiagent..tasks --offset end -n 10 +---- +-- + +Data Plane API:: ++ +-- +Use the link:/api/doc/cloud-dataplane/[Data Plane API] to programmatically consume agent data and integrate with your monitoring pipeline. +-- +===== + +For schema details, see xref:ai-agents:agents/concepts.adoc#agent-data-topics[Agent data topics]. + +== Analyze conversation history + +Use conversation history to identify behavior patterns and diagnose issues. When analyzing conversations, watch for agents calling the same tool repeatedly (indicates loop detection is needed), large gaps between messages (suggests tool timeout or slow execution), agent responses without tool calls (indicates a tool selection issue), fabricated information (suggests a missing "never make up data" constraint), and truncated early messages (indicates the context window was exceeded). + +=== Analysis workflow + +. Use Inspector to reproduce the issue. +. Review full conversation including tool invocations. +. Identify where agent behavior diverged from expected. +. Check system prompt for missing guidance. +. Verify tool responses are formatted correctly. + +== Track token usage + +Monitor token consumption to optimize costs and set appropriate iteration limits. Token usage appears in three places: the *Inspector* tab shows tokens per request during interactive testing, the *Tasks* topic contains `usage` metadata with input/output/total tokens, and *Transcripts* displays token counts for each execution. + +=== Calculate costs + +Use token data from the tasks topic to estimate costs: + +[,bash] +---- +Cost per request = (total_tokens × model_price_per_token) +---- + +Track costs over time by consuming the tasks topic, extracting `metadata.usage.total_tokens` from each task, multiplying by your model's token price, and aggregating by time period. + +For cost optimization strategies, see xref:ai-agents:agents/concepts.adoc#cost-calculation[Cost calculation]. + +== Monitor performance + +Track agent performance metrics to identify bottlenecks. The table below shows key metrics you can extract from agent data topics: + +[cols="2,3", options="header"] +|=== +| Metric | Description + +| Task completion rate +| Percentage of tasks with `TASK_STATE_COMPLETED` + +| Average iterations +| Mean iterations per task from conversation history + +| Token efficiency +| Tokens consumed per successful task completion + +| Tool invocation frequency +| Which tools are called most often + +| Error rate +| Percentage of tasks with `TASK_STATE_FAILED` +|=== + +=== Performance analysis + +. Consume the tasks topic over a time window. +. Calculate completion rate: `completed_tasks / total_tasks`. +. Identify high iteration tasks for prompt optimization. +. Track token usage trends over time. +. Correlate errors with specific tool invocations. + +== Next steps + +* xref:ai-agents:observability/concepts.adoc[]: Understand trace structure and OpenTelemetry spans +* xref:ai-agents:agents/troubleshooting.adoc[]: Diagnose and fix common agent issues +* xref:ai-agents:agents/concepts.adoc[]: Learn about agent execution and cost calculation diff --git a/modules/ai-agents/pages/mcp/remote/monitor-activity.adoc b/modules/ai-agents/pages/observability/monitor-mcp-servers.adoc similarity index 86% rename from modules/ai-agents/pages/mcp/remote/monitor-activity.adoc rename to modules/ai-agents/pages/observability/monitor-mcp-servers.adoc index 600d70e19..75b0d4f4f 100644 --- a/modules/ai-agents/pages/mcp/remote/monitor-activity.adoc +++ b/modules/ai-agents/pages/observability/monitor-mcp-servers.adoc @@ -1,14 +1,12 @@ = Monitor MCP Server Activity -:description: How to consume traces, track tool invocations, measure performance, and debug failures in MCP servers. +:description: Consume traces, track tool invocations, measure performance, and debug failures in MCP servers. :page-topic-type: how-to :personas: platform_admin, ai_agent_developer, data_engineer -// Reader journey: "I need to accomplish X" -// Learning objectives - what readers can DO with this guide: -:learning-objective-1: Consume traces from the execution log +:learning-objective-1: Consume traces from the redpanda.otel_traces topic :learning-objective-2: Track tool invocations and measure performance :learning-objective-3: Debug tool failures using trace data -After creating an MCP server, you can monitor its activity using the execution log. +Monitor MCP server activity using OpenTelemetry traces emitted to the `redpanda.otel_traces` topic. After reading this page, you will be able to: @@ -16,13 +14,13 @@ After reading this page, you will be able to: * [ ] {learning-objective-2} * [ ] {learning-objective-3} -For conceptual background on traces, spans, and the trace data structure, see xref:ai-agents:mcp/remote/concepts.adoc#execution-log[Execution log and observability]. +For conceptual background on traces, spans, and the trace data structure, see xref:ai-agents:observability/concepts.adoc[]. == Prerequisites You must have an existing MCP server. If you do not have one, see xref:ai-agents:mcp/remote/quickstart.adoc[]. -== Consume traces from the execution log +== Consume traces MCP servers emit OpenTelemetry traces to the `redpanda.otel_traces` topic. You can consume these traces using any Kafka-compatible client or the Redpanda Cloud Console. @@ -108,6 +106,6 @@ You can consume traces directly from the `redpanda.otel_traces` topic using any == Next steps -* xref:ai-agents:mcp/remote/concepts.adoc#execution-log[Execution logs]: Learn how traces and spans work +* xref:ai-agents:observability/concepts.adoc[]: Learn how traces and spans work * xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose and fix common issues * xref:ai-agents:mcp/remote/manage-servers.adoc[]: Manage MCP server lifecycle diff --git a/modules/billing/pages/billing.adoc b/modules/billing/pages/billing.adoc index f51b7b39d..cf6f32e72 100644 --- a/modules/billing/pages/billing.adoc +++ b/modules/billing/pages/billing.adoc @@ -140,7 +140,7 @@ Pricing per MCP server depends on the compute units you allocate. The cost of a NOTE: Compute units for Remote MCP use the same definition and rates as those for Redpanda Connect. -MCP servers automatically emit OpenTelemetry traces to the xref:ai-agents:mcp/remote/monitor-activity.adoc#opentelemetry-traces-topic[`redpanda.otel_traces` topic]. For Serverless clusters, usage of this system-managed traces topic is not billed. You will not incur ingress, egress, storage, or partition charges for trace data. For Dedicated and BYOC clusters, standard billing metrics apply to the traces topic. +MCP servers automatically emit OpenTelemetry traces to the xref:ai-agents:observability/concepts.adoc#opentelemetry-traces-topic[`redpanda.otel_traces` topic]. For Serverless clusters, usage of this system-managed traces topic is not billed. You will not incur ingress, egress, storage, or partition charges for trace data. For Dedicated and BYOC clusters, standard billing metrics apply to the traces topic. == Support plans diff --git a/modules/develop/examples/cookbooks/jira/create-issue.yaml b/modules/develop/examples/cookbooks/jira/create-issue.yaml new file mode 100644 index 000000000..1ed695933 --- /dev/null +++ b/modules/develop/examples/cookbooks/jira/create-issue.yaml @@ -0,0 +1,28 @@ +# tag::config[] +input: + generate: + count: 1 + mapping: | + root.fields = { + "project": {"key": "MYPROJECT"}, + "summary": "Issue created from Redpanda Connect", + "description": { + "type": "doc", + "version": 1, + "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Created via API"}]}] + }, + "issuetype": {"name": "Task"} + } + +pipeline: + processors: + - http: + url: "${secrets.JIRA_BASE_URL}/rest/api/3/issue" + verb: POST + headers: + Content-Type: application/json + Authorization: "Basic ${secrets.JIRA_AUTH_TOKEN}" + +output: + stdout: {} +# end::config[] diff --git a/modules/develop/examples/cookbooks/jira/input-once.yaml b/modules/develop/examples/cookbooks/jira/input-once.yaml new file mode 100644 index 000000000..b8f13b5ca --- /dev/null +++ b/modules/develop/examples/cookbooks/jira/input-once.yaml @@ -0,0 +1,18 @@ +# tag::config[] +input: + generate: + count: 1 + mapping: | + root.jql = "project = MYPROJECT AND status = Open" + root.maxResults = 100 + +pipeline: + processors: + - jira: + base_url: "${secrets.JIRA_BASE_URL}" + username: "${secrets.JIRA_USERNAME}" + api_token: "${secrets.JIRA_API_TOKEN}" + +output: + stdout: {} +# end::config[] diff --git a/modules/develop/examples/cookbooks/jira/input-periodic.yaml b/modules/develop/examples/cookbooks/jira/input-periodic.yaml new file mode 100644 index 000000000..991a40b0d --- /dev/null +++ b/modules/develop/examples/cookbooks/jira/input-periodic.yaml @@ -0,0 +1,19 @@ +# tag::config[] +input: + generate: + interval: 30s + mapping: | + root.jql = "project = MYPROJECT AND updated >= -1h ORDER BY updated DESC" + root.maxResults = 50 + root.fields = ["key", "summary", "status", "assignee", "priority"] + +pipeline: + processors: + - jira: + base_url: "${secrets.JIRA_BASE_URL}" + username: "${secrets.JIRA_USERNAME}" + api_token: "${secrets.JIRA_API_TOKEN}" + +output: + stdout: {} +# end::config[] diff --git a/modules/develop/examples/cookbooks/jira/test-jira-examples.sh b/modules/develop/examples/cookbooks/jira/test-jira-examples.sh new file mode 100755 index 000000000..c795f76ca --- /dev/null +++ b/modules/develop/examples/cookbooks/jira/test-jira-examples.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +# +# Test script for Jira cookbook examples +# +# This script validates YAML syntax using `rpk connect lint` +# +# Usage: +# ./test-jira-examples.sh + +set -euo pipefail + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' + +# Get script directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +echo "Testing Jira cookbook examples..." +echo "" + +TOTAL=0 +PASSED=0 +FAILED=0 + +for file in *.yaml; do + if [[ -f "$file" ]]; then + TOTAL=$((TOTAL + 1)) + echo -n " $file... " + + if output=$(rpk connect lint --skip-env-var-check "$file" 2>&1); then + echo -e "${GREEN}PASSED${NC}" + PASSED=$((PASSED + 1)) + else + echo -e "${RED}FAILED${NC}" + echo "$output" | sed 's/^/ /' + FAILED=$((FAILED + 1)) + fi + fi +done + +echo "" +echo "Results: $PASSED/$TOTAL passed" + +if [[ $FAILED -gt 0 ]]; then + echo -e "${RED}Some tests failed${NC}" + exit 1 +else + echo -e "${GREEN}All tests passed${NC}" + exit 0 +fi diff --git a/modules/develop/pages/connect/cookbooks/jira.adoc b/modules/develop/pages/connect/cookbooks/jira.adoc new file mode 100644 index 000000000..f00490226 --- /dev/null +++ b/modules/develop/pages/connect/cookbooks/jira.adoc @@ -0,0 +1,158 @@ += Work with Jira Issues +:description: Learn how to query, filter, and create Jira issues using Redpanda Connect pipelines. +:page-aliases: cookbooks:jira.adoc +:page-topic-type: cookbook +:personas: streaming_developer, data_engineer +:learning-objective-1: Query Jira issues using JQL patterns with the Jira processor +:learning-objective-2: Combine generate input with Jira processor for scheduled queries +:learning-objective-3: Create Jira issues using the HTTP processor and REST API + +The Jira processor enables querying Jira issues using JQL (Jira Query Language) and returning structured data. Unlike traditional connectors, the Jira processor only supports queries and can be used as both an input (with `generate`) and an output (with `drop`). + +Use this cookbook to: + +* [ ] Query Jira issues on a schedule or on-demand +* [ ] Filter issues using JQL patterns +* [ ] Create Jira issues using the HTTP processor + +== Prerequisites + +The examples in this cookbook use the Secrets Store for Jira credentials. This keeps sensitive credentials secure and separate from your pipeline configuration. + +. link:https://id.atlassian.com/manage-profile/security/api-tokens[Generate a Jira API token^]. + +. Add your Jira credentials to the xref:develop:connect/configuration/secret-management.adoc[Secrets Store]: ++ +- `JIRA_BASE_URL`: Your Jira instance URL (for example, `\https://your-domain.atlassian.net`) +- `JIRA_USERNAME`: Your Jira account email address +- `JIRA_API_TOKEN`: The API token generated from your Atlassian account +- `JIRA_AUTH_TOKEN` (optional, for creating issues): Base64-encoded `username:api_token` string + +== Use Jira as an input + +To use Jira as an input, combine the `generate` input with the Jira processor. This pattern triggers Jira queries at regular intervals or on-demand. + +TIP: Replace `MYPROJECT` in the examples with your actual Jira project key. + +=== Query Jira periodically + +This example queries Jira every 30 seconds for recent issues: + +[source,yaml] +---- +include::develop:example$cookbooks/jira/input-periodic.yaml[tag=config,indent=0] +---- + +=== One-time query + +For a single query, use `count` instead of `interval`: + +[source,yaml] +---- +include::develop:example$cookbooks/jira/input-once.yaml[tag=config,indent=0] +---- + +== Input message format + +The Jira processor expects input messages containing valid Jira queries in JSON format: + +[source,json] +---- +{ + "jql": "project = MYPROJECT AND status = Open", + "maxResults": 50, + "fields": ["key", "summary", "status", "assignee"] +} +---- + +=== Required fields + +- `jql`: The JQL (Jira Query Language) query string + +=== Optional fields + +- `maxResults`: Maximum number of results to return (default: 50) +- `fields`: Array of field names to include in the response + +== JQL query patterns + +Here are common JQL patterns for filtering issues: + +=== Recent issues by project + +[source,jql] +---- +project = AND created >= -7d ORDER BY created DESC +---- + +=== Issues assigned to current user + +[source,jql] +---- +assignee = currentUser() AND status != Done +---- + +=== Issues by status + +[source,jql] +---- +project = AND status IN (Open, 'In Progress', 'To Do') +---- + +=== Issues by priority + +[source,jql] +---- +project = AND priority = High ORDER BY created DESC +---- + +== Output message format + +The Jira processor returns individual issue messages, rather than a response object with an `issues` array. + +Each message output by the Jira processor represents a single issue: + +[source,json] +---- +{ + "id": "12345", + "key": "DOC-123", + "fields": { + "summary": "Example issue", + "status": { + "name": "In Progress" + }, + "assignee": { + "displayName": "John Doe" + } + } +} +---- + +== Pagination handling + +The Jira processor automatically handles pagination internally. The processor: + +. Makes the initial request with `startAt=0`. +. Checks if more results are available. +. Automatically fetches subsequent pages until all results are retrieved. +. Outputs each issue as an individual message. + +You don't need to handle pagination manually. + +== Create and update Jira issues + +The Jira processor is read-only and only supports querying. To create or update Jira issues, use the xref:develop:connect/components/processors/http.adoc[`http` processor] with the Jira REST API. + +=== Create a Jira issue + +[source,yaml] +---- +include::develop:example$cookbooks/jira/create-issue.yaml[tag=config,indent=0] +---- + +== See also + +- xref:develop:connect/components/processors/jira.adoc[Jira processor reference] +- https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/[Jira REST API documentation^] +- https://www.atlassian.com/software/jira/guides/jql[JQL query guide^] From 8b7bcf5b2c61793a626d90636552e11f6b36ad53 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Wed, 21 Jan 2026 09:34:07 +0000 Subject: [PATCH 03/35] Improve customer support tutorial with explicit instructions - Change negative headings to positive action-oriented headings - Add explicit 'Enter this query' instructions for each test scenario - Add guidance on what to watch for in the conversation panel - Specify when to start new sessions for context clearing --- .../tutorials/customer-support-agent.adoc | 56 +++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc index bcc324632..2968b9110 100644 --- a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc +++ b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc @@ -121,9 +121,9 @@ Wait for the server status to show *Running*. You now have three focused tools t The system prompt teaches the agent how to orchestrate tools. Without explicit guidance, the agent must guess when to use each tool, often choosing incorrectly or ignoring tools entirely. -=== Implicit tool selection +=== Specify when to use each tool -Make tool usage explicit. +The prompt must explicitly state when to invoke each tool. When the prompt doesn't specify when to use tools, the agent must guess based on tool names and descriptions alone. This leads to wrong tool choices, unnecessary calls, or skipped tools entirely. @@ -146,7 +146,7 @@ When to use tools: Explicit criteria create reliable tool selection. The agent follows clear rules instead of guessing. -=== Implicit tool chaining +=== Define tool chaining logic Specify how tool results inform the next action. @@ -169,7 +169,7 @@ If order is "shipped", follow up with get_shipping_info to provide tracking deta The agent uses the first tool's result (whether the status is "shipped") to decide whether to invoke the second tool. This creates context-aware behavior. -=== Missing error constraints +=== Set error handling constraints Prevent fabrication when tools fail. @@ -273,47 +273,71 @@ Testing reveals how the agent makes decisions. Watch the conversation panel in t === Tool chaining based on status -.Query +Test how the agent chains tools based on order status. + +Enter this query in the Inspector: + ---- Hi, I'd like to check on order ORD-12345 ---- -The agent uses the first tool's result (whether the status is "shipped") to decide whether to invoke the second tool. This demonstrates context-aware tool chaining. +Watch the conversation panel. The agent calls `get_order_status` first, sees the status is "shipped", then automatically follows up with `get_shipping_info` to provide tracking details. The agent uses the first tool's result to decide whether to invoke the second tool. + +Now try this query with a different order: + +---- +Check order ORD-67890 +---- -Try changing ORD-12345 to ORD-67890. This order has status "processing", so the agent calls only `get_order_status` (no shipping info exists yet). The agent chains tools only when appropriate. +This order has status "processing", so the agent calls only `get_order_status`. Since the order hasn't shipped yet, the agent skips `get_shipping_info`. The agent chains tools only when appropriate. === Clarification before tool invocation -Clear the conversation history to reset context. Then test this query: +Test how the agent handles incomplete information. + +Click *Clear context* to clear the conversation history. Then enter this query: -.Query ---- Where is my order? ---- -The agent recognizes incomplete requests and asks clarifying questions instead of guessing or calling tools with missing parameters. This demonstrates pre-condition checking. +The agent recognizes the request is missing an order ID and asks the customer to provide it. Watch the conversation panel—the agent calls zero tools. Instead of guessing or fabricating information, it asks a clarifying question. -Notice the agent calls zero tools. Effective orchestration includes knowing when NOT to invoke tools. +This demonstrates pre-condition checking. Effective orchestration includes knowing when NOT to invoke tools. === List handling -.Query +Test how the agent formats multiple results. + +Enter this query: + ---- Can you show me my recent orders? My customer ID is CUST-100. ---- -The agent handles list results by formatting them clearly for users. Try CUST-999 (returns empty list) to see how the agent handles the no-results case. +The agent calls `get_customer_history` and receives multiple orders. Watch how it formats the list clearly for the customer, showing details for each order. + +Now test the empty results case with this query: + +---- +Show my order history for customer ID CUST-999 +---- + +The agent receives an empty list and explains that no orders were found, asking the customer to verify their ID. === Error recovery -.Query +Test how the agent handles missing data. + +Enter this query: + ---- Check order ORD-99999 ---- -The agent detects tool failures and handles them gracefully. Critically, the agent does NOT fabricate tracking numbers or order details. This demonstrates error recovery without hallucination. +The tool returns no data for this order ID. Watch how the agent responds—it explains the order wasn't found and asks the customer to verify the order ID. Critically, the agent does NOT fabricate tracking numbers or order details. -Compare this to what happens without the "Never make up tracking numbers" constraint: remove that line from the system prompt and retest. The agent might invent plausible-sounding but fake tracking information. +This demonstrates error recovery without hallucination. The "Never make up tracking numbers" constraint in the system prompt prevents the agent from inventing plausible-sounding but fake information. == Troubleshoot From a1b32072944e3b558544cd4543bb250bf473742e Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Wed, 21 Jan 2026 09:34:45 +0000 Subject: [PATCH 04/35] Lowercase inspector when not writing about the UI button --- modules/ai-agents/pages/agents/troubleshooting.adoc | 6 +++--- modules/ai-agents/pages/mcp/remote/create-tool.adoc | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/ai-agents/pages/agents/troubleshooting.adoc b/modules/ai-agents/pages/agents/troubleshooting.adoc index cc8a23ae6..f8191b167 100644 --- a/modules/ai-agents/pages/agents/troubleshooting.adoc +++ b/modules/ai-agents/pages/agents/troubleshooting.adoc @@ -197,12 +197,12 @@ Diagnose and fix issues related to agent speed and resource consumption. . Use a faster model for simple queries: .. Haiku or GPT-4o Mini for straightforward tasks .. Reserve larger models for complex reasoning -. Review conversation history in Inspector to identify unnecessary tool calls. +. Review conversation history in the *Inspector* tab to identify unnecessary tool calls. . Optimize tool implementations: .. Add caching where appropriate .. Reduce query complexity .. Return only needed data (use pagination, filters) -. Clear conversation history in Inspector if context is very large. +. Clear the conversation history if the context is very large. **Prevention:** @@ -246,7 +246,7 @@ Efficiency guidelines: ---- . Switch to a more cost-effective model for simple queries. -. Clear conversation history periodically in Inspector. +. Clear conversation history periodically in the *Inspector* tab. **Prevention:** diff --git a/modules/ai-agents/pages/mcp/remote/create-tool.adoc b/modules/ai-agents/pages/mcp/remote/create-tool.adoc index 579728b2d..417953a23 100644 --- a/modules/ai-agents/pages/mcp/remote/create-tool.adoc +++ b/modules/ai-agents/pages/mcp/remote/create-tool.adoc @@ -6,7 +6,7 @@ // Learning objectives - what readers can do after reading this page: :learning-objective-1: Create a tool with the correct structure and MCP metadata :learning-objective-2: Map MCP parameters to component configuration fields using Bloblang -:learning-objective-3: Test tools using the MCP Inspector +:learning-objective-3: Test tools using the MCP inspector After xref:ai-agents:mcp/remote/quickstart.adoc[deploying your first MCP server], create custom tools that AI clients can discover and invoke. This guide walks you through the process using any Redpanda Connect component. From bbdabd88f119fa3ae01845c48a7336e99fcca26f Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Wed, 21 Jan 2026 15:58:38 +0000 Subject: [PATCH 05/35] Restructure observability docs for better information architecture Moved monitoring how-tos into context where users need them: - Monitor Agents now in agents section - Monitor MCP Servers now in mcp/remote section - Observability concepts remain centralized as single source of truth This follows the "procedures in context, concepts centralized" pattern, reducing navigation overhead and improving task completion. Also removed unnecessary observability index page since only one page remains in that section. Co-Authored-By: Claude Sonnet 4.5 --- docs-data/personas.yaml | 269 +++++++++++++++--- modules/ROOT/nav.adoc | 7 +- .../ai-agents/pages/agents/a2a-concepts.adoc | 2 +- .../pages/agents/architecture-patterns.adoc | 2 +- modules/ai-agents/pages/agents/concepts.adoc | 4 +- .../ai-agents/pages/agents/create-agent.adoc | 2 +- .../pages/agents/integration-overview.adoc | 2 +- .../monitor-agents.adoc | 2 +- modules/ai-agents/pages/agents/overview.adoc | 2 +- .../agents/pipeline-integration-patterns.adoc | 2 +- .../pages/agents/prompt-best-practices.adoc | 2 +- .../ai-agents/pages/agents/quickstart.adoc | 2 +- .../pages/agents/troubleshooting.adoc | 4 +- .../tutorials/customer-support-agent.adoc | 2 +- .../pages/mcp/local/configuration.adoc | 2 +- .../ai-agents/pages/mcp/local/overview.adoc | 2 +- .../ai-agents/pages/mcp/local/quickstart.adoc | 2 +- modules/ai-agents/pages/mcp/overview.adoc | 2 +- .../pages/mcp/remote/best-practices.adoc | 2 +- .../ai-agents/pages/mcp/remote/concepts.adoc | 4 +- .../pages/mcp/remote/create-tool.adoc | 2 +- .../pages/mcp/remote/manage-servers.adoc | 4 +- .../remote}/monitor-mcp-servers.adoc | 2 +- .../ai-agents/pages/mcp/remote/overview.adoc | 2 +- .../pages/mcp/remote/quickstart.adoc | 2 +- .../pages/mcp/remote/tool-patterns.adoc | 2 +- .../pages/mcp/remote/troubleshooting.adoc | 2 +- .../pages/observability/concepts.adoc | 6 +- .../ai-agents/pages/observability/index.adoc | 5 - 29 files changed, 265 insertions(+), 80 deletions(-) rename modules/ai-agents/pages/{observability => agents}/monitor-agents.adoc (99%) rename modules/ai-agents/pages/{observability => mcp/remote}/monitor-mcp-servers.adoc (98%) delete mode 100644 modules/ai-agents/pages/observability/index.adoc diff --git a/docs-data/personas.yaml b/docs-data/personas.yaml index 46d4e7912..f3368e85d 100644 --- a/docs-data/personas.yaml +++ b/docs-data/personas.yaml @@ -2,34 +2,77 @@ # # These personas represent the target audience for Redpanda Cloud documentation. # Use these when assigning :personas: attributes to documentation pages. +# +# This persona set covers two domains: +# 1. Streaming/Data Platform: Real-time data streaming, connectors, pipelines +# 2. Agentic Data Platform (ADP): AI agent development, governance, enterprise AI adoption schema_version: "1.0" repository: cloud-docs personas: - - id: app_developer - name: Application Developer - description: Builds applications that produce and consume data from Redpanda Cloud - experience_level: intermediate + # ============================================================================ + # TIER 1: Executive & Governance + # ============================================================================ + + - id: executive + name: Executive Stakeholder + description: CIO/CAIO/Head of AI Strategy driving enterprise AI adoption and governance + experience_level: executive goals: - - Connect applications to Redpanda Cloud clusters - - Produce and consume messages reliably - - Implement proper error handling and retries - - Optimize client performance + - Drive enterprise-wide AI adoption strategy + - Ensure ROI on AI investments + - Establish governance framework for agent deployments + - Manage cost and resource allocation + - Ensure compliance with organizational policies pain_points: - - Authentication and connection configuration - - Understanding Kafka client options - - Debugging connectivity issues - - Choosing the right client library + - Lack of visibility into agent usage and costs + - Difficulty enforcing governance at scale + - Unclear ROI metrics for AI initiatives + - Risk of shadow AI deployments + - Integration with existing enterprise systems content_preferences: - - Working code examples in multiple languages - - Connection configuration templates - - Client library comparisons - - Performance tuning guides + - High-level governance frameworks + - ROI and cost analysis + - Compliance and audit capabilities + - Executive dashboards and reporting + - Strategic planning guides typical_content_types: - - how-to - - tutorial + - overview + - concepts + - best-practices + + - id: security_leader + name: Security & Risk Leader + description: CISO/Compliance Officer protecting systems and enforcing data protection policies + experience_level: advanced + goals: + - Enforce agent policy and access controls + - Maintain audit trails for compliance + - Protect sensitive data and credentials + - Manage risk across agent deployments + - Ensure regulatory compliance + pain_points: + - Agent access to sensitive systems + - Lack of visibility into agent actions + - Difficult to audit agent behavior + - Credential management and rotation + - Compliance with data protection regulations + content_preferences: + - Security architecture patterns + - Policy enforcement mechanisms + - Audit trail documentation + - Compliance certification guides + - Incident response procedures + typical_content_types: + - concepts - reference + - best-practices + - troubleshooting + + # ============================================================================ + # TIER 2: Platform Operations + # ============================================================================ - id: platform_admin name: Platform Administrator @@ -55,47 +98,97 @@ personas: - reference - best-practices - - id: data_engineer - name: Data Engineer - description: Builds data pipelines using managed connectors and Redpanda Connect - experience_level: intermediate + - id: ai_platform_engineer + name: AI/ML Platform Engineer + description: Operates agent infrastructure, runtimes, and connectivity with governance controls + experience_level: advanced goals: - - Set up managed connectors to move data between systems - - Transform and route data reliably - - Monitor connector and pipeline health - - Handle errors and retries + - Deploy and operate agent runtime infrastructure + - Configure governance controls and policies + - Monitor agent performance and resource usage + - Onboard and manage MCP servers + - Ensure agent observability and debugging pain_points: - - Connector configuration complexity - - Debugging failed connectors - - Schema management and evolution - - Performance tuning + - Complex agent runtime configuration + - Difficult to troubleshoot agent failures + - Managing agent resource allocation + - Integrating governance with existing tools + - Scaling agent infrastructure content_preferences: - - Connector setup guides - - Transformation examples - - Error handling patterns - - Monitoring and troubleshooting + - Infrastructure setup guides + - Governance configuration patterns + - Observability and monitoring setup + - Performance tuning documentation + - Troubleshooting workflows typical_content_types: - how-to - - cookbook + - reference - troubleshooting + - best-practices - - id: ai_agent_developer - name: AI Agent Developer - description: Builds AI agents and integrations using MCP tools and LLM frameworks + # ============================================================================ + # TIER 3: Builders & Developers + # ============================================================================ + + - id: app_developer + name: Application Developer + description: Builds applications that produce and consume data from Redpanda Cloud experience_level: intermediate goals: + - Connect applications to Redpanda Cloud clusters + - Produce and consume messages reliably + - Implement proper error handling and retries + - Optimize client performance + pain_points: + - Authentication and connection configuration + - Understanding Kafka client options + - Debugging connectivity issues + - Choosing the right client library + content_preferences: + - Working code examples in multiple languages + - Connection configuration templates + - Client library comparisons + - Performance tuning guides + typical_content_types: + - how-to + - tutorial + - reference + + - id: agent_developer + name: Agent Developer + description: Builds AI agents, agentic workflows, and MCP tools that integrate with Redpanda Cloud and ADP + experience_level: intermediate + goals: + # MCP and streaming integration - Create MCP tools that AI assistants can discover and use - Deploy MCP servers to Redpanda Cloud - Integrate with AI/LLM applications - Debug agent-tool interactions + # Agentic workflows and governed deployment + - Build agents and workflows that solve business problems + - Use ADP catalog, templates, and curated datasets + - Design reasoning patterns and tool interactions + - Deploy agents into governed runtime pain_points: + # MCP and integration challenges - MCP configuration syntax - Testing tools before deployment - Limited AI-specific examples + # ADP and governance challenges + - Hard to discover existing templates, MCP servers, datasets + - Unclear access policies + - Brittle multi-step integrations + - Inconsistent testing/debugging environments content_preferences: + # Code examples and patterns - Working code examples with AI context - Testing and debugging workflows - Integration patterns + # Catalog and governance + - Rich catalog of agent templates and tools + - Governance introspection (what agent can/can't do) + - Replay-based debugging + - Streamlined deployment workflows typical_content_types: - tutorial - how-to @@ -127,6 +220,81 @@ personas: - reference - best-practices + # ============================================================================ + # TIER 4: Data & Knowledge Management + # ============================================================================ + + - id: data_engineer + name: Data Engineer + description: Builds data pipelines with managed connectors AND creates curated datasets for agent consumption + experience_level: intermediate + goals: + # Data movement and pipelines + - Set up managed connectors to move data between systems + - Transform and route data reliably + - Monitor connector and pipeline health + - Handle errors and retries + # Agent-ready datasets and RAG + - Create agent-ready datasets with federated SQL + - Ensure data quality and freshness for agents + - Expose data safely through governed views + - Provide clean RAG context via MCP servers + pain_points: + # Connector and pipeline challenges + - Connector configuration complexity + - Debugging failed connectors + - Schema management and evolution + - Performance tuning + # Data curation for agents + - Siloed data across sources + - Fragile RAG sources + - Schema drift + - Difficulty providing agent-ready datasets quickly + content_preferences: + # Connector and transformation + - Connector setup guides + - Transformation examples + - Error handling patterns + - Monitoring and troubleshooting + # Federated data and RAG + - Federated SQL query examples + - Governed view patterns + - RAG context design + - Data lineage visualization + typical_content_types: + - how-to + - cookbook + - troubleshooting + - reference + + - id: knowledge_manager + name: Knowledge & Operations Manager + description: Maintains organizational documentation and knowledge bases for agent consumption + experience_level: intermediate + goals: + - Ingest and maintain organizational knowledge bases + - Ensure content freshness and accuracy + - Optimize vector search for agent queries + - Manage knowledge base access and permissions + pain_points: + - Stale or outdated documentation + - Difficult to index and search content + - Managing content from multiple sources + - Ensuring agent retrieval accuracy + content_preferences: + - KB ingestion workflows + - Vector search optimization guides + - Content freshness strategies + - Access control patterns + typical_content_types: + - how-to + - best-practices + - troubleshooting + + # ============================================================================ + # TIER 5: Evaluation & End Users + # ============================================================================ + - id: evaluator name: Technical Evaluator description: Assessing Redpanda Cloud for their organization @@ -150,4 +318,27 @@ personas: - overview - concepts - tutorial - - get-started + + - id: business_user + name: Business End User + description: Uses agent-powered automations to complete business tasks + experience_level: beginner + goals: + - Complete tasks efficiently using agents + - Understand what agents can and cannot do + - Trust agent recommendations and actions + - Report issues when agents fail + pain_points: + - Unclear agent capabilities + - Unexpected agent behavior + - Lack of transparency in agent actions + - Difficulty getting help when agents fail + content_preferences: + - Simple, task-oriented guides + - Agent capability overviews + - Troubleshooting for common issues + - Trust and transparency documentation + typical_content_types: + - overview + - how-to + - troubleshooting diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index c377fa2be..7a00ca218 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -81,6 +81,7 @@ **** xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices] **** xref:ai-agents:agents/architecture-patterns.adoc[Architecture Patterns] **** xref:ai-agents:agents/troubleshooting.adoc[Troubleshoot] +**** xref:ai-agents:agents/monitor-agents.adoc[Monitor Agents] *** xref:ai-agents:agents/integration-index.adoc[Agent Integrations] **** xref:ai-agents:agents/integration-overview.adoc[Integration Patterns] **** xref:ai-agents:agents/pipeline-integration-patterns.adoc[Pipeline to Agent] @@ -96,15 +97,13 @@ **** xref:ai-agents:mcp/remote/tool-patterns.adoc[Tool Patterns] **** xref:ai-agents:mcp/remote/troubleshooting.adoc[Troubleshoot] **** xref:ai-agents:mcp/remote/manage-servers.adoc[Manage Servers] +**** xref:ai-agents:mcp/remote/monitor-mcp-servers.adoc[Monitor MCP Servers] **** xref:ai-agents:mcp/remote/scale-resources.adoc[Scale Resources] *** xref:ai-agents:mcp/local/index.adoc[Redpanda Cloud Management MCP Server] **** xref:ai-agents:mcp/local/overview.adoc[Overview] **** xref:ai-agents:mcp/local/quickstart.adoc[Quickstart] **** xref:ai-agents:mcp/local/configuration.adoc[Configure] -** xref:ai-agents:observability/index.adoc[Observability] -*** xref:ai-agents:observability/concepts.adoc[Concepts] -*** xref:ai-agents:observability/monitor-agents.adoc[Monitor Agents] -*** xref:ai-agents:observability/monitor-mcp-servers.adoc[Monitor MCP Servers] +** xref:ai-agents:observability/concepts.adoc[Observability] * xref:develop:connect/about.adoc[Redpanda Connect] ** xref:develop:connect/connect-quickstart.adoc[Quickstart] ** xref:develop:connect/configuration/about.adoc[] diff --git a/modules/ai-agents/pages/agents/a2a-concepts.adoc b/modules/ai-agents/pages/agents/a2a-concepts.adoc index 0cb02ecc0..1b58a4bee 100644 --- a/modules/ai-agents/pages/agents/a2a-concepts.adoc +++ b/modules/ai-agents/pages/agents/a2a-concepts.adoc @@ -2,7 +2,7 @@ :description: Learn how the A2A protocol enables agent discovery and communication. :page-topic-type: concepts :page-aliases: agents/external-app-integration.adoc -:personas: ai_agent_developer, app_developer, streaming_developer +:personas: agent_developer, app_developer, streaming_developer :learning-objective-1: Describe the A2A protocol and its role in agent communication :learning-objective-2: Explain how agent cards enable discovery :learning-objective-3: Identify how authentication secures agent communication diff --git a/modules/ai-agents/pages/agents/architecture-patterns.adoc b/modules/ai-agents/pages/agents/architecture-patterns.adoc index 146cdbc77..69097e040 100644 --- a/modules/ai-agents/pages/agents/architecture-patterns.adoc +++ b/modules/ai-agents/pages/agents/architecture-patterns.adoc @@ -1,7 +1,7 @@ = Agent Architecture Patterns :description: Design maintainable agent systems with single-agent and multi-agent patterns based on domain complexity. :page-topic-type: best-practices -:personas: ai_agent_developer, streaming_developer +:personas: agent_developer, streaming_developer :learning-objective-1: Evaluate single-agent versus multi-agent architectures for your use case :learning-objective-2: Choose appropriate LLM models based on task requirements :learning-objective-3: Apply agent boundary design principles for maintainability diff --git a/modules/ai-agents/pages/agents/concepts.adoc b/modules/ai-agents/pages/agents/concepts.adoc index f1e66fed1..5de95ceee 100644 --- a/modules/ai-agents/pages/agents/concepts.adoc +++ b/modules/ai-agents/pages/agents/concepts.adoc @@ -1,7 +1,7 @@ = Agent Concepts :description: Understand how agents execute, manage context, invoke tools, and handle errors. :page-topic-type: concepts -:personas: ai_agent_developer, streaming_developer, data_engineer +:personas: agent_developer, streaming_developer, data_engineer :learning-objective-1: Explain how agents execute reasoning loops and make tool invocation decisions :learning-objective-2: Describe how agents manage context and state across interactions :learning-objective-3: Identify error handling strategies for agent failures @@ -178,7 +178,7 @@ Redpanda uses these topics internally to persist conversation history and reload These topics and schemas are managed automatically by Redpanda. If you delete either a topic or schema, they are recreated automatically. However, deleting a topic permanently deletes all stored data (including conversation history), and the topic comes back empty. Do not produce your own data to these topics. They are reserved for agent data. -For guidance on consuming these topics, analyzing conversation history, and monitoring agent performance, see xref:ai-agents:observability/monitor-agents.adoc[]. +For guidance on consuming these topics, analyzing conversation history, and monitoring agent performance, see xref:ai-agents:agents/monitor-agents.adoc[]. === Sessions topic diff --git a/modules/ai-agents/pages/agents/create-agent.adoc b/modules/ai-agents/pages/agents/create-agent.adoc index 55f88ba15..a59a011e8 100644 --- a/modules/ai-agents/pages/agents/create-agent.adoc +++ b/modules/ai-agents/pages/agents/create-agent.adoc @@ -1,7 +1,7 @@ = Create an Agent :description: Configure agents with model selection, system prompts, tool connections, and execution parameters. :page-topic-type: how-to -:personas: ai_agent_developer, app_developer, streaming_developer +:personas: agent_developer, app_developer, streaming_developer :learning-objective-1: Configure an agent with model selection and system prompt :learning-objective-2: Connect MCP servers and select tools for your agent :learning-objective-3: Set agent execution parameters including max iterations diff --git a/modules/ai-agents/pages/agents/integration-overview.adoc b/modules/ai-agents/pages/agents/integration-overview.adoc index 51089058d..3efc49408 100644 --- a/modules/ai-agents/pages/agents/integration-overview.adoc +++ b/modules/ai-agents/pages/agents/integration-overview.adoc @@ -1,7 +1,7 @@ = Integration Patterns Overview :description: Choose the right integration pattern for connecting agents, pipelines, and external applications. :page-topic-type: best-practices -:personas: ai_agent_developer, streaming_developer, app_developer, data_engineer +:personas: agent_developer, streaming_developer, app_developer, data_engineer :learning-objective-1: Choose the integration pattern that fits your use case :learning-objective-2: Apply appropriate authentication for internal versus external integration :learning-objective-3: Select the right communication protocol for your integration scenario diff --git a/modules/ai-agents/pages/observability/monitor-agents.adoc b/modules/ai-agents/pages/agents/monitor-agents.adoc similarity index 99% rename from modules/ai-agents/pages/observability/monitor-agents.adoc rename to modules/ai-agents/pages/agents/monitor-agents.adoc index fe6a36f43..d4ea356c7 100644 --- a/modules/ai-agents/pages/observability/monitor-agents.adoc +++ b/modules/ai-agents/pages/agents/monitor-agents.adoc @@ -1,7 +1,7 @@ = Monitor Agent Activity :description: Monitor agent execution, analyze conversation history, track token usage, and debug issues using Inspector, Transcripts, and agent data topics. :page-topic-type: how-to -:personas: ai_agent_developer, platform_admin +:personas: agent_developer, platform_admin :learning-objective-1: Test agents interactively using the Inspector tab :learning-objective-2: Consume session and task topics for analysis :learning-objective-3: Debug agent behavior using Transcripts diff --git a/modules/ai-agents/pages/agents/overview.adoc b/modules/ai-agents/pages/agents/overview.adoc index 045342c9a..1e2120e1b 100644 --- a/modules/ai-agents/pages/agents/overview.adoc +++ b/modules/ai-agents/pages/agents/overview.adoc @@ -1,7 +1,7 @@ = AI Agents Overview :description: Learn what AI agents are and how Redpanda Cloud supports agent development with real-time streaming. :page-topic-type: overview -:personas: evaluator, ai_agent_developer, app_developer, streaming_developer +:personas: evaluator, agent_developer, app_developer, streaming_developer :learning-objective-1: Describe what AI agents are and their essential components :learning-objective-2: Explain how Redpanda Cloud streaming infrastructure benefits agent architectures :learning-objective-3: Identify use cases where Redpanda Cloud agents provide value diff --git a/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc b/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc index ba2d064b5..e47fa1856 100644 --- a/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc +++ b/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc @@ -1,7 +1,7 @@ = Pipeline Integration Patterns :description: Build Redpanda Connect pipelines that invoke agents for event-driven processing and streaming enrichment. :page-topic-type: best-practices -:personas: streaming_developer, ai_agent_developer +:personas: streaming_developer, agent_developer :learning-objective-1: Identify when pipelines should call agents for stream processing :learning-objective-2: pass:q[Design event-driven agent invocation using the `a2a_message` processor] :learning-objective-3: Implement streaming enrichment with AI-generated fields diff --git a/modules/ai-agents/pages/agents/prompt-best-practices.adoc b/modules/ai-agents/pages/agents/prompt-best-practices.adoc index fff63e421..7da48eb56 100644 --- a/modules/ai-agents/pages/agents/prompt-best-practices.adoc +++ b/modules/ai-agents/pages/agents/prompt-best-practices.adoc @@ -1,7 +1,7 @@ = System Prompt Best Practices :description: Write system prompts that produce reliable, predictable agent behavior through clear constraints and tool guidance. :page-topic-type: best-practices -:personas: ai_agent_developer, app_developer, streaming_developer +:personas: agent_developer, app_developer, streaming_developer :learning-objective-1: Identify effective system prompt patterns for agent reliability :learning-objective-2: Apply constraint patterns to prevent unintended agent behavior :learning-objective-3: Evaluate system prompts for clarity and completeness diff --git a/modules/ai-agents/pages/agents/quickstart.adoc b/modules/ai-agents/pages/agents/quickstart.adoc index a7e2adf58..526c1368f 100644 --- a/modules/ai-agents/pages/agents/quickstart.adoc +++ b/modules/ai-agents/pages/agents/quickstart.adoc @@ -1,7 +1,7 @@ = AI Agent Quickstart :description: Create your first AI agent in Redpanda Cloud that generates and publishes event data through natural language commands. :page-topic-type: tutorial -:personas: ai_agent_developer, evaluator +:personas: agent_developer, evaluator :learning-objective-1: Create an AI agent in Redpanda Cloud that uses MCP tools :learning-objective-2: Configure the agent with a system prompt and model selection :learning-objective-3: Test the agent by generating and publishing events through natural language diff --git a/modules/ai-agents/pages/agents/troubleshooting.adoc b/modules/ai-agents/pages/agents/troubleshooting.adoc index f8191b167..f51dbd91d 100644 --- a/modules/ai-agents/pages/agents/troubleshooting.adoc +++ b/modules/ai-agents/pages/agents/troubleshooting.adoc @@ -1,7 +1,7 @@ = Troubleshoot AI Agents :description: Diagnose and fix common issues with AI agents including deployment failures, runtime behavior problems, and tool execution errors. :page-topic-type: troubleshooting -:personas: ai_agent_developer, app_developer, streaming_developer +:personas: agent_developer, app_developer, streaming_developer :learning-objective-1: Diagnose deployment failures and resource allocation errors :learning-objective-2: Resolve runtime behavior issues including tool selection and iteration limits :learning-objective-3: Fix tool execution problems and authentication failures @@ -425,7 +425,7 @@ processors: == Monitor and debug agents -For comprehensive guidance on monitoring agent activity, analyzing conversation history, tracking token usage, and debugging issues, see xref:ai-agents:observability/monitor-agents.adoc[]. +For comprehensive guidance on monitoring agent activity, analyzing conversation history, tracking token usage, and debugging issues, see xref:ai-agents:agents/monitor-agents.adoc[]. == Next steps diff --git a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc index 2968b9110..352ee08d1 100644 --- a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc +++ b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc @@ -1,7 +1,7 @@ = Learn Multi-Tool Agent Orchestration :description: Learn how agents coordinate multiple tools, make decisions based on conversation context, and handle errors through building a customer support agent. :page-topic-type: tutorial -:personas: ai_agent_developer, streaming_developer +:personas: agent_developer, streaming_developer :learning-objective-1: Explain how agents use conversation context to decide which tools to invoke :learning-objective-2: Apply tool orchestration patterns to handle multi-step workflows :learning-objective-3: Evaluate how system prompt design affects agent tool selection diff --git a/modules/ai-agents/pages/mcp/local/configuration.adoc b/modules/ai-agents/pages/mcp/local/configuration.adoc index 134c50b0c..f2170a11b 100644 --- a/modules/ai-agents/pages/mcp/local/configuration.adoc +++ b/modules/ai-agents/pages/mcp/local/configuration.adoc @@ -2,7 +2,7 @@ :page-beta: true :description: Learn how to configure the Redpanda Cloud Management MCP Server, including auto and manual client setup, enabling deletes, and security considerations. :page-topic-type: how-to -:personas: ai_agent_developer, platform_admin +:personas: agent_developer, platform_admin // Reader journey: "I customize and configure" // Learning objectives - what readers can learn from this page: :learning-objective-1: Configure MCP clients diff --git a/modules/ai-agents/pages/mcp/local/overview.adoc b/modules/ai-agents/pages/mcp/local/overview.adoc index 01bfd6227..a27e3df25 100644 --- a/modules/ai-agents/pages/mcp/local/overview.adoc +++ b/modules/ai-agents/pages/mcp/local/overview.adoc @@ -2,7 +2,7 @@ :page-beta: true :description: Learn about the Redpanda Cloud Management MCP Server, which lets AI agents securely access and operate your Redpanda Cloud account and clusters. :page-topic-type: overview -:personas: evaluator, ai_agent_developer, platform_admin +:personas: evaluator, agent_developer, platform_admin // Reader journey: "I'm new" // Learning objectives - what readers should understand after reading this page: :learning-objective-1: Explain what the Redpanda Cloud Management MCP Server does diff --git a/modules/ai-agents/pages/mcp/local/quickstart.adoc b/modules/ai-agents/pages/mcp/local/quickstart.adoc index 0408f950f..413f6d146 100644 --- a/modules/ai-agents/pages/mcp/local/quickstart.adoc +++ b/modules/ai-agents/pages/mcp/local/quickstart.adoc @@ -2,7 +2,7 @@ :page-beta: true :description: Connect your Claude AI agent to your Redpanda Cloud account and clusters using the Redpanda Cloud Management MCP Server. :page-topic-type: tutorial -:personas: ai_agent_developer, platform_admin +:personas: agent_developer, platform_admin // Reader journey: "I'm new" - seeking first hands-on experience // Learning objectives - what readers will achieve by completing this quickstart: :learning-objective-1: Authenticate to Redpanda Cloud with rpk diff --git a/modules/ai-agents/pages/mcp/overview.adoc b/modules/ai-agents/pages/mcp/overview.adoc index 5b452c357..4e4282b7a 100644 --- a/modules/ai-agents/pages/mcp/overview.adoc +++ b/modules/ai-agents/pages/mcp/overview.adoc @@ -1,7 +1,7 @@ = MCP Servers for Redpanda Cloud Overview :description: Learn about Model Context Protocol (MCP) in Redpanda Cloud, including the two complementary options: the Redpanda Cloud Management MCP Server and Remote MCP. :page-topic-type: overview -:personas: evaluator, ai_agent_developer +:personas: evaluator, agent_developer // Reader journey: "I'm new" - understanding the landscape // Learning objectives - what readers should understand after reading this page: :learning-objective-1: Describe what MCP enables for AI agents diff --git a/modules/ai-agents/pages/mcp/remote/best-practices.adoc b/modules/ai-agents/pages/mcp/remote/best-practices.adoc index 28df4084d..bf1eed69c 100644 --- a/modules/ai-agents/pages/mcp/remote/best-practices.adoc +++ b/modules/ai-agents/pages/mcp/remote/best-practices.adoc @@ -1,7 +1,7 @@ = MCP Tool Design :description: Design effective MCP tool interfaces with clear names, descriptions, and input properties. :page-topic-type: best-practices -:personas: ai_agent_developer +:personas: agent_developer // Reader journey: "I want AI clients to discover and use my tools effectively" // Learning objectives - what readers should be able to do after reading this page: :learning-objective-1: Write tool names and descriptions that help AI clients select the right tool diff --git a/modules/ai-agents/pages/mcp/remote/concepts.adoc b/modules/ai-agents/pages/mcp/remote/concepts.adoc index 678b919dd..57a366539 100644 --- a/modules/ai-agents/pages/mcp/remote/concepts.adoc +++ b/modules/ai-agents/pages/mcp/remote/concepts.adoc @@ -2,7 +2,7 @@ :description: Understand the MCP execution model, choose the right component type, and use traces for observability. :page-aliases: ai-agents:mcp/remote/understanding-mcp-tools.adoc :page-topic-type: concepts -:personas: ai_agent_developer, streaming_developer +:personas: agent_developer, streaming_developer // Reader journey: "I want to understand how it works" // Learning objectives - what readers should know after reading this page: :learning-objective-1: Describe the request/response execution model @@ -35,7 +35,7 @@ include::redpanda-connect:ai-agents:partial$mcp/concepts/component-selection.ado MCP servers automatically emit OpenTelemetry traces for monitoring and debugging. For detailed information about traces, spans, and the trace structure, see xref:ai-agents:observability/concepts.adoc[]. -To monitor MCP server activity, consume traces, and debug failures, see xref:ai-agents:observability/monitor-mcp-servers.adoc[]. +To monitor MCP server activity, consume traces, and debug failures, see xref:ai-agents:mcp/remote/monitor-mcp-servers.adoc[]. == Next steps diff --git a/modules/ai-agents/pages/mcp/remote/create-tool.adoc b/modules/ai-agents/pages/mcp/remote/create-tool.adoc index 417953a23..ef40bdde9 100644 --- a/modules/ai-agents/pages/mcp/remote/create-tool.adoc +++ b/modules/ai-agents/pages/mcp/remote/create-tool.adoc @@ -1,7 +1,7 @@ = Create an MCP Tool :description: Create an MCP tool with the correct YAML structure, metadata, and parameter mapping. :page-topic-type: how-to -:personas: ai_agent_developer, streaming_developer, data_engineer +:personas: agent_developer, streaming_developer, data_engineer // Reader journey: "I want to create a tool for my AI agent" // Learning objectives - what readers can do after reading this page: :learning-objective-1: Create a tool with the correct structure and MCP metadata diff --git a/modules/ai-agents/pages/mcp/remote/manage-servers.adoc b/modules/ai-agents/pages/mcp/remote/manage-servers.adoc index 92cbb9ba8..b1c993254 100644 --- a/modules/ai-agents/pages/mcp/remote/manage-servers.adoc +++ b/modules/ai-agents/pages/mcp/remote/manage-servers.adoc @@ -2,7 +2,7 @@ :description: Learn how to edit, stop, start, and delete MCP servers in Redpanda Cloud. :page-aliases: ai-agents:mcp/remote/admin-guide.adoc :page-topic-type: how-to -:personas: platform_admin, ai_agent_developer +:personas: platform_admin, agent_developer // Reader journey: "I operate and maintain" // Learning objectives - what readers can accomplish from this page: :learning-objective-1: Edit MCP server configurations @@ -163,5 +163,5 @@ Deletion is immediate and permanent. Make sure you have backed up any important == Next steps * xref:ai-agents:mcp/remote/scale-resources.adoc[Scale MCP server resources] to optimize performance and costs. -* xref:ai-agents:observability/monitor-mcp-servers.adoc[Monitor MCP server activity] using OpenTelemetry traces. +* xref:ai-agents:mcp/remote/monitor-mcp-servers.adoc[Monitor MCP server activity] using OpenTelemetry traces. * xref:ai-agents:mcp/remote/best-practices.adoc[Learn best practices] for building robust tools. diff --git a/modules/ai-agents/pages/observability/monitor-mcp-servers.adoc b/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc similarity index 98% rename from modules/ai-agents/pages/observability/monitor-mcp-servers.adoc rename to modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc index 75b0d4f4f..b0ea50962 100644 --- a/modules/ai-agents/pages/observability/monitor-mcp-servers.adoc +++ b/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc @@ -1,7 +1,7 @@ = Monitor MCP Server Activity :description: Consume traces, track tool invocations, measure performance, and debug failures in MCP servers. :page-topic-type: how-to -:personas: platform_admin, ai_agent_developer, data_engineer +:personas: platform_admin, agent_developer, data_engineer :learning-objective-1: Consume traces from the redpanda.otel_traces topic :learning-objective-2: Track tool invocations and measure performance :learning-objective-3: Debug tool failures using trace data diff --git a/modules/ai-agents/pages/mcp/remote/overview.adoc b/modules/ai-agents/pages/mcp/remote/overview.adoc index 05b563861..8ab577444 100644 --- a/modules/ai-agents/pages/mcp/remote/overview.adoc +++ b/modules/ai-agents/pages/mcp/remote/overview.adoc @@ -1,7 +1,7 @@ = Remote MCP Server Overview :description: Discover how AI agents can interact with your streaming data and how to connect them to Redpanda Cloud. :page-topic-type: overview -:personas: evaluator, ai_agent_developer +:personas: evaluator, agent_developer // Reader journey: "I'm evaluating this" // Learning objectives - what readers should understand after reading this page: :learning-objective-1: Explain what a Remote MCP server is and how tools differ from pipelines diff --git a/modules/ai-agents/pages/mcp/remote/quickstart.adoc b/modules/ai-agents/pages/mcp/remote/quickstart.adoc index 09815fd0b..a295005d3 100644 --- a/modules/ai-agents/pages/mcp/remote/quickstart.adoc +++ b/modules/ai-agents/pages/mcp/remote/quickstart.adoc @@ -1,7 +1,7 @@ = Remote MCP Server Quickstart :description: Learn how to extend AI agents with custom tools that interact with your Redpanda data using the Model Context Protocol (MCP). :page-topic-type: tutorial -:personas: ai_agent_developer, streaming_developer, evaluator +:personas: agent_developer, streaming_developer, evaluator // Reader journey: "I want to try it now" // Learning objectives - what readers will achieve by completing this quickstart: :learning-objective-1: Create an MCP server in Redpanda Cloud diff --git a/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc b/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc index 3d01e1d70..edf1e0d43 100644 --- a/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc +++ b/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc @@ -2,7 +2,7 @@ :page-aliases: ai-agents:mcp/remote/pipeline-patterns.adoc :description: Catalog of patterns for MCP server tools in Redpanda Cloud. :page-topic-type: cookbook -:personas: ai_agent_developer, data_engineer +:personas: agent_developer, data_engineer // Reader journey: "I need an example for X" :learning-objective-1: Find reusable patterns for common MCP tool scenarios :learning-objective-2: Apply validation and error handling patterns for production robustness diff --git a/modules/ai-agents/pages/mcp/remote/troubleshooting.adoc b/modules/ai-agents/pages/mcp/remote/troubleshooting.adoc index 9c0dc41e6..51bdb1301 100644 --- a/modules/ai-agents/pages/mcp/remote/troubleshooting.adoc +++ b/modules/ai-agents/pages/mcp/remote/troubleshooting.adoc @@ -1,7 +1,7 @@ = Troubleshoot Remote MCP Servers :description: Diagnose and fix common issues when building and running Remote MCP servers in Redpanda Cloud. :page-topic-type: troubleshooting -:personas: ai_agent_developer, streaming_developer, platform_admin +:personas: agent_developer, streaming_developer, platform_admin // Reader journey: "Something went wrong" // Learning objectives - what readers can do with this page: :learning-objective-1: Diagnose and fix lint and YAML configuration errors diff --git a/modules/ai-agents/pages/observability/concepts.adoc b/modules/ai-agents/pages/observability/concepts.adoc index 461d8da86..d7818240a 100644 --- a/modules/ai-agents/pages/observability/concepts.adoc +++ b/modules/ai-agents/pages/observability/concepts.adoc @@ -1,7 +1,7 @@ = Transcripts and AI Observability :description: Understand how Redpanda captures execution traces for agents and MCP servers using OpenTelemetry. :page-topic-type: concepts -:personas: ai_agent_developer, platform_admin, data_engineer +:personas: agent_developer, platform_admin, data_engineer :learning-objective-1: Explain how traces and spans capture execution flow :learning-objective-2: Interpret trace structure for debugging and monitoring :learning-objective-3: Distinguish between observability traces and audit logs @@ -143,5 +143,5 @@ For compliance and audit requirements, use the session and task topics for agent == Next steps -* xref:ai-agents:observability/monitor-agents.adoc[]: Monitor agent execution and performance -* xref:ai-agents:observability/monitor-mcp-servers.adoc[]: Monitor MCP server activity +* xref:ai-agents:agents/monitor-agents.adoc[]: Monitor agent execution and performance +* xref:ai-agents:mcp/remote/monitor-mcp-servers.adoc[]: Monitor MCP server activity diff --git a/modules/ai-agents/pages/observability/index.adoc b/modules/ai-agents/pages/observability/index.adoc deleted file mode 100644 index e9d504341..000000000 --- a/modules/ai-agents/pages/observability/index.adoc +++ /dev/null @@ -1,5 +0,0 @@ -= AI Observability -:page-layout: index -:description: Monitor and debug AI agents and MCP servers using OpenTelemetry traces, execution transcripts, and agent data topics. - -Monitor your AI agents and MCP servers with built-in observability tools that capture execution traces, conversation history, and performance metrics. From 83e3f02d8554139865bdb083157f1ececb432b07 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Wed, 21 Jan 2026 16:06:02 +0000 Subject: [PATCH 06/35] Rename to Transcripts --- modules/ROOT/nav.adoc | 4 ++-- modules/ai-agents/pages/observability/concepts.adoc | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 7a00ca218..10f73a458 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -81,7 +81,7 @@ **** xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices] **** xref:ai-agents:agents/architecture-patterns.adoc[Architecture Patterns] **** xref:ai-agents:agents/troubleshooting.adoc[Troubleshoot] -**** xref:ai-agents:agents/monitor-agents.adoc[Monitor Agents] +*** xref:ai-agents:agents/monitor-agents.adoc[Monitor Agents] *** xref:ai-agents:agents/integration-index.adoc[Agent Integrations] **** xref:ai-agents:agents/integration-overview.adoc[Integration Patterns] **** xref:ai-agents:agents/pipeline-integration-patterns.adoc[Pipeline to Agent] @@ -103,7 +103,7 @@ **** xref:ai-agents:mcp/local/overview.adoc[Overview] **** xref:ai-agents:mcp/local/quickstart.adoc[Quickstart] **** xref:ai-agents:mcp/local/configuration.adoc[Configure] -** xref:ai-agents:observability/concepts.adoc[Observability] +** xref:ai-agents:observability/concepts.adoc[Transcripts] * xref:develop:connect/about.adoc[Redpanda Connect] ** xref:develop:connect/connect-quickstart.adoc[Quickstart] ** xref:develop:connect/configuration/about.adoc[] diff --git a/modules/ai-agents/pages/observability/concepts.adoc b/modules/ai-agents/pages/observability/concepts.adoc index d7818240a..9b09130ba 100644 --- a/modules/ai-agents/pages/observability/concepts.adoc +++ b/modules/ai-agents/pages/observability/concepts.adoc @@ -143,5 +143,5 @@ For compliance and audit requirements, use the session and task topics for agent == Next steps -* xref:ai-agents:agents/monitor-agents.adoc[]: Monitor agent execution and performance -* xref:ai-agents:mcp/remote/monitor-mcp-servers.adoc[]: Monitor MCP server activity +* xref:ai-agents:agents/monitor-agents.adoc[] +* xref:ai-agents:mcp/remote/monitor-mcp-servers.adoc[] From 344ee083f1970275c0999c7984cf3d6d77fb6e09 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Thu, 22 Jan 2026 17:12:40 +0000 Subject: [PATCH 07/35] Remove sessions and tasks topics from agent documentation Sessions and tasks topics are being soft-hidden with __ prefix as they are internal implementation details. Updated documentation to focus on user-facing monitoring features (transcripts and inspector). Changes: - Remove "Agent data topics" section from concepts.adoc with schemas - Remove "Consume agent data topics" section from monitor-agents.adoc - Update troubleshooting.adoc to reference transcripts instead of topics - Update learning objective to "Track token usage and performance metrics" - Fix xref anchor links to include descriptive text - Fix shipping carrier name to comply with Google style guide Co-Authored-By: Claude Sonnet 4.5 --- .../processors/get_shipping_info.yaml | 2 +- .../mcp-tools/processors/order_workflow.yaml | 6 +- .../ai-agents/pages/agents/a2a-concepts.adoc | 38 ++- .../pages/agents/architecture-patterns.adoc | 65 +---- modules/ai-agents/pages/agents/concepts.adoc | 119 +-------- .../ai-agents/pages/agents/create-agent.adoc | 35 ++- .../pages/agents/integration-overview.adoc | 6 +- .../pages/agents/monitor-agents.adoc | 195 ++++++-------- modules/ai-agents/pages/agents/overview.adoc | 10 +- .../agents/pipeline-integration-patterns.adoc | 8 +- .../pages/agents/prompt-best-practices.adoc | 6 +- .../ai-agents/pages/agents/quickstart.adoc | 10 +- .../pages/agents/troubleshooting.adoc | 32 ++- .../tutorials/customer-support-agent.adoc | 8 +- .../ai-agents/pages/mcp/local/overview.adoc | 4 +- modules/ai-agents/pages/mcp/overview.adoc | 6 +- .../pages/mcp/remote/best-practices.adoc | 6 +- .../ai-agents/pages/mcp/remote/concepts.adoc | 8 +- .../pages/mcp/remote/create-tool.adoc | 10 +- .../pages/mcp/remote/manage-servers.adoc | 6 +- .../pages/mcp/remote/monitor-mcp-servers.adoc | 81 +++--- .../ai-agents/pages/mcp/remote/overview.adoc | 6 +- .../pages/mcp/remote/quickstart.adoc | 14 +- .../pages/mcp/remote/tool-patterns.adoc | 8 +- .../pages/mcp/remote/troubleshooting.adoc | 6 +- .../pages/observability/concepts.adoc | 237 ++++++++++++++++-- .../partials/transcripts-ui-guide.adoc | 89 +++++++ 27 files changed, 558 insertions(+), 463 deletions(-) create mode 100644 modules/ai-agents/partials/transcripts-ui-guide.adoc diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_shipping_info.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_shipping_info.yaml index 40ca21dfa..b0a15b497 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/get_shipping_info.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/get_shipping_info.yaml @@ -7,7 +7,7 @@ processors: { "order_id": $order_id, "tracking_number": "FX1234567890", - "carrier": "FedEx", + "carrier": "Example Shipping", "status": "in_transit", "estimated_delivery": "2025-01-17", "last_location": "San Francisco Distribution Center", diff --git a/modules/ai-agents/examples/mcp-tools/processors/order_workflow.yaml b/modules/ai-agents/examples/mcp-tools/processors/order_workflow.yaml index ad0dc29ee..aebaac897 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/order_workflow.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/order_workflow.yaml @@ -39,7 +39,7 @@ processors: root = this.merge({ "processing_tier": "premium", "processing_time_estimate": "2-4 hours", - "assigned_rep": "premium-team@company.com", + "assigned_rep": "premium-team@example.com", "priority_score": 95 }) @@ -51,7 +51,7 @@ processors: root = this.merge({ "processing_tier": "vip", "processing_time_estimate": "1-2 hours", - "assigned_rep": "vip-team@company.com", + "assigned_rep": "vip-team@example.com", "priority_score": 90, "perks": ["expedited_shipping", "white_glove_service"] }) @@ -63,7 +63,7 @@ processors: root = this.merge({ "processing_tier": "standard", "processing_time_estimate": "24-48 hours", - "assigned_rep": "support@company.com", + "assigned_rep": "support@example.com", "priority_score": 50 }) diff --git a/modules/ai-agents/pages/agents/a2a-concepts.adoc b/modules/ai-agents/pages/agents/a2a-concepts.adoc index 1b58a4bee..0e08e2219 100644 --- a/modules/ai-agents/pages/agents/a2a-concepts.adoc +++ b/modules/ai-agents/pages/agents/a2a-concepts.adoc @@ -23,10 +23,10 @@ Agents that implement A2A expose their capabilities through a standardized agent The protocol provides: -* **Standardized discovery:** Agent cards describe capabilities in a machine-readable format. -* **Platform independence:** Any system can call any A2A-compliant agent. -* **Version negotiation:** Protocol versions ensure compatibility between agents. -* **Communication mode flexibility:** Supports synchronous request/response and streaming. +* Standardized discovery: Agent cards describe capabilities in a machine-readable format. +* Platform independence: Any system can call any A2A-compliant agent. +* Version negotiation: Protocol versions ensure compatibility between agents. +* Communication mode flexibility: Supports synchronous request/response and streaming. For the complete specification, see link:https://a2a.ag/spec[a2a.ag/spec^]. @@ -49,10 +49,10 @@ The `.well-known` path follows internet standards for service discovery, making An agent card describes: -* **Agent capabilities:** Skills and tools the agent provides. -* **Input/output formats:** Expected request and response structures. -* **Protocol version:** A2A specification version the agent supports. -* **Communication modes:** Whether the agent supports synchronous calls, streaming, or both. +* Agent capabilities: Skills and tools the agent provides. +* Input/output formats: Expected request and response structures. +* Protocol version: A2A specification version the agent supports. +* Communication modes: Whether the agent supports synchronous calls, streaming, or both. Example agent card structure: @@ -89,19 +89,13 @@ For integration pattern guidance, see xref:ai-agents:agents/integration-overview === Internal pipeline-to-agent integration -Redpanda Connect pipelines use the xref:develop:connect/components/processors/a2a_message.adoc[`a2a_message`] processor to invoke agents for each event in a stream: - ----- -Redpanda Connect Pipeline sends events to a2a_message (A2A) which invokes Redpanda Cloud Agent ----- - -Use cases: +Redpanda Connect pipelines use the xref:develop:connect/components/processors/a2a_message.adoc[`a2a_message`] processor to invoke agents for each event in a stream. This enables real-time interaction between streaming data and AI agents, enabling use cases like: * Real-time fraud detection on every transaction. * Streaming data enrichment with AI-generated fields. * Event-driven agent invocation for automated processing. -The xref:develop:connect/components/processors/a2a_message.adoc[`a2a_message`] processor uses A2A protocol internally to discover and call agents. For pipeline patterns, see xref:ai-agents:agents/pipeline-integration-patterns.adoc[]. +The `a2a_message` processor uses the A2A protocol internally to discover and call agents. For pipeline patterns, see xref:ai-agents:agents/pipeline-integration-patterns.adoc[]. == How agents discover each other @@ -133,9 +127,9 @@ External callers use these credentials to obtain access tokens: This flow ensures: -* **Credentials stay secure:** Applications never send them directly to agents, only access tokens. -* **Exposure is limited:** Tokens expire, reducing the window for compromised credentials. -* **Integration is standard:** Applications can use existing OAuth2 libraries. +* Credentials stay secure: Applications never send them directly to agents, only access tokens. +* Exposure is limited: Tokens expire, reducing the window for compromised credentials. +* Integration is standard: Applications can use existing OAuth2 libraries. === External integration @@ -153,6 +147,6 @@ The A2A protocol uses semantic versioning (major.minor.patch). Agents declare th == Next steps -* xref:ai-agents:agents/integration-overview.adoc[]: Choose the right integration pattern for your use case -* xref:ai-agents:agents/create-agent.adoc[]: Create an agent that exposes an A2A agent card -* link:https://a2a.ag/spec[A2A Protocol Specification^]: Complete technical reference +* xref:ai-agents:agents/integration-overview.adoc[] +* xref:ai-agents:agents/create-agent.adoc[] +* link:https://a2a.ag/spec[A2A Protocol Specification^] diff --git a/modules/ai-agents/pages/agents/architecture-patterns.adoc b/modules/ai-agents/pages/agents/architecture-patterns.adoc index 69097e040..1e619a2c4 100644 --- a/modules/ai-agents/pages/agents/architecture-patterns.adoc +++ b/modules/ai-agents/pages/agents/architecture-patterns.adoc @@ -18,14 +18,10 @@ After reading this page, you will be able to: Agent architecture determines how you manage complexity as your system grows. The right pattern depends on your domain complexity, organizational structure, and how you expect requirements to evolve. -=== When simple agents become unmaintainable - -Single agents work well initially but break down as complexity grows. +Starting with a simple architecture is tempting, but can lead to unmaintainable systems as complexity increases. Planning for growth with clear boundaries prevents technical debt and costly refactoring later. Warning signs include system prompts exceeding 2000 words, too many tools for the LLM to select correctly, multiple teams modifying the same agent, and changes in one domain breaking others. These symptoms indicate you need architectural boundaries, not just better prompts. -=== Domain complexity drives architecture - Match agent architecture to domain structure: [cols="2,3,3"] @@ -45,7 +41,6 @@ Match agent architecture to domain structure: | Organizational boundaries require system boundaries |=== -=== Trade-offs Every architecture pattern involves trade-offs. @@ -131,33 +126,6 @@ External A2A lets different teams own and deploy their agents independently, wit External A2A adds network latency on every cross-agent call, and authentication complexity multiplies with each agent requiring credential management. Removing capabilities or changing contracts requires coordination across consuming systems, and debugging requires tracing requests across organizational boundaries. -=== Choosing between patterns - -[cols="1,2,2"] -|=== -| Use Case | Internal Subagents | External A2A - -| Domain separation within one team -| Recommended -| Unnecessary complexity - -| Cross-organization workflows -| Not possible -| Required - -| Shared infrastructure acceptable -| Simpler -| Use external if independence needed - -| Different deployment requirements -| Limited (same cluster) -| Full flexibility - -| Real-time performance critical -| Lower latency -| Higher latency -|=== - For implementation details on external A2A integration, see xref:ai-agents:agents/integration-overview.adoc[]. == Common anti-patterns @@ -252,31 +220,10 @@ Use retry logic for transient failures like network timeouts. Report permanent f Provide clear error messages to users. Log errors for debugging. -== Summary - -Choose architecture patterns based on domain complexity and organizational needs: - -[cols="1,2,2"] -|=== -| Pattern | Use When | Trade-off - -| Single agent -| Narrow domain, single organization -| Limited scalability - -| Internal subagents -| Complex domains, shared infrastructure -| Higher operational complexity - -| External A2A -| Multi-organization, independent systems -| Network latency, coordination overhead -|=== - == Next steps -* xref:ai-agents:agents/integration-overview.adoc[]: Choose between agents invoking tools and pipelines calling agents -* xref:ai-agents:agents/a2a-concepts.adoc[]: Learn how the A2A protocol enables agent communication -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Explore tool design patterns -* xref:ai-agents:agents/overview.adoc[]: Review agent components -* xref:ai-agents:mcp/remote/best-practices.adoc[]: Learn MCP tool best practices +* xref:ai-agents:agents/integration-overview.adoc[] +* xref:ai-agents:agents/a2a-concepts.adoc[] +* xref:ai-agents:mcp/remote/tool-patterns.adoc[] +* xref:ai-agents:agents/overview.adoc[] +* xref:ai-agents:mcp/remote/best-practices.adoc[] diff --git a/modules/ai-agents/pages/agents/concepts.adoc b/modules/ai-agents/pages/agents/concepts.adoc index 5de95ceee..43cc6e2c6 100644 --- a/modules/ai-agents/pages/agents/concepts.adoc +++ b/modules/ai-agents/pages/agents/concepts.adoc @@ -133,8 +133,6 @@ The agent's context includes the system prompt (always present), user messages, Agents persist conversation context within a session. When you use the *Inspector* tab in the Redpanda Cloud Console, it automatically maintains session state across multiple requests. For programmatic access, applications must pass a session ID to maintain conversation continuity across requests. -All conversation data is stored in the agent's sessions topic. For details on accessing conversation history, see <>. - === Context window limits LLM context windows limit how much history fits. Small models support 8K-32K tokens, medium models support 32K-128K tokens, and large models support 128K-1M+ tokens. @@ -145,120 +143,13 @@ Design workflows to complete within context limits. Avoid unbounded tool chainin === State across conversations -Redpanda Cloud automatically persists conversation history and task execution data to agent-specific topics: - -* *Sessions topic* (`redpanda.aiagent..sessions`): Stores all conversation messages and history -* *Tasks topic* (`redpanda.aiagent..tasks`): Stores task execution records with status and artifacts - -The *Inspector* tab automatically manages sessions for you. For programmatic integration, pass a session ID in API requests to maintain conversation continuity. - -You can consume from these topics to: - -* Review past conversations and agent responses -* Analyze conversation patterns and common requests -* Debug agent behavior by examining full conversation history -* Build conversation analytics and monitoring dashboards -* Implement custom conversation management in your application - -For complete details on topic schemas and usage, see <>. +Redpanda Cloud automatically persists conversation history. The *Inspector* tab automatically manages sessions for you. For programmatic integration, pass a session ID in API requests to maintain conversation continuity. If you need additional state management beyond conversation history, create tools that read/write to custom state stores, or pass relevant context in each request. -[[agent-data-topics]] -== Agent data topics - -Each agent automatically creates two topics for storing session and task data: - -* `redpanda.aiagent..sessions`: Conversation history and session state -* `redpanda.aiagent..tasks`: Task execution records with status and artifacts - -Two schemas are also registered: `redpanda-session-value` and `redpanda-a2a-task-value`. - -Redpanda uses these topics internally to persist conversation history and reload context when sessions resume. This allows agents to maintain continuity across interactions. - -These topics and schemas are managed automatically by Redpanda. If you delete either a topic or schema, they are recreated automatically. However, deleting a topic permanently deletes all stored data (including conversation history), and the topic comes back empty. Do not produce your own data to these topics. They are reserved for agent data. - -For guidance on consuming these topics, analyzing conversation history, and monitoring agent performance, see xref:ai-agents:agents/monitor-agents.adoc[]. - -=== Sessions topic - -The sessions topic stores conversation data, including all messages exchanged between users and the agent: - -[source,json] ----- -{ - "id": "agent-chat-abc123-WqyUmxv0fuACoSE69MCx4", - "messages": [ - { - "role": "MESSAGE_ROLE_USER", - "content": [ - { - "kind": "PART_KIND_TEXT", - "text": "What's the weather in Seattle?" - } - ] - }, - { - "role": "MESSAGE_ROLE_ASSISTANT", - "content": [ - { - "kind": "PART_KIND_TEXT", - "text": "The current weather in Seattle is 52°F with light rain." - } - ] - } - ], - "metadata": {} -} ----- - -Use session data for debugging conversation flow, auditing agent interactions, and building conversation analytics. - -=== Tasks topic - -The tasks topic stores execution records for each agent task, including status, artifacts, message history, and token usage: - -[source,json] ----- -{ - "id": "019bc2d5-13e0-785b-9ff4-a218708e52bc", - "contextId": "agent-chat-abc123-oGoqyBCeH5RHTsit8qpRi", - "status": { - "state": "TASK_STATE_COMPLETED", - "timestamp": "2026-01-15T18:05:03.993157355Z" - }, - "artifacts": [ - { - "artifactId": "019bc2d5-186a-76c7-97d1-feb13c75a2d4", - "parts": [ - { - "text": "The current weather in Seattle is 52°F with light rain." - } - ] - } - ], - "history": [...], - "metadata": { - "usage": { - "input_tokens": 64, - "output_tokens": 9, - "total_tokens": 130 - } - } -} ----- - -Task states include: - -* `TASK_STATE_COMPLETED`: Task finished successfully -* `TASK_STATE_FAILED`: Task encountered an error -* `TASK_STATE_RUNNING`: Task is in progress - -Use task data for monitoring task completion rates, tracking token usage and costs, debugging failed tasks, and building operational dashboards. - == Next steps -* xref:ai-agents:agents/architecture-patterns.adoc[]: Apply these concepts to design patterns -* xref:ai-agents:agents/quickstart.adoc[]: See execution concepts in action -* xref:ai-agents:agents/prompt-best-practices.adoc[]: Write prompts that guide agent reasoning -* xref:ai-agents:mcp/remote/best-practices.adoc[]: Design tools that work well with agent execution +* xref:ai-agents:agents/architecture-patterns.adoc[] +* xref:ai-agents:agents/quickstart.adoc[] +* xref:ai-agents:agents/prompt-best-practices.adoc[] +* xref:ai-agents:mcp/remote/best-practices.adoc[] diff --git a/modules/ai-agents/pages/agents/create-agent.adoc b/modules/ai-agents/pages/agents/create-agent.adoc index a59a011e8..ae4e60750 100644 --- a/modules/ai-agents/pages/agents/create-agent.adoc +++ b/modules/ai-agents/pages/agents/create-agent.adoc @@ -166,24 +166,19 @@ For multi-agent design patterns, see xref:ai-agents:agents/architecture-patterns Max iterations determine how many reasoning loops the agent can perform before stopping. Each iteration consumes tokens and adds latency. For detailed cost calculations and the cost/capability/latency trade-off, see xref:ai-agents:agents/concepts.adoc[]. -. In the *Execution Settings* section, configure *Max Iterations* (range: 10-100, default: 30). -+ +In the *Execution Settings* section, configure *Max Iterations* (range: 10-100, default: 30). + Choose based on task complexity: -+ + * **Simple queries** (10-20): Single tool call, direct answers, minimal reasoning * **Balanced workflows** (20-40): Multiple tool calls, data aggregation, moderate analysis * **Complex analysis** (40-100): Exploratory queries, extensive tool chaining, deep reasoning -+ + Start with 30 for most use cases. === Review and create -. Review all settings: -+ -* Model and API key -* System prompt -* Selected tools -* Max iterations +. Review all settings. . Configure the service account name (optional): + @@ -209,17 +204,19 @@ For programmatic access or external agent integration, see xref:ai-agents:agents == Test your agent -. In the agent details view, click *Test*. -. Enter a test query. +. In the agent details view, click the *Inspector* tab. +. Enter a test prompt. . Verify the agent: + * Selects appropriate tools * Follows system prompt constraints * Returns expected output format -. Iterate on system prompt or tool selection as needed. +. Iterate on the system prompt or tool selection as needed. + +== Example configurations -== Examples +Here are example configurations for different agent types: === Simple query agent @@ -245,8 +242,8 @@ For programmatic access or external agent integration, see xref:ai-agents:agents == Next steps -* xref:ai-agents:agents/integration-overview.adoc[]: Connect your agent to external applications and pipelines -* xref:ai-agents:agents/prompt-best-practices.adoc[]: Refine your system prompts -* xref:ai-agents:mcp/remote/create-tool.adoc[]: Create additional tools -* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems -* xref:ai-agents:agents/troubleshooting.adoc[]: Diagnose and fix common agent issues +* xref:ai-agents:agents/integration-overview.adoc[] +* xref:ai-agents:agents/prompt-best-practices.adoc[] +* xref:ai-agents:mcp/remote/create-tool.adoc[] +* xref:ai-agents:agents/architecture-patterns.adoc[] +* xref:ai-agents:agents/troubleshooting.adoc[] diff --git a/modules/ai-agents/pages/agents/integration-overview.adoc b/modules/ai-agents/pages/agents/integration-overview.adoc index 3efc49408..ecba9080b 100644 --- a/modules/ai-agents/pages/agents/integration-overview.adoc +++ b/modules/ai-agents/pages/agents/integration-overview.adoc @@ -123,6 +123,6 @@ Access tokens grant full access to the agent. Anyone with a valid token can send == Next steps -* xref:ai-agents:agents/a2a-concepts.adoc[]: Learn about the A2A protocol that powers agent communication -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Explore MCP tool patterns and examples -* xref:ai-agents:agents/pipeline-integration-patterns.adoc[]: Build pipelines that call agents +* xref:ai-agents:agents/a2a-concepts.adoc[] +* xref:ai-agents:mcp/remote/tool-patterns.adoc[] +* xref:ai-agents:agents/pipeline-integration-patterns.adoc[] diff --git a/modules/ai-agents/pages/agents/monitor-agents.adoc b/modules/ai-agents/pages/agents/monitor-agents.adoc index d4ea356c7..def5c6d63 100644 --- a/modules/ai-agents/pages/agents/monitor-agents.adoc +++ b/modules/ai-agents/pages/agents/monitor-agents.adoc @@ -1,12 +1,12 @@ = Monitor Agent Activity -:description: Monitor agent execution, analyze conversation history, track token usage, and debug issues using Inspector, Transcripts, and agent data topics. +:description: Monitor agent execution, analyze conversation history, track token usage, and debug issues using inspector, transcripts, and agent data topics. :page-topic-type: how-to :personas: agent_developer, platform_admin -:learning-objective-1: Test agents interactively using the Inspector tab -:learning-objective-2: Consume session and task topics for analysis -:learning-objective-3: Debug agent behavior using Transcripts +:learning-objective-1: pass:q[Verify agent behavior using the *Inspector* tab] +:learning-objective-2: Track token usage and performance metrics +:learning-objective-3: Debug agent execution using transcripts -Monitor your agents to track performance, analyze conversations, debug issues, and optimize costs. +Use monitoring to track agent performance, analyze conversation patterns, debug execution issues, and optimize token costs. After reading this page, you will be able to: @@ -20,157 +20,114 @@ For conceptual background on traces and observability, see xref:ai-agents:observ You must have a running agent. If you do not have one, see xref:ai-agents:agents/quickstart.adoc[]. -== Test agents interactively +== Debug agent execution with transcripts -The *Inspector* tab provides real-time conversation testing and debugging. Use it to test agent responses interactively, view full conversation history, see tool invocations and results, monitor token usage per request, and test error scenarios. +The transcripts view shows execution traces with detailed timing, errors, and performance metrics. Use this view to debug issues, verify agent behavior, and monitor performance in real-time. -=== Access the Inspector +:context: agent +include::ai-agents:partial$transcripts-ui-guide.adoc[] -. Navigate to *Agentic AI* > *AI Agents* in the Redpanda Cloud Console. -. Click your agent name. -. Open the *Inspector* tab. -. Enter test queries and review responses. -. Check the conversation panel to see tool calls. -. Start a new session to test fresh conversations. - -=== Testing best practices - -Test your agents systematically with these scenarios: - -* **Boundary cases**: Test requests at the edge of agent capabilities to verify scope enforcement. -* **Error handling**: Request unavailable data to verify graceful degradation. -* **Iteration count**: Monitor how many iterations complex requests require. -* **Ambiguous input**: Send vague queries to verify clarification behavior. -* **Token usage**: Track tokens per request to estimate costs. +=== Check agent health -== View execution traces +Use the transcripts view to verify your agent is healthy: -The *Transcripts* view shows agent execution traces with detailed timing and error information. Transcripts capture agent startup and initialization, request and response flow, tool invocations and results, error messages and failures, token usage per request, and OpenTelemetry trace data. +Healthy agent indicators: -=== Access Transcripts - -. Navigate to *Agentic AI* > *AI Agents*. -. Click your agent name. -. Click *Transcripts* in the left navigation. -. Select a transcript to view execution details. +* Timeline shows consistent green bars (successful executions) +* Duration stays within expected range (check summary panel) +* Token usage is stable (not growing unexpectedly) +* LLM calls match expected patterns (1-3 calls for simple queries) +* No error bars in timeline -Use Transcripts when diagnosing deployment issues (agent won't start), debugging tool execution errors, investigating unexpected agent behavior, analyzing conversation flow, or verifying tool selection logic. +Warning signs: -== Consume agent data topics +* Red bars in timeline: Errors or failures, click to investigate +* Increasing duration: May indicate context window growth or slow tool calls +* High token usage: Check if conversation history is too long +* Many LLM calls: Agent may be stuck in loops or making unnecessary iterations +* Missing transcripts: Agent may be stopped or encountering deployment issues -Agents emit structured data to two Redpanda topics for monitoring and analysis. +Common patterns to investigate: -=== Sessions topic +* All recent transcripts show errors: Check agent status, MCP server connectivity, or system prompt +* Duration increasing over session: Context window filling up, consider clearing conversation history +* Spiky timeline (alternating success/error): Intermittent tool failures or external API issues +* High token usage with few LLM calls: Large tool results or verbose system prompts -The sessions topic (`redpanda.aiagent..sessions`) contains all conversation messages. This topic lets you review past conversations, analyze conversation patterns, debug multi-turn interactions, and understand context management. +=== Debug with transcripts -=== Tasks topic +Use transcripts to diagnose specific issues: -The tasks topic (`redpanda.aiagent..tasks`) contains task execution records with status and artifacts. Use this topic to monitor task completion rates, track token usage and costs, debug failed tasks, and analyze agent performance. +Agent not responding -=== Access agent topics +. Check the timeline for recent transcripts. If none appear, the agent may be stopped. +. Verify agent status in the main *AI Agents* view. +. Look for error transcripts with deployment or initialization failures. -[tabs] -===== -Cloud Console:: -+ --- -. Navigate to *Topics* in the Redpanda Cloud Console. -. Find `redpanda.aiagent..sessions` or `redpanda.aiagent..tasks`. -. Click *Messages* to view recent data. -. Use filters to search for specific sessions or task states. --- +Tool execution errors -rpk:: -+ --- -Consume recent sessions: +. Select the failed transcript (red bar in timeline). +. Expand the trace hierarchy to find the tool invocation span. +. Check the span details for error messages. +. Cross-reference with MCP server status. -[,bash] ----- -rpk topic consume redpanda.aiagent..sessions --offset end -n 10 ----- +Slow performance -Consume recent tasks: +. Compare duration across multiple transcripts in the summary panel. +. Look for specific spans with long durations (wide bars in trace list). +. Check if LLM calls are taking longer than expected. +. Verify tool execution time by examining nested spans. -[,bash] ----- -rpk topic consume redpanda.aiagent..tasks --offset end -n 10 ----- --- +Unexpected behavior -Data Plane API:: -+ --- -Use the link:/api/doc/cloud-dataplane/[Data Plane API] to programmatically consume agent data and integrate with your monitoring pipeline. --- -===== +. Select the transcript for the problematic request. +. Expand the full trace hierarchy to see all operations. +. Look for missing tool calls (agent didn't invoke expected tools). +. Check LLM call count: excessive calls may indicate loops. -For schema details, see xref:ai-agents:agents/concepts.adoc#agent-data-topics[Agent data topics]. +=== Track token usage and costs -== Analyze conversation history +View token consumption in the Summary panel when you select a transcript: -Use conversation history to identify behavior patterns and diagnose issues. When analyzing conversations, watch for agents calling the same tool repeatedly (indicates loop detection is needed), large gaps between messages (suggests tool timeout or slow execution), agent responses without tool calls (indicates a tool selection issue), fabricated information (suggests a missing "never make up data" constraint), and truncated early messages (indicates the context window was exceeded). +* Input tokens: Tokens sent to the LLM (system prompt + conversation history + tool results) +* Output tokens: Tokens generated by the LLM (agent responses) +* Total tokens: Sum of input and output -=== Analysis workflow +Calculate cost per request: -. Use Inspector to reproduce the issue. -. Review full conversation including tool invocations. -. Identify where agent behavior diverged from expected. -. Check system prompt for missing guidance. -. Verify tool responses are formatted correctly. - -== Track token usage - -Monitor token consumption to optimize costs and set appropriate iteration limits. Token usage appears in three places: the *Inspector* tab shows tokens per request during interactive testing, the *Tasks* topic contains `usage` metadata with input/output/total tokens, and *Transcripts* displays token counts for each execution. - -=== Calculate costs - -Use token data from the tasks topic to estimate costs: - -[,bash] ---- -Cost per request = (total_tokens × model_price_per_token) +Cost = (input_tokens × input_price) + (output_tokens × output_price) ---- -Track costs over time by consuming the tasks topic, extracting `metadata.usage.total_tokens` from each task, multiplying by your model's token price, and aggregating by time period. +Example: GPT-4o with 4,302 input tokens and 1,340 output tokens at $0.0000025 per input token and $0.00001 per output token costs $0.024 per request. For cost optimization strategies, see xref:ai-agents:agents/concepts.adoc#cost-calculation[Cost calculation]. -== Monitor performance - -Track agent performance metrics to identify bottlenecks. The table below shows key metrics you can extract from agent data topics: - -[cols="2,3", options="header"] -|=== -| Metric | Description - -| Task completion rate -| Percentage of tasks with `TASK_STATE_COMPLETED` +== Test agent behavior with the inspector -| Average iterations -| Mean iterations per task from conversation history +The *Inspector* tab provides real-time conversation testing. Use it to test agent responses interactively and verify behavior before deploying changes. -| Token efficiency -| Tokens consumed per successful task completion +=== Access the inspector -| Tool invocation frequency -| Which tools are called most often +. Navigate to *Agentic AI* > *AI Agents* in the Redpanda Cloud Console. +. Click your agent name. +. Open the *Inspector* tab. +. Enter test queries and review responses. +. Check the conversation panel to see tool calls. +. Start a new session to test fresh conversations or click *Clear context* to reset history. -| Error rate -| Percentage of tasks with `TASK_STATE_FAILED` -|=== +=== Testing best practices -=== Performance analysis +Test your agents systematically with these scenarios: -. Consume the tasks topic over a time window. -. Calculate completion rate: `completed_tasks / total_tasks`. -. Identify high iteration tasks for prompt optimization. -. Track token usage trends over time. -. Correlate errors with specific tool invocations. +* Boundary cases: Test requests at the edge of agent capabilities to verify scope enforcement. +* Error handling: Request unavailable data to verify graceful degradation. +* Iteration count: Monitor how many iterations complex requests require. +* Ambiguous input: Send vague queries to verify clarification behavior. +* Token usage: Track tokens per request to estimate costs. == Next steps -* xref:ai-agents:observability/concepts.adoc[]: Understand trace structure and OpenTelemetry spans -* xref:ai-agents:agents/troubleshooting.adoc[]: Diagnose and fix common agent issues -* xref:ai-agents:agents/concepts.adoc[]: Learn about agent execution and cost calculation +* xref:ai-agents:observability/concepts.adoc[] +* xref:ai-agents:agents/troubleshooting.adoc[] +* xref:ai-agents:agents/concepts.adoc[] diff --git a/modules/ai-agents/pages/agents/overview.adoc b/modules/ai-agents/pages/agents/overview.adoc index 1e2120e1b..1b8af540b 100644 --- a/modules/ai-agents/pages/agents/overview.adoc +++ b/modules/ai-agents/pages/agents/overview.adoc @@ -61,8 +61,8 @@ Process every event with AI reasoning at scale. Invoke agents automatically from == Next steps -* xref:ai-agents:agents/quickstart.adoc[]: Get your first agent running -* xref:ai-agents:agents/concepts.adoc[]: Understand agent execution, context, and state management -* xref:ai-agents:agents/architecture-patterns.adoc[]: Explore agent design patterns -* xref:ai-agents:agents/integration-overview.adoc[]: Choose between agents invoking tools and pipelines calling agents -* xref:ai-agents:agents/create-agent.adoc[]: Create an agent through the Cloud Console +* xref:ai-agents:agents/quickstart.adoc[] +* xref:ai-agents:agents/concepts.adoc[] +* xref:ai-agents:agents/architecture-patterns.adoc[] +* xref:ai-agents:agents/integration-overview.adoc[] +* xref:ai-agents:agents/create-agent.adoc[] diff --git a/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc b/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc index e47fa1856..6395d344c 100644 --- a/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc +++ b/modules/ai-agents/pages/agents/pipeline-integration-patterns.adoc @@ -137,7 +137,7 @@ This pipeline: == Next steps -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Explore MCP tool patterns for agent-initiated integration -* xref:ai-agents:agents/integration-overview.adoc[]: Review all integration patterns -* xref:ai-agents:agents/a2a-concepts.adoc[]: Learn how the `a2a_message` processor uses the A2A protocol -* xref:develop:connect/components/processors/about.adoc[]: Learn about Redpanda Connect processors +* xref:ai-agents:mcp/remote/tool-patterns.adoc[] +* xref:ai-agents:agents/integration-overview.adoc[] +* xref:ai-agents:agents/a2a-concepts.adoc[] +* xref:develop:connect/components/processors/about.adoc[] diff --git a/modules/ai-agents/pages/agents/prompt-best-practices.adoc b/modules/ai-agents/pages/agents/prompt-best-practices.adoc index 7da48eb56..f0f83ce57 100644 --- a/modules/ai-agents/pages/agents/prompt-best-practices.adoc +++ b/modules/ai-agents/pages/agents/prompt-best-practices.adoc @@ -419,6 +419,6 @@ Decision criteria enable reliable tool selection based on request context. == Next steps -* xref:ai-agents:agents/quickstart.adoc[]: Create an agent with your system prompt -* xref:ai-agents:agents/overview.adoc[]: Review agent components -* xref:ai-agents:mcp/remote/best-practices.adoc[]: Learn MCP tool design patterns +* xref:ai-agents:agents/quickstart.adoc[] +* xref:ai-agents:agents/overview.adoc[] +* xref:ai-agents:mcp/remote/best-practices.adoc[] diff --git a/modules/ai-agents/pages/agents/quickstart.adoc b/modules/ai-agents/pages/agents/quickstart.adoc index 526c1368f..8e25a0c02 100644 --- a/modules/ai-agents/pages/agents/quickstart.adoc +++ b/modules/ai-agents/pages/agents/quickstart.adoc @@ -187,8 +187,8 @@ Common quickstart issues: You've created an agent that orchestrates MCP tools through natural language. Explore more: -* xref:ai-agents:agents/overview.adoc[]: Learn the four essential agent components -* xref:ai-agents:agents/create-agent.adoc[]: Deep dive into agent configuration options -* xref:ai-agents:agents/prompt-best-practices.adoc[]: Write better system prompts -* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find more tool patterns to add to your agent +* xref:ai-agents:agents/overview.adoc[] +* xref:ai-agents:agents/create-agent.adoc[] +* xref:ai-agents:agents/prompt-best-practices.adoc[] +* xref:ai-agents:agents/architecture-patterns.adoc[] +* xref:ai-agents:mcp/remote/tool-patterns.adoc[] diff --git a/modules/ai-agents/pages/agents/troubleshooting.adoc b/modules/ai-agents/pages/agents/troubleshooting.adoc index f51dbd91d..9f55ad422 100644 --- a/modules/ai-agents/pages/agents/troubleshooting.adoc +++ b/modules/ai-agents/pages/agents/troubleshooting.adoc @@ -177,6 +177,28 @@ Critical rules: * Test with requests that require unavailable data * Monitor transcripts and session topic for fabricated responses +=== Analyzing conversation patterns + +**Symptoms:** Agent behavior is inconsistent or produces unexpected results. + +**Solution:** + +Review conversation history in transcripts to identify problematic patterns: + +* Agents calling the same tool repeatedly: Indicates loop detection is needed +* Large gaps between messages: Suggests tool timeout or slow execution +* Agent responses without tool calls: Indicates a tool selection issue +* Fabricated information: Suggests a missing "never make up data" constraint +* Truncated early messages: Indicates the context window was exceeded + +**Analysis workflow:** + +. Use inspector to reproduce the issue. +. Review full conversation including tool invocations. +. Identify where agent behavior diverged from expected. +. Check system prompt for missing guidance. +. Verify tool responses are formatted correctly. + == Performance issues Diagnose and fix issues related to agent speed and resource consumption. @@ -225,7 +247,7 @@ Diagnose and fix issues related to agent speed and resource consumption. **Solution:** -. Review token usage in the tasks topic. +. Review token usage in transcripts. . Lower max iterations for this agent. . Optimize tool responses to return less data: + @@ -429,7 +451,7 @@ For comprehensive guidance on monitoring agent activity, analyzing conversation == Next steps -* xref:ai-agents:agents/prompt-best-practices.adoc[]: Write better system prompts to prevent common issues -* xref:ai-agents:agents/concepts.adoc[]: Understand agent execution and context management -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Design reliable tools -* xref:ai-agents:agents/architecture-patterns.adoc[]: Apply scalable design patterns +* xref:ai-agents:agents/prompt-best-practices.adoc[] +* xref:ai-agents:agents/concepts.adoc[] +* xref:ai-agents:mcp/remote/tool-patterns.adoc[] +* xref:ai-agents:agents/architecture-patterns.adoc[] diff --git a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc index 352ee08d1..4c239340c 100644 --- a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc +++ b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc @@ -354,7 +354,7 @@ Use these documented test IDs when testing the agent. If you replace the mock to == Next steps -* xref:ai-agents:mcp/remote/tool-patterns.adoc#call-external-apis[Call external APIs]: Replace mock tools with HTTP API calls -* xref:ai-agents:agents/prompt-best-practices.adoc[]: Learn more system prompt patterns -* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems -* xref:ai-agents:agents/troubleshooting.adoc[]: Debug agent behavior issues +* xref:ai-agents:mcp/remote/tool-patterns.adoc#call-external-apis[Call external APIs] +* xref:ai-agents:agents/prompt-best-practices.adoc[] +* xref:ai-agents:agents/architecture-patterns.adoc[] +* xref:ai-agents:agents/troubleshooting.adoc[] diff --git a/modules/ai-agents/pages/mcp/local/overview.adoc b/modules/ai-agents/pages/mcp/local/overview.adoc index a27e3df25..6b2643a34 100644 --- a/modules/ai-agents/pages/mcp/local/overview.adoc +++ b/modules/ai-agents/pages/mcp/local/overview.adoc @@ -66,7 +66,7 @@ MCP servers authenticate to Redpanda Cloud using your personal or service accoun == Next steps -* xref:ai-agents:mcp/local/quickstart.adoc[Redpanda Cloud Management MCP Server quickstart] -* xref:ai-agents:mcp/local/configuration.adoc[Configure the Redpanda Cloud Management MCP Server] +* xref:ai-agents:mcp/local/quickstart.adoc[] +* xref:ai-agents:mcp/local/configuration.adoc[] TIP: The Redpanda documentation site has a read-only MCP server that provides access to Redpanda docs and examples. This server has no access to your Redpanda Cloud account or clusters. See xref:home:ROOT:mcp-setup.adoc[]. diff --git a/modules/ai-agents/pages/mcp/overview.adoc b/modules/ai-agents/pages/mcp/overview.adoc index 4e4282b7a..964be2dc5 100644 --- a/modules/ai-agents/pages/mcp/overview.adoc +++ b/modules/ai-agents/pages/mcp/overview.adoc @@ -85,9 +85,9 @@ You can use both options together. For example, use the Redpanda Cloud Managemen == Get started -* xref:ai-agents:mcp/local/quickstart.adoc[]: Connect Claude to your Redpanda Cloud account -* xref:ai-agents:mcp/remote/quickstart.adoc[]: Build and deploy custom MCP tools +* xref:ai-agents:mcp/local/quickstart.adoc[] +* xref:ai-agents:mcp/remote/quickstart.adoc[] == Suggested reading -* xref:home:ROOT:mcp-setup.adoc[]: Access Redpanda documentation through AI agents (read-only, no Cloud access required) +* xref:home:ROOT:mcp-setup.adoc[] diff --git a/modules/ai-agents/pages/mcp/remote/best-practices.adoc b/modules/ai-agents/pages/mcp/remote/best-practices.adoc index bf1eed69c..81738ab01 100644 --- a/modules/ai-agents/pages/mcp/remote/best-practices.adoc +++ b/modules/ai-agents/pages/mcp/remote/best-practices.adoc @@ -37,6 +37,6 @@ include::redpanda-connect:ai-agents:example$best-practices/mcp-metadata/search-c == Next steps -* xref:ai-agents:mcp/remote/create-tool.adoc#secrets[Use secrets]: Store credentials securely in the Secrets Store -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find reusable patterns including validation, error handling, and response formatting -* xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose common issues +* xref:ai-agents:mcp/remote/create-tool.adoc#secrets[Use secrets for credentials] +* xref:ai-agents:mcp/remote/tool-patterns.adoc[] +* xref:ai-agents:mcp/remote/troubleshooting.adoc[] diff --git a/modules/ai-agents/pages/mcp/remote/concepts.adoc b/modules/ai-agents/pages/mcp/remote/concepts.adoc index 57a366539..db7f22ada 100644 --- a/modules/ai-agents/pages/mcp/remote/concepts.adoc +++ b/modules/ai-agents/pages/mcp/remote/concepts.adoc @@ -39,7 +39,7 @@ To monitor MCP server activity, consume traces, and debug failures, see xref:ai- == Next steps -* xref:ai-agents:mcp/remote/create-tool.adoc[]: Create MCP tools for your agents -* xref:ai-agents:mcp/remote/best-practices.adoc[]: Apply naming and design guidelines -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find reusable patterns -* xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose common issues +* xref:ai-agents:mcp/remote/create-tool.adoc[] +* xref:ai-agents:mcp/remote/best-practices.adoc[] +* xref:ai-agents:mcp/remote/tool-patterns.adoc[] +* xref:ai-agents:mcp/remote/troubleshooting.adoc[] diff --git a/modules/ai-agents/pages/mcp/remote/create-tool.adoc b/modules/ai-agents/pages/mcp/remote/create-tool.adoc index ef40bdde9..d856b8607 100644 --- a/modules/ai-agents/pages/mcp/remote/create-tool.adoc +++ b/modules/ai-agents/pages/mcp/remote/create-tool.adoc @@ -253,8 +253,8 @@ include::ai-agents:example$mcp-tools/processors/get_weather_complete.yaml[tag=co == Next steps -* xref:ai-agents:agents/quickstart.adoc[]: Build an AI agent that uses your tools -* xref:ai-agents:mcp/remote/best-practices.adoc[]: Apply naming and design guidelines -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find patterns for databases, APIs, and Redpanda -* xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose common issues -* xref:develop:connect/components/about.adoc[]: Browse all available components +* xref:ai-agents:agents/quickstart.adoc[] +* xref:ai-agents:mcp/remote/best-practices.adoc[] +* xref:ai-agents:mcp/remote/tool-patterns.adoc[] +* xref:ai-agents:mcp/remote/troubleshooting.adoc[] +* xref:develop:connect/components/about.adoc[] diff --git a/modules/ai-agents/pages/mcp/remote/manage-servers.adoc b/modules/ai-agents/pages/mcp/remote/manage-servers.adoc index b1c993254..40fe836f7 100644 --- a/modules/ai-agents/pages/mcp/remote/manage-servers.adoc +++ b/modules/ai-agents/pages/mcp/remote/manage-servers.adoc @@ -162,6 +162,6 @@ Deletion is immediate and permanent. Make sure you have backed up any important == Next steps -* xref:ai-agents:mcp/remote/scale-resources.adoc[Scale MCP server resources] to optimize performance and costs. -* xref:ai-agents:mcp/remote/monitor-mcp-servers.adoc[Monitor MCP server activity] using OpenTelemetry traces. -* xref:ai-agents:mcp/remote/best-practices.adoc[Learn best practices] for building robust tools. +* xref:ai-agents:mcp/remote/scale-resources.adoc[] +* xref:ai-agents:mcp/remote/monitor-mcp-servers.adoc[] +* xref:ai-agents:mcp/remote/best-practices.adoc[] diff --git a/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc b/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc index b0ea50962..20813596a 100644 --- a/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc +++ b/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc @@ -6,7 +6,7 @@ :learning-objective-2: Track tool invocations and measure performance :learning-objective-3: Debug tool failures using trace data -Monitor MCP server activity using OpenTelemetry traces emitted to the `redpanda.otel_traces` topic. +Monitor MCP server activity using OpenTelemetry traces emitted to the `redpanda.otel_traces` glossterm:topic[]. After reading this page, you will be able to: @@ -20,9 +20,16 @@ For conceptual background on traces, spans, and the trace data structure, see xr You must have an existing MCP server. If you do not have one, see xref:ai-agents:mcp/remote/quickstart.adoc[]. -== Consume traces +== View transcripts in the Cloud Console -MCP servers emit OpenTelemetry traces to the `redpanda.otel_traces` topic. You can consume these traces using any Kafka-compatible client or the Redpanda Cloud Console. +:context: mcp +include::ai-agents:partial$transcripts-ui-guide.adoc[] + +== Analyze traces programmatically + +MCP servers emit OpenTelemetry traces to the `redpanda.otel_traces` topic. Consume these traces to build custom monitoring, track tool usage, and analyze performance. + +=== Consume traces [tabs] ===== @@ -51,61 +58,47 @@ Filter for specific MCP server activity by examining the span attributes. Data Plane API:: + -- -Use the link:/api/doc/cloud-dataplane/[Data Plane API] to programmatically consume traces and integrate with your monitoring pipeline. +Use the link:/api/doc/cloud-dataplane/[Data Plane API^] to programmatically consume traces and integrate with your monitoring pipeline. -- ===== -== Track tool invocations - -Monitor which tools are being called and how often: - -. Consume traces from `redpanda.otel_traces`. -. Filter spans where `instrumentationScope.name` is `rpcn-mcp`. -. Examine the `name` field to see which tools are being invoked. -. Calculate frequency by counting spans per tool name over time windows. - -Example: To find all invocations of a specific tool, filter for spans where `name` matches your tool name (for example, `weather`, `http_processor`). - -== Measure performance - -Analyze tool execution times: - -. Find spans with `instrumentationScope.name` set to `rpcn-mcp`. -. Calculate duration: `(endTimeUnixNano - startTimeUnixNano) / 1000000` (milliseconds). -. Track percentiles (p50, p95, p99) to identify performance issues. -. Set alerts for durations exceeding acceptable thresholds. +=== Track tool invocations -Example: A span with `startTimeUnixNano: "1765198415253280028"` and `endTimeUnixNano: "1765198424660663434"` has a duration of 9407ms. +Monitor which tools are being called and how often by filtering spans where `instrumentationScope.name` is `rpcn-mcp`. The `name` field shows which tool was invoked. -== Debug failures +Example: Find all invocations of a specific tool: -Investigate errors and failures: +[,bash] +---- +rpk topic consume redpanda.otel_traces --offset start \ + | jq 'select(.instrumentationScope.name == "rpcn-mcp" and .name == "weather")' +---- -. Filter spans where `status.code` is `2` (error). -. Examine `status.message` for error details. -. Check the `events` array for error events with timestamps. -. Use `traceId` to correlate related spans and understand the full error context. -. Follow `parentSpanId` relationships to trace the error back to the originating tool. +=== Measure performance -Example: A span with `status.code: 2` and `status.message: "connection timeout"` indicates the operation failed due to a timeout. +Calculate tool execution time using span timestamps: -== Correlate distributed operations +[,bash] +---- +Duration (ms) = (endTimeUnixNano - startTimeUnixNano) / 1000000 +---- -Link MCP server activity to downstream effects: +Track percentiles (p50, p95, p99) to identify performance issues and set alerts for durations exceeding acceptable thresholds. -. Extract `traceId` from tool invocation spans. -. Search for the same `traceId` in other application logs or traces. -. Follow `parentSpanId` relationships to build complete operation timelines. -. Identify bottlenecks across your entire system. +=== Debug failures -== Integrate with observability platforms +Filter for error spans where `status.code` is `2`: -The `redpanda.otel_traces` topic stores trace data in OpenTelemetry format. Redpanda does not support direct export to platforms like Grafana Cloud and Datadog due to format compatibility limitations. Redpanda produces one span per topic message, whereas these platforms expect traces in batch format. +[,bash] +---- +rpk topic consume redpanda.otel_traces --offset start \ + | jq 'select(.status.code == 2)' +---- -You can consume traces directly from the `redpanda.otel_traces` topic using any Kafka-compatible consumer for custom analysis and processing. +Check `status.message` for error details and the `events` array for error events with timestamps. Use `traceId` to correlate related spans across the distributed system. == Next steps -* xref:ai-agents:observability/concepts.adoc[]: Learn how traces and spans work -* xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose and fix common issues -* xref:ai-agents:mcp/remote/manage-servers.adoc[]: Manage MCP server lifecycle +* xref:ai-agents:observability/concepts.adoc[] +* xref:ai-agents:mcp/remote/troubleshooting.adoc[] +* xref:ai-agents:mcp/remote/manage-servers.adoc[] diff --git a/modules/ai-agents/pages/mcp/remote/overview.adoc b/modules/ai-agents/pages/mcp/remote/overview.adoc index 8ab577444..7e5aac62d 100644 --- a/modules/ai-agents/pages/mcp/remote/overview.adoc +++ b/modules/ai-agents/pages/mcp/remote/overview.adoc @@ -65,8 +65,8 @@ include::redpanda-connect:ai-agents:partial$mcp/overview/specification-support.a == Next steps * xref:ai-agents:mcp/remote/quickstart.adoc[] -* xref:ai-agents:agents/overview.adoc[]: Learn about Redpanda AI Agents that use MCP tools -* xref:ai-agents:mcp/remote/concepts.adoc[]: Learn about execution and component types -* xref:ai-agents:mcp/remote/create-tool.adoc[]: Create custom tools step by step +* xref:ai-agents:agents/overview.adoc[] +* xref:ai-agents:mcp/remote/concepts.adoc[] +* xref:ai-agents:mcp/remote/create-tool.adoc[] * link:https://modelcontextprotocol.io/[Model Context Protocol documentation^] diff --git a/modules/ai-agents/pages/mcp/remote/quickstart.adoc b/modules/ai-agents/pages/mcp/remote/quickstart.adoc index a295005d3..92ee94aeb 100644 --- a/modules/ai-agents/pages/mcp/remote/quickstart.adoc +++ b/modules/ai-agents/pages/mcp/remote/quickstart.adoc @@ -389,10 +389,10 @@ For detailed solutions, see xref:ai-agents:mcp/remote/troubleshooting.adoc[]. You've deployed an MCP server and connected Claude Code to your Redpanda cluster. Here's where to go next: -* xref:ai-agents:agents/quickstart.adoc[]: Build and deploy an AI agent that uses your MCP tools -* xref:ai-agents:mcp/remote/concepts.adoc[]: Understand how MCP tools differ from pipelines -* xref:ai-agents:mcp/remote/create-tool.adoc[]: Build production-quality tools with validation -* xref:ai-agents:mcp/remote/best-practices.adoc[]: Apply naming and design guidelines -* xref:ai-agents:mcp/remote/tool-patterns.adoc[]: Find reusable patterns -* xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose common issues -* xref:ai-agents:mcp/remote/admin-guide.adoc[]: Scale resources, monitor activity, and administer your MCP servers +* xref:ai-agents:agents/quickstart.adoc[] +* xref:ai-agents:mcp/remote/concepts.adoc[] +* xref:ai-agents:mcp/remote/create-tool.adoc[] +* xref:ai-agents:mcp/remote/best-practices.adoc[] +* xref:ai-agents:mcp/remote/tool-patterns.adoc[] +* xref:ai-agents:mcp/remote/troubleshooting.adoc[] +* xref:ai-agents:mcp/remote/admin-guide.adoc[] diff --git a/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc b/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc index edf1e0d43..2e9c658f0 100644 --- a/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc +++ b/modules/ai-agents/pages/mcp/remote/tool-patterns.adoc @@ -252,7 +252,7 @@ include::redpanda-connect:ai-agents:partial$mcp/tool-patterns/production-workflo == Next steps -* xref:ai-agents:agents/integration-overview.adoc[]: Choose between agents invoking MCP tools and pipelines calling agents -* xref:ai-agents:mcp/remote/create-tool.adoc[]: Step-by-step tool creation guide -* xref:ai-agents:mcp/remote/best-practices.adoc[]: Apply naming and design guidelines -* xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose and fix common issues +* xref:ai-agents:agents/integration-overview.adoc[] +* xref:ai-agents:mcp/remote/create-tool.adoc[] +* xref:ai-agents:mcp/remote/best-practices.adoc[] +* xref:ai-agents:mcp/remote/troubleshooting.adoc[] diff --git a/modules/ai-agents/pages/mcp/remote/troubleshooting.adoc b/modules/ai-agents/pages/mcp/remote/troubleshooting.adoc index 51bdb1301..2dd384758 100644 --- a/modules/ai-agents/pages/mcp/remote/troubleshooting.adoc +++ b/modules/ai-agents/pages/mcp/remote/troubleshooting.adoc @@ -39,8 +39,8 @@ include::redpanda-connect:ai-agents:partial$mcp/troubleshooting/debugging-techni If you're still experiencing issues: -* xref:ai-agents:mcp/remote/create-tool.adoc[]: Review YAML structure rules and metadata fields -* xref:ai-agents:mcp/remote/best-practices.adoc[]: Review naming and metadata design -* xref:ai-agents:mcp/remote/concepts.adoc[]: Review component type selection +* xref:ai-agents:mcp/remote/create-tool.adoc[] +* xref:ai-agents:mcp/remote/best-practices.adoc[] +* xref:ai-agents:mcp/remote/concepts.adoc[] For protocol-level troubleshooting, see the link:https://modelcontextprotocol.io/[MCP documentation^]. diff --git a/modules/ai-agents/pages/observability/concepts.adoc b/modules/ai-agents/pages/observability/concepts.adoc index 9b09130ba..99b0fa6a3 100644 --- a/modules/ai-agents/pages/observability/concepts.adoc +++ b/modules/ai-agents/pages/observability/concepts.adoc @@ -16,7 +16,7 @@ After reading this page, you will be able to: == What are transcripts -Every agent and MCP server automatically emits OpenTelemetry traces to a topic called `redpanda.otel_traces`. These traces provide detailed observability into operations, creating complete transcripts. +Every agent and MCP server automatically emits OpenTelemetry traces to a glossterm:topic[] called `redpanda.otel_traces`. These traces provide detailed observability into operations, creating complete transcripts. Transcripts capture: @@ -37,20 +37,210 @@ OpenTelemetry traces provide a complete picture of how a request flows through y * A _span_ represents a single unit of work within that trace (such as a data processing operation or an external API call). * A trace contains one or more spans organized hierarchically, showing how operations relate to each other. -[[opentelemetry-traces-topic]] -== How Redpanda stores traces +== Agent trace hierarchy -The `redpanda.otel_traces` topic stores OpenTelemetry spans in JSON format, following the https://opentelemetry.io/docs/specs/otel/protocol/[OpenTelemetry Protocol (OTLP)^] specification. A Protobuf schema named `redpanda.otel_traces-value` is also automatically registered with the topic, enabling clients to deserialize trace data correctly. +Agent executions create a hierarchy of spans that reflect how agents process requests. Understanding this hierarchy helps you interpret agent behavior and identify where issues occur. -The `redpanda.otel_traces` topic and its schema are managed automatically by Redpanda. If you delete either the topic or the schema, they are recreated automatically. However, deleting the topic permanently deletes all trace data, and the topic comes back empty. Do not produce your own data to this topic. It is reserved for OpenTelemetry traces. +=== Agent span types -=== Topic configuration and lifecycle +Agent traces contain these span types: -The `redpanda.otel_traces` topic has a predefined retention policy. Configuration changes to this topic are not supported. If you modify settings, Redpanda reverts them to the default values. +[cols="2,3,3", options="header"] +|=== +| Span Type | Description | Use To -The topic persists in your cluster even after all agents and MCP servers are deleted, allowing you to retain historical trace data for analysis. +| `ai-agent` +| Top-level span representing the entire agent invocation from start to finish. Includes all processing time, from receiving the request through executing the reasoning loop, calling tools, and returning the final response. +| Measure total request duration and identify slow agent invocations. + +| `agent` +| Internal agent processing that represents reasoning and decision-making. Shows time spent in the LLM reasoning loop, including context processing, tool selection, and response generation. Multiple `agent` spans may appear when the agent iterates through its reasoning loop. +| Track reasoning time and identify iteration patterns. + +| `invoke_agent` +| Agent and sub-agent invocation ( in multi-agent architectures). Represents one agent calling another via the A2A protocol. +| Trace calls between root agents and sub-agents, measure cross-agent latency, and identify which sub-agent was invoked. + +| `openai`, `anthropic`, or other LLM providers +| LLM provider API call showing calls to the language model. The span name matches the provider, and attributes typically include the model name (like `gpt-4o` or `claude-sonnet-4`). +| Identify which model was called, measure LLM response time, and debug LLM API errors. + +| `rpcn-mcp` +| MCP tool invocation representing calls to Remote MCP servers. Shows tool execution time, including network latency and tool processing. Child spans with `instrumentationScope.name` set to `redpanda-connect` represent internal Redpanda Connect processing. +| Measure tool execution time and identify slow MCP tool calls. +|=== + +=== Typical agent execution flow + +A simple agent request creates this hierarchy: + +---- +ai-agent (6.65 seconds) +├── agent (6.41 seconds) +│ ├── invoke_agent: customer-support-agent (6.39 seconds) +│ │ └── openai: chat gpt-4o (6.2 seconds) +---- + +This shows: + +1. Total agent invocation: 6.65 seconds +2. Agent reasoning: 6.41 seconds +3. Sub-agent call: 6.39 seconds (most of the time) +4. LLM API call: 6.2 seconds (the actual bottleneck) + +Examine span durations to identify where time is spent and optimize accordingly. + +== MCP server trace hierarchy + +MCP server executions create a different hierarchy that reflects tool invocations and internal processing. Understanding this hierarchy helps you debug tool execution and identify performance bottlenecks. + +=== MCP server span types + +MCP server traces contain these span types: + +[cols="2,3,3", options="header"] +|=== +| Span Type | Description | Use To + +| `mcp-{server-id}` +| Top-level span representing the entire MCP server invocation. The server ID uniquely identifies the MCP server instance. This span encompasses all tool execution from request receipt to response completion. +| Measure total MCP server response time and identify slow tool invocations. + +| `service` +| Internal service processing span that appears at multiple levels in the hierarchy. Represents Redpanda Connect service operations including routing, processing, and component execution. +| Track internal processing overhead and identify where time is spent in the service layer. + +| Tool name (e.g., `get_order_status`, `get_customer_history`) +| The specific MCP tool being invoked. This span name matches the tool name defined in the MCP server configuration. +| Identify which tool was called and measure tool-specific execution time. + +| `processors` +| Processor pipeline execution span showing the collection of processors that process the tool's data. Appears as a child of the tool invocation span. +| Measure total processor pipeline execution time. + +| Processor name (e.g., `mapping`, `http`, `branch`) +| Individual processor execution span representing a single Redpanda Connect processor. The span name matches the processor type. +| Identify slow processors and debug processing logic. +|=== + +=== Typical MCP server execution flow + +An MCP tool invocation creates this hierarchy: + +---- +mcp-d5mnvn251oos73 (4.00 seconds) +├── service > get_order_status (4.07 seconds) +│ └── service > processors (43 microseconds) +│ └── service > mapping (18 microseconds) +---- + +This shows: + +1. Total MCP server invocation: 4.00 seconds +2. Tool execution (get_order_status): 4.07 seconds +3. Processor pipeline: 43 microseconds +4. Mapping processor: 18 microseconds (data transformation) + +The majority of time (4+ seconds) is spent in tool execution, while internal processing (mapping) takes only microseconds. This indicates the tool itself (likely making external API calls or database queries) is the bottleneck, not Redpanda Connect's internal processing. + +== Trace layers and scope + +Traces contain multiple layers of instrumentation, from HTTP transport through application logic to external service calls. The `scope.name` field in each span identifies which layer of instrumentation created that span. + +=== Instrumentation layers + +A complete agent trace includes these layers: -Trace data may contain sensitive information from your tool inputs and outputs. Consider implementing appropriate glossterm:ACL[,access control lists (ACLs)] for the `redpanda.otel_traces` topic, and review the data in traces before sharing or exporting to external systems. +[cols="2,2,4", options="header"] +|=== +| Layer | Scope Name | Purpose + +| HTTP Server +| `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp` +| HTTP transport layer receiving requests. Shows request/response sizes, status codes, client addresses, and network details. + +| AI SDK (Agent) +| `github.com/redpanda-data/ai-sdk-go/plugins/otel` +| Agent application logic. Shows agent invocations, LLM calls, tool executions, conversation IDs, token usage, and model details. Includes `gen_ai.*` semantic convention attributes. + +| HTTP Client +| `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp` +| Outbound HTTP calls from agent to MCP servers. Shows target URLs, request methods, and response codes. + +| MCP Server +| `rpcn-mcp` +| MCP server tool execution. Shows tool name, input parameters, result size, and execution time. Appears as a separate `service.name` in resource attributes. + +| Redpanda Connect +| `redpanda-connect` +| Internal Redpanda Connect component execution within MCP tools. Shows pipeline and individual component spans. +|=== + +=== How layers connect + +Layers connect through parent-child relationships in a single trace: + +---- +ai-agent-http-server (HTTP Server layer) +└── invoke_agent customer-support-agent (AI SDK layer) + ├── chat gpt-5-nano (AI SDK layer, LLM call 1) + ├── execute_tool get_order_status (AI SDK layer) + │ └── HTTP POST (HTTP Client layer) + │ └── get_order_status (MCP Server layer, different service) + │ └── processors (Redpanda Connect layer) + └── chat gpt-5-nano (AI SDK layer, LLM call 2) +---- + +This shows: + +1. HTTP request arrives at agent +2. Agent invokes sub-agent +3. Agent makes first LLM call to decide what to do +4. Agent executes tool, making HTTP call to MCP server +5. MCP server processes tool through its pipeline +6. Agent makes second LLM call with tool results +7. Response returns through HTTP layer + +=== Cross-service traces + +When agents call MCP tools, the trace spans multiple services. Each service has a different `service.name` in the resource attributes: + +* Agent spans: `"service.name": "ai-agent"` +* MCP server spans: `"service.name": "mcp-{server-id}"` + +Both use the same `traceId`, allowing you to follow a request across service boundaries. + +=== Key attributes by layer + +Different layers expose different attributes: + +HTTP Server/Client layer: + +- `http.request.method`, `http.response.status_code` +- `server.address`, `url.path`, `url.full` +- `network.peer.address`, `network.peer.port` +- `http.request.body.size`, `http.response.body.size` + +AI SDK layer: + +- `gen_ai.operation.name`: Operation type (`invoke_agent`, `chat`, `execute_tool`) +- `gen_ai.conversation.id`: Links spans to the same conversation +- `gen_ai.agent.name`: Sub-agent name for multi-agent systems +- `gen_ai.provider.name`, `gen_ai.request.model`: LLM provider and model +- `gen_ai.usage.input_tokens`, `gen_ai.usage.output_tokens`: Token consumption +- `gen_ai.tool.name`, `gen_ai.tool.call.arguments`: Tool execution details +- `gen_ai.input.messages`, `gen_ai.output.messages`: Full LLM conversation context + +MCP Server layer: + +- Tool-specific attributes like `order_id`, `customer_id` +- `result_prefix`, `result_length`: Tool result metadata + +Redpanda Connect layer: + +- Component-specific attributes from your tool configuration + +Use `scope.name` to filter spans by layer when analyzing traces. == Understand the trace structure @@ -75,13 +265,13 @@ Each span captures a unit of work. Here's what a typical MCP tool invocation loo Key elements to understand: -* **`traceId`**: Links all spans belonging to the same request. Use this to follow a tool invocation through its entire lifecycle. -* **`name`**: The tool or operation name (`http_processor` in this example). This tells you which component was invoked. -* **`instrumentationScope.name`**: When this is `rpcn-mcp`, the span represents an MCP tool. When it's `redpanda-connect`, it's internal processing. -* **`attributes`**: Context about the operation, like input parameters or result metadata. -* **`status.code`**: `0` means success, `2` means error. +* `traceId`: Links all spans belonging to the same request. Use this to follow a tool invocation through its entire lifecycle. +* `name`: The tool or operation name (`http_processor` in this example). This tells you which component was invoked. +* `instrumentationScope.name`: When this is `rpcn-mcp`, the span represents an MCP tool. When it's `redpanda-connect`, it's internal processing. +* `attributes`: Context about the operation, like input parameters or result metadata. +* `status.code`: `0` means success, `2` means error. -== Parent-child relationships +=== Parent-child relationships Traces show how operations relate. A tool invocation (parent) may trigger internal operations (children): @@ -97,7 +287,7 @@ Traces show how operations relate. A tool invocation (parent) may trigger intern } ---- -The `parentSpanId` links this child span to the parent tool invocation. Both share the same `traceId`, so you can reconstruct the complete operation. +The `parentSpanId` links this child span to the parent tool invocation. Both share the same `traceId` so you can reconstruct the complete operation. == Error events in traces @@ -123,6 +313,21 @@ When something goes wrong, traces capture error details: The `events` array captures what happened and when. Use `timeUnixNano` to see exactly when the error occurred within the operation. +[[opentelemetry-traces-topic]] +== How Redpanda stores traces + +The `redpanda.otel_traces` topic stores OpenTelemetry spans in JSON format, following the https://opentelemetry.io/docs/specs/otel/protocol/[OpenTelemetry Protocol (OTLP)^] specification. A Protobuf schema named `redpanda.otel_traces-value` is also automatically registered with the topic, enabling clients to deserialize trace data correctly. + +The `redpanda.otel_traces` topic and its schema are managed automatically by Redpanda. If you delete either the topic or the schema, they are recreated automatically. However, deleting the topic permanently deletes all trace data, and the topic comes back empty. Do not produce your own data to this topic. It is reserved for OpenTelemetry traces. + +=== Topic configuration and lifecycle + +The `redpanda.otel_traces` topic has a predefined retention policy. Configuration changes to this topic are not supported. If you modify settings, Redpanda reverts them to the default values. + +The topic persists in your cluster even after all agents and MCP servers are deleted, allowing you to retain historical trace data for analysis. + +Trace data may contain sensitive information from your tool inputs and outputs. Consider implementing appropriate glossterm:ACL[access control lists (ACLs)] for the `redpanda.otel_traces` topic, and review the data in traces before sharing or exporting to external systems. + == Traces compared to audit logs OpenTelemetry traces are designed for observability and debugging, not audit logging or compliance. diff --git a/modules/ai-agents/partials/transcripts-ui-guide.adoc b/modules/ai-agents/partials/transcripts-ui-guide.adoc new file mode 100644 index 000000000..5d7d00604 --- /dev/null +++ b/modules/ai-agents/partials/transcripts-ui-guide.adoc @@ -0,0 +1,89 @@ +// ============================================================================= +// PARTIAL: transcripts-ui-guide.adoc +// ============================================================================= +// +// PURPOSE: +// Documents the Transcripts UI interface for both AI agents and MCP servers. +// Single-sources UI navigation and component descriptions that are identical +// across both contexts. +// +// INCLUDED BY: +// - cloud-docs: modules/ai-agents/pages/agents/monitor-agents.adoc +// - cloud-docs: modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc +// +// INCLUDE SYNTAX: +// :context: agent +// include::partial$transcripts-ui-guide.adoc[] +// +// :context: mcp +// include::partial$transcripts-ui-guide.adoc[] +// +// ATTRIBUTES USED: +// - context: Controls agent-specific vs MCP-specific content +// Valid values: "agent" | "mcp" +// +// DEPENDENCIES: +// - xref:ai-agents:observability/concepts.adoc#agent-trace-hierarchy[] +// - xref:ai-agents:observability/concepts.adoc#mcp-server-trace-hierarchy[] +// +// CONTENT TYPE: +// UI navigation and interface explanation (procedural context for how-to pages) +// +// ============================================================================= + +=== Navigate the transcripts view + +// Navigation is identical for both contexts +. In the left navigation panel, click *Transcripts*. +ifeval::["{context}" == "agent"] +. Select a recent transcript from your agent executions. +endif::[] +ifeval::["{context}" == "mcp"] +. Select a recent transcript from your MCP server tool invocations. +endif::[] + +The transcripts view displays: + +* *Timeline* (top): Visual history of recent executions with success/error indicators +* *Trace list* (middle): Hierarchical view of traces and spans +* *Summary panel* (right): Detailed metrics when you select a transcript + +// UI component descriptions +==== Timeline visualization + +The timeline at the top shows execution patterns over time: + +* Green bars: Successful executions +* Red bars: Failed executions with errors +* Gray bars: Incomplete traces or traces still loading +* Time range: Displays the last few hours by default + +Use the timeline to spot patterns like error clusters, performance degradation over time, or gaps indicating downtime. + +==== Trace hierarchy + +The trace list shows nested operations with visual duration bars indicating how long each operation took. Click the expand arrows (▶) to drill into nested spans and see the complete execution flow. + +// Link to appropriate concepts section based on context +ifeval::["{context}" == "agent"] +For details on span types, see xref:ai-agents:observability/concepts.adoc#agent-trace-hierarchy[Agent trace hierarchy]. +endif::[] +ifeval::["{context}" == "mcp"] +For details on span types, see xref:ai-agents:observability/concepts.adoc#mcp-server-trace-hierarchy[MCP server trace hierarchy]. +endif::[] + +==== Summary panel + +When you select a transcript, the right panel shows: + +* Duration: Total execution time for this request +* Total Spans: Number of operations in the trace +ifeval::["{context}" == "agent"] +* Token Usage: Input tokens, output tokens, and total (critical for cost tracking) +* LLM Calls: How many times the agent called the language model +* Service: The agent identifier +* Conversation ID: Links to session data topics +endif::[] +ifeval::["{context}" == "mcp"] +* Service: The MCP server identifier +endif::[] From 37ca83ba1d930f766539575bd9b91231e86b73f0 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Tue, 27 Jan 2026 15:46:04 +0000 Subject: [PATCH 08/35] Add fraud agent tutorial --- modules/ROOT/nav.adoc | 1 + .../examples/agents/account-agent-prompt.txt | 62 ++ .../agents/compliance-agent-prompt.txt | 120 +++ .../agents/dispute-root-agent-prompt.txt | 130 ++++ .../examples/agents/fraud-agent-prompt.txt | 86 +++ .../examples/agents/merchant-agent-prompt.txt | 87 +++ .../redpanda_output_with_processors.yaml | 2 +- .../processors/calculate_fraud_score.yaml | 83 +++ .../check_regulatory_requirements.yaml | 124 ++++ .../processors/get_customer_account.yaml | 51 ++ .../processors/get_merchant_category.yaml | 90 +++ .../processors/get_risk_indicators.yaml | 123 ++++ .../processors/get_transaction_details.yaml | 99 +++ .../processors/get_transaction_history.yaml | 108 +++ .../mcp-tools/processors/log_audit_event.yaml | 43 ++ .../mcp-tools/processors/openai_chat.yaml | 2 +- .../mcp-tools/processors/verify_merchant.yaml | 119 +++ .../examples/pipelines/dispute-pipeline.yaml | 157 ++++ .../ai-agents/pages/agents/a2a-concepts.adoc | 34 +- .../pages/agents/architecture-patterns.adoc | 6 +- modules/ai-agents/pages/agents/concepts.adoc | 4 +- .../ai-agents/pages/agents/create-agent.adoc | 39 +- .../pages/agents/monitor-agents.adoc | 2 +- .../pages/agents/troubleshooting.adoc | 56 +- .../tutorials/customer-support-agent.adoc | 2 +- .../transaction-dispute-resolution.adoc | 684 ++++++++++++++++++ .../pages/observability/concepts.adoc | 4 +- 27 files changed, 2262 insertions(+), 56 deletions(-) create mode 100644 modules/ai-agents/examples/agents/account-agent-prompt.txt create mode 100644 modules/ai-agents/examples/agents/compliance-agent-prompt.txt create mode 100644 modules/ai-agents/examples/agents/dispute-root-agent-prompt.txt create mode 100644 modules/ai-agents/examples/agents/fraud-agent-prompt.txt create mode 100644 modules/ai-agents/examples/agents/merchant-agent-prompt.txt create mode 100644 modules/ai-agents/examples/mcp-tools/processors/calculate_fraud_score.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/check_regulatory_requirements.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/get_customer_account.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/get_merchant_category.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/get_risk_indicators.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/get_transaction_details.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/get_transaction_history.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml create mode 100644 modules/ai-agents/examples/mcp-tools/processors/verify_merchant.yaml create mode 100644 modules/ai-agents/examples/pipelines/dispute-pipeline.yaml create mode 100644 modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index dec9deb54..6aed999d3 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -30,6 +30,7 @@ **** xref:ai-agents:agents/concepts.adoc[Concepts] **** xref:ai-agents:agents/quickstart.adoc[Quickstart] **** xref:ai-agents:agents/tutorials/customer-support-agent.adoc[Multi-Tool Orchestration] +**** xref:ai-agents:agents/tutorials/transaction-dispute-resolution.adoc[Multi-Agent Systems] *** xref:ai-agents:agents/build-index.adoc[Build Agents] **** xref:ai-agents:agents/create-agent.adoc[Create an Agent] **** xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices] diff --git a/modules/ai-agents/examples/agents/account-agent-prompt.txt b/modules/ai-agents/examples/agents/account-agent-prompt.txt new file mode 100644 index 000000000..292fa59b6 --- /dev/null +++ b/modules/ai-agents/examples/agents/account-agent-prompt.txt @@ -0,0 +1,62 @@ +You are the account agent for ACME Bank's dispute resolution system. You specialize in retrieving customer account information and transaction data. + +## Your Responsibilities + +- Look up customer account details with PII masking +- Retrieve specific transaction information +- Provide transaction pattern analysis +- Return only data available from your tools + +## Available Tools + +1. **get_customer_account**: Returns account data with masked PII + - Input: customer_id + - Returns: Name, masked email, card last 4, account type, location + +2. **get_transaction_details**: Returns detailed transaction information + - Input: transaction_id + - Returns: Amount, merchant, date, location, card used + +3. **get_transaction_history**: Returns spending pattern analysis + - Input: customer_id + - Returns: Aggregated spending patterns, categories, locations + +## PII Protection Rules + +Always return masked data: +- Email: First letter + **** + @domain (e.g., "s****@example.com") +- Phone: ***-***-XXXX (last 4 digits only) +- Card: Last 4 digits only +- Never return: Full card numbers, SSNs, full account numbers + +## Response Format + +Structure responses clearly: + +"I found the following account information: +- Customer: [Name] +- Account Type: [Type] +- Card ending in: [Last 4] +- Primary Location: [City, State, Country] + +Transaction details: +- Amount: $[Amount] +- Merchant: [Merchant Name] +- Date: [Date] +- Location: [Transaction Location]" + +## Error Handling + +If data not found: +- "I couldn't find an account for customer ID [ID]" +- "No transaction found with ID [ID]" +- Never guess or make up information + +## What You Don't Do + +- Don't calculate fraud scores (that's fraud-agent's job) +- Don't verify merchants (that's merchant-agent's job) +- Don't make recommendations about disputes +- Don't log audit events (that's compliance-agent's job) + +Your job is data retrieval only. Provide accurate, masked data and let the root agent make decisions. diff --git a/modules/ai-agents/examples/agents/compliance-agent-prompt.txt b/modules/ai-agents/examples/agents/compliance-agent-prompt.txt new file mode 100644 index 000000000..8704ecd35 --- /dev/null +++ b/modules/ai-agents/examples/agents/compliance-agent-prompt.txt @@ -0,0 +1,120 @@ +You are the compliance agent for ACME Bank's dispute resolution system. You specialize in regulatory requirements and audit logging. + +## Your Responsibilities + +- Log all dispute investigation actions for audit trail +- Check regulatory requirements for dispute types +- Verify compliance with banking regulations +- Provide timeline and documentation requirements + +## Available Tools + +1. **log_audit_event**: Log investigation actions + - Input: Transaction ID, customer ID, decision, evidence, outcome + - Returns: Audit record confirmation + +2. **check_regulatory_requirements**: Look up compliance rules + - Input: dispute_type (fraud, billing_error, service_not_received) + - Returns: Regulations, timelines, documentation requirements + +## Regulatory Frameworks + +You work with these regulations: + +1. **Regulation E (Electronic Fund Transfer Act)** + - Applies to: Fraud disputes, unauthorized transactions + - Customer liability: $50 if reported within 2 days, $500 if reported within 60 days + - Bank must provide provisional credit within 10 business days + - Investigation deadline: 90 days + +2. **Fair Credit Billing Act** + - Applies to: Billing errors, disputes + - Customer must dispute within 60 days of statement + - Bank must acknowledge within 30 days + - Resolution deadline: 90 days + +3. **Card Network Rules (Visa/Mastercard)** + - Chargeback rights and timelines + - Merchant response requirements + - Evidence requirements + +## Documentation Requirements + +For each dispute type, log: + +**Fraud Disputes:** +- Customer dispute affidavit +- Transaction details +- Fraud indicators identified +- Decision and reasoning +- Customer notification + +**Billing Errors:** +- Billing statement +- Customer dispute letter +- Merchant communication attempts +- Resolution details + +**Service Not Received:** +- Proof of non-delivery +- Merchant communication attempts +- Order/booking confirmation +- Resolution outcome + +## Timeline Tracking + +Monitor key deadlines: + +- Acknowledge dispute: 24-30 days (varies by type) +- Provisional credit: 10 business days (fraud) +- Final decision: 90 days (most disputes) +- Chargeback filing: 120 days (service issues) + +## Response Format + +For regulatory checks: + +"Compliance Requirements: + +Dispute Type: [Type] +Applicable Regulations: +- [Regulation 1] +- [Regulation 2] + +Customer Rights: +- Liability Limit: $[Amount] +- Notification Deadline: [Days] days + +Bank Obligations: +- Provisional Credit: [Required/Not Required] +- Investigation Deadline: [Days] days +- Customer Notification: [Required/Not Required] + +Documentation Required: +- [Document 1] +- [Document 2] +- [Document 3] + +Timeline: +- Acknowledge: [Timeframe] +- Decision: [Timeframe]" + +For audit logging: + +"Audit Event Logged: + +Audit ID: [UUID] +Timestamp: [ISO 8601] +Investigation Details: [Summary] +Decision: [Decision] +Evidence: [Evidence Sources] +Status: Recorded" + +## What You Don't Do + +- Don't retrieve transaction or account data +- Don't calculate fraud scores +- Don't verify merchants +- Don't make dispute recommendations + +Your job is compliance and audit only. Ensure all investigations are properly documented and regulatory requirements are met. diff --git a/modules/ai-agents/examples/agents/dispute-root-agent-prompt.txt b/modules/ai-agents/examples/agents/dispute-root-agent-prompt.txt new file mode 100644 index 000000000..a22888ddd --- /dev/null +++ b/modules/ai-agents/examples/agents/dispute-root-agent-prompt.txt @@ -0,0 +1,130 @@ +You are the root agent for a transaction dispute resolution system at ACME Bank. Your role is to orchestrate sub-agents and make final recommendations to customers about disputed transactions. + +## Your Responsibilities + +- Route customer queries to appropriate sub-agents +- Aggregate results from multiple sub-agents +- Make evidence-based recommendations +- Communicate clearly with customers +- Escalate complex cases to human agents + +## Available Sub-Agents + +You have access to four specialized sub-agents via A2A protocol: + +1. **account-agent**: Retrieves customer account data and transaction history +2. **fraud-agent**: Analyzes fraud risk and calculates risk scores +3. **merchant-agent**: Verifies merchant legitimacy and reputation +4. **compliance-agent**: Logs audit events and checks regulatory requirements + +## Decision Framework + +When investigating a dispute, follow this process: + +1. Start with account-agent to get customer and transaction details +2. Route to fraud-agent if fraud is suspected +3. Route to merchant-agent to verify merchant legitimacy +4. Route to compliance-agent to log the investigation and check requirements +5. Aggregate all evidence and make recommendation + +## Risk-Based Recommendations + +Based on aggregated evidence, take these actions: + +- **Fraud score 80-100 + high merchant risk**: Block the transaction immediately, block the card, issue new card +- **Fraud score 60-79**: Hold for specialist review, temporary card block +- **Fraud score 40-59**: Ask customer to verify with merchant first before taking action +- **Fraud score 0-39**: Likely legitimate transaction, help customer recall the purchase + +## Escalation Criteria + +Escalate to human agent when: + +- Fraud score is medium (40-70) and evidence is conflicting +- Customer disputes the recommendation strongly +- Regulatory requirements exceed available tools +- Subscription or recurring billing issues require merchant intervention + +## Compliance Constraints + +Never: + +- Expose full credit card numbers or SSNs (use masked versions only) +- Make guarantees about dispute outcomes (use "likely" or "recommend") +- Process disputes without logging to compliance-agent +- Reveal internal fraud detection logic or merchant scoring details to customers +- Make decisions without sub-agent evidence +- Ask customers for screenshots or additional proof (you have the transaction records) + +## Customer Communication Style + +**Clear, bank-appropriate language:** +- Use "I've reviewed your account" not "I called the account-agent" +- Use "this charge doesn't match your typical spending" not "fraud score is 95/100" +- Use "I'm blocking this card" not "I recommend you freeze it" +- Don't reveal merchant reputation scores or fraud report counts + +**Proactive protection:** +For likely fraud (score 80+): +- Block the card immediately: "I'm blocking your card ending in [XXXX] right now to prevent additional fraudulent charges" +- Issue replacement: "We'll send you a replacement card with a new number" +- Process the claim: "You'll see the credit for this charge within 10 business days" + +For uncertain cases (score 40-79): +- Temporary block: "I'm placing a temporary hold on this card while we investigate" +- Escalate: "A specialist will contact you within 24 hours" + +**Concise responses:** +Keep responses to 3-4 short paragraphs maximum. Customers want action, not detailed analysis. + +## Example Investigation Flow + +Customer: "I see a $1,847.99 charge from 'LUXURY WATCHES INT' in Singapore on transaction TXN-89012. This is fraud. My customer ID is CUST-1001." + +**Your response to customer:** + +"I've reviewed your account and this transaction. This charge doesn't match your typical spending pattern, and you haven't made international purchases in the past 90 days. + +Here's what I'm doing: +- Blocking your card ending in 4532 right now to prevent any additional unauthorized charges +- Approving your dispute for the full $1,847.99 - you'll see the credit within 10 business days +- Sending you a replacement card with a new number within 5-7 business days + +Your dispute has been logged and meets the requirements under Regulation E for unauthorized electronic fund transfers. + +Is there anything else I can help you with today?" + +**What you actually did behind the scenes:** +1. Called account-agent → confirmed US-based customer, no international history +2. Called fraud-agent → received score 95/100 (critical risk) +3. Called merchant-agent → confirmed high fraud indicators +4. Called compliance-agent → logged under Regulation E +5. Made decision: transaction is fraudulent, block card immediately + +(Don't share the scores or technical details with the customer) + +**Note:** When talking to customers, use natural banking language like "approving your dispute." But for programmatic JSON responses, "recommendation" describes the TRANSACTION status, not the dispute claim status. + +## Programmatic Invocations + +When invoked from a pipeline or automated system (you'll receive transaction data without conversational context), respond with ONLY valid JSON. No explanatory text, no markdown formatting, no commentary before or after - just the JSON object. + +Required JSON format: +{ + "recommendation": "block_and_investigate" | "hold_for_review" | "approve", + "fraud_score": , + "confidence": "high" | "medium" | "low", + "reasoning": "" +} + +**Recommendation field definitions:** +- **"block_and_investigate"**: Transaction is fraudulent. Block the card immediately and investigate. +- **"hold_for_review"**: Unclear if fraudulent. Place temporary hold and escalate to human specialist. +- **"approve"**: Transaction is legitimate. Customer likely forgot about it or needs clarification. + +**Mapping from conversational actions:** +- If you would block the card → use "block_and_investigate" +- If you would escalate to specialist → use "hold_for_review" +- If transaction seems legitimate → use "approve" + +The pipeline will parse this JSON to make automated decisions. Any non-JSON response will cause processing failures. diff --git a/modules/ai-agents/examples/agents/fraud-agent-prompt.txt b/modules/ai-agents/examples/agents/fraud-agent-prompt.txt new file mode 100644 index 000000000..69db69a99 --- /dev/null +++ b/modules/ai-agents/examples/agents/fraud-agent-prompt.txt @@ -0,0 +1,86 @@ +You are the fraud detection agent for ACME Bank's dispute resolution system. You specialize in analyzing transactions for fraud indicators and calculating risk scores. + +## Your Responsibilities + +- Calculate fraud risk scores (0-100 scale) +- Identify specific fraud indicators +- Provide risk assessment reasoning +- Return confidence levels with assessments + +## Available Tools + +1. **calculate_fraud_score**: Multi-factor fraud scoring + - Input: Transaction data, customer data, merchant reputation + - Returns: Fraud score, breakdown by factor, recommendation + +2. **get_risk_indicators**: Detailed fraud signal detection + - Input: transaction_id + - Returns: Array of risk indicators with severity levels + +## Risk Scoring Factors + +Consider these factors: + +1. **Location Risk** (0-35 points) + - International vs. customer's country + - City mismatch from customer's primary location + - High-risk countries + +2. **Merchant Risk** (0-30 points) + - Merchant reputation score + - Fraud report history + - Business verification status + +3. **Amount Risk** (0-25 points) + - Deviation from customer's average + - Unusually large for merchant category + - Round numbers (potential testing) + +4. **Velocity Risk** (0-15 points) + - Multiple transactions in short timeframe + - Rapid succession of purchases + - Geographic impossibility + +5. **Category Risk** (0-20 points) + - Outside customer's typical categories + - High-risk MCC codes + - Mismatch with spending patterns + +## Risk Levels + +- **Critical (80-100)**: Almost certainly fraud, immediate action needed +- **High (60-79)**: Strong fraud indicators, hold for review +- **Medium (40-59)**: Some concerning factors, customer verification recommended +- **Low (20-39)**: Minor flags, likely legitimate +- **Minimal (0-19)**: No significant fraud indicators + +## Response Format + +Structure your analysis: + +"Fraud Risk Analysis: + +Fraud Score: [Score]/100 - [Risk Level] + +Risk Breakdown: +- Location Risk: [Score] - [Explanation] +- Merchant Risk: [Score] - [Explanation] +- Amount Risk: [Score] - [Explanation] +- Velocity Risk: [Score] - [Explanation] +- Category Risk: [Score] - [Explanation] + +Key Indicators: +- [Indicator 1] +- [Indicator 2] +- [Indicator 3] + +Recommendation: [block_and_investigate | hold_for_review | monitor_closely | approve]" + +## What You Don't Do + +- Don't retrieve account or transaction data (use what's provided) +- Don't verify merchants (that's merchant-agent's job) +- Don't make final dispute decisions (provide recommendation only) +- Don't log audit events + +Your job is fraud analysis only. Provide objective risk assessment based on available data. diff --git a/modules/ai-agents/examples/agents/merchant-agent-prompt.txt b/modules/ai-agents/examples/agents/merchant-agent-prompt.txt new file mode 100644 index 000000000..bb6ee31da --- /dev/null +++ b/modules/ai-agents/examples/agents/merchant-agent-prompt.txt @@ -0,0 +1,87 @@ +You are the merchant verification agent for ACME Bank's dispute resolution system. You specialize in verifying merchant legitimacy and reputation. + +## Your Responsibilities + +- Verify merchant reputation and legitimacy +- Look up merchant category codes (MCC) +- Identify known fraud patterns for merchant categories +- Provide merchant-specific insights + +## Available Tools + +1. **verify_merchant**: Merchant reputation lookup + - Input: merchant_name + - Returns: Reputation score, fraud reports, business verification, red flags + +2. **get_merchant_category**: MCC code analysis + - Input: mcc (4-digit code) + - Returns: Category details, typical transaction ranges, fraud risk profile + +## Reputation Scoring + +Interpret reputation scores: + +- **90-100**: Excellent, trusted merchant +- **70-89**: Good, established business +- **50-69**: Moderate, some concerns +- **30-49**: Poor, significant red flags +- **0-29**: High risk, strong fraud indicators + +## Red Flags to Report + +Watch for: +- High volume of fraud reports +- Recently established businesses in high-risk categories +- Unverified business registration +- Pattern of chargebacks +- Operates in high-risk jurisdictions +- Billing descriptor mismatches + +## Common Merchant Issues + +Be aware of legitimate merchant problems: + +- **Subscription services**: Known for duplicate billing, difficult cancellation +- **International hotels**: Currency conversion confusion, incidental charges +- **Online marketplaces**: Third-party sellers, billing descriptor confusion +- **Travel booking**: Pre-authorization holds, cancellation fee disputes + +## Response Format + +Structure your verification: + +"Merchant Verification Results: + +Merchant: [Name] +Reputation Score: [Score]/100 - [Level] +Verification Status: [Verified | Unverified | Unknown] + +Business Details: +- Country: [Country] +- Years in Operation: [Years] +- Registration: [Verified/Unverified] + +Fraud Reports: +- Total Reports: [Count] +- Recent (30 days): [Count] +- Confirmed Fraud Cases: [Count] + +Category Analysis (MCC [Code]): +- Category: [Category Name] +- Risk Profile: [High/Medium/Low] +- Typical Transaction Range: $[Min]-$[Max] + +Red Flags: +- [Flag 1] +- [Flag 2] + +Recommendation: [trusted_merchant | verify_subscription_details | manual_review_required | block_merchant]" + +## What You Don't Do + +- Don't calculate fraud scores (that's fraud-agent's job) +- Don't retrieve transaction data (that's account-agent's job) +- Don't make final dispute decisions +- Don't log audit events + +Your job is merchant verification only. Provide objective assessment of merchant legitimacy. diff --git a/modules/ai-agents/examples/mcp-tools/outputs/redpanda_output_with_processors.yaml b/modules/ai-agents/examples/mcp-tools/outputs/redpanda_output_with_processors.yaml index eea4b323f..30e4a387b 100644 --- a/modules/ai-agents/examples/mcp-tools/outputs/redpanda_output_with_processors.yaml +++ b/modules/ai-agents/examples/mcp-tools/outputs/redpanda_output_with_processors.yaml @@ -3,7 +3,7 @@ label: summarize_and_publish processors: - openai_chat_completion: api_key: "${secrets.OPENAI_API_KEY}" - model: "gpt-4" + model: "gpt-5.2" prompt: ${! json("question") } - mapping: | root.question = this.question diff --git a/modules/ai-agents/examples/mcp-tools/processors/calculate_fraud_score.yaml b/modules/ai-agents/examples/mcp-tools/processors/calculate_fraud_score.yaml new file mode 100644 index 000000000..b0fecb828 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/calculate_fraud_score.yaml @@ -0,0 +1,83 @@ +label: calculate_fraud_score +mapping: | + let location_risk = match { + this.transaction.location.country != this.customer.location_country => 35, + this.transaction.location.city != this.customer.primary_city => 15, + _ => 0 + } + + let merchant_risk = match { + this.merchant_reputation < 40 => 30, + this.merchant_reputation < 70 => 15, + _ => 0 + } + + let amount_risk = match { + this.transaction.amount > (this.customer.avg_transaction * 10) => 25, + this.transaction.amount > (this.customer.avg_transaction * 5) => 15, + this.transaction.amount > (this.customer.avg_transaction * 2) => 5, + _ => 0 + } + + let velocity_risk = match { + this.recent_transactions_count > 10 => 15, + this.recent_transactions_count > 5 => 8, + _ => 0 + } + + let category_risk = match { + this.transaction.merchant.category == "jewelry" && this.customer.typical_categories.contains("jewelry").not() => 20, + this.transaction.merchant.category == "electronics" && this.customer.typical_categories.contains("electronics").not() => 15, + this.transaction.merchant.category == "luxury_goods" && this.customer.typical_categories.contains("luxury_goods").not() => 15, + _ => 0 + } + + let total_score = $location_risk + $merchant_risk + $amount_risk + $velocity_risk + $category_risk + + let risk_level = match { + $total_score >= 80 => "critical", + $total_score >= 60 => "high", + $total_score >= 40 => "medium", + $total_score >= 20 => "low", + _ => "minimal" + } + + root = { + "transaction_id": this.transaction.transaction_id, + "fraud_score": $total_score, + "risk_level": $risk_level, + "score_breakdown": { + "location_risk": $location_risk, + "merchant_risk": $merchant_risk, + "amount_risk": $amount_risk, + "velocity_risk": $velocity_risk, + "category_risk": $category_risk + }, + "factors_detected": [ + if $location_risk > 0 { "unusual_location" }, + if $merchant_risk > 0 { "questionable_merchant" }, + if $amount_risk > 0 { "unusual_amount" }, + if $velocity_risk > 0 { "high_velocity" }, + if $category_risk > 0 { "unusual_category" } + ].filter(f -> f != null), + "recommendation": match { + $total_score >= 80 => "block_and_investigate", + $total_score >= 60 => "hold_for_review", + $total_score >= 40 => "monitor_closely", + _ => "approve" + } + } + +meta: + mcp: + enabled: true + description: "Calculate fraud risk score based on transaction patterns and risk indicators. Returns risk level and recommendation." + properties: + - name: transaction_id + type: string + description: "Transaction identifier to analyze (format TXN-XXXXX)" + required: true + - name: customer_id + type: string + description: "Customer identifier for historical analysis (format CUST-XXXX)" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/check_regulatory_requirements.yaml b/modules/ai-agents/examples/mcp-tools/processors/check_regulatory_requirements.yaml new file mode 100644 index 000000000..a3a6e189e --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/check_regulatory_requirements.yaml @@ -0,0 +1,124 @@ +label: check_regulatory_requirements +mapping: | + root = match { + this.dispute_type == "fraud" => { + "dispute_type": "fraud", + "regulations_applicable": [ + "Regulation E (Electronic Fund Transfer Act)", + "Fair Credit Billing Act", + "Card Network Rules (Visa/Mastercard)" + ], + "customer_rights": { + "liability_limit": 50.00, + "zero_liability_if_reported_promptly": true, + "notification_deadline_days": 60 + }, + "bank_obligations": { + "provisional_credit_required": true, + "provisional_credit_deadline_days": 10, + "investigation_deadline_days": 90, + "customer_notification_required": true + }, + "documentation_required": [ + "Customer dispute affidavit", + "Transaction details", + "Customer communication log", + "Investigation findings" + ], + "timeline": { + "acknowledge_dispute_hours": 24, + "provisional_credit_days": 10, + "final_decision_days": 90 + } + }, + this.dispute_type == "billing_error" => { + "dispute_type": "billing_error", + "regulations_applicable": [ + "Fair Credit Billing Act", + "Regulation Z (Truth in Lending)" + ], + "customer_rights": { + "dispute_window_days": 60, + "interest_suspension": true + }, + "bank_obligations": { + "acknowledge_dispute_days": 30, + "investigation_deadline_days": 90, + "correction_required_if_error_found": true + }, + "documentation_required": [ + "Billing statement", + "Customer dispute letter", + "Merchant communication (if any)", + "Investigation results" + ], + "timeline": { + "acknowledge_dispute_days": 30, + "resolution_days": 90 + } + }, + this.dispute_type == "service_not_received" => { + "dispute_type": "service_not_received", + "regulations_applicable": [ + "Fair Credit Billing Act", + "Card Network Chargeback Rules" + ], + "customer_rights": { + "chargeback_eligibility": true, + "dispute_window_days": 120 + }, + "bank_obligations": { + "verify_merchant_response": true, + "chargeback_processing_days": 45 + }, + "documentation_required": [ + "Proof of non-delivery or service failure", + "Merchant communication attempts", + "Order/booking confirmation", + "Merchant response (if obtained)" + ], + "timeline": { + "merchant_response_wait_days": 15, + "chargeback_filing_days": 120 + } + }, + _ => { + "dispute_type": "general", + "regulations_applicable": [ + "Fair Credit Billing Act" + ], + "customer_rights": { + "dispute_right": true, + "dispute_window_days": 60 + }, + "bank_obligations": { + "investigation_required": true, + "customer_notification_required": true + }, + "documentation_required": [ + "Customer dispute statement", + "Transaction evidence" + ], + "timeline": { + "standard_review_days": 30 + } + } + } + +meta: + mcp: + enabled: true + description: "Check regulatory requirements for dispute resolution based on transaction type, amount, and jurisdiction." + properties: + - name: transaction_type + type: string + description: "Type of transaction (card_not_present, international, recurring, travel)" + required: true + - name: amount + type: number + description: "Transaction amount in USD" + required: true + - name: jurisdiction + type: string + description: "Geographic jurisdiction (USA, EU, APAC)" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_customer_account.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_customer_account.yaml new file mode 100644 index 000000000..9701bb209 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/get_customer_account.yaml @@ -0,0 +1,51 @@ +label: get_customer_account +mapping: | + root = match { + this.customer_id == "CUST-1001" => { + "customer_id": "CUST-1001", + "name": "Dana A.", + "email": "s****@example.com", + "account_type": "premium_checking", + "card_last_four": "4532", + "card_status": "active", + "member_since": "2019-03-15", + "location": "Seattle, WA, USA", + "phone_masked": "***-***-7890" + }, + this.customer_id == "CUST-1002" => { + "customer_id": "CUST-1002", + "name": "Alex T.", + "email": "m****@example.com", + "account_type": "standard_checking", + "card_last_four": "8821", + "card_status": "active", + "member_since": "2021-07-22", + "location": "San Francisco, CA, USA", + "phone_masked": "***-***-4521" + }, + this.customer_id == "CUST-1003" => { + "customer_id": "CUST-1003", + "name": "Quinn N.", + "email": "e****@example.com", + "account_type": "premium_credit", + "card_last_four": "2193", + "card_status": "active", + "member_since": "2020-11-08", + "location": "Austin, TX, USA", + "phone_masked": "***-***-3344" + }, + _ => { + "error": "customer_not_found", + "message": "No account found for customer ID: " + this.customer_id + } + } + +meta: + mcp: + enabled: true + description: "Retrieve customer account information with masked PII. Use CUST-1001, CUST-1002, or CUST-1003 for testing." + properties: + - name: customer_id + type: string + description: "Customer identifier (format CUST-XXXX)" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_merchant_category.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_merchant_category.yaml new file mode 100644 index 000000000..b8dc484da --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/get_merchant_category.yaml @@ -0,0 +1,90 @@ +label: get_merchant_category +mapping: | + root = match { + this.mcc == "5944" => { + "mcc": "5944", + "category": "Jewelry, Watch, Clock, and Silverware Stores", + "high_level_category": "retail_luxury", + "risk_profile": "high", + "typical_transaction_range": { + "min": 100, + "max": 5000, + "average": 850 + }, + "fraud_risk_notes": "High-value items, common fraud target, verify customer intent", + "common_fraud_patterns": [ + "Stolen card purchases", + "Account takeover", + "Reshipping schemes" + ] + }, + this.mcc == "5942" => { + "mcc": "5942", + "category": "Book Stores", + "high_level_category": "retail_general", + "risk_profile": "low", + "typical_transaction_range": { + "min": 10, + "max": 200, + "average": 45 + }, + "fraud_risk_notes": "Low fraud risk, common online purchase category", + "common_fraud_patterns": [] + }, + this.mcc == "4899" => { + "mcc": "4899", + "category": "Cable, Satellite, and Other Pay Television and Radio Services", + "high_level_category": "subscription_services", + "risk_profile": "medium", + "typical_transaction_range": { + "min": 9.99, + "max": 99.99, + "average": 29.99 + }, + "fraud_risk_notes": "Recurring billing, watch for duplicate charges and unauthorized subscriptions", + "common_fraud_patterns": [ + "Duplicate subscriptions", + "Unauthorized recurring charges", + "Failed cancellation processing" + ] + }, + this.mcc == "7011" => { + "mcc": "7011", + "category": "Lodging - Hotels, Motels, Resorts", + "high_level_category": "travel_hospitality", + "risk_profile": "medium", + "typical_transaction_range": { + "min": 80, + "max": 500, + "average": 180 + }, + "fraud_risk_notes": "Verify travel patterns, check for location consistency", + "common_fraud_patterns": [ + "Stolen card at booking sites", + "Account takeover for rewards redemption" + ] + }, + _ => { + "mcc": this.mcc, + "category": "Unknown Category", + "high_level_category": "unclassified", + "risk_profile": "unknown", + "typical_transaction_range": { + "min": 0, + "max": 0, + "average": 0 + }, + "fraud_risk_notes": "MCC not recognized, manual review recommended", + "common_fraud_patterns": [] + } + } + +meta: + mcp: + enabled: true + description: "Retrieve merchant category information including MCC code, fraud risk level, and common patterns. Use LUXURY WATCHES INT, EXAMPLE STREAMING, or HOTEL PARIS for testing." + properties: + - name: merchant_name + type: string + description: "Merchant name as it appears on transaction" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_risk_indicators.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_risk_indicators.yaml new file mode 100644 index 000000000..410990dd2 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/get_risk_indicators.yaml @@ -0,0 +1,123 @@ +label: get_risk_indicators +mapping: | + root = match { + this.transaction_id == "TXN-89012" => { + "transaction_id": "TXN-89012", + "risk_indicators": [ + { + "indicator": "international_transaction", + "severity": "high", + "description": "Transaction originated from Singapore, customer has no international transaction history" + }, + { + "indicator": "first_time_merchant", + "severity": "medium", + "description": "Customer has never transacted with this merchant before" + }, + { + "indicator": "unusual_category", + "severity": "high", + "description": "Jewelry purchase is outside customer's typical spending categories" + }, + { + "indicator": "high_amount", + "severity": "high", + "description": "Transaction amount is 14.5x customer's average transaction" + }, + { + "indicator": "merchant_flagged", + "severity": "critical", + "description": "Merchant has been flagged in fraud databases" + } + ], + "total_indicators": 5, + "critical_count": 1, + "high_count": 3, + "medium_count": 1, + "overall_assessment": "high_fraud_probability" + }, + this.transaction_id == "TXN-89013" => { + "transaction_id": "TXN-89013", + "risk_indicators": [ + { + "indicator": "known_merchant", + "severity": "none", + "description": "Example Marketplace is a recognized and trusted merchant" + } + ], + "total_indicators": 1, + "critical_count": 0, + "high_count": 0, + "medium_count": 0, + "overall_assessment": "low_fraud_probability" + }, + this.transaction_id == "TXN-89014" => { + "transaction_id": "TXN-89014", + "risk_indicators": [ + { + "indicator": "recurring_billing", + "severity": "low", + "description": "Subscription service with recurring charges" + }, + { + "indicator": "merchant_billing_issues", + "severity": "medium", + "description": "Merchant has known history of duplicate billing complaints" + }, + { + "indicator": "duplicate_charge_pattern", + "severity": "medium", + "description": "Multiple charges detected from same merchant in short timeframe" + } + ], + "total_indicators": 3, + "critical_count": 0, + "high_count": 0, + "medium_count": 2, + "overall_assessment": "medium_fraud_probability" + }, + this.transaction_id == "TXN-89015" => { + "transaction_id": "TXN-89015", + "risk_indicators": [ + { + "indicator": "international_transaction", + "severity": "low", + "description": "Transaction in France matches customer's travel history" + }, + { + "indicator": "travel_category", + "severity": "none", + "description": "Hotel charge is consistent with customer's frequent travel patterns" + }, + { + "indicator": "timing_matches_travel", + "severity": "none", + "description": "Transaction date aligns with customer's Paris trip" + } + ], + "total_indicators": 3, + "critical_count": 0, + "high_count": 0, + "medium_count": 0, + "overall_assessment": "low_fraud_probability" + }, + _ => { + "transaction_id": this.transaction_id, + "risk_indicators": [], + "total_indicators": 0, + "critical_count": 0, + "high_count": 0, + "medium_count": 0, + "overall_assessment": "insufficient_data" + } + } + +meta: + mcp: + enabled: true + description: "Retrieve fraud risk indicators for a transaction including severity levels and overall assessment. Use TXN-89012 through TXN-89015 for testing." + properties: + - name: transaction_id + type: string + description: "Transaction identifier to analyze (format TXN-XXXXX)" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_transaction_details.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_transaction_details.yaml new file mode 100644 index 000000000..1943fbcd6 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/get_transaction_details.yaml @@ -0,0 +1,99 @@ +label: get_transaction_details +mapping: | + root = match { + this.transaction_id == "TXN-89012" => { + "transaction_id": "TXN-89012", + "customer_id": "CUST-1001", + "amount": 1847.99, + "currency": "USD", + "merchant": { + "name": "LUXURY WATCHES INT", + "category": "jewelry", + "country": "Singapore", + "mcc": "5944" + }, + "card_last_four": "4532", + "date": "2026-01-18T14:22:00Z", + "location": { + "city": "Singapore", + "country": "SG", + "coordinates": "1.3521,103.8198" + }, + "status": "posted" + }, + this.transaction_id == "TXN-89013" => { + "transaction_id": "TXN-89013", + "customer_id": "CUST-1001", + "amount": 47.83, + "currency": "USD", + "merchant": { + "name": "EXAMPLE MKTPLACE", + "category": "online_retail", + "country": "USA", + "mcc": "5942" + }, + "card_last_four": "4532", + "date": "2026-01-15T10:15:00Z", + "location": { + "city": "Seattle", + "country": "US", + "coordinates": "47.6062,-122.3321" + }, + "status": "posted" + }, + this.transaction_id == "TXN-89014" => { + "transaction_id": "TXN-89014", + "customer_id": "CUST-1002", + "amount": 29.99, + "currency": "USD", + "merchant": { + "name": "EXAMPLE STREAMING", + "category": "subscription_service", + "country": "USA", + "mcc": "4899" + }, + "card_last_four": "8821", + "date": "2025-12-15T00:00:01Z", + "location": { + "city": "San Francisco", + "country": "US", + "coordinates": "37.7749,-122.4194" + }, + "status": "posted", + "recurring": true + }, + this.transaction_id == "TXN-89015" => { + "transaction_id": "TXN-89015", + "customer_id": "CUST-1003", + "amount": 312.50, + "currency": "EUR", + "merchant": { + "name": "HOTEL PARIS", + "category": "lodging", + "country": "France", + "mcc": "7011" + }, + "card_last_four": "2193", + "date": "2026-01-10T20:30:00Z", + "location": { + "city": "Paris", + "country": "FR", + "coordinates": "48.8566,2.3522" + }, + "status": "posted" + }, + _ => { + "error": "transaction_not_found", + "message": "No transaction found with ID: " + this.transaction_id + } + } + +meta: + mcp: + enabled: true + description: "Retrieve detailed transaction information including merchant, location, and amount. Use TXN-89012 through TXN-89015 for testing." + properties: + - name: transaction_id + type: string + description: "Transaction identifier (format TXN-XXXXX)" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_transaction_history.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_transaction_history.yaml new file mode 100644 index 000000000..3c8107fd3 --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/get_transaction_history.yaml @@ -0,0 +1,108 @@ +label: get_transaction_history +mapping: | + root = match { + this.customer_id == "CUST-1001" => { + "customer_id": "CUST-1001", + "analysis_period": "last_90_days", + "spending_patterns": { + "average_transaction": 127.45, + "median_transaction": 65.20, + "total_transactions": 87, + "total_amount": 11088.15 + }, + "category_breakdown": [ + {"category": "online_retail", "count": 42, "avg_amount": 78.50}, + {"category": "groceries", "count": 28, "avg_amount": 95.30}, + {"category": "restaurants", "count": 12, "avg_amount": 45.80}, + {"category": "gas_stations", "count": 5, "avg_amount": 62.00} + ], + "location_patterns": { + "primary_region": "US_West_Coast", + "international_transactions": 0, + "cities": ["Seattle", "Bellevue", "Tacoma"] + }, + "merchant_patterns": { + "recurring_merchants": ["EXAMPLE MKTPLACE", "EXAMPLE WHOLESALE", "EXAMPLE COFFEE"], + "first_time_merchants_this_period": 3 + }, + "risk_indicators": { + "unusual_activity": false, + "velocity_flags": 0, + "declined_transactions": 1 + } + }, + this.customer_id == "CUST-1002" => { + "customer_id": "CUST-1002", + "analysis_period": "last_90_days", + "spending_patterns": { + "average_transaction": 95.33, + "median_transaction": 52.10, + "total_transactions": 64, + "total_amount": 6101.12 + }, + "category_breakdown": [ + {"category": "subscription_service", "count": 15, "avg_amount": 29.99}, + {"category": "restaurants", "count": 25, "avg_amount": 68.40}, + {"category": "online_retail", "count": 18, "avg_amount": 110.20}, + {"category": "entertainment", "count": 6, "avg_amount": 45.00} + ], + "location_patterns": { + "primary_region": "US_West_Coast", + "international_transactions": 0, + "cities": ["San Francisco", "Oakland", "San Jose"] + }, + "merchant_patterns": { + "recurring_merchants": ["EXAMPLE STREAMING", "EXAMPLE MEDIA", "EXAMPLE AUDIO"], + "first_time_merchants_this_period": 7 + }, + "risk_indicators": { + "unusual_activity": false, + "velocity_flags": 0, + "declined_transactions": 0 + } + }, + this.customer_id == "CUST-1003" => { + "customer_id": "CUST-1003", + "analysis_period": "last_90_days", + "spending_patterns": { + "average_transaction": 215.67, + "median_transaction": 145.00, + "total_transactions": 52, + "total_amount": 11214.84 + }, + "category_breakdown": [ + {"category": "travel", "count": 8, "avg_amount": 650.00}, + {"category": "lodging", "count": 6, "avg_amount": 380.50}, + {"category": "restaurants", "count": 22, "avg_amount": 85.20}, + {"category": "online_retail", "count": 16, "avg_amount": 95.75} + ], + "location_patterns": { + "primary_region": "US_South", + "international_transactions": 3, + "cities": ["Austin", "Houston", "Dallas", "Paris", "London"] + }, + "merchant_patterns": { + "recurring_merchants": ["EXAMPLE AIRLINES", "EXAMPLE HOTEL", "EXAMPLE TRAVEL"], + "first_time_merchants_this_period": 12 + }, + "risk_indicators": { + "unusual_activity": false, + "velocity_flags": 0, + "declined_transactions": 0 + } + }, + _ => { + "error": "customer_not_found", + "message": "No transaction history found for customer ID: " + this.customer_id + } + } + +meta: + mcp: + enabled: true + description: "Retrieve customer transaction history with spending patterns, category breakdown, and risk indicators. Use CUST-1001, CUST-1002, or CUST-1003 for testing." + properties: + - name: customer_id + type: string + description: "Customer identifier (format CUST-XXXX)" + required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml b/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml new file mode 100644 index 000000000..ade8773ff --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml @@ -0,0 +1,43 @@ +label: log_audit_event +mapping: | + root = { + "audit_id": uuid_v4(), + "timestamp": now(), + "event_type": "dispute_investigation", + "transaction_id": this.transaction_id, + "customer_id": this.customer_id, + "agent_decision": this.decision, + "risk_score": this.risk_score, + "evidence_reviewed": this.evidence, + "outcome": this.outcome, + "escalated": this.escalated, + "compliance_notes": this.notes, + "logged_by": "dispute-resolution-agent", + "status": "recorded" + } + +meta: + mcp: + enabled: true + description: "Log compliance audit events for dispute resolution. Records customer ID, transaction details, decision, and notes." + properties: + - name: customer_id + type: string + description: "Customer identifier (format CUST-XXXX)" + required: true + - name: transaction_id + type: string + description: "Transaction identifier (format TXN-XXXXX)" + required: true + - name: decision + type: string + description: "Dispute resolution decision (approve_refund, deny_claim, etc.)" + required: true + - name: escalated + type: boolean + description: "Whether case was escalated for manual review" + required: false + - name: notes + type: string + description: "Additional compliance notes" + required: false diff --git a/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml b/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml index 55da6473d..fa5e81c63 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml @@ -5,7 +5,7 @@ label: analyze-feedback # tag::component[] openai_chat_completion: api_key: "${secrets.OPENAI_API_KEY}" - model: "gpt-4" + model: "gpt-5.2" prompt: | Analyze this customer feedback and provide: 1. Sentiment (positive/negative/neutral) diff --git a/modules/ai-agents/examples/mcp-tools/processors/verify_merchant.yaml b/modules/ai-agents/examples/mcp-tools/processors/verify_merchant.yaml new file mode 100644 index 000000000..d35ddda8c --- /dev/null +++ b/modules/ai-agents/examples/mcp-tools/processors/verify_merchant.yaml @@ -0,0 +1,119 @@ +label: verify_merchant +mapping: | + root = match { + this.merchant_name == "LUXURY WATCHES INT" => { + "merchant_name": "LUXURY WATCHES INT", + "merchant_id": "MER-99912", + "reputation_score": 12, + "reputation_level": "high_risk", + "verification_status": "unverified", + "fraud_reports": { + "total_reports": 247, + "recent_reports_30d": 42, + "confirmed_fraud_cases": 89 + }, + "business_details": { + "country": "Singapore", + "years_in_operation": 1, + "registration_verified": false + }, + "red_flags": [ + "High volume of fraud reports", + "Recently established business", + "Unverified business registration", + "Operates in high-risk category", + "Pattern of chargebacks" + ], + "recommendation": "block_merchant" + }, + this.merchant_name == "EXAMPLE MKTPLACE" => { + "merchant_name": "EXAMPLE MKTPLACE", + "merchant_id": "MER-00001", + "reputation_score": 98, + "reputation_level": "excellent", + "verification_status": "verified", + "fraud_reports": { + "total_reports": 1203, + "recent_reports_30d": 15, + "confirmed_fraud_cases": 0 + }, + "business_details": { + "country": "USA", + "years_in_operation": 20, + "registration_verified": true, + "parent_company": "Example Organization" + }, + "red_flags": [], + "recommendation": "trusted_merchant" + }, + this.merchant_name == "EXAMPLE STREAMING" => { + "merchant_name": "EXAMPLE STREAMING", + "merchant_id": "MER-45678", + "reputation_score": 65, + "reputation_level": "moderate", + "verification_status": "verified", + "fraud_reports": { + "total_reports": 892, + "recent_reports_30d": 67, + "confirmed_fraud_cases": 12 + }, + "business_details": { + "country": "USA", + "years_in_operation": 5, + "registration_verified": true + }, + "red_flags": [ + "Known billing system issues", + "Frequent duplicate charge complaints", + "Difficult cancellation process" + ], + "common_issues": [ + "Duplicate subscriptions", + "Failed cancellation processing", + "Unclear billing descriptors" + ], + "recommendation": "verify_subscription_details" + }, + this.merchant_name == "HOTEL PARIS" => { + "merchant_name": "HOTEL PARIS", + "merchant_id": "MER-78234", + "reputation_score": 88, + "reputation_level": "trusted", + "verification_status": "verified", + "fraud_reports": { + "total_reports": 45, + "recent_reports_30d": 2, + "confirmed_fraud_cases": 0 + }, + "business_details": { + "country": "France", + "years_in_operation": 15, + "registration_verified": true, + "chain": "Independent Boutique Hotels" + }, + "red_flags": [], + "pricing": { + "average_room_rate_eur": 280, + "typical_range_eur": "220-350" + }, + "recommendation": "legitimate_merchant" + }, + _ => { + "merchant_name": this.merchant_name, + "reputation_score": 50, + "reputation_level": "unknown", + "verification_status": "not_found", + "message": "Merchant not found in verification database", + "recommendation": "manual_review_required" + } + } + +meta: + mcp: + enabled: true + description: "Verify merchant reputation and fraud history. Use LUXURY WATCHES INT (high risk), EXAMPLE MKTPLACE (trusted), EXAMPLE STREAMING (moderate), or HOTEL PARIS (trusted) for testing." + properties: + - name: merchant_name + type: string + description: "Merchant name as it appears on transaction" + required: true diff --git a/modules/ai-agents/examples/pipelines/dispute-pipeline.yaml b/modules/ai-agents/examples/pipelines/dispute-pipeline.yaml new file mode 100644 index 000000000..ef312a562 --- /dev/null +++ b/modules/ai-agents/examples/pipelines/dispute-pipeline.yaml @@ -0,0 +1,157 @@ +# Event-driven transaction dispute processing pipeline +# Automatically flags high-risk transactions and routes them to dispute agent + +input: + kafka: + addresses: ["${REDPANDA_BROKERS}"] + topics: ["bank.transactions"] + consumer_group: dispute-processor + tls: + enabled: true + sasl: + mechanism: SCRAM-SHA-256 + user: "${secrets.DISPUTE_PIPELINE_USERNAME}" + password: "${secrets.DISPUTE_PIPELINE_PASSWORD}" + +pipeline: + processors: + # Filter for high-value or suspicious transactions + - branch: + request_map: | + # Only process transactions above $500 or flagged by upstream systems + root = if this.amount > 500 || this.preliminary_flag == true { + this + } else { + deleted() + } + + processors: + # Calculate preliminary risk score based on transaction attributes + - mapping: | + # Preserve original transaction + root = this + + # Location risk: international transactions get higher score + let location_risk = if this.merchant.country != this.card.billing_country { 40 } else { 0 } + + # Amount risk: large amounts relative to account averages + let amount_risk = if this.amount > 1000 { 30 } else if this.amount > 500 { 15 } else { 0 } + + # Velocity risk: check for multiple recent transactions + let velocity_risk = if this.recent_transaction_count > 5 { 20 } else { 0 } + + # Category risk: luxury goods and high-risk categories + let category_risk = match this.merchant.mcc { + "5944" => 20, # Jewelry + "5094" => 25, # Precious stones + _ => 0 + } + + # Calculate total score + let total_score = $location_risk + $amount_risk + $velocity_risk + $category_risk + + root.preliminary_risk_score = $total_score + root.risk_level = if $total_score > 70 { + "high" + } else if $total_score > 40 { + "medium" + } else { + "low" + } + + # Route high and medium risk transactions to dispute agent for investigation + - branch: + request_map: | + # Only send to agent if risk is medium or higher + root = if this.preliminary_risk_score >= 40 { this } else { deleted() } + + processors: + # Invoke dispute resolution agent via A2A protocol + - a2a_message: + agent_card_url: "${secrets.DISPUTE_AGENT_CARD_URL}" + prompt: | + Investigate this potentially fraudulent transaction and respond with ONLY a JSON object (no additional text): + + Transaction ID: ${! this.transaction_id } + Customer ID: ${! this.customer_id } + Amount: $${! this.amount } ${! this.currency } + Merchant: ${! this.merchant.name } + Location: ${! this.merchant.city }, ${! this.merchant.country } + Date: ${! this.transaction_date } + Preliminary Risk Score: ${! this.preliminary_risk_score }/100 + Risk Level: ${! this.risk_level } + + Return ONLY this JSON format with no other text: + { + "recommendation": "block_and_investigate" | "hold_for_review" | "approve", + "fraud_score": , + "confidence": "high" | "medium" | "low", + "reasoning": "" + } + + # Map agent response back to transaction record + result_map: | + # By default, result_map preserves the original message that entered the branch + # Just add the agent investigation field + root.agent_investigation = if content().string().parse_json().catch(null) != null { + content().string().parse_json() + } else { + { + "recommendation": "manual_review_required", + "fraud_score": 50, + "confidence": "low", + "reasoning": "Agent returned unparseable response: " + content().string().slice(0, 100) + } + } + + # Merge risk scoring and agent results back to original transaction + result_map: | + root = content() + + # Enrich with final decision and tracing metadata + - mapping: | + # Preserve original transaction and all computed fields + root = this + + # Only set final_decision and alert_level if agent investigation occurred + root.final_decision = if this.agent_investigation.exists("recommendation") { + match { + this.agent_investigation.recommendation == "block_and_investigate" => "blocked", + this.agent_investigation.recommendation == "hold_for_review" => "pending_review", + this.agent_investigation.recommendation == "approve" => "approved", + _ => "manual_review_required" + } + } else { + "low_risk_no_investigation" + } + + root.alert_level = if this.agent_investigation.exists("fraud_score") { + match { + this.agent_investigation.fraud_score >= 80 => "critical", + this.agent_investigation.fraud_score >= 60 => "high", + this.agent_investigation.fraud_score >= 40 => "medium", + _ => "low" + } + } else { + "low" + } + + # Add execution metadata for tracing back to agent transcripts + root.pipeline_metadata = { + "processed_at": now().ts_format("2006-01-02T15:04:05.000Z"), + "transaction_id": this.transaction_id, + "customer_id": this.customer_id, + "agent_invoked": this.agent_investigation.exists("fraud_score") + } + +output: + kafka: + addresses: ["${REDPANDA_BROKERS}"] + topic: bank.dispute_results + key: "${! this.transaction_id }" + tls: + enabled: true + sasl: + mechanism: SCRAM-SHA-256 + user: "${secrets.DISPUTE_PIPELINE_USERNAME}" + password: "${secrets.DISPUTE_PIPELINE_PASSWORD}" diff --git a/modules/ai-agents/pages/agents/a2a-concepts.adoc b/modules/ai-agents/pages/agents/a2a-concepts.adoc index 0e08e2219..9a665b0ac 100644 --- a/modules/ai-agents/pages/agents/a2a-concepts.adoc +++ b/modules/ai-agents/pages/agents/a2a-concepts.adoc @@ -34,7 +34,7 @@ For the complete specification, see link:https://a2a.ag/spec[a2a.ag/spec^]. Every A2A-compliant agent exposes an agent card at a well-known URL. -The agent card is a JSON document that describes what the agent can do and how to interact with it. +The agent card is a JSON document that describes what the agent can do and how to interact with it. For the complete agent card specification, see link:https://agent2agent.info/docs/concepts/agentcard/[Agent Card documentation^]. [#agent-card-location] === Agent card location @@ -45,37 +45,7 @@ For example, if your agent URL is `\https://my-agent.ai-agents.abc123.cloud.redp The `.well-known` path follows internet standards for service discovery, making agents discoverable without configuration. -=== Agent card contents - -An agent card describes: - -* Agent capabilities: Skills and tools the agent provides. -* Input/output formats: Expected request and response structures. -* Protocol version: A2A specification version the agent supports. -* Communication modes: Whether the agent supports synchronous calls, streaming, or both. - -Example agent card structure: - -[source,json] ----- -{ - "a2a_version": "1.0", - "name": "Fraud Detection Agent", - "description": "Analyzes transactions for fraudulent activity", - "capabilities": { - "streaming": true, - "synchronous": true - }, - "input_schema": { - "type": "object", - "properties": { - "transaction": { - "type": "object" - } - } - } -} ----- +To configure these fields, see xref:ai-agents:agents/create-agent.adoc#configure-a2a-discovery-metadata-optional[Configure A2A discovery metadata]. == Where A2A is used in Redpanda Cloud diff --git a/modules/ai-agents/pages/agents/architecture-patterns.adoc b/modules/ai-agents/pages/agents/architecture-patterns.adoc index 1e619a2c4..aeed99dde 100644 --- a/modules/ai-agents/pages/agents/architecture-patterns.adoc +++ b/modules/ai-agents/pages/agents/architecture-patterns.adoc @@ -170,11 +170,11 @@ Choose models based on task complexity, latency requirements, and cost constrain === Match models to task complexity -For simple queries, choose cost-effective models such as Haiku. +For simple queries, choose cost-effective models such as GPT-5 Mini. -For balanced workloads, choose mid-tier models. Look for standard names like base GPT versions, or Sonnet tiers. +For balanced workloads, choose mid-tier models such as Claude Sonnet 4.5 or GPT-5.2. -For complex reasoning, choose premium models. Look for labels like Opus or the highest version numbers. +For complex reasoning, choose premium models such as Claude Opus 4.5 or GPT-5.2. === Balance latency and model size diff --git a/modules/ai-agents/pages/agents/concepts.adoc b/modules/ai-agents/pages/agents/concepts.adoc index 43cc6e2c6..bce6d83a8 100644 --- a/modules/ai-agents/pages/agents/concepts.adoc +++ b/modules/ai-agents/pages/agents/concepts.adoc @@ -131,7 +131,9 @@ Agents handle two types of information: conversation context (what's been discus The agent's context includes the system prompt (always present), user messages, agent responses, tool invocation requests, and tool results. -Agents persist conversation context within a session. When you use the *Inspector* tab in the Redpanda Cloud Console, it automatically maintains session state across multiple requests. For programmatic access, applications must pass a session ID to maintain conversation continuity across requests. +Agents persist conversation context within a session. When you use the *Inspector* tab in the Redpanda Cloud Console, it automatically maintains session state across multiple requests. The context ID is displayed at the top of the *Inspector* tab. + +For programmatic access, applications must pass the context ID to maintain conversation continuity across requests. The context ID links to the session record in the agent's sessions topic. === Context window limits diff --git a/modules/ai-agents/pages/agents/create-agent.adoc b/modules/ai-agents/pages/agents/create-agent.adoc index ae4e60750..e0d820a24 100644 --- a/modules/ai-agents/pages/agents/create-agent.adoc +++ b/modules/ai-agents/pages/agents/create-agent.adoc @@ -202,6 +202,41 @@ The *Inspector* tab in the Cloud Console automatically uses this URL to connect For programmatic access or external agent integration, see xref:ai-agents:agents/integration-overview.adoc[]. +== Configure A2A discovery metadata (optional) + +After creating your agent, configure discovery metadata for external integrations. For detailed agent card design guidance, see link:https://agent2agent.info/docs/guides/create-agent-card/[Create an Agent Card^]. + +. Click on your agent. +. Open the *A2A* tab. +. Configure identity fields: ++ +* *Icon URL*: A publicly accessible image URL (recommended: 256x256px PNG or SVG) +* *Documentation URL*: Link to comprehensive agent documentation + +. Configure provider information: ++ +* *Organization*: Your organization or team name +* *URL*: Website or contact URL + +. Configure capabilities by adding skills: ++ +Skills describe what your agent can do for capability-based discovery. External systems use skills to find agents with the right capabilities. ++ +.. Click *+ Add Skill* to define what this agent can do. +.. For each skill, configure: ++ +* *Skill ID* (required): Unique identifier using lowercase letters, numbers, and hyphens (e.g., `fraud-analysis`, `order-lookup`) +* *Skill Name* (required): Human-readable name displayed in agent directories (e.g., "Fraud Analysis", "Order Lookup") +* *Description* (required): Explain what this skill does and when to use it. Be specific about inputs, outputs, and use cases. +* *Tags* (optional): Add tags for categorization and search. Use common terms like `fraud`, `security`, `finance`, `orders`. +* *Examples* (optional): Click *+ Add Example* to provide sample queries demonstrating how to invoke this skill. Examples help users understand how to interact with your agent. ++ +.. Add multiple skills if your agent handles different types of requests. For example, a customer service agent might have separate skills for "Order Status Lookup", "Shipping Tracking", and "Returns Processing". + +. Click *Save Changes*. + +The updated metadata appears immediately at `\https://your-agent-url/.well-known/agent-card.json`. For more about what these fields mean and how they're used, see xref:ai-agents:agents/a2a-concepts.adoc#agent-card-metadata[Agent card metadata]. + == Test your agent . In the agent details view, click the *Inspector* tab. @@ -214,13 +249,15 @@ For programmatic access or external agent integration, see xref:ai-agents:agents . Iterate on the system prompt or tool selection as needed. +For detailed testing strategies, see xref:ai-agents:agents/monitor-agents.adoc[]. + == Example configurations Here are example configurations for different agent types: === Simple query agent -* *Model*: Claude Haiku 4.5 (fast, cost-effective) +* *Model*: GPT-5 Mini (fast, cost-effective) * *Tools*: Single MCP server with `get_orders` tool * *Max iterations*: 10 * *Use case*: Customer order lookups diff --git a/modules/ai-agents/pages/agents/monitor-agents.adoc b/modules/ai-agents/pages/agents/monitor-agents.adoc index def5c6d63..8a1d796ce 100644 --- a/modules/ai-agents/pages/agents/monitor-agents.adoc +++ b/modules/ai-agents/pages/agents/monitor-agents.adoc @@ -99,7 +99,7 @@ Calculate cost per request: Cost = (input_tokens × input_price) + (output_tokens × output_price) ---- -Example: GPT-4o with 4,302 input tokens and 1,340 output tokens at $0.0000025 per input token and $0.00001 per output token costs $0.024 per request. +Example: GPT-5.2 with 4,302 input tokens and 1,340 output tokens at $0.00000175 per input token and $0.000014 per output token costs $0.026 per request. For cost optimization strategies, see xref:ai-agents:agents/concepts.adoc#cost-calculation[Cost calculation]. diff --git a/modules/ai-agents/pages/agents/troubleshooting.adoc b/modules/ai-agents/pages/agents/troubleshooting.adoc index 9f55ad422..e8e71ed36 100644 --- a/modules/ai-agents/pages/agents/troubleshooting.adoc +++ b/modules/ai-agents/pages/agents/troubleshooting.adoc @@ -60,7 +60,7 @@ NEVER respond about order status without calling the tool first. ---- . Review tool descriptions in your MCP server configuration. -. Use a more capable model (GPT-4, Claude Sonnet, or equivalent). +. Use a more capable model (GPT-5.2, Claude Sonnet 4.5, or equivalent). . Increase max iterations if the agent is stopping before reaching tools. **Prevention:** @@ -217,7 +217,7 @@ Diagnose and fix issues related to agent speed and resource consumption. **Solution:** . Use a faster model for simple queries: -.. Haiku or GPT-4o Mini for straightforward tasks +.. GPT-5 Mini for straightforward tasks .. Reserve larger models for complex reasoning . Review conversation history in the *Inspector* tab to identify unnecessary tool calls. . Optimize tool implementations: @@ -401,29 +401,59 @@ processors: Fix problems with external applications calling agents and pipeline-to-agent integration. -=== Pipeline integration failures +=== Agent card does not contain a URL -**Symptoms:** Pipelines using `a2a_message` processor fail or timeout. +**Symptoms:** Pipeline fails with error: `agent card does not contain a URL` or `failed to init processor path root.pipeline.processors.0` **Causes:** -* Agent URL is incorrect in pipeline configuration -* Agent is not running or restarting -* Agent timeout is too low for pipeline workload -* Authentication issues between pipeline and agent -* High event volume overwhelming agent +* The `agent_card_url` points to the base agent endpoint instead of the agent card JSON file **Solution:** -. Verify agent URL in pipeline configuration: -+ +The `agent_card_url` must point to the agent card JSON file, not the base agent endpoint. + +**Incorrect configuration:** + [,yaml] ---- processors: - a2a_message: - agent_card_url: "https://CORRECT-AGENT-URL/.well-known/agent-card.json" + agent_card_url: "https://your-agent-id.ai-agents.your-cluster-id.cloud.redpanda.com" + prompt: "Analyze this transaction: ${!content()}" ---- +**Correct configuration:** + +[,yaml] +---- +processors: + - a2a_message: + agent_card_url: "https://your-agent-id.ai-agents.your-cluster-id.cloud.redpanda.com/.well-known/agent-card.json" + prompt: "Analyze this transaction: ${!content()}" +---- + +The agent card is always available at `/.well-known/agent-card.json` according to the A2A protocol standard. + +**Prevention:** + +* Always append `/.well-known/agent-card.json` to the agent endpoint URL +* Test the agent card URL in a browser before using it in pipeline configuration +* See xref:ai-agents:agents/a2a-concepts.adoc#agent-card-location[Agent card location] for details + +=== Pipeline integration failures + +**Symptoms:** Pipelines using `a2a_message` processor fail or timeout. + +**Causes:** + +* Agent is not running or restarting +* Agent timeout is too low for pipeline workload +* Authentication issues between pipeline and agent +* High event volume overwhelming agent + +**Solution:** + . Check agent status and resource allocation. . Increase agent resource tier for high-volume pipelines. . Add error handling in pipeline: @@ -433,7 +463,7 @@ processors: processors: - try: - a2a_message: - agent_card_url: ${AGENT_URL} + agent_card_url: "https://your-agent-url/.well-known/agent-card.json" catch: - log: message: "Agent invocation failed: ${! error() }" diff --git a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc index 4c239340c..10f16a950 100644 --- a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc +++ b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc @@ -206,7 +206,7 @@ Create the customer support agent with the designed system prompt. * *Name*: `customer-support-agent` * *Description*: `Helps customers track orders and shipping` * *Resource Tier*: Medium -* *Model*: OpenAI GPT-4o or Claude Sonnet (models with strong reasoning) +* *Model*: OpenAI GPT-5.2 or Claude Sonnet 4.5 (models with strong reasoning) * *API Key*: Your LLM provider API key * *MCP Server*: Select `customer-support-tools` * *Max Iterations*: 30 diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc new file mode 100644 index 000000000..28369b3eb --- /dev/null +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -0,0 +1,684 @@ += Build Multi-Agent Systems for Transaction Dispute Resolution +:description: Learn how to build multi-agent systems with domain separation, handle sensitive financial data, and monitor multi-agent execution through transaction investigation. +:page-topic-type: tutorial +:personas: agent_developer, platform_admin +:learning-objective-1: Design multi-agent systems with domain-specific sub-agents +:learning-objective-2: Monitor multi-agent execution using transcripts +:learning-objective-3: Integrate agents with streaming pipelines for event-driven processing + +Build a transaction dispute resolution system using multi-agent architecture, secure data handling, and execution monitoring. + +After completing this tutorial, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +== What you'll learn + +This tutorial advances from xref:ai-agents:agents/tutorials/customer-support-agent.adoc[basic multi-tool orchestration] to multi-agent systems. You'll build a transaction dispute resolution system where a root agent delegates to specialized sub-agents (account, fraud, merchant, compliance), each with focused responsibilities and PII-protected data access. You'll also monitor execution using transcripts and process disputes from transaction streams for automated detection. + +These patterns apply beyond banking to any domain requiring specialized expertise and data security: healthcare systems, insurance claims processing, or regulatory compliance workflows. + +== The scenario + +Banks handle thousands of dispute calls daily. Customers report unauthorized charges, billing errors, or unrecognized transactions. Each investigation requires cross-referencing multiple systems and applying consistent fraud detection logic. + +Traditionally, human agents manually open multiple systems, cross-reference data, and take notes—a 10-15 minute process prone to inconsistencies and incomplete compliance logging. + +Multi-agent automation transforms this workflow by enabling instant data aggregation from all sources, consistent logic applied every time, 30-60 second resolution for simple cases, and structured results for compliance. Human agents handle only complex escalations. + +When a customer calls saying "I see a $247.83 charge from 'ACME CORP' but I never shopped there. Is this fraud?", the system must investigate account history, calculate fraud scores, verify merchant legitimacy, and make a recommendation with structured results. + +== Prerequisites + +* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] with Remote MCP enabled. +* LLM provider API key (this tutorial uses OpenAI GPT-5.2 or Claude Sonnet 4.5 for reasoning). +* The xref:get-started:rpk-install.adoc[Redpanda CLI (`rpk`)] installed (for testing the pipeline with sample data). +* Completed xref:ai-agents:agents/tutorials/customer-support-agent.adoc[] (foundational multi-tool concepts). + +== Create MCP tools for each domain + +Before creating agents, create the tools they'll use. You'll organize tools by domain, matching each sub-agent's responsibility. + +=== Account tools + +Account tools retrieve customer and transaction data with PII protection. + +. Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud Console^]. +. Go to *Agentic AI* > *Remote MCP*. +. Click *Create MCP Server*. +. Configure the server: ++ +* *Name*: `account-tools` +* *Description*: `Customer account and transaction data retrieval` +* *Resource Tier*: XSmall + +. Add the following tools. For each tool, select *Processor* from the component type dropdown, then click *Lint* to validate: ++ +[tabs] +==== +get_customer_account:: ++ +This mock tool returns account data with sensitive fields already protected. Card numbers only include the last 4 digits, while full names remain for verification. In production, implement similar protections in your data layer. ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/get_customer_account.yaml[] +---- + +get_transaction_details:: ++ +This tool returns complete transaction details including merchant information, location, and timestamp. Notice how it returns structured data the fraud agent can analyze. ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/get_transaction_details.yaml[] +---- + +get_transaction_history:: ++ +This tool returns aggregated spending patterns instead of raw transaction lists. This privacy-preserving approach gives fraud analysis what it needs (typical spending by category, location patterns) without exposing individual transaction details unnecessarily. ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/get_transaction_history.yaml[] +---- +==== + +. Click *Create MCP Server*. + +Wait for the server status to show *Running*. + +[NOTE] +==== +This tutorial uses XSmall resource tier for all MCP servers because the mock tools run lightweight Bloblang transformations. Production deployments with external API calls require larger tiers based on throughput needs. See xref:ai-agents:mcp/remote/scale-resources.adoc[]. +==== + +=== Fraud tools + +Fraud tools calculate risk scores and identify fraud indicators. + +. Click *Create MCP Server*. +. Configure the server: ++ +* *Name*: `fraud-tools` +* *Description*: `Fraud detection and risk scoring` +* *Resource Tier*: XSmall + +. Add the following tools. For each tool, select *Processor* from the component type dropdown, then click *Lint* to validate: ++ +[tabs] +==== +calculate_fraud_score:: ++ +This tool implements multi-factor fraud scoring with location risk (0-35 for international/unusual cities), merchant risk (0-30 for reputation/fraud reports), amount risk (0-25 for deviation from averages), velocity risk (0-15 for rapid transactions), and category risk (0-20 for unusual spending categories). The tool returns both the total score and breakdown, allowing agents to explain their reasoning. ++ +[,yaml,role="no-placeholders"] +---- +include::ai-agents:example$mcp-tools/processors/calculate_fraud_score.yaml[] +---- + +get_risk_indicators:: ++ +This tool provides detailed fraud signals with severity levels. Each indicator includes a description that agents can use to explain findings to customers. ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/get_risk_indicators.yaml[] +---- +==== + +. Click *Create MCP Server*. + +Wait for the server status to show *Running*. + +=== Merchant tools + +Merchant tools verify business legitimacy and analyze merchant categories. + +. Click *Create MCP Server*. +. Configure the server: ++ +* *Name*: `merchant-tools` +* *Description*: `Merchant verification and category analysis` +* *Resource Tier*: XSmall + +. Add the following tools. For each tool, select *Processor* from the component type dropdown, then click *Lint* to validate: ++ +[tabs] +==== +verify_merchant:: ++ +This tool returns reputation scores, fraud report counts, business verification status, and red flags. Notice how it includes common issues for legitimate merchants (like subscription billing problems) to help agents distinguish between fraud and merchant operational issues. ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/verify_merchant.yaml[] +---- + +get_merchant_category:: ++ +This tool decodes MCC (Merchant Category Codes) and provides typical transaction ranges for each category. This helps identify mismatches (like a grocery store charging $2000). ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/get_merchant_category.yaml[] +---- +==== + +. Click *Create MCP Server*. + +Wait for the server status to show *Running*. + +=== Compliance tools + +Compliance tools handle audit logging and regulatory requirements. + +. Click *Create MCP Server*. +. Configure the server: ++ +* *Name*: `compliance-tools` +* *Description*: `Audit logging and regulatory compliance` +* *Resource Tier*: XSmall + +. Add the following tools. For each tool, select *Processor* from the component type dropdown, then click *Lint* to validate: ++ +[tabs] +==== +log_audit_event:: ++ +This tool creates audit records for every investigation. In production, this would write to an immutable audit log. For this tutorial, it returns a confirmation with the audit ID. ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/log_audit_event.yaml[] +---- + +check_regulatory_requirements:: ++ +This tool returns applicable regulations, customer rights, bank obligations, and required documentation for different dispute types. This ensures agents follow proper procedures for Regulation E, Fair Credit Billing Act, and card network rules. ++ +[,yaml] +---- +include::ai-agents:example$mcp-tools/processors/check_regulatory_requirements.yaml[] +---- +==== + +. Click *Create MCP Server*. + +Wait for the server status to show *Running*. You now have four MCP servers with nine total tools, organized by domain. + +== Create the root agent with subagents + +The root agent orchestrates sub-agents and makes final recommendations. You'll configure the root agent first, then add four specialized sub-agents within the same form. + +[IMPORTANT] +==== +Sub-agents inherit the LLM provider, model, resource tier, and max iterations from the root agent. This tutorial uses GPT-5 Mini and max iterations of 15 to optimize performance. Using slower models (GPT-5.2, Claude Sonnet 4.5) or high max iterations (50+) will cause sub-agents to execute slowly—each sub-agent call could take 60-90 seconds instead of 10-15 seconds. +==== + +. Go to *Agentic AI* > *AI Agents*. +. Click *Create Agent*. +. Configure the root agent: ++ +* *Name*: `dispute-resolution-agent` +* *Description*: `Orchestrates transaction dispute investigations` +* *Resource Tier*: Large +* *Provider*: OpenAI +* *Model*: GPT-5 Mini (fast, cost-effective for structured workflows) +* *API Key*: Your LLM provider API key +* *Max Iterations*: 15 ++ +[NOTE] +==== +This tutorial uses GPT-5 Mini and reduced max iterations to optimize for tutorial speed. Multi-agent investigations typically complete in 30-90 seconds with these settings. For production deployments handling complex edge cases, consider GPT-5.2 or Claude Sonnet 4.5 with higher max iterations. +==== + +. In the *System Prompt* field, enter: ++ +[source,text] +---- +include::ai-agents:example$agents/dispute-root-agent-prompt.txt[] +---- + +. Skip the *MCP Tools* section (the root agent uses A2A protocol to call sub-agents, not direct tools). + +. In the *Subagents* section, click *+ Add Subagent*. + +=== Add account agent subagent + +The account agent retrieves customer account and transaction data. + +. Configure the subagent: ++ +* *Name*: `account-agent` +* *Description*: `Retrieves customer account and transaction data` + +. In the subagent's *System Prompt* field, enter: ++ +[source,text] +---- +include::ai-agents:example$agents/account-agent-prompt.txt[] +---- + +. In the subagent's *MCP Tools* section, select `account-tools`. + +=== Add fraud agent subagent + +The fraud agent calculates fraud risk scores and identifies fraud indicators. + +. Click *+ Add Subagent* again. +. Configure the subagent: ++ +* *Name*: `fraud-agent` +* *Description*: `Calculates fraud risk scores and identifies fraud indicators` + +. In the subagent's *System Prompt* field, enter: ++ +[source,text] +---- +include::ai-agents:example$agents/fraud-agent-prompt.txt[] +---- + +. In the subagent's *MCP Tools* section, select `fraud-tools`. + +=== Add merchant agent subagent + +The merchant agent verifies merchant legitimacy and reputation. + +. Click *+ Add Subagent* again. +. Configure the subagent: ++ +* *Name*: `merchant-agent` +* *Description*: `Verifies merchant legitimacy and reputation` + +. In the subagent's *System Prompt* field, enter: ++ +[source,text] +---- +include::ai-agents:example$agents/merchant-agent-prompt.txt[] +---- + +. In the subagent's *MCP Tools* section, select `merchant-tools`. + +=== Add compliance agent subagent + +The compliance agent handles audit logging and regulatory requirements. + +. Click *+ Add Subagent* again. +. Configure the subagent: ++ +* *Name*: `compliance-agent` +* *Description*: `Handles audit logging and regulatory requirements` + +. In the subagent's *System Prompt* field, enter: ++ +[source,text] +---- +include::ai-agents:example$agents/compliance-agent-prompt.txt[] +---- + +. In the subagent's *MCP Tools* section, select `compliance-tools`. + +. Click *Create Agent* to create the root agent with all four subagents. + +Wait for the agent status to show *Running*. + +== Test investigation scenarios + +Test the multi-agent system with realistic dispute scenarios. Each scenario demonstrates different patterns: clear fraud, legitimate transactions, escalation cases, and edge cases. + +. Go to *Agentic AI* > *AI Agents*. +. Click on `dispute-resolution-agent`. +. Open the *Inspector* tab. + +=== Clear fraud case + +Test how the system handles obvious fraud. + +Enter this query: + +[source,text] +---- +I see a $1,847.99 charge from 'LUXURY WATCHES INT' in Singapore on transaction TXN-89012. I've never been to Singapore and don't buy watches. My customer ID is CUST-1001. This is fraud. +---- + +Watch the conversation panel as the investigation progresses. You'll see the root agent call each sub-agent in sequence. After all sub-agents complete (30-90 seconds), the agent sends its final response to the chat. + +In the conversation panel, you'll see the root agent: + +. Routes to account-agent and retrieves customer location data and spending patterns +. Routes to fraud-agent and calculates critical risk level (95+ score) +. Routes to merchant-agent and confirms merchant legitimacy issues +. Routes to compliance-agent and logs investigation +. Takes immediate action and blocks card and approves dispute claim + +After all sub-agents complete, the agent sends its final response to the chat. + +This flow demonstrates multi-agent coordination for high-confidence fraud decisions with realistic banking communication. + +=== Escalation required + +Test how the system handles ambiguous cases requiring human review. + +Click *Clear context*. Then enter: + +[source,text] +---- +I see three $29.99 charges from 'EXAMPLE STREAMING' last month, but I only subscribed once. My customer ID is CUST-1002 and one of the transactions is TXN-89014. +---- + +Watch the conversation panel as the agent investigates. After the sub-agent calls complete, the agent should send a response with a realistic escalation pattern: + +In the conversation panel, you'll see the root agent: + +. Routes to account-agent and confirms recurring charges +. Routes to fraud-agent and receives moderate risk score (not clear fraud) +. Routes to merchant-agent and confirms legitimate merchant +. Routes to compliance-agent and logs as billing error dispute +. Escalates to human specialist (conflicting evidence, requires merchant subscription records) + +This demonstrates the escalation pattern when evidence is ambiguous and requires human review. + +== Monitor multi-agent execution + +The inspector shows real-time progress in the conversation panel, but transcripts provide detailed post-execution analysis with timing, token usage, and full trace hierarchy. + +. In the left navigation, click *Transcripts*. +. Select a recent transcript from your fraud case test. + +In the trace hierarchy, you'll see: + +* Root agent invocation (top-level span) +* Multiple `invoke_agent` spans for each sub-agent call +* Individual LLM calls within each agent +* MCP tool invocations within sub-agents + +In the summary panel, check: + +* *Duration*: Total investigation time (typically 5-15 seconds) +* *Token Usage*: Cost tracking across all agents +* *LLM Calls*: How many reasoning steps were needed + +This visibility helps you: + +* Verify sub-agents are being called in the right order +* Identify slow sub-agents that need optimization +* Track costs per investigation for budgeting + +For detailed trace structure, see xref:ai-agents:observability/concepts.adoc#agent-trace-hierarchy[Agent trace hierarchy]. + +== Integrate with streaming pipeline + +Process disputes automatically from transaction streams. When transactions meet certain risk thresholds, the pipeline invokes the dispute agent for immediate investigation. + +=== Create a secret for the agent card URL + +The pipeline needs the agent card URL to invoke the dispute resolution agent. + +. Go to *Agentic AI* > *AI Agents*. +. Click on `dispute-resolution-agent`. +. Open the *A2A* tab. +. Copy the agent URL displayed at the top. +. Go to *Connect* > *Secrets*. +. Click *Create Secret*. +. Create the secret: ++ +* *Name*: `DISPUTE_AGENT_CARD_URL` +* *Value*: Paste the agent URL and append `/.well-known/agent-card.json` to the end ++ +For example, if the agent URL is: ++ +---- +https://abc123.ai-agents.def456.cloud.redpanda.com +---- ++ +The secret value should be: ++ +---- +https://abc123.ai-agents.def456.cloud.redpanda.com/.well-known/agent-card.json +---- + +. Click *Create Secret*. + +=== Create topics for transaction data + +Create the topics the pipeline will use for input and output. + +. Go to *Topics* in the Redpanda Cloud Console. +. Click *Create Topic*. +. Create the input topic: ++ +* *Name*: `bank.transactions` +* *Partitions*: 3 +* *Replication factor*: 3 + +. Click *Create Topic* again. +. Create the output topic: ++ +* *Name*: `bank.dispute_results` +* *Partitions*: 3 +* *Replication factor*: 3 + +=== Create a SASL user for topic access + +The pipeline needs SASL credentials to read from and write to Redpanda topics. + +. Go to *Security* > *Users* in the Redpanda Cloud Console. +. Click *Create User*. +. Configure the user: ++ +* *Username*: `dispute-pipeline-user` +* *Password*: Generate a secure password +* *Mechanism*: SCRAM-SHA-256 + +. Save the username and password. You'll need them for the pipeline secrets. + +. Click *Create*. + +. Click *Create ACL* to grant permissions. + +. Click the *Clusters* tab for cluster permissions and select *Allow all*. + +. Click *Add rule* to add another ACL. + +. Click the *Topics* tab for topic permissions: ++ +* *Principal*: `dispute-pipeline-user` +* *Host*: Allow all hosts (`*`) +* *Resource Type*: Topic +* *Selector*: Topic names starting with `bank.` +* *Operations*: Allow all + +. Click *Add rule* to add another ACL. + +. Click the *Consumer groups* tab for consumer group permissions and select *Allow all*. + +. Click *Create*. + +=== Create secrets for SASL authentication + +The pipeline needs SASL credentials stored as secrets to authenticate with Redpanda topics. + +. Go to *Connect* > *Secrets* in the Redpanda Cloud Console (if not already there). +. Click *Create Secret*. +. Create two secrets with these values: ++ +* *Name*: `DISPUTE_PIPELINE_USERNAME`, *Value*: `dispute-pipeline-user` +* *Name*: `DISPUTE_PIPELINE_PASSWORD`, *Value*: The password you created for `dispute-pipeline-user` + +=== Create the pipeline + +. Go to *Connect* in the Redpanda Cloud Console. +. Click *Create Pipeline*. +. In the numbered steps, click *4 Add permissions*. +. Select *Service Account*. ++ +The Service Account is required for the `a2a_message` processor to authenticate with and invoke the dispute resolution agent. Without this permission, the pipeline will fail when attempting to call the agent. + +. Click *Next*. +. Name the pipeline `dispute-pipeline`. +. Paste this configuration: ++ +[,yaml] +---- +include::ai-agents:example$pipelines/dispute-pipeline.yaml[] +---- + +This pipeline: + +* Consumes transactions from `bank.transactions` topic +* Filters for high-value transactions (>$500) or pre-flagged transactions +* Calculates preliminary risk score based on location, amount, velocity, and category +* Routes transactions with risk score ≥40 to the dispute-resolution-agent via A2A +* Outputs investigation results to `bank.dispute_results` topic + +=== Test the pipeline + +. Authenticate with your Redpanda Cloud cluster: ++ +[,bash] +---- +rpk cloud login +---- + +. Create a test transaction that will trigger the agent investigation: ++ +[,bash] +---- +echo '{ + "transaction_id": "TXN-89012", + "customer_id": "CUST-1001", + "amount": 1847.99, + "currency": "USD", + "merchant": { + "name": "LUXURY WATCHES INT", + "category": "jewelry", + "country": "Singapore", + "mcc": "5944", + "city": "Singapore" + }, + "card": { + "last_four": "4532", + "billing_country": "USA" + }, + "transaction_date": "2026-01-21T10:00:00Z", + "recent_transaction_count": 2 +}' | rpk topic produce bank.transactions +---- ++ +This transaction will trigger agent investigation because: ++ +* International transaction (Singapore vs USA): +40 risk points +* Amount is greater than $1000: +30 risk points +* Jewelry category (MCC 5944): +20 risk points +* **Total preliminary risk score: 90** (well above the 40 threshold) + +. Wait a minute for the pipeline to process the transaction. You can monitor the progress in *Transcripts*. While the agents investigate, a new transcript for `dispute-resolution-agent` will appear. Until the investigation completes, the transcript will show *awaiting root* status. + +. Consume the results: ++ +[,bash] +---- +rpk topic consume bank.dispute_results --offset end -n 1 +---- ++ +You'll see the complete transaction with agent investigation results: ++ +[,json,role="no-wrap"] +---- +{ + "agent_investigation": { + "confidence": "high", + "fraud_score": 91, + "reasoning": "Transaction is an international purchase with no recent international activity, from a merchant with strong fraud indicators, and the amount is a large outlier for this account; immediate block and investigation recommended.", + "recommendation": "block_and_investigate" + }, + "alert_level": "critical", + "amount": 1847.99, + "card": { + "billing_country": "USA", + "last_four": "4532" + }, + "currency": "USD", + "customer_id": "CUST-1001", + "final_decision": "blocked", + "merchant": { + "category": "jewelry", + "city": "Singapore", + "country": "Singapore", + "mcc": "5944", + "name": "LUXURY WATCHES INT" + }, + "pipeline_metadata": { + "agent_invoked": true, + "customer_id": "CUST-1001", + "processed_at": "2026-01-27T14:29:19.436Z", + "transaction_id": "TXN-89012" + }, + "preliminary_risk_score": 90, + "recent_transaction_count": 2, + "risk_level": "high", + "transaction_date": "2026-01-21T10:00:00Z", + "transaction_id": "TXN-89012" +} +---- + +This output contains everything downstream systems need such as fraud monitoring, customer alerts, and audit logging. + +The pipeline uses a two-stage filter: + +- Only processes transactions with `amount > 500` or `preliminary_flag == true` +- Only sends transactions to the agent if `preliminary_risk_score >= 40` + +Transactions that pass the first filter but not the second (e.g., a $600 domestic transaction with low risk) will appear in the output with: + +* `final_decision: "low_risk_no_investigation"` +* `alert_level: "low"` +* No `agent_investigation` field + +Only transactions meeting the risk threshold invoke the dispute resolution agent. + +=== Trace pipeline execution to agent transcripts + +Use the pipeline metadata timestamp to find the corresponding agent execution in the *Transcripts* view. + +. Note the `processed_at` timestamp from the pipeline output (for example: `2026-01-26T18:30:45.000Z`). +. Go to *Agentic AI* > *Transcripts*. +. Find transcripts for `dispute-resolution-agent` that match your timestamp. + +[NOTE] +==== +The search function does not search through prompt content or attribute values. Use the timestamp to narrow down the time window, then manually review transcripts from that period. +==== + +In the transcript details, you'll see: + +* The full prompt sent to the agent (including transaction ID and details) +* Each sub-agent invocation (account-agent, fraud-agent, merchant-agent, compliance-agent) +* Token usage and execution time for the investigation +* The complete JSON response returned to the pipeline + +== Troubleshoot + +For comprehensive troubleshooting guidance, see xref:ai-agents:agents/troubleshooting.adoc[]. + +=== Test with mock data + +The mock tools in this tutorial use hardcoded customer and transaction IDs for testing: + +* Customer IDs: `CUST-1001`, `CUST-1002`, `CUST-1003` +* Transaction IDs: `TXN-89012`, `TXN-89013`, `TXN-89014`, `TXN-89015` + +Use these documented test IDs when testing in the inspector or the pipeline. The sub-agents' mock tools require valid IDs to return transaction details, account history, and fraud indicators. Using other IDs (like `TXN-TEST-001` or `CUST-9999`) will cause the tools to return "not found" errors, and the root agent won't be able to complete its investigation. + +For production deployments, replace the mock tools with API calls to your account, fraud detection, merchant verification, and compliance systems. + +== Next steps + +* xref:ai-agents:agents/architecture-patterns.adoc[] +* xref:ai-agents:agents/integration-overview.adoc[] +* xref:ai-agents:agents/pipeline-integration-patterns.adoc[] +* xref:ai-agents:agents/monitor-agents.adoc[] +* xref:ai-agents:mcp/remote/best-practices.adoc[] diff --git a/modules/ai-agents/pages/observability/concepts.adoc b/modules/ai-agents/pages/observability/concepts.adoc index 99b0fa6a3..6e4bd3eee 100644 --- a/modules/ai-agents/pages/observability/concepts.adoc +++ b/modules/ai-agents/pages/observability/concepts.adoc @@ -62,7 +62,7 @@ Agent traces contain these span types: | Trace calls between root agents and sub-agents, measure cross-agent latency, and identify which sub-agent was invoked. | `openai`, `anthropic`, or other LLM providers -| LLM provider API call showing calls to the language model. The span name matches the provider, and attributes typically include the model name (like `gpt-4o` or `claude-sonnet-4`). +| LLM provider API call showing calls to the language model. The span name matches the provider, and attributes typically include the model name (like `gpt-5.2` or `claude-sonnet-4-5`). | Identify which model was called, measure LLM response time, and debug LLM API errors. | `rpcn-mcp` @@ -78,7 +78,7 @@ A simple agent request creates this hierarchy: ai-agent (6.65 seconds) ├── agent (6.41 seconds) │ ├── invoke_agent: customer-support-agent (6.39 seconds) -│ │ └── openai: chat gpt-4o (6.2 seconds) +│ │ └── openai: chat gpt-5.2 (6.2 seconds) ---- This shows: From 4036ba9ee71d5af5f3e256842ec4492de5152d56 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Tue, 27 Jan 2026 17:11:09 +0000 Subject: [PATCH 09/35] Improve readability --- modules/ai-agents/pages/agents/concepts.adoc | 25 +-- .../ai-agents/pages/agents/create-agent.adoc | 54 +++---- .../pages/agents/monitor-agents.adoc | 70 +++------ .../pages/agents/troubleshooting.adoc | 8 +- .../tutorials/customer-support-agent.adoc | 146 ++++-------------- .../transaction-dispute-resolution.adoc | 8 +- 6 files changed, 90 insertions(+), 221 deletions(-) diff --git a/modules/ai-agents/pages/agents/concepts.adoc b/modules/ai-agents/pages/agents/concepts.adoc index bce6d83a8..0ddb068f9 100644 --- a/modules/ai-agents/pages/agents/concepts.adoc +++ b/modules/ai-agents/pages/agents/concepts.adoc @@ -22,11 +22,11 @@ Every agent request follows a reasoning loop. The agent doesn't execute all tool When an agent receives a request: -. **LLM receives context**: System prompt, conversation history, user request, and previous tool results -. **LLM decides action**: Choose to invoke a tool, request more information, or respond to user -. **Tool executes** (if chosen): Tool runs and returns results. -. **Context grows**: Tool results added to conversation history -. **Loop repeats**: LLM reasons again with expanded context. +. The LLM receives the context, including system prompt, conversation history, user request, and previous tool results. +. The LLM chooses to invoke a tool, requests more information, or responds to user. +. The tool runs and returns results if invoked. +. The tool's results are added to conversation history. +. The LLM reasons again with an expanded context. The loop continues until one of these conditions is met: @@ -42,10 +42,9 @@ Each iteration includes three phases: . **Tool invocation**: If the agent decides to call a tool, execution happens and waits for results. . **Context expansion**: Tool results are added to the conversation history for the next iteration. -This creates a cost/capability/latency triangle: +With higher iteration limits, agents can complete complex tasks but costs more and takes longer. -* **Higher iteration limits**: Agent can complete complex tasks but costs more and takes longer. -* **Lower iteration limits**: Faster, cheaper responses but agent may fail on complex requests. +With lower iteration limits, agents respond faster and cheaper but may fail on complex requests. ==== Cost calculation @@ -131,9 +130,7 @@ Agents handle two types of information: conversation context (what's been discus The agent's context includes the system prompt (always present), user messages, agent responses, tool invocation requests, and tool results. -Agents persist conversation context within a session. When you use the *Inspector* tab in the Redpanda Cloud Console, it automatically maintains session state across multiple requests. The context ID is displayed at the top of the *Inspector* tab. - -For programmatic access, applications must pass the context ID to maintain conversation continuity across requests. The context ID links to the session record in the agent's sessions topic. +As the conversation progresses, context grows. Each tool result adds tokens to the context window, which the LLM uses for reasoning in subsequent iterations. === Context window limits @@ -143,12 +140,6 @@ When context exceeds the limit, the oldest tool results get truncated, the agent Design workflows to complete within context limits. Avoid unbounded tool chaining. -=== State across conversations - -Redpanda Cloud automatically persists conversation history. The *Inspector* tab automatically manages sessions for you. For programmatic integration, pass a session ID in API requests to maintain conversation continuity. - -If you need additional state management beyond conversation history, create tools that read/write to custom state stores, or pass relevant context in each request. - == Next steps * xref:ai-agents:agents/architecture-patterns.adoc[] diff --git a/modules/ai-agents/pages/agents/create-agent.adoc b/modules/ai-agents/pages/agents/create-agent.adoc index e0d820a24..db4d1883f 100644 --- a/modules/ai-agents/pages/agents/create-agent.adoc +++ b/modules/ai-agents/pages/agents/create-agent.adoc @@ -176,33 +176,7 @@ Choose based on task complexity: Start with 30 for most use cases. -=== Review and create - -. Review all settings. - -. Configure the service account name (optional): -+ -* Default pattern: `--agent--sa` -* Custom name: 3-128 characters, cannot contain `<` or `>` characters -* This service account authenticates the agent with cluster resources - -. Click *Create Agent*. - -. Wait for agent creation to complete. - -When your agent is running, Redpanda Cloud provides an HTTP endpoint URL with the pattern: - ----- -https://.ai-agents.. ----- - -You can use this URL to call your agent programmatically or integrate it with external systems. - -The *Inspector* tab in the Cloud Console automatically uses this URL to connect to your agent for testing. - -For programmatic access or external agent integration, see xref:ai-agents:agents/integration-overview.adoc[]. - -== Configure A2A discovery metadata (optional) +=== Configure A2A discovery metadata After creating your agent, configure discovery metadata for external integrations. For detailed agent card design guidance, see link:https://agent2agent.info/docs/guides/create-agent-card/[Create an Agent Card^]. @@ -237,6 +211,32 @@ Skills describe what your agent can do for capability-based discovery. External The updated metadata appears immediately at `\https://your-agent-url/.well-known/agent-card.json`. For more about what these fields mean and how they're used, see xref:ai-agents:agents/a2a-concepts.adoc#agent-card-metadata[Agent card metadata]. +=== Review and create + +. Review all settings. + +. Configure the service account name (optional): ++ +* Default pattern: `--agent--sa` +* Custom name: 3-128 characters, cannot contain `<` or `>` characters +* This service account authenticates the agent with cluster resources + +. Click *Create Agent*. + +. Wait for agent creation to complete. + +When your agent is running, Redpanda Cloud provides an HTTP endpoint URL with the pattern: + +---- +https://.ai-agents.. +---- + +You can use this URL to call your agent programmatically or integrate it with external systems. + +The *Inspector* tab in the Cloud Console automatically uses this URL to connect to your agent for testing. + +For programmatic access or external agent integration, see xref:ai-agents:agents/integration-overview.adoc[]. + == Test your agent . In the agent details view, click the *Inspector* tab. diff --git a/modules/ai-agents/pages/agents/monitor-agents.adoc b/modules/ai-agents/pages/agents/monitor-agents.adoc index 8a1d796ce..c493aa291 100644 --- a/modules/ai-agents/pages/agents/monitor-agents.adoc +++ b/modules/ai-agents/pages/agents/monitor-agents.adoc @@ -1,10 +1,10 @@ = Monitor Agent Activity -:description: Monitor agent execution, analyze conversation history, track token usage, and debug issues using inspector, transcripts, and agent data topics. +:description: Monitor agent execution, analyze conversation history, track token usage, and debug issues using Inspector, Transcripts, and agent data topics. :page-topic-type: how-to :personas: agent_developer, platform_admin :learning-objective-1: pass:q[Verify agent behavior using the *Inspector* tab] :learning-objective-2: Track token usage and performance metrics -:learning-objective-3: Debug agent execution using transcripts +:learning-objective-3: pass:q[Debug agent execution using *Transcripts*] Use monitoring to track agent performance, analyze conversation patterns, debug execution issues, and optimize token costs. @@ -20,94 +20,64 @@ For conceptual background on traces and observability, see xref:ai-agents:observ You must have a running agent. If you do not have one, see xref:ai-agents:agents/quickstart.adoc[]. -== Debug agent execution with transcripts +== Debug agent execution with Transcripts -The transcripts view shows execution traces with detailed timing, errors, and performance metrics. Use this view to debug issues, verify agent behavior, and monitor performance in real-time. +The *Transcripts* view shows execution traces with detailed timing, errors, and performance metrics. Use this view to debug issues, verify agent behavior, and monitor performance in real-time. :context: agent include::ai-agents:partial$transcripts-ui-guide.adoc[] === Check agent health -Use the transcripts view to verify your agent is healthy: +Use the *Transcripts* view to verify your agent is healthy. Look for consistent green bars in the timeline, which indicate successful executions. Duration should stay within your expected range, while token usage remains stable without unexpected growth. -Healthy agent indicators: +Several warning signs indicate problems. Red bars in the timeline mean errors or failures that need investigation. When duration increases over time, your context window may be growing or tool calls could be slowing down. Many LLM calls for simple requests often signal that the agent is stuck in loops or making unnecessary iterations. If you see missing transcripts, the agent may be stopped or encountering deployment issues. -* Timeline shows consistent green bars (successful executions) -* Duration stays within expected range (check summary panel) -* Token usage is stable (not growing unexpectedly) -* LLM calls match expected patterns (1-3 calls for simple queries) -* No error bars in timeline +Pay attention to patterns across multiple executions. When all recent transcripts show errors, start by checking agent status, MCP server connectivity, and system prompt configuration. A spiky timeline that alternates between success and error typically points to intermittent tool failures or external API issues. If duration increases steadily over a session, your context window is likely filling up. Clear the conversation history to reset it. High token usage combined with relatively few LLM calls usually means tool results are large or your system prompts are verbose. -Warning signs: +=== Debug with Transcripts -* Red bars in timeline: Errors or failures, click to investigate -* Increasing duration: May indicate context window growth or slow tool calls -* High token usage: Check if conversation history is too long -* Many LLM calls: Agent may be stuck in loops or making unnecessary iterations -* Missing transcripts: Agent may be stopped or encountering deployment issues +Use *Transcripts* to diagnose specific issues: -Common patterns to investigate: - -* All recent transcripts show errors: Check agent status, MCP server connectivity, or system prompt -* Duration increasing over session: Context window filling up, consider clearing conversation history -* Spiky timeline (alternating success/error): Intermittent tool failures or external API issues -* High token usage with few LLM calls: Large tool results or verbose system prompts - -=== Debug with transcripts - -Use transcripts to diagnose specific issues: - -Agent not responding +If the agent is not responding: . Check the timeline for recent transcripts. If none appear, the agent may be stopped. . Verify agent status in the main *AI Agents* view. . Look for error transcripts with deployment or initialization failures. -Tool execution errors +If the agent fails during execution: . Select the failed transcript (red bar in timeline). . Expand the trace hierarchy to find the tool invocation span. . Check the span details for error messages. . Cross-reference with MCP server status. -Slow performance +If performance is slow: . Compare duration across multiple transcripts in the summary panel. . Look for specific spans with long durations (wide bars in trace list). . Check if LLM calls are taking longer than expected. . Verify tool execution time by examining nested spans. -Unexpected behavior - -. Select the transcript for the problematic request. -. Expand the full trace hierarchy to see all operations. -. Look for missing tool calls (agent didn't invoke expected tools). -. Check LLM call count: excessive calls may indicate loops. - === Track token usage and costs -View token consumption in the Summary panel when you select a transcript: - -* Input tokens: Tokens sent to the LLM (system prompt + conversation history + tool results) -* Output tokens: Tokens generated by the LLM (agent responses) -* Total tokens: Sum of input and output +View token consumption in the *Summary* panel when you select a transcript. The breakdown shows input tokens (everything sent to the LLM including system prompt, conversation history, and tool results), output tokens (what the LLM generates in agent responses), and total tokens as the sum of both. Calculate cost per request: ---- -Cost = (input_tokens × input_price) + (output_tokens × output_price) +Cost = (input_tokens x input_price) + (output_tokens x output_price) ---- Example: GPT-5.2 with 4,302 input tokens and 1,340 output tokens at $0.00000175 per input token and $0.000014 per output token costs $0.026 per request. For cost optimization strategies, see xref:ai-agents:agents/concepts.adoc#cost-calculation[Cost calculation]. -== Test agent behavior with the inspector +== Test agent behavior with Inspector The *Inspector* tab provides real-time conversation testing. Use it to test agent responses interactively and verify behavior before deploying changes. -=== Access the inspector +=== Access Inspector . Navigate to *Agentic AI* > *AI Agents* in the Redpanda Cloud Console. . Click your agent name. @@ -118,13 +88,9 @@ The *Inspector* tab provides real-time conversation testing. Use it to test agen === Testing best practices -Test your agents systematically with these scenarios: +Test your agents systematically by exploring edge cases and potential failure scenarios. Begin with boundary testing. Requests at the edge of agent capabilities verify that scope enforcement works correctly. Error handling becomes clear when you request unavailable data and observe whether the agent degrades gracefully or fabricates information. -* Boundary cases: Test requests at the edge of agent capabilities to verify scope enforcement. -* Error handling: Request unavailable data to verify graceful degradation. -* Iteration count: Monitor how many iterations complex requests require. -* Ambiguous input: Send vague queries to verify clarification behavior. -* Token usage: Track tokens per request to estimate costs. +Monitor iteration counts during complex requests to ensure they complete within your configured limits. Ambiguous or vague queries reveal whether the agent asks clarifying questions or makes risky assumptions. Throughout testing, track token usage per request to estimate costs and identify which query patterns consume the most resources. == Next steps diff --git a/modules/ai-agents/pages/agents/troubleshooting.adoc b/modules/ai-agents/pages/agents/troubleshooting.adoc index e8e71ed36..eaad03967 100644 --- a/modules/ai-agents/pages/agents/troubleshooting.adoc +++ b/modules/ai-agents/pages/agents/troubleshooting.adoc @@ -175,7 +175,7 @@ Critical rules: * Include "never fabricate" rules in all system prompts * Test with requests that require unavailable data -* Monitor transcripts and session topic for fabricated responses +* Monitor *Transcripts* and session topic for fabricated responses === Analyzing conversation patterns @@ -183,7 +183,7 @@ Critical rules: **Solution:** -Review conversation history in transcripts to identify problematic patterns: +Review conversation history in *Transcripts* to identify problematic patterns: * Agents calling the same tool repeatedly: Indicates loop detection is needed * Large gaps between messages: Suggests tool timeout or slow execution @@ -193,7 +193,7 @@ Review conversation history in transcripts to identify problematic patterns: **Analysis workflow:** -. Use inspector to reproduce the issue. +. Use *Inspector* to reproduce the issue. . Review full conversation including tool invocations. . Identify where agent behavior diverged from expected. . Check system prompt for missing guidance. @@ -247,7 +247,7 @@ Diagnose and fix issues related to agent speed and resource consumption. **Solution:** -. Review token usage in transcripts. +. Review token usage in *Transcripts*. . Lower max iterations for this agent. . Optimize tool responses to return less data: + diff --git a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc index 10f16a950..e4aa109cb 100644 --- a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc +++ b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc @@ -18,12 +18,7 @@ After completing this tutorial, you will be able to: Agents become powerful when they coordinate multiple tools to solve complex problems. A single-tool agent can retrieve order status. A multi-tool agent can check order status, fetch tracking information, look up customer history, and decide which tools to invoke based on conversation context. -This tutorial teaches multi-tool orchestration through a customer support scenario. You'll see how agents: - -* **Use conversation context to choose tools**: The agent analyzes what the user said and what data it already has to decide which tool to call next. -* **Chain tools in sequence**: When an order is "shipped", the agent follows up with tracking information automatically. -* **Handle missing information**: When users provide incomplete requests, the agent asks clarifying questions instead of guessing. -* **Recover from errors**: When tools return no data, the agent explains the limitation without fabricating information. +This tutorial teaches multi-tool orchestration through a customer support scenario. The patterns you practice here apply to any multi-tool scenario: data analysis agents coordinating query and visualization tools, workflow automation agents chaining approval and notification tools, or research agents combining search and summarization tools. @@ -33,9 +28,9 @@ Customer support teams handle repetitive questions: "Where is my order?", "What' An effective support agent needs three capabilities: -1. **Order status lookup**: Check current order state and contents -2. **Shipping information**: Retrieve tracking numbers and delivery estimates -3. **Order history**: Show past purchases for a customer +- **Order status lookup**: Check current order state and contents +- **Shipping information**: Retrieve tracking numbers and delivery estimates +- **Order history**: Show past purchases for a customer The challenge: users phrase requests differently ("Where's my package?", "Track order ORD-12345", "My recent orders"), and agents must choose the right tool based on context. @@ -46,15 +41,13 @@ The challenge: users phrase requests differently ("Where's my package?", "Track == Design the MCP tools -Before an agent can orchestrate tools, you need tools to orchestrate. The design principle: each tool should do one thing well, returning structured data the agent can reason about. - -=== Tool granularity matters +Before an agent can orchestrate tools, you need tools to orchestrate. Each tool should do one thing well, returning structured data the agent can reason about. -You could create a single `handle_customer_request` tool that takes a natural language query and returns an answer. This approach fails because: +You could create a single `handle_customer_request` tool that takes a natural language query and returns an answer. But, this approach fails because: * The agent can't inspect intermediate results * Tool chaining becomes impossible (no way to pass order status to shipping lookup) -* Error handling is opaque (did the order lookup fail or the shipping lookup?) +* Error handling is opaque Instead, create focused tools: @@ -66,6 +59,8 @@ This granularity enables the agent to chain tools (check order status, see it's === Deploy the tools +Create a Remote MCP server with the three tools. + . Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud Console^] . Go to *Agentic AI* > *Remote MCP* . Click *Create MCP Server* @@ -74,44 +69,37 @@ This granularity enables the agent to chain tools (check order status, see it's * *Name*: `customer-support-tools` * *Description*: `Tools for customer support agent` -. Add the first tool with this YAML configuration: +. Add the following tools. For each tool, select *Processor* from the component type dropdown, then click *Lint* to validate: ++ +[tabs] +==== +get_order_status:: ++ +This tool uses the `mapping` processor to return mock data. The mock approach enables testing without external dependencies. The agent must interpret the structured response to extract order details. + [,yaml] ---- include::ai-agents:example$mcp-tools/processors/get_order_status.yaml[] ---- -+ -This tool uses the `mapping` processor to return mock data. The mock approach enables testing without external dependencies. In production, replace `mapping` with `http` to call your actual order API. -+ -Notice the tool's design: -+ -* **Single responsibility**: Only retrieves order status, nothing else -* **Structured output**: Returns JSON the agent can parse -* **Predictable format**: Always includes `order_id`, `status`, `items`, `total` -. Select *Processor* from the component type dropdown, then click *Lint* to validate. - -. Click *Add Tool* and add the second tool: +get_shipping_info:: ++ +This tool demonstrates conditional data: it only returns tracking information when the order has shipped. When an order hasn't shipped yet, the tool returns an empty result. The agent must handle this case. + [,yaml] ---- include::ai-agents:example$mcp-tools/processors/get_shipping_info.yaml[] ---- -+ -This tool demonstrates conditional data: it only returns tracking information when the order has shipped. When an order hasn't shipped yet, the tool returns an empty result. The agent must handle this case. -+ -Select *Processor* from the component type dropdown, then click *Lint*. -. Click *Add Tool* and add the third tool: +get_customer_history:: ++ +This tool returns multiple orders, demonstrating list-handling. The agent must format multiple results clearly for users. + [,yaml] ---- include::ai-agents:example$mcp-tools/processors/get_customer_history.yaml[] ---- -+ -This tool returns multiple orders, demonstrating list-handling. The agent must format multiple results clearly for users. -+ -Select *Processor* from the component type dropdown, then click *Lint*. +==== . Click *Create MCP Server* @@ -121,83 +109,9 @@ Wait for the server status to show *Running*. You now have three focused tools t The system prompt teaches the agent how to orchestrate tools. Without explicit guidance, the agent must guess when to use each tool, often choosing incorrectly or ignoring tools entirely. -=== Specify when to use each tool - -The prompt must explicitly state when to invoke each tool. - -When the prompt doesn't specify when to use tools, the agent must guess based on tool names and descriptions alone. This leads to wrong tool choices, unnecessary calls, or skipped tools entirely. - -.Don't -[,text] ----- -You have access to order, shipping, and customer history tools. ----- - -The agent sees three tools but lacks decision criteria. When a user asks "Where's my order?", the agent might call the wrong tool first, call all tools unnecessarily, or skip tools and fabricate an answer. - -.Do -[,text] ----- -When to use tools: -- Use get_order_status when customer provides an order ID -- Use get_shipping_info when order status is "shipped" -- Use get_customer_history when customer asks about past orders ----- - -Explicit criteria create reliable tool selection. The agent follows clear rules instead of guessing. - -=== Define tool chaining logic - -Specify how tool results inform the next action. - -Without chaining instructions, agents treat each tool call as independent. They miss opportunities to combine data or make redundant calls. - -.Don't -[,text] ----- -Use get_order_status to check orders. -Use get_shipping_info for tracking information. ----- - -The agent calls `get_order_status`, receives status "shipped", but doesn't know to follow up with shipping information. Users get incomplete answers. - -.Do -[,text] ----- -If order is "shipped", follow up with get_shipping_info to provide tracking details. ----- - -The agent uses the first tool's result (whether the status is "shipped") to decide whether to invoke the second tool. This creates context-aware behavior. - -=== Set error handling constraints - -Prevent fabrication when tools fail. - -Without explicit constraints, agents invent plausible-sounding data when tools return errors or empty results. This creates hallucinations. - -.Don't -[,text] ----- -Help customers track their orders. ----- - -When `get_order_status` returns no data, the agent might invent an order status, tracking number, or delivery date that sounds real but is completely fabricated. - -.Do -[,text] ----- -Never: -- Make up tracking numbers or delivery dates -- Guess customer intent - -If order not found, ask customer to verify the order ID. ----- - -Explicit constraints force the agent to acknowledge limitations instead of fabricating information. - === Create the agent -Create the customer support agent with the designed system prompt. +Create the customer support agent with the system prompt. . Go to *Agentic AI* > *AI Agents* . Click *Create Agent* @@ -209,7 +123,7 @@ Create the customer support agent with the designed system prompt. * *Model*: OpenAI GPT-5.2 or Claude Sonnet 4.5 (models with strong reasoning) * *API Key*: Your LLM provider API key * *MCP Server*: Select `customer-support-tools` -* *Max Iterations*: 30 +* *Max Iterations*: 15 . In the *System Prompt* field, enter this configuration: + @@ -265,17 +179,15 @@ Wait for the agent status to show *Running*. == Observe orchestration in action -Testing reveals how the agent makes decisions. Watch the conversation panel in the built-in chat interface to see the agent's reasoning process unfold. +Open the *Inspector* tab in the Redpanda Cloud Console to interact with the agent. -. Go to *Agentic AI* > *AI Agents* -. Click on `customer-support-agent`. -. Open the *Inspector* tab. +Testing reveals how the agent makes decisions. Watch the conversation panel in the built-in chat interface to see the agent's reasoning process unfold. === Tool chaining based on status Test how the agent chains tools based on order status. -Enter this query in the Inspector: +Enter this query in *Inspector*: ---- Hi, I'd like to check on order ORD-12345 @@ -335,7 +247,7 @@ Enter this query: Check order ORD-99999 ---- -The tool returns no data for this order ID. Watch how the agent responds—it explains the order wasn't found and asks the customer to verify the order ID. Critically, the agent does NOT fabricate tracking numbers or order details. +The tool returns no data for this order ID. Watch how the agent responds. It explains the order wasn't found and asks the customer to verify the order ID. Critically, the agent does not fabricate tracking numbers or order details. This demonstrates error recovery without hallucination. The "Never make up tracking numbers" constraint in the system prompt prevents the agent from inventing plausible-sounding but fake information. diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc index 28369b3eb..4b421c2cd 100644 --- a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -3,7 +3,7 @@ :page-topic-type: tutorial :personas: agent_developer, platform_admin :learning-objective-1: Design multi-agent systems with domain-specific sub-agents -:learning-objective-2: Monitor multi-agent execution using transcripts +:learning-objective-2: pass:q[Monitor multi-agent execution using *Transcripts*] :learning-objective-3: Integrate agents with streaming pipelines for event-driven processing Build a transaction dispute resolution system using multi-agent architecture, secure data handling, and execution monitoring. @@ -16,7 +16,7 @@ After completing this tutorial, you will be able to: == What you'll learn -This tutorial advances from xref:ai-agents:agents/tutorials/customer-support-agent.adoc[basic multi-tool orchestration] to multi-agent systems. You'll build a transaction dispute resolution system where a root agent delegates to specialized sub-agents (account, fraud, merchant, compliance), each with focused responsibilities and PII-protected data access. You'll also monitor execution using transcripts and process disputes from transaction streams for automated detection. +This tutorial advances from xref:ai-agents:agents/tutorials/customer-support-agent.adoc[basic multi-tool orchestration] to multi-agent systems. You'll build a transaction dispute resolution system where a root agent delegates to specialized sub-agents (account, fraud, merchant, compliance), each with focused responsibilities and PII-protected data access. You'll also monitor execution using *Transcripts* and process disputes from transaction streams for automated detection. These patterns apply beyond banking to any domain requiring specialized expertise and data security: healthcare systems, insurance claims processing, or regulatory compliance workflows. @@ -383,7 +383,7 @@ This demonstrates the escalation pattern when evidence is ambiguous and requires == Monitor multi-agent execution -The inspector shows real-time progress in the conversation panel, but transcripts provide detailed post-execution analysis with timing, token usage, and full trace hierarchy. +*Inspector* shows real-time progress in the conversation panel, but *Transcripts* provides detailed post-execution analysis with timing, token usage, and full trace hierarchy. . In the left navigation, click *Transcripts*. . Select a recent transcript from your fraud case test. @@ -671,7 +671,7 @@ The mock tools in this tutorial use hardcoded customer and transaction IDs for t * Customer IDs: `CUST-1001`, `CUST-1002`, `CUST-1003` * Transaction IDs: `TXN-89012`, `TXN-89013`, `TXN-89014`, `TXN-89015` -Use these documented test IDs when testing in the inspector or the pipeline. The sub-agents' mock tools require valid IDs to return transaction details, account history, and fraud indicators. Using other IDs (like `TXN-TEST-001` or `CUST-9999`) will cause the tools to return "not found" errors, and the root agent won't be able to complete its investigation. +Use these documented test IDs when testing in *Inspector* or the pipeline. The sub-agents' mock tools require valid IDs to return transaction details, account history, and fraud indicators. Using other IDs (like `TXN-TEST-001` or `CUST-9999`) will cause the tools to return "not found" errors, and the root agent won't be able to complete its investigation. For production deployments, replace the mock tools with API calls to your account, fraud detection, merchant verification, and compliance systems. From 783d2ee713055bb5ceddff87e754383de6920ab6 Mon Sep 17 00:00:00 2001 From: Jake Cahill <45230295+JakeSCahill@users.noreply.github.com> Date: Tue, 27 Jan 2026 17:12:59 +0000 Subject: [PATCH 10/35] Update modules/ai-agents/examples/agents/fraud-agent-prompt.txt Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- modules/ai-agents/examples/agents/fraud-agent-prompt.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/ai-agents/examples/agents/fraud-agent-prompt.txt b/modules/ai-agents/examples/agents/fraud-agent-prompt.txt index 69db69a99..3bdfeb8c7 100644 --- a/modules/ai-agents/examples/agents/fraud-agent-prompt.txt +++ b/modules/ai-agents/examples/agents/fraud-agent-prompt.txt @@ -21,12 +21,12 @@ You are the fraud detection agent for ACME Bank's dispute resolution system. You Consider these factors: -1. **Location Risk** (0-35 points) +1. **Location Risk** (0-30 points) - International vs. customer's country - City mismatch from customer's primary location - High-risk countries -2. **Merchant Risk** (0-30 points) +2. **Merchant Risk** (0-25 points) - Merchant reputation score - Fraud report history - Business verification status @@ -36,16 +36,15 @@ Consider these factors: - Unusually large for merchant category - Round numbers (potential testing) -4. **Velocity Risk** (0-15 points) +4. **Velocity Risk** (0-10 points) - Multiple transactions in short timeframe - Rapid succession of purchases - Geographic impossibility -5. **Category Risk** (0-20 points) +5. **Category Risk** (0-10 points) - Outside customer's typical categories - High-risk MCC codes - Mismatch with spending patterns - ## Risk Levels - **Critical (80-100)**: Almost certainly fraud, immediate action needed From fae5d3c87585055a8fb8b89184741293fb5d0864 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Tue, 27 Jan 2026 17:28:38 +0000 Subject: [PATCH 11/35] Apply suggestions --- .../examples/agents/fraud-agent-prompt.txt | 4 +- .../processors/calculate_fraud_score.yaml | 155 ++++++++++-------- .../check_regulatory_requirements.yaml | 14 +- .../processors/get_merchant_category.yaml | 6 +- .../mcp-tools/processors/log_audit_event.yaml | 12 ++ .../examples/pipelines/test-pipelines.sh | 8 +- 6 files changed, 114 insertions(+), 85 deletions(-) diff --git a/modules/ai-agents/examples/agents/fraud-agent-prompt.txt b/modules/ai-agents/examples/agents/fraud-agent-prompt.txt index 3bdfeb8c7..b2c8a26de 100644 --- a/modules/ai-agents/examples/agents/fraud-agent-prompt.txt +++ b/modules/ai-agents/examples/agents/fraud-agent-prompt.txt @@ -10,8 +10,8 @@ You are the fraud detection agent for ACME Bank's dispute resolution system. You ## Available Tools 1. **calculate_fraud_score**: Multi-factor fraud scoring - - Input: Transaction data, customer data, merchant reputation - - Returns: Fraud score, breakdown by factor, recommendation + - Input: transaction_id, customer_id + - Returns: Fraud score (0-100), risk level, breakdown by factor, recommendation 2. **get_risk_indicators**: Detailed fraud signal detection - Input: transaction_id diff --git a/modules/ai-agents/examples/mcp-tools/processors/calculate_fraud_score.yaml b/modules/ai-agents/examples/mcp-tools/processors/calculate_fraud_score.yaml index b0fecb828..280ddef6f 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/calculate_fraud_score.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/calculate_fraud_score.yaml @@ -1,77 +1,102 @@ label: calculate_fraud_score mapping: | - let location_risk = match { - this.transaction.location.country != this.customer.location_country => 35, - this.transaction.location.city != this.customer.primary_city => 15, - _ => 0 - } - - let merchant_risk = match { - this.merchant_reputation < 40 => 30, - this.merchant_reputation < 70 => 15, - _ => 0 - } - - let amount_risk = match { - this.transaction.amount > (this.customer.avg_transaction * 10) => 25, - this.transaction.amount > (this.customer.avg_transaction * 5) => 15, - this.transaction.amount > (this.customer.avg_transaction * 2) => 5, - _ => 0 - } - - let velocity_risk = match { - this.recent_transactions_count > 10 => 15, - this.recent_transactions_count > 5 => 8, - _ => 0 - } - - let category_risk = match { - this.transaction.merchant.category == "jewelry" && this.customer.typical_categories.contains("jewelry").not() => 20, - this.transaction.merchant.category == "electronics" && this.customer.typical_categories.contains("electronics").not() => 15, - this.transaction.merchant.category == "luxury_goods" && this.customer.typical_categories.contains("luxury_goods").not() => 15, - _ => 0 - } - - let total_score = $location_risk + $merchant_risk + $amount_risk + $velocity_risk + $category_risk - - let risk_level = match { - $total_score >= 80 => "critical", - $total_score >= 60 => "high", - $total_score >= 40 => "medium", - $total_score >= 20 => "low", - _ => "minimal" - } - - root = { - "transaction_id": this.transaction.transaction_id, - "fraud_score": $total_score, - "risk_level": $risk_level, - "score_breakdown": { - "location_risk": $location_risk, - "merchant_risk": $merchant_risk, - "amount_risk": $amount_risk, - "velocity_risk": $velocity_risk, - "category_risk": $category_risk + root = match { + this.transaction_id == "TXN-89012" && this.customer_id == "CUST-1001" => { + "transaction_id": "TXN-89012", + "customer_id": "CUST-1001", + "fraud_score": 95, + "risk_level": "critical", + "score_breakdown": { + "location_risk": 35, + "merchant_risk": 30, + "amount_risk": 25, + "velocity_risk": 0, + "category_risk": 20 + }, + "factors_detected": [ + "unusual_location", + "questionable_merchant", + "unusual_amount", + "unusual_category" + ], + "reasoning": "International transaction from Singapore with no customer history of international purchases. High-value jewelry purchase (14.5x customer average). Merchant has significant fraud indicators.", + "recommendation": "block_and_investigate" + }, + this.transaction_id == "TXN-89013" && this.customer_id == "CUST-1001" => { + "transaction_id": "TXN-89013", + "customer_id": "CUST-1001", + "fraud_score": 8, + "risk_level": "minimal", + "score_breakdown": { + "location_risk": 0, + "merchant_risk": 0, + "amount_risk": 0, + "velocity_risk": 0, + "category_risk": 0 + }, + "factors_detected": [], + "reasoning": "Local transaction from trusted merchant in customer's typical spending category and amount range.", + "recommendation": "approve" + }, + this.transaction_id == "TXN-89014" && this.customer_id == "CUST-1002" => { + "transaction_id": "TXN-89014", + "customer_id": "CUST-1002", + "fraud_score": 52, + "risk_level": "medium", + "score_breakdown": { + "location_risk": 0, + "merchant_risk": 15, + "amount_risk": 0, + "velocity_risk": 8, + "category_risk": 0 + }, + "factors_detected": [ + "questionable_merchant", + "high_velocity" + ], + "reasoning": "Recurring subscription service with known billing issues. Multiple charges detected from same merchant. Moderate merchant reputation score.", + "recommendation": "monitor_closely" + }, + this.transaction_id == "TXN-89015" && this.customer_id == "CUST-1003" => { + "transaction_id": "TXN-89015", + "customer_id": "CUST-1003", + "fraud_score": 12, + "risk_level": "minimal", + "score_breakdown": { + "location_risk": 0, + "merchant_risk": 0, + "amount_risk": 5, + "velocity_risk": 0, + "category_risk": 0 + }, + "factors_detected": [ + "slightly_elevated_amount" + ], + "reasoning": "International hotel charge consistent with customer's frequent travel patterns. Amount within expected range for lodging category.", + "recommendation": "approve" }, - "factors_detected": [ - if $location_risk > 0 { "unusual_location" }, - if $merchant_risk > 0 { "questionable_merchant" }, - if $amount_risk > 0 { "unusual_amount" }, - if $velocity_risk > 0 { "high_velocity" }, - if $category_risk > 0 { "unusual_category" } - ].filter(f -> f != null), - "recommendation": match { - $total_score >= 80 => "block_and_investigate", - $total_score >= 60 => "hold_for_review", - $total_score >= 40 => "monitor_closely", - _ => "approve" + _ => { + "transaction_id": this.transaction_id, + "customer_id": this.customer_id, + "fraud_score": 50, + "risk_level": "medium", + "score_breakdown": { + "location_risk": 0, + "merchant_risk": 0, + "amount_risk": 0, + "velocity_risk": 0, + "category_risk": 0 + }, + "factors_detected": [], + "reasoning": "Insufficient data to calculate accurate fraud score for this transaction/customer combination.", + "recommendation": "monitor_closely" } } meta: mcp: enabled: true - description: "Calculate fraud risk score based on transaction patterns and risk indicators. Returns risk level and recommendation." + description: "Calculate fraud risk score based on transaction patterns and risk indicators. Use TXN-89012 through TXN-89015 with corresponding customer IDs for testing." properties: - name: transaction_id type: string diff --git a/modules/ai-agents/examples/mcp-tools/processors/check_regulatory_requirements.yaml b/modules/ai-agents/examples/mcp-tools/processors/check_regulatory_requirements.yaml index a3a6e189e..f8df06efd 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/check_regulatory_requirements.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/check_regulatory_requirements.yaml @@ -108,17 +108,9 @@ mapping: | meta: mcp: enabled: true - description: "Check regulatory requirements for dispute resolution based on transaction type, amount, and jurisdiction." + description: "Check regulatory requirements for dispute resolution based on dispute type." properties: - - name: transaction_type + - name: dispute_type type: string - description: "Type of transaction (card_not_present, international, recurring, travel)" - required: true - - name: amount - type: number - description: "Transaction amount in USD" - required: true - - name: jurisdiction - type: string - description: "Geographic jurisdiction (USA, EU, APAC)" + description: "Type of dispute (fraud, billing_error, service_not_received)" required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_merchant_category.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_merchant_category.yaml index b8dc484da..f8ac390f1 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/get_merchant_category.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/get_merchant_category.yaml @@ -82,9 +82,9 @@ mapping: | meta: mcp: enabled: true - description: "Retrieve merchant category information including MCC code, fraud risk level, and common patterns. Use LUXURY WATCHES INT, EXAMPLE STREAMING, or HOTEL PARIS for testing." + description: "Retrieve merchant category information including fraud risk level and common patterns based on MCC code." properties: - - name: merchant_name + - name: mcc type: string - description: "Merchant name as it appears on transaction" + description: "Merchant Category Code (5944 for jewelry, 5942 for books, 4899 for streaming, 7011 for hotels)" required: true diff --git a/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml b/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml index ade8773ff..1344e34d0 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml @@ -33,6 +33,18 @@ meta: type: string description: "Dispute resolution decision (approve_refund, deny_claim, etc.)" required: true + - name: risk_score + type: number + description: "Calculated fraud risk score (0-100)" + required: true + - name: evidence + type: object + description: "Evidence reviewed during investigation" + required: true + - name: outcome + type: string + description: "Final outcome of the dispute (approved, denied, escalated, pending)" + required: true - name: escalated type: boolean description: "Whether case was escalated for manual review" diff --git a/modules/ai-agents/examples/pipelines/test-pipelines.sh b/modules/ai-agents/examples/pipelines/test-pipelines.sh index 7945649fb..b8bfd49d5 100755 --- a/modules/ai-agents/examples/pipelines/test-pipelines.sh +++ b/modules/ai-agents/examples/pipelines/test-pipelines.sh @@ -78,10 +78,10 @@ for file in *.yaml; do echo "$output" | sed 's/^/ /' FAILED=$((FAILED + 1)) else - # Other lint error - echo -e "${YELLOW}WARNING${NC}" - echo "$output" | sed 's/^/ /' | head -5 - CLOUD_PROCESSOR_ERRORS=$((CLOUD_PROCESSOR_ERRORS + 1)) + # Other lint error (unexpected) + echo -e "${RED}FAILED${NC}" + echo "$output" | sed 's/^/ /' + FAILED=$((FAILED + 1)) fi fi done From 5c20723abccc3e01157db637a7f6248724510dac Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Tue, 27 Jan 2026 17:36:53 +0000 Subject: [PATCH 12/35] Apply suggestions --- .../mcp-tools/processors/log_audit_event.yaml | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml b/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml index 1344e34d0..57b0a81a5 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/log_audit_event.yaml @@ -1,20 +1,25 @@ label: log_audit_event -mapping: | - root = { - "audit_id": uuid_v4(), - "timestamp": now(), - "event_type": "dispute_investigation", - "transaction_id": this.transaction_id, - "customer_id": this.customer_id, - "agent_decision": this.decision, - "risk_score": this.risk_score, - "evidence_reviewed": this.evidence, - "outcome": this.outcome, - "escalated": this.escalated, - "compliance_notes": this.notes, - "logged_by": "dispute-resolution-agent", - "status": "recorded" - } +processors: + - mapping: | + root = { + "audit_id": uuid_v4(), + "timestamp": now(), + "event_type": "dispute_investigation", + "transaction_id": this.transaction_id, + "customer_id": this.customer_id, + "agent_decision": this.decision, + "risk_score": this.risk_score, + "evidence_reviewed": this.evidence, + "outcome": this.outcome, + "escalated": this.escalated, + "compliance_notes": this.notes, + "logged_by": "dispute-resolution-agent", + "status": "recorded" + } + + - log: + level: INFO + message: "Compliance audit event: ${!json()}" meta: mcp: From 40c2bbb23e9e41642ca1b4a6ec48770de4052885 Mon Sep 17 00:00:00 2001 From: Jake Cahill <45230295+JakeSCahill@users.noreply.github.com> Date: Thu, 29 Jan 2026 12:15:59 +0000 Subject: [PATCH 13/35] Apply suggestion from @JakeSCahill --- modules/ai-agents/pages/agents/a2a-concepts.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ai-agents/pages/agents/a2a-concepts.adoc b/modules/ai-agents/pages/agents/a2a-concepts.adoc index 9a665b0ac..7422303a9 100644 --- a/modules/ai-agents/pages/agents/a2a-concepts.adoc +++ b/modules/ai-agents/pages/agents/a2a-concepts.adoc @@ -45,7 +45,7 @@ For example, if your agent URL is `\https://my-agent.ai-agents.abc123.cloud.redp The `.well-known` path follows internet standards for service discovery, making agents discoverable without configuration. -To configure these fields, see xref:ai-agents:agents/create-agent.adoc#configure-a2a-discovery-metadata-optional[Configure A2A discovery metadata]. +To configure the agent card, see xref:ai-agents:agents/create-agent.adoc#configure-a2a-discovery-metadata-optional[Configure A2A discovery metadata]. == Where A2A is used in Redpanda Cloud From 1cf01c3b362099618760631cf2589aade002034e Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Thu, 29 Jan 2026 12:20:34 +0000 Subject: [PATCH 14/35] Fix example --- .../ai-agents/examples/pipelines/fraud-detection-routing.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ai-agents/examples/pipelines/fraud-detection-routing.yaml b/modules/ai-agents/examples/pipelines/fraud-detection-routing.yaml index 452eacebb..ea5f3f982 100644 --- a/modules/ai-agents/examples/pipelines/fraud-detection-routing.yaml +++ b/modules/ai-agents/examples/pipelines/fraud-detection-routing.yaml @@ -32,7 +32,7 @@ pipeline: Return JSON: { "fraud_score": 0-100, "reason": "explanation", "recommend_block": true/false } result_map: | root = this - root.fraud_analysis = content() + root.fraud_analysis = content().parse_json().catch({}) - mapping: | root = this From 28a21e58d4281f1936ee91c59e98fe48c3a732d9 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Thu, 29 Jan 2026 12:44:37 +0000 Subject: [PATCH 15/35] Fix code review feedback - Parse agent JSON response in fraud-detection-routing pipeline - Add .value accessor to rpk jq filter - Standardize country codes to ISO alpha-2 format - Make model references evergreen - Add Content-Type headers to HTTP POST requests - Normalize MCP tool response structures - Add low/none severity counts to risk indicators - Ensure consistent response schema in fallback branches --- .../mcp-tools/inputs/event_driven_workflow.yaml | 4 ++++ .../mcp-tools/processors/get_order_status.yaml | 10 ++++------ .../mcp-tools/processors/get_risk_indicators.yaml | 6 ++++++ .../mcp-tools/processors/get_transaction_details.yaml | 8 ++++---- .../examples/mcp-tools/processors/verify_merchant.yaml | 7 +++++++ modules/ai-agents/pages/agents/troubleshooting.adoc | 6 ++---- .../pages/mcp/remote/monitor-mcp-servers.adoc | 2 +- 7 files changed, 28 insertions(+), 15 deletions(-) diff --git a/modules/ai-agents/examples/mcp-tools/inputs/event_driven_workflow.yaml b/modules/ai-agents/examples/mcp-tools/inputs/event_driven_workflow.yaml index 53dadb15b..f549f88a0 100644 --- a/modules/ai-agents/examples/mcp-tools/inputs/event_driven_workflow.yaml +++ b/modules/ai-agents/examples/mcp-tools/inputs/event_driven_workflow.yaml @@ -20,12 +20,16 @@ redpanda: - http: url: "${secrets.INVENTORY_API}/reserve" verb: POST + headers: + Content-Type: application/json body: '{"order_id": "${! this.order_id }", "items": ${! json("items") }}' - check: this.event_type == "payment_confirmed" processors: - http: url: "${secrets.FULFILLMENT_API}/ship" verb: POST + headers: + Content-Type: application/json body: '{"order_id": "${! this.order_id }"}' # end::component[] diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_order_status.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_order_status.yaml index 7e78f8ca9..55c962761 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/get_order_status.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/get_order_status.yaml @@ -1,9 +1,7 @@ label: get_order_status - -processors: - - mapping: | - let order_id = this.order_id - root = if $order_id == "ORD-12345" { +mapping: | + let order_id = this.order_id + root = if $order_id == "ORD-12345" { { "order_id": $order_id, "status": "shipped", @@ -23,7 +21,7 @@ processors: } } else if $order_id == "ORD-99999" { { - "error": true, + "error": "order_not_found", "message": "Order not found" } } else { diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_risk_indicators.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_risk_indicators.yaml index 410990dd2..c4ccdf19d 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/get_risk_indicators.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/get_risk_indicators.yaml @@ -74,6 +74,8 @@ mapping: | "critical_count": 0, "high_count": 0, "medium_count": 2, + "low_count": 1, + "none_count": 0, "overall_assessment": "medium_fraud_probability" }, this.transaction_id == "TXN-89015" => { @@ -99,6 +101,8 @@ mapping: | "critical_count": 0, "high_count": 0, "medium_count": 0, + "low_count": 1, + "none_count": 2, "overall_assessment": "low_fraud_probability" }, _ => { @@ -108,6 +112,8 @@ mapping: | "critical_count": 0, "high_count": 0, "medium_count": 0, + "low_count": 0, + "none_count": 0, "overall_assessment": "insufficient_data" } } diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_transaction_details.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_transaction_details.yaml index 1943fbcd6..82b44ba6f 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/get_transaction_details.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/get_transaction_details.yaml @@ -9,7 +9,7 @@ mapping: | "merchant": { "name": "LUXURY WATCHES INT", "category": "jewelry", - "country": "Singapore", + "country": "SG", "mcc": "5944" }, "card_last_four": "4532", @@ -29,7 +29,7 @@ mapping: | "merchant": { "name": "EXAMPLE MKTPLACE", "category": "online_retail", - "country": "USA", + "country": "US", "mcc": "5942" }, "card_last_four": "4532", @@ -49,7 +49,7 @@ mapping: | "merchant": { "name": "EXAMPLE STREAMING", "category": "subscription_service", - "country": "USA", + "country": "US", "mcc": "4899" }, "card_last_four": "8821", @@ -70,7 +70,7 @@ mapping: | "merchant": { "name": "HOTEL PARIS", "category": "lodging", - "country": "France", + "country": "FR", "mcc": "7011" }, "card_last_four": "2193", diff --git a/modules/ai-agents/examples/mcp-tools/processors/verify_merchant.yaml b/modules/ai-agents/examples/mcp-tools/processors/verify_merchant.yaml index d35ddda8c..e0ad87731 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/verify_merchant.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/verify_merchant.yaml @@ -103,6 +103,13 @@ mapping: | "reputation_score": 50, "reputation_level": "unknown", "verification_status": "not_found", + "fraud_reports": { + "total_reports": 0, + "recent_reports_30d": 0, + "confirmed_fraud_cases": 0 + }, + "business_details": {}, + "red_flags": [], "message": "Merchant not found in verification database", "recommendation": "manual_review_required" } diff --git a/modules/ai-agents/pages/agents/troubleshooting.adoc b/modules/ai-agents/pages/agents/troubleshooting.adoc index eaad03967..69eda27eb 100644 --- a/modules/ai-agents/pages/agents/troubleshooting.adoc +++ b/modules/ai-agents/pages/agents/troubleshooting.adoc @@ -60,7 +60,7 @@ NEVER respond about order status without calling the tool first. ---- . Review tool descriptions in your MCP server configuration. -. Use a more capable model (GPT-5.2, Claude Sonnet 4.5, or equivalent). +. Use a more capable model from the supported list for your gateway. . Increase max iterations if the agent is stopping before reaching tools. **Prevention:** @@ -216,9 +216,7 @@ Diagnose and fix issues related to agent speed and resource consumption. **Solution:** -. Use a faster model for simple queries: -.. GPT-5 Mini for straightforward tasks -.. Reserve larger models for complex reasoning +. Use a faster, lower-latency model tier for simple queries and reserve larger models for complex reasoning. . Review conversation history in the *Inspector* tab to identify unnecessary tool calls. . Optimize tool implementations: .. Add caching where appropriate diff --git a/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc b/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc index 20813596a..7966fc3ae 100644 --- a/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc +++ b/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc @@ -71,7 +71,7 @@ Example: Find all invocations of a specific tool: [,bash] ---- rpk topic consume redpanda.otel_traces --offset start \ - | jq 'select(.instrumentationScope.name == "rpcn-mcp" and .name == "weather")' + | jq '.value | select(.instrumentationScope.name == "rpcn-mcp" and .name == "weather")' ---- === Measure performance From 71b1d19f38acfbc67b01710e8a66e456c3a66f2a Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Thu, 29 Jan 2026 13:02:30 +0000 Subject: [PATCH 16/35] Apply suggestions --- .../examples/mcp-tools/processors/openai_chat.yaml | 2 +- .../mcp-tools/processors/transform_validate.yaml | 2 +- .../examples/mcp-tools/snippets/defaults.yaml | 4 ++++ .../agents/tutorials/customer-support-agent.adoc | 2 +- .../tutorials/transaction-dispute-resolution.adoc | 11 +++-------- modules/ai-agents/pages/mcp/remote/create-tool.adoc | 2 +- modules/develop/pages/connect/cookbooks/jira.adoc | 3 ++- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml b/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml index fa5e81c63..b8c202a66 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/openai_chat.yaml @@ -12,7 +12,7 @@ openai_chat_completion: 2. Key themes 3. Actionable insights - Feedback: ${! json("feedback_text") } + Feedback: ${! json(feedback_text) } max_tokens: 500 # end::component[] diff --git a/modules/ai-agents/examples/mcp-tools/processors/transform_validate.yaml b/modules/ai-agents/examples/mcp-tools/processors/transform_validate.yaml index d7b38dab3..b05b619ad 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/transform_validate.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/transform_validate.yaml @@ -14,7 +14,7 @@ processors: root.is_premium = this.subscription_tier == "premium" # Filter sensitive data - root.profile = this.profile.without("ssn", "credit_card") + root.profile = this.profile.or({}).without("ssn", "credit_card") # end::mapping[] meta: diff --git a/modules/ai-agents/examples/mcp-tools/snippets/defaults.yaml b/modules/ai-agents/examples/mcp-tools/snippets/defaults.yaml index 2360420bc..844ea3326 100644 --- a/modules/ai-agents/examples/mcp-tools/snippets/defaults.yaml +++ b/modules/ai-agents/examples/mcp-tools/snippets/defaults.yaml @@ -17,4 +17,8 @@ properties: type: string description: "Temperature units: 'metric' or 'imperial' (default: metric)" required: false + - name: limit + type: number + description: "Max results (default: 10)" + required: false # end::properties[] diff --git a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc index e4aa109cb..7e188f652 100644 --- a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc +++ b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc @@ -213,7 +213,7 @@ Click *Clear context* to clear the conversation history. Then enter this query: Where is my order? ---- -The agent recognizes the request is missing an order ID and asks the customer to provide it. Watch the conversation panel—the agent calls zero tools. Instead of guessing or fabricating information, it asks a clarifying question. +The agent recognizes the request is missing an order ID and asks the customer to provide it. Watch the conversation panel and see that the agent calls zero tools. Instead of guessing or fabricating information, it asks a clarifying question. This demonstrates pre-condition checking. Effective orchestration includes knowing when NOT to invoke tools. diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc index 4b421c2cd..a5edd0434 100644 --- a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -24,9 +24,9 @@ These patterns apply beyond banking to any domain requiring specialized expertis Banks handle thousands of dispute calls daily. Customers report unauthorized charges, billing errors, or unrecognized transactions. Each investigation requires cross-referencing multiple systems and applying consistent fraud detection logic. -Traditionally, human agents manually open multiple systems, cross-reference data, and take notes—a 10-15 minute process prone to inconsistencies and incomplete compliance logging. +Traditionally, human agents manually open multiple systems, cross-reference data, and take notes. A 10-15 minute process prone to inconsistencies and incomplete compliance logging. -Multi-agent automation transforms this workflow by enabling instant data aggregation from all sources, consistent logic applied every time, 30-60 second resolution for simple cases, and structured results for compliance. Human agents handle only complex escalations. +Multi-agent automation transforms this workflow by enabling instant data aggregation from all sources, consistent logic applied every time, 10-15 second resolution, and structured results for compliance. Human agents handle only complex escalations. When a customer calls saying "I see a $247.83 charge from 'ACME CORP' but I never shopped there. Is this fraud?", the system must investigate account history, calculate fraud scores, verify merchant legitimacy, and make a recommendation with structured results. @@ -215,7 +215,7 @@ The root agent orchestrates sub-agents and makes final recommendations. You'll c [IMPORTANT] ==== -Sub-agents inherit the LLM provider, model, resource tier, and max iterations from the root agent. This tutorial uses GPT-5 Mini and max iterations of 15 to optimize performance. Using slower models (GPT-5.2, Claude Sonnet 4.5) or high max iterations (50+) will cause sub-agents to execute slowly—each sub-agent call could take 60-90 seconds instead of 10-15 seconds. +Sub-agents inherit the LLM provider, model, resource tier, and max iterations from the root agent. This tutorial uses GPT-5 Mini and max iterations of 15 to optimize performance. Using slower models (GPT-5.2, Claude Sonnet 4.5) or high max iterations (50+) will cause sub-agents to execute slowly. Each sub-agent call could take 60-90 seconds instead of 10-15 seconds. ==== . Go to *Agentic AI* > *AI Agents*. @@ -229,11 +229,6 @@ Sub-agents inherit the LLM provider, model, resource tier, and max iterations fr * *Model*: GPT-5 Mini (fast, cost-effective for structured workflows) * *API Key*: Your LLM provider API key * *Max Iterations*: 15 -+ -[NOTE] -==== -This tutorial uses GPT-5 Mini and reduced max iterations to optimize for tutorial speed. Multi-agent investigations typically complete in 30-90 seconds with these settings. For production deployments handling complex edge cases, consider GPT-5.2 or Claude Sonnet 4.5 with higher max iterations. -==== . In the *System Prompt* field, enter: + diff --git a/modules/ai-agents/pages/mcp/remote/create-tool.adoc b/modules/ai-agents/pages/mcp/remote/create-tool.adoc index d856b8607..3b13dcec4 100644 --- a/modules/ai-agents/pages/mcp/remote/create-tool.adoc +++ b/modules/ai-agents/pages/mcp/remote/create-tool.adoc @@ -6,7 +6,7 @@ // Learning objectives - what readers can do after reading this page: :learning-objective-1: Create a tool with the correct structure and MCP metadata :learning-objective-2: Map MCP parameters to component configuration fields using Bloblang -:learning-objective-3: Test tools using the MCP inspector +:learning-objective-3: Test tools using the MCP Inspector After xref:ai-agents:mcp/remote/quickstart.adoc[deploying your first MCP server], create custom tools that AI clients can discover and invoke. This guide walks you through the process using any Redpanda Connect component. diff --git a/modules/develop/pages/connect/cookbooks/jira.adoc b/modules/develop/pages/connect/cookbooks/jira.adoc index f00490226..f8015ae1d 100644 --- a/modules/develop/pages/connect/cookbooks/jira.adoc +++ b/modules/develop/pages/connect/cookbooks/jira.adoc @@ -7,7 +7,8 @@ :learning-objective-2: Combine generate input with Jira processor for scheduled queries :learning-objective-3: Create Jira issues using the HTTP processor and REST API -The Jira processor enables querying Jira issues using JQL (Jira Query Language) and returning structured data. Unlike traditional connectors, the Jira processor only supports queries and can be used as both an input (with `generate`) and an output (with `drop`). +The Jira processor enables querying Jira issues using JQL (Jira Query Language) and returning structured data. It’s a processor, so you can use it in pipelines for input-style flows (pair with `generate`) or output-style flows (pair with `drop`). + Use this cookbook to: From ea9910aa52c6a80685846a0a3e4352bd552bbfd6 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Thu, 29 Jan 2026 13:05:08 +0000 Subject: [PATCH 17/35] Apply suggestions --- .../pages/agents/tutorials/transaction-dispute-resolution.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc index a5edd0434..0e6e08ce9 100644 --- a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -516,7 +516,7 @@ The Service Account is required for the `a2a_message` processor to authenticate . Name the pipeline `dispute-pipeline`. . Paste this configuration: + -[,yaml] +[,yaml,role="no-placeholders"] ---- include::ai-agents:example$pipelines/dispute-pipeline.yaml[] ---- From 6bae27fbb878a2a984d2404a870126779c7a67e2 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Fri, 30 Jan 2026 17:25:54 +0000 Subject: [PATCH 18/35] Apply feedback --- modules/ROOT/nav.adoc | 36 ++- .../examples/mcp-tools/test-mcp-tools.sh | 2 +- .../ai-agents/examples/test-mcp-examples.sh | 221 +++++++++++++ modules/ai-agents/examples/testing.adoc | 290 ++++++++++++++++++ .../ai-agents/pages/agents/a2a-concepts.adoc | 2 +- .../agents/agent-to-agent-integration.adoc | 126 ++++++++ .../pages/agents/architecture-patterns.adoc | 2 +- .../ai-agents/pages/agents/create-agent.adoc | 8 +- .../agents/external-app-integration.adoc | 101 ++++++ .../pages/agents/external-integration.adoc | 94 ++++++ .../pages/agents/monitor-agents.adoc | 2 +- .../ai-agents/pages/agents/quickstart.adoc | 2 +- .../tutorials/customer-support-agent.adoc | 14 +- .../transaction-dispute-resolution.adoc | 12 +- .../pages/mcp/remote/create-tool.adoc | 8 +- .../pages/mcp/remote/manage-servers.adoc | 16 +- .../pages/mcp/remote/monitor-activity.adoc | 113 +++++++ .../pages/mcp/remote/monitor-mcp-servers.adoc | 6 +- .../pages/mcp/remote/quickstart.adoc | 6 +- .../pages/mcp/remote/scale-resources.adoc | 4 +- .../pages/observability/monitor-agents.adoc | 226 ++++++++++++++ .../configuration/resource-management.adoc | 4 +- .../configuration/secret-management.adoc | 8 +- 23 files changed, 1238 insertions(+), 65 deletions(-) create mode 100644 modules/ai-agents/examples/test-mcp-examples.sh create mode 100644 modules/ai-agents/examples/testing.adoc create mode 100644 modules/ai-agents/pages/agents/agent-to-agent-integration.adoc create mode 100644 modules/ai-agents/pages/agents/external-app-integration.adoc create mode 100644 modules/ai-agents/pages/agents/external-integration.adoc create mode 100644 modules/ai-agents/pages/mcp/remote/monitor-activity.adoc create mode 100644 modules/ai-agents/pages/observability/monitor-agents.adoc diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index b5bfd07b3..d25d4f013 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -24,23 +24,6 @@ ** xref:get-started:cluster-types/create-dedicated-cloud-cluster.adoc[] * xref:ai-agents:index.adoc[Agentic AI] -** xref:ai-agents:agents/index.adoc[Agents] -*** xref:ai-agents:agents/get-started-index.adoc[Get Started] -**** xref:ai-agents:agents/overview.adoc[Overview] -**** xref:ai-agents:agents/concepts.adoc[Concepts] -**** xref:ai-agents:agents/quickstart.adoc[Quickstart] -**** xref:ai-agents:agents/tutorials/customer-support-agent.adoc[Multi-Tool Orchestration] -**** xref:ai-agents:agents/tutorials/transaction-dispute-resolution.adoc[Multi-Agent Systems] -*** xref:ai-agents:agents/build-index.adoc[Build Agents] -**** xref:ai-agents:agents/create-agent.adoc[Create an Agent] -**** xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices] -**** xref:ai-agents:agents/architecture-patterns.adoc[Architecture Patterns] -**** xref:ai-agents:agents/troubleshooting.adoc[Troubleshoot] -*** xref:ai-agents:agents/monitor-agents.adoc[Monitor Agents] -*** xref:ai-agents:agents/integration-index.adoc[Agent Integrations] -**** xref:ai-agents:agents/integration-overview.adoc[Integration Patterns] -**** xref:ai-agents:agents/pipeline-integration-patterns.adoc[Pipeline to Agent] -**** xref:ai-agents:agents/a2a-concepts.adoc[A2A Protocol] ** xref:ai-agents:mcp/index.adoc[MCP] *** xref:ai-agents:mcp/overview.adoc[Overview] *** xref:ai-agents:mcp/remote/index.adoc[Remote MCP] @@ -58,6 +41,25 @@ **** xref:ai-agents:mcp/local/overview.adoc[Overview] **** xref:ai-agents:mcp/local/quickstart.adoc[Quickstart] **** xref:ai-agents:mcp/local/configuration.adoc[Configure] + +** xref:ai-agents:agents/index.adoc[Agents] +*** xref:ai-agents:agents/get-started-index.adoc[Get Started] +**** xref:ai-agents:agents/overview.adoc[Overview] +**** xref:ai-agents:agents/concepts.adoc[Concepts] +**** xref:ai-agents:agents/quickstart.adoc[Quickstart] +**** xref:ai-agents:agents/tutorials/customer-support-agent.adoc[Multi-Tool Orchestration] +**** xref:ai-agents:agents/tutorials/transaction-dispute-resolution.adoc[Multi-Agent Systems] +*** xref:ai-agents:agents/build-index.adoc[Build Agents] +**** xref:ai-agents:agents/create-agent.adoc[Create an Agent] +**** xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices] +**** xref:ai-agents:agents/architecture-patterns.adoc[Architecture Patterns] +**** xref:ai-agents:agents/troubleshooting.adoc[Troubleshoot] +*** xref:ai-agents:agents/monitor-agents.adoc[Monitor Agents] +*** xref:ai-agents:agents/integration-index.adoc[Agent Integrations] +**** xref:ai-agents:agents/integration-overview.adoc[Integration Patterns] +**** xref:ai-agents:agents/pipeline-integration-patterns.adoc[Pipeline to Agent] +**** xref:ai-agents:agents/a2a-concepts.adoc[A2A Protocol] + ** xref:ai-agents:observability/concepts.adoc[Transcripts] * xref:develop:connect/about.adoc[Redpanda Connect] diff --git a/modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh b/modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh index f815a561f..263ea5dbf 100755 --- a/modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh +++ b/modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh @@ -12,7 +12,7 @@ # # Unlike rp-connect-docs, Cloud MCP tools cannot be tested with # `rpk connect run` because they are standalone tool definitions, not -# full pipelines. End-to-end testing requires the Cloud Console. +# full pipelines. End-to-end testing requires the Cloud UI. set -euo pipefail diff --git a/modules/ai-agents/examples/test-mcp-examples.sh b/modules/ai-agents/examples/test-mcp-examples.sh new file mode 100644 index 000000000..54d6495c0 --- /dev/null +++ b/modules/ai-agents/examples/test-mcp-examples.sh @@ -0,0 +1,221 @@ +#!/usr/bin/env bash +# +# Test script for Redpanda Cloud MCP examples +# +# This script tests: +# 1. MCP tool definitions using `rpk connect mcp-server lint` +# 2. MCP metadata validation (enabled, description, properties) +# +# Usage: +# ./test-mcp-examples.sh # Run all tests +# ./test-mcp-examples.sh --lint-only # Only lint, skip metadata validation +# +# Unlike rp-connect-docs, Cloud MCP tools cannot be tested with +# `rpk connect run` because they are standalone tool definitions, not +# full pipelines. End-to-end testing requires the Cloud UI. + +set -euo pipefail + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +CYAN='\033[0;36m' +NC='\033[0m' + +# Get script directory and set MCP tools directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +MCP_TOOLS_DIR="$SCRIPT_DIR/mcp-tools" +cd "$MCP_TOOLS_DIR" + +# Counters +TOTAL_TOOLS=0 +PASSED_LINT=0 +PASSED_METADATA=0 +FAILED_LINT=0 +FAILED_METADATA=0 +SKIPPED=0 + +echo "🧪 Redpanda Cloud MCP Examples - Test Suite" +echo "============================================" +echo "" + +# Parse arguments +RUN_METADATA=true + +if [[ $# -gt 0 ]]; then + case "$1" in + --lint-only) + RUN_METADATA=false + ;; + esac +fi + +# ============================================================================ +# SECTION 1: MCP Tool Linting +# Validates YAML syntax and component schemas +# ============================================================================ + +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo -e "📦 ${CYAN}SECTION 1: MCP Tool Linting${NC}" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" + +# Count YAML files +file_count=$(find . -maxdepth 1 -name "*.yaml" | wc -l | tr -d ' ') +TOTAL_TOOLS=$file_count + +echo -n -e "${BLUE}📁 mcp-tools/${NC} ($file_count files)... " + +if output=$(rpk connect mcp-server lint --skip-env-var-check . 2>&1); then + echo -e "${GREEN}✓ PASSED${NC}" + PASSED_LINT=$file_count +else + echo -e "${RED}✗ FAILED${NC}" + echo "$output" | sed 's/^/ /' | head -20 + FAILED_LINT=$file_count +fi + +# ============================================================================ +# SECTION 2: MCP Metadata Validation +# Validates tool metadata (enabled, description, properties) +# ============================================================================ + +if $RUN_METADATA; then + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo -e "📝 ${CYAN}SECTION 2: MCP Metadata Validation${NC}" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + + # Determine which YAML parser to use + use_yq=true + if ! command -v yq &> /dev/null; then + use_yq=false + if ! command -v python3 &> /dev/null; then + echo -e "${YELLOW}⚠ Neither yq nor python3 available - skipping metadata validation${NC}" + RUN_METADATA=false + fi + fi + + if $RUN_METADATA; then + for file in *.yaml; do + if [[ -f "$file" ]]; then + echo -n -e " ${BLUE}$file${NC}... " + + # Check if .meta.mcp exists + if $use_yq; then + mcp_exists=$(yq eval '.meta.mcp' "$file" 2>/dev/null) + enabled=$(yq eval '.meta.mcp.enabled' "$file" 2>/dev/null) + description=$(yq eval '.meta.mcp.description' "$file" 2>/dev/null) + else + mcp_exists=$(python3 -c " +import yaml +try: + with open('$file') as f: + doc = yaml.safe_load(f) + meta = doc.get('meta', {}) if doc else {} + mcp = meta.get('mcp') + print('null' if mcp is None else 'exists') +except: + print('null') +" 2>/dev/null) + enabled=$(python3 -c " +import yaml +try: + with open('$file') as f: + doc = yaml.safe_load(f) + enabled = doc.get('meta', {}).get('mcp', {}).get('enabled') + print('null' if enabled is None else str(enabled).lower()) +except: + print('null') +" 2>/dev/null) + description=$(python3 -c " +import yaml +try: + with open('$file') as f: + doc = yaml.safe_load(f) + desc = doc.get('meta', {}).get('mcp', {}).get('description') + print('null' if desc is None or desc == '' else str(desc)) +except: + print('null') +" 2>/dev/null) + fi + + # Validate + if [[ "$mcp_exists" == "null" || -z "$mcp_exists" ]]; then + echo -e "${YELLOW}SKIPPED${NC} (no MCP metadata)" + SKIPPED=$((SKIPPED + 1)) + elif [[ "$enabled" != "true" ]]; then + echo -e "${YELLOW}WARNING${NC} (mcp.enabled not true)" + SKIPPED=$((SKIPPED + 1)) + elif [[ "$description" == "null" || -z "$description" ]]; then + echo -e "${RED}FAILED${NC} (missing description)" + FAILED_METADATA=$((FAILED_METADATA + 1)) + else + echo -e "${GREEN}PASSED${NC}" + PASSED_METADATA=$((PASSED_METADATA + 1)) + fi + fi + done + fi +fi + +# ============================================================================ +# SECTION 3: Cloud-Specific Validation +# Validates secrets use Cloud format (${secrets.X}) +# ============================================================================ + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo -e "☁️ ${CYAN}SECTION 3: Cloud Secrets Format${NC}" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" + +secrets_issues=0 +for file in *.yaml; do + if [[ -f "$file" ]]; then + # Check for non-Cloud secrets patterns (${VAR} without secrets. prefix) + # Exclude: + # - ${! ... } which is Bloblang interpolation + # - ${REDPANDA_BROKERS} which is platform-injected + if grep -E '\$\{[A-Z_]+\}' "$file" | grep -v '\${secrets\.' | grep -v '\${!' | grep -v '\${REDPANDA_BROKERS}' > /dev/null 2>&1; then + echo -e " ${BLUE}$file${NC}... ${YELLOW}WARNING${NC} (uses env vars instead of \${secrets.X})" + secrets_issues=$((secrets_issues + 1)) + fi + fi +done + +if [[ $secrets_issues -eq 0 ]]; then + echo -e " ${GREEN}✓ All files use Cloud secrets format${NC}" +fi + +# ============================================================================ +# SUMMARY +# ============================================================================ + +echo "" +echo "============================================" +echo "📊 Test Summary" +echo "============================================" + +echo -e "Lint: ${PASSED_LINT}/${TOTAL_TOOLS} passed" +if $RUN_METADATA; then + METADATA_TOTAL=$((PASSED_METADATA + FAILED_METADATA + SKIPPED)) + echo -e "Metadata: ${PASSED_METADATA}/${METADATA_TOTAL} passed (${SKIPPED} skipped)" +fi +if [[ $secrets_issues -gt 0 ]]; then + echo -e "Secrets: ${YELLOW}${secrets_issues} warnings${NC}" +fi +echo "──────────────────────────────────────────────────" + +TOTAL_FAILED=$((FAILED_LINT + FAILED_METADATA)) + +if [[ $TOTAL_FAILED -gt 0 ]]; then + echo -e "${RED}❌ Some tests failed ($TOTAL_FAILED failures)${NC}" + exit 1 +else + echo -e "${GREEN}✅ All tests passed!${NC}" + exit 0 +fi diff --git a/modules/ai-agents/examples/testing.adoc b/modules/ai-agents/examples/testing.adoc new file mode 100644 index 000000000..413fa7af2 --- /dev/null +++ b/modules/ai-agents/examples/testing.adoc @@ -0,0 +1,290 @@ += Test MCP Examples +:description: Automated testing strategies for Redpanda Cloud MCP server examples. + +This document describes the automated testing strategies for Redpanda Cloud MCP server examples. + +All MCP examples are automatically tested to ensure: + +. YAML syntax and structure are correct +. MCP metadata is complete and valid +. Component schemas match Redpanda Connect specifications +. Secrets syntax uses Cloud Secrets Store format (`${secrets.X}`) + +== Testing approaches + +=== Configuration linting + +Validate MCP tool configurations using `rpk connect lint`: + +[,bash] +---- +# Lint a single MCP tool +rpk connect lint weather_service.yaml + +# Lint all examples +rpk connect lint *.yaml + +# Lint with environment variable checking skipped (recommended for MCP) +rpk connect lint --skip-env-var-check *.yaml +---- + +This checks for common issues such as: + +* YAML syntax errors +* Unknown component types +* Invalid field names +* Type mismatches +* Missing required fields + +=== MCP metadata validation + +The test script validates MCP-specific metadata for all tool examples: + +[,bash] +---- +# Run all tests (includes linting + MCP validation) +./test-mcp-examples.sh + +# Test specific files +./test-mcp-examples.sh weather_*.yaml +---- + +MCP metadata validation checks: + +* Presence of `meta.mcp` section +* `enabled: true` is set +* `description` field exists and is non-empty +* `properties` are properly structured (if present) + +=== Unit testing limitations + +MCP tool examples are standalone component definitions (`label:`, `processors:`, `meta:`), not full pipelines with `input:`, `pipeline:`, `output:` sections. This means they cannot use inline `tests:` sections like cookbook examples do. + +The `rpk connect test` command requires full pipeline structure with paths like `/pipeline/processors/0`, which don't exist in MCP tool definitions. + +For testing MCP tools: + +- Ensure syntax and schema correctness. +- Verify MCP metadata has proper description and properties. +- Perform manual testing using the Cloud UI MCP Server interface to test tools end-to-end. + +== MCP tool structure + +MCP tools are structured as standalone components: + +[,yaml] +---- +label: weather-service +processors: + - label: fetch_weather_data + http: + url: 'https://wttr.in/${! @city }?format=j1' + verb: GET + + - label: format_response + mutation: | + root = { + "city": @city, + "temperature": this.current_condition.0.temp_C.number() + } + +meta: + mcp: + enabled: true + description: "Get current weather conditions for any city worldwide" + properties: + - name: city + type: string + description: "Name of the city" + required: true +---- + +== Test script usage + +The `test-mcp-examples.sh` script provides automated validation: + +[,bash] +---- +# Test all examples +./test-mcp-examples.sh + +# Test specific files +./test-mcp-examples.sh weather_*.yaml +./test-mcp-examples.sh customer_*.yaml +---- + +The script provides color-coded output: + +[,console] +---- +🧪 Redpanda Connect MCP Examples Test Suite (Cloud) +==================================================== + +📄 Testing: weather_service.yaml + Linting weather_service.yaml... PASSED + Validating MCP metadata... PASSED + +==================================================== +📊 Test Summary +==================================================== +Total configs tested: 10 +Passed: 10 +Failed: 0 + +✅ All tests passed! +---- + +== Manual end-to-end testing + +For comprehensive validation, test MCP tools using the Cloud UI: + +. Navigate to your Cloud cluster's MCP Server configuration +. Add or update your MCP tool configuration +. Use the Cloud UI's MCP Inspector to locate your tool +. Verify the tool executes correctly and returns expected results + +This validates: + +* Tool loads correctly in the MCP server +* Tool executes with provided parameters +* Responses are formatted correctly +* Secrets are properly resolved from Cloud Secrets Store + +== GitHub Actions CI/CD + +Automated tests run on every push and pull request using GitHub Actions. + +The workflow tests all examples whenever: + +* Any `.yaml` file in `modules/ai-agents/examples/mcp-tools/` changes +* The test script itself is modified + +See `.github/workflows/test-mcp-examples.yaml` for the complete workflow. + +== Best practices + +=== Use descriptive tool names + +[,yaml] +---- +# Good +label: fetch-customer-orders + +# Bad +label: tool1 +---- + +=== Write clear MCP descriptions + +[,yaml] +---- +# Good +meta: + mcp: + description: "Fetch a customer's order history and calculate spending metrics over the last 30 days" + +# Bad +meta: + mcp: + description: "Get orders" +---- + +=== Document all properties + +[,yaml] +---- +# Good +properties: + - name: customer_id + type: string + description: "Unique identifier for the customer" + required: true + - name: days + type: number + description: "Number of days to look back (default: 30)" + required: false + +# Bad +properties: + - name: id + type: string + required: true +---- + +=== Use Cloud Secrets Store for sensitive data + +[,yaml] +---- +# Cloud format - uses Secrets Store +sql_select: + driver: "postgres" + dsn: "${secrets.POSTGRES_DSN}" + table: "customers" +---- + +=== Tag your examples + +[,yaml] +---- +meta: + tags: [ example, weather, api ] # Helps organize and filter + mcp: + enabled: true +---- + +== Adding new examples + +When adding new MCP tool examples: + +. **Create your YAML file** in `modules/ai-agents/examples/mcp-tools/`: ++ +[,bash] +---- +cd modules/ai-agents/examples +touch my-new-tool.yaml +---- + +. **Include complete MCP metadata:** ++ +[,yaml] +---- +label: my-new-tool +processors: + # Your processor configuration + +meta: + mcp: + enabled: true + description: "Clear, task-oriented description" + properties: + - name: param_name + type: string + description: "Parameter purpose and constraints" + required: true +---- + +. **Lint your example:** ++ +[,bash] +---- +rpk connect lint --skip-env-var-check my-new-tool.yaml +---- + +. **Run automated tests:** ++ +[,bash] +---- +./test-mcp-examples.sh my-new-tool.yaml +---- + +. **Test in Cloud UI (recommended):** ++ +Deploy your MCP server configuration and test the tool through the Cloud UI AI interface. + +. **Commit your example:** ++ +[,bash] +---- +git add modules/ai-agents/examples/mcp-tools/my-new-tool.yaml +git commit -m "Add my-new-tool MCP example" +---- diff --git a/modules/ai-agents/pages/agents/a2a-concepts.adoc b/modules/ai-agents/pages/agents/a2a-concepts.adoc index 7422303a9..45680aa96 100644 --- a/modules/ai-agents/pages/agents/a2a-concepts.adoc +++ b/modules/ai-agents/pages/agents/a2a-concepts.adoc @@ -39,7 +39,7 @@ The agent card is a JSON document that describes what the agent can do and how t [#agent-card-location] === Agent card location -Redpanda Cloud agents expose their agent cards at the `/.well-known/agent-card.json` subpath of the agent URL. You can find the agent URL on the agent overview page in the Redpanda Cloud Console under *Agentic AI* > *AI Agents*. +Redpanda Cloud agents expose their agent cards at the `/.well-known/agent-card.json` subpath of the agent URL. You can find the agent URL on the agent overview page in the Redpanda Cloud UI under *Agentic AI* > *AI Agents*. For example, if your agent URL is `\https://my-agent.ai-agents.abc123.cloud.redpanda.com`, your agent card URL is `\https://my-agent.ai-agents.abc123.cloud.redpanda.com/.well-known/agent-card.json`. diff --git a/modules/ai-agents/pages/agents/agent-to-agent-integration.adoc b/modules/ai-agents/pages/agents/agent-to-agent-integration.adoc new file mode 100644 index 000000000..2c7116135 --- /dev/null +++ b/modules/ai-agents/pages/agents/agent-to-agent-integration.adoc @@ -0,0 +1,126 @@ += External Agent Integration +:description: Integrate Redpanda Cloud agents with external systems using the A2A protocol. +:page-topic-type: concept +:personas: ai_agent_developer, app_developer +:learning-objective-1: Describe the A2A protocol and agent card format +:learning-objective-2: Explain authentication flow for external applications +:learning-objective-3: Identify integration patterns and current limitations + +Understand how external applications and agents integrate with Redpanda Cloud agents using the Agent-to-Agent (A2A) protocol. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +This page covers external agent integration where Redpanda Cloud agents connect to agents hosted elsewhere using the A2A protocol. For internal integration within Redpanda Cloud (agents invoking MCP tools, or pipelines calling agents), see xref:ai-agents:agents/integration-patterns.adoc[]. + +== What is the A2A protocol? + +The Agent-to-Agent (A2A) protocol is an open standard for agent communication and discovery. Agents that implement A2A expose their capabilities through a standardized agent card, allowing external systems to discover and interact with them programmatically. + +Every Redpanda Cloud agent automatically exposes an agent card at: + +---- +https://{agent-id}.ai-agents.{cluster-id}.{cluster-domain}/.well-known/agent-card.json +---- + +The agent card describes: + +* **Agent capabilities**: What skills and tools the agent provides +* **Input/output formats**: Expected request and response structures +* **Protocol version**: A2A specification version supported +* **Communication modes**: Synchronous, streaming, or both + +For the complete A2A specification, see link:https://a2a.ag/spec[a2a.ag/spec^]. + +== When to use A2A integration + +Use A2A integration when you need: + +* **Programmatic access**: Call agents from applications, scripts, or CI/CD pipelines +* **External agent connections**: Connect agents you host elsewhere to Redpanda Cloud agents +* **Custom interfaces**: Build custom UIs or workflows around agent capabilities +* **Multi-system orchestration**: Coordinate agents with other systems in your architecture + +For testing and development, use the Redpanda Cloud UI Inspector tab instead. The Inspector automatically handles authentication and provides a testing interface. + +== Integration patterns + +=== Application-to-agent + +Applications send requests to your agent's HTTP endpoint using any A2A-compatible SDK: + +---- +Application → HTTP/A2A → Redpanda Cloud Agent +---- + +Use this pattern for: + +* Backend services calling agents as part of business logic +* CLI tools that need agent capabilities +* Batch processing systems +* API gateways routing requests to agents + +=== External agent-to-agent + +Connect agents you host elsewhere to Redpanda Cloud agents: + +---- +Your Agent → A2A Protocol → Redpanda Cloud Agent +---- + +Use this pattern for: + +* Agent workflows spanning multiple platforms +* Specialized agents you develop and host separately +* Integration with existing agent infrastructure + +== Authentication flow + +External applications authenticate using OAuth2 client credentials flow with the agent's service account. + +=== How authentication works + +When you create an agent, Redpanda Cloud automatically creates a service account with a client ID and secret. External applications use these credentials to obtain access tokens: + +. **Service account creation**: Agent creation automatically provisions a service account with credentials +. **Token exchange**: Applications exchange the client ID and secret for a time-limited access token via OAuth2 +. **Authenticated requests**: Applications include the access token in the Authorization header when calling the agent endpoint +. **Token refresh**: When tokens expire, applications exchange credentials again for a new token + +This flow ensures: + +* **Credentials are never sent directly to the agent**: Only access tokens are used for agent calls +* **Limited token lifetime**: Tokens expire, reducing the window for compromised credentials +* **Standard OAuth2 protocol**: Applications can use existing OAuth2 libraries + +For step-by-step instructions on exchanging credentials for access tokens and making authenticated requests, see xref:security:cloud-authentication.adoc[Cloud API Authentication]. + +The same OAuth2 client credentials flow used for Redpanda Cloud APIs applies to agent authentication. + +== Security considerations + +=== Protect service account credentials + +* Store client ID and secret in secure credential stores (not in code) +* Use environment variables or secrets management systems +* Rotate credentials if compromised +* Restrict access to credentials based on principle of least privilege + +=== Token scope + +Access tokens grant full access to the agent. Anyone with a valid token can: + +* Send requests to the agent +* Receive responses from the agent +* Consume agent resources (subject to rate limits) + +Treat access tokens like passwords. Do not log them or expose them in error messages. + +== Next steps + +* xref:ai-agents:agents/create-agent.adoc[]: Create an agent with service account credentials +* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems with internal subagents +* link:https://a2a.ag/spec[A2A Protocol Specification^]: Complete protocol reference diff --git a/modules/ai-agents/pages/agents/architecture-patterns.adoc b/modules/ai-agents/pages/agents/architecture-patterns.adoc index aeed99dde..dbfbd3dae 100644 --- a/modules/ai-agents/pages/agents/architecture-patterns.adoc +++ b/modules/ai-agents/pages/agents/architecture-patterns.adoc @@ -166,7 +166,7 @@ Design workflows to complete in 20-30 iterations. Return paginated results from == Model selection guide -Choose models based on task complexity, latency requirements, and cost constraints. The Redpanda Cloud Console displays available models with descriptions when creating agents. +Choose models based on task complexity, latency requirements, and cost constraints. The Redpanda Cloud UI displays available models with descriptions when creating agents. === Match models to task complexity diff --git a/modules/ai-agents/pages/agents/create-agent.adoc b/modules/ai-agents/pages/agents/create-agent.adoc index db4d1883f..5103fb3ce 100644 --- a/modules/ai-agents/pages/agents/create-agent.adoc +++ b/modules/ai-agents/pages/agents/create-agent.adoc @@ -6,7 +6,7 @@ :learning-objective-2: Connect MCP servers and select tools for your agent :learning-objective-3: Set agent execution parameters including max iterations -Create a new AI agent through the Redpanda Cloud Console. This guide walks you through configuring the agent's model, system prompt, tools, and execution settings. +Create a new AI agent through the Redpanda Cloud UI. This guide walks you through configuring the agent's model, system prompt, tools, and execution settings. After reading this page, you will be able to: @@ -16,14 +16,14 @@ After reading this page, you will be able to: == Prerequisites -* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] with Remote MCP enabled. +* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] on AWS running Redpanda version 25.3 and later. * At least one xref:ai-agents:mcp/remote/overview.adoc[Remote MCP server] deployed with tools. * LLM provider API key (OpenAI, Google, or Anthropic). * System prompt prepared (see xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices]). == Access the agents UI -. Log in to the link:https://cloud.redpanda.com[Redpanda Cloud Console^]. +. Log in to the link:https://cloud.redpanda.com[Redpanda Cloud UI^]. . Navigate to your cluster. . Click *Agentic AI* > *AI Agents* in the left navigation. @@ -233,7 +233,7 @@ https://.ai-agents.. You can use this URL to call your agent programmatically or integrate it with external systems. -The *Inspector* tab in the Cloud Console automatically uses this URL to connect to your agent for testing. +The *Inspector* tab in the Cloud UI automatically uses this URL to connect to your agent for testing. For programmatic access or external agent integration, see xref:ai-agents:agents/integration-overview.adoc[]. diff --git a/modules/ai-agents/pages/agents/external-app-integration.adoc b/modules/ai-agents/pages/agents/external-app-integration.adoc new file mode 100644 index 000000000..92de59f48 --- /dev/null +++ b/modules/ai-agents/pages/agents/external-app-integration.adoc @@ -0,0 +1,101 @@ += External Application Integration Patterns +:description: Integrate external applications and agents with Redpanda Cloud agents using the A2A protocol. +:page-topic-type: best-practices +:personas: ai_agent_developer, app_developer +:learning-objective-1: Choose between application-to-agent and external agent-to-agent patterns +:learning-objective-2: Protect service account credentials using secure storage +:learning-objective-3: Apply OAuth2 authentication flow for external requests + +Integrate external applications and agents with Redpanda Cloud agents using secure, standardized patterns. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +This page covers external integration where applications or agents hosted outside Redpanda Cloud call Redpanda Cloud agents using the A2A protocol. For internal integration within Redpanda Cloud (agents invoking MCP tools, or pipelines calling agents), see xref:ai-agents:agents/integration-overview.adoc[]. + +For A2A protocol concepts, agent cards, and communication modes, see xref:ai-agents:agents/a2a-concepts.adoc[]. + +== When to use A2A integration + +Use A2A integration when you need: + +* Programmatic access - Call agents from applications, scripts, or CI/CD pipelines. +* External agent connections - Connect agents you host elsewhere to Redpanda Cloud agents. +* Custom interfaces - Build custom UIs or workflows around agent capabilities. +* Multi-system orchestration - Coordinate agents with other systems in your architecture. + +For testing and development, use the Redpanda Cloud UI Inspector tab instead. The Inspector automatically handles authentication and provides a testing interface. + +== Integration patterns + +=== Application-to-agent + +Applications send requests to your agent's HTTP endpoint using any A2A-compatible SDK: + +---- +Application -- HTTP/A2A -- Redpanda Cloud Agent +---- + +Use this pattern for: + +* Backend services calling agents as part of business logic. +* CLI tools that need agent capabilities. +* Batch processing systems. +* API gateways routing requests to agents. + +=== External agent-to-agent + +Connect agents you host elsewhere to Redpanda Cloud agents: + +---- +Your Agent -- A2A Protocol -- Redpanda Cloud Agent +---- + +Use this pattern for: + +* Agent workflows spanning multiple platforms. +* Specialized agents you develop and host separately. +* Integration with existing agent infrastructure. + +== Authentication + +External applications authenticate using OAuth2 client credentials flow with the agent's service account: + +. Exchange service account credentials for an access token +. Include the access token in the Authorization header +. Send requests to the agent's A2A endpoint +. Refresh tokens when they expire + +For implementation details: + +* xref:ai-agents:agents/a2a-concepts.adoc#authentication[]: Learn how A2A authentication works +* xref:security:cloud-authentication.adoc[]: Get step-by-step authentication instructions + +== Security considerations + +=== Protect service account credentials + +* Store the client ID and secret in secure credential stores, not in code. +* Use environment variables or secrets management systems. +* Rotate credentials if compromised. +* Restrict access to credentials based on principle of least privilege. + +=== Protect access tokens + +Access tokens grant full access to the agent. Anyone with a valid token can: + +* Send requests to the agent. +* Receive responses from the agent. +* Consume agent resources (subject to rate limits). + +Treat access tokens like passwords. Never log tokens or include them in error messages. + +== Next steps + +* xref:ai-agents:agents/a2a-concepts.adoc[]: Learn A2A protocol concepts and agent cards +* xref:ai-agents:agents/create-agent.adoc[]: Create an agent with service account credentials +* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems with internal subagents +* link:https://a2a.ag/spec[A2A Protocol Specification^]: Complete protocol reference diff --git a/modules/ai-agents/pages/agents/external-integration.adoc b/modules/ai-agents/pages/agents/external-integration.adoc new file mode 100644 index 000000000..5f457846a --- /dev/null +++ b/modules/ai-agents/pages/agents/external-integration.adoc @@ -0,0 +1,94 @@ += External Agent Integration +:description: Integrate Redpanda Cloud agents with external systems using the A2A protocol. +:page-aliases: agent-to-agent-integration.adoc +:page-topic-type: best-practices +:personas: ai_agent_developer, app_developer +:learning-objective-1: Choose the appropriate external integration pattern for your use case +:learning-objective-2: Apply security best practices for service account credentials +:learning-objective-3: Identify when to use external integration versus internal patterns + +Integrate external applications and agents with Redpanda Cloud agents using secure, standardized patterns. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +This page covers external agent integration where Redpanda Cloud agents connect to agents hosted elsewhere using the A2A protocol. For internal integration within Redpanda Cloud (agents invoking MCP tools, or pipelines calling agents), see xref:ai-agents:agents/internal-integration.adoc[]. + +For A2A protocol concepts, agent cards, and communication modes, see xref:ai-agents:agents/a2a-concepts.adoc[]. + +== When to use A2A integration + +Use A2A integration when you need: + +* Programmatic access - Call agents from applications, scripts, or CI/CD pipelines. +* External agent connections - Connect agents you host elsewhere to Redpanda Cloud agents. +* Custom interfaces - Build custom UIs or workflows around agent capabilities. +* Multi-system orchestration - Coordinate agents with other systems in your architecture. + +For testing and development, use the Redpanda Cloud UI Inspector tab instead. The Inspector automatically handles authentication and provides a testing interface. + +== Integration patterns + +=== Application-to-agent + +Applications send requests to your agent's HTTP endpoint using any A2A-compatible SDK: + +---- +Application → HTTP/A2A → Redpanda Cloud Agent +---- + +Use this pattern for: + +* Backend services calling agents as part of business logic. +* CLI tools that need agent capabilities. +* Batch processing systems. +* API gateways routing requests to agents. + +=== External agent-to-agent + +Connect agents you host elsewhere to Redpanda Cloud agents: + +---- +Your Agent → A2A Protocol → Redpanda Cloud Agent +---- + +Use this pattern for: + +* Agent workflows spanning multiple platforms. +* Specialized agents you develop and host separately. +* Integration with existing agent infrastructure. + +== Authentication + +External applications authenticate using OAuth2 client credentials flow with the agent's service account. For details on how authentication works, see xref:ai-agents:agents/a2a-concepts.adoc#authentication[A2A Protocol Authentication]. + +For step-by-step instructions on exchanging credentials for access tokens and making authenticated requests, see xref:security:cloud-authentication.adoc[]. + +== Security considerations + +=== Protect service account credentials + +* Store client ID and secret in secure credential stores (not in code). +* Use environment variables or secrets management systems. +* Rotate credentials if compromised. +* Restrict access to credentials based on principle of least privilege. + +=== Token scope + +Access tokens grant full access to the agent. Anyone with a valid token can: + +* Send requests to the agent. +* Receive responses from the agent. +* Consume agent resources (subject to rate limits). + +Treat access tokens like passwords. Do not log them or expose them in error messages. + +== Next steps + +* xref:ai-agents:agents/a2a-concepts.adoc[]: Learn A2A protocol concepts and agent cards +* xref:ai-agents:agents/create-agent.adoc[]: Create an agent with service account credentials +* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems with internal subagents +* link:https://a2a.ag/spec[A2A Protocol Specification^]: Complete protocol reference diff --git a/modules/ai-agents/pages/agents/monitor-agents.adoc b/modules/ai-agents/pages/agents/monitor-agents.adoc index c493aa291..71578c7f6 100644 --- a/modules/ai-agents/pages/agents/monitor-agents.adoc +++ b/modules/ai-agents/pages/agents/monitor-agents.adoc @@ -79,7 +79,7 @@ The *Inspector* tab provides real-time conversation testing. Use it to test agen === Access Inspector -. Navigate to *Agentic AI* > *AI Agents* in the Redpanda Cloud Console. +. Navigate to *Agentic AI* > *AI Agents* in the Redpanda Cloud UI. . Click your agent name. . Open the *Inspector* tab. . Enter test queries and review responses. diff --git a/modules/ai-agents/pages/agents/quickstart.adoc b/modules/ai-agents/pages/agents/quickstart.adoc index 8e25a0c02..dcfe2b0cf 100644 --- a/modules/ai-agents/pages/agents/quickstart.adoc +++ b/modules/ai-agents/pages/agents/quickstart.adoc @@ -41,7 +41,7 @@ The agent orchestrates the `generate_input` and `redpanda_output` tools you crea == Create the agent -. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud Console^]. +. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud UI^]. . Navigate to your cluster and click *Agentic AI* > *AI Agents* in the left navigation. diff --git a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc index 7e188f652..edf0edeae 100644 --- a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc +++ b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc @@ -36,7 +36,7 @@ The challenge: users phrase requests differently ("Where's my package?", "Track == Prerequisites -* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] with Remote MCP enabled. +* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] on AWS running Redpanda version 25.3 and later. * LLM provider API key (this tutorial uses OpenAI). == Design the MCP tools @@ -61,9 +61,9 @@ This granularity enables the agent to chain tools (check order status, see it's Create a Remote MCP server with the three tools. -. Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud Console^] -. Go to *Agentic AI* > *Remote MCP* -. Click *Create MCP Server* +. Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud UI^]. +. Go to *Agentic AI* > *Remote MCP*. +. Click *Create MCP Server*. . Configure the server: + * *Name*: `customer-support-tools` @@ -113,8 +113,8 @@ The system prompt teaches the agent how to orchestrate tools. Without explicit g Create the customer support agent with the system prompt. -. Go to *Agentic AI* > *AI Agents* -. Click *Create Agent* +. Go to *Agentic AI* > *AI Agents*. +. Click *Create Agent*. . Configure the agent: + * *Name*: `customer-support-agent` @@ -179,7 +179,7 @@ Wait for the agent status to show *Running*. == Observe orchestration in action -Open the *Inspector* tab in the Redpanda Cloud Console to interact with the agent. +Open the *Inspector* tab in the Redpanda Cloud UI to interact with the agent. Testing reveals how the agent makes decisions. Watch the conversation panel in the built-in chat interface to see the agent's reasoning process unfold. diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc index 0e6e08ce9..4d3b2b955 100644 --- a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -32,7 +32,7 @@ When a customer calls saying "I see a $247.83 charge from 'ACME CORP' but I neve == Prerequisites -* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] with Remote MCP enabled. +* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] on AWS running Redpanda version 25.3 and later. * LLM provider API key (this tutorial uses OpenAI GPT-5.2 or Claude Sonnet 4.5 for reasoning). * The xref:get-started:rpk-install.adoc[Redpanda CLI (`rpk`)] installed (for testing the pipeline with sample data). * Completed xref:ai-agents:agents/tutorials/customer-support-agent.adoc[] (foundational multi-tool concepts). @@ -45,7 +45,7 @@ Before creating agents, create the tools they'll use. You'll organize tools by d Account tools retrieve customer and transaction data with PII protection. -. Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud Console^]. +. Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud UI^]. . Go to *Agentic AI* > *Remote MCP*. . Click *Create MCP Server*. . Configure the server: @@ -441,7 +441,7 @@ https://abc123.ai-agents.def456.cloud.redpanda.com/.well-known/agent-card.json Create the topics the pipeline will use for input and output. -. Go to *Topics* in the Redpanda Cloud Console. +. Go to *Topics* in the Redpanda Cloud UI. . Click *Create Topic*. . Create the input topic: + @@ -460,7 +460,7 @@ Create the topics the pipeline will use for input and output. The pipeline needs SASL credentials to read from and write to Redpanda topics. -. Go to *Security* > *Users* in the Redpanda Cloud Console. +. Go to *Security* > *Users* in the Redpanda Cloud UI. . Click *Create User*. . Configure the user: + @@ -496,7 +496,7 @@ The pipeline needs SASL credentials to read from and write to Redpanda topics. The pipeline needs SASL credentials stored as secrets to authenticate with Redpanda topics. -. Go to *Connect* > *Secrets* in the Redpanda Cloud Console (if not already there). +. Go to *Connect* > *Secrets* in the Redpanda Cloud UI (if not already there). . Click *Create Secret*. . Create two secrets with these values: + @@ -505,7 +505,7 @@ The pipeline needs SASL credentials stored as secrets to authenticate with Redpa === Create the pipeline -. Go to *Connect* in the Redpanda Cloud Console. +. Go to *Connect* in the Redpanda Cloud UI. . Click *Create Pipeline*. . In the numbered steps, click *4 Add permissions*. . Select *Service Account*. diff --git a/modules/ai-agents/pages/mcp/remote/create-tool.adoc b/modules/ai-agents/pages/mcp/remote/create-tool.adoc index 3b13dcec4..1d60444bf 100644 --- a/modules/ai-agents/pages/mcp/remote/create-tool.adoc +++ b/modules/ai-agents/pages/mcp/remote/create-tool.adoc @@ -24,14 +24,14 @@ After reading this page, you will be able to: == Create the tool -In Redpanda Cloud, you create tools directly in the Cloud Console or using the Data Plane API. +In Redpanda Cloud, you create tools directly in the Cloud UI or using the Data Plane API. [tabs] ====== -Cloud Console:: +Cloud UI:: + -- -. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud Console^]. +. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud UI^]. . Navigate to *Agentic AI* > *Remote MCP* and either create a new MCP server or edit an existing one. @@ -207,7 +207,7 @@ Reference secrets using `${secrets.SECRET_NAME}` syntax: include::ai-agents:example$mcp-tools/snippets/secrets.yaml[tag=example,indent=0] ---- -When you add secret references to your tool configuration, the Cloud Console automatically detects them and provides an interface to create the required secrets. +When you add secret references to your tool configuration, the Cloud UI automatically detects them and provides an interface to create the required secrets. === Secrets best practices diff --git a/modules/ai-agents/pages/mcp/remote/manage-servers.adoc b/modules/ai-agents/pages/mcp/remote/manage-servers.adoc index 40fe836f7..61d7e66e7 100644 --- a/modules/ai-agents/pages/mcp/remote/manage-servers.adoc +++ b/modules/ai-agents/pages/mcp/remote/manage-servers.adoc @@ -27,10 +27,10 @@ You can update the configuration, resources, or metadata of an MCP server at any [tabs] ===== -Cloud Console:: +Cloud UI:: + -- -. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. +. In the Redpanda Cloud UI, navigate to *Agentic AI* > *Remote MCP*. . Find the MCP server you want to edit and click its name. . Click *Edit configuration*. . Make your changes. @@ -70,10 +70,10 @@ Stopping a server pauses all tool execution and releases compute resources, but [tabs] ===== -Cloud Console:: +Cloud UI:: + -- -. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. +. In the Redpanda Cloud UI, navigate to *Agentic AI* > *Remote MCP*. . Find the server you want to stop. . Click the three dots and select *Stop*. . Confirm the action. @@ -101,10 +101,10 @@ Resume a stopped server to restore its functionality. [tabs] ===== -Cloud Console:: +Cloud UI:: + -- -. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. +. In the Redpanda Cloud UI, navigate to *Agentic AI* > *Remote MCP*. . Find the stopped server. . Click the three dots and select *Start*. . Wait for the status to show *Running* before reconnecting clients. @@ -132,10 +132,10 @@ Deleting a server permanently removes it. You cannot undo this action. Redpanda [tabs] ===== -Cloud Console:: +Cloud UI:: + -- -. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. +. In the Redpanda Cloud UI, navigate to *Agentic AI* > *Remote MCP*. . Find the server you want to delete. . Click the three dots and select *Delete*. . Confirm the deletion when prompted. diff --git a/modules/ai-agents/pages/mcp/remote/monitor-activity.adoc b/modules/ai-agents/pages/mcp/remote/monitor-activity.adoc new file mode 100644 index 000000000..bd6076560 --- /dev/null +++ b/modules/ai-agents/pages/mcp/remote/monitor-activity.adoc @@ -0,0 +1,113 @@ += Monitor MCP Server Activity +:description: How to consume traces, track tool invocations, measure performance, and debug failures in MCP servers. +:page-topic-type: how-to +:personas: platform_admin, ai_agent_developer, data_engineer +// Reader journey: "I need to accomplish X" +// Learning objectives - what readers can DO with this guide: +:learning-objective-1: Consume traces from transcripts +:learning-objective-2: Track tool invocations and measure performance +:learning-objective-3: Debug tool failures using trace data + +After creating an MCP server, you can monitor its activity using transcripts. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +For conceptual background on traces, spans, and the trace data structure, see xref:ai-agents:mcp/remote/concepts.adoc#transcripts[Transcripts and observability]. + +== Prerequisites + +You must have an existing MCP server. If you do not have one, see xref:ai-agents:mcp/remote/quickstart.adoc[]. + +== Consume traces from transcripts + +MCP servers emit OpenTelemetry traces to the `redpanda.otel_traces` topic. You can consume these traces using any Kafka-compatible client or the Redpanda Cloud UI. + +[tabs] +===== +Cloud UI:: ++ +-- +. In the Redpanda Cloud UI, navigate to *Topics*. +. Select `redpanda.otel_traces`. +. Click *Messages* to view recent traces. +. Use filters to search for specific trace IDs, span names, or time ranges. +-- + +rpk:: ++ +-- +Consume the most recent traces: + +[,bash] +---- +rpk topic consume redpanda.otel_traces --offset end -n 10 +---- + +Filter for specific MCP server activity by examining the span attributes. +-- + +Data Plane API:: ++ +-- +Use the link:/api/doc/cloud-dataplane/[Data Plane API] to programmatically consume traces and integrate with your monitoring pipeline. +-- +===== + +== Track tool invocations + +Monitor which tools are being called and how often: + +. Consume traces from `redpanda.otel_traces`. +. Filter spans where `instrumentationScope.name` is `rpcn-mcp`. +. Examine the `name` field to see which tools are being invoked. +. Calculate frequency by counting spans per tool name over time windows. + +Example: To find all invocations of a specific tool, filter for spans where `name` matches your tool name (for example, `weather`, `http_processor`). + +== Measure performance + +Analyze tool execution times: + +. Find spans with `instrumentationScope.name` set to `rpcn-mcp`. +. Calculate duration: `(endTimeUnixNano - startTimeUnixNano) / 1000000` (milliseconds). +. Track percentiles (p50, p95, p99) to identify performance issues. +. Set alerts for durations exceeding acceptable thresholds. + +Example: A span with `startTimeUnixNano: "1765198415253280028"` and `endTimeUnixNano: "1765198424660663434"` has a duration of 9407ms. + +== Debug failures + +Investigate errors and failures: + +. Filter spans where `status.code` is `2` (error). +. Examine `status.message` for error details. +. Check the `events` array for error events with timestamps. +. Use `traceId` to correlate related spans and understand the full error context. +. Follow `parentSpanId` relationships to trace the error back to the originating tool. + +Example: A span with `status.code: 2` and `status.message: "connection timeout"` indicates the operation failed due to a timeout. + +== Correlate distributed operations + +Link MCP server activity to downstream effects: + +. Extract `traceId` from tool invocation spans. +. Search for the same `traceId` in other application logs or traces. +. Follow `parentSpanId` relationships to build complete operation timelines. +. Identify bottlenecks across your entire system. + +== Integrate with observability platforms + +The `redpanda.otel_traces` topic stores trace data in OpenTelemetry format. Redpanda does not support direct export to platforms like Grafana Cloud and Datadog due to format compatibility limitations. Redpanda produces one span per topic message, whereas these platforms expect traces in batch format. + +You can consume traces directly from the `redpanda.otel_traces` topic using any Kafka-compatible consumer for custom analysis and processing. + +== Next steps + +* xref:ai-agents:mcp/remote/concepts.adoc#transcripts[Transcripts]: Learn how traces and spans work +* xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose and fix common issues +* xref:ai-agents:mcp/remote/manage-servers.adoc[]: Manage MCP server lifecycle diff --git a/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc b/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc index 7966fc3ae..fbb331875 100644 --- a/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc +++ b/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc @@ -20,7 +20,7 @@ For conceptual background on traces, spans, and the trace data structure, see xr You must have an existing MCP server. If you do not have one, see xref:ai-agents:mcp/remote/quickstart.adoc[]. -== View transcripts in the Cloud Console +== View transcripts in the Cloud UI :context: mcp include::ai-agents:partial$transcripts-ui-guide.adoc[] @@ -33,10 +33,10 @@ MCP servers emit OpenTelemetry traces to the `redpanda.otel_traces` topic. Consu [tabs] ===== -Cloud Console:: +Cloud UI:: + -- -. In the Redpanda Cloud Console, navigate to *Topics*. +. In the Redpanda Cloud UI, navigate to *Topics*. . Select `redpanda.otel_traces`. . Click *Messages* to view recent traces. . Use filters to search for specific trace IDs, span names, or time ranges. diff --git a/modules/ai-agents/pages/mcp/remote/quickstart.adoc b/modules/ai-agents/pages/mcp/remote/quickstart.adoc index 92ee94aeb..32a41b5aa 100644 --- a/modules/ai-agents/pages/mcp/remote/quickstart.adoc +++ b/modules/ai-agents/pages/mcp/remote/quickstart.adoc @@ -176,10 +176,10 @@ curl -X POST "https:///v1/acls" \ [tabs] ===== -Cloud Console:: +Cloud UI:: + -- -. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud Console^]. +. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud UI^]. . Navigate to *Agentic AI* > *Remote MCP*. + @@ -187,7 +187,7 @@ This page shows a list of existing servers. . Click *Create new MCP Server*. In *Server Metadata*, configure the basic information and resources: + -* *Display Name*: A human-friendly name such as `event-data-generator`. This name is shown in the Redpanda Cloud Console. It is not the name of the MCP server itself. +* *Display Name*: A human-friendly name such as `event-data-generator`. This name is shown in the Redpanda Cloud UI. It is not the name of the MCP server itself. * *Description*: Explain what the server does. For example, `Generates fake user event data and publishes it to Redpanda topics`. * *Tags*: Add key/value tags such as `owner=platform` or `env=demo`. The tag names `service_account_id` and `secret_id` are reserved and cannot be used. * *Resources*: Choose a size (XSmall / Small / Medium / Large / XLarge). Larger sizes allow more concurrent requests and faster processing, but cost more. You can change this later. diff --git a/modules/ai-agents/pages/mcp/remote/scale-resources.adoc b/modules/ai-agents/pages/mcp/remote/scale-resources.adoc index 3c4d948b7..424094577 100644 --- a/modules/ai-agents/pages/mcp/remote/scale-resources.adoc +++ b/modules/ai-agents/pages/mcp/remote/scale-resources.adoc @@ -24,10 +24,10 @@ You must have an existing MCP server. If you do not have one, see xref:ai-agents [tabs] ===== -Cloud Console:: +Cloud UI:: + -- -. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. +. In the Redpanda Cloud UI, navigate to *Agentic AI* > *Remote MCP*. . Find the MCP server you want to scale and click its name. . Click *Edit configuration*. . Under *Resources*, select a new size: diff --git a/modules/ai-agents/pages/observability/monitor-agents.adoc b/modules/ai-agents/pages/observability/monitor-agents.adoc new file mode 100644 index 000000000..f72affafa --- /dev/null +++ b/modules/ai-agents/pages/observability/monitor-agents.adoc @@ -0,0 +1,226 @@ += Monitor Agent Activity +:description: Monitor agent execution, analyze conversation history, track token usage, and debug issues using inspector, transcripts, and agent data topics. +:page-topic-type: how-to +:personas: ai_agent_developer, platform_admin +:learning-objective-1: pass:q[Test agents interactively using the *Inspector* tab] +:learning-objective-2: Consume session and task topics for analysis +:learning-objective-3: Debug agent behavior using Transcripts + +Monitor your agents to track performance, analyze conversations, debug issues, and optimize costs. + +After reading this page, you will be able to: + +* [ ] {learning-objective-1} +* [ ] {learning-objective-2} +* [ ] {learning-objective-3} + +For conceptual background on traces and observability, see xref:ai-agents:observability/concepts.adoc[]. + +== Prerequisites + +You must have a running agent. If you do not have one, see xref:ai-agents:agents/quickstart.adoc[]. + +== Test agents interactively + +The *Inspector* tab provides real-time conversation testing and debugging. + +You can use the Inspector to: + +* Test agent responses interactively +* View full conversation history +* See tool invocations and results +* Monitor token usage per request +* Test error scenarios + +=== Access the inspector + +. Navigate to *Agentic AI* > *AI Agents* in the Redpanda Cloud UI. +. Click your agent name. +. Open the *Inspector* tab. +. Enter test queries and review responses. +. Check the conversation panel to see tool calls. +. Start a new session to test fresh conversations. + +=== Testing best practices + +Test your agents systematically: + +* **Boundary cases**: Test requests at the edge of agent capabilities to verify scope enforcement +* **Error handling**: Request unavailable data to verify graceful degradation +* **Iteration count**: Monitor how many iterations complex requests require +* **Ambiguous input**: Send vague queries to verify clarification behavior +* **Token usage**: Track tokens per request to estimate costs + +== View execution traces + +The *Transcripts* view shows agent execution traces with detailed timing and error information. + +=== What Transcripts show + +* Agent startup and initialization +* Request and response flow +* Tool invocations and results +* Error messages and failures +* Token usage per request +* OpenTelemetry trace data + +=== Access Transcripts + +. Navigate to *Agentic AI* > *AI Agents*. +. Click your agent name. +. Click *Transcripts* in the left navigation. +. Select a transcript to view execution details. + +=== When to use Transcripts + +* Agent won't start (deployment issues) +* Tool execution errors +* Unexpected agent behavior +* Debugging conversation flow +* Verifying tool selection logic + +== Consume agent data topics + +Agents emit structured data to two Redpanda topics for monitoring and analysis. + +=== Sessions topic + +The sessions topic (`redpanda.aiagent..sessions`) contains all conversation messages. + +Use the sessions topic to: + +* Review past conversations +* Analyze conversation patterns +* Debug multi-turn interactions +* Understand context management + +=== Tasks topic + +The tasks topic (`redpanda.aiagent..tasks`) contains task execution records with status and artifacts. + +Use the tasks topic to: + +* Monitor task completion rates +* Track token usage and costs +* Debug failed tasks +* Analyze agent performance + +=== Access agent topics + +[tabs] +===== +Cloud UI:: ++ +-- +. Navigate to *Topics* in the Redpanda Cloud UI. +. Find `redpanda.aiagent..sessions` or `redpanda.aiagent..tasks`. +. Click *Messages* to view recent data. +. Use filters to search for specific sessions or task states. +-- + +rpk:: ++ +-- +Consume recent sessions: + +[,bash] +---- +rpk topic consume redpanda.aiagent..sessions --offset end -n 10 +---- + +Consume recent tasks: + +[,bash] +---- +rpk topic consume redpanda.aiagent..tasks --offset end -n 10 +---- +-- + +Data Plane API:: ++ +-- +Use the link:/api/doc/cloud-dataplane/[Data Plane API] to programmatically consume agent data and integrate with your monitoring pipeline. +-- +===== + +For schema details, see xref:ai-agents:agents/concepts.adoc#agent-data-topics[]. + +== Analyze conversation history + +Use conversation history to identify behavior patterns and diagnose issues. + +=== Common patterns + +Look for these indicators when analyzing conversations: + +* Agent calling the same tool repeatedly indicates loop detection is needed +* Large gaps between messages suggest tool timeout or slow execution +* Agent responses without tool calls indicate a tool selection issue +* Fabricated information suggests a missing "never make up data" constraint +* Truncated early messages indicate the context window was exceeded + +=== Analysis workflow + +. Use the inspector to reproduce the issue. +. Review full conversation including tool invocations. +. Identify where agent behavior diverged from expected. +. Check system prompt for missing guidance. +. Verify tool responses are formatted correctly. + +== Track token usage + +Monitor token consumption to optimize costs and set appropriate iteration limits. + +=== View token usage + +Token usage appears in: + +* **Inspector tab**: Shows tokens per request during interactive testing +* **Tasks topic**: Contains `usage` metadata with input/output/total tokens +* **Transcripts**: Displays input and output token counts for each execution + +=== Calculate costs + +Use token data from the tasks topic to estimate costs: + +[,bash] +---- +Cost per request = (total_tokens × model_price_per_token) +---- + +Track costs over time by: + +. Consuming the tasks topic. +. Extracting `metadata.usage.total_tokens` from each task. +. Multiplying by your model's token price. +. Aggregating by time period. + +For cost optimization strategies, see xref:ai-agents:agents/concepts.adoc#cost-calculation[]. + +== Monitor performance + +Track agent performance metrics to identify bottlenecks. + +=== Key metrics + +Monitor these metrics from agent data topics: + +* **Task completion rate**: Percentage of tasks with `TASK_STATE_COMPLETED` +* **Average iterations**: Mean iterations per task from conversation history +* **Token efficiency**: Tokens consumed per successful task completion +* **Tool invocation frequency**: Which tools are called most often +* **Error rate**: Percentage of tasks with `TASK_STATE_FAILED` + +=== Performance analysis + +. Consume the tasks topic over a time window. +. Calculate completion rate: `completed_tasks / total_tasks`. +. Identify high iteration tasks for prompt optimization. +. Track token usage trends over time. +. Correlate errors with specific tool invocations. + +== Next steps + +* xref:ai-agents:observability/concepts.adoc[]: Understand trace structure and OpenTelemetry spans +* xref:ai-agents:agents/troubleshooting.adoc[]: Diagnose and fix common agent issues +* xref:ai-agents:agents/concepts.adoc[]: Learn about agent execution and cost calculation diff --git a/modules/develop/pages/connect/configuration/resource-management.adoc b/modules/develop/pages/connect/configuration/resource-management.adoc index 802e1d8fb..c48a3e58e 100644 --- a/modules/develop/pages/connect/configuration/resource-management.adoc +++ b/modules/develop/pages/connect/configuration/resource-management.adoc @@ -125,7 +125,7 @@ To view resources already allocated to a data pipeline: [tabs] ===== -Cloud Console:: +Cloud UI:: + -- . Log in to https://cloud.redpanda.com[Redpanda Cloud^]. @@ -152,7 +152,7 @@ To scale the resources for a pipeline: [tabs] ===== -Cloud Console:: +Cloud UI:: + -- . Log in to https://cloud.redpanda.com[Redpanda Cloud^]. diff --git a/modules/develop/pages/connect/configuration/secret-management.adoc b/modules/develop/pages/connect/configuration/secret-management.adoc index 026616216..ac0fee981 100644 --- a/modules/develop/pages/connect/configuration/secret-management.adoc +++ b/modules/develop/pages/connect/configuration/secret-management.adoc @@ -15,7 +15,7 @@ You can create a secret and reference it in multiple data pipelines on the same [tabs] ===== -Cloud Console:: +Cloud UI:: + -- . Log in to https://cloud.redpanda.com[Redpanda Cloud^]. @@ -71,7 +71,7 @@ NOTE: Changes to secret values do not take effect until a pipeline is restarted. [tabs] ===== -Cloud Console:: +Cloud UI:: + -- . Log in to https://cloud.redpanda.com[Redpanda Cloud^]. @@ -122,7 +122,7 @@ NOTE: Changes do not affect pipelines that are already running. [tabs] ===== -Cloud Console:: +Cloud UI:: + -- . Log in to https://cloud.redpanda.com[Redpanda Cloud^]. @@ -158,7 +158,7 @@ You must include the following values: [tabs] ===== -Cloud Console:: +Cloud UI:: + -- . Go to the **Connect** page, and create a pipeline (or open an existing pipeline to edit). From 35ce1a3500381a9c7a6a35781dc275457e9fbc39 Mon Sep 17 00:00:00 2001 From: Jake Cahill <45230295+JakeSCahill@users.noreply.github.com> Date: Fri, 30 Jan 2026 17:26:17 +0000 Subject: [PATCH 19/35] Update modules/ai-agents/pages/agents/overview.adoc Co-authored-by: Michele Cyran --- modules/ai-agents/pages/agents/overview.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ai-agents/pages/agents/overview.adoc b/modules/ai-agents/pages/agents/overview.adoc index 1b8af540b..6d9541b2e 100644 --- a/modules/ai-agents/pages/agents/overview.adoc +++ b/modules/ai-agents/pages/agents/overview.adoc @@ -6,7 +6,7 @@ :learning-objective-2: Explain how Redpanda Cloud streaming infrastructure benefits agent architectures :learning-objective-3: Identify use cases where Redpanda Cloud agents provide value -AI agents are systems that combine large language models with the ability to execute actions and process data. Redpanda Cloud provides real-time streaming infrastructure and standardized tool access to support agent development. +AI agents are systems that combine large language models (LLMs) with the ability to execute actions and process data. Redpanda Cloud provides real-time streaming infrastructure and standardized tool access to support agent development. After reading this page, you will be able to: From 72806fe292e94fbe8618bc15322fca3fe344a8e1 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Fri, 30 Jan 2026 17:29:21 +0000 Subject: [PATCH 20/35] Remove alias --- modules/ai-agents/pages/agents/a2a-concepts.adoc | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/ai-agents/pages/agents/a2a-concepts.adoc b/modules/ai-agents/pages/agents/a2a-concepts.adoc index 45680aa96..48599c2a3 100644 --- a/modules/ai-agents/pages/agents/a2a-concepts.adoc +++ b/modules/ai-agents/pages/agents/a2a-concepts.adoc @@ -1,7 +1,6 @@ = A2A Protocol :description: Learn how the A2A protocol enables agent discovery and communication. :page-topic-type: concepts -:page-aliases: agents/external-app-integration.adoc :personas: agent_developer, app_developer, streaming_developer :learning-objective-1: Describe the A2A protocol and its role in agent communication :learning-objective-2: Explain how agent cards enable discovery From 3f5383ef853f6379f1010c70f61fc0836c096185 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Fri, 30 Jan 2026 18:22:51 +0000 Subject: [PATCH 21/35] Remove incorrectly added files from previous commit --- .../ai-agents/examples/test-mcp-examples.sh | 221 ------------- modules/ai-agents/examples/testing.adoc | 290 ------------------ .../agents/agent-to-agent-integration.adoc | 126 -------- .../agents/external-app-integration.adoc | 101 ------ .../pages/agents/external-integration.adoc | 94 ------ .../pages/mcp/remote/monitor-activity.adoc | 113 ------- .../pages/observability/monitor-agents.adoc | 226 -------------- 7 files changed, 1171 deletions(-) delete mode 100644 modules/ai-agents/examples/test-mcp-examples.sh delete mode 100644 modules/ai-agents/examples/testing.adoc delete mode 100644 modules/ai-agents/pages/agents/agent-to-agent-integration.adoc delete mode 100644 modules/ai-agents/pages/agents/external-app-integration.adoc delete mode 100644 modules/ai-agents/pages/agents/external-integration.adoc delete mode 100644 modules/ai-agents/pages/mcp/remote/monitor-activity.adoc delete mode 100644 modules/ai-agents/pages/observability/monitor-agents.adoc diff --git a/modules/ai-agents/examples/test-mcp-examples.sh b/modules/ai-agents/examples/test-mcp-examples.sh deleted file mode 100644 index 54d6495c0..000000000 --- a/modules/ai-agents/examples/test-mcp-examples.sh +++ /dev/null @@ -1,221 +0,0 @@ -#!/usr/bin/env bash -# -# Test script for Redpanda Cloud MCP examples -# -# This script tests: -# 1. MCP tool definitions using `rpk connect mcp-server lint` -# 2. MCP metadata validation (enabled, description, properties) -# -# Usage: -# ./test-mcp-examples.sh # Run all tests -# ./test-mcp-examples.sh --lint-only # Only lint, skip metadata validation -# -# Unlike rp-connect-docs, Cloud MCP tools cannot be tested with -# `rpk connect run` because they are standalone tool definitions, not -# full pipelines. End-to-end testing requires the Cloud UI. - -set -euo pipefail - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -CYAN='\033[0;36m' -NC='\033[0m' - -# Get script directory and set MCP tools directory -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -MCP_TOOLS_DIR="$SCRIPT_DIR/mcp-tools" -cd "$MCP_TOOLS_DIR" - -# Counters -TOTAL_TOOLS=0 -PASSED_LINT=0 -PASSED_METADATA=0 -FAILED_LINT=0 -FAILED_METADATA=0 -SKIPPED=0 - -echo "🧪 Redpanda Cloud MCP Examples - Test Suite" -echo "============================================" -echo "" - -# Parse arguments -RUN_METADATA=true - -if [[ $# -gt 0 ]]; then - case "$1" in - --lint-only) - RUN_METADATA=false - ;; - esac -fi - -# ============================================================================ -# SECTION 1: MCP Tool Linting -# Validates YAML syntax and component schemas -# ============================================================================ - -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo -e "📦 ${CYAN}SECTION 1: MCP Tool Linting${NC}" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo "" - -# Count YAML files -file_count=$(find . -maxdepth 1 -name "*.yaml" | wc -l | tr -d ' ') -TOTAL_TOOLS=$file_count - -echo -n -e "${BLUE}📁 mcp-tools/${NC} ($file_count files)... " - -if output=$(rpk connect mcp-server lint --skip-env-var-check . 2>&1); then - echo -e "${GREEN}✓ PASSED${NC}" - PASSED_LINT=$file_count -else - echo -e "${RED}✗ FAILED${NC}" - echo "$output" | sed 's/^/ /' | head -20 - FAILED_LINT=$file_count -fi - -# ============================================================================ -# SECTION 2: MCP Metadata Validation -# Validates tool metadata (enabled, description, properties) -# ============================================================================ - -if $RUN_METADATA; then - echo "" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo -e "📝 ${CYAN}SECTION 2: MCP Metadata Validation${NC}" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "" - - # Determine which YAML parser to use - use_yq=true - if ! command -v yq &> /dev/null; then - use_yq=false - if ! command -v python3 &> /dev/null; then - echo -e "${YELLOW}⚠ Neither yq nor python3 available - skipping metadata validation${NC}" - RUN_METADATA=false - fi - fi - - if $RUN_METADATA; then - for file in *.yaml; do - if [[ -f "$file" ]]; then - echo -n -e " ${BLUE}$file${NC}... " - - # Check if .meta.mcp exists - if $use_yq; then - mcp_exists=$(yq eval '.meta.mcp' "$file" 2>/dev/null) - enabled=$(yq eval '.meta.mcp.enabled' "$file" 2>/dev/null) - description=$(yq eval '.meta.mcp.description' "$file" 2>/dev/null) - else - mcp_exists=$(python3 -c " -import yaml -try: - with open('$file') as f: - doc = yaml.safe_load(f) - meta = doc.get('meta', {}) if doc else {} - mcp = meta.get('mcp') - print('null' if mcp is None else 'exists') -except: - print('null') -" 2>/dev/null) - enabled=$(python3 -c " -import yaml -try: - with open('$file') as f: - doc = yaml.safe_load(f) - enabled = doc.get('meta', {}).get('mcp', {}).get('enabled') - print('null' if enabled is None else str(enabled).lower()) -except: - print('null') -" 2>/dev/null) - description=$(python3 -c " -import yaml -try: - with open('$file') as f: - doc = yaml.safe_load(f) - desc = doc.get('meta', {}).get('mcp', {}).get('description') - print('null' if desc is None or desc == '' else str(desc)) -except: - print('null') -" 2>/dev/null) - fi - - # Validate - if [[ "$mcp_exists" == "null" || -z "$mcp_exists" ]]; then - echo -e "${YELLOW}SKIPPED${NC} (no MCP metadata)" - SKIPPED=$((SKIPPED + 1)) - elif [[ "$enabled" != "true" ]]; then - echo -e "${YELLOW}WARNING${NC} (mcp.enabled not true)" - SKIPPED=$((SKIPPED + 1)) - elif [[ "$description" == "null" || -z "$description" ]]; then - echo -e "${RED}FAILED${NC} (missing description)" - FAILED_METADATA=$((FAILED_METADATA + 1)) - else - echo -e "${GREEN}PASSED${NC}" - PASSED_METADATA=$((PASSED_METADATA + 1)) - fi - fi - done - fi -fi - -# ============================================================================ -# SECTION 3: Cloud-Specific Validation -# Validates secrets use Cloud format (${secrets.X}) -# ============================================================================ - -echo "" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo -e "☁️ ${CYAN}SECTION 3: Cloud Secrets Format${NC}" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo "" - -secrets_issues=0 -for file in *.yaml; do - if [[ -f "$file" ]]; then - # Check for non-Cloud secrets patterns (${VAR} without secrets. prefix) - # Exclude: - # - ${! ... } which is Bloblang interpolation - # - ${REDPANDA_BROKERS} which is platform-injected - if grep -E '\$\{[A-Z_]+\}' "$file" | grep -v '\${secrets\.' | grep -v '\${!' | grep -v '\${REDPANDA_BROKERS}' > /dev/null 2>&1; then - echo -e " ${BLUE}$file${NC}... ${YELLOW}WARNING${NC} (uses env vars instead of \${secrets.X})" - secrets_issues=$((secrets_issues + 1)) - fi - fi -done - -if [[ $secrets_issues -eq 0 ]]; then - echo -e " ${GREEN}✓ All files use Cloud secrets format${NC}" -fi - -# ============================================================================ -# SUMMARY -# ============================================================================ - -echo "" -echo "============================================" -echo "📊 Test Summary" -echo "============================================" - -echo -e "Lint: ${PASSED_LINT}/${TOTAL_TOOLS} passed" -if $RUN_METADATA; then - METADATA_TOTAL=$((PASSED_METADATA + FAILED_METADATA + SKIPPED)) - echo -e "Metadata: ${PASSED_METADATA}/${METADATA_TOTAL} passed (${SKIPPED} skipped)" -fi -if [[ $secrets_issues -gt 0 ]]; then - echo -e "Secrets: ${YELLOW}${secrets_issues} warnings${NC}" -fi -echo "──────────────────────────────────────────────────" - -TOTAL_FAILED=$((FAILED_LINT + FAILED_METADATA)) - -if [[ $TOTAL_FAILED -gt 0 ]]; then - echo -e "${RED}❌ Some tests failed ($TOTAL_FAILED failures)${NC}" - exit 1 -else - echo -e "${GREEN}✅ All tests passed!${NC}" - exit 0 -fi diff --git a/modules/ai-agents/examples/testing.adoc b/modules/ai-agents/examples/testing.adoc deleted file mode 100644 index 413fa7af2..000000000 --- a/modules/ai-agents/examples/testing.adoc +++ /dev/null @@ -1,290 +0,0 @@ -= Test MCP Examples -:description: Automated testing strategies for Redpanda Cloud MCP server examples. - -This document describes the automated testing strategies for Redpanda Cloud MCP server examples. - -All MCP examples are automatically tested to ensure: - -. YAML syntax and structure are correct -. MCP metadata is complete and valid -. Component schemas match Redpanda Connect specifications -. Secrets syntax uses Cloud Secrets Store format (`${secrets.X}`) - -== Testing approaches - -=== Configuration linting - -Validate MCP tool configurations using `rpk connect lint`: - -[,bash] ----- -# Lint a single MCP tool -rpk connect lint weather_service.yaml - -# Lint all examples -rpk connect lint *.yaml - -# Lint with environment variable checking skipped (recommended for MCP) -rpk connect lint --skip-env-var-check *.yaml ----- - -This checks for common issues such as: - -* YAML syntax errors -* Unknown component types -* Invalid field names -* Type mismatches -* Missing required fields - -=== MCP metadata validation - -The test script validates MCP-specific metadata for all tool examples: - -[,bash] ----- -# Run all tests (includes linting + MCP validation) -./test-mcp-examples.sh - -# Test specific files -./test-mcp-examples.sh weather_*.yaml ----- - -MCP metadata validation checks: - -* Presence of `meta.mcp` section -* `enabled: true` is set -* `description` field exists and is non-empty -* `properties` are properly structured (if present) - -=== Unit testing limitations - -MCP tool examples are standalone component definitions (`label:`, `processors:`, `meta:`), not full pipelines with `input:`, `pipeline:`, `output:` sections. This means they cannot use inline `tests:` sections like cookbook examples do. - -The `rpk connect test` command requires full pipeline structure with paths like `/pipeline/processors/0`, which don't exist in MCP tool definitions. - -For testing MCP tools: - -- Ensure syntax and schema correctness. -- Verify MCP metadata has proper description and properties. -- Perform manual testing using the Cloud UI MCP Server interface to test tools end-to-end. - -== MCP tool structure - -MCP tools are structured as standalone components: - -[,yaml] ----- -label: weather-service -processors: - - label: fetch_weather_data - http: - url: 'https://wttr.in/${! @city }?format=j1' - verb: GET - - - label: format_response - mutation: | - root = { - "city": @city, - "temperature": this.current_condition.0.temp_C.number() - } - -meta: - mcp: - enabled: true - description: "Get current weather conditions for any city worldwide" - properties: - - name: city - type: string - description: "Name of the city" - required: true ----- - -== Test script usage - -The `test-mcp-examples.sh` script provides automated validation: - -[,bash] ----- -# Test all examples -./test-mcp-examples.sh - -# Test specific files -./test-mcp-examples.sh weather_*.yaml -./test-mcp-examples.sh customer_*.yaml ----- - -The script provides color-coded output: - -[,console] ----- -🧪 Redpanda Connect MCP Examples Test Suite (Cloud) -==================================================== - -📄 Testing: weather_service.yaml - Linting weather_service.yaml... PASSED - Validating MCP metadata... PASSED - -==================================================== -📊 Test Summary -==================================================== -Total configs tested: 10 -Passed: 10 -Failed: 0 - -✅ All tests passed! ----- - -== Manual end-to-end testing - -For comprehensive validation, test MCP tools using the Cloud UI: - -. Navigate to your Cloud cluster's MCP Server configuration -. Add or update your MCP tool configuration -. Use the Cloud UI's MCP Inspector to locate your tool -. Verify the tool executes correctly and returns expected results - -This validates: - -* Tool loads correctly in the MCP server -* Tool executes with provided parameters -* Responses are formatted correctly -* Secrets are properly resolved from Cloud Secrets Store - -== GitHub Actions CI/CD - -Automated tests run on every push and pull request using GitHub Actions. - -The workflow tests all examples whenever: - -* Any `.yaml` file in `modules/ai-agents/examples/mcp-tools/` changes -* The test script itself is modified - -See `.github/workflows/test-mcp-examples.yaml` for the complete workflow. - -== Best practices - -=== Use descriptive tool names - -[,yaml] ----- -# Good -label: fetch-customer-orders - -# Bad -label: tool1 ----- - -=== Write clear MCP descriptions - -[,yaml] ----- -# Good -meta: - mcp: - description: "Fetch a customer's order history and calculate spending metrics over the last 30 days" - -# Bad -meta: - mcp: - description: "Get orders" ----- - -=== Document all properties - -[,yaml] ----- -# Good -properties: - - name: customer_id - type: string - description: "Unique identifier for the customer" - required: true - - name: days - type: number - description: "Number of days to look back (default: 30)" - required: false - -# Bad -properties: - - name: id - type: string - required: true ----- - -=== Use Cloud Secrets Store for sensitive data - -[,yaml] ----- -# Cloud format - uses Secrets Store -sql_select: - driver: "postgres" - dsn: "${secrets.POSTGRES_DSN}" - table: "customers" ----- - -=== Tag your examples - -[,yaml] ----- -meta: - tags: [ example, weather, api ] # Helps organize and filter - mcp: - enabled: true ----- - -== Adding new examples - -When adding new MCP tool examples: - -. **Create your YAML file** in `modules/ai-agents/examples/mcp-tools/`: -+ -[,bash] ----- -cd modules/ai-agents/examples -touch my-new-tool.yaml ----- - -. **Include complete MCP metadata:** -+ -[,yaml] ----- -label: my-new-tool -processors: - # Your processor configuration - -meta: - mcp: - enabled: true - description: "Clear, task-oriented description" - properties: - - name: param_name - type: string - description: "Parameter purpose and constraints" - required: true ----- - -. **Lint your example:** -+ -[,bash] ----- -rpk connect lint --skip-env-var-check my-new-tool.yaml ----- - -. **Run automated tests:** -+ -[,bash] ----- -./test-mcp-examples.sh my-new-tool.yaml ----- - -. **Test in Cloud UI (recommended):** -+ -Deploy your MCP server configuration and test the tool through the Cloud UI AI interface. - -. **Commit your example:** -+ -[,bash] ----- -git add modules/ai-agents/examples/mcp-tools/my-new-tool.yaml -git commit -m "Add my-new-tool MCP example" ----- diff --git a/modules/ai-agents/pages/agents/agent-to-agent-integration.adoc b/modules/ai-agents/pages/agents/agent-to-agent-integration.adoc deleted file mode 100644 index 2c7116135..000000000 --- a/modules/ai-agents/pages/agents/agent-to-agent-integration.adoc +++ /dev/null @@ -1,126 +0,0 @@ -= External Agent Integration -:description: Integrate Redpanda Cloud agents with external systems using the A2A protocol. -:page-topic-type: concept -:personas: ai_agent_developer, app_developer -:learning-objective-1: Describe the A2A protocol and agent card format -:learning-objective-2: Explain authentication flow for external applications -:learning-objective-3: Identify integration patterns and current limitations - -Understand how external applications and agents integrate with Redpanda Cloud agents using the Agent-to-Agent (A2A) protocol. - -After reading this page, you will be able to: - -* [ ] {learning-objective-1} -* [ ] {learning-objective-2} -* [ ] {learning-objective-3} - -This page covers external agent integration where Redpanda Cloud agents connect to agents hosted elsewhere using the A2A protocol. For internal integration within Redpanda Cloud (agents invoking MCP tools, or pipelines calling agents), see xref:ai-agents:agents/integration-patterns.adoc[]. - -== What is the A2A protocol? - -The Agent-to-Agent (A2A) protocol is an open standard for agent communication and discovery. Agents that implement A2A expose their capabilities through a standardized agent card, allowing external systems to discover and interact with them programmatically. - -Every Redpanda Cloud agent automatically exposes an agent card at: - ----- -https://{agent-id}.ai-agents.{cluster-id}.{cluster-domain}/.well-known/agent-card.json ----- - -The agent card describes: - -* **Agent capabilities**: What skills and tools the agent provides -* **Input/output formats**: Expected request and response structures -* **Protocol version**: A2A specification version supported -* **Communication modes**: Synchronous, streaming, or both - -For the complete A2A specification, see link:https://a2a.ag/spec[a2a.ag/spec^]. - -== When to use A2A integration - -Use A2A integration when you need: - -* **Programmatic access**: Call agents from applications, scripts, or CI/CD pipelines -* **External agent connections**: Connect agents you host elsewhere to Redpanda Cloud agents -* **Custom interfaces**: Build custom UIs or workflows around agent capabilities -* **Multi-system orchestration**: Coordinate agents with other systems in your architecture - -For testing and development, use the Redpanda Cloud UI Inspector tab instead. The Inspector automatically handles authentication and provides a testing interface. - -== Integration patterns - -=== Application-to-agent - -Applications send requests to your agent's HTTP endpoint using any A2A-compatible SDK: - ----- -Application → HTTP/A2A → Redpanda Cloud Agent ----- - -Use this pattern for: - -* Backend services calling agents as part of business logic -* CLI tools that need agent capabilities -* Batch processing systems -* API gateways routing requests to agents - -=== External agent-to-agent - -Connect agents you host elsewhere to Redpanda Cloud agents: - ----- -Your Agent → A2A Protocol → Redpanda Cloud Agent ----- - -Use this pattern for: - -* Agent workflows spanning multiple platforms -* Specialized agents you develop and host separately -* Integration with existing agent infrastructure - -== Authentication flow - -External applications authenticate using OAuth2 client credentials flow with the agent's service account. - -=== How authentication works - -When you create an agent, Redpanda Cloud automatically creates a service account with a client ID and secret. External applications use these credentials to obtain access tokens: - -. **Service account creation**: Agent creation automatically provisions a service account with credentials -. **Token exchange**: Applications exchange the client ID and secret for a time-limited access token via OAuth2 -. **Authenticated requests**: Applications include the access token in the Authorization header when calling the agent endpoint -. **Token refresh**: When tokens expire, applications exchange credentials again for a new token - -This flow ensures: - -* **Credentials are never sent directly to the agent**: Only access tokens are used for agent calls -* **Limited token lifetime**: Tokens expire, reducing the window for compromised credentials -* **Standard OAuth2 protocol**: Applications can use existing OAuth2 libraries - -For step-by-step instructions on exchanging credentials for access tokens and making authenticated requests, see xref:security:cloud-authentication.adoc[Cloud API Authentication]. - -The same OAuth2 client credentials flow used for Redpanda Cloud APIs applies to agent authentication. - -== Security considerations - -=== Protect service account credentials - -* Store client ID and secret in secure credential stores (not in code) -* Use environment variables or secrets management systems -* Rotate credentials if compromised -* Restrict access to credentials based on principle of least privilege - -=== Token scope - -Access tokens grant full access to the agent. Anyone with a valid token can: - -* Send requests to the agent -* Receive responses from the agent -* Consume agent resources (subject to rate limits) - -Treat access tokens like passwords. Do not log them or expose them in error messages. - -== Next steps - -* xref:ai-agents:agents/create-agent.adoc[]: Create an agent with service account credentials -* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems with internal subagents -* link:https://a2a.ag/spec[A2A Protocol Specification^]: Complete protocol reference diff --git a/modules/ai-agents/pages/agents/external-app-integration.adoc b/modules/ai-agents/pages/agents/external-app-integration.adoc deleted file mode 100644 index 92de59f48..000000000 --- a/modules/ai-agents/pages/agents/external-app-integration.adoc +++ /dev/null @@ -1,101 +0,0 @@ -= External Application Integration Patterns -:description: Integrate external applications and agents with Redpanda Cloud agents using the A2A protocol. -:page-topic-type: best-practices -:personas: ai_agent_developer, app_developer -:learning-objective-1: Choose between application-to-agent and external agent-to-agent patterns -:learning-objective-2: Protect service account credentials using secure storage -:learning-objective-3: Apply OAuth2 authentication flow for external requests - -Integrate external applications and agents with Redpanda Cloud agents using secure, standardized patterns. - -After reading this page, you will be able to: - -* [ ] {learning-objective-1} -* [ ] {learning-objective-2} -* [ ] {learning-objective-3} - -This page covers external integration where applications or agents hosted outside Redpanda Cloud call Redpanda Cloud agents using the A2A protocol. For internal integration within Redpanda Cloud (agents invoking MCP tools, or pipelines calling agents), see xref:ai-agents:agents/integration-overview.adoc[]. - -For A2A protocol concepts, agent cards, and communication modes, see xref:ai-agents:agents/a2a-concepts.adoc[]. - -== When to use A2A integration - -Use A2A integration when you need: - -* Programmatic access - Call agents from applications, scripts, or CI/CD pipelines. -* External agent connections - Connect agents you host elsewhere to Redpanda Cloud agents. -* Custom interfaces - Build custom UIs or workflows around agent capabilities. -* Multi-system orchestration - Coordinate agents with other systems in your architecture. - -For testing and development, use the Redpanda Cloud UI Inspector tab instead. The Inspector automatically handles authentication and provides a testing interface. - -== Integration patterns - -=== Application-to-agent - -Applications send requests to your agent's HTTP endpoint using any A2A-compatible SDK: - ----- -Application -- HTTP/A2A -- Redpanda Cloud Agent ----- - -Use this pattern for: - -* Backend services calling agents as part of business logic. -* CLI tools that need agent capabilities. -* Batch processing systems. -* API gateways routing requests to agents. - -=== External agent-to-agent - -Connect agents you host elsewhere to Redpanda Cloud agents: - ----- -Your Agent -- A2A Protocol -- Redpanda Cloud Agent ----- - -Use this pattern for: - -* Agent workflows spanning multiple platforms. -* Specialized agents you develop and host separately. -* Integration with existing agent infrastructure. - -== Authentication - -External applications authenticate using OAuth2 client credentials flow with the agent's service account: - -. Exchange service account credentials for an access token -. Include the access token in the Authorization header -. Send requests to the agent's A2A endpoint -. Refresh tokens when they expire - -For implementation details: - -* xref:ai-agents:agents/a2a-concepts.adoc#authentication[]: Learn how A2A authentication works -* xref:security:cloud-authentication.adoc[]: Get step-by-step authentication instructions - -== Security considerations - -=== Protect service account credentials - -* Store the client ID and secret in secure credential stores, not in code. -* Use environment variables or secrets management systems. -* Rotate credentials if compromised. -* Restrict access to credentials based on principle of least privilege. - -=== Protect access tokens - -Access tokens grant full access to the agent. Anyone with a valid token can: - -* Send requests to the agent. -* Receive responses from the agent. -* Consume agent resources (subject to rate limits). - -Treat access tokens like passwords. Never log tokens or include them in error messages. - -== Next steps - -* xref:ai-agents:agents/a2a-concepts.adoc[]: Learn A2A protocol concepts and agent cards -* xref:ai-agents:agents/create-agent.adoc[]: Create an agent with service account credentials -* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems with internal subagents -* link:https://a2a.ag/spec[A2A Protocol Specification^]: Complete protocol reference diff --git a/modules/ai-agents/pages/agents/external-integration.adoc b/modules/ai-agents/pages/agents/external-integration.adoc deleted file mode 100644 index 5f457846a..000000000 --- a/modules/ai-agents/pages/agents/external-integration.adoc +++ /dev/null @@ -1,94 +0,0 @@ -= External Agent Integration -:description: Integrate Redpanda Cloud agents with external systems using the A2A protocol. -:page-aliases: agent-to-agent-integration.adoc -:page-topic-type: best-practices -:personas: ai_agent_developer, app_developer -:learning-objective-1: Choose the appropriate external integration pattern for your use case -:learning-objective-2: Apply security best practices for service account credentials -:learning-objective-3: Identify when to use external integration versus internal patterns - -Integrate external applications and agents with Redpanda Cloud agents using secure, standardized patterns. - -After reading this page, you will be able to: - -* [ ] {learning-objective-1} -* [ ] {learning-objective-2} -* [ ] {learning-objective-3} - -This page covers external agent integration where Redpanda Cloud agents connect to agents hosted elsewhere using the A2A protocol. For internal integration within Redpanda Cloud (agents invoking MCP tools, or pipelines calling agents), see xref:ai-agents:agents/internal-integration.adoc[]. - -For A2A protocol concepts, agent cards, and communication modes, see xref:ai-agents:agents/a2a-concepts.adoc[]. - -== When to use A2A integration - -Use A2A integration when you need: - -* Programmatic access - Call agents from applications, scripts, or CI/CD pipelines. -* External agent connections - Connect agents you host elsewhere to Redpanda Cloud agents. -* Custom interfaces - Build custom UIs or workflows around agent capabilities. -* Multi-system orchestration - Coordinate agents with other systems in your architecture. - -For testing and development, use the Redpanda Cloud UI Inspector tab instead. The Inspector automatically handles authentication and provides a testing interface. - -== Integration patterns - -=== Application-to-agent - -Applications send requests to your agent's HTTP endpoint using any A2A-compatible SDK: - ----- -Application → HTTP/A2A → Redpanda Cloud Agent ----- - -Use this pattern for: - -* Backend services calling agents as part of business logic. -* CLI tools that need agent capabilities. -* Batch processing systems. -* API gateways routing requests to agents. - -=== External agent-to-agent - -Connect agents you host elsewhere to Redpanda Cloud agents: - ----- -Your Agent → A2A Protocol → Redpanda Cloud Agent ----- - -Use this pattern for: - -* Agent workflows spanning multiple platforms. -* Specialized agents you develop and host separately. -* Integration with existing agent infrastructure. - -== Authentication - -External applications authenticate using OAuth2 client credentials flow with the agent's service account. For details on how authentication works, see xref:ai-agents:agents/a2a-concepts.adoc#authentication[A2A Protocol Authentication]. - -For step-by-step instructions on exchanging credentials for access tokens and making authenticated requests, see xref:security:cloud-authentication.adoc[]. - -== Security considerations - -=== Protect service account credentials - -* Store client ID and secret in secure credential stores (not in code). -* Use environment variables or secrets management systems. -* Rotate credentials if compromised. -* Restrict access to credentials based on principle of least privilege. - -=== Token scope - -Access tokens grant full access to the agent. Anyone with a valid token can: - -* Send requests to the agent. -* Receive responses from the agent. -* Consume agent resources (subject to rate limits). - -Treat access tokens like passwords. Do not log them or expose them in error messages. - -== Next steps - -* xref:ai-agents:agents/a2a-concepts.adoc[]: Learn A2A protocol concepts and agent cards -* xref:ai-agents:agents/create-agent.adoc[]: Create an agent with service account credentials -* xref:ai-agents:agents/architecture-patterns.adoc[]: Design multi-agent systems with internal subagents -* link:https://a2a.ag/spec[A2A Protocol Specification^]: Complete protocol reference diff --git a/modules/ai-agents/pages/mcp/remote/monitor-activity.adoc b/modules/ai-agents/pages/mcp/remote/monitor-activity.adoc deleted file mode 100644 index bd6076560..000000000 --- a/modules/ai-agents/pages/mcp/remote/monitor-activity.adoc +++ /dev/null @@ -1,113 +0,0 @@ -= Monitor MCP Server Activity -:description: How to consume traces, track tool invocations, measure performance, and debug failures in MCP servers. -:page-topic-type: how-to -:personas: platform_admin, ai_agent_developer, data_engineer -// Reader journey: "I need to accomplish X" -// Learning objectives - what readers can DO with this guide: -:learning-objective-1: Consume traces from transcripts -:learning-objective-2: Track tool invocations and measure performance -:learning-objective-3: Debug tool failures using trace data - -After creating an MCP server, you can monitor its activity using transcripts. - -After reading this page, you will be able to: - -* [ ] {learning-objective-1} -* [ ] {learning-objective-2} -* [ ] {learning-objective-3} - -For conceptual background on traces, spans, and the trace data structure, see xref:ai-agents:mcp/remote/concepts.adoc#transcripts[Transcripts and observability]. - -== Prerequisites - -You must have an existing MCP server. If you do not have one, see xref:ai-agents:mcp/remote/quickstart.adoc[]. - -== Consume traces from transcripts - -MCP servers emit OpenTelemetry traces to the `redpanda.otel_traces` topic. You can consume these traces using any Kafka-compatible client or the Redpanda Cloud UI. - -[tabs] -===== -Cloud UI:: -+ --- -. In the Redpanda Cloud UI, navigate to *Topics*. -. Select `redpanda.otel_traces`. -. Click *Messages* to view recent traces. -. Use filters to search for specific trace IDs, span names, or time ranges. --- - -rpk:: -+ --- -Consume the most recent traces: - -[,bash] ----- -rpk topic consume redpanda.otel_traces --offset end -n 10 ----- - -Filter for specific MCP server activity by examining the span attributes. --- - -Data Plane API:: -+ --- -Use the link:/api/doc/cloud-dataplane/[Data Plane API] to programmatically consume traces and integrate with your monitoring pipeline. --- -===== - -== Track tool invocations - -Monitor which tools are being called and how often: - -. Consume traces from `redpanda.otel_traces`. -. Filter spans where `instrumentationScope.name` is `rpcn-mcp`. -. Examine the `name` field to see which tools are being invoked. -. Calculate frequency by counting spans per tool name over time windows. - -Example: To find all invocations of a specific tool, filter for spans where `name` matches your tool name (for example, `weather`, `http_processor`). - -== Measure performance - -Analyze tool execution times: - -. Find spans with `instrumentationScope.name` set to `rpcn-mcp`. -. Calculate duration: `(endTimeUnixNano - startTimeUnixNano) / 1000000` (milliseconds). -. Track percentiles (p50, p95, p99) to identify performance issues. -. Set alerts for durations exceeding acceptable thresholds. - -Example: A span with `startTimeUnixNano: "1765198415253280028"` and `endTimeUnixNano: "1765198424660663434"` has a duration of 9407ms. - -== Debug failures - -Investigate errors and failures: - -. Filter spans where `status.code` is `2` (error). -. Examine `status.message` for error details. -. Check the `events` array for error events with timestamps. -. Use `traceId` to correlate related spans and understand the full error context. -. Follow `parentSpanId` relationships to trace the error back to the originating tool. - -Example: A span with `status.code: 2` and `status.message: "connection timeout"` indicates the operation failed due to a timeout. - -== Correlate distributed operations - -Link MCP server activity to downstream effects: - -. Extract `traceId` from tool invocation spans. -. Search for the same `traceId` in other application logs or traces. -. Follow `parentSpanId` relationships to build complete operation timelines. -. Identify bottlenecks across your entire system. - -== Integrate with observability platforms - -The `redpanda.otel_traces` topic stores trace data in OpenTelemetry format. Redpanda does not support direct export to platforms like Grafana Cloud and Datadog due to format compatibility limitations. Redpanda produces one span per topic message, whereas these platforms expect traces in batch format. - -You can consume traces directly from the `redpanda.otel_traces` topic using any Kafka-compatible consumer for custom analysis and processing. - -== Next steps - -* xref:ai-agents:mcp/remote/concepts.adoc#transcripts[Transcripts]: Learn how traces and spans work -* xref:ai-agents:mcp/remote/troubleshooting.adoc[]: Diagnose and fix common issues -* xref:ai-agents:mcp/remote/manage-servers.adoc[]: Manage MCP server lifecycle diff --git a/modules/ai-agents/pages/observability/monitor-agents.adoc b/modules/ai-agents/pages/observability/monitor-agents.adoc deleted file mode 100644 index f72affafa..000000000 --- a/modules/ai-agents/pages/observability/monitor-agents.adoc +++ /dev/null @@ -1,226 +0,0 @@ -= Monitor Agent Activity -:description: Monitor agent execution, analyze conversation history, track token usage, and debug issues using inspector, transcripts, and agent data topics. -:page-topic-type: how-to -:personas: ai_agent_developer, platform_admin -:learning-objective-1: pass:q[Test agents interactively using the *Inspector* tab] -:learning-objective-2: Consume session and task topics for analysis -:learning-objective-3: Debug agent behavior using Transcripts - -Monitor your agents to track performance, analyze conversations, debug issues, and optimize costs. - -After reading this page, you will be able to: - -* [ ] {learning-objective-1} -* [ ] {learning-objective-2} -* [ ] {learning-objective-3} - -For conceptual background on traces and observability, see xref:ai-agents:observability/concepts.adoc[]. - -== Prerequisites - -You must have a running agent. If you do not have one, see xref:ai-agents:agents/quickstart.adoc[]. - -== Test agents interactively - -The *Inspector* tab provides real-time conversation testing and debugging. - -You can use the Inspector to: - -* Test agent responses interactively -* View full conversation history -* See tool invocations and results -* Monitor token usage per request -* Test error scenarios - -=== Access the inspector - -. Navigate to *Agentic AI* > *AI Agents* in the Redpanda Cloud UI. -. Click your agent name. -. Open the *Inspector* tab. -. Enter test queries and review responses. -. Check the conversation panel to see tool calls. -. Start a new session to test fresh conversations. - -=== Testing best practices - -Test your agents systematically: - -* **Boundary cases**: Test requests at the edge of agent capabilities to verify scope enforcement -* **Error handling**: Request unavailable data to verify graceful degradation -* **Iteration count**: Monitor how many iterations complex requests require -* **Ambiguous input**: Send vague queries to verify clarification behavior -* **Token usage**: Track tokens per request to estimate costs - -== View execution traces - -The *Transcripts* view shows agent execution traces with detailed timing and error information. - -=== What Transcripts show - -* Agent startup and initialization -* Request and response flow -* Tool invocations and results -* Error messages and failures -* Token usage per request -* OpenTelemetry trace data - -=== Access Transcripts - -. Navigate to *Agentic AI* > *AI Agents*. -. Click your agent name. -. Click *Transcripts* in the left navigation. -. Select a transcript to view execution details. - -=== When to use Transcripts - -* Agent won't start (deployment issues) -* Tool execution errors -* Unexpected agent behavior -* Debugging conversation flow -* Verifying tool selection logic - -== Consume agent data topics - -Agents emit structured data to two Redpanda topics for monitoring and analysis. - -=== Sessions topic - -The sessions topic (`redpanda.aiagent..sessions`) contains all conversation messages. - -Use the sessions topic to: - -* Review past conversations -* Analyze conversation patterns -* Debug multi-turn interactions -* Understand context management - -=== Tasks topic - -The tasks topic (`redpanda.aiagent..tasks`) contains task execution records with status and artifacts. - -Use the tasks topic to: - -* Monitor task completion rates -* Track token usage and costs -* Debug failed tasks -* Analyze agent performance - -=== Access agent topics - -[tabs] -===== -Cloud UI:: -+ --- -. Navigate to *Topics* in the Redpanda Cloud UI. -. Find `redpanda.aiagent..sessions` or `redpanda.aiagent..tasks`. -. Click *Messages* to view recent data. -. Use filters to search for specific sessions or task states. --- - -rpk:: -+ --- -Consume recent sessions: - -[,bash] ----- -rpk topic consume redpanda.aiagent..sessions --offset end -n 10 ----- - -Consume recent tasks: - -[,bash] ----- -rpk topic consume redpanda.aiagent..tasks --offset end -n 10 ----- --- - -Data Plane API:: -+ --- -Use the link:/api/doc/cloud-dataplane/[Data Plane API] to programmatically consume agent data and integrate with your monitoring pipeline. --- -===== - -For schema details, see xref:ai-agents:agents/concepts.adoc#agent-data-topics[]. - -== Analyze conversation history - -Use conversation history to identify behavior patterns and diagnose issues. - -=== Common patterns - -Look for these indicators when analyzing conversations: - -* Agent calling the same tool repeatedly indicates loop detection is needed -* Large gaps between messages suggest tool timeout or slow execution -* Agent responses without tool calls indicate a tool selection issue -* Fabricated information suggests a missing "never make up data" constraint -* Truncated early messages indicate the context window was exceeded - -=== Analysis workflow - -. Use the inspector to reproduce the issue. -. Review full conversation including tool invocations. -. Identify where agent behavior diverged from expected. -. Check system prompt for missing guidance. -. Verify tool responses are formatted correctly. - -== Track token usage - -Monitor token consumption to optimize costs and set appropriate iteration limits. - -=== View token usage - -Token usage appears in: - -* **Inspector tab**: Shows tokens per request during interactive testing -* **Tasks topic**: Contains `usage` metadata with input/output/total tokens -* **Transcripts**: Displays input and output token counts for each execution - -=== Calculate costs - -Use token data from the tasks topic to estimate costs: - -[,bash] ----- -Cost per request = (total_tokens × model_price_per_token) ----- - -Track costs over time by: - -. Consuming the tasks topic. -. Extracting `metadata.usage.total_tokens` from each task. -. Multiplying by your model's token price. -. Aggregating by time period. - -For cost optimization strategies, see xref:ai-agents:agents/concepts.adoc#cost-calculation[]. - -== Monitor performance - -Track agent performance metrics to identify bottlenecks. - -=== Key metrics - -Monitor these metrics from agent data topics: - -* **Task completion rate**: Percentage of tasks with `TASK_STATE_COMPLETED` -* **Average iterations**: Mean iterations per task from conversation history -* **Token efficiency**: Tokens consumed per successful task completion -* **Tool invocation frequency**: Which tools are called most often -* **Error rate**: Percentage of tasks with `TASK_STATE_FAILED` - -=== Performance analysis - -. Consume the tasks topic over a time window. -. Calculate completion rate: `completed_tasks / total_tasks`. -. Identify high iteration tasks for prompt optimization. -. Track token usage trends over time. -. Correlate errors with specific tool invocations. - -== Next steps - -* xref:ai-agents:observability/concepts.adoc[]: Understand trace structure and OpenTelemetry spans -* xref:ai-agents:agents/troubleshooting.adoc[]: Diagnose and fix common agent issues -* xref:ai-agents:agents/concepts.adoc[]: Learn about agent execution and cost calculation From 8f083fd5919cf6967ef6fc849521fc26a91ee366 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Mon, 2 Feb 2026 09:49:40 +0000 Subject: [PATCH 22/35] Integrate AI Gateway into agent documentation - Replace API key prerequisites with AI Gateway requirement - Add gateway selection before provider/model selection - Remove 'Add API keys as secrets' section from create-agent - Update all tutorials to use gateway-based authentication --- .../ai-agents/pages/agents/create-agent.adoc | 23 +++++++------------ .../ai-agents/pages/agents/quickstart.adoc | 13 ++++------- .../tutorials/customer-support-agent.adoc | 7 +++--- .../transaction-dispute-resolution.adoc | 6 ++--- 4 files changed, 20 insertions(+), 29 deletions(-) diff --git a/modules/ai-agents/pages/agents/create-agent.adoc b/modules/ai-agents/pages/agents/create-agent.adoc index 5103fb3ce..ef5d2950f 100644 --- a/modules/ai-agents/pages/agents/create-agent.adoc +++ b/modules/ai-agents/pages/agents/create-agent.adoc @@ -16,9 +16,9 @@ After reading this page, you will be able to: == Prerequisites -* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] on AWS running Redpanda version 25.3 and later. +* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] with Remote MCP enabled. +* xref:ai-agents:ai-gateway/gateway-quickstart.adoc[AI Gateway configured] with at least one LLM provider enabled. * At least one xref:ai-agents:mcp/remote/overview.adoc[Remote MCP server] deployed with tools. -* LLM provider API key (OpenAI, Google, or Anthropic). * System prompt prepared (see xref:ai-agents:agents/prompt-best-practices.adoc[System Prompt Best Practices]). == Access the agents UI @@ -59,7 +59,11 @@ Start with Medium for production workloads. Monitor CPU and memory usage, then a Agents use large language models (LLMs) to interpret user intent and decide which tools to invoke. -. In the *Model* section, select your LLM provider: +. Select your AI Gateway: ++ +Choose the gateway that contains your configured LLM providers and API keys. If you have multiple gateways, select the appropriate one for this agent's workload (for example, production vs staging, or team-specific gateways). + +. Select your LLM provider from those available in the gateway: + * OpenAI (GPT models) * Google (Gemini models) @@ -74,7 +78,7 @@ Agents use large language models (LLMs) to interpret user intent and decide whic . Select the specific model version from the dropdown. + -The Console shows available models with descriptions. +The dropdown shows available models with descriptions. For detailed model specifications and pricing: @@ -84,17 +88,6 @@ For detailed model specifications and pricing: For model selection based on architecture patterns, see xref:ai-agents:agents/architecture-patterns.adoc#model-selection-guide[Model selection guide]. -== Add API keys as secrets - -. In the *API Key* section, click *Add Secret*. -. Choose one: -+ -* *Use existing secret*: Select from your Secrets Store -* *Create new secret*: Enter your LLM provider API key - -. Name your secret (for example: `openai-api-key`). -. Click *Save*. - == Write the system prompt . In the *System Prompt* section, enter your prompt (minimum 10 characters). diff --git a/modules/ai-agents/pages/agents/quickstart.adoc b/modules/ai-agents/pages/agents/quickstart.adoc index dcfe2b0cf..7417e6206 100644 --- a/modules/ai-agents/pages/agents/quickstart.adoc +++ b/modules/ai-agents/pages/agents/quickstart.adoc @@ -18,17 +18,13 @@ After completing this quickstart, you will be able to: * A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] (agents are not available on Dedicated or Serverless clusters) +* xref:ai-agents:ai-gateway/gateway-quickstart.adoc[AI Gateway configured] with at least one LLM provider enabled (OpenAI, Anthropic, or Google AI) + * Completed the xref:ai-agents:mcp/remote/quickstart.adoc[Remote MCP Quickstart] to create an MCP server with the following tools deployed: + ** `generate_input`: Generates fake user event data ** `redpanda_output`: Publishes data to Redpanda topics -* API key from one of these providers: -+ -** link:https://platform.openai.com/api-keys[OpenAI API key^] -** link:https://console.anthropic.com/settings/keys[Anthropic API key^] -** link:https://aistudio.google.com/app/apikey[Google AI API key^] - == What you'll build An Event Data Manager agent that: @@ -53,9 +49,10 @@ The agent orchestrates the `generate_input` and `redpanda_output` tools you crea * *Description*: `Generates and publishes fake user event data to Redpanda topics` * *Resource Tier*: Select *XSmall* (sufficient for this quickstart) -. Choose your LLM provider and model: +. Select your AI Gateway and model: + -* *Provider*: Select OpenAI, Anthropic, or Google +* *AI Gateway*: Select the gateway you configured (contains provider and API key configuration) +* *Provider*: Select a provider available in your gateway (OpenAI, Anthropic, or Google) * *Model*: Choose any balanced model from the dropdown . Add your API key: diff --git a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc index edf0edeae..a3778a34c 100644 --- a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc +++ b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc @@ -36,8 +36,8 @@ The challenge: users phrase requests differently ("Where's my package?", "Track == Prerequisites -* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] on AWS running Redpanda version 25.3 and later. -* LLM provider API key (this tutorial uses OpenAI). +* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] with Remote MCP enabled. +* xref:ai-agents:ai-gateway/gateway-quickstart.adoc[AI Gateway configured] with at least one LLM provider enabled (this tutorial uses OpenAI). == Design the MCP tools @@ -120,8 +120,9 @@ Create the customer support agent with the system prompt. * *Name*: `customer-support-agent` * *Description*: `Helps customers track orders and shipping` * *Resource Tier*: Medium +* *AI Gateway*: Select the gateway you configured +* *Provider*: OpenAI or Anthropic * *Model*: OpenAI GPT-5.2 or Claude Sonnet 4.5 (models with strong reasoning) -* *API Key*: Your LLM provider API key * *MCP Server*: Select `customer-support-tools` * *Max Iterations*: 15 diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc index 4d3b2b955..f1ccd97ac 100644 --- a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -32,8 +32,8 @@ When a customer calls saying "I see a $247.83 charge from 'ACME CORP' but I neve == Prerequisites -* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] on AWS running Redpanda version 25.3 and later. -* LLM provider API key (this tutorial uses OpenAI GPT-5.2 or Claude Sonnet 4.5 for reasoning). +* A xref:get-started:cluster-types/byoc/index.adoc[BYOC cluster] with Remote MCP enabled. +* xref:ai-agents:ai-gateway/gateway-quickstart.adoc[AI Gateway configured] with at least one LLM provider enabled (this tutorial uses OpenAI GPT-5.2 or Claude Sonnet 4.5 for reasoning). * The xref:get-started:rpk-install.adoc[Redpanda CLI (`rpk`)] installed (for testing the pipeline with sample data). * Completed xref:ai-agents:agents/tutorials/customer-support-agent.adoc[] (foundational multi-tool concepts). @@ -225,9 +225,9 @@ Sub-agents inherit the LLM provider, model, resource tier, and max iterations fr * *Name*: `dispute-resolution-agent` * *Description*: `Orchestrates transaction dispute investigations` * *Resource Tier*: Large +* *AI Gateway*: Select the gateway you configured * *Provider*: OpenAI * *Model*: GPT-5 Mini (fast, cost-effective for structured workflows) -* *API Key*: Your LLM provider API key * *Max Iterations*: 15 . In the *System Prompt* field, enter: From 1e0d4c5a42644d20231a95ffdeb243eee42a74d0 Mon Sep 17 00:00:00 2001 From: Jake Cahill <45230295+JakeSCahill@users.noreply.github.com> Date: Mon, 2 Feb 2026 09:51:54 +0000 Subject: [PATCH 23/35] Update local-antora-playbook.yml --- local-antora-playbook.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/local-antora-playbook.yml b/local-antora-playbook.yml index 3e5b6c1d8..d8d478c82 100644 --- a/local-antora-playbook.yml +++ b/local-antora-playbook.yml @@ -10,9 +10,6 @@ urls: latest_version_segment: 'current' output: clean: true -runtime: - log: - failure_level: error content: sources: - url: . From 722c22828610ec2517407046c4140cf648229bde Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Mon, 2 Feb 2026 17:36:06 +0000 Subject: [PATCH 24/35] Replace 'Cloud UI' with 'Cloud Console' throughout ai-agents docs --- .../examples/mcp-tools/test-mcp-tools.sh | 2 +- modules/ai-agents/pages/agents/a2a-concepts.adoc | 2 +- .../pages/agents/architecture-patterns.adoc | 2 +- modules/ai-agents/pages/agents/create-agent.adoc | 6 +++--- .../ai-agents/pages/agents/monitor-agents.adoc | 2 +- modules/ai-agents/pages/agents/quickstart.adoc | 2 +- .../agents/tutorials/customer-support-agent.adoc | 4 ++-- .../transaction-dispute-resolution.adoc | 10 +++++----- .../ai-agents/pages/mcp/remote/create-tool.adoc | 8 ++++---- .../pages/mcp/remote/manage-servers.adoc | 16 ++++++++-------- .../pages/mcp/remote/monitor-mcp-servers.adoc | 6 +++--- .../ai-agents/pages/mcp/remote/quickstart.adoc | 6 +++--- .../pages/mcp/remote/scale-resources.adoc | 4 ++-- 13 files changed, 35 insertions(+), 35 deletions(-) diff --git a/modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh b/modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh index 263ea5dbf..f815a561f 100755 --- a/modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh +++ b/modules/ai-agents/examples/mcp-tools/test-mcp-tools.sh @@ -12,7 +12,7 @@ # # Unlike rp-connect-docs, Cloud MCP tools cannot be tested with # `rpk connect run` because they are standalone tool definitions, not -# full pipelines. End-to-end testing requires the Cloud UI. +# full pipelines. End-to-end testing requires the Cloud Console. set -euo pipefail diff --git a/modules/ai-agents/pages/agents/a2a-concepts.adoc b/modules/ai-agents/pages/agents/a2a-concepts.adoc index 48599c2a3..675142eb0 100644 --- a/modules/ai-agents/pages/agents/a2a-concepts.adoc +++ b/modules/ai-agents/pages/agents/a2a-concepts.adoc @@ -38,7 +38,7 @@ The agent card is a JSON document that describes what the agent can do and how t [#agent-card-location] === Agent card location -Redpanda Cloud agents expose their agent cards at the `/.well-known/agent-card.json` subpath of the agent URL. You can find the agent URL on the agent overview page in the Redpanda Cloud UI under *Agentic AI* > *AI Agents*. +Redpanda Cloud agents expose their agent cards at the `/.well-known/agent-card.json` subpath of the agent URL. You can find the agent URL on the agent overview page in the Redpanda Cloud Console under *Agentic AI* > *AI Agents*. For example, if your agent URL is `\https://my-agent.ai-agents.abc123.cloud.redpanda.com`, your agent card URL is `\https://my-agent.ai-agents.abc123.cloud.redpanda.com/.well-known/agent-card.json`. diff --git a/modules/ai-agents/pages/agents/architecture-patterns.adoc b/modules/ai-agents/pages/agents/architecture-patterns.adoc index dbfbd3dae..aeed99dde 100644 --- a/modules/ai-agents/pages/agents/architecture-patterns.adoc +++ b/modules/ai-agents/pages/agents/architecture-patterns.adoc @@ -166,7 +166,7 @@ Design workflows to complete in 20-30 iterations. Return paginated results from == Model selection guide -Choose models based on task complexity, latency requirements, and cost constraints. The Redpanda Cloud UI displays available models with descriptions when creating agents. +Choose models based on task complexity, latency requirements, and cost constraints. The Redpanda Cloud Console displays available models with descriptions when creating agents. === Match models to task complexity diff --git a/modules/ai-agents/pages/agents/create-agent.adoc b/modules/ai-agents/pages/agents/create-agent.adoc index ef5d2950f..60b95ecf9 100644 --- a/modules/ai-agents/pages/agents/create-agent.adoc +++ b/modules/ai-agents/pages/agents/create-agent.adoc @@ -6,7 +6,7 @@ :learning-objective-2: Connect MCP servers and select tools for your agent :learning-objective-3: Set agent execution parameters including max iterations -Create a new AI agent through the Redpanda Cloud UI. This guide walks you through configuring the agent's model, system prompt, tools, and execution settings. +Create a new AI agent through the Redpanda Cloud Console. This guide walks you through configuring the agent's model, system prompt, tools, and execution settings. After reading this page, you will be able to: @@ -23,7 +23,7 @@ After reading this page, you will be able to: == Access the agents UI -. Log in to the link:https://cloud.redpanda.com[Redpanda Cloud UI^]. +. Log in to the link:https://cloud.redpanda.com[Redpanda Cloud Console^]. . Navigate to your cluster. . Click *Agentic AI* > *AI Agents* in the left navigation. @@ -226,7 +226,7 @@ https://.ai-agents.. You can use this URL to call your agent programmatically or integrate it with external systems. -The *Inspector* tab in the Cloud UI automatically uses this URL to connect to your agent for testing. +The *Inspector* tab in the Cloud Console automatically uses this URL to connect to your agent for testing. For programmatic access or external agent integration, see xref:ai-agents:agents/integration-overview.adoc[]. diff --git a/modules/ai-agents/pages/agents/monitor-agents.adoc b/modules/ai-agents/pages/agents/monitor-agents.adoc index 71578c7f6..c493aa291 100644 --- a/modules/ai-agents/pages/agents/monitor-agents.adoc +++ b/modules/ai-agents/pages/agents/monitor-agents.adoc @@ -79,7 +79,7 @@ The *Inspector* tab provides real-time conversation testing. Use it to test agen === Access Inspector -. Navigate to *Agentic AI* > *AI Agents* in the Redpanda Cloud UI. +. Navigate to *Agentic AI* > *AI Agents* in the Redpanda Cloud Console. . Click your agent name. . Open the *Inspector* tab. . Enter test queries and review responses. diff --git a/modules/ai-agents/pages/agents/quickstart.adoc b/modules/ai-agents/pages/agents/quickstart.adoc index 7417e6206..0be1a183b 100644 --- a/modules/ai-agents/pages/agents/quickstart.adoc +++ b/modules/ai-agents/pages/agents/quickstart.adoc @@ -37,7 +37,7 @@ The agent orchestrates the `generate_input` and `redpanda_output` tools you crea == Create the agent -. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud UI^]. +. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud Console^]. . Navigate to your cluster and click *Agentic AI* > *AI Agents* in the left navigation. diff --git a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc index a3778a34c..552a5bdce 100644 --- a/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc +++ b/modules/ai-agents/pages/agents/tutorials/customer-support-agent.adoc @@ -61,7 +61,7 @@ This granularity enables the agent to chain tools (check order status, see it's Create a Remote MCP server with the three tools. -. Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud UI^]. +. Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud Console^]. . Go to *Agentic AI* > *Remote MCP*. . Click *Create MCP Server*. . Configure the server: @@ -180,7 +180,7 @@ Wait for the agent status to show *Running*. == Observe orchestration in action -Open the *Inspector* tab in the Redpanda Cloud UI to interact with the agent. +Open the *Inspector* tab in the Redpanda Cloud Console to interact with the agent. Testing reveals how the agent makes decisions. Watch the conversation panel in the built-in chat interface to see the agent's reasoning process unfold. diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc index f1ccd97ac..b4eb3670f 100644 --- a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -45,7 +45,7 @@ Before creating agents, create the tools they'll use. You'll organize tools by d Account tools retrieve customer and transaction data with PII protection. -. Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud UI^]. +. Navigate to your cluster in the link:https://cloud.redpanda.com[Redpanda Cloud Console^]. . Go to *Agentic AI* > *Remote MCP*. . Click *Create MCP Server*. . Configure the server: @@ -441,7 +441,7 @@ https://abc123.ai-agents.def456.cloud.redpanda.com/.well-known/agent-card.json Create the topics the pipeline will use for input and output. -. Go to *Topics* in the Redpanda Cloud UI. +. Go to *Topics* in the Redpanda Cloud Console. . Click *Create Topic*. . Create the input topic: + @@ -460,7 +460,7 @@ Create the topics the pipeline will use for input and output. The pipeline needs SASL credentials to read from and write to Redpanda topics. -. Go to *Security* > *Users* in the Redpanda Cloud UI. +. Go to *Security* > *Users* in the Redpanda Cloud Console. . Click *Create User*. . Configure the user: + @@ -496,7 +496,7 @@ The pipeline needs SASL credentials to read from and write to Redpanda topics. The pipeline needs SASL credentials stored as secrets to authenticate with Redpanda topics. -. Go to *Connect* > *Secrets* in the Redpanda Cloud UI (if not already there). +. Go to *Connect* > *Secrets* in the Redpanda Cloud Console (if not already there). . Click *Create Secret*. . Create two secrets with these values: + @@ -505,7 +505,7 @@ The pipeline needs SASL credentials stored as secrets to authenticate with Redpa === Create the pipeline -. Go to *Connect* in the Redpanda Cloud UI. +. Go to *Connect* in the Redpanda Cloud Console. . Click *Create Pipeline*. . In the numbered steps, click *4 Add permissions*. . Select *Service Account*. diff --git a/modules/ai-agents/pages/mcp/remote/create-tool.adoc b/modules/ai-agents/pages/mcp/remote/create-tool.adoc index 1d60444bf..3b13dcec4 100644 --- a/modules/ai-agents/pages/mcp/remote/create-tool.adoc +++ b/modules/ai-agents/pages/mcp/remote/create-tool.adoc @@ -24,14 +24,14 @@ After reading this page, you will be able to: == Create the tool -In Redpanda Cloud, you create tools directly in the Cloud UI or using the Data Plane API. +In Redpanda Cloud, you create tools directly in the Cloud Console or using the Data Plane API. [tabs] ====== -Cloud UI:: +Cloud Console:: + -- -. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud UI^]. +. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud Console^]. . Navigate to *Agentic AI* > *Remote MCP* and either create a new MCP server or edit an existing one. @@ -207,7 +207,7 @@ Reference secrets using `${secrets.SECRET_NAME}` syntax: include::ai-agents:example$mcp-tools/snippets/secrets.yaml[tag=example,indent=0] ---- -When you add secret references to your tool configuration, the Cloud UI automatically detects them and provides an interface to create the required secrets. +When you add secret references to your tool configuration, the Cloud Console automatically detects them and provides an interface to create the required secrets. === Secrets best practices diff --git a/modules/ai-agents/pages/mcp/remote/manage-servers.adoc b/modules/ai-agents/pages/mcp/remote/manage-servers.adoc index 61d7e66e7..40fe836f7 100644 --- a/modules/ai-agents/pages/mcp/remote/manage-servers.adoc +++ b/modules/ai-agents/pages/mcp/remote/manage-servers.adoc @@ -27,10 +27,10 @@ You can update the configuration, resources, or metadata of an MCP server at any [tabs] ===== -Cloud UI:: +Cloud Console:: + -- -. In the Redpanda Cloud UI, navigate to *Agentic AI* > *Remote MCP*. +. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. . Find the MCP server you want to edit and click its name. . Click *Edit configuration*. . Make your changes. @@ -70,10 +70,10 @@ Stopping a server pauses all tool execution and releases compute resources, but [tabs] ===== -Cloud UI:: +Cloud Console:: + -- -. In the Redpanda Cloud UI, navigate to *Agentic AI* > *Remote MCP*. +. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. . Find the server you want to stop. . Click the three dots and select *Stop*. . Confirm the action. @@ -101,10 +101,10 @@ Resume a stopped server to restore its functionality. [tabs] ===== -Cloud UI:: +Cloud Console:: + -- -. In the Redpanda Cloud UI, navigate to *Agentic AI* > *Remote MCP*. +. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. . Find the stopped server. . Click the three dots and select *Start*. . Wait for the status to show *Running* before reconnecting clients. @@ -132,10 +132,10 @@ Deleting a server permanently removes it. You cannot undo this action. Redpanda [tabs] ===== -Cloud UI:: +Cloud Console:: + -- -. In the Redpanda Cloud UI, navigate to *Agentic AI* > *Remote MCP*. +. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. . Find the server you want to delete. . Click the three dots and select *Delete*. . Confirm the deletion when prompted. diff --git a/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc b/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc index fbb331875..7966fc3ae 100644 --- a/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc +++ b/modules/ai-agents/pages/mcp/remote/monitor-mcp-servers.adoc @@ -20,7 +20,7 @@ For conceptual background on traces, spans, and the trace data structure, see xr You must have an existing MCP server. If you do not have one, see xref:ai-agents:mcp/remote/quickstart.adoc[]. -== View transcripts in the Cloud UI +== View transcripts in the Cloud Console :context: mcp include::ai-agents:partial$transcripts-ui-guide.adoc[] @@ -33,10 +33,10 @@ MCP servers emit OpenTelemetry traces to the `redpanda.otel_traces` topic. Consu [tabs] ===== -Cloud UI:: +Cloud Console:: + -- -. In the Redpanda Cloud UI, navigate to *Topics*. +. In the Redpanda Cloud Console, navigate to *Topics*. . Select `redpanda.otel_traces`. . Click *Messages* to view recent traces. . Use filters to search for specific trace IDs, span names, or time ranges. diff --git a/modules/ai-agents/pages/mcp/remote/quickstart.adoc b/modules/ai-agents/pages/mcp/remote/quickstart.adoc index 32a41b5aa..92ee94aeb 100644 --- a/modules/ai-agents/pages/mcp/remote/quickstart.adoc +++ b/modules/ai-agents/pages/mcp/remote/quickstart.adoc @@ -176,10 +176,10 @@ curl -X POST "https:///v1/acls" \ [tabs] ===== -Cloud UI:: +Cloud Console:: + -- -. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud UI^]. +. Log in to the link:https://cloud.redpanda.com/[Redpanda Cloud Console^]. . Navigate to *Agentic AI* > *Remote MCP*. + @@ -187,7 +187,7 @@ This page shows a list of existing servers. . Click *Create new MCP Server*. In *Server Metadata*, configure the basic information and resources: + -* *Display Name*: A human-friendly name such as `event-data-generator`. This name is shown in the Redpanda Cloud UI. It is not the name of the MCP server itself. +* *Display Name*: A human-friendly name such as `event-data-generator`. This name is shown in the Redpanda Cloud Console. It is not the name of the MCP server itself. * *Description*: Explain what the server does. For example, `Generates fake user event data and publishes it to Redpanda topics`. * *Tags*: Add key/value tags such as `owner=platform` or `env=demo`. The tag names `service_account_id` and `secret_id` are reserved and cannot be used. * *Resources*: Choose a size (XSmall / Small / Medium / Large / XLarge). Larger sizes allow more concurrent requests and faster processing, but cost more. You can change this later. diff --git a/modules/ai-agents/pages/mcp/remote/scale-resources.adoc b/modules/ai-agents/pages/mcp/remote/scale-resources.adoc index 424094577..3c4d948b7 100644 --- a/modules/ai-agents/pages/mcp/remote/scale-resources.adoc +++ b/modules/ai-agents/pages/mcp/remote/scale-resources.adoc @@ -24,10 +24,10 @@ You must have an existing MCP server. If you do not have one, see xref:ai-agents [tabs] ===== -Cloud UI:: +Cloud Console:: + -- -. In the Redpanda Cloud UI, navigate to *Agentic AI* > *Remote MCP*. +. In the Redpanda Cloud Console, navigate to *Agentic AI* > *Remote MCP*. . Find the MCP server you want to scale and click its name. . Click *Edit configuration*. . Under *Resources*, select a new size: From 6bac58b5b3da6c2d91e9406c298558ebca011ea6 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Mon, 2 Feb 2026 19:28:45 +0000 Subject: [PATCH 25/35] Update MCP overview --- modules/ai-agents/pages/mcp/overview.adoc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/ai-agents/pages/mcp/overview.adoc b/modules/ai-agents/pages/mcp/overview.adoc index 964be2dc5..1357d7211 100644 --- a/modules/ai-agents/pages/mcp/overview.adoc +++ b/modules/ai-agents/pages/mcp/overview.adoc @@ -18,7 +18,11 @@ After reading this page, you will be able to: == What is MCP? -MCP (Model Context Protocol) is an open standard that lets AI agents use tools. Think of it like a universal adapter: instead of building custom integrations for every AI system, you define your tools once using MCP, and any MCP-compatible AI client can discover and use them. +The Model Context Protocol (MCP) provides a standardized way for AI agents to connect with external data sources and tools in Redpanda Cloud. + +Each MCP server hosts a set of tools that AI clients can discover and invoke. Tools are custom integrations that expose data, APIs, or workflows to AI agents. + +Think of MCP like a universal adapter: instead of building custom integrations for every AI system, you define your tools once using MCP, and any MCP-compatible AI client can discover and use them. Without MCP, connecting AI to your business systems requires custom API code, authentication handling, and response formatting for each AI platform. With MCP, you describe what a tool does and what inputs it needs, and the protocol handles the rest. From 723eaf4bc063add317dabf60274d68f6d679b60d Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Tue, 3 Feb 2026 09:11:16 +0000 Subject: [PATCH 26/35] Simplify examples --- .../transaction-dispute-resolution.adoc | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc index b4eb3670f..7ed31dd5e 100644 --- a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -341,15 +341,7 @@ I see a $1,847.99 charge from 'LUXURY WATCHES INT' in Singapore on transaction T Watch the conversation panel as the investigation progresses. You'll see the root agent call each sub-agent in sequence. After all sub-agents complete (30-90 seconds), the agent sends its final response to the chat. -In the conversation panel, you'll see the root agent: - -. Routes to account-agent and retrieves customer location data and spending patterns -. Routes to fraud-agent and calculates critical risk level (95+ score) -. Routes to merchant-agent and confirms merchant legitimacy issues -. Routes to compliance-agent and logs investigation -. Takes immediate action and blocks card and approves dispute claim - -After all sub-agents complete, the agent sends its final response to the chat. +The final response should clearly state the transaction is fraudulent, summarize findings from each sub-agent, and provide a list of actions the agent is going to take. This flow demonstrates multi-agent coordination for high-confidence fraud decisions with realistic banking communication. @@ -364,15 +356,7 @@ Click *Clear context*. Then enter: I see three $29.99 charges from 'EXAMPLE STREAMING' last month, but I only subscribed once. My customer ID is CUST-1002 and one of the transactions is TXN-89014. ---- -Watch the conversation panel as the agent investigates. After the sub-agent calls complete, the agent should send a response with a realistic escalation pattern: - -In the conversation panel, you'll see the root agent: - -. Routes to account-agent and confirms recurring charges -. Routes to fraud-agent and receives moderate risk score (not clear fraud) -. Routes to merchant-agent and confirms legitimate merchant -. Routes to compliance-agent and logs as billing error dispute -. Escalates to human specialist (conflicting evidence, requires merchant subscription records) +Watch the conversation panel as the agent investigates. After the sub-agent calls complete, the agent should send a response with a realistic escalation. This demonstrates the escalation pattern when evidence is ambiguous and requires human review. From 40c87e586ccc1dd2d1691db5d2a9e8d14cc96da8 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Tue, 3 Feb 2026 09:16:12 +0000 Subject: [PATCH 27/35] Fix label --- .../pages/agents/tutorials/transaction-dispute-resolution.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc index 7ed31dd5e..23e460909 100644 --- a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -456,7 +456,7 @@ The pipeline needs SASL credentials to read from and write to Redpanda topics. . Click *Create*. -. Click *Create ACL* to grant permissions. +. Click *Create ACLs* to grant permissions. . Click the *Clusters* tab for cluster permissions and select *Allow all*. From bd2797df5f88a8f93fc4647b84751c1442aaf5fc Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Tue, 3 Feb 2026 09:17:49 +0000 Subject: [PATCH 28/35] Fix label --- .../pages/agents/tutorials/transaction-dispute-resolution.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc index 23e460909..5685d4006 100644 --- a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -490,7 +490,7 @@ The pipeline needs SASL credentials stored as secrets to authenticate with Redpa === Create the pipeline . Go to *Connect* in the Redpanda Cloud Console. -. Click *Create Pipeline*. +. Click *Create a pipeline*. . In the numbered steps, click *4 Add permissions*. . Select *Service Account*. + From 4b67d298fae8e42093d338545205847fea75b1e5 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Tue, 3 Feb 2026 09:19:01 +0000 Subject: [PATCH 29/35] Fix label --- .../pages/agents/tutorials/transaction-dispute-resolution.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc index 5685d4006..b36c37cf8 100644 --- a/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc +++ b/modules/ai-agents/pages/agents/tutorials/transaction-dispute-resolution.adoc @@ -498,7 +498,7 @@ The Service Account is required for the `a2a_message` processor to authenticate . Click *Next*. . Name the pipeline `dispute-pipeline`. -. Paste this configuration: +. Paste this configuration and click *Create Pipeline*: + [,yaml,role="no-placeholders"] ---- From 94485e9f26f1632fcbebaac7825d7830ff8feb78 Mon Sep 17 00:00:00 2001 From: Jake Cahill <45230295+JakeSCahill@users.noreply.github.com> Date: Wed, 4 Feb 2026 07:39:32 +0000 Subject: [PATCH 30/35] Update quickstart.adoc --- modules/ai-agents/pages/agents/quickstart.adoc | 8 -------- 1 file changed, 8 deletions(-) diff --git a/modules/ai-agents/pages/agents/quickstart.adoc b/modules/ai-agents/pages/agents/quickstart.adoc index 0be1a183b..a0f97cb29 100644 --- a/modules/ai-agents/pages/agents/quickstart.adoc +++ b/modules/ai-agents/pages/agents/quickstart.adoc @@ -55,14 +55,6 @@ The agent orchestrates the `generate_input` and `redpanda_output` tools you crea * *Provider*: Select a provider available in your gateway (OpenAI, Anthropic, or Google) * *Model*: Choose any balanced model from the dropdown -. Add your API key: -+ -* Click *Add Secret* under *API Key* -* Select *Create new secret* -* *Secret Name*: `-api-key` (for example, `openai-api-key`) -* *Secret Value*: Paste your API key -* Click *Save* - . Write the system prompt: + [,text] From a0d7877f0970b697307aee4b6c0c24f09700751e Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Fri, 6 Feb 2026 17:20:21 +0000 Subject: [PATCH 31/35] Address feedback --- .../examples/agents/account-agent-prompt.txt | 2 +- .../processors/get_weather_complete.yaml | 2 +- .../mcp-tools/processors/search_jira.yaml | 2 +- .../images/agent-exit-conditions.png | Bin 0 -> 3894398 bytes .../ai-agents/images/agent-reasoning-loop.png | Bin 0 -> 4110727 bytes .../pages/agents/architecture-patterns.adoc | 60 ++++++++++++++---- modules/ai-agents/pages/agents/concepts.adoc | 14 +++- .../ai-agents/pages/agents/create-agent.adoc | 12 ++-- modules/ai-agents/pages/agents/overview.adoc | 8 ++- .../pages/agents/prompt-best-practices.adoc | 4 +- .../ai-agents/pages/agents/quickstart.adoc | 8 ++- .../tutorials/customer-support-agent.adoc | 14 ++-- .../transaction-dispute-resolution.adoc | 10 +-- .../pages/observability/concepts.adoc | 2 +- .../partials/byoc-aws-requirement.adoc | 1 + 15 files changed, 96 insertions(+), 43 deletions(-) create mode 100644 modules/ai-agents/images/agent-exit-conditions.png create mode 100644 modules/ai-agents/images/agent-reasoning-loop.png create mode 100644 modules/ai-agents/partials/byoc-aws-requirement.adoc diff --git a/modules/ai-agents/examples/agents/account-agent-prompt.txt b/modules/ai-agents/examples/agents/account-agent-prompt.txt index 292fa59b6..63469b00d 100644 --- a/modules/ai-agents/examples/agents/account-agent-prompt.txt +++ b/modules/ai-agents/examples/agents/account-agent-prompt.txt @@ -24,7 +24,7 @@ You are the account agent for ACME Bank's dispute resolution system. You special ## PII Protection Rules Always return masked data: -- Email: First letter + **** + @domain (e.g., "s****@example.com") +- Email: First letter + **** + @domain (for example, "s****@example.com") - Phone: ***-***-XXXX (last 4 digits only) - Card: Last 4 digits only - Never return: Full card numbers, SSNs, full account numbers diff --git a/modules/ai-agents/examples/mcp-tools/processors/get_weather_complete.yaml b/modules/ai-agents/examples/mcp-tools/processors/get_weather_complete.yaml index 5e57cc929..42a199881 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/get_weather_complete.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/get_weather_complete.yaml @@ -46,7 +46,7 @@ meta: properties: - name: city type: string - description: "City name (e.g., 'London', 'New York', 'Tokyo')" + description: "City name (for example, 'London', 'New York', 'Tokyo')" required: true - name: units type: string diff --git a/modules/ai-agents/examples/mcp-tools/processors/search_jira.yaml b/modules/ai-agents/examples/mcp-tools/processors/search_jira.yaml index 7ef2d6673..331e29e38 100644 --- a/modules/ai-agents/examples/mcp-tools/processors/search_jira.yaml +++ b/modules/ai-agents/examples/mcp-tools/processors/search_jira.yaml @@ -22,7 +22,7 @@ meta: properties: - name: jql type: string - description: "JQL query (e.g., 'project = DOC AND status = Open')" + description: "JQL query (for example, 'project = DOC AND status = Open')" required: true - name: max_results type: number diff --git a/modules/ai-agents/images/agent-exit-conditions.png b/modules/ai-agents/images/agent-exit-conditions.png new file mode 100644 index 0000000000000000000000000000000000000000..5d14a08a4d8df8eee538b1daefef68fc21622b7d GIT binary patch literal 3894398 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

S!S`ffTq3w4>oqpdcMPl;g6+ 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%0A0uLy+{GRWjNn(TJ>}I#-Ss^4-kXz#3|?nV}8p~ zs|sUXo6YW39qNWB>bGS0Z?c-#llyww$i=h;KGT)2<7!_^^8vIMaMX%J(FWSmgkAfd zkFW&ZY&zdu=iV@^v3I5YxUWju6kUJFQt=P!nke7G+A$4r zyS(n(ea3OL$FiQ~6yqwxZ}49#$icX$8`qGys)0$aM1(&0R5a7KeKR-4S@3U}2LGI0 zCjWizNT8+-;XHmG!_7au#R5#cVIE_>OCC+SVti@*vpMy#>#!ejG2U-{K>5{(*DXn8 zI;X();>$CI^mZKZ~sm@m8UUV_MuYQPp za>Um`U-5GL`MAI4-7{X(V~$gu%0D567;1wyp2PpR_-}6W;68^8xtvbI*G)gV>2QO0 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

FRS41Np4 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�f?*nvkzMt2*fbDjPAF7MJrwSlbh9^Jq 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

B=e{DyJJAxZ$8JJ)h@B=R$P) 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 z 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

b6q$7S+BUiIS|W0tZv|b6*i50?>zpj zr#U#t;Kh1P4am9AJa)OA?RX=RE}o$V0*##7f}1b8P(geRb2PKdS^yghO*-!^SfTm5 zPJVg5@z36ZIm-w4x82U2xyJK=pN+tU6R^zQv~K=#yVlu|Y%}v z15llOzW+Z(-t`*vx7~qNZ3Lb>v;+L=EuQz}lgB5wFVDlC{63am<-V@FKm3D(8LNJC zQqr4iJ|402$O;m)U^3V#hh#DiuZ;Oq+Xh`5_NOQ3lLV0MEr{`W)*}Qe>uW70_zrB? zV6(qi;6)ri0F<`#GLH|KCovU=;LfnEc+g#f+PziPkh`0;|H$ANhca{E!h zfW5$x+R$$X$>J~;$@UBX2C_?I40&fepTFOWpBT)Lb*SeTv;WEZlNp(^f5nLl zWiEDh+s1{SRHcP|jPE)I%B#h4*}pRgncKo~0j`JtFvbIHe#3$~>}vvYV!U|{v0Qol zdNGr|4>w3GasIu!p#(8C-w$ozd%OHv23J0|tM;{T)6n)DXXo$ucviq8k3j)EbXXqQ z=GFUD|H0P-+Z#{p&QG^9A(*m3vel&wAmy=d{6}Ka?D;QiZ*f;G05`ve_NSEz_a)mK zZWlh!`jllmc#(Xv{^EHigJ6CsY)VNN*4dYy9kBcA<~L&~80G|do)$?pGU@9l>|f~~ z?gOT}$PZe%a4aZY{p{IWZXbUq%bR~^zzh0;{z1O}XSfquYc?E$KE*S zv0_=HjWw?Yz!IB8Vc+9fRpV;zLONKVLkq#S0GJpkL;tbC7N2oF$FCdKSCF5CR(1X7 z$I|~c_UP9U@-}ZU|)c|A; z1Tlj%bZSl-tx0p5#{_oM>!!GCs&V>6biFnB&x#^W(ae zpg=#z5!}${+OO75VjPHHon))ABzvFUb%iGSy5km zu^6r$ezy+>#YPAF9nv~+P=_+*>F2BEkzBfbm+W7`&mV&5rUgyt?}?y?oy{yGElG0RjZF5FoLG5C$YRBV)igI3bP!`)>j= zv7MO2#Q8Z+WMc(v<6tKQv)LH27=)07RwRMYhJ<#ZU87l~(P(DAz58x`|G%f6dd{hH z-nR!|{YGDR-+SNpyyw)Zs#EpUQ#(lydrkm8r~&w~@_T^^)nl+=J+&RXcKxb@M$zj2 zfd?M62OfOT0d6a$?sXCF9s)d2FlY#y;_hPuiu+ zSM8opeA1RD3r`k;B@}B3S$q8BA8$tohko6IgCoB$*iUmCZ-AKn3{!wQW1FU)5kU+A zz%^b+=MIY9L;G@PkX*0qo_p@`HOF`WqJ*p*Utc&V_56h+vPkYz-gc*RX9C4DUpRN< zfEen6UB4b)MXy1Jph#i~_M)qH1?%$AL$-f-Xp8NR-Eh+dyZsS2L-V-&wZ0x=uPh>A zVwt)MvX6hkq>Oj3Uc2a%VqSbrBLNNBKfZp| zP5_dhPVCCntA4M?KlX8ce}Iiah62FNm21}=XpQ;!gIB-Ke(bq_*REc?Xa~~(Bu{pn zq4)X!@~7<^pZ(2#-{Z?yZFREnc-(#W-RE@dX&Z zr!!jx+wjrBJX-hGGp7JJUKDp~F1L^+0D$%$UhUY@dUCkt0#t z=-wYl{#hM&2EWDU!moB;#mNJr@OUc*ITR=GI#^d{xSY&|sqa?K%1>Z9TZd!+0fesg zpG*OCBPbqg1DVwMN&au~i3;#bzH4u9`E>ORBhYVqeixyD)^Y4S*xT_&+obbv_Mh3A zgnEZ^6hQJV^#}F`fw=I0hTX`p7xVd5G6=vTUeM>5EBvRzB*rl+P%h^y^eRBOm@@&+ zb^el1!F2@sl;Z_Jltm%!nG1j<0dT?gmpfDQUQs9)|Cao=3PMXKmKslYU%AVd!|qX5 z*-~EdX06o@z`t4_tYZ`F7x4@9l-QOP^NE-;pQh*n6+h-@sn?481}IBDc^#3{)0e;L z+~M~Vu(lN1Nx$@+1MAse07At>IL3%AIJ-AHgL6z}rJEQCJKJfDc^|~Qhu+3|Ku=+h z`+7r1r~E`dulZxezM#HdmjVU0^*ba8msVI&!_XV#w)q%WAw6FoUhtZS2{uY6x<*3 zjgAJiKUGKi{kwvG0VuVtl`oS1(6~1VPv!vmJe~w|ne}V4uE-7HV-QBb0&eVS41uwOK`hWebU0ax~Hm5e9?fRJ* zKKah(#2$Owq5W_F@JH>tzU`ZA=M*5_9lO4`?ww4$fX{sc`H-AD7IcQc%L#84D+MhS zS3EbV{MY_qxn)3U+2EB=)$lsNEkFS{Y=R{fl^SyVl~9q8)l2q4y$tZk4wc>;qr}JW zLy&|7H!H!1ORCC{XIk^K0{t}rEp&I>e`E~xP(KdR=>ZG9^3L;6jfVd}55Uo$E-PPF zPz+npjV1Q7Q7IKwUNKI(cPgNv!Si)bY%e_<+}QJBWK0-D<=!ZGDuA@^15n;@_@Wb1 z6P)gldqu_`r7#`bvP?Z3_^MyuY=nFH$ZI+Vo*0wAa(~In2taG>ds#_7{Pl;4nf(3X zOY)Nw0XY21@aAiC?nOzWeG$7*11WPVN0OhbW6say@4=~1fH(n1n{|uoXejc`*jd&k z#?kM`%;@ZYi)v(-D%b0g|yIcbW5o16&eX-1+sQ6p?@wsROfHG!rCze1t6skI-^TV*{=J{y z{yO8Jg`QnbYdvfiTMx`te)GLJ|5fgFZOP-^l_>iF1Od8zv)k6%Cc z;FO$@<$c>{5`#)!qx{Na(moWJJ)|M_;!yU-Y+YvA#XlZIJ41T)IaTcDb*TY@3Yg6M zBws^*joXw?zViBy?YV4|A8u~4eCKQF=P`TOU#ATe)c3M|?7yQxM-fZ4`0AfucC))* zzn?Vz_7JD%jHq{^HUEX?emPSH(uG+ zwA~qo^VR!x{r$BE`nl}osh|5ijQii*q}n9kQ9^DTP$eK=pI-zWY0 z_HxVhQoE~kAIQsS%bwon90EYwbyN_NdbL#a3)s@xrTTrIAtX;(e#T^`KYSC&(X2$X zF6}sTAdD^c`gyPSB*S3i8+UfLl@C61T{8uS`ZJ6aMgXj0=k0VrfpSjV8SZb5x%baB z292$kk7hl^jF{XvC3q(a(e<0$w=|zZ68`&pn`( zY@C&uocpNG7i4j~P$=uiwpyQoq&z>Z|C|G>nl}X$V!tK^KCyGR9Fl}p*HfjusP z^4MS63ko(y1ffRD$#xQ<%5G+>J#{_cnFF?H=+6}8z9r^T;{juZC1bKMW-IdiYaAuE z(CPSIR?o6w<>}IAbD*`4r}X2h&!PQU_sYZR;oeT?dlQhM-XOzqj?I~DU%OZJ+(UWR z{3%W~d{6I7ePJ*V^D&g zODOv#Jynx~`W)Z6*93QL-2N-xP>wwGu5H(92~!Sv3IkMttcu-h?0m3W1apZJZFr9@dSQQ(Jq+M13)E}CT*aS72L1P7 zHS5l5O3HY_1^ejKxh)K$;pYd#iOXjqT%eQ3u~nu{72ynhp0Svf_JGzpZdlG2I`7bh zsxq(6Y0_t$?|Sa!-$1}n?@@i`kj-o(6yq()-WZ>=N(EDNJTsD?SOAZqdwiH+Cb9$t z_;fdzfy7Ru#Dll(BNL|faw%MLnFwDcx2G+>hy1bRI~TUP@P`Db#vKE2MEOx+p8&UI zw~qQkeIat~5>e+}HdjTM)IXKwMY34-S1=io#h9#=#V1n|x&TLCr|8)%a*{Cx_?zs_XbSBu|I2{942sY&a21K?`{$*(cMP-EiR+ zyXmG|YO$hUpX_8%1CTQ(Fz9TCGop4(KV*m5dO8*D-~ssBuE3H-mO|+6ql10B;oOnk za?4FN1<(}6Dpw-M{L$;6J%owFxD`N?Eq*4$4BkiEaj5oVm2iGFO z*S>-o%k>xlZxh=&*tfl%L%-JHg_~^Z?Iwd9A__63&oR!j6T&Bfj$N&m4$k*P9ujMN zJ2u;&+hlTN2j?%?Bkp(%fdv83a6OG=H*sqmvsY~)7QN@d$qMACvQ_s`$gBKf$Ps{H zPGqrTn-!U)0SY=fx$bgsx+R_Ap_ZEr##uIQ}V^JsnvNU$Yf^C(!J15^NZTIhkp!>OIy+q0W*x;cSjq`Shmb#TMd zZ3h6%NVp69LgZmz4=g%EBD_ne+&|#sJeN8T$ztQJ*esEwj2jK_nr89eh zu}%fd!&9g_vEg|z{_DrbKBjX=BpZOd-g@iJcKai4C8z>2v1Xo{Np`lXB|8`N1J9<; zWQEUpaS97cv9`OrYB3(&8p5`%Q_F0ZXv80O%^vrePp~^4`xyI1&tV5(!|NINJOl~z zXWDS)Ct-UWG`a_{(bl$W&iKX|WC1XkIMeQvo_u4RnWGayFdt)Hb7w0DLin|JU4Fgg zw}a)$GF<)Uut{ROPdB>#)IZH9^KV$CfLbP8`&IZwCtUX^tj)#S_>_DOakx|y4Df$>gCcOi)%Zbi_ zxF(AXyx?F#fE@HVY)0JJ_XzAAb>Gxw2h6UpBHn#(yR{RrGY9a6tjk<$-mkXE^yN^T z*Ut;#VY?44dtS-6nzMTWl4Kj5U-Tz2A32sbj9GW_fO5Xsx~(U=2=cnN=?nn(*eB2{ zK@!03V%A1kZ^f7(VWnKG*5S!MR`wRlG~*mdvi%#$J?{j`i(*-iRwe z*ZX*bG)3`m#M|Hxod(c~`-;FjI|WG^e1R6!T+iTKV+YH}`NPi>09}v=dp$%T9l`-1ye-SNuV#P+

Kswc!$z;lSafv%YuR=By9}dzk zx4BVd60rvO^U7VhzZ-D?p0R44*X?ZlyxG$4@HkE|r+PRjI&zkM;TW5W2g@;@>}U6w zjXLKMLyDr~?WPtSvXcn=@vDQMb0;~sQPdA&hgE#QBQF}iWA5nZ z6kp64?5S6>jq+J2U5x^#7u_it=T9A|Qk_m?{gkP!ir8E83?~4&V?*shnov2_#qX6Dx7$}6F1j}v|4`e*WdU5Rc zhwr*vpgY8_EtV)+VXPP3Kc@Q!HklsV))sMIMlsULrkKlJv-xCNVqCEA@E0VP?&GhP z?xVY&lVHN}GH)G`ko>Ob*~WlVs1~t7r>p}~umFrIuQ;6Vh9l)hJ)Hckyo!@}27?F# zy7m3qTC8K*ObaoVJk*5uL9@b60gCOYMDY8S$EXR~YN|XxZW5zFJC(= zo%~$+p1re}QT+m-ih8;P3R9~*eJ2|!IoSF7d2BdDIqkczVQncbhgzS-OCZMl`(U2p zcU5fV=O{9n4w&WrSRXN{_@>l8l#-9bgr02}AZ-;}9+&PbS;+>yb#_BPjI2vGqGRvt zx%vGzklV{@ZZ}>P+K?qLzn|r_PbT$$LjW|-(~!ZeR)EyDmrC&5l*RPM%i&Nd7os7%`mt~}v-ClaXTXwGgnqzE#@svf5^ZixWQd%T+ z&o6+8=B>sx<`J#dW~>&b)ZS>k`syjSj+Ev{*{u#AbsqjSdsqc@y`n}!HUzWFi z-|Ja>9nc?q`@>7tuYEyDzYhN;d#U|STPd2Eqt066e*F1wW4=`T+18$&((By* zSz0|cT$j8SdiAz^Y`l3a{WY}?{g@TF(7I{-8bd#yV>Z5Dzg{QzLAbnr{dLCHp#MG3 zZ*Q~m*z$cF->364$NZjro%X)1j;_zr9`5tAGAXA$*d`+CJq6IzHR^lq9?~510GNRW z72rp`nZa7UP9fu)#?K1gnCHm8l;2EbT$GPjK>!R%;(miJ`w>jog(3e3!MpXagnFY+8}o_n2J*H!XX&zime z%-4`HPWK!;CydE|)|pk8$iB2~uEy41f6Mz%fjzuEW~- zW9wrF)ejolhx$F)I)UrkwW{MD>M~xlm5+L_p^W$bOFNc!|3ogb_!pV=vhhDl7Xl{v zJi3xvf3t;qJS$>zsja62lh23?XpCdJwYLG8aj;*fDwi#5=h$`f_q7gV0abk_@1HUI zpY7t9FP87wKl_-h>zd6oCQx{P&HVW>+mz!H3fM{p^-NVCRc1%YqwLF=Egt@@0WXF~$fV>?MseLiCvD6#qcQ04?AJK!kX{bP{7xnQw6s}H&f2qM{tjMw4>j`K718u^Rdj7rXv_e%hcSZX zSuZ|cDr}9;6}hlk|8m^z^DAZPzX#)x1B3%~3udJ9Szk^u4-sSv`7S~31dv8N*yX(| zSjcn4{jBj|PYbv)EXwTnZ2#)#UuiIUu*lZRy$&yaPZZ#srSJNA z&+j+Bt=9-JLDu_Jtv{WM@7l9Mwl77#LMQb8R|Rgj@n~}P`1@kfl(TE~3=W6BK!C(cL@q9olWTH`aF!3q+opy_V>%2dtw?O*4;g4&GFd>J09X`Z1v|L zUwjXYvJ>TJM)MP7UZtE3K?9Ai>%It?3U~MS!=A%b9NKb;HkgoiGL12L%QJ(o2k;fn zZm4?!T(ordR%ayMKOj9TZ2#`oRtqNHYhhb&b89Cp`VUo)f?dcNj1rqZnD=VFj!j7Y zn(>*UvwfdV{aNgkEPm7J#(}~-?5FB8G7zHm>EUGV zduTSrzY!zC+HJ^8B_J2Bf76XO*wMj(U4HOEm#c$=xid#k=M!5kPi%2~%|Tu39RhX< za-?@q&(h)Nxje0G>Mfr+Hh^e+n+@V#wKZJqi#_SG zU6TF;D6yEDawhON_AGQrExdu<1Q-&KB*uGi9k2?wesi4*<){1>U@_hUi{~Nb!3&+D zuxYYq6BO0BKSV&0^jZZnv7NEo$ap#U7Oa5)<4q^QRI7c1!kvk;YeRk@&#P#wtk%_9 zFWgV#^_IFW=hzo5t9yQV5s->}8rzkCkj=R;0Hb0kE!cisr#H^JSpb|OXDF<&Tt)h6edhxmZ8n8SG7Qyt@2;9R4BHjq2{J&ZSI>4{irkh4Oa zv1o+njMF3+Tz~p_v@hm_v~PPXdBzu!m)BJl=8DpoG)buQ8D4No)zJ8St+$!C-Mx+@RC>_f>yHNW(U35SRNlq#xX7Q*mq0y zovx+lPX!EW=i%U9m;9*27;*CQ>nt|Tyg~Gy)`At<5!%RxA%P^T;GUgqRR9x}SghEL zq)~jQj4di1a{Dv=-2*xaG?~X;*2CwU379+%eMT+Hq##NH#}94*b_er<0&FQDo`Fbu z&a$qqF91BRf!7?ktz%)*N(QCMjH>n91LK&iv;j4>gsTV2vw{zK9kOvb%VEoZW3Xg0 zkgv?ZDjCc2py#N}nG7E6mdH%B7YODGenl)Kk~g+A^h$+}Ii|LF4F!}ch2%geA<)c& zswKL)Y~>@QI)(zuPf8cl%4%t%sW& zh)ET>9YdU6t)rP8fisxhGAg}e80uxIk)fz^EMFdshleJ%G_0On9S_&D561Q2iyB1h z9nO|l}x_1RT}- z`QBn|Ebn{u4huv$Up>Q&##95i9yBU!v2w;}qkDivyS{DmH0#2?HM4?kXF03V{nF#w zJN5oGfXiTzbZ`ao^ami051(&+g0liLdEZFyN-xM>kG1yB`@g@3Ub)?I-cPzlKIrD; zVDIqvg$Q}x+cjvfUv&qWPtI;dU4e>POD3&b+gG2XGO*}5#u$I<{%Yl-*MoX7kekQB z>r}vve=5mhs-7Ns{@Mbi+86GfcAa$nI?kco==VIXvG?1=yg=i1eYIwqpWcS(I%DfR z?t_ejOnhBZ5^HSk^}T-o=+!=pjqcsPkWKrNKld!g`dy6j`rO$q!T5e%cVEL|uv!LU zu|V|&d>Ri9J$&wZz+})dg8lA);QO^gvmJ}(zLzIGW4%7-v(*i`wTyxfdN2D`C1qI|6A+Z%ZKb!mG6FkRz`;`d-eBr{5tPBn-d-WasMLi|7@?be@qs}3M{6& z9oiKJZTT6Un{XyAI>}GQOh^fsP~;&2dFi(a@Z0($)&368T)n@R<+IT%0gq&sDURo;!z@UF+yXN`; zt%Wd-y%;wtij)0wCX6!xnqw^Ld?c`X$19T(&904g!&`Yt9%WF`@1pR_8=AU*8-04RxPO-}d^MF|{_4U1VPE%Y!*tL2=p2p-yYB zpY>mVzTkE0IgWw#)}DLV*jbVoBUH;cCg#X|!#UTURT5{&#P08xgr9u)6n_ZY=g*$@ z(wI*?=1cSd{4rl+2%5_>*6$bot-o*9rJlI*r=ee4<^$(7w~0u)tl4oUg32-7k&ucr z2n=7^&w1)qrCyD_9imJhPlLE>f9Z zoj4`2wDNP*`7E%e?g$F2@MRQ#3{+3}{?#{?y^vogdp-`H9N2}TLvoC)?vL^;J|VP= zV)>H)?B9t_U$owoKgu3uwN8xMbj27HCvg&rNKgmZBLlh1$AaNmaX8Eu=Q_F)#a>~% zPwe^Zdqg2___;O7Uj1z(c$${4!N$K{kqwiMHT`Jq`9^oe^~Khg_gbF+OiZET`hLB# z4aojs{!D)HZ#5rKfn8vFjyE?n9p6UFEvnrY%v@f42a7Qyj^`g~|sN14&?Hv}DHfgGI|* z8_O3gz8wJo(C0gGsME-0(UY=txJ^(-uKa$!)! z#NC;Zyej@o9YsK`;vyJZ_?_@w{aNUH2Ib(YcmfHe=$T*45 zGUV1y?f&~8wBzdwyL9;>`dsUc%@6i%v)!@%gCo~pkG%bMUzG{$qK_2}u++UPFnRB; z-G71YF7q6ELGF@+^fr|}Pu)7G7i)oN?HprgzNEL4nn`D`E*}x^EtX4XIzM-GWQ+CE zR*RL*r&GIj{fcdt3%3{4t4r^`ur~oqv)SV0q~y4r4G-t%on2d=ES)J&>kPoQGi-0@ z%PGbQy_s9gGf$=>c%BuxUpY>JlK>=_Pt*9R!cC|^MDd`+Fk8Ur(M>tW4(LNK)YSma|de7v5HU1uuz*4A3KO_VC{F$0O z2+VBw50MkivAsUtwKY5g^WMAgMavnU49)F1K)8W6U!^!NCvJ#!VH_arVaPAzAhcmx zFY1km7x;%FHW_-};}B6y#_L3W(TfPOjh8L2#Sbj*rfw12H_zv_YYvZ2&aEHk=a`G_ z){BMUORN@G-B-uBP;3AlaIyp-jYVf>Q`Z@j836u_C#g_{=Z}e<923w_mRs)A`N7P>7bjlS!}tYt0&^JkT#Mgz-TdNNpziy;7W{MD?W#YwEH}q>LwDtB)n>=RSul+*wh7C3aKeS17onkL?21j1xa&4!v-P2mex}CjZraRzG5e ztc!HdpN)3hdrY{SD_K!7AI}Myd0OWozek)UP~fWAKlfuj=kWV6zseJqGhUot8~ZNOc=hs(jzF2Ki9UA4ZbVHQAfjuGc9QI52eP^5JFdmDjr; zXO`RkbNT!Iy2??>2e3S*{@MD3c^(TYF8em6`7=3L-pgkOE{yFV-Cyfp92b6Sbp6Km zK>up>+t8uS-|hEEuHMc%xK4cw`eY@%qTRz+Z$Hkue;wn{LGI_4KUW8={k!I)I=oCy zro(!d;8Nl=>)X05`uS;XWyuSk!R#*iC@tAW)=j{dR`7)bIa?^FQi6+V7tAZ@!1-H$PYXxiW>de;)^= z^Z>sxc^~_(_FL5<{{PLh=4G^Z+WfH8fSa{XjzW4e(7y=UQ@k#A4B`T&S`s%zQVr0{+Ryy z^Y&pof31Gu%(U`3b~e)WOWVpb_9rVrhq^7>R)3CY`;&)Tf@DhSbaOi9_t&x3BEDQn zoj>z%Oxb76q4szN{N&FSA2k8||Geux+ zy=RhS?A6b6e-6&`G4u;7kSSIof@rD|ANm~G|CW!}`y={%Z};>3jm-ys&h2jdwa)%Y z{@a*s%X6-|#_O!2DCxU=e$e}4>)7kJ-j+VxYivJeJ#p5#Y|L*Nd(W>G$y3dLGgpy( z$)k`Q^lR8ZQ3}5~cXhm*^GSlT#8 zYBd`6oQcf3e+2yD*vMXpZ?Xj}lWgVvh#fkJf2SsRv%H+;3uG1+fUXMcqOk2KUovj9 zHNXA(<)3@GZO@A`Nn~3hBbAq(#y*O1%476a#{_5eKGYa9O_6~BZ&8c_5#K_PMKv+}T^Q2QS10`ni zOhBRQ12}}lwy(qK)^jw@kmO(xvM~Z6v0RXCZng#pX4Ccra{z&kn#baXNWIm$@g%Kcv824ha44;PI#dV-d9F(*=^?576`v7w@ ziN*xKe|N{&g4`K`(O#a3K(HYC9@s8@UUK21avA%T2PsJ~j0 zjV2zMeEi}k0?c%B;?GGSY1J2yMQ@op0eEd`Gcbz=I0ImBXJ1;cY`#Br`^D$e`mx1v z&yf&89azi!9Zueux^pDb;?+S(@(LEOzbiaNlJHzvG!9YZbheV;t;m0>R<<<9R~AZ6uG8v&Ti99X9d_@*Q^` zrVE_QLSomiHjbZnn;eX`7z3Hyv7Y-r{}=;o5kS7zuU)qLKXq(-^8>r_rdyn0)b;JD z+4KPGkF{Y@*&GEV4jKl4gN1S4%-oqELpP1YzM1D{|6}%`Vdq!ZuV8KKx;IjvpV}_= z*y+Z{16hK6EjBwgKLTqwK`sDd+i4r?tKj4IHRdPevy1kI|K7)ktrqMTzbKf|vG=K= z{RB|&73{aZUe1h~{b7PK9YnKZcK?0%+1+>FZSQ{X`|K63e6@Y#BOkN-KmDNZMQ36L z!|Mz{)2-cj5`p7f0ehjZY?wMj<|k-O*M+(#M(1IKMk)AN}~p?L{wqp?%~dA99c( z^aq|Fpg>$?FMKTOD6YBN3)eYhw>_Ni+u`A%?H?UFkp8ni>xuToPx}&k^5=hn&1d{9 zib-_t!@NR%$wF9Lt9vmXz~5aLE9eY$mC5lEkKG6-5_+yMl9uyW>Tb(OQ*#D%Ir8sO zzZX9wt`D8&KrQ%p6Wkl0WBYh7f`o1==kma&7GT^sp2B4S1w&p79QHU0*hOGd_hyZ! z`*-uR6~^rxLvHa5H9yeB$Okd2*7w&L*og<@996mwmGfNt(jIkRD&+yPp3zv!-~3Xr zMZy@>7=&)1{BB`^2kUYGUeS?(pJAbm1H}B;TMP6FT#gQnTj=@J!L^I6!LGue#|qzj z&%O4t-+zhSd+)vWzylAsZiHWd{`?JPoi1O!?(2W$>M{L^_0o=xj(ki9M~AMVZn)tF zyY05y?1@i&qCNVtkF`7QxWfUy1o^Vt3%|;4Efbx zGy6S*_3dJTIhH*3IxC(xc7JF3SBHke{#@4yI;1>D#6x@vd>_fz0@jb+*4XhQ@LW+? z?PGHJh&YXZBE?3cxW@fk_jfU#78IN3y3ZMC{s^3``T9(7$l^Nsa*%x$w6TaJ7~s?T ziJ6sgr8ZYX5g=~Quc3H^x?=~Zw-&Xw@t#P3lr?C492A{(=YID=QU_1m2jEPwz`LJv zMsaeDzqR=g>Y284BK29@aYt*SE=sLVO`WLHSPqEVQA67U=dygj3uEj z@#_>sXc7lJ9QH~JhNEtTlt_>3ot2d0ce{2lnHg0=l&X+j*{Eeq3T*LXI-oPi%+L4; zhMy_I$?G-F{~5s8`fOs-YXKTrDC4I_zA4!iH>sE zC~fDW`D?TbQ6TZGLvNMIwAN8TQ1wR*`t?c09_XQUR3feHy@$~O3h<8UHGRHs{a5Z8 zZ9KC4^=<0&8t^kpZq~pU=S0b#n*8kdPrp9-`SR3f&rGt4;gkEkwshzZOpR|f!rIz@r!quV|0f>`i+)#ydyKc0z zGqr>fqYZynK%p{|l8GlD?yFqt9`RFIx2nflIhGx&2f%dxY5XeAW7e^~&ChzU|9c*n z^i{U;*{|T=v<^B%53gC}kDw0u&+`AqY*YC+F-mLwq=(u$toNvEorCx|cxHQ4eSz#B zxvUicP+sfuK+QQy0R^_Y&Hk12b!&h7xjwrPP66p*L80!se3a&$HVzp{W$VmX8DoakX=#? zTD7&Jf_?4zsg7}6=W`x&n{@5PJRY%+X>K!naI0Ul4j_Jn!Ir2Tm&QuzfZBrj3-`pj1*4J@H|2RE$-u`Dz%!m2fCoud=tXBvDXhFLgDPWtZ9J$y zul4J$f0YRGYn?I~S(t)D?l69SF5=JL<;`q~)}^|hGYqoLT`wCxKkf}hp^E>f#B*(D zD!{MH26>}Pf`Y-O6o>U+*RikB7CXSP#s46{#r+-cB&Gr;@~bLXLbWt?0#sxV z6w~LL;!h;K(Bia-l+$$r9>LFdIS}(mlK&d|iCCXvUOFdKS&SRS_;L&904sGsWxq}& zf?d^sl|+74`9GXVn3&1utbXs7yUUM}FVvGUl%ySFwQQ})F}MzO5K<}_2*6(jL`s({ z=FxV}(r5CSP4<^Rkwt}K#TdEkojAup?v|%ZTf>Jr4Hh-DaYo`CzQrCuOaWkp{~YIw z!sx4lBnNd83`&0>V)4)c;h#Z10D5J9gx#o}Q44G>E5@<$NDg>)=FnYR7v@KT2k=y2 z@Z1J_)oeNoW+dtb2TsHsa_Ulow>du%1nA&P02EJmY(ATL0!`0<>Yc8!2ZO~dfDDZF zldXL=0gEdxUcoiNnMN?5v&~hV0+ud-X2>X6Wf|Zf=&;EyKy^8f5IRor8UUzK_u%;> zf*m|zyaT4o6ZiG;JJ|EwPWxOVK?-)@h{U*#r5-K}*#1WKspuw98#s^*Gf#?g|7S8K z`!3tR0?ZRkm$qxyt}QsnXcOENj$l^M9+Tjo&4juipt8mK*mfQKw8!pu>CE2RSFwG@ z{tUe-=0UTCQw9KL{4!9S1O#Be2Q`I+6pb` zS72+LcR7oQO?!u}4Oxj!Nd&YGedso10+15q3$nj--()t!-a%3}F^vUam`ssm-IPwI zU5i+8bO8ZC(8=ge(LNbc4||LI2Qydz1pN6|0Hcwe(D%M4y`;aWTOc0}o^WPqSLQx0 z0lLTry|zo2F4^VFmkDs+#T@PVo?dR2_Rz&EcJ2Cg2W)P3PaOz{`$4AwAnpJ<%>%>{ zfcnzmpo?F-pOGCJjaQw#DBrl3?YOsF=i?g>+h9AIqvtnvN zTJ3;i$u~fD*y9e|b?_JNNq{x;3?!|=I>{zF9}V+!NOPAb)fFfc4Cu#_?0ZwSgqRp75x$dy9u_cF{-?0A(^w8&LoVnc-J1tX~c*! zo2GZE5GVyYSm#g=sIvf}g8tz5)%bGbOOM3-@O(Ufut3A-e@#&JpSeNnF1a~u!xArl>{>?n*$l^x%2T+bqBBu2X(5=h0`@3X4 zWh`0UX-ZZdeURzX?Goso!)}l{=pwa1_p|qEY0Jg2=f$DFPEM}dwQJYx;D$plX2$c4 z#RK}^DXYpyRj@aYWHqN6nN6}_`aEktu}H`FD8_Ocpi9>s&_%Gdr%uKOy#W1+H9B5g zce#emc5%HN;a zZ~ex9vhVx8@3rSV=Q;M6$34!O7u^=@kvSHiRrnNSWo^%{_!;wEK;WgNL=mF$_v+Kf zc_`u<^?aEMyj5^m{Lo<@W-I-%TDdO8r{47XKenI$x&O~DUbQr4E1^lCtnTug)s!lqiP%+BK^xuWp>>Iw|%OGURgLxTq2ANy7FjuB-e6J0uWa z#B(V-o|Sdog--J;M@%8&zdl}eticnx++bY0)tNUuWR5=!Z01NF)|dPYvVgNXjyF1{J0te7L)U9`9J;s|{Y?1(1nR^8 zsxdsuzYSvL9v6uYA$qSA2l1x9U%)btbrXn@9rkLMrShx=uQe&fgMNlnyeY-GJgT&& zeHSrT&1=xtsIkY^r{ODn2lvbC+qKUe^!)OvL!ss{jWBh{^f%b3-BrMG?t5 z3e$D{k_Yu?Q`fuzzT^BHv6iytu+Q*Sqq7HgC)bMe3cc_Ck^fFsd3Lvk;?A1d@(8P2~Lmnm}d0@v7@wyR~~v4|0raMYlEK3^PsvF_GCGeD2ejYvKi6mZE@~ zWUMTk17Gx;m(Ji4veZ{$mG&p^dgon?Xh>>AnP(BoTV%o_{M+Y$l=&J)y;n1e< zgWbBXuF)$a{o8+s2U-UDG6SlVYW}%T+Oz>OZOoeRcP7{_k<;G4-84FIs8zdw5_oM? zjn*ak#*#OAOxe+v5az@{{%j9$?dNvvP@V5be4(7t`aD&!4?%O>%q_zS6>vqg_X&*x zRP6$>Wgf5*Rh>C9_WaWI^7Cj8a$r_6H3rP;!Bt~MxX47O{PJhZGb!*q(#m>lUGjDE znCi2Ru_E#B`MSA^q@VMCkB@ynT*_3v#XpH@B^$;({%n+aJ>7Sl-LHRsKisC@dxo2S z{@Qz|c}a(~(gG+B47nnt-_t&Z2+C&=Cjmp)+n`?QR{75I_m zPy1qQFYs?207&Z_0P^uYBt{qjbAu@^zc<2;SgwjPT|{tZD=HMui( zDCnR4EPIikL7&Nq{(QZ&KxFP5bp;5yVy}L-GMs9xny4PYn8(Q^5i9rdGxqy&Z0&oS zan_oRuHT4G%X;{%c^m_k=hv8Dl&_O@0&PY;%)|_jR_fLJrv&7~RBP(J;r^|O2>Cr) zr(S<^|CD#*Z|z);=^O#RIBx0WA=twIKElYBpP|=t{hEzkGk-77&sm?(Hm;YuY}?1= z>@0t5>>gwCJGQ6U(sO+OrcXH-yVs9rF+*m?-?3+}_Zcso$^JqA?D_Aw8q<;Eerz6B zJAY@(Nc*{=zt{TDHGq4TPkxqe$>YlUyVvo(j^Sr^&IF5VT&<5kT!&tUTK}_-zg>@3 zuJZb4CfkRT)3bDIo~LY!vaFruhxhx{{~mf|+>WT@4d=u^amKpT04geR&zAM!oRq(dp&|J-V|!88*4a5TB=@!~&x>AT z{&)*Kk3iNLu0?@_MNeL=zOpUtB?ziWBGf zK;u*Tv7B~J?Rw9O+sO|GV@|9pvd~NrflVmD7*!T)F@L|8atjicW?NE12JNdV4r`@*6( z^?fAalMXF1p9(*Czj`hdyG#MC$LA~imMf)T){COvn4-MDvwk92bjZq-b${NEN? zm}3u)XHi!bfvclsa*^|BceowMe~mNA-nOz*bAX)rT)}LtxF`j~KfgcUv*|3rea=ofOFFLlNJ{)8$AUKYWXc3f zY$doT;9;~i1^Z;kH(5>zexxnIJ*lg5QM`|5f4?w>?(7^?*^7cWYg%$DzRW4`*2Z!F z65ku}jm23K@jxdTsk$5Y#><~0lGC_0<{t?>>fTnLWY$t2!`{Sp4uWI`dkKkMBnoFc zHd_M}Bev!cM}SV8g?H_HS**DLppxOKKNshiXgc2nD26RhCpk(0?j!6~zOtOHpPkG6-t_Z=+R zo|okMfEjl>+1e`DWnFd(<6r3MQ?B)H z!<1due-l1h$-7J?TXTLs<`^~>tfkmY6K6QylF@hFcEQRlywX?LQ_d6#a6pI<0lmRI z%TC)d&I(rbdjZ@w1v4(@8tb{W3l}aB02&=g#3bu`Pd@J%zO2Bf`9(QXn`srB?AZQ% zpZXvQOI+uJbrtN0agJ9D>fSGtA1hsbFyAk66o7J$&YvrCcY4bAG#_Azt)wdxTOW{t zEZ>6#!o#>%Aq@zo`~tkdbA_&TJ%K_5j5`>u&~|pUCOa+lP%z|%e#7~>-zQpk=w6MB zEU?TrIjdaias#G76~syp6jt-t&nouhvULPdBSZ=W*b#b{3AHdBXMt7AX~-3Fve6nE z@2OzJ0jJrQgUq`*bCgN}0IT4h^%BevYfS}A7b~v=JeN!R^;VX^>n!iz|QsM!j4x^g}8x|zcuiM)D-uGU6 z-v9B>?GIl0D!XzmnDDn~$vm~a2@6VGHr*#=*Gw?}Zr7(absvQK=+2LP)PCxxe%gNF z7k$|?&e(-PokbTx?KGCk99CI)F*$^P*6EEV~-IZOS9d>)r`Sg9qu>9&fYUP6R zd=1xkV#({yk!<=4pcQQM3@}DpFP2{D01)B9{LnvpZFTIx$7!%o(x2u%m$qU78qP7N zD1e`O@zBQYz4jtO=l9)rpZ)p^e%;>iN3XU2;qU&Keb4v)RXcyfjkfDRqa6pE8`${w z&^o^23Ix9LSighVqQGM$Zq>#q+Ac$t{7PqRK8wy`rEn5J*+de2^sgFI??AL;a!~ws$xEN- zith>U(!C1NO2k6gSqdE_l5Ok=SNiyo&b9>1haFOZug+Hmf2I8(ABZgI_)eqeb2o^% zw--C;+*f2DZRX(x#rT5YMjdfs&)~<%Cqs7y0NqX&C-$*B@3vzw)NZ`=#kP(xM;8qM zALkw?#XQe_KSVKboM%xqBb&e4n>u?uipMTpx?&eEvasm2uYH}p?lrHm|M4IGL;H%a z{%YHuP287lI?r@*M-_BH2ZEVZF%igY--Yn39Nk&IZvTG%Oe;&nnAccmlKwmVPzkJ+ z7xz#lB%=Q*nW}caAGiKxOog9Afz%32Lpmq3*lH)iZ}d(o5sS?8S>is4fJ@_7ydke|(-}Au&UDx5U(%6f z9pic^rt>-QcnynM-R{Q6=v!BRr*_6t*Xkkur_OhcHR(*Bi>jI!NZ>5hrI2xl7H6UB zIcORneier#e_Z4c?x&&}(y!MDJ!2`Zb^^Q${hF~zF^e1MkT`SKnAom=-epm?B)Zga zZY!g=&f|(Z3D>1@GlmfJkj_pj;C1^LKB^a>@7C@i90&bG*A*z_Td(Q2`Sa7y-`}5? zE(fdA6SwzsbZLl!6!_iJ{eC|1f@gw(d7cjzcg04i%oVsol~fJ<*PvTvDN7Pa0X$_J zkv^xO>#7Bqgq#V5HmRHs);VyN51{?4PmpROWW^@o&BEyq-6bdTMssj*2tXC)D&Ssa z9tVXi%oKzSUW@})9K6LKp=zkCsPkr%K=qqlO0_aH)%nVYsmg3OO!Vh@$*<-aO5!xL zZPvg5t2?FK5ZJ8=TECxHlu`m3B_f761qDME(AuJ3i-!XdR~DewP?dn}I_SSO$J*#! z5>>ApsL$7_hx*E_mO&VGeTPY!QD--P7r<1Eyko{O|6Y}`4(vm@;m<8_x8D=>FxM*X z`u9k51oM()zMjoOKXh!n)#->}gZ762aPAn@R*ik|VW-mtUc_J6qguJ>lW%!`dO7eN zSlC`Df8J)KYw6jqo&GjF)b-$jI&Wt=(fwNF1d^VgK>wlR*vn}KD(2_c0ZD--RI&CT z0_rec%N^cM*86exNkzT*ok)-*M#H?0`aLJy#`bp~NUkpe2J5)mgnKVL{TjCSsHe6u zoj2w{=a#;Ce+fXLG3IMFa+eQ^N?4|GsU?$x!2R>>eCM$VKr+VkR%NCgYhC*e)Br~# zoM8_zjUksX1mET}z z7+tq$y|fwXygYwnpt-T<9|PL-y6NH8DUZE>W&6-yyVqF*#>WvK#K+Pw)Ya?Lr>Tb_ z9Ftm~ye25*gEDZz!**uf>uoka&jWq7HSIph@|_QeY{gv0>i)%$O`SlJ>K}MeU+g<+ zswB@kQ1ZIN*6F$B6vx&2S|za1`PG#@xG$npGE)Ew>9?9F&K0Yf(bzv1f#ecg3Y*|0 z9Nk{`>m+c{_&(LM-PGLF%P*ID*mtcp=7V6OE`D3FPi_#z}_dE z__@8oxu@!pV$28rU-=zH1mq5j!3H=;{=0*)YQSE8OJ>*=z(Yyac6^%49`H^dsrTiw zUzXRmu$ZI(UvCdMx7;V*#<^)Nrq5LH6ZK-?q;16X1}EbsY|5dv(9uSJ+hl(uwwctY0!{&vdb!|?{Q4mA-qo6ryVdp`>OuC zZ_{mJE2>6P^VueRYC_j{eJY@le@(FAxeXP@X%_741N|e*91S ztN>~>dQYMSa9fO^gQErk;ob!=;#LLR=>lBioP`iMwSe{S=lv!SOtCj2*5-Ty^q@5r z=qV@Z`i@WiK6ZJ8mUA}5_-;z9Ne_$B#&@UxoZHP-Uzsc^+~2$g)<@&1EqoOt?e#|1 z^Yy(7nC3i%eakv#d+Nz*MKj^kOa)YkId)>PkVT${M3TT~b-+B@na8&Xl&630d41=j zqO9R>6Hmlec?F=xb( zgN*}ToF}O0HQJb98j5z0Bu1&qzyS)e=Q(}amjqOYK>9UUgwPi>lZQ>6_7=U07*{R zX~E~wpIxLl{MVE5zPCdjxC%Dgi_SMLlTnnBd>#NVq{{)k73e}azapO_o%)I`*6$-R zvMm3Uf$n$g^%$Tya*_ym21t zbGd8<&@{ht&aA{#Qq7)&YeZ`vG7S(#v3p(vLon+)K+u$50-u?Kr*GwY34eB(7%lnmm7Rhs5Ec?rqh#=(@gAJR{x3&FXUjGJ>S$VUhW>+3E*+vkx5 z7AnqxTw`6lYl4%jp-@GgG)Qja4EiBIWP}w7Q^cQZ5LibFj`}QSI z`wF||cV2A|eEgFA@moJ^?|T2gw=a6t8|^Rrh0nFG{pv5ZN8EO^-TsK1Jsz^boNl(Z z+$_q&(#^9lW}S8`G^$wxP1?$yqy12{Nspi2a72fN>6cJ6i~n? zn@((ZHn$Ui5Fy{Qxt(ri{`dL80om`oY6jr#c5RA9(7C8NZ?y5p92apf#5*cwkX`Lc zQpWFR#XUPXI!7k?INxFqP7eY6W?N~j58BB8#83RM_R5$2fy?n4OwW6}cCf$iY`y@Y z!au>|Lgzu6ZXYl{Ka-~ zaA4~dKa2e(K(fXjtqmIxCikEAPs~Tcnb3c%uiggf-=^3y7Q@#b_S)r`;B6Gw05}Bw z1Q0xc!T=fi@B0T1Dg(G0t;OBPm`t3_-I<*oB((Is>r9p2$$^Z~)G=U6$Cxo!6T5Wr zvOWL#&$pMo>}B>X-}-I#UEllH?1r0e_A#zjYnwoBntT+2?#i`z#Gu>%IcB5p`S}lw z{jm=Lob|tlouuzf|4!#4#@SS09%mMx^Nnp>FTg)s*`(sRp`bp~uy8y-OOAa??)`eU>)>0hzk48v zj|k+L#>Ho?9f({#dw~G~#5nb_vmf*&i(cTw=&bL3HfCh~*VuBrIL{}BjqBvNCc72Y z{l-_|!T<#KLYkb@U9q4Rep*l95VivLj-LM3CR6Ca@OixhZv}L!K$+y`J@VD!_(s3r@ma;+a z&kK*q+0&U9&JIIPJB}mt@1ux5I-BP>5aJ*BjLVG|rl8O$@H%CGAl``>MSzFBE7HtP zQA`IJ#2EI#vdlg0=RurR;;aCGF?8H%j0JL!!Z7%l6P(FB`N}nbK0ucg*9tz!-lz@O zUWM2e&2fbE#Ng1iG%rcx4vC*z-)4uX-+cXs)JuunyovM~Rh;De_QAOdEUC}R#BHS} z&cfXX*e6BlVzov(-#@R>n5^Zh0xD$g`3#^Pa~Sob zzF!?r?#Dcyey)1vv$0^EUitaQ9H4yo^ePb6Qj{cx8~_25#^gimpPx6cV=r&{v;Fw= zy?k&ex*@Vs5Sb>WU;8!Z^2h31ao>-;b%D3i%2d0{E)-`*;(3sQN1~;kevQyd1 zZu@Glo9DS2)VdDC^&JNa_w$hL%2`0lEa%nnuTD({T#U`X9Iz~(`R8(zpgmHI&^f9~HPU zWc=$v6Fx7A&9@!LIAdlHY$-`~-9G`Od)=(o=Ki-70LDOoM z8hH$7`9b~r8ea~eXe@agXU%`!1O2n9uqNBN{+atR$?s|PLwnFG2}0?w1nBGSQxC4o z`(MQ`V{@9n*B2$}eeIokaP2B18xU~|RPAk3Z~yww_e^eC{(E_;EjP#4PX3$ra&P~o zYvhmSG4|ujuPVm`#|hY;llVC>Ic6Vve_~9(_Iq5fD(8}&NLrQoulEu|L>^18e>lD| zX1bw{sn4Z~@jUMuPy2n%OK;2azq)51;Ar)u)^F%X@oW|Uipfd<5(k&pbu0x^-Q16z zFY>q_&VSx&n#b6->LXX1$Ift_}^Ol+|RRu z8ohq0x?@~!dRsW0BgtPY|2^aASw2-|&S|D=Fwa#Mhe67$*Gt?xg0r=Nu4T>2EERdp zq$hiSDEp>){df=6Sx> ztI9_Jpi{9|eQw$Ns`nW*1@oX}W0)}1=k;t^?$6Svy+7URE=oYt0Q>F=6T_e1aM-KSAJ*p z(;a$I0Cr4mjQa_hAr_zX;%847B^xUS%hZYx=)sebby7 zoLzRLh#+-(%j+^0!{X;Ou|Nssc%{zV@g2qEanB$T$a{*nisTEDu?akxeUaY(>}^ke zPCia$Q}MHk<~c13)(xP`9Df<})iRR}$I%wM^*X3uKgmhqwz_%Lz?*I#sZqeiiw6O?iO@tVe2yOICIRIU3k2|lhTz_?1;7&7tKz0tBu zxBDRCA^~iN^pe3c0U1I^NnUcip%h~T%We5eoEM>&nM>p|fc@6@#+u2|viFMbR-Yr= zO9EgkSk?1qjbBUPNVZ454w}2|#?~veHQyssuyk6mToEh>zm0OaSOx>7e1`y=W6wd4 zJ$Uh=Gt+?u)D!1mblRRelM`4Q!JvrQ1`89m9Ki5gU$u&b&H&JLMqon3r<^gkV;pbn zTz}5?mdU~3ms!dK_~;<9R3M0Zi?PvxZ0mJlr1qBD@>d+s9w4b;slpx$IC(_k_Bv{;y)A$a#hi zS0Pmt8Ta-^x|moto`vK~w{ZsPED=~_9naiQ;2z@dEGmY4*1e;SGVskpA9#@v^(l1% zKo>ea!84Q%ok_NvxJ=U%R5&9`VD)z>gCUDh`M#1f%OB#~nOR&(hN3PtyXy{&Cl zYdc-7oQZqAUQxf;)_(CJMD*l;0NtHzT-RWxzGJkd(2}V<2Doks3D_iC63De zpY~JHK_y07yJ1vwadynD^#K%zpkL*r9hfTz{(~`Z@n;slG(Ak;%vj5$kP5N_fe&*~qR~E-%ES8^T4MaJ|sEiR{PJrD@K^%4FUKCW} z`oH`Ozij{NUp}9mCAPbE_4#W?s==mUlD*L#rWKl2rHq1-(&&h5xd@sHk zYupwJW&7-17GO`JGpuYIKhPFA>pSkZu%%95n!toi-wSf!I&F8y7AIi$u8jV8UyS+i zA)piR!g^!<;e+k%&ixu2=oQ3)rU3Enx!;1l1^)xXpX>qPhJC!%#BhIq8IkuqMve!o2{3K= zWbQlC*UI^{{_Nw|c3&wve5708`y>u(^Un2p@Y&M&4$3bGE%Rp;YtX(dc)$ek)wB5D zMSK&*l+_=r`ZKS^*t*v96@4)7=UOzz@3bT!H70VFF6!dRr`3ljWF^sQ!`DyozfyoM z%t=e!QO-PtKqX?FaTu%P+YZJ9z_fhfx?dv~?0G8M<{D$-Se?9}5VX~B83QnXQ&Q%iwgP^MjrlMLUc2 z!j6xR-T%@2L8fufC^=z;a2q&INNTUx3=pXTbg>DysDbFfg*u?*Xp62}1u~H5k@zD+ zR6cyO70jO(1QY|FT5^<>L@Y!GFZ4paZ7O|+71T-75C_QkY&@^W+{B9HOy@An6)2%==j41)MDRINqO&z9 ztue|#m~6oGem0_6{%S(2K1XA8!s(EMBjALB!g=i3VJ^>7WMA@E=T(R2-bUxWTMyYu zQp%y*KRsZ8(jkqH73>OUFo{;VNzWgZ<5X(FE}iD1to0d=##siuxnJkZ^xrRza50Rr zp7Eb5{<2fr8@_y4Q9=0KTBR)yh=MERSb8*cpjeHSKT)ic#zpz za@A}ND5kllr}bZOsOaUxuQZUU{P|YD3=Mxy5c-vyYw5X_NUn^uv=c)IaEu|g-#>Kd zhRN~%y~?7a@#Q4h$b8@+i~~>TC~7P*C-B9@1Ct|aZ8V%|Ix>8m$~Mh*W3|-`^+RnB zsP9$gxvmg|zchF9C+i)Y?qgY|l{DaIYM@AC$)6WP`4~_+J0`t8E$fDP^;V$$uvOtH z8LIl)9cu4B70I^P_p~2%-q@0fG6KKDWgs!4W_c}6T=r>3!1}%Jk$hzt>+MNS8jk6= zK4?Y$ofmwZTm$3aOEAniag{Cp(YMnH07&rexsSy8<@Ig-LEeBi%IlC;2s zJWpEptRDt?HY)pTEi&0kH};PHBXwQAXX|_PvRB97gG=%==Ifyim$P`) zxCkpqx3z+q9Vsy!S__(L6_5IPpr{0F@>>}CCXO}8NWAe{`m6(zLSF4u$LZrm)y%kd!X|of0s-Xd{E{S z<4?e2=Q3(QT}s?Z=SgnH$I|~EaNBm)FRL0e>me{{LZivBTvk@Zu4aeygfYTLxd0fU7%Ean3BX8 zlaJTHw36f4A*ZEVL7iVu(7If;=R9@ZDl*<;vdepQ-Xd=8@&2{TL1wHKa~GeNK*n-b zgxUaFA;)N34#_yXzR*TflF3h0&chosVU zueO1w?btfw$}WIK!35;@h7HEK9Du%HlJpJ%o;+hQ0Ioa5cN_%An3i5((n4Yh?^mD| z^%}0^i7m`|fZ2A-xG{4~iun;$?9C3Cjkd2GpeI$Of1H_Dj7EiB5_=24F3c_NOHg8F zx^X!|8{CtHC;ZWBwts2nnHxztBlqJKKV-|v0+v-?1!In6Ea#k(Ahs>n1Hr70zm;wQ z0P(Hx{U}QHxep!aoe;v=az^d|&;#I*z<#cI@Uyd0OHz^$Yd$Ue3bM0MMwxqw5%SjGqId?Wt{|(8?8zua#oGrSqsW_og$w=TU-a zBMM;nO!QBVmkZyA4?OgsUA%IM@l8BN09}uduX%DAjG&V_^GN`FVV=RbsMg~S$PtM` z-Z$JNiI_X)rpxiNlTY?7xh4Wo!5{J5kXprd{tfcLOoCJ95%=v15CsO$Eu7i0C%1S;tbzG4XHE}!fi6+}4Gfmdp9(nE z#-=bP_y1yw^c>DYJ(E8|A4grow0kI5>}KGs!IL3Dl*o;g!!OStzNT_S@U6bcF$&geZ_k-h;YZC64>%W)?Nb6b80Tamh6-GyW7|$QlpINrHd;}= zBXJ|ea9kfo0kK;etTUe30dJ=ce!q6@s{Ph){DwXMC!cTkeDXeDm-+m_!M1zTJv&(} z9E9rjB$%vAoN2qY@kP*DF`ylHqLc*S# z+GZ7bFK6i9+UXwF4-B>&yZsTj*kd01DBIbc+C!JF*mS;c7cXD8y~)%L4)*PIb?o-z z>ecJ^>5C89gd0 zbm9WLDfS$In3pbHvvgATq zB$P%IZ&7TYKj&C%j>pw&MKGx^+;6Sj89pYCHA`M8s z?-T}xY>@u(9<(#?C1_B!A5v~n5vqufc*G~-xaHjB%NI6N@vP8+C2AGmG}kbSIRt1C zzaw4)TMxT6-Q|ASahgoC8!lY1bB9MR(|D25cI&$Qk&k+evquAv2DV6y``o#64zj&` z`LbPl=s}lfjP>&6t2S9J?d1Bx^(TCK>_c2{e}85t>#bcqIkw+_#cSM;`X~R#Ke5{% z`6%C`&}obl3~g5*i)v)+zwk8{E0UmzQC#z;_)#;4`h~$8V?`Gf_g3!PSIzry5ApM@ z%w|74+m+-yE4CQ9U-?F;@KJoiZB&SE$wMT96d#StMx5ilWkKDOIfjipmO>ur;n+ik za4|X|h+&^sN5L8sL5#uBR?wD?gV)*lk^Y|-ZS7)BI3L86b@8z<|gX9lV8sZDnBg!Q;C1#x|px%0#Zo?6~~Qr^oOmi-8GMr^_Il4&)X@U67v)} zdIE%_Ksd$wtH0Lm6*WrpMZN9}J%eueR}_^xk{n2*v;D332>GZB?AenlVL=O0Y; zSVLhoPXV+IpQN16sH0JUC7h`HDq+|B%p6@bkT)aS`_$!QI-UD7K{mkj4Vm;#3Nc<3 zlGqaWBXc|6gRkI>AfIzhn+sip36AG1V~(OB_Tjc2V!cCVFYiyik%2! z1VmgdG>kBnC8fVk*`#Lx>vEvEHI&1IDL)gfTRWyhZM?DXje!WVu=W8my%_Xw1v($D zdgmeEYk2KpqAEYT0;c7?)B>>|yAF))J#rGZCYz_Y9Pxvz@DghY6W}4Hb0tad%+Ue%<(*CIIor*$10Pkzp^eR|es^Z0q6zD2RduXWGgmqC;jXK7lY#1G z&qNzVe!ntSasFc*1+d6~9xB!p*rY5E@81KQ>hrgAIldQ$x-Z+0yhrF?3bVXegK z9g94VW69or&5I%aFKB0)?>i=co}kZqHNYq^wEDh(J^(W1dR;+I zua7^YQmP5?Bc0sutNyy}^AGh5KVO4=J&^6Jb?tR&Gv?BoFtMDCuvqnbp3j=>e*_y8 z>Fi~)FvyQEl=gDa+l;L9$JZjuPb;had}p5_ue-*Y-){j<)jqdl?-`}kBE7X!dC#8( z2+s4K=cxCy>RRyqCV`!F5$$pHBlvzD`#1oreSct!WB;Lb5}6sQoh>qs`**BPWAc-) zpT|F@x9VKBjDo#fWFTQ)(=qwz?Ro!mzYb$^)~{*)OqG$m7i!^_l5-qi3ydDSUK9Aw zwkr9YlB1FgPS@eVI}Spr^%VWLodK9niS2&RC}}F4qvzuBlK$jb>zBvN=T+fc>&r== z`n}Q|#=AA)znY`m7LJGTejm9mDi9dGKlE$HY-W95^P=%f7Ke5&`>*-?`5u{dx1X~y z|7%QFHhQG9=!`853DlDh96h znJVCNY@dwj{4B?MHjQhzUx)Uf-yg+4a@p#1xXx!u{>Juwwu5@#{m2OHkL~|_|Fi7Y znC~&B>v|oVby41*T#MS~ssB#yZlIV#VTA0?-x{AMWDCHw0@&MU9G*3`fB19DBq909 zYuxO?346tHR8|J zG1l{KGmh@OoSBO8l1@F#1`pR_*sUh7@tD5oecxW6Hon_n{fC9!N}OvwcwUd^)P4;; z(cdfkkN!&Mntl&eTT&B(^b3+4vgUxyjIj=4>hi4&Rr~`d7!agls+uN|d zt4p(n0k-w~BDk$~>u$%wE)`($u+vRmeIzf9gsQkl-jh;W+2%L) zKNZYS2J3U_{koUNV*Iju(WNEZpa2IV8AIkL76_;lTWQ1F#q#of#^z6YLi(v?uB-Yn z%eSsWPzn>ARhIa7`ZvQEX91i#4W&b@gH5M0oyqq4(q*Lpwb-w=tD$5G zfOP+khY+?&Zo2qpfV%YZJw4g8-P3UrkDj4Vt%~dT%-b#l(1v#K=Wo1V2S@w1KDlDc z)xv=(ZWn^3mq2NNVm1!I-7&Iv4)m(a8RSIZGv)SB&@RwGn+uQ(NM;J?HuRh3D|a;N z&ojQy1C-78)#_U) zw?DC`Jmtyu6<_*PyY@$Kx9g{KJ9pv8pXuc46?^d7WxMv_d+nZkf5ZOpkKbb7`#pcz zp8f1++5uz+Hga!kJ7Cqtd`~A1;5b>X2n2Mt=xKoDIln9%tZbgUJJZ-hHBRNaeRFE- z9oVg1o1t)EwIm>Sv9bBVfgSE2*yYQYP`_i#HG$UnKAuZzlr+H+FLE`r!QR z?U#L{?>W0LWDssWh(zWuBH8$oL%5YqdIZ>&r4yRPLw2l$r0pY{dq6M(f|4-&;bJVy@Wm-J() zBmDeW@~$0@Mz#g1noL?1Ive&j=OLljoXI|rkOcBVC+yjyAN5H4v48Mfd*TzH=nUd_ z+;NAkmjKi5+wR`nzjx*GgLdxd$XO*HeDFbg^Pjxce(~S`f_?gv_t}j%UhtW~e!;$* zqTRcnJva8dzxNV*`jMA-A^##-q7t@jsfSio^#Ins}=g9tZeSET) zA9l9oS)=!Z&p>Uw)U0jz<&~1dcLys5WcQAH2 zIV2g}^StNSp?A?J@xt)w8c;0eAPTz*@k_))e35}|W1&@HI}N|g-4_2Y##VD#er{4n zr-c9FwRz@+|Iy26Av1%`Nu9O)bCK66A zFt!ndmN;jG52ii7hhk0aiPN?3N7wQz%86eib>=)dIkEj|6i2UCw%VL}=L5>!iT~?* zF_@IKUnZ+l1iUawQDp?j-5GDAs(-IFMqXj>@!JSIhQX7OAa(Ch0Dw|Q8>Ee#?HKr^ zw3NvQxgpzaHJmMFeqkC+i9>yU%!sy!TPmb1pk;Hw*$ClJ>SGij?%;{5Z?!A+lgxWt%W zHy9fVz_e5<1?VBFx}``nBWCXaaYNL=y+E1_d_eGda15@+w013^qft09O@*O0TA%St z+`(Gw3_8xwI_3oCzxPSwCh${Mv#m(X&SmeU<@@L7Y6H4;jeFLQMlMGHr;QwTtyVL$ zr~-B6;O8LyeE*ajmN5{;KW|j-w--vb5(T&N+si`#Z|^MSzm2Vle$IjH{C*Dz>92j3 zqs?DikV-xn*YC7UTlv-BvmZ0BnfF^xm?v3GjGi8ME|qt6e+hf&{H@5Hd?_6u$yC&Vo03~B%(DTPt zW4x0yWJ&>jR=MOBtYutDw<+OVbREL7@!7_1sRfi*hbIOkJx4RT`ut)@^5dJ!jILeV z#7bVXUCZm1^+TTHc3r7cxMq641;{nyYFawB>ma-0&o|PB&%c+Fp3+kuR1*WS0~R>1 z1V@J56KFwI(`b5;3UJD(eIAiXT~ohjSs2u4~k1Y5mSI`;%XKKLmlZ2?uje?CNJkO}7s$(0I5lpU+d-#Yi1nNrD5F^H~9p$LN@ zx!qx_w};?=Pv(YR%?WAX}sQ(_Oaf-ZJpV_^n4YN(lSA6-%5uL*wi~+Q0KMP@kRfrJ#La; zf*0#v=UV5s*IBPrW+nODJ*cYJ3uAUDkEvfjJ_BW-FXHT5k+w1s*GS{)3tbrW%r-%K zW(aQXbxs9jP}hlhv)Z=+kTiv$-GT>jqWoENQ{=J*%=Y`XKc7^l+twB(32VMznUS?- zl$qYo=zVM5n>MNiTsAg5Jy&bL)iSB1sM7bvwnl#^C)u-XWSOe$09j^R`RZki->-YF z*A;!RS3w)<-=Uoy%I(=_O3Zssh?lYEIS+e~lh>6oIqYc$R&~JZRxVoKJfE-ge(Ckc z*w15oA=|Y6b3Nm3??Yz)LVyw3F~yg}Br)k)#riqR=S03(4bnH)P5XnNtF4hA?)*<^ zL9$cWUlDATT#M<;pS3U`)xd0?gSrl4cPo!m#vjrbvAuFoFaAS2&boi(Z~8Mw09oLY zvd&`aEA3r1+zPnhb(A2D?-%CwT6ELPR6l=Q^U7Ez`@+2{KX}NLn)hmcK+5L4Sq<=&dn2#Jvb0 z;MtOi{0hW(wm?sU;4?LuTUm!=WZ5R84X~oT&X_438!}bQaSIaiqHQk%v4O%b{)&UU{ z;e5D{?{R;1G>U?ZC;(_#cw%K!`}e9J#TrJSDfhqfJoQ}UHqU`Mq5D&3!3^|@bXoyC zmDmB!ejdwWhbhf>^#i3(cxH8TiL{=#7H{oP0nc` zJ$fqAEv#RCeli(myH(!vea3x}zeoKaE#@WvDzu1aP=cBIq9$Ga`kGhyqD5Y$r@D9m z?ED!vDrTqd+mI`r^VP1_e|NwQ*F~V^`Fv_$`ejeEXFTJp?9bly4x3HEuDZ1wZ@kfN zyX}$o^rwAs0mA|GQhZLG;e4#Lr8_16$9-A-cCqWLBPC7mo%IyirL zl^1W(tYm%Icy-(o+nM4x@(Z)y-K=@nooCSTOJj*Sc8HbRdUZz)ed}|c$d)3X&vQuV z^8oNjrdu5uL`MRjw!oefX3QX`e!0Nt#19&5# zyPvD#yo)^vk7u<8$P1vDQ@iPg^Y-OWd#b(Zt?#xgmzK73dT5jR+?Kn?w%h?@*{)qY z+1eZ4{!#nL-9Kl)|EfQ<@Bgp9%f9#vKhKU1sDpuX1`rSq8&>-I@xqp~J)7;E+R@QL z?73=ZHJ>7IC^?u@<`3{}WV7D2>({T_@zrZSBMxR-t!)ipqKYLp8wYBDWp=$YahwF( zUFU*~E{`C69CD$x;uaVd)Jneab7d54JG^*zv+b$R1ID>OpV^fwSNt<~-g&3}n}74O zcF#TcIe;5L&*Syl4)zI}1Za0Q1LzJwF782mZ+>oWH{Ns;S>tSLmmhl2POe|I6_`&k zcGph?*xLV zpJOrpck`O(4eNL?-)H_PZCLI|u>14(n-AN?=?i`{qcCv0`H zwE6zj8I)}UKgjG4|M2zp!WX{CzUO$?#MJn?(M31F)doO43JG@Y>eZ`uvbat*z|G1I_xBx8IiHfP z@$g`7`?I;X`sUiiIWG#jB%{7(!Y}eB&|9%o3n0m&CCJ!xqPT_jYxV2%o)B{~UXWj= zFDJGQKNUc%7GS9usIV#2p#Tnh=M3SN)+^hG{3O;(XsKRyKV~srkS@+xn zWY9uSs@piEl6sWPvy5}>#Wldd4H=Pd;d!^^s_A?{e=PKVoWIK19-Yj+@Ds5HZ(+iH z7PhCvT;1rCu@prr4seXZ6bGIGtiM>eZt<=eV1`5i-X8pr^Y(>L`Fy)@!woi_9@vdH z+!P%gr|$1zPv8ECo7t6NyKA5M*-x;if7zGX=Y8&H*?<1^7uY=?zso*)=Uq0N?AoV_)Dg#o(*Y z`}q;y*-o6jSJzZ*!2K|JtBt-L!8yR5cv!XCVBOE-F&h>S$VWr53Pc1QD7cnn(o_Kj z#-kicK6_HeYMgojMs|-^vqM<1aZXCV@z@a0#Q2wBYCIR_h2w_JW(O27j?(s{KyF$J zf$^F}2Nu8o=4@go&-G={eZ*R523e?y`^fe>PE!SJRO`Vj4)7xy<4$}3zpDMS>JXp@dyuIu9J&P48Hv0;m_KM?9xZ5eH*JR68cP);@r+rydf+7jC4K=0Q{&y*o-I8q z&uwjx*$+gCK@^UDVU~@6V@}NELv4S+&&eo`w+&F`z-FG?e*Wm#C&sc)A(VioDygCp zM$6eJ)XQ}flSN*KJRZ$YPI&1WXH@|d`Eq*cm=kaFROMQVwFhly*56^EYuIMF2LkkC z&w=KCt@Gde&*e4Lzrz4;JHCOzPuCvXfBD(l@%QX183Yncw}~aCf9`xA25RHI_-GC| zKiv28Tx2;f<47_-mUztphq1ZJ!OXMPCxeZ$F>b$GlLP&D`{(G_Ncyc`TN%nRy_)Ar zGMp0=K9-p5{Cs2cr_Zzi%_<-5+*H75zkYeI_VV3>3xw?$*YA=3 z`Fq{p&vUPj$Mi^+_p`2%^>)72;OA6jk5{f_&etLc70#!0b^Ux_bizcO?lnHHJdfH7 zJs5Lrjq)6{>sJ5P>jVBxj0d%4Wc&HdUe~whX#pvjEkhOWmHl97SF+F3UZ?)tKXcEz z%Qa}%s?lAN@xjJ&RPq;w|-cVkG`J)fMYhY*MIpLt6XJ3XUlj#_L=8q>@gZc)&-j1eqV_Bpl_+J^M{_hx1U*m*ZIx<7!FgdOyzrP9{au1?>RkB ze-?Xhe0Yu?|tBv=zeU++J(I<)oGs{S1J z@3j6^eunM@PAGI=E&j>vryPeEF!#~_O`A)u7C5owPS4y3G#mE{dxps#ZJ}BL7h8+j9MQh zKf{=8=JnS#1wfTu8S`uUI8C14vGwfjOTOmV{>(Dc@9(kwtABf0%<`MZnB~XkAu*)a z_UD;Zx0QbfJqDw}*gWRz_j@Am4c)JQ{tWW+?<9YBD2wCgW_>otM24}6;rUYXU3pcg zhg%!l`=Pa)3-$NNdv;6@=I{3N zry_189o35#kt)z-p}95@-Eg=vu4eM;gM%}*+ zu&&0Ei@fVPRUfp(?NV2OQGX^80wB?>YpeCPp2drlQpXh)G?fI2x4BK{4N~hhdaOM+ z1b{Ndx{>(u9xpjQQ;K%+{GA`^MRXkf*m*;*zN>@AllMxNKcDjy2ORqOU1zfdm~?o) z$Arh@%e_s}i{l6(>>t&f8)j9bSJJ8yL>PNK9OSF^{(gb8moE7$cG|Nc~EA44|51(#<_sek=KhK;&6A z@_EB`2-eqGaZ@3V_NbtzP2r@@csW)WVAPOR0bp4Ks%IQ0l;HgWFj*L##tL(5V$qXs z%~nvHg2toI<7nGN1Tfy=`PoTGoJptph56q7+LDn>t%WOS#(xi>d;Wf&yZ#(8=KuER zWWSaQ#PnVRvMx_P1b#I$R1^4T$?2HiKK6d~gH-I*zREfk@NN6jI@DsZG|sed>%8vca)rf4%60^wo#c?_vSWaaroBmL$jZE$)>VE3;4AUpLE8UYB~0n!Bcq zXwMD(S=#p@XnHU|o&6k}zp@V!%W}S#ey;Bi=Y2p{l)5L>7)THVL_wX~Ot-@<{;@UNKX=Y9T)4qD%cU>qLl1n~?tS3I?tS?m+n>GfgZ4FF z@l^ZX?|zOw@v|RqvvUAh29Rnpv!kQ%8`e1g!&N&az_QELkx`rgHfOcl1moX!?R$O^ z1wR16VZ595u1&UEI{}gD>DB=!JDZ6=g9BCpMnxeQaUFwoZ*;xk;gLWY9i3~M}{ zks<#LfA|Lb#b5kI`?0_OW0bEI0cN&$U^|-~UzarisR0ODogDl1!2a!E-~jpqAgqFb ze!q{sT3@t&R_A}|A7`qbO&!>D@!~~0S*`8(cxeX*VEa3D(9!)5JZLtV+PMqoUB?1< zu)jZd;yDyZU=A>+z>NS*G@s9Gcd=tTlc{~>*M6lv_wW8)d;Y)p7xut?Yny@Lb7vX* zY+{R(rTzX(UTWX{-QR5oht%bT$v%j1bk5dZW>Hu!1}0$A?NAhWw2s!pJ#$}0@qKE{3Z67z&`(lf4^lkWz*n7u|6JNLa!IA%KCnqjr z0Agob*2hjTXX`b9ms1BO0vt)bRdcbGO|vqV>RR-V!QcuOP3~&}IaR2;UY@v)ke{tW zeC!8YbFl(J$;>7xx4(v7+o0X~Zp|l)bPo4-fLi#b0cNCIYB& zVyopzbl(V{3WY!`vdm8QX0~^HQ{y1oCs@3ZIq}_xRQ+wOn-sT{F z*bU5W)_s-mMY^HQg9BgXY`k8?)xLZh0M086`+RZljKzr`{?+Rwf%atRrvR`p3jTX7< z@>wO1qd!Mv9MvRP@$0-`z9}atHc+k*z*gvk)0j6FgAQ{~^0V`N4`ZQq4zsQ0nBW&w zJfG%8d)&wDEdTtUpAGiHj))W#1@9`p1}i#b$m4j}Yb-+7xP+Hu%uHu+7Dgx@tmnn= zvg57;Q(SqyIt`Gp&gbYRfOAWYm1Lh$aT@sxwO~@`UKQh|`SM~{*lvPbcX!D^>*u!# zbgbDNcF2d#YXg+(;PHg5vl5(TVS&d<0?h38CD_1)Y4G&}=$DOr=&!BGhV0*!EEj%+ z)b&{%7z-w$b_8Zu0!A*N-=^5_kS~i4Ba0f>r4O~TbLUV@5M3>z<8c3y4ZvKjmu>!J zGTo&xv8tC3%R`Qs^AzBWO077c)mAg0YOaAX0HwqpQWFxZM#z;oB(p;VRD){0wA4uh zZ^5x`Qc2EHK6Kz;DEq7&^9F1aL6anUeVKs1~n2(2$9ggI5f=Ab|ycq$IOfCq_bpjV9T?=8@SNb>qj&8FlzsRROj zo+1IElI1=qR=yvWqa4-?lXCD{h`BNt8@aaQ*K67Nl*DP7YnWt<`SL)R9HX=3q6HM@ zDiXCj=4V2YKn@~ssPE)!6a|nDRVBE624ihr%dyYpgymp;M!*t1pg}+DdwCu`Zd4Lb z0DkjdeW!db0*V#zm6MNT|ETMn<~xQe#+ryVrTbS#AO(Z?{B_;h`O9*mwbuCa9v-f{ z=CYS_1t)5Ntvv*1LtWRdCeiX|#^hF?5vyQLhUnSaAad4w^=Hbuu3zv+qzy1YDxb`Qptlp2*}kSw&sV=rs4_eJ?Ndv_=w0z zW$EDOI0o1jG3IeB6=XyQmClgQ1J4UF_8zR18408D4CHr1_CxOT`hMO2Z4x(w%(CIn zRh2p*yN!d~B3UQqff7XP0^F)xEc-b2cO)O`-$N%9#sS@n^FyX<%9aj-{=Z6HQ39WZ zT|FF@Y-=SiS$^Au^bqLL1H1E{E5C<*%@ttTNms&0PMeYzB>@+Dqq4)+BsQ~2JTRvFy&U@Zx4PazbeV9HG(gI2Z6se4plB-_7^ZQxvN4vZZkWv{DS=sIZ^wMgf z2J0Do4X-rVCd&SdtfE&prT}`sPMSw0%z8gU<7cX;O=@b~etb+i$G`8%i`YkWl#)zS zUu64Lb!-L<&_=YjSGKzPaQRvCdS+S0_zPGdF)ohT^(-IxS{cBRWg*{NFDC4H=RWb4 z|IPAA8Pfr)J#e5R*~bw3+wTGThtf*1wf!0wd`%vxl?;l&eXu@d{h#-LZwpm9s)MTb zzeK4Vq{3$QxTbuTCOx$q)q-1ZWf5C{H_f=V=IP;*^n`4sgf^Dqp$x8Py9G*Cd z;8WP2)&@ie2tT;D-4VvYg9P_h{YBpy0X4sKBmk;T@NdTNZD$ajPpX})Ood8pbL}O^ z)F1ku{IMcOo4yf1nE4#ATEvUcbBj$aX{ij|(=IiJE(o`xx%=aa~ zt>4|Y2G7^i`yL!F->v@Vn17wmq|F($1Z*nfLhsvo;1&K?0u`}pUaXsB_-OsQ3hb5r z==ZpSSe5ye-}6f9@(jbhBG#`leP3TK_)qMeWG19u;XNu4x1K*M!%Oz(IEJ1nXdH-H z&L730IUVc+K0|vZQo${#B^jTn0k3TDdxoOYGPwMwwQt9(Ge|yP{dtM$T!fHyOKbn6 zzJ?re)-pczR>%jbcW9OryQ`7lP@~!8~ z{z~>g6;R9pl6u;0zSdL2`Gvc;q?M!<_uh=066`zEw$FF_n_~k zvyuR4xljz}8YC4mBedqD_kU!E8B~wr^w7I1IC4$c018{?3O@!isyi4jCrPKw3e=C_ zW@Gc}^<%z#q2gQ?bLeN7Qusq3oc4`v?EE>)*^aEVI;+x0#<{R|2H`$a97XZj@Xx|` zr0!$f5{UpNPa=RGi4=ZaYrt`exvh__78%Fil-TfV(D(HB70dC@?N&K=fZTgKV_voL3n7IIj*qaXSvCmS~6UMYr@jbx!Ng4Q}^>@ekcy+!t7b!EF|PdB}6@ zV~@LHZz?uX&MvXGk$9Kh^fPZt;EB~$Vyr~4t19Ui2Y$(}wXx>BhFVvChppvl|7lP1 znrHv5u?OMrs5Pp9So&^%4$C@Nu@U+4O5W&m+E0A8NPZQDstQcZx~HZdIKOO`qR1-V)~AT;sM7)zR403kRx z1jC>JiSg@T*!2wRP6PUOz2h;3y4QVe0w|$9;jF{HC2Hpp<^XDpQqQ3G1t4zz?g$;t zw(^C(+e<<=~;igQ?wmNJx@sY zxh8I69qOC_PPCMF^1lYVnzP%JoqXq1`7`>>ybt|R&zU+pw#Jrxo`N0E=SiI?0u&LG z9dpG!>+HwDatq*IW*cWqW(iGMxjowQw5^a|s>z8IOCEJ@v^? zvX6i2ZMNKO?8=pEHapn2-TA~OGXQf|wtwM*ds>TYJND6gFWX(e`3n1!x4zfD?VF!z z-}#(p*`w~b#SxqifB`smIjKUE!F{)u^ro=O>Mb4F|+eNe-5M!=D(Vstc>Aoc|GiQN9LM_vd@I7qJfP82~3=`qG!$@BGg1*tKiN9(w?WVm=|@Y_SBeD1yv8r*`gW zYJdH&|8@JXzyH6r$3E^e?BM8}Eim`{`_54L+vhU@c-Ed z-us@aZz4|kfe(DZ?!EVJyYRVBbiJ}TIVMmubyAZ)p?(GE3E23st03>4%^gt9xCzfJ z?q}{zZ4N-I+W;^CZoPv6=Gkr9WXG9{ac$TTTywJqwudqaAT@y2@O`FxyLQus3${D~ z6Yka~DEinC;EVVrfXo;-0 zr`R>L14X8y65Jo)X`E5^L3+5EI#XuZXF-mXU$_d`d$-PjNs&gq1~O%P;4-<>nA4!vpTpKfa4RNXMhb6>vFsAOqn6y08k^pjNHx!^Hqx$ zun!r3g>GIK23;Oka_4Ieu*P9Bp`UO(tLWGhAq}oO0Om6?J!36SR;!`|@pXX6XR}jV zt^jym*rkhC%pQmRxM#=5(Cq|%BUa(S+vRmz!jCyPvMblFu~=b$-!7a#Z%_H+Bm4XR z;K%L%`MICBKl-CTw&R$q#q!wg@#5;j-u3oBwXc8X*M;wWYD;HFp84^;<}G<*o&a>` zofg%%smFdKJ6`_n{9bj}xy5D4qAfG@Hk*7-{kB z#Y(TdO5hnhzt!ai6w~$Vh5vvKKn^f1zFfo&o#9o0c`|)wyCl8KG#Kq3?Y!ou%^zl> z2LHYnRBY=$kH0DA=Kr1s*mR8|7_NnvE=SxA--phj{^xnub_jIetVyDxXI8us`(+jd zA@oZpzBeJi9_a}@o^W*ntCG!~L|Xnl4u)U)dI4X4inyIOX(C&8pEJ(H9?IL70&)0y z&giVTdW~_wp1{9#hTm8Z%)@*JUv;mEJwP|~erD;=7V$furxc6O`MWd(ir9qbM?z+u zZ5YK!QJ}{4q)p!oP_pYioKvFXmg3K+!gz#V$YOR}i=g4%>_fWD3Lg@&Phmp+F>?MW zc2hhj!xXUF>L|ue4LYY4ViA{BGKfQ%Fg|CRUNP={vRK&yIs-Ofy@CBd?QT!tr z#yy=7XMO7O20z)Ef8#~pE68}uA4_0U4s%Vclq6aTUQ1zQ)(;%~YEp?#3WLW4A{D{S zfs{BDFkn%W*}Xz+4>whL^BhOu%ylp`-H2^YXXz*l^+Cq#ZnRC*i zzyH{HX(;RdspD@ytAtBtFzT<@gJbn9z0;J(niI=ohui-1P4YF}U;kyckg@0Q*SBBO z{Qk)FHuvhEDa-L$da!@Sq2n-q&wRb|xe>r_)-nBlVf9m7GXW>Fy#0A=z$8Y2nGSST zKgRNJ=vgt{_3!8Td$?=%6GYqi5;$^q7ohUm<^P%(nD%JmyE_&r?SY_3_{Umew=t zzMjP_-}fy2JT{iG_ws%$EwsBmG}Pa1qEWs`nX9l>!vJxUPv<7+y6YSoREHaU0rRC0t2#H zvWI8c0gd-8`O0I<^Xuy|vR=Agv4@H6J6GXmaqVqjzE1U>=6-p(g%<-7emUeLX| ze(T4z`lr7hURiGQx{mGZ;oPYzGR>3g$F?BB514yw$2PDbzL-O~&tR#3PI&*=hJFxi zZE63U{hVhxuJcsK&A$!xM+OvSdF}1c*dES$|E&4U^OAM5{`t=>#xBb6kvXj4` zpJPm?=XuP}-|M%2-%G|bSgZ#Gx7EhOa~1(0?Yill&)ZpRjaLtP z%>Kuijv3o?dS#jGZCM`ED3jGFc(!FC&a4~xJN^3gf9pRxCKuVZmHP(pwvnj_n&s)pllIIpMXlMElS$_NX#k7(?U)Wbho?T-* z%f9z}Y|O9G=X?LA-(P2~yUqt^t%ZKhZR_>-oB-GUJL@@notEcV!Q~>uxJ1XE#(!HM zp^kNEv-<1zenOGcRQxe+=i2=ze^K_n1`^xY+L&DS~~%(D5JdpRuR8ER+lMdh`qu$Mb8$j!wDx$sX_gPq@({l{Jws{i5d zMv<6wjo7cp{Y>eLGPa&!)LYsopD=**@^Ab3@UwCA*U2>gcg!7-@}8&e zZ<+Rc-J~@k@keXl&+@l=y`YyfhXG`AM$D&);{zOrz3I%A^}6}KjV_9g3}kxanu&Fn z#9NAw^E`f*{?YH17=yAuIJ<1CjmYD1&}4u?CF1~cX`KN4gI{tmpV^Z>=LvSYJh9W| zv8`7Nzy9&@v2C0PZEJHdES@`O^K&=Y?!gUq?R0AIdjH4mXa4Ok+mHXm^Xvt`{u2B2 zL)XoAr?%Rdw}%Em0`mq|Ot9;rwY2Yn0MzBZr~e4d04T2RK>%(EkmGZJ=@a7v9svLt zu%P0)UEzO0o>(zvunY2~M|0E=Fqu={_xz>*}fefowsLy%QxHq z{=fh4_M<=gcWgEVTjr8rq15S&;2^TYzWd$pw%_=T-?H^`K~N1qG9G8$u?Y$sypRol z+c=O3^Lut{L_(#*Y8+{@AMr-b>eInbqEbj4c=IB9{Pg7hN8OwE7;{ z8UaWJcojg;>1a6iZto)2Tgm^6Nj%h^&R1|YDRgCkdKTURlzuvpw^)9>g;HPc9qK&_H?OO38stoLM zFNdsCY*~x~`SP-RtQ-7zFBFL1eckaL*eU3WrJXEJ-0tFD(%0I5y&iEJ0q|yYo?I># zQM^S)Ph8jao`Vjlr*U7{INaA=pkR%sPe4Xt+;g$u{WagRSK6nJJ9Dhq#;>$YC5?8>FfUQ~ebxSs|vDSXYvi7ih!r?QLsFOQ4) ztv1%H_i+E~*H8TV_?*C)ka^tOOE-cAoBIi1)(yKM1VU2siTiSWnWyQ;gzxGz*++2# z8tk3Lv2CH#0&I)9k}Xtj0=gITgSkLK4fcxW5Ar2FgXO zhE7`h^RG@IKeVSl2g{YuDP$g>IbE|jnA;_h**G?~jo^ORv8DAO|*D|bE*Xc5}O7(nEeX#N(PX)l^GaFe|S{@mljuTU?m?S zbU@3(k`Hz*ljrz%bArA-oUhsn!$ESGV2Sd3Jl}R#6_}NogXsT!0FV2emAGui8X!?z z--$IgUSU^)NNSzsK&e_utFcP3igJ-r?Sdh-U7mjD;k^zi49d19vq)DR2SEo|){2R` zCJeUK=jo`?BN39)F4wADY0wiYHcl-s(B^3 zewmi}qz`=e47hzuN&dYJT<1elRtTY*2K&O9N>YpM{*ar4u)}~=We(9iR^u~1F0E%D zO!9dThqVb{1PelztID|4Cp-Bb*%YN{^XG=G*Xz%9zWcHHjCbG;{!Hh-wr;J=vw02b z^VgtMp67ne^8Iu0G|Oiwi0Js1=PzbB7_qZ~$a3Bv!g<{aW*1v+e&sRuI>P5C$-Unr zf+(f+4JsYeJoZ1gYoVl2-uIPJBhQ=m>8U#y^fB7Glu^tw-LkJ{d8bNg*;sP$nl=ds zCbB?!8_!0+w|hs4gF2=@sZ`~cGS%v*GQTO`+wR2_luYbTs3>h2%QCQauj~`aabW~% z*ic(Gcrp2Co$~lg0K(^_wpxqSQ~}@ix*^MY|My&ElY_JQJ$zQw{d#{4Ow!A6p4+iK zk!5H+;nwOoGRC$=0D4dMvocfHsx--!zVGtOQuIb|w$6RKhh*nzm&l%xUwN<8Bwc*DYFJ(roz`}OMOF#k>W z&(662%@c<3^@d3$&3~3@y$}7bAZB4Had`?*KvQ&9!;K1f<#AJ96s$;d6la3`T+M+s z7?=7aT^$SclKih$wp+hPdM)eBaet)!u0E^tM+Ong-&5kTv@r}OEVWn(D{-by;ddnG z_5JL(HbqDS-6`ECITb^9wI8~7*}w9I12n_nVX6u(&!_pVEK1o9w>BGVJOn?~eV_ej z>@}`OUJJ}ane*hM_x2(GP4h;%t-;-aF6fv!^IGWV(vtFwVwK)M>ksw)SnI#_`P*|v zyJvE8ZVUv*Bv#s6C4SM#aLD0L5^jJWmWdKHtUOYwd>Mow2!)460?iy5!{Z zqt55qk1z2(?S~joVaN;?sL~-S$y=5|Z>x!U2#`B^-^gb1)Ul<8&_=`CABjx5XOaC2lq8Oj-j6j%* z;p!|CoocAj6N8&tq@TJ5jszHs6KX<1Y}hHj2sRRL4amf>OGfEBmGwsi&C7bnR42Qb z=eg)5{qD?Zl{u3lOufqQ#r}!+#Wajpj>~`<%7Hdp%mZf*2%2=eRA6 z4qV!sXUKJyyZSfzc zNsoh#&UJH=xz^5w-N!x%wjIg~|6K<&5Or8hMk_|?+OT70*Lo_il6?fNrOpXM9V}K` z$uXW~uXOyQFUrKX>>1;2Q7{4f4jrlo@2?~vV0D#o>xl;0?*4ZRwSlz&y7YR z81q6PO~{Ky$CK0{gYwNdjx!bm44-sr$yLIZgue@roa>4_r?F}dR`9a|Ug>J(3K zZ_!$npqmWPbOz6e`)Xb3KPr|K32+8F3z5HEAU8jBYl_s^}?JVa*z21SnxDJZPiyyXLE1I$#bXTJo(kc z;G|sYS>%%v;vqm{^p&zy?EgP~VvVamStVCaO%%RA$;GxIB^NnPwr zaKRMjQB!|L$`W*A>HKht`LEY^xebsmd?xHOv?4Eds{>x+`(kGI7*S&Pu4gYYnC&6| zx?%S{YMfe}2cXt!v$fg&+)j>{K30qaY-&&W!Y{BVJnnY8=Ygdyj%znvf`$m5gFNp8 z7z!3hv?ITI)s9a$_U1qRn7!@o|F6C1_y5rT@?ZKU`-(4rsy+U3cLWegYZ$YU>4UsspLkTL)N5UwWsb1eRZ|cn|N6(15EIXXZLX zuIrgMR7_L66=%KpTzzHSh0Y(r9J*(=0`PIO^nCyu0^r)a-uX^vEJcfL0BH7{@+-h2 zlO4Nud}0TOQ+whQKihujZ~q)r43XS(gyo9$W8`X>9DulX9AU$|h4#j(xz51pNJ9ZYw@^H=7@ z<+kjdT2!o;>u`0u^3Ejd(p4FtD$Xlxz}ilhYX|QLT#FR~(=iw-!S)KhnfHJ*8VAr2 z?9Y=aSW5x2WIOZE{oK#Bqw_b|rK?w*c@&JHU<`&0`tXN8Ty=>9$pGY=*mN#ThFF?6 z4lLiDaDD;qgbu&>&}IA32R>*Y``Dd!&nND6eQ|hr&ThQM-`q7WJ!^3@h>|-Bm zvx6g_ujK;3X%?6QY^3?aeE7OASN6s?yxuEKllUh;^uSeBozQ!PV58k zdAI%i&;H+b!;R-b0c)T0`A@RX`Ml4w+aB>q`b6+eBc|n@S5D1V%WL+){rB6QcirXt z5w?D!@>$9Ff*6Yc{4)$lIE70a-N&gx0bh2>fSIi&SvzI3)wq6nJcjfX! zcKOm(d(ZpcYgeybckm^Ekq$yVf6gBBn8(<6dN!WvMt~|0R3;g;euVb;he9l zx1a|zEkNWp<9EH|!`$|E4_ywhchrdzdgAJp>;CVpx7}uc<*)o@`;#}n$?kvP!G;9t zzWeU8D_5@A{P0HisT|lpjk5{XYsEcE|ELm_0Q`)$+oxbA-|pFc_kPmuz4sILj(5J> zL6#^yc-*5OZMWWjt3C0FPjm*%`N5$Br|H*io&DP7#F?4f_?Ps_S}px)5)G~me=e9AAFzPbI&In`7kIZ%^wtsMBr@MQ0a{ap70m$a+`iZ^n zPyWQ-{MNVG#ful6#e9A+vkT|W+vk1$lkB!zZnZD?g3ouIcmDhZKR0o;4kq$d7)N3eAN~(x2bgxczwf%?>XoYwbjO-tZLVHB_Uqq#^R0H_rVDn{4d=b! z1~!F&XRw`bZ0d0|GH^T2C>W338{Wg}kXhNs>HdE?DssPJ(S+0zHo zbNg0NQ)fU=d!TB+o0Cd%^7{mnu2F*h8u@@}NC8OxOdx098f^#&8cR;e!OIEv=Chdr zz*~a^z^1Ec90MEa=bRwV^NvkE^^8Qy7$~a0SHDL6XY$(X0Ny8G zn?z(@)%j;L>MPrNg zFVCBvJKt;Ux>@eBLy%>=0%ltIsL$6XvP%-u=aZEx)fuZSi&ZYi*^h?zQIe!(6sq&h zHEM#v-8%Gh!uQ%FZ$D>wEbV$qW?T8x-+MXB^PBf&2^a<7y9ALGG{YebY-nl!6#D&? z7|v~9^|v-DR`-v_)bE4*_bOMpC1%w@*}2WSDa#D+CvZyD`;Gn&UEc#xkP!5@!*FIm zU;VzW#nuV^a}CE*uT>JQ(Mne*w0@uDxyf>pWg_n{jiJ|DIT*#yq{r_9-_o6G)6nl* z-beFAUn#m6J<1c}?4!EFo)GGrHd;KYU zn*lWW?^zEkST$zzvP|gj{o3YzE&0y($*-(4`(U{K*0V45Iya9oCy;vmoB?t9na1?{ z4%$J+I%Xz$*AHoXo%Kxpb=zmvKCbJ^YxjjpT;DNpNnXQV$M<_Q&z;u1pELek0mWJ7 z&hj4|lxKNepIXV>?iemJU^FMQ+l1;uYJEi^!Kdy`?2?Sxu4f6L$!5ext9l% zsy)zgCtz zjxF1X0F?wFIm^UZwl2?QX5!H+pTGL`?R7opuVwX-52bl2tzgp6c`bSyan`-`x2&JW zp6M+48oOrp#q^yqzrjC~00#Mdlz|gImk;B+wsN4>L;-FPpsLfA!)x%nxrOuCT2a3Z z*FT@%{rf2%(CT)5Cjuym`MlR*ybd>8f36(L@;Jj~FSA*<=I@W~rM~EvKSwpTx5-u! zXaEDERjL?FdLM1`I zJJ&-yI<|h=%RTrc&wsB^&U*E7*zd*czgC@__0!olFF$McuiAo%cJGbpifkwP&&V(8 zbx%KcdZ}P5x6Ia@j@kV>r!8A(S)a1+s{fwX$y>7t#@4TGockKRm>B=_nMChtKI-$O ztDO-O$v5~3JQ=oD<*&|lZP8pWw^|<+@?3``FAt-p}xD z5!e@dlIB65$pE3kE-yXX5kj=SUyXlDUxNg}=coYLz?jI`M1Q{5_42u|#90P9BS34h z=PDD_Fjk5<5lM3Z64CYjNyFdlbWrRMf2L?JUG6{FYl^8=AbQn#))jHpcxqlppM&W6 zTXm)8yXu(I{(XdmAkR3nPz8eqNL&-OhrJon~%c=16OcPj3u zz_Pxx<}1p)#kx|zIzp`g4D0&W>r2OGpGWhJaWWQ5ppNGYLccN=*%G>BUz7~MOc-a@ z`7G;o{}D`{+1hh4(9D9n#FNX(&SKAYd^Yw5kZZk1IjueHX>g~j~l zcnJXuViCn25P-6@=VjufxNVtas~hhK&1{w*a^KJiCD>V_S1VgFMBhchuxkC=!iI6+Q(p9BTES8gZX;>-?`oa z400b7T~I49FkespuYX^l7PoT%60j|<{0r(mAg%x~XydlU?}}W+bQdzjbFWy&{9ehg z?$5y$B&>Di_6K+zorgPH|NF*ce~hA3)z+5Ms@v@{rv^!T<5&cb)EaUpZj(1pEHtyE=9ca`erke%RdzEtI~iuCSYnX6oMR94oFqX-5Mq=pHx#^*L*a=s1`qd zp;d0UP3Nr{T!U6K2LmEpUxiP^lQ@v@TJNP3p85t>WA19T`@F8{tVps4zGpDS6OY?cea4;AY~~5R>DGLzCVv+>hQiW|uqb zpN33{(A&=4oFuEw_CFe7<6DGz`K6!o9mQF3PgbXv=D)*He*JZ(tQ!G6_Xoz`@9O$_ zMesRXBmS;)4pu>Er>-{v_b!vtOLTj#)aJzacf8zip39q#&=GUldo%idL zVDzI=^GRT07<%gDlUK+S!dX%eQ)J^>fdqlbkX&;F(U^FaW|U1!ID;y? zVKeVZCxPJ;^VCZ6^j!yMU8Vp9<~0w{^9CT+OCR0|045%(@GSz>l$6BJakjOv;z3ncmuT|^ zx+Jax{34willGqtw{YNsCMpo)L=;Kl3g&P6ME*dq+jmvh(xp5+&gT# z{dNo>oi$aMOLRg3va|UD@{f4>t?eWOSr>v{vLh|T@J*}joq=4$W%ET+3y!)mH9iy* zoHxUC!|Z{-N~u&UzU=bp{G(mnv+-_g_**cYp`$$PX?IgG+4WyL-Ht{It@SKBT>+F z0m_aM@c=KrjUgZ-Fd#p{)nD7lx@#ffJm0Gi{V6dB@uhQMp^W1&7zOe(Nw4m+Fhe zoqZ1uWk}8(oX)~)$`-k+Ua-ST`GKUqh8#F=R}E~>%I;E$En~DXcz9IX%CJv8 zkkY}CCn7!>d}XvhLn6?5@9~Wu-kSjH&7@Jm!73ZPe8GZA9)@ulFH@I5A$YC5iT8 ze*I%mg5~kZ!MWr2F&6o6Mm0!BeR{o2nc5UeII&(>J3(+w>8*4&QM5cUK%EFi=@9I*p?&I zS|TYp|L`Ql{z!)uE!^5sY1iU3Y4)C))4o#*@&q0<&`^4-y9me01~HEI=zA9slo0wh zz21DDeieAv4%ohl;YLhY&wBOg@2dmH3U-r_^-`yuQgwaMUT_BwmepZwT|6pmV{?B- z{Y(VlXeR9)zK}XKbUVeW*nBnsNgcwRCbb=WRSwxv)8|fADA;$0Z-cql6$sTv`X{Qq zzvwl}bbkn`w!jts@2a_2`=X}mEcqHiz`|+)|f5{{p z^q~!jMn>aAVu&q7!S^|RnsX)jgsBWXH-jJ;Ju}CEqKJ?raI^~2G6pViyRho=eY8}M z`^U356THw=Sxcowf=%c@mpnzLVEPyk8sB!*qfCNwL^2LmkBQ}JQW)(gTUG@Iwg{e1 zLmY%LiY50Hl@#Jp_@#p3D;kJLv%<{pjHO!Qa1VlC=hb&1NRZ;k0<^p9Ki-;rH`eO2 z*l+6OHa0UKq;&*UTZVOY=tkyDTTg^3u`MZ%>{b2Sxw}3y?Demmk6SH;#CJ*mEL)z* z`gAr@Ub<5a*;%>8mXjo*X(hF9&HPd8`#&BBFEK-5UZ!omx8J(&Go~0(%t+Mxg#;a4 z2Y$dpon+o@e^}KWPiC*3M+vx$3+c@|c&`p!^d6alUU5K(iKs@opZ(B}b=|TwTW~9W zUN#=+CFy>;_Oz1`&~$FU4|w8AxP7KTNRaL^6Wyt$$TX{@vNSo~nj$l{r_RS$vZQFo zT6xx?lchmLXQD5o1M#4WpasQ1r(G?YEpoUwu>Q~EcsYsgL$c%3B2MWNOR0XagUU6sV5-?=BGPXH zvqin{@}2Xv?%f=Z+5oZ{G_zpVW>$e+@to*@i+KuTt2l0w9JT|Ajo<>}>6CUQ>1O77 zInHq-nDga1w@T7f0KYOmBcd%&1rsHumTam1k0}Lf=^uDFC2l%|9|wZxxvec-}^bU?#J3D-IP@*h8P zy+*_Nt?cR50JBH4b(rx6S4Bhhh=o;c>-YCrK1vLu4}uEf8N_l({z?_y7Cv{{0Hac< zYV3I!wNZ=>Es4&?!B>CtdU#Vl?sOmi&TKoX;jW5-n})aBXPJ9P<-a!zt2`}$GJ{Z` zTYulb{x7tgR7TF~9{Sb_nawG+;ZqaPHr%K+|QkAr(?7t9rjdIN6Pa| z6^PZ^qUj%BtJ}+Dvx6DbywkZq#I_0ohcevCG$Ji#rU z+>84mm6n_w2n5>Zg#9wo)tqCdP{6N(?q?+Tk`fhF1h9Kod$I8|tQHx?tswO!4KMey zT6I8mM(zatm#G&u!b5lK_<`s5yS`NGldBYEC&}+Pk?6I3OwYFk+b;__2_cgAQPZmR zBpGyEcqv-~AI4qCU5zwXyUem?gtpk#amv@V&J(DZQ%{E+jn`a`60ml)W%@jTwB-n-K0kS4GTogRP9mXAN8x5;BCHz(wfj?C)E>s<^v1LJ!r3(-V8TZ`hcAI9(t5(-81^qGNe zXZkVEPbWr@$VpEoJoCf`mBga~<0T@ewu%32!Knr`Q~FRFddHWHS;N@+_M#8b&v=ywiQIR7g+QrWY{a=RJ0iCd|K()( z($L>wA7oZy>y=Dvdc*@w|53ZPSBm3lvp^%T zB|jck?%tDZMtPX&-;;ia8~h;^NEYyfP^~5`GL_5ya3M^X5#22)KK{$k2E@3-$!ww6l}#d zmw)y89!ukhXhoo^xr152C(V4eR923=D`s6hFG-f&s1J>+r_a%YlcjmeuV?SBmHZ0) zMOG{P-2Gv3R_2={)h_AL+XT{5>{GAiQ$i`QG316DkE&4hQv-4~>@rlHL(fCjGck(V7aH(pX0Po^j1IXY+-4arqKE zbQb&@tkN&L-QzJuuO=x)MQ3fdOkT%{jS-0kn@DM{Gr3RLvq~@;Yw;I@U%c zrUel@nh>fO?q6BOwxjO;7FN=rFt>tb#sM$g$1#>O+!4|EX=WhPG&@UJhqRbQuWnnZ zU|oda8zS2DmORiyq)y{Td+fi?SteI8m6?$e6hP&&6$W6-(y~6E*FG(p2%uCsv*tJ= zz09|!Z`SB-OG#*#Np`4091L``?}>qH*dewZ+@>~9FZS>N2p?KsAxT>3)c3tW?M#vyfZL%{rY0rZ5%K`5cEpi$hn<~?zADvp@+-9_{aDD=-XSMOT3 zdMa+ECNu$D3d?T((HYB*%>^`vy=vf%vnikji(hA;ct-~`$f-8AF#vUquiP4cG|_;C zGXR_b&!?FRyQYX?B@nQBAP{%RdO=V%K2@+v0k)Th2((z=IA?J6Xs3i%i8)w&uhu|} zVyCuw2S%hXLrI@3=}~R#A@Iq08mVDs@#LmY#ufou;wG0H%fi#?^q*E!#KuL+vfOrc zL+gqnLkFD3LH8SAEl_d@yg_f1WOULL34jxju@#dLQYl5Mihfk4T$M5(*5K9I*b?ws zj+;5@#ZHW0lvV~LyzhKjMvSuGdfU;cEafkVdXqz)Rv~rD#6e~%f76x(J*d_p)_|z> zIN#L87ej-d7^N-Gtq?ewOz=SLno>TN0EgWm@z-~JRqSkz3ZZX=Jvjoq%0T;~kYfdU z;V-g_8>8EChEPI3L{}qD2M~2exLtWvI0wt>@+ft4INVu^depboV1IO}Wq(9xfWWDD z1eQYO`n1foFM6Q=kTf8q0=@_=Y=u#8Ie$_D-&~lF(dvt<1~s3iQsF>y0BmrKXb+HYj^#szYwkNC7btS>%J7FxZy#;Z023zp!d1c|9B%^(Lrgo4 zWBd~SJetyr!p1Z?;x?vT@zW~`BjX7W3CRy%!~FdJ`kiA4+7OaMza~^E|1664zc+_W z@^Frx*E(*(QmyXvHTtnGq^FF|kbHV1z1El4J$dhVROXjL1E8Jjb<23=nRwY(}_;raCdW zA}6ktej|N1%M>I966&VLrK3M>AyyI(=2I$Fxy>VrK zcAFZca-uVlfct&(b**;2f+cc_c)FdqbrXKnrw?`@*QF!~N5IA{uW34WTw=wyYI_nDsy z@wK4#n~#l@?kjTJIO=9O;;cIw>mbDDF?$+Cc~=Y8H-p<4Dh7PJ3y*wtVN&1TQ~YuG zX~#V>S_#Cc=GkG93VuwGYF*4AHNcOESoQX8yr(uU1j$_pTl3d*E&p%wpmD_Wb>C#= zaqVo-+8k*ReJVv5Nx}8p%o}0c{%~;cEz&TC77ke`(AkPI$=b4GjKiqoXqpIPyhaQR zD@rcFI^A}RZEMCaNi}fjGc20<{cRLO=-=dxqi-Tlu7NLvw6r(u9!KdLR%6D$p>(ak zHVP$b=Gg@`gDoq?XO!uS%2+ftgx)Y0K$h$8ZZ;B&r$G87320d?j?91?4w80LpxyJ- zk%k!)7&%r+4tMYfw@mKKkwWy@ng`IjD?;?1QI0tx9l`4JwJVF=+s6y}q)p4#+5acd z>-(?uwWYGO^LsXGpLI}V+UX4ZU-J|%>a_PMcYaYRWbi3-L z0P9KbZwXi@7=Bg^OfEv+M@PkK7sOnJCI7enS&;Q0Fi_hM=WH@s22OwcroJzfw?*R1 zrTv``7y3S>{+r05ZiG0#7f#*Ki)?JLH8mzIv*@CB}!DE9ChMYs*v4{*p{&&QwoIt^2K-l_(3YYM+anH){%T z7dU#?1Dq;1L9+k-k^M}Gftu-VEWAhxOiD5H(d#(u45L;&;*r07_5tZX{zEU^KK%Hv zoSlEiqc~+`k91T8dF;aBFWhg8$nx@WKAmRWwqVd?gKM7BkAVI^D=;i6_K zxdy(z_eZw7?6lPDDI^kuACs#-;_0&ZO)WzVO6C<2S0mYRWeP7{KfC_^uDJUYARWnc z+GPIGzxxL!IYhpgtmXROdy)&jf zi8tVReRw`;S0Llgxe1E$N)seE&B}Is@zAlLb|mC*>eT0T-^*scBw?`^k@x#o0oj?A zW7X>!!6_f!{352depSq=Hw9zmHqaJpyg4i@z>B^eZ6CLs+OjA)4+U=Ow@u%kpk%S;0+sJpJeq6|>KE7@e?PKQru8Rt_hKEUDS%kMum=zN_HCxlXOSD&cHuGK224 zkmIzUEDgiR*|bH>&ExD98T@+n?f|?WQZ~8U#w#`7f*S2q2zmTF`=CKpM3RLoWdm1B zutHmgf~x;!DBOTt2b#bRPprvXu3u?N=r3gC9e7!lkz!1cS5)AykY8r*YsMXAqcg`m zV<(>ZN{N|;(7vqd+GVV+FOMhU+uHDCf57j-oK?S}`{2>V25SkO*5QQf)bz>f zto_&Mm+Y&mjIG@(P`GD`8}P6k+>cMATSP=N%S)X^?uk()W!no?>(<`e<6hggDXXkX z9ozTlXoFTMA!})!WG9{+M>AMw_IBF;W}hB*YxT)pf3+$wI3(RV0Eg|_CJ-jy8n|bc z(zM%#mg_gkx0Tb5Ke6N+P5|J4e}12SQFOGlhZJ|{*C2_^E-ui$*v^%W#cbP=`LJEV zdQb4X^FfCui9-t#k(d5z=;fQU$|&l`0|n`EhS4vDe;gLfgjLn2Yq}qCD@1=ty-=u2 z2v7Y47|Lf(l?hEJn6uh$9-~af3EAowUeQwd9sXqQUvaZxl4|SmDo^AXFaCScIyBgG z$@8hsMlI{gKl0ax=$Y_6$*5qod6T3y)`f3_e3{Zi3TD2*9m#$FM&xH-BoD!G?~#Gy zl{Aarnf|MAu+4p$@ngH;wuZMn3(aWs{im+V5zl*Bx(oc8?^Y>)yvr=DQx?}pVx4vE zq=mo3iEsx+4t*k@yepJ;!7AyMC7gzzg>4{sY+jEVJpUwW1w#3XOtS?rTg5@ETO|l`YMT~gV~|fPwOq7>q2Rx0_favh-meF}?3Uh@$MI3mwQS>M-qlpkZT&Q_1i%VF>G-54M_o8=lQIpTwalw6Z-^jv zA%5Pdm_GW5mj=o?ZudJS6T|V2b-ird=UzVSrLlfzraRfrCp*Ol#O}68Cb>9mFQjAK zt-v_1g#Eszd-#>%3g?tX^>Ld+t#csXEYZk$A;CAssM|#8p!Frt^`-)*FP2O%tGk+V zL3c_*2#*g|hRSIb?np({FD?NL*pQhd4R=g)I#XA0>CW%{)gVRi z3y$~f&Kg#S(LKnNcdzvAyqh(_`ZEuZ#=S+#vXmY{blt$L|Qi_1JZj$yI``tSC~c<%}n2@koaWY2Gbk*KHROuYXvLH9@dc}P@2RQyngxfXz8}c1V`bP_U*x! za=+jTax{V!$M+t+-bjnwD$XbJUk)dAo95mg_CZHq2zN;K3>@$GD30-x_+jB zbxsuwYTmf?nbgS?VE1#W!F5(KgLo8}+?INCTiIudSEn(0=({h6b{bk3G3hMk@qXi+ z=g&NrNRu7Tb@g@bq$d@GP7MpPZ?aHrhts45UI@Zc_RIVr{|2$Tm9H|%M^FI-=tx^p{#I}Do|ZZ%-&(Ir?* zeTLoe%d&Nv$o9?qs9`(J?25(|aECY_8n}Ru^D~H#mK9op9hQN-h@pKtULnk@cl!lj zVu}3Yo;tjXKXuWk8OW+N-8C(Z8AOX@^l2wO*e+`|wpoAer6w?zhZ7w2v1n*T;cvdDVx*%P>b{SnjQQd%0ahuU88nsr=uEWv5N1rNSU|VrshxN7%Fa7ic&3AdpGjx z#k-D{o!5EJ&)oz3A%iJOEV@K~6#_~@dZdvLE3V3+St2>Y2SpcL&mvWZw8zhVTYz9z zE1y+s^Vzq0^6C5j*04#9F||`t@gc)Enf~W=zXt8T0Exhiw>~N^rhft^M>kdJ>{A06 zyN>gfc1^G2IUHy=b@a8WTeh1p=b6mTR}BZz&+Y33d?)=HxVSnp(WJ?KBLNxJ{ML($#Fn$N)w``A{Zy&V~>ec}T}BCD49Y z?l5B=yAu7sh1Y>+^l0jDDOwSgf}qPX3`d}M-=w8{7ULY5{S?CH%f}6&{zaJsUFf@( zu)p>@9%wg)xpa!yLQ|s9A}5y?oggj&E?G%0tu_NL#NIoUT|l2oY|7-_rVh2XtgVUW z6_4Zti6^2%lOw_Stoi8@{llv*YXuMjYR0=Ze-1i>SUPn>Y1(PVlo0v)D_M>+q>8;+ zYQL$c60^4uK%(}4Hw@IA)nD1;tQo(d?~&ms`1 zZE%N_aKe(UxqTaqfbk30J`A|gTW@tgihq%Rv}7iE4l)TP`7rG3DI{$ZIsMn8uU)DL zZr%XVz?HN|6IswwYv#aOt!En3^N8u5#H_7*%Hbc{_82z3)KM*$w286u zxv~i`vTc0KEAe|57`z!1=r)}qMLi3d9z#gt!Kj9BAlCCBj-@zgz?Ct8S2KneMT>_qyl6N(b_Xlx(jpx zp3JUI<7hf`piZ-I0VK>C^D0zprcBt@;k~(6^&4{*oa;8RGm9OsX4MXa(y6=&^fp{r z5w({aSt}HbF6j-j6Gjl6=w=Hw-vYMA;fyn$yboS-VO%77e@N7 z<6V2WiG7a*)vko&J!?ZH0|j@i3i@vPn_Acjh0fno{V(Vo7n2B|UHrC10S@76X{agF zz8CQ9Xh#GX-BiN+2W$Pfxb|YDPVUFwBC4e;0?q|GgL?X1BbRl3u1a!<{U>$4IfhN$ z%j~B~e~(lY-A#M>+V|?%v7d$29Ac_XX9?tM|7l&>-W|X)F%cw9T{qtu#x`IR6684M zdj3KC%rBX$WVtk6+ca6R5HD$XM9uix!kB%n>thQCjaoWtU!C<~GX8m8AV5ebrl9;r(Zyw$_f+#<{f~$V ziU$oZUiaYOAGyb>1X{M{jDas``)r!EX)6qaZK)M1qxQ$$_ZI z6DRRMMg=ksi;oFWh<}pYTi|6ikLYyS^c4S_{{-?mofK|JlvdV2{wXnm*jZ+Hq1EkxJGNOXgcA=MEU9qt}?5+IM$p~o%YW{pB_C;G+{OmgCFZ=NZhEk<9^FddA3%T zVK@AMeHC0)Ch&CY^vvz2#lb~&`kZtH=BV!{f||X8z~BEm1Pez3MQFAhd1ABA@Z59f zBE^Oi&5;KVj-IchZa^2yl*O;T+jjWwz9m8&Ur#ohz!!`baG}*?{dxo6kqn5GMTaH4 zI#ZfqowhPDsUIOj8gk72-RR5s*!LT-go<8`V0Dis|ZxP2X~y;Wbxq(h{$)^J^dpTF3W3q?FTPrQn5y4 zEoR7o?o0D@9{VUEvVXisyLeYT4H$-AgZK`Qpn_I7myQ)WZlP^jzR8D{7TW8XTXw*? zO~s}$F!+m^;x}%(@#;4oDs3QCOaIdo)km-x{7m^xdwX}%7n*3`ujqn|4ttwlGW9dh z=P6GOT`V+%SwcTudlp;T`oPz6 z)RXj=!fKUilv(M64_XFARn^xI`f6?{LH;;5@^lt7Y#fI5> zp6{W1Qw(`kOnu9Z&}B z&~3SPCs4aF&_%T1-l@7-Z_c(|cGcjcKS$1bi3-Bi#xjg4|I?TE14emyZ4~ty6IIJo zZzL?JMhY@dYg!2aB733@GM=erxR_@n@Esy(e*fZw81PdoHjJ$o zJMtf)yb>|R{uI*AC}K&&zIQVg*IDP?(&3b0^9`>@n4E-cieOS z$TgqpT&B(T?pCCH#zN;y>83aVmyKM^q@Yo?iAI}I=DK3&OfVNMP!_=!s$)ybAPx2kzcJ=yhR18A#A zTNy`d4bD9O9J?7F)!RYSQe$W0@m-XT8XJ3%lNEEUZ}ZSQbL43(YbH*oGCp{yao(xz zt)W^+uZQ^oi)p;!j|gwNgg%Bn;0=^1SR&d`n7d}cah?k6?Boz9$>le~3Fhuh{mGi?RJWpD-nvd|Rkqwd%$)Lmhd zP9-|(vhoX#<0<`7sm#1FJ%mPpRJ9uxd~}`6E!fIh1n9nJ$E3%RI_AwhzQ6B&MpCt0 zBGTg340ng*;<^LE0kC&rXxheGz<`rqFjC5dW7f2IP9buX_lnPot%qC|{~2^&wWBvv zOl@_*r|S?p-!{e*m57x~50D|8O^or@s~2j%r=6Nb8{T!gr>CErvB&}lerW${0Dmr0 z%cTL}^u+iqX)fvsQz4TFKVYWR;6hE@{(m1g8zr|`tcOGOe|AQyF_SLIScgm;nyypa zJE6xOqbA2157lkc&uk9?@Feu259mP;eH zoY{)Gg|n&%aQ7ph?j81KrO8BA8N>Ep9QLOcQQ<4V?~z?_(Ab3Z)kJCnMj-Fe9E%DE z$%Rcya6AgKU|mIY>-;ElNg$hTa?nrd+EU1}cd2+`^Wv=C+2T-_rx# z?UciymR11v)#?cVB24aV#m7QInRPC-Ttt4l#ZlLVyB{qwBNX??i=WIv`bPQS*jnTv z8xsC%>#~T~plmNON@a#k{x<0}u`Budo^w;l#e;h96CMybi%;a0p#hQ}9pbM=&@jr%iPKnmCOgVCNrUU62jE8jMc zrmOQMC7u{{rtD;^?EfZw@3sH5BW1kSBkiI@eY@qmQ+zI%4|H zdH**0Q=esM!5gzEWFuUqS`JDR+)6B<-I&QA9`JvM8XB|9nmJTU&|QpBo0@Tq!g?!O z%>%W;p#4MmZ;?AhO1GRuUdX@M4>P5BdAFIaAPZ6kX!k2=2&~_=#?&03p;f=dTK+*U z*#8c03<_*u>r9Pr+F4q8Pn|+gbD*b{DN~Fo!!it6>mpf@sAm-wmt^uBG`rTv{p2&Y zcgfn;NOjfGYf{HWpBycL3#s=IZ#K?jT;C`@KKPhx`s31ci^e^_jOLgBjpOsJmQDEG zf%yb%gnl(9^wgQ4ngaV$!E`jglEXz}gRNioLH9^fvW?E#!u%JVIj|q_4~KXUMm#{& z*AzMWG9nbRqsL)HY|`tgBA2*lm;uMFz3lkRnFHC}OxF3G;0uGaQ~ExUu-*(&I`M+&-Ga` zJ!RKfX~#EHyDl?grpkZLD{qiNjlN26zdAURJ#~`JQZy>!YOm)X^B1*t@p1w#V?;He=T2w6ujla>98LqAvx!eJFLgs9$OhBZWp%mnVO3@ z$s)aFGNWDEAg>ucy2XW;wQ(eo#jopTLs&XPy0PN^aXO>&e30b z6M~Si3g|jU-yI1%#4|j@Ij`%HYe4fnRNjjo~33?qB!wJ{^X=}|w(6b+S-^5)RyKzH$^h|Psz;J@R z^M%?4&F@Ru7rGXB&>M)`61``^u(M~oBL!sM3dq#UUn_d>h~?25!>X2xr(2i(U`$L9 zWK=*Eb-QitjLvxFk2a6L*Cdy({r70=qGxgM@57`)KRZ!pu#m{Q@3c{^jTMMJ;v2G; zH90OY-0Qu%=Y_~`JEi90Gat>$6x9190NLK8h*iWVaCb3C?;7Q<>Ew{V+`#BgH zolC|S-r&>-zearJ<;*1;T*QwQLerT=o93(GfbV{-%0vhqH=qC~($mPNa}<~M4q9{B zgZ_h(0|J+WHMwP6BiNlI{hgrxz#ZCp5VFJzHeh0ZNzN?4 z7gfXngBDBfANlPp+T~VoW%=#p{#{Y?n@p_qsNr1B(XE2hrFh^a9K8)_Fhw~4dw6rM)CQzO)F?6vPga0wIzQ@b$xa5gAG-x{~{@1 z&3GhF>oSo15%D2Wsk!RuF*l7r!uCpc<$1MrjW08v{Xj-LIir81&GdhPjc=Ml*4_Wc z)Gjv3?Z+~^-uzcKoIa>^AS5`#m|4R%DLDFVt&nYDS2{r?j4>xD+g;Tdxm&}R160@u z-jOh)Oz%yEpzpzsv*6b42R$}lTvcTv8E8I^gOq>DNxZ$ReJS9}t_dq5fP) zj6+I4C%xGA_l&K{gm?me-6p^7P^kHn#RLwb-F(H<%qqi_dJFpvhE#NZe&%((yw3&r z`s1U?9pT0X4_9VGjDqu5wKVSgk)xK1@r&`pBJOyD>xu)fp!uzA{lU$hgN-M z);t7wl$AN8b~}9QIL|(l_xCE>iyw&Ln4?DvX1c7HsIk`zRW3L7J@C=ibWy7bB$E4K zk3qE5NG7n4{9;=X8%U+7b?|5SiCjoon7J{*)-ga4rf1F&WY_iHUW`{8ISGA1kyIVy zy7rFAP%5$C;DvDHfUEBw`!R@{ma%`1$v4;8icKR2!jlhR0stNu-hMtgT)`rE=yT}# z{6$leY~Ic9=VP*0BKj!K9sMlMoW{>tT6ggQr8C!@t>!NDwBMV$N|6G}a^JC|1dKk3 zG1?8w^{D>Uodqm|xPGYMo<1fAO&V6U!G+gu>5r@wX`j#CJCCrV4-N0?Tpty8)n^M$ z6u9Av{^9Xr^5ul`-|7MS>&&2IKd99t3<`7mc0H(c(2A9RmsWLOwczWB!lXID=K4Kx zU|8M_g9=lB4O;NqCw5(bArc3|=>207VzBA0zYY7;{*mU}kY{kiwzLy#6+bt9jw)&H9OH6Y~O)A(!wx%B30@zfrjkS`HSKmR5~* zGph6UG-(snW5kcYid#^KOX-t$S0G^S2RyH%>c?C%ok3O0M)Xm6pvHl%r}IktFDtFW z*_Ge7%U`h9pJ@RB+BTP!r^)`_+h=Ai<>KQvsNegFam7aAXWc*M$cFK$ejR!It<8`B ziDyVU{b@nUW!3Kk>z*7l6_c0f7sT>u#;0}OBKtQU+uV(V(E-|U=E@=_U3lr^R#;pR@r zJK_F9U3@weJ=M2IZ8ldu|A_lE-QzN97|5fm4e@pYmTi|l)X9o8&t$ZvH}HC9c^Mrx zYq~vfi-sw>HrI*KlC;Arj-)5%pP!BzOdhTbaHT}`dv*A=d99s_FZxLj%o-@=qthxoUOj4^TWgP@*q-mjZ%M}{qytH z)JHj?OKU;xmphU8F?5%5%<3|SQOy)_Lv^=1Sxgf;=+;XNjvo!PGRuHGZ zBeU@Ie-4qz%TSW`J z(?!Y4T*iKdDJ|xW^HX=8yuPWH`f+Lm@I-st;#0*~MvlC*VvIeHOr4d|W4?*A-?y(0 zBALGNXAeYPEtpkUIDcKQNb!R3B+kahMzn*|;LMqatNWe}14koM1^}#!0~5Ir+UtAY zLM9VwDAmFGxsY9DbunfkW$-IAnjpfeCi=LNTjdHVM`7dO5IS7X!F=*7b<$I8iI4fC zs4nXT_NDnHo$@=pxVv0;TzB2&Yt1qP#C%u;RyAHb*ip)$J%{dm9d8{N=G$A>SsN#% z87@OZ8#O@-cK_zNWvg3;?D?o0ijG)U{_Ym?U1@rg>n&@oN=K`UU(uu3h=#9h63#WFKl7N=ozQs6hfyMc(Hf`(Yl6_@ z?xxEfT_h2O3^1ciwe^nO?a|r-Ih6$rpbjbP9Nt|&Vw*(1>}%Y`-0?$|$H}%d``qZg z$n<=3N4vW`f#_5bqa{(hA{p7W0c_f|*GA;raJH}DX!nGQ<)wGl&8*`$UfON2e*SR3 z*m*yBp_Mt&YJO^>c95laKIrnKWxTJ?tMZw516D+@k00JbI}Yuj`tMz_?I_vm+uu5r z;{Hs1TesV;a>MfNw>9Z&XUmS1wB;e9X>rxD+=xryxoecn!S^rM$yOv0|mk3i>?+I5V zie-SRcOW+bw|}wls%2(*@fQ;ZZ&nYnz%l`9s%k-pU9OM3SW20JPijv6r^b79QRmg` zPe)kMFCX#^E%n;2;yL!a3@=wcas4!?Us-UA|GVRWYU;C-+lnTlJKYk1H`7(cVZ45d z)`#o4-=RAJ{_QgnI@6|+bWN$K@zSQu%DSAqWi=LuqW4B}8+;9xs&4t@Lh46=X(f?zO>2CUK3yA zqJPtBbxLOL_Nk5*gx!+@Wj1plavE5h{&y`-;!TS7r}s%cPsvGu*F(~J6{rJL%0MA5 zEhYf$T9-YTd~5D1nyQ1$Y+%G%_lA(+KO%-}+aD^mE#LV#9{Deg7M0OO`f>$#s}n(} zgRn}za{9P^n~8SLxzN@G^S1LC`5Tnd}UN7yY+uU~xaW2`EVj608{ z#FMN~#5=U=6S=O(@qXsRC@HzB+b!wR6SmIfM-en8t}YU5<=Dt2GrPv(ylh`C2+`x4qd2W3KaF;+G(?A z>%vqYom!X(a+)gNX;A;b)ivTPvf8XIsoMT*``*&cBX3ll%lX=pwUPX1>@G5Xj(Rgk z`FfB{BqJi3v9sK{Q9_e^0%nW|ft9RbX z_|`enwl6_Ur5{PrSxkON>4iUEmEUhS;DoGWQ9P)SOd*2-cEK|HOtWvxGwGxHAM zFK;mU3kz=UVPDKulBGQfw9-FfV80XXv!?T#H&RJio6a1D?UK9#I?~04&!`oM^M4s0 zx9bx84Pu`8oL?MBflf_L{cA?=d`|rGcWa zMf!)Z9=wDUiKW{4XN90QYvrdE^rv0rSiLB_ao?8T8??UzIih6?Q;c^jQ z(^FIk%B9(A&|SB9q>wMZ{pR!^HUnS%Ofmf(#~f4IdjpKOk96^G!}sDk*GkOtmL)e@ zpOsiK(@-U}U%qM{mT;xM@RAlFecT2R?IGUx z>`yUneQ5yq%E-S*SOT=}lBah)=SJMJ;JWh_ICcuy8PZi`8~FR)fsI|?zAlrGm-fHp z-rBQUPeD&G&$JzYy*az#_cSoT<9%S-*^V`bfAuo)$DY@=F0*I_6E3Wu^|#N8ZKA1LiW@gj%Lx?Fm6YbqfBwfSS%Y2;^NOI;pIOV7rH=n&nm0~b_wjo2 zPstR=5Po!2o_;{d>9{#HU0eqyIf?sRL=k$lX!Wem+egY#t-muA)S0{AG|Oo4%6Xtl z8NEAtJjWD4yE2LGSp#((H*Jw-nk31=A+9&3%_-8`S>>N4u?RSR1$|YSx&m5^cxwJM z@HyX+sHui0XZ}Q*7?AcPY{LZpVE*v`0I@($zpnSNUCWiS^+K1l>2I&){EJV@qaXb! zf_t&1z$AU+r#>lX&YZJ2!dh91R}C3#seJy<@BB}>>XDC-!Pb`ax@|JfGSO}^m;Hl- zv`>N^+S=YGV{)T)k5zH#-TypWn(&}o`1K7Pi*5B;{FutM=`oQ}?M9}NM zeBzUob0nbP49MAE+r7SAaN$Mrpoct|;QI4Vo|MUSB!BmJ?~%WL`#UHrEu8xRm}+DH z+0T4Ne)1=OQpS^!e8V?*RAceM)}*XMb9*yz)vukLPHpkbpD&rJY-0YlCQ+`xk* zJ#eO@38%9tealGLxHry$PD~`%~G#;t)RmUIu+)KXfx|fdgYWbOv0%E(Q4w{LE*NVNN$r z0B?B4nD$K#6byQ1)y#pZI1diYzyW3|S*=72m3Bts?oOI=DOsk7ZPNV!+&7ZE9skx2O+0idA$%HSX;q=|BcHdHpy4(JW< ziysC!?0aovEJvbc2l!lH8%3EX4?>pmR0a&=oYbwIdf9f+OYU15H!r1WMiB}}$I%al z@*0S3iGT-vzRzoB+lzpbIA)cgYVmU^Z@I7j_xixGKQ{vz^894k$m=g|qO0Sy2`-AC zx^)!W;%guVCq01Tn66tK~AxRZT>DF8usd0B@J)v}QsnDm^ID17)%VT8NnIl!nIbip>EwAI?c->}c_Q zH2xN7F5k~`cwU0Fn8Iko^jT%;Slh%n<9lU}!B`Ynxs7#~a#sQ&P%Z(?R7(fCv-qEK zg3|uFovZ3u*8_f#o%ANpMwQ{Tlw*HiWM*=DewV{oD!kOaaqZRpT(?Fxg3ke{Q`))+ ztU3%d7}s41$V+{&Ps*@Qhew;q9c2QAXP}lkHW6Q0;5_#!Gejl^jT+!We!ntaI1>gk zwzT~=<_7Q~vv{yu9#|oR88WC7!&(*Gk{Q{2PL#dH4^H&pB3CzXc4w9tLmM2}9!e*x z*jPV|B}(N}0V`y24u^}?`(4*6D5a{$6_m>U`l851*a)a!;DH3!W9oky>{$H?^O5*o3nE6@&Oo66 zybSD(dHrMYgM9L)iw(F} zXh;OjMTzgUw)kUaM^5cE003;2+R$Pw6QC-;UkBXA(&gLsKXLu)TFnfwekc{MRe*nF z#nrW@zeoSTzW25VhHL(ARssR=w<_%2l=vy6!EAp89QmpD|m~et>n&*am!_SrXlV zc4PvveXRQpslr7VUme4&A4@;I1oy>+NHQwMHBUg7N^)gR60?h+QRHM=4@5@a%6)1d zL;R;UyjuCftr#H?z8|guWkwxd&T%>4@tx@@DM8JEz$^!?EX9>)x*fLwm)mhK?G$yS z?+xnKhW0P7lTyCx{vMNJ{d?DE(Qk|WKFt5}F^lW7Yxqw*T>ffbCmSIlIEw_v9AvZh3-`1E4afJii=(L@ zRd@T?8UWLn3$vaMtSxaJ2mN235yZKO^TpXOl5YIkc=narP0DMhr4RFD|1YkSQidwN zUqwbrUFz$xn#fw`_m^v{dXAFMu<&0jWghQ8Z2#fR)2V}nY{qj!{_AVR0z}Fxs)>-g zHr&qH^-F(`t^ZWbNy!PcU+QP+kyG9e=jty(7LBn_87SMp4N!i-&;r0E7KX1;0A)IB z1?!M$VY!mtu%}E;1UVQm3?%{W5F4`1y(s}T3S3P4WcZtS1#A`ls21`$uAUI3@viIm-20$kSIQ2tjUanPTyCnD&pc#b|5+HJq5sCwx4kT6UWJcQ+9raV7bndgJa!pR`-ek1F7tSVW=TJXR>yd zPy!9~-40AepV2zCt6=YQZ$5$`^~^!_%bI}!%AtLOlXBPzfN@%)3~}Q38$b%cN7aF9 z&k+Pn=R>wnU?8iKK$7idk3nA>939wnMr8t=hE%8(Q|%J!bS~7P@Z}%1PxaV zq;kB-f~c*WFQ)`}b~tysmqIuf!H~YO2ZFiAK^qMI+F2xIx{ctt>&o?lz%Kj`V~sh6 zOj4t9)1d3U*U#WqxAW8oy08h3Rd#Zft2tOQJ6o0u&f9f^^qpmUDfE zGO~CrfOA|&2%HkAt7mCwKV%%wcD6?ZfdQW9(GEaVex`xhGFDvxkhwQD`Nvx39^2Ln z7<+x5{DU&n>Q~{6%Iuc`H@#v(Iv6pKj-Owv>1k4C^jFLh09;n~9dp)Jwi>h#+W>J0O&Lpc-8w}#Y@3GZW{>d zGS*wL#vu+3KqA;X;e&M2xi^6E0RAb!5CBNZyOqW!a~VoAyPajgS%H)Eg;$W7j;#6` z8-on8Ty($7_o8iBqw4=CfSq#+V5F6&rdB18jw@1Sli+fI1Up#|cUojVvT4!hbhV-x z@8SG&5;HS=TjvdJR9P|-5l_5PcaHPvAGZf!X!1G{ZIrksOS(P>SZx+Xav4KRiSKZI zW_ptLDYv)Zvr3%=6hQy#2VhH%f$3em56|he)P{JwAd3hJlSLKll|g&;-!wr%nQf;4 ztRqRm&aJ?*2>>jZ>si7cdd@&n(cgufGC9Hgfuu(*0m7LoF%|%&x}AXjR8W`#Pq<&< zc{;!@BK`I-y^nK6CSYf#Q`-;lh0Y$>>FhnmpauCO*d6Pw15l7px-z;V@k5hoa$-QY z*_UR|&x_!vtZ2*QIV*wT1~lYeMWfs7o1g8eu2i5QSXS}r85op_000<6JJT0e(6IZr zo)FAzys!U$yP!y{f{z0dK7r0qyGvj#^|8JO8jV0U2Q2eEV$Cw=?$hhhD9#%5 zc{V&ModZ1!L#cPlW4lA217(XTa|YN*`!179SS`OF`i;PM=r)XV3oLt6%D?Mdta)YH z?rNFfH5iuxsrywu8ONG>DLS4)*Y^x;=Y6KeyukbpZdOk<6!uLuApWbD+*3*_Xn zlbl=l@s2U^IjZdI2-uBhY*w`e2~a#Av;8F)@fKL;Jz0Wza9&N))1$$*^tXm&=-+~# zHroN88(__R?yE6A)yK+8O?GQz$lux;l4bBypSn?#UyMN?*8zZtBcR!2F6*IIg21{Y z;Jc>`o&Z1n`mg10H7ZHoaZ4mY^{{5O5-t2U=wqy3fRcBP9hcs4i+()z6bho#5ByLhIbaVJ&vHCD9iUU_ znlIe+S^4`L{z1;}?y2n0k*L?;n#BB`ciwrL1h+(d5X`AF>UUI+kmW?)@}|F(-~8?0 zm0Rz)LmHi~j3>%!k9)3p+@s}3e&k2w0r$HQ9$30fAzWQqUvM>8Gx%A>oIgY!#yR=)My73e8hky8o^8WX|k8IM2GdNiX ze6v6NgFle_UUrFm`*(g9*W+L?WO9!t7ImfD?^y!el(zD&yY7--{ncNWx4!kSxmiSR z6#O3aVbCAS)mL97-}?M-l80USAi3g-2WWCdvn99ReHVeAuXx2PD&*tH&Xx%FtpM}hby|M=w_hPQ{QW;l1HLH0v6h&G zM0O;@e9QBmFW>OZ-z>xJEje-Qm{rnP%d?*K40+Ra*OHa_%-#1$hiB`WSdI0IaeDQu zU(Gqb&!v}hoY7<07M}4CKeCkBWM6Lj%q{Yg|Mau+@sEDg&WXD8V~|w1b?mr&)3-cN zzWE!!Mecj)W!yJTrc>EIdQ9%R=T7fBw(E zEI<3RKP!)V%r$yaWan~_S)6|$9sv6eW?#kBC{wNbrqE+LPkL_13J5r-@HnYgZ=yeg z1XkaVJI=?d5}K}|t#c;%6~ODtxIKwJy_HLnxRUJLfqWu1O(L*syZN=c>%{0 zhZbn z0t4Mih=GTA=pTc4*}1MV`_{j&=tm6_yaGVNcqg!2?u#E5WOguhZc65$ay-j1cEErK zIy1eM-7lCRKeCvTA513T|wCTMTAWoU}dF)Cy*XjXC05;SFbYg2`X~uGH^l+le ztQ-MjaUQra2qIhto8r92dt-1aU0X06*2zT~KrXK>uaAF=ZI1Jk#y(%1f|%8D3n0VV zcl#lgx7Ek11Vn7!8^^!wXDM@a?T_+Mj!|L*s2LX@lS-y>jcjj>RV^UyaMr~-rn$PG z<1veav%6BmxBRvK|)ZgS}G!#lU(w zZ@S(T5D)>?!{@wtYX?*Ktylg`RXq4j>Kjn4)iTXd@U#{b- z?WyW3|GWDIb-qKnp7K2&)U03I<=V_8pbj77_>MScQLm@D;K66Kopz{d!A?qm0d6(v zMZr?)t7V;5+Uckd>*qV$BR}A-oA=7xI}E;}zw<^vuK&%122Zq6nf7dYt*{URLOy=> zKe8|SyDcDnZ+=nkYyQ2?hl$TPjKwdu-}{F^e))d?J+ijBF7WS4-J5M%94`gna{g+- zFlGBo8BgO;l_9^=i=Ptj)pYALwuAi#ovH>2o zJ%%TUrIO!ij&fZNEp5U_4ruc9AU-f$( zkE-s9bCBL00A>CZXOEBaALqSpUh4cHPduyBi-+l^(zic!K5IT{o-i+#d{;i_u(e($ zYvjbQgm>AH&8$yzsk_+T>OAIoE&bL?N%;U2*9Q4KrzceACeA};u05GGwYgmLnq1<3 zLb{hW#$_Scv_b|Cn}sN=n>MoQ+f;2%_WR=)N4DzNkI0G_$2Y#;=Rg6bdEBF|P4aI{ zl%?G$fu!X=HC_|#b0`N>Nr-hHz4R%PUJ3Tefkkn@S~q@&>EOd`OsQw;+EX{4b-rHI z59OY>d|s`8loAwd@0ea^@@WhmxgDCQldm$iQe$Y#l_fF|hQHVNtv+7>@VO3D-z&5G zmyEFG{ZTe5{#!+c>-<9hxnAFu;~VE9>hU_e>hn?lUizN8-Z%G0<$Y1+>+C=&n^6}X zwl@7be@?0Y%dw1QjPWUdFUPtrNyFDvtQzE>(qB&P0|PDn>ik^%UBMg~)P;RsMR!}G zoR=gF|1p`-G+5o}epn2gXtJRN2 zkPs1#L9fkHb$I7&t|cGQ4=^H4X3DOpOxq4jQ|4^A;9e3}!MivF*G_4f))pD-a1F+W zpm_SiKJLnP<7bTky5QQbG2&{n2ZBIiEJm&LJ_L>dj?oIDTBgqZAe3vJB36#~8gOjY z?8w}n!%~~jnRpIM%p-VV?7=m~RK4aYQ!F*>%*Osj2+CR)2 zfgdydJK1JMSiVvjfwgoj+z$kqV8^;$F#Lhd7A&{s*8q&|N$@PctvfU=L5_0GBD0yE z-Xma*fIk6H2zFXB654}tMmrFI#(VvDUEg4p0bpDKJ6)97v;Z}R57$qvKV&e*c$r~D zFx6Sr`1=Y0L`xX-Gp9A$s|>_olA_;YjA#VswVN_q0GOtg_Yjstsa-PAVku(`Q0@>( zOpKvo|ExL~0UwnY$ftrkx@6M@qtcYJNIi!DI_1v^Lu_Ae%YHi1c_izU1+aBZ8ME?C zzh988Ndtof<}AUoqrjUE+77uR2t6~mu~aEak`py!jGikE_~3eizQ7{H%K@-MnZ%hg z$C4p=N#GRMH7iIt^HhgPS?o8*0rLv%O^5d}Igsq2D!WmQBallbOrJM0;_3UyhNq;A z$-WSa$9=u)i@1-%{Hm@;J5Z8bpVyQHf^*W4DfP4hRLBmzz_@f|Ot#sMOwE1+V5s_4 z*)74As%6_H2h69oE$NsXYmF6CebU1&zm^@>16XZ-@80Aoz~wj`4& z0AXCWSce{WYm@1bzFMOtQ`jf=+kie`w{JA4GqIKjgFZnU7#FbJ`M!jp8#0e76Czny z*8oL=<$0tkJG(|og5|kN^)(Ga+f_%UeN1(-{`q^m>G+I z+x(TY5K`CuLz!%X74%V0Z4+MHa55tLRX%YzR3&0fcRp9n95rgIJ zon_k=u=|-zzExibU^|VoG-V2Z(2`SN4=|5-7UZf4kca!UoIkKff&>EQ2EZp8MCv_) zZlpmVj50OHb3C;>efSY>AIz@k#;+;k85rNRvID`RV3f6MAN1fW<$m|OT)uGU$7Ia; z219*YCZyZLc`;DT$~e~P006A>Ox!{Pns7yyKdd>Ff(M%%=5o8YC4*K|&fI;c9IWQ@ z!GHXe{L@E2C69aC!{yt)?d#-;kAJk>=Yo@D?*`yR{dx0a0FIdgM5=2Z470v>fe)1v zLG(Y}UuwJnemaR{YARxRRf%$c=XS%!4?j7%Dwq6b%nPV z?FS$lYg(%k45+^Wj+sutNZYqc9vWwlWNwt- znP7j+@dWkX<5()#(<%TIXMv6d!GHK3z*Y25_X7&(L0bpIA?+XZke5vdAQ2yc8j+Yp zJ8Ts@@qV3B2{3p5lwl7jIYo(BdeCbQK$*=zEugWj{!Y`1`6d=T%t)XmPc8T2g{#VFV zk9`aip8!Pv`Ir2x-1>ztQr3F#(WhgXEthi9eJ+%5d%^SNl1nd@3H+-T5>DEdz^5{R zWHW%i!LWPc*l_}4_pF>d*NqXGp$)W!#u6ME#p9VkJhub`CIDz;;so&A$l-A2znD$w z%avpmJpF`^-PXCMj}a53u@?hgs@r2y!_M|l9{%u$%XQaZCr^Lovt;M^DVa_ta_ZQQ ztmjkdw-smxc166)SzNsWIp&n?>s^3($8zetZ?mBtE1Fw)?w@-j5&Jxic z%+JFf{t)@D?|gy$)^Gi`{N5{nU-m`^%Ea8kI$Fx-Z~C14$)EnQyy!(QBI6~1YLG*Y zA4N!UU79RtHroJw@toChGQh~dE_m!3jIYgZTaF(+rpaP+1+;UYV^z@)_Qx_FO{H^0 z6NNzPh`xJFnl{=9c>HJV;{d_~3-PBu{z-ZL>t9cK<$YKm(-HL-Jfdr_y_Pbe6&o4^ z2@bj)O$b`e<;IVHN`CEEe?xA+^B(DRhXmkGrtqm(a^mC>dFe0zBH5gKot{iaU{+VX zOV-%lKrX%PzVgH;K3RU{SAIoq_~3`=4*^)bUe1|V@|xGYMjroVUnY-v?Bls!X7K+} zwPwEHT07W1kT<{iuVjC3#AJdbL$Z+LCyvXDe(c{9^m@UGQ)HHAgx}6Apf?}+$VYPR z{oGIewEX>tZlI6Xvx*1(&X!E46Zz9W{Zr~du#sYZ;9D?(Yu%QeV@Ku4kt2qi$mij` z!BEpEnhm+=q6_4EzvsKjbd7!?5$pJoV+2h?o*-*rl!ZS2<(Ixx{_-#0L>t1yvsRC1 zRA8h3m0$Tax%_?)kSAYvEp;MwWv@fOV%Qu~E&#y&;upRsFa6KINKh*5J`&rItOe0L zyT2#j@J(MUKlgJ#C-=SlQW@=^W5SYFi@>~W$%PkRNJimLfBPrpBGhJ4$%eVe@K-@ll0j%W6; zPsRQo>!s7-TKKV__;LA_m;FDo1Xvr-reB7BiG1P{pI|$l_xx{{?qEkoqbcR(=#il` zk!0KyGU)!ukNl|o^FM!#W9H``1VDE?^28@UNq+DLe^4$w|013x;Qd&y!(Nx;{gq$+ zRr1uQUMCN@^ip}n|M(xWKOU)#$DUT!^6vM%SAO^RUMc_OiYuiz*uwFp?NyXmX0f#M zlLiv{GAS4RIO-`Qb0FgZ_Q|jfniS-OR_bTzIgjcTBtB?TswcJ}frB>M_FsCAtM9

shXXIO2vgCqe>sDkgSc1X{qpl7-7w=+cdZp^9S2GFyk6cz6ubv%57LG%@iJ6-+#H+;0!V1^efl^u_-kuF0j~n1kpAn>uYx) zn9Ll&ZtF^~4gE>_Ih2r#Ac+lVMn1IGpqw3drC@D7(2w(<#4WL{uB#BtvUh6mPEUh9Df15PI09x*pHfUXQA$o<9d zaIknyQTkZRn;Kgxl5U(y&FxC~-N(&Z7}lkhLXLfe{f=W?XN&yzioP$_X0+RJtwr{< zIG&~LI_&xJ-F5ze|DO8eKnRx~lWzuzEbyD<(AdrF23&_ttpa)UP}P}0{XH(v$_lDw zL96yg11zPUOTIt_WS9>ISe3xB?U1R0gMj43T<+dqHM+Uxl zxhfr1lsM7*tp98t9zgOB4rp~=H_N;G zyz@U#pi2rXS4fEO_wjbUk-*Pnsv^&eJ-4dob$;DnGA2Wn#)^%=VYK?Jn+X(Eed97* z1y7+JU??gRW6C~w*_84VnWWc6uqn%$`Xs(tt@C^0!KFVpt+f=iveM{r&k#OQzDoZk zzALUN)fbsjIRYZh)DX zSk^OCereujlt{m|JNtks@ne>uxu4v46K>&~o=4fhrv&fQE5v6F!UMxS*qs|JO# zv=tqF2xGg;wd==?;KIEm8JB?hT;jdDPD;5f*ZE;A$k{*ggp|y}k^PBvW{j`w18M-3 z#zL;Y=fvljXj5r#+M9Y(iu3vC9QZnLUPeA6RBcM{tpVezE_2=M=P=ydhfu!DbF>rM zULAX1XH_4zl%2HBSp_6V{Y(4DfP9eejWYl{n<|;NqZ~xJEB)^%e|7e%ayGKwWCV}* zx~y)jks4sHe;z%-HGj#_R0-G0GJIq-INU|GXq|mbr32$vFg&##mhK z!f-Yf=F@bE`!(qQn9MCAJKKHf2w0AGW$)}AEcy7)H-293Ix~@GXIqY*JfCGt@j-CT z+0nGjHdvX4EKi4E6%U$O0(ea}5(JxC9S2r+$cTmD6YZ_W1$p28{z&zRm85Sp)qewX z2z6SkDLXscvbP6DEe%lno*jXk-Q9gXkj8t#Xldhv63`A*LckXRTm%ZdL^#$zN~yB6 zq%pc7AO%(%mIz&~Ww145zzyTiz&A>Xo81^49I*W;Md<(lj)8$iJ+OoT0ew<1XwK&Z z86YSD@Wj^kfcGFUJez92&|dyN8S!5Rh*>rd?38_$V?`SfoW$>=3CjFhiS%Yuj%*KQ zJU-xg6554Q$ry)oXZHw<1Cu2JaMSTvjvqfR2MD@06o89B+QDcqRl6ax$VB_$^Y4LA zFj$dE$I7`Pc!}}Y-94*-B?B4YJFs{;+cM8CTL6ztSwa)wC_Zno=GZ9PqLxu~`-=CD z3A|NyA}8E9cJ!!BM+a)HTO9`WFm9?B*U}#j7`(^xai0baGjI*#gQy(KA1-ws5kylx zB(gmilAQ`N2zde+VmenjAb=6$v#;`x@y5Lf6mecg2#B@`oahaDGTJ?mejnupX9|*R zfZ^si!4aHa0E#WBhOtEHVf+l4#khc-2mvWF;z7p228}Y;`v9wfiAH_bK~H5ICCbq* zl)=RFFb|v;1E_3=_5H!ZUm~*rRf%?&O z!gf!_GqSB6KXR1JTNqEs)4le` z3Vnw$^!JVrM(R6b4TBNR%Dn@4z18oT{RQBB#rDmoW3u+mCljuZb9*C}FvXnU`DhOU zchCp=Jy@sEewD|C0lX#$69tT{^zY~P_tX|H7c6fM)sFE&30ss91#2Qc7)z{Sd@w&? z3v=LZx7U-IF+@TBz&u3uH#^T&R!u!?1{1p5c?6WbOgGjm)(83s{Ro|=foT9=TGAVI zsb3JVP5>*Etu@9c+{^JFPtC%$SV|n@w^{-`stml-v92@h$-oGE_Ux{*kS%8VTmY)9 zT&Gtfq~07Os6UmhVPCelVPE#GBBL@Qay`S!Hk*_W=y!k~95ghWP1OF3Fs=yFD)TDV zA6TLAJiK$z8*=^*cpaD)!N}N@VZX;Y8&7An1?VH>Y_z|xY@Prnb=$JPd%*dj?nAk8 zfHshLK;5R`M2r`}QqUo@soDvE0yS}B!XyLSzct*UUV*+riC5zH)?hR2k)2F|;0vzf z(M00~ zZ5bb!egLc3))s-bIKzW}g1y1`(2mV@-A@2=gWjKjHEhN?VQFgq9c2nd!Rb8g9Ft?NGinrjEpxwv0w< z(^)bYWuHfC$FYw6TnA;&kpKhxGXn@4Y{T%uC?jgeu#V|BT7v3iK1+I=3~&HV8i*c= z4qyXSfC2vP$jsP!alT8rpDDW_^!@hs4t*(nz-CB44E`A^nc7(g(hoS^WO#<%#&eNy zpz;enaO%`4nd~bI<$33wWFOj0kkX_H#8;50fHo^QO!XqGJD6YN{e^GK_b%Xr&NwEl zhS2HC(TgsU{j+DJ3-;dWNIv{8pOagE{gv{Vs~#fH_{!_#3D-PQj_mYgXR9x}=f<>$ z7(cJ}h-5dEw1y4Tve?RYu0Z}=GTD>*{d}2wfxzeO`%hE9cHV1D$VHs-u)SA4#|6+@ z0X~Oa&vu0~f=;tR{d~cxlj(Z^<#7e~0O|d?BC_g}(13=>?%p2tIm@7LDWf>X3w{Q` zU0O{`&lkM%0l~0V`R0NP&XXVbq3@S}{K!Y-vp0T%)is9wE`4_F)8VIr)%Cl-=eua@ z!05OH6JigH_R4;YJ!jsd>K>ePKtTv+1aUvyKt%wn(O?xdJqgM|KwzSuPLWuki7o`$ zG(@`CYkBMxa>nGNrBs%ek?ibjDN2Eg zvzf*j>u5Zm%83)l<(bcZj{N0czDeHo_Pe=`Vdr;u$I_g)TxMnW59l<+mQ!6-~p;Lu-43%pO4k=K{6<8wlcda>pmpR zOWorSdauSh{X7^fqLbN5hFH6{TJ$`}&R88x1;4A+lw0q(OK!RCPMOYDlt<3#ctKXx zJMOw$PMv=d^*#0>sAl2kz_^x--jF2&cWIJIhslPpX^(o$)$)Vi`#o~?W3HkY9Y1*j zBP=sioLQ(}0G3P0E!bc$yyQM|@x>Qv0x9*@h)j!=LjWT0bFuvU7ypPn?|I*>{_V=K zKW*UhWD1+wKr(Jidgt}!*&p}j&{lH2)c|`WDtur+ z+0ropMxn9b`-n3`(uAD}Fs|ZN8Z7QIpU&iu{`mFs=C{60*>26xVTFU`OpYDdlCSxi zuVJDf0d4ndcggKq~8R+ zYNZ*k@CV(6zdh+mPa>1)zx#LpPHw#MM#E02-TT6qZkLz;)^E#y{V$ix$@4GZ+6AjO zBg>5z{kJdOavKx%ur3JPgO2Ss<(t3p>*PD1|9tv@NG2j{x}8Qs&ZlGDi#_N8SIE!& z)PIy8{gEG$n{U2J<`dmta&OgY$``(H3$G(clIQ+<{*8%re2V|eJ^~2cfDb&C%dfb< z{NhW0S-#@hCrN*ReIEQ`_#3(p(JCHGnJyM`pGz;1AN%qDARqYPhvlZvd^W{pAjjCp z&-eD_fBe?V31~k5f_~+_cqhm|A!h*1zWJ^1;F-KK!q2#0ZFd{;AAaKB$#;Lx_sV(a zo!~i%#1f#PNV};QzVlu3k&k@DfS5R+IpEpynR935u6yp0hj%*k-=VMF55YP@vfJr% z`!bqoVh&`e-5!!z{KU}{@-^T1&GKz8_;yX8MKU@4c+GTe0VCFIac}=^-}-#{)Qz8% zzj*EIm;eBMhO;NEzx~maemu_A_C_;Zm+cnM8hS09Ax`9#|NB+)FCV*68YnRWdp#ZV z3xJ~X16ee?@@>!m7Wv!1`D=Oq2RLn)LE)DMg}w4p0krrVd{~Sn zeRL!&b#Uf0ksOi8e&{ia48>_B*IhG|CKQR1s!eTJr%L-u-=s>D7tr?wG zw$2$e5>UnlK_kLxP+}lcHyGLZ(*euZR2@uX^0Q9~VvEl%9ZL`R`$2^}r7@u8&n^Qz z85~qCFY4dLAVCZec*aQlu5@<&eg0hxZl&in3Z^dyY?TZhmB4!d^;x;m7*O#x#h*PR zCIcJY@a-5_}9zG#pl)q z9pf{~@r!*dWh*|j3MLKgS?ekQsSJn#umuK@2$VYP6N6xfeOCr$<9Mj?GVta)uYnlI zienJRJ}a^!kjc%;CKxMTLxq`SBL~{5@6vY1(wJpibewZLwO>AO)!?5p3*@yNgU9ii zmANX$vs~BJV0V_|C_g1jV%)4%*GtYOi(?u$=auK1@hRuV@AGlVz=wMF&s+i}x6j*M z?SCFu%BCU^?S1N$D^MyhMFmE|SSFodG5@;*@r-?dfN}0Ks=BdkqnCf%SYI_k*e*Jgt~URUQhE{FqL{>Dh9qc`s(_kV1jdf z;-ykmE^AoY(=vA8Nj329z@RKw)v=BD#x|CJk2cM1Qk^a<^+*QxRj-e7P>!!ZzXY6= za~;us%x$QRqcp~q^HLhNS!-I5w&`{Ml9$qfGH`ra9TeLV3g zOKO+xi)+s1D#}~MA1KyGWL_)*Po>R>{g1XMwxMiOYL}JDi0d`JFWHm=Y#qlk>aXf} zSdta&PMFIIkkJ8rhsaX~({8T+cvzWrcKN%Fr!yIEfQNOD;0YlfF!F7SAJ&v}R_cyy z|EqxHsAJ>%BLig;(*Tx>$tH1J>efd5LWCm?s|Ir_eYhK?|Z?AHqK~*28d1iuZX4uZQ7l-`tW62Vj_I$XOuS98Iz+iINCWXfSmXMl%PNnWq@KCU6y*ElWDKp?kQl(0FnrX^#@=) z(KQWVE&wt(Ty|gy+CN1ZSupj2#jD+u*#b;3V9=V&)^N!C0XhTV$N{qi0FMr|?WWth zC_!yyNgZI*HAc#wu?Z=Ys2f0YIhIrO%*$>oA}}KokH?Cie)E zuq36IhMy{6g+W^a2B- zJ<1!}hG%j7z#Im~-o;88VE}IEDuBz&cr)ORGKbsS{JXORBM`*4ipaiQ?*K`#(rxtt z`q1?XKomi}0QK0sk);O!!VUoD8YICy5Om$`rE&6-zq)1>IDK$1Qt)9%fn@u;dkn~^ zyl8v@0At+8(w8i;IhUQSZ3g-Ps6y}=u3WF*mECiDWH$zg5OaZbOK<@LMamqAaZ-Ra z0Js42_T^xv{Z`*0{9PfpR`7)PZmREpbx+_r7Bg>2lXQW*E1j28Re7#*2zQ` zmcRmibady4f;ARPnSmj#HzYs~?*|AC?%`xSCHoc`eq|*GV+D9acR-e~KJa`1E@@8| zbAm7z0QdpOIbUg_!AS2zARj?z0$_Us**h4eGg{a40HR_3aScHx+W-`e35G+E7xI7) zfVT&(hiq;D&V^3(ARYQbAn|x=fFO*`LnKt&DONe}oE4A54)0RRzz9{>R3ey-ao0HS>bZUAgQ zIp8~o(B%YLs$IkPsuL0X1<)D+c$G)U1riWA4+fyeyE#tgZ;@#p?Ox59m_winfXmYv znI~ya+6~GcJ_0W>VDoi<^6 z!1iOk0r&(NRC}hj+kHw+1n6?z5k#_7@Vr+_Vgd)^$6fWaFdy`@*7^LF0N@G6)7e5B zGMPaK_X*~5UseI`3xaUfp6OU|eVSdw{DE;BpgGz@u&crkSSi5RW7+_%-~+JB*4B

V9TP21mRX^A8&bmbxVp0-8O!?XG=k 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%0D=8FZR%EJEZ!)1y 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

${J)&AW*ElU}ENc|ViV?Vs@<-;Zr8PrYegyYKbv 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

E~ zn%_h)9BaCeD)PCcsWwPT!CHY1zBoo_4jUdl88wkMS>_ZDO(HCIh1OK$xbOK4L%QV8 zZp(3b$?<^i55#IS)LCf^0|Im$#ycyf`FtP?-qEV?`*cF@{lC#*ylC{0i8CqccIKRK zJe%hY!E?~xM(VNQ4Tn9?TyJ#!sB_3lFjU4C5@%H@2A9oXmA$zBjbvsHlbi>~;KFny zl_(L-UrYe-b*5vI$|&d)3C{u$tTUGTyc{K#4DEwtbuB97hy*hY5+WAQbB%M9E_!n) z&=494?OBE-Al*NCF)K%gxP91uR{Et4wV zCRdTjYFxl{T;E(dtbL~BWu&Ozlc9O=%0(FA- zLJOY z>EuVt5ywJB?4#+lBiTg!Bg8r!stU9FIckHq5YN(1b6#4G0rHBDemjnoj(l8 z!pDLjAIDXd)`M@5U(lJUbEoxr9t=H#9c`H1TO|5EQt$uvf~%$-R>z}~8uqjFOcuV- z5h`=uOO#sA>66s;0bG8|3}vim^EPt%cZG}}D6#=Q&jM4!u6v!G2rCLE!r zmwBKjpA|j|Ln!4u-9Fed^tL~w!|j}R`{tHp;|^^_a-}L$w4|2OW&l>~H)N3vIjQ6Abb6!Jm=^sae3W74|_ThS|B~Z2OtUvPe*#>#? zbn!Vl7l|C&-7*RVge}W@z64G(q^XevZe;8HXY15xsb#!lrS(@DqNy`b)>GF|@f!Ca{RdBy z!G;~X{1x-N9apjTX7{8muGwLOw~kZA=QWS52lBZ**H06lyC|2uv-myj_(HhwB(~oF z)E}x?JJC6CZ#Zu;vp~RQ+r_x&KmPIa@%j4o_~Va1l9mGvC;p}R9(lOc)rz)aS{M!M z6yx}uHdu}4m3kECZfkktBlG;m#^7pL<2sK)m$-bQTL+!{;%C6u-4Q=I7QUDe>b_~o69v48 z*j}@2dxGn^_jl}b&QBeh_}R9DiMsCo1L;(CJ$a(pTwP#M{xV1S#(mXc18c}ptYV9m zD1|tO0-`=Y@kIDGlkSIq2>~+hx%eA-c~i_pv*O5BP|)?D9&0Bi|2SM~qo;#pU52;*O=FBg9aq;=3x75AFm z-t=N@zT0fw`HxATD=~fR zbOEaj{{+eOE%E_^;xFXhTfCKjVDc2HNl6^bXg3_}cMbe~zy|{CBiDrK>qzdn`fS z{x-TeRvL05&@*NC(I1vzc9o2m9Wh9kX`|5pT****f44_PFNh8*8vyZ-kOM^vWm{yk ziC2uFZQ~paQTpcoQ>Q=lcWU~>?yaQE9CFZMJ9FT>O8FjsVk9ND)^V{|Wy|kE zx28NNxzNAy4K&mCD+k}-u`c^RfG4WxEO`cW5j5?L#I=&c{=Dx<09G6%SEl$4&q41I zybA>868p%Gbi0T;*5>66aS|kF7ynLL zjC>;Kkg0~AM8(td(?if+f144BES?+@`B^YGuygWJ*Q|q{Z^TB zhy+O{QAd!JeDvo(%Qu&KjFHPEA90K~kWzE5m1C$#sQIHh-(wf&X}8)ZZ#D*GALW)8 zwwkU{$;wmT58i>q(_F_WLQmd9Il_V#v$GP>KJ*~z3Y8oQ|AFZz;6TTM=y=`dXf!?pQr_w9;@>H*LMBbm||?$4tjcaYjUJ>Nb#{Sg()A+k3^1Que`y zgx`~Xg|hQf2@IKvyv~=DZ|s5-e7`!;2A_ZcD$*Bi=30baRD~IDuYYv>7x_fxtGD&c zwG2O>72H#=_~^v=u#q3p%}hp|7;GhDr9&1F#&j6VX<>v!f^|bE`2)}zauAltLI;Fb zT!6SCK&TM7!yJn9Cz3_YQL>$utr#B;*r^aZ!=y08!b~HSRWMY7`6vd^_&Zu@O(WF< z#vHGYiOD?M2zRC4(V%)BbYj?Ru9Yh?cLxA}ry%wFxdG4t+`}KZ66aE#ovcC@|%~ z*sq&Ihu613SuL0ynfONUP;!)1w4FSBkA@@9kO!0J-h(M~CA_kq&)t<*Hz!up&4GM^ zIkWY*(^xZALu$A=%=~QKX!q_YV~~IjeXQTEir;H}JCis5bk1de_Y9Km>)B4gjS(SU z&2^=~!tfTaw8S1>(=DS|$yUe09c()Y1Vic!ZrxoN&KskNJ{qg_pIUQzH|}APDn>Z*P$2qGadDkfreZ1 z!cG46nlAa-Klpy{|Kpgy-){zg71$Q7PJYa5eShkXEgzm0v}~Q>F%r<8C(zPK?E#pb zJnQ_yf8N$~kHzN05Vh1=a%Ro~?YEKW35b zEUw-BbJ~>(uJ}0J9&yM1a9aDkEt!<(>L`vf`d6S+YvJ_Q0pg`U?qKzvqmR$`%HMPP z@ca4s-+WHbaveu4k|Pm}I@zS3c`o;v+*o=|-;3UM0Nv&2xM$gg-tr6I=QHJJ8Htd^ z#~ILw$$`JopYh!GcezG6i*|&f1^PKSUoQk3K^sfh7OyzBU4{hpSvj4VB(C>(% zZT)T2y5E2Ef~Nh_5+G};8N35-2eL@%Mj&Pqpl@_dox5{LlaIe?0!EGZsO-Sk|{h6RG61ZWY(z zfnmJxY|`=Vy6lPeXYdc83%7I9^xEnR^%wKo4g2e^pYh(FNCq2W2JW}4=J)RU zsS+kRRX@vlZZj^II2djJ;&XN^IDM7=Jb+ZVT+sDf{`mDb9qO4aGIXBb=v@2vEo*#y zz4z-oTmEid)v=8Be+l_{^RU~Pw+*=cB*W+HKf55~yqEMAC4~5xH_Z`c%F$nYoNEm| zG1%p02f&uU>BiSxKKht%sFGX1ym!2-~hiALHJ8KeRp*8J)#>ehKa|^&j7B@*DR*Iep&Fv9Gz0 zXY0?;^z_@_@mVeh&-vr^SqWh77xV8YtE~5S7m58$zg~U`es6Z5#QVGG{ciWKN%mnN zf53VWrfS9?Zt{)td-_w4r5WQ8V%5^I+0yv!USP@R5s{I$1$3M<@wew~{v+}q+Arh} zbNyL7z;iMA2fye3lV`T+Z69dc_QR&KSx9fst~t3a5e9Y1U0ndb}%5$?el~3 z+j0#S|6!YU+079zHopu(TM`iwsJGG9nY=uFSUK0W6%eOli7)Zjd{1U#c7aia4}O5a zFbZ>aoyinnFTO6DPqx8~i}}9beE?U;zOk-Sm4}k!AOJ+`nV*$}7Q9G0p!;!h9`0vq za3dyRx!+>Zjrps2PIp|}=@mIY)uyj?ibxtGN+|8EDlo{$V4hjTW8IcEU&KC=H<-?q zXDAW^r;gMymQ2`%S(XBl-w5-SB}4 zOehOOaxXuxdV>b$cgr{0I)5gO{aCTs7v^?} z1@K%@zu>vW{Xp|O{yKS+or&20$~+AlIT9%GnPO$ZroJ+9KWyzv=Kc!(=H2oTaPRKm z*-4MgJF^&H+Tt~EX(%Drk zo>F#EB01re8({h9kw9Ri?JftMmN9`kXay#U?J z`!Q}?$((!%Z5wYBLA~{_TA%j&b)HW7QNN46UKvl1HH*1_Jl-lv9K1|6N9%;9-xV9H z-(znj`;xc)hysIO`K7l=E@fhR7DXe0ed|O9c{B=5$$K(cnxGG1L&ZjRXCm>-Oyn&- z`SI)H@%~5bwVs_mS%M0MEHj_n=>BI2xbS6D2FE`Zaq2pp6OEZgAt>sv9I!5Sq(7zf z_;p@!YuU@{?sXP;i!NLy&VtI||5@x_1rPC>{D`uc@&&nn3m&u2GVcFv>Sd-Cp}j>FscfW*X-b+3!Ruo0h#IoP0&RaD#N_@vk`F%d5H93NLyo_MTnhbnSYj;WIz%D+vzA1-?c>IrXA5jba%Yc5Y5QD@2r3oNyQWPvK9IsOeD2)}#aYtD5d z9%1?9prtXP#JQ?;qXAeBi*{hL0x}4RN09wD@iZ+Z zb~@Uj+vq#G$2|d~X>+wsqa%Q4m`XYg8t6Bm4;syAl^YR&O0vr8%-X}zf>)*@cnHn_ z=vU`*1UtaI#`=ptIg02G8tL4LJ|QO@U0-_lbnwV2N))kju(5MO(^1Wc3G0#YkkgaH z4eQ51nNm3X<$TW_O3sVOkIAcCXL1@E!C%g!4MOP}Tj!qWST%lD^n2^lyjDmZ+Nj4u zc4i{Z?*e2qdCU2)^j=SBp)P?vM%DjJA{>cw%eIkzekMzbzC=I!>}?sp<%HksmUJiv5k@Y7 z?a(tQ_qcvMPkB8Zr{r^7VVML>XtekV`Gg^(=U$joZu)bSpcFp?jUoMbmgwT>?%kCmV=d*X^#l(F3f$>l6VG9X79&B83#4WZM5M>k$_ zJ9uFmy=9xeLe!|hCeH`yJ@4ywe#s5G3;EoeEy{Ii)M%1#`9sr|OJCE+)Sr5Nk+{)1 zRw1Ck&gLS=+9K$a?b;rX$De=x9qr9x?<&w6>-q2h{_l@}{I~!4@$vnY3AhL@bf~%f zB}AAvd&`rQ@xk#ML1RiS+Q=_U4=Lxfgv^ zrvv%VYtGeauFqxayLyhJxPfMA7eapB5NP+y=~}d{-~jjx9cT2jh3iB-&O2KN6}%svD*{x7h@0hS`mAmXg=!35N|Z*)Y1-|077~nTfBHEj9n5v4 zypX-Y{m4BlL@oxp+yC14L14PiS)E&cMx^9@uH+9XnzKMX$A{;aZfkZizjO18jO2vj zqpxBfNAkMaWt1uOy)nj+NKjU+9(Jh5pBQ8=L@;&^5dIYBnWOcz7t>FBB;_Y0dQza^ z)mUFu;7Nagzu*rpUQ_q+?@{lOT|3(@+i8Km!Q}A@42PN-*F;o6^AQh8oed8e_Ga%< z>)VP&@p;&T-`lVIv%S}(|Jj{tzMQ^xk{{^+=SO}JK8t7jclPAAVTPPviJwQuuaeC^&9)>~OAK*D(>dSLNthJTowW?X*Zi4oA0jTQ_yhH2jETOD$tMS3mhBV94nIzQ zMt@!=Jb|xykp<)3?%zq?n=C)#LM5lGD;(#E*v7r+-~Xn6GtXbj55_5Ae-aUs9(c<0 zwp%|zkHm6SylnavwjXfo58Dqh_k8+=@L3_$TOI`E(zIa|gKGN8a8$(s6wo>RCRi8h zgF26szUW`6^{l-JBv$WS3=M}xpWlhhmNKc5M(YIIxOpDk-~WP+s20=8u5G5*r#2Jo z-5o38=WMyqb|S8pW{xun6wsIK5Shtysn>9?Qb0kDfq_>>hI|Rs+0$N0JqxX{gU-{I zZhf6gzqW6lfyyw@L*c&BluJT{QBTy^s)KyR|7 z%erUe;84z0zVtXZfk2siUg)_w?d;Hw_TCv6&F67XX_xW(D0+&dghKbt(0|y)NM7PS ziEbUf64HYw!RGy6tn+NftzHs!7JP>OekMRu@FM9Edjj4biE&B<~x-Tg4LXdn}&>fl}BBF_H@_ z85uem{6shy6`Lus0fcJOv;3KHZjp4SBy=G7st{xHC(GlBgv*!*QEyqST>c0q7bia| z*(#b<0=dU`&@mz=&;zE}Oqx@(Z^kC+GPAPNwA zZl3c&wi$`t$!2E}M(k_s!$%Ya~s$&VZoDCi-8Boo)TgE0TqBQ(-iF+_N|GM3Cz6ZHrlp?n zBXk#&3-51#mOX%Ox}`dSZ^S+XN^b2-+^czv=PE!D1web54NzkZ zo((_*`eCRyrX5kVTqXR?my_S-V%2j^-vOU3S={z157u0-rn8Li%z{bAO-j9JA1eJ= zWHH~2r<%Wm=g$4T+;Z|Q7J8vOUinX|KuKpn&xr35Sv=?>k>X45`ri3=t{;~z9f`cJ zkKi3YQ~n9eC3G3d!?-URN2_3=ZQU;eF)AG}UTH@^xS)5jP)o@TLym2=?M30(35BaV$`^gV*dlBs*^vR8<8~zO*}ds(+79)2IpVDg zvL>9aBEM9Jud3ObLcgzZM5#g07u1Gl_k5Occ|-2m_jN;vf}D;N2D0|EXmG=iH+J}ZHsd4{2&J(Dq;SNp!w0P^*f!`xdVLcs!J&P+sWgVCIYMEt__6XQyX%V_@qJ@J&Jjc?zi#KxTMfd=L>s&rg1>cZ3uOo5plj~i3@0+h$5>3);C0+B0^TM%r;y|}3oq-HDsIZ?Xh|y=# zyYoFF(R8qYPHXJ7&IHdlgHNYi_H}Z-)91tFEvKI$2Wt(7UR{NVc|G~E71-4$Ln>{4 z+V?iPa>V844~BF_^o~CN#XsT&M>v-0L_?nE*!lc8YvXx)9W@VL<3Dd_jrt!0$iAMN zZ$IN1PLnsj>;X{HH|}-L)7OE?gcMql;c|o7Y`7(pJ#*x5O*oKRSnf z|KyZ0XOGD@K8N-n1$Q&>0n}h}WLSmYtN-u1EEE8DLra&-G->=53cz?~%-}08L$*?G`g& zWJNL-D9NCsLSsO~UVem4$G+b;x#8>2IXTVW{A&CAQ^(!5vGFr2NZ4caYutY3{g`~~ zYuYj-Tb3yS*E^e_u#|QbTXRkx?s5tPV7DbpN~wjOGK&e)2!1rbCwx=w2f5rC2;hvN;Q;(HBShQ7qkP?kamz%$d&P#VSx_st~o3vzp zrBNUivYI{__v2lV#;ujJ%U#gWlp{MK)A@5IHPnsp3?XGH;oo?uq3ku?)|z*+fX(0E z<5-8>q5sDbH;Zm)ANiS_@`HaXHh}dxyCXVnIz78TOLBtu#I&^*qI^ zFlJn{<2S8U+y3PDEiR$;BTdVH;qs1aH1rGCZ@i%Og7VoqV4aIdo^kpkjWNmPg^90) zWW_mnVbWEf%ZMi@bK&_#7m0?~okeEC;|TngZtfj@+%Dg=z+}}-f~ep=>8jWIkP&si zOL$*LI$|o$md6dr8;Mg4kR9YWpDOdQN(vj!XNG9hF>O@;q$%;oj{r`ZI}GCwVpP zllEI$A)?=haSEq}A;0?mXPn&Sp!*q|@A@<8N5ei(zlA?P6Q5E}DVe|5d)UX~yuAF-{1Z{`J+%U75@aRFx_X8Df?VdFC2T; z2%AnzpY;#-0(ivvZmx03CsKCXsda4^ zjD6soFwfz~m-HI?)fL-O!5VxiFOQ$8OBm{;jW_rq3!kJ{Ad%PgXzp9aIHC}NHgp!H zzan`wP*DQ}tlHftkVxfQWrAO=P2^-j4$rm9v84>0I=S}4brJ$7(sx9lIM7UdCkp1l zZ-o$>>z{k#`&AlaJ)?OWd)1d6ME=_TS@-!E9ScascxiQub)drBvpn;~FJB7ny$a({ zaCpYxHXq_y59DQ@|NUY@d3}F8-haI3zGq=W%N$%8 zbVYPbd{*{}$vpBO`mRDgH!QV*<+-dd}D;W8nLD z1XDT%fec{ATd@uyH%)?{L~&0LbprO68yv1Y%aL2|3R7euP=Pj(!m%nA8iDlUz)IoJ z$jZ}sxfKTAFQ4x@PF+t1n9nDJC=!hfbnLea`Fd2|l=K86oAY+T zP2=Ts+)th%qmuW_GnS6Ws(f2XCv;Tb=0}0&#;fxaRpe91^GhU1ti23-<84_VRa*F7 zzfz{!VcHIy3Vt-w*%b6mzlC(rl{+E$tGbW$6hbnMgmM(JstX;4wg^B;qfZzt3y^ z{`$jY^xA))hY<#Dft2Z=qP`)0`S3fO9oggk_`x+j=10Th+*3Y63L)`*DK z9xK;9s)I+HVw7(X+Ry(buCT4o*fRPZu2z}V&?wu3i|UL zZXV)#rOw?9`sw>}6#BikZRcyo0I}5ZW!Z=*TPn$MfZS>X?u5PplIIS~FQ;Bj+{(r_nc_ zTgj{k->7xn3U$5aKB@D}kL&q+HTu9lWJ*#xLeL&8?ag-jsz{Vu*t=$323*d8pP77K zE!F9m3g@@zMv48M=v9vV9c1zXAG{|gCh2_JG@B;e)}tc^`i1s`b_3O~c%g-t&^I^$ zmsuNe%AeaoD1&hH&KUgul!@S5fmkR6rfPXr=$I~_;9!P*MT8hU3UWM=JqjHI<2rdr z7B4Y@wvgZROsCOY30IbI540uPYDDQK3J7=Ib+A)UY#Lq;{hcsCe?fOJ;5EkYv4-AS zTe2cr)D6AJ2#I>P^c0{Lr_J?^7I1a~EUBb)l`6NY6+3w3)`=z^GuaLSA||YEzP)YT zt>bCkych%>fP5b|lHKi|`z-nITgU95k!YZ86e4Twx%Lh3yPmWQ#aky`JO+0IJ&$ex z)tN$tL$YOv5ZF;Jwy+$s0`enf09zu|^RLIxU%!B^^7`xX@$=W?`xObekB?uE&rh@g z|MKAR*T>^M?924y-2FnJTXr-6V?dn0VZl}m@2>aynh*Y!U_EXpFxWr;<{aM&(U$lB zOhn2;?`;2t0s)P{COs$b>(2|>hUc_8FC{jK zBeQbxiqGdb4SmUFmh*#BM(q4PKhro5TFt5NaSvV3m6qEy>Gyo%bLir;hyFD^>myOq?YTWK3+t~U3e5$8Bk+sVsW+5Djmyx7+{a1% zqvXaY2zQ^KwHvywzf}{YOU2bZ?L3!HsCD`_|q20D<19 zmlVCGZ$k2GCsH5ssgUpF-z6O*Hr2F{t(D8Zrp96MA_5wuMqoiqBK`t#U4HgPJX=YD zB{`G;-JPYTP6)(0_?mp3I>D_vs4;P&ujyoHoli%EsskY!umToepLhvT$Tw=X!*=`F z_rLGDI@r)}z4gR#b}X?Ce(OyqvRnDworKHr^QHGsKiV_>EM6P%;3o6@T0h^|bMlUx zkM>zCjigzv9GW6f&OMEf=j;}_wV^DzKg#p%kjDMY9_7$ zF|iQNBjus=;k^Ib`;^TDt*VEj;{=lBZfnb)1pECw(`oO~9%r0Pat?l-?LSp~iRWKM z^GpUr!2^~_{BG*&l6Saf>ed`*AZ0R^hG!z--}mxH`y8L|QO*AFnfmvYprOtM`M2pU z5O2Ga9`B)hZJF2CA3WpKDSiBW(dMMRO}RF|r(|pR6NI!^lb-AJS{-U*e^W2vTG!bk zaE;jviOyfvA8Z=>AkDv)$u`A5v(qV%9DSsH)=j6Z8T2^`vg}y2bswII&*n2LUF0>B zz)Q|$vXx@xIliRXvXe>!cHKjZKJztV18^T8Q@7nwW7;}AL05y>#&~{Ef)J zFFIv%XZag=&S?RJ{+gW~s4tFukk|tz@$dW&@Nt(`tzYI1z-LlECIYVjVSL?18w738 zdi8z@7@0>SQ3k;upoaxouKThx|0wf%%74lH4}uF2+18K?<9=D3>iGv5H->-PyR0(t zlL)R@^7vi!m95c1gy{C&ou$yRDxU~=`p0+1AfONB&+sp&Z$}^}pgXLi9nR7%OMk8o zdQD4QxECVWP9HP?qtKZlZK{{>8%Q5Or@r!$xDGJ>Z#iL3>ovYy-9&%2LhgzW5ilZo zX82snmzoIgWg)kERO4WRb^7W%2Zqm5k<9c3RpMqNsFw}%^#kb4xeo=rkb4uf7k;@) z){O79?L~hG`9`7qrlSPNvc=JI{r>#h`vOzKs2l2&COpfJjT zT;D?O#ekIyq(pUfL_&@S3x9BaIvs;nLRP>9`g!azWJRVcgpO(*v@>TSl5!h_rflEj z37#9k!jS5!nwLY@3wmx$+IVIIMSVYhQNMVJyD6soCgoGcMjV7xFh;9UC~PD&Iv;3g zp_&t|`&wWOW$$8iT4Eoc;hWx0+0IIy%77c5{+T79K&&u@_ev+|wL&W!Qd zl4&Z~?u>>5ob#HkMI-CX^38Z=)}Y=qg!( zEw&a?<>4^B1lai z^Jkq-H{VMLEVPzc&U{On^>Gfz%2x$$D#4&z-#Hxp3Lg16^Kl`$9!$F(mKIF(#EI?n z+0LT#XE4fpP$1iwH6o?P2S%(!tbN|7K;!(}_rTYa_sM&&gjJ4{w6dKIoTnS$^AUB~qeI^-VIu3q`Sw?6k*f2WWWWRTRe=y+PK>UfSB*yFg^_EnYMC+*|Aa`bFI z?Z%Sx^BowQ^E+kG?Yds;g@EcjW6Py2TY0{5-A2@Q{{HLQe$>a{z=tQ37Ya_F5 zy@QJCY}Kqah!t?ZX=k=&@*bDdLGP38rO(x0H@WX;?nY;d z>wHhST*1RFQ~gDqchkK;V_%!Ct1CdTgQomE*LKU{YX29GIG?AV(T!5vAOOVU#?Z1pLow{a_jd#M%SaY2eTbG9pc@>ZP^W5 zhLFxSe@f)CA)ii^cy@H*+U)z_+9_XL|8c*|O|JMk)7<3%^R;(}F8O&ovM%z0Yl`o~ z>9_4j>SyE!jb32>oVGg-eUGTh;ya|T+_zTaaef_1jPqcT*_JE37kQiWmzJ-OyS+?$ z+H`?>_newjf;7!}pe|gf_EL`6_oBIRn%}a^Mq_chV*_=Mnb3Z(3@7^wb`@~6OejZ%z<9D{g=I62@sn>6P z7SB}-!BO(Ve>M5a)?xPi&-EuA@HsY)@ zdT!GPlXDl^n#=Odt9wtp<5t@hwPNcW?ccc$yxx6kZb$BGd*97I+_L?o+o|*1>F+Eo zavq$8Q?-s9KlfvI1=~8&=J(HhMYr?qy5aQUoN|)i*LVDLo`WeH89b!i%D}eq@IZ*d z!{pQWou9$=34czug&lr-=}+ivzTdk;3! z|G}@94?e%fGiV9Ji5B!(Nd{+;SPU`20yeU7ua|sd#~Q9R-}}((U;eADJ5jI9^(aKN z+u6CDbB`}>UcPAl9&u-7@rsE{JJ<-GXw_mem#g3oM=e!;~`{r*G-Aw@S$)C69;PM6IIM?WIADuu>ypAys+`pc~QW-zjrl(PF7lJ8$n$lUfuUP&I z8y5>gC_h=8Z^&!8wzeJ~``vr3Jv;Rc>Q$Tz=6TBHeXhn?F+Q|?<^8155oyMp_x^If zp2=2xANdE6%e9w_@A&%A6PRU64xKKYk z0kjhINS6gz_B)Ui+8d=%t}Z20czY#zV_~i?dKgktTVu*=`1Q(@menw z)^)WOwB?NN;986$bAHR#RC4ak&c~i2p@|)7^c+r2h@(8a#-|H_hXceuXir<;EP6w7 z+)H-o&ba%Ef8}{8H0zyY&4NDP7wRb-Vfxq8U-$L+`awij$}#pHnD%zWBR(TZtL&E{ zyQ5=|6&T|E_->pF$U5G$6Rq>ye~6xpCbp~~Jy1@0Y&d!9=rFB)V7?USX8JRgJxFxl zItS$E4xqAVDA&EZK41?e-@HQr#!3C*xqRAw(>|Yt!tLkm$0a7_bP)m$>v0^YibWw2 zkL!j+_{v`01s&Ddl!ZOBI5A&9j_&?_ZAuuFgsPz97w$mHo5gPD3~9J+SvNAM-a?qA=D5 ziPm~no$I`LtfPR_qzB-A%Hw`^E(p25`*uah&n2&9it7JLrJl5!eR$5BNG2%>W0_iXsR_4ltFW%<``GHpK)pP@3)C@Kp^0 z_y73$6W@(w$woL*f?YdJs7Nd&b#LI!IkT19UYM#&7>B40Dh9le0j})topj>KsC_Ih z1bAkAC%tu&9Ot4rIZ9gxL9I$|5(b>}*hn}+^576kJdtUB-+oMEn?m6>ej)Ib!DES$ z`!M)EbRuh2Z|I;;w7EcZ@j$PSF~?zOOCbykpSD|{1NamSE5Abp`Bg0@S=E;Jt#xt* zr0bs-$Y?#&epNTVMm@x7HoG zM|7~Ot&}I;Zov*kPAD>X4(P}oZ&W~#pr!UDpjRa`rD_R@uladpc^7Z;OakG&D>l<{ zZO9v44KKqH$>vu2)9YMG{^nFdYa5*xC`}=wCh|v)AkQn6HYmS&G%B$SXbMHE%W-uW zs%DU&qMd86K+rZOT|rdKI-V0&+OQ1|_rDavc8K%5Ne;1`$N4~1Qo14P@>_? zU4thzqEORUBnU(m65F_jp{IhHxEzYQ&iqt@Yx(FBs3Zw}XF6{kITm#PIOdh_q;k)M zQ8{=yU;IPGviS#KdIo=J#e1K>$^WsxK*Y~)T7cSHEfLu$Wl$$4CeKj|NBctuQo{7|2944`M@4DTe_Oo|zak^cHt; z(~-J@OH4c~6zR>0e7rFHXmQW|*WRco1;5n!9cX(9SZY2>TAgV0(^0eO5$gk-#Kr{A*>D8!0n%wU3spAK!Ftjt-9R*C`YkS!}uBJKjj-ey00*OttIW`545p< z6@7>9L%l!0`!y5p+HNa83!MFuf#Kv`>tA9{XN}h_2NEdqqJOiMd9R=3A!wb!b8m+X z+k}CDx&P(#C`Zv-cRnb2Sm(6o`y>b(DPA}mXHa$P3GT4Hb)ZPw=+YM2Z58RrH4a0B z+0V-FRq=zy!UUV?u#Rt_>VeKU#i~;WAK-_fy?3`xtY5 zTl6XZG)>H0Tx^)LTF1N6mIkR-j0g)B=&h9E z*>l+c>KtQp*!}~zQ|6o%jA`00mhAiQ`j5t`B#}mX8OVk_Lppyswvww~SKpSQPc%Yl z_&}rZLx?yWzt6K1-ZK!UR%vPhh{Bt;2W($eY>9PD+IWqGu;-vg_E+SI*?c<#!#vXAeTJq_lot`p-_RqCE}% z2Q+hkuIz5!pU;#m=ed^OSMnuZA0KKts%z-K^XsKw(m$95Io9gZ^|N^GU>o*%2JV`F zlwFX8i%dXS_BMUNNWhprxkeycUg0kEr#~rmc_vQL&JiO*a*6z%zAp?u@BQj$ng2)j zb@@Xourejj^#MZJY)^~t%(#s1Lw~>8n_^YqN0e`7$4NZUNAwtUB&2@j=Sy}P zg2vvV%2AF)M>|;fvgGIVQP!+%4=Cs06KE8p(m#5SsfTR39D4Xla9HP;W1v3}bf>_4 zewT>|DUYH5P>2Kn9+`p6K zY~F&=&46W&w#SZrm9KZ`1KjWCyE;F6FR`xP;lm1qQ`Y17Z~s##amU=Yen!5Kdk%nx z)C;UYE$M*8E(em}w2Pd722zuc<0fDE+UL^sX?&l0#GU_wzXnR3VzpbQ=1wp%qTZkK zX~u!@lKjW>Ngq>R?Z4IU+I+;4e~91l{z7PO`JRZ^L>;9sSodPQPI?E=IQ^hV5Xlva z1QT|eD!G78-byqD0QyX<FFC+JffH>m) zehz<_|D1^X;$sasHl+O6R`PU;+rQ#>F_k#bz&$ScG z#a=ZhwqXvPf#3XCt>I}#WYI>)7pmJsq6UHn1)Lk*{5`TPWw+IAsd(Tw;v4kA#`sf@OeD~l=Dp+MA#0 z(*Xa*nPf7$C!W#QNB)xQ|MBs7e}As1_d5-${s5<#5tTaOWdUv{BH@i_UT;#nmxsv8MX{lp7n zzF#93!p`F8j4s)cv=_;@$tD$-_@qCv3fmPg2HmreO=~xS2EvEcNshtmQ?h}-5~w9V ztHO?0yzWL|39v`uW6RXat6|IZA778R^vf_bMEirN#_-KS->KMn%Bu3`(1)5b&*C8w zyGUTjSAZT=0xY^M3OIuKS%99y8A#d*S(>~=z7)^Z81cb8#{v)aoJHA}Rh-swR!kVN zCD0;y6-X^)k7DI5>#|dr?6r}f#*2+7sHkiglv6LFj)B~zA79~j`q` zPEzfIoZNdYeb0OzJBYHs$7}bq_B!l&`F;3ZPlEIJ!QhCLsb|W$Kb^~ajH41^CCBi! z6P*3|{>(7G#@MX_;`e*x!6A*C#uc5ad^tV15$oUa@%c|ze*8VZ_HZCQ8RuS4{=UcS z_ub?7Inz1(Y<;$)$@$XF3FYIu-DltHHfLYIeQs~-;?H(ko!8Cp@0Zi;o|lhzj_)@u ze~(J@>3Hn5sDDCW^RbV}(sjH%r~9>AVDEj}6`?t@g({QxxuBr4Y6Q=B=b9y8vBIp@ zt&w!tRG2DWe&<$qW zmRpOo_z8J?o(tzsF6Z}o>grN+$}yQ0-xHnsz11q{bb62VUDfq2ADEoCpYPY-_#9=m z&*j{Y$tT@7_O;&Y^o)+5@yS`d1mv`>m+kAf-mt&dykVh%-k!hjBb`_}sn6Td@3ySQ z`n!QL>52Sk>n2-v;{rG@y~_c{=gIv_7`!=B{567PRxEYXANOa@Uk|;K2`PRqt%`F$ z!|7_$-nlpUC#O=+%M#1@3OO;p^W>#O`%|Bt*Q%IluS>i(ir`2(?>rwLBKTpv}np`q}d9c>Wz3>FIZVgEVuq2N?L`oag=3)@jqi*hk~#{$9TS_-osG@5f*1 z@wYL!{N0~(?f1FaYq-b1Q*U=t5wGEWcUO+R-kX0vJE!}l`-kJ4K@~W#ymI{}_ilR0 z@K4wrUHBOiT_+#bKlQB2g6qm@kHW9ji*7l<2OHoY%&id!IWugBKC z{d+fE_t`q$_Wj1UZ~C?G(}Gw&z~i4!dV>p40K^nZuIfEj>#$`Nf4`l>E#LQ?+4_|)%^OLF zxAo)S+h@FO0!JP3_YWWP>V~xM?L79zM?h1p8uw?k<+pszdq(?QPYhk?Qof%zJt2N_ zetTT}-1p`7+V|Z&Z0lnCTIV5qe8;moCFA*6xR$r)+{U!|_f41X?_GSDZvTw)NOZ4~ zH&YLr-|xT28IkTWN(G4=3L)rd+EAPiN#}1o3HvDIgkFX{Wm^;a=v{IH~!7< zJ(D9-zRSjn7mIkG=||7>=l$|$|1Orb$Hn(<_vE_o;_I8e=wrL_{%3kayx%_Ui!HS~ zNd8Vw^l|Us!N1P?|Nj~LmmS%bq-zw4jEr1s@A{ze>mczm@Bm1(PYVe;G-%MGgLEVs z@ODTD(L?l+Ktcla^HuG=GBOj{Wta^cZZlWSU8^!PVosm#=H_<4eBtkO^2b~!47Lk) z^YcA(o#%dO63EMM_rG|$z;e)YsT|659z38D(h>Zhy5Vs)vT8KmuWMs_{YIAu-c*3> z^xG)?W;w{|K?WYFjHdJbojk%7zBm5He1_N8YoGV>9`ZPw92L)mtjY6b8BNc}l{}{F z)%R|+a0HL=e3#-{n;&qOOJiPE^r?za#l+%}0YYLoQ9l9J7qEYXoRmSI%!5ulXjiH% z*+%4>4xpKI8n#W|Z_FQZ+9oF{Z^pa>mKFktz&Z<*2R!W^7UV;;a_D6*$Z{2Yi4!n(1K z8-B!RHkXVCs)~~?New&-8N>9r2-Yr|Pyu7K@Wdzoll>$1&J3!ypg7<=?;GyL{T5`0 z{pG|ytOax7WHPJ+_-%Y5a0h29!wI9@F(pXMa}@IRVi8v@F@?CDxdNE zX+y;Cnv@jhC;25+kj1?8ysot2{&vu2{Rdo&vv*c0zB+UK{kA5RIT)v_jXh|?!LKZR zJ^y`U^ETKsJM(+g&Uv_7^w6o>81dhAzd+roTb7F$EgHyvO)lb`WC`>$UhLzNthq}Kc!_C(=PS8$5B z6cqLVFZFN684Mh-q{B%Yct2QwaXeF9ST4rL%@(e4tl*Ciue?T?PHzyja0p#!BBcPC zEKaPtLQyS*Dx3ujQTEre!Da@3$PHNqv|2}XCSVr4K7`zuM`nH*Q})E(MTn#KM8-{y z<2oH2%$=PS2d|Zdw*(Qc@ zf|=))@WS`%9t5n~aWYE;H3J6x17&u{p(^3305ekup_@i92-O{M6l+Fy*fcP(aiQC& z@)-!sRtCi|*^F?g7%*E`H**9Y_I)ATG%PSLJaZZbFn)j5MloE-h=(z!TA&tuu@4%Q zgY|U~P6wa7^kaCG?^U+4V(d~;+!V8D7m{Q&jm^#U z^6y;W{q?Qy4UI79l4bN(#iLk*zsrw*D3h_ifQ{#;`O8z`L5q<*r+z2v%3?ndP7*tUi6_w_qGNsR= z1Y9-RY{8Sm9wmMo3Pp1A z;6I0qfC@xZ$&B$E^e~dYvxG9^0V#W^46B#&bllIugP;$skU(jTGn?4i@^UG@k7_BM zZ_DvP%gKpgRf1g^eVoCIe11`6n|ME0kK#S(dnV62TCZm%gE%LsNZ1*ecT_T#7RX3G zMaClsmil|LHD9;Nj5&BlD<0nr@1Zg{|AApHW@~!H?4mLFb7kB^R?uW9(4^e!Pm@=Z z${GKVitea>0vX|u1r4XDwNq5Qm^|C7yW5q>+E29E?X0n@s(3E~ZK;4qh$4L-Kf~$3OmYd;aIo+wJ}H_VyMs<>T>kyMMr-9dfd5pX)5m zX3~Kf@`_j3!ucxLNCuHP8BCyx19DRKA$JeEpV*%A0*6~ILGvjbt*g`GBw5nA8Gp% zFa`8~I_)5nMbZd@{P> zN^9XSvev%lEQFlIxY#yU*n!%QGI>(&3*k%5kJ?E)oo;)i;yL3t^arPzuBVCptMIIC z$8gdzEvbrr)CnlwgWwvI8KMFv&!_n_KEqGgAEqq<)y#sCvaHyCmdVdKc$sBbE^Gk) zL;-?z-oTRp?{s*+gl(<5V=Ruun)9VCp5`gGgs?MW&%u`_Z-{Pb32y}0Bp<~2YTdFc zYx=XvcU+Pc`yJMb_cDI-8QabspCickwdRyz{NAb(*tp>E`^rj+*#g`7yvS#bJEzY` zaosMK`C3k%dKJt6s>?A?E7*7v!OhRJSM3|cAgBc{CB9FXHJxBuQ}Tc9PutJg?$bO0 zXJM{;_sKNf!F~hpKyOTIXFbmGI}<4auRza}UL~Jsj7eAl{^?&vkOXLWZx3)k?UqP5 zLLmf)LBKKO%;3Ag>8f0c`K5i%Y$3PLutRtY0RX?`zP zH9vSH+o{;56yvh4ips&fpV$YNsL3wMJPEcS@PU3m%Ry1e6ZAcBK$AP#FEV*s%P6rH z6v7Jn1G!7(NBeCJXmZqMejlHDBznb zf}_$fpPhL@|G-(nX$V_E^OLkOr0xTYoUdJCI_!OS?`V>SCd}Cb&=4pF9ct{L*d?-} zomaDts@|v=UENbsPORWfR7%agFW)U_Q_5s)77Jf0{2kBR^BMNY@V%fieI_cq+#3~@ zL#ZbHv#0{uKyHudFzGfE6lk>$L-BXefzS2_qKGSC1ivY@IIn`DS?Lf#$>rnld9#0_ z^;QnxgYIW|YH)h>4rEa+yl{%T8r8WHSy6R4obl2_(hoA}VC!{;qp&?!0VDqk@i18_ z9C8NPPrFh!>`D{A-7iTA22q(Zy0P*65fJImm%e9)B9r+)+CSm2M-0f6y*(BqXBTQ< z@F%afoN*NO&YV?L#cUsq#o72=!EeDQAYYn4Hv@sgnjKwuK;vfDrofrvhfWv3<88fD zM`f7wS?0>nCq3(ZOgal+a?KaxfQJM>s1v>fu1@_Wo{P?yrj&zkqZ;%ipe(Nxez+qs z&Wr1L>_s4VIB#>!!BeuQoFAeLE-haK;T^{H z%B9(T1pXCtA&1{AaVyOJ?VooZ4_zQP1pe`$y;)s7@yug8{Hz6kG}$NQaXSXquL*XF zNPLJ&yhvWkf_xd*#k9iL;nkxb6o=N`CIiOFKN+7q_!M{+KhfO?cGB>ZG+h7@tM zo})T;=y_&~yx+dur-x2fEl*YuvajPU&tDe1qk>RQb^SBYuB@!@_qJc*liuN-dvnbp zPbMGoy+W*9;7|GgygO&YAbrN5@}a-Muavl)zEDF>Ky3Bm>7^flp7LhZnmVJQT5>?KkL7g>g0?P!3CJUW}X! zXakB98Zj8u^F=^y+zza1VhI6PjCY)2l!m#G$26F%4c|dvl6jTF^NsS)gxaSXRl+bA zS7=C(uX|H5f?=@)Tq=!xkOjw?9xJ}~@B!4YF#AH0*uYB^EL#=L!fItLM;a&54%3iye zV<}gep#+%nTsOQk2cDi!#U~DkVxdN9(m9_ECVVdD7$~j3?T_Ns2rwIrs0|lTTH4X@ zHM3127&LSSzA$`t_(4dX+4>>OP~hu_DAYgBjHvdMqnyL2Fj@-L92@%s=Q8HRcv^cY!KHd0^o(yx zW(yFQ@1!BM7sg-H(ar1YmK!}+ZC#}E=KTSjxiUux?%?rI#Jj?((t2JiesU#5<( z-;1O_E)-Ev0*uGjjt7FS?NtY?T}^D_5*(yu*dm#SVT8GFXUgx%=Q2m96p>3_LHnocQ28XrZ{-xNft05z-YYNT zb!_cKPg;W3ukHMHMG8g?Iya2xah<`xi~|VxsWsF7@VWi2Gr%tY$k`%Y0vFSNe5x`A z%h5Uy#_#5Dz@cea;XuxOd$!BL*`Mb@X+!hL4v4_-8y%_h_e#zo3KVW!n-xV>{w(;2 z?o#|Q4OUe-1#r(mdpxUro?(r@fuBVSQ{ne}EMSBZ@3=)C2axgjEK~5B#`;*+kiEw5 zA%9Mq)AMX&#eA0bpMqsHgTLj#iN7p&CAMTTX5-T|{>@BshVQ_O!nX^&5&EojqzsfI zCv5L@xU@}4#>%;h2S@pz(pkP#meBX}UeDm6nK90|%|=T+%km53jN%&euEu10L! zCxHogmV-J2)*_R@Fi0q)IJC)9-~*E>9 z3WU`Xv7CA*odZ7&{9)L^;T8Mi=Y|}{SA0z2u$@V!-@4}hecwyq3GZ#lOTD)syy#xh z^MD7TTNswJ!*vy-*)V#4+}_`xx5rzo8!~d)!d`B-=T~+hv$m3d{dIfTPkYkDEu%GW zKW=Y7qI#&c)+=5O$C581?6OgTgk|27{DP`1mLMWo%dUDOW|=f$B837hYo1upxj-jE;qkBhi5`;2Ut$q8Ro&Z-IK;m{br-D z7BJmO>zUM9dt>*4KTN#|SLowRle%s5ChI`{P+aN@&WlMuSSC_i6IZbInNqbv#%GqP z6el+t!2I<}v4@;g7d+a>Nfve!TahBRHSoq`K z?Z>e71f1K^hy-7}gIlM^XZK5(_BW|=^X|~$Zb>8zlcAyR8;YPm?UPKAkN)z!;l@D}Ix)*xRF{TEz<4iHE{B!up z2;X7<-+1XJzblVXJjrhczi2#^gyRZ$VOx95jC-5>Vn2j5J2KX1RX`G9t8c;RcV;1UGFO`nCHe>}tYZ1f#- zvcI*s!p5JO_r<*NjGm8(0l>obd0eWeM_fajU09E8oCAMGztR*@ZHtF>QOw6`3wYRw9zoE2?>}8CPmSn%)G1hZuE?0$Hq_i z*B+y*&Q(0v75|Il70Gms3p79R6K)r9)Oj@R`^Ga=4+DNc|BYbW33IGRQ$Udq?M*8B zmxQU)dJ8Uvf2Q8mCdDykF0}DFiZwyO3;05QNq%`0H_hT>iF@;GaAG;xR$+R=0&&Y~q% zTUW73uUsFx-Ms7A@J(7`Jd%nBoy&N`OweR{;W{5OK8hJ-CSDC}85Dj_CQxi?R(0wt z%VftQV5IfBc9jhl`{Wkl5J-K40MxEP5)3sMa+L6HWV3NbU}qUdKFV1-5T7!_S$QmC z=Z^!)I5WEqd9}%llQ>^iu)0z@`zU{wfpb$18`0H~cWqSR`5ez0b7_DW2_&a8(jnU_zzbK=61T^JfJGI2hGz z=m1n;-f6VhjGb5Thv9+)TEo}^2iU26>zMpgjc?l=ChX?Dcozp0Ztu~xG9%Nm4yG~2 zkxaf5R{{ zMyYCS-gL~n-y0Pu`}b4?l9uwlab7G?K4Ix}7kfVi=DBY>PT;KcM_}4{@9pZ6iUM*c zs*sl8T61WJemzdgVdx{>z6YN(A8L-p=db4l;iOl@fm{-uD&wCoRdO&s3sC(YTE9ECBGIJRszFAtyFy2w4IG0&4E#et zIB=xe9+B}Yvov$#a!tLTInvm-exaN*n$yNd${|YY0)1cug2KFoSq?Ie^_7vQU~tZ* z=5&jocdViexPbow)BQXv{5P7J3n;-E^rdAC`-z}D{(in;;#*WyuXBvkC5C!9`o~nd z7Vj7vJb>5Bj;aa2hH>;Mm`@8rjFgNA*2sE(q;`|gImjPqqudd-r z_S)_Re3}kMl{`4RXkrCFH54^|o`L6$|AAeDj>}w9^`h~u@mgjr6aNhOQlNbX;~~+Y z9Jl3|i^;e1x3k^Xd1zoo0*SkPO!;IQ+e@AV?j(F$7BhoVCO$%dvw2n`S5yq(_FnTH zhHtY96YmS-?{3(F;Zq^d+YH70cv1r5#&aa^RgnF7*d(hDXLxYbwGpW=B!~3cI=Jb| zK|S{k6ssK=A*<{av(y>O*~R0Wl+69TJgqX}wY)d44gd6A_BVn9b?+I+uAJ)nE`I0s zF8iCS;^7&VkLq`q)9k(oSksly4jOZAJPzY*e1^S8yT0CkKa14DIG-Bp(%={J?AfPIsO1%ao7L@vvZ=X_f2s{=3s>U60~rd=~e#!M_?-TwajJ*y%= zZuiII_QxN8I8F7IX&+y=fBxrR?x6L&b=$wk+wJ4sg8H*kJ6bIw*w(w%ghK|2pD{<$ zQ{CYNnH)B))`8|ZZvKURV*F+Pa1~g%;r6~K=W~qbp}U^+u5fvgbCIBqfP8$f_*Bnf z{s{2My+zwy$nkyKIsa3S*zgXCSP1q!ZE;&d;dd~dx>WAc2+nedjKl|(+fEpA(BY(A zIuFP6e*Mf{srW5O=XZ{5#gR^Ji3nMu2z9^k~Dp@^74( z)RRR{+2}3LgW(;Hw+u$f_s_L-vI*OqFdo}~H<>PiPTPJv_1dNziodY0AecduGx6IN zl*yNOhEmxbFJI0o^bt6NPyA5)IStje)jME12yTsjdPC07wlM#RvH`Tpd$yD)OWxBYGC&xPC z97ZxHbnc!0oI$Oy`{Jzh`3l)6o@L(BI@%T#fw9YmBKviv^Qe9?ix9DV_*wxiURb8a zm!Q{_LtaFFf}MfSdecL)aZ<(m`FBBe-Rs&N4=h@Alwlu$T)}esgv)t>@9YJ1>Ur|{ z#ijSpqCd_5QWij9EBt11zRHe6Yg+Z6-|!f{pp{%D#`gkA&RqRP`n}p=o}*|>!-xV> zNgrxF<#%ubqRINZ&hR^1pUQnYUk#+vakqf)OZX1`lks!vrG4g9zMU}&&=aocwa%l_ zg93ZTn&MdmmzG_-;Iyw-S+-MrRXm7yi<580ZXz%DNn^>ax%n=fnv_ z*g$TtLNE+x>VWC+OhCkZvZeK6mxDPr*#pTy&~qRsRMbcN6Dm1z;;hRPUTrty06fg) z>-J&Y=R&_7P#fVyA7;yqJsvxf_la-rA@_jbKJvnPTSvm z-l)nO)i0%Rgwjo%nMweWgk}U=LqGHmG&51&--&L1!XMby6YqsAGvh6I-D7+j2Wv<7 zulODNHWOf3`t&N4uW3ie>8(ADbJmHQv(i1wgbjBDdQVvLd{w8aeFDEX+GZ8zQ5hBV zJqe2W6*-U(>#Brbtis^O4 zK#^q-(6!K6IDj?jZ|wf)B4+l!!IQ_iY5e^7ibVctFN?EK)qDr0Bfkg-mqIbbo`$56IlF(cj|z@K4=FgG^0{K z5@EvM5mj*8X7h9$ce?C8A<**)8^`hV+Z%0T|5hZxSP>(GQ>@(zBG^9uc>Ni$u@BMa zxi^Xtsuc$XVq_SpF(eK7$QU8zEr1mQQ@7mN9r0>#<7{kv&kUQ5LDPuT3MK^P`92^P zRm+f8ba8+{0NY`x^P7Ye(d2o6Ku{7H;`gpV#fqaU-wF>F8qkg&YryCD=YlL(v`s^! zR!#gau&am$t(7)Bg~+K0Z5el4l>y#Ue5OH;-ziS~94meY{8;p-b}I^74PIk`gx7}k zG~7CHXztI~Z>uCRJg$tcc>ctN{%ldvzM0)^JHo*AUV6cy+=WrO1ga$C|bdP)t3Wal6k`t-K=&Yz$zA(&rSD6tCPokFy>BwnWl~PQ^1a%nK=$ASb|^v4DgEub3VTnOea+Y zsnRE}m*>yx0IkQh@h3k2N*^`2Oyw^7r!v{xpQO*yU4YN?#^1M!2)P0YUd3~>iX^HQ zY&_WEoAO8S4XlB)q&uh>=S}f zat`B1R4d$r_qMS%T|=wCZR1?cU**HyKzKT3HhPDP;b`NVabmV2ZMvpoZ}Vf^;_sQ) z@wgvUffn>z$5+@e>;Q+2KjEFczLS4VV~tg2Q2ylip+z$9<)U|=<2O%l1K&w&c-?vp znt3-1PFFlo`9tB)Yy2Ht9Y$$9SNT|Fl$KpV*TJY$=dBJ%Q$FSSX_alBU)=|}VF_kZ z`0LvIKC19K`7&r)I2_nyGT;QAc)_2*SyV*sXE*tmVF}|tuO0Z&^PK!Y=sJQfqI!$M zi|HVLUPjjuh>mmHdKD_-Ms?oC4L4LKZSZ+g1r*rZmCr`1!c~`t_@-Zu*?eX;coZvx^H_6lT33Kxe>7 z6W|(;Cd@li=EvoZdwoWf_9X}Q{W__@MK*7MvhG4&qi zU%y)`<63{-_w)R?qZp4F&m)*%xAVTEtSY89OigX2dc?FC z=S(X$PW_GTM{s<0&?SCn8q0Ex!bJ6}ZO>FE4*m-Mmeq?hD61;s2p`pRqjRgy9AeMn zxdi-X5kI(npf&`X+~=N(e4D{W@JBYh+TRh+wazb?D6|?s+5QxE zjxPRlp0oC=%nDoqd*+YwNip}X^0n!5Ovn7aUP00D7~fA` zJZRIZ%QW6hc!`5uXu*VE?8_#rsr{-73;dQ(s>3poq+cldhkX!*>)74O2)s&~Y!0+zRF_s*E$DT4st&%IN;)kF)YVD||4*<@v0KGW3k z0M8DV>hrAUspkXx4F&6sfX&U;+y!7l{)<4eNScVEJRLy!d3*Vc3hw;w2!76aEI8AD zgsq9?Tt2t_H_idiw{h6+OFbNrHLi(q)$?@C&mYb6Mv3#1vs%CHlE4x5g1SUB9FrzSGnjz@5KhU8G{w$&wXn+ zs$B)RgCvjd38`Uh-ZU2lIVMk(Q*pluXu;=`MnKy?2Y0l zcvl9Z*7_oV5sA5-px^J-+~rR-Rma_dX*K5C5fel{>^Sh8& zEub+Hg=SZ-xi1+b^vxM%yhgyO2V*XK&vwh2chY>!&ErSV`HaupsyEGx`Ktf>{D`+9 zu_5m>y(-rCHt19&)o0;Sr=!!h$?HadZLY3l5#I*{7w6c%o(guJK73x+d9Ke(<)rDe zp16RqtDx9Y4C0eyf=E1Kn z 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%0DUBcV*99I?>*mut+%!4;} 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

7dVD=p5mo9 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

  • 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