Skip to content

Commit 043973b

Browse files
chore: re apply example updates
1 parent 1e75160 commit 043973b

File tree

19 files changed

+1157
-1128
lines changed

19 files changed

+1157
-1128
lines changed

examples/tutorials/00_sync/000_hello_acp/README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
This is a simple AgentEx agent that just says hello and acknowledges the user's message to show which ACP methods need to be implemented for the sync ACP type.
44
The simplest agent type: synchronous request/response pattern with a single `@acp.on_message_send` handler. Best for stateless operations that complete immediately.
55

6-
## Official Documentation
6+
## What You'll Learn
7+
- Building a basic synchronous agent
8+
- The `@acp.on_message_send` handler pattern
9+
- When to use sync vs agentic agents
710

811
## Prerequisites
912
- Development environment set up (see [main repo README](https://github.com/scaleapi/scale-agentex))
@@ -39,4 +42,3 @@ That's it - one handler, immediate response. No task creation, no state manageme
3942
Sync agents are the simplest way to get started with AgentEx. They're perfect for learning the basics and building stateless agents. Once you need conversation memory or task tracking, you'll graduate to agentic agents.
4043

4144
**Next:** [010_multiturn](../010_multiturn/) - Add conversation memory to your agent
42-
[000 Hello ACP](https://dev.agentex.scale.com/docs/tutorials/sync/000_hello_acp)
Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,54 @@
11
# [Sync] Multiturn
22

3-
This tutorial demonstrates how to handle multiturn conversations in AgentEx agents using the Agent 2 Client Protocol (ACP).
3+
Handle multi-turn conversations in synchronous agents by manually maintaining conversation history and context between messages.
44

5-
## Official Documentation
5+
## What You'll Learn
6+
- How to handle conversation history in sync agents
7+
- Building context from previous messages
8+
- The limitations of stateless multiturn patterns
69

7-
[010 Multiturn](https://dev.agentex.scale.com/docs/tutorials/sync/010_multiturn)
10+
## Prerequisites
11+
- Development environment set up (see [main repo README](https://github.com/scaleapi/scale-agentex))
12+
- Backend services running: `make dev` from repository root
13+
- Understanding of basic sync agents (see [000_hello_acp](../000_hello_acp/))
14+
15+
## Quick Start
16+
17+
```bash
18+
cd examples/tutorials/00_sync/010_multiturn
19+
uv run agentex agents run --manifest manifest.yaml
20+
```
21+
22+
## Key Pattern
23+
24+
Sync agents are stateless by default. To handle multi-turn conversations, you need to:
25+
1. Accept conversation history in the request
26+
2. Maintain context across messages
27+
3. Return responses that build on previous exchanges
28+
29+
```python
30+
@acp.on_message_send
31+
async def handle_message_send(params: SendMessageParams):
32+
# Accept conversation history from client
33+
history = params.conversation_history
34+
35+
# Build context from history
36+
context = build_context(history)
37+
38+
# Generate response considering full context
39+
response = generate_response(params.content, context)
40+
41+
return TextContent(author="agent", content=response)
42+
```
43+
44+
The handler accepts history, builds context, and returns responses that reference previous exchanges.
45+
46+
## When to Use
47+
- Simple chatbots that need conversation memory
48+
- When client can maintain and send conversation history
49+
- Quick prototypes before building full agentic agents
50+
51+
## Why This Matters
52+
While sync agents can handle conversations, you're responsible for managing state on the client side. This becomes complex quickly. For production conversational agents, consider agentic agents ([10_agentic/00_base/010_multiturn](../../10_agentic/00_base/010_multiturn/)) where the platform manages state automatically.
53+
54+
**Next:** [020_streaming](../020_streaming/) - Stream responses in real-time
Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,45 @@
11
# [Sync] Streaming
22

3-
This tutorial demonstrates how to implement streaming responses in AgentEx agents using the Agent 2 Client Protocol (ACP).
3+
Stream responses progressively using async generators instead of returning a single message. Enables showing partial results as they're generated.
44

5-
## Official Documentation
5+
## What You'll Learn
6+
- How to stream responses using async generators
7+
- The `yield` pattern for progressive updates
8+
- When streaming improves user experience
69

7-
[020 Streaming](https://dev.agentex.scale.com/docs/tutorials/sync/020_streaming)
10+
## Prerequisites
11+
- Development environment set up (see [main repo README](https://github.com/scaleapi/scale-agentex))
12+
- Backend services running: `make dev` from repository root
13+
- Understanding of basic sync agents (see [000_hello_acp](../000_hello_acp/))
814

15+
## Quick Start
916

17+
```bash
18+
cd examples/tutorials/00_sync/020_streaming
19+
uv run agentex agents run --manifest manifest.yaml
20+
```
21+
22+
## Key Code
23+
24+
```python
25+
@acp.on_message_send
26+
async def handle_message_send(params: SendMessageParams):
27+
async def stream_response():
28+
for chunk in response_chunks:
29+
yield TaskMessageUpdate(content=TextContent(...))
30+
31+
return stream_response()
32+
```
33+
34+
Return an async generator instead of a single response - each `yield` sends an update to the client.
35+
36+
## When to Use
37+
- Streaming LLM responses (OpenAI, Anthropic, etc.)
38+
- Large data processing with progress updates
39+
- Any operation that takes >1 second to complete
40+
- Improving perceived responsiveness
41+
42+
## Why This Matters
43+
Streaming dramatically improves user experience for longer operations. Instead of waiting 10 seconds for a complete response, users see results immediately as they're generated. This is essential for modern AI agents.
44+
45+
**Next:** Ready for task management? → [10_agentic/00_base/000_hello_acp](../../10_agentic/00_base/000_hello_acp/)
Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,49 @@
11
# [Agentic] Hello ACP
22

3-
This tutorial demonstrates how to implement the base agentic ACP type in AgentEx agents.
3+
Agentic agents use three handlers for async task management: `on_task_create`, `on_task_event_send`, and `on_task_cancel`. Unlike sync agents, tasks persist and can receive multiple events over time.
44

5-
## Official Documentation
5+
## What You'll Learn
6+
- The three-handler pattern for agentic agents
7+
- How tasks differ from sync messages
8+
- When to use agentic vs sync agents
69

7-
[000 Hello Base Agentic](https://dev.agentex.scale.com/docs/tutorials/agentic/base/hello_acp/)
10+
## Prerequisites
11+
- Development environment set up (see [main repo README](https://github.com/scaleapi/scale-agentex))
12+
- Backend services running: `make dev` from repository root
13+
- Understanding of sync agents (see [00_sync/000_hello_acp](../../../00_sync/000_hello_acp/))
14+
15+
## Quick Start
16+
17+
```bash
18+
cd examples/tutorials/10_agentic/00_base/000_hello_acp
19+
uv run agentex agents run --manifest manifest.yaml
20+
```
21+
22+
## Key Pattern
23+
24+
```python
25+
@acp.on_task_create
26+
async def handle_task_create(params: CreateTaskParams):
27+
# Initialize task state, send welcome message
28+
29+
@acp.on_task_event_send
30+
async def handle_event_send(params: SendEventParams):
31+
# Handle each message/event in the task
32+
33+
@acp.on_task_cancel
34+
async def handle_task_cancel(params: CancelTaskParams):
35+
# Cleanup when task is cancelled
36+
```
37+
38+
Three handlers instead of one, giving you full control over task lifecycle. Tasks can receive multiple events and maintain state across them.
39+
40+
## When to Use
41+
- Conversational agents that need memory
42+
- Operations that require task tracking
43+
- Agents that need lifecycle management (initialization, cleanup)
44+
- Building towards production systems
45+
46+
## Why This Matters
47+
The task-based model is the foundation of production agents. Unlike sync agents where each message is independent, agentic agents maintain persistent tasks that can receive multiple events, store state, and have full lifecycle management. This is the stepping stone to Temporal-based agents.
48+
49+
**Next:** [010_multiturn](../010_multiturn/) - Add conversation memory
Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,61 @@
11
# [Agentic] Multiturn
22

3-
This tutorial demonstrates how to handle multiturn conversations in AgentEx agents using the agentic ACP type.
3+
Handle multi-turn conversations in agentic agents with task-based state management. Each task maintains its own conversation history automatically.
44

5-
## Official Documentation
5+
## What You'll Learn
6+
- How tasks maintain conversation state across multiple exchanges
7+
- Difference between sync and agentic multiturn patterns
8+
- Building stateful conversational agents with minimal code
69

7-
[010 Multiturn Base Agentic](https://dev.agentex.scale.com/docs/tutorials/agentic/base/multiturn/)
10+
## Prerequisites
11+
- Development environment set up (see [main repo README](https://github.com/scaleapi/scale-agentex))
12+
- Backend services running: `make dev` from repository root
13+
- Understanding of basic agentic agents (see [000_hello_acp](../000_hello_acp/))
14+
15+
## Quick Start
16+
17+
```bash
18+
cd examples/tutorials/10_agentic/00_base/010_multiturn
19+
uv run agentex agents run --manifest manifest.yaml
20+
```
21+
22+
## Key Pattern
23+
24+
Unlike sync agents where you manually track conversation history, agentic agents automatically maintain state within each task:
25+
26+
```python
27+
@app.on_task_event_send()
28+
async def on_task_event_send(event_send: TaskEventSendInput):
29+
# The task's messages list automatically includes all previous exchanges
30+
messages = event_send.task.messages
31+
32+
# No need to manually pass history - it's already there!
33+
response = await openai_client.chat.completions.create(
34+
model="gpt-4o-mini",
35+
messages=messages
36+
)
37+
38+
return {"content": response.choices[0].message.content}
39+
```
40+
41+
## Try It
42+
43+
1. Start the agent with the command above
44+
2. Open the web UI or use the notebook to create a task
45+
3. Send multiple messages in the same task:
46+
- "What's 25 + 17?"
47+
- "What was that number again?"
48+
- "Multiply it by 2"
49+
4. Notice the agent remembers context from previous exchanges
50+
51+
## When to Use
52+
- Conversational agents that need memory across exchanges
53+
- Chat interfaces where users ask follow-up questions
54+
- Agents that build context over time within a session
55+
56+
## Why This Matters
57+
Task-based state management eliminates the complexity of manually tracking conversation history. The AgentEx platform handles state persistence automatically, making it easier to build stateful agents without custom session management code.
58+
59+
**Comparison:** In the sync version ([00_sync/010_multiturn](../../../00_sync/010_multiturn/)), you manually manage conversation history. Here, the task object does it for you.
60+
61+
**Next:** [020_streaming](../020_streaming/) - Add real-time streaming responses
Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,47 @@
11
# [Agentic] Streaming
22

3-
This tutorial demonstrates how to implement streaming responses in AgentEx agents using the agentic ACP type.
3+
Stream responses in agentic agents using `adk.messages.create()` to send progressive updates. More flexible than sync streaming since you can send multiple messages at any time.
44

5-
## Official Documentation
5+
## What You'll Learn
6+
- How to stream with explicit message creation
7+
- Difference between sync and agentic streaming patterns
8+
- When to send multiple messages vs single streamed response
69

7-
[020 Streaming Base Agentic](https://dev.agentex.scale.com/docs/tutorials/agentic/base/streaming/)
10+
## Prerequisites
11+
- Development environment set up (see [main repo README](https://github.com/scaleapi/scale-agentex))
12+
- Backend services running: `make dev` from repository root
13+
- Understanding of agentic basics (see [000_hello_acp](../000_hello_acp/))
14+
15+
## Quick Start
16+
17+
```bash
18+
cd examples/tutorials/10_agentic/00_base/020_streaming
19+
uv run agentex agents run --manifest manifest.yaml
20+
```
21+
22+
## Key Pattern
23+
24+
```python
25+
@acp.on_task_event_send
26+
async def handle_event_send(params: SendEventParams):
27+
# Send first message
28+
await adk.messages.create(task_id=task_id, content=...)
29+
30+
# Do work...
31+
32+
# Send second message
33+
await adk.messages.create(task_id=task_id, content=...)
34+
```
35+
36+
Unlike sync streaming (which uses async generators), agentic streaming uses explicit message creation calls, giving you more control over when and what to send.
37+
38+
## When to Use
39+
- Multi-step processes with intermediate results
40+
- Long-running operations with progress updates
41+
- Agents that need to send messages at arbitrary times
42+
- More complex streaming patterns than simple LLM responses
43+
44+
## Why This Matters
45+
Agentic streaming is more powerful than sync streaming. You can send messages at any time, from anywhere in your code, and even from background tasks. This flexibility is essential for complex agents with multiple concurrent operations.
46+
47+
**Next:** [030_tracing](../030_tracing/) - Add observability to your agents
Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,53 @@
11
# [Agentic] Tracing
22

3-
This tutorial demonstrates how to implement hierarchical and custom tracing in AgentEx agents using the agentic ACP type.
3+
Add observability to your agents with spans and traces using `adk.tracing.start_span()`. Track execution flow, measure performance, and debug complex agent behaviors.
44

5-
## Official Documentation
5+
## What You'll Learn
6+
- How to instrument agents with tracing
7+
- Creating hierarchical spans to track operations
8+
- Viewing traces in Scale Groundplane
9+
- Performance debugging with observability
610

7-
[030 Tracing Base Agentic](https://dev.agentex.scale.com/docs/tutorials/agentic/base/tracing/)
11+
## Prerequisites
12+
- Development environment set up (see [main repo README](https://github.com/scaleapi/scale-agentex))
13+
- Backend services running: `make dev` from repository root
14+
- Understanding of agentic agents (see [000_hello_acp](../000_hello_acp/))
15+
16+
## Quick Start
17+
18+
```bash
19+
cd examples/tutorials/10_agentic/00_base/030_tracing
20+
uv run agentex agents run --manifest manifest.yaml
21+
```
22+
23+
## Key Pattern
24+
25+
```python
26+
# Start a span to track an operation
27+
span = await adk.tracing.start_span(
28+
trace_id=task.id,
29+
name="LLM Call",
30+
input={"prompt": prompt}
31+
)
32+
33+
# Do work...
34+
35+
# End span with output
36+
await adk.tracing.end_span(
37+
span_id=span.id,
38+
output={"response": response}
39+
)
40+
```
41+
42+
Spans create a hierarchical view of agent execution, making it easy to see which operations take time and where errors occur.
43+
44+
## When to Use
45+
- Debugging complex agent behaviors
46+
- Performance optimization and bottleneck identification
47+
- Production monitoring and observability
48+
- Understanding execution flow in multi-step agents
49+
50+
## Why This Matters
51+
Without tracing, debugging agents is like flying blind. Tracing gives you visibility into what your agent is doing, how long operations take, and where failures occur. It's essential for production agents and invaluable during development.
52+
53+
**Next:** [040_other_sdks](../040_other_sdks/) - Integrate any SDK or framework

0 commit comments

Comments
 (0)