---
theme: seriph
title: "Lesson 17 — How Can a Synchronous Model Live in an Asynchronous World?"
info: "English video course for AI Agents in Depth"
author: Bojie Li
transition: slide-left
mdc: true
lineNumbers: false
monaco: false
aspectRatio: 16/9
canvasWidth: 980
layout: cover
class: cover
---
Build · Chapter 4 · Tools
# How Can a Synchronous Model Live in an Asynchronous World?
Events, interruption, parallelism, and proactive tool discovery
Lesson 17 of 42 · 19 minutes · Event-Driven Asynchronous Agents; Proactive Tool Discovery
---
# Why this problem matters
Ingress
External events can wake the Agent.
Scheduling
Queue, interrupt, or parallelize by urgency.
Discovery
Find a capability without loading every schema.
---
# Three ideas to keep in view
Event queue
Durable arrival, priority, and replay
Cancellation
Stop work safely and preserve recoverable state
Meta-tool
Search a large tool catalog on demand
---
# The book's visual model
Three asynchronous event-processing strategies
---
# Synchronous loop vs. Async Harness
Synchronous loop
- One request at a time
- No mid-turn updates
- Tool latency blocks attention
Async Harness
- Inbox and scheduler
- Interrupt or parallel policy
- Checkpoints and notifications
The model remains turn-based; the Harness absorbs real-world concurrency.
---
# Events need an explicit policy
~~~python
event = await inbox.get()
match event.urgency:
case "interrupt": await cancel(current_task)
case "immediate": spawn(event)
case _: queue.append(event)
~~~
---
# Test the claim
4-52 min
Trigger a timed event
Observe: Registration, event arrival, processing, and delivery
4-62 min
Interrupt and recover a long-running task
Observe: Cancellation point, cleanup, checkpoint, and recovery
4-72 min
Discover tools instead of injecting the catalog
Observe: Token count, retrieved schemas, and selected capability
Demo budget: 6 minutes · one contiguous terminal block
---
class: course-terminal
---
Live demo
# Switching to the terminal
~~~bash
$ uv run python chapter4/agent-with-event-trigger/event_loop_demo.py --mock --trigger timer --delay 2 --duration 6
$ uv run python chapter4/async-agent/demo.py interrupt
$ uv run python chapter4/active-tool-discovery/demo.py --offline
~~~
Run the command(s), narrate decisions, and point to the observation—not just the output.
---
# What the evidence supports
Finding 1
Priority is a product policy, not merely a queue implementation detail.
Finding 2
Graceful interruption requires tools and loops to expose safe cancellation points.
Finding 3
On-demand discovery keeps a small stable prefix while preserving a large action space.
---
# Boundary → design rule
Today's models are trained mostly on synchronous trajectories; async behavior remains a Harness workaround.
Separate event intake, scheduling, model turns, tool execution, and user notification into explicit components.
---
# Continue the experiment
---
layout: center
class: text-center
---
Pause and apply
# Your turn
Which external event should interrupt current work rather than wait in a queue?
---
layout: center
class: text-center
---
Chapter 4 complete · Next · Lesson 18
Use code as the most general action interface.
→