Update foundation chapter on runtime running (#175)

This commit is contained in:
Eric Zhu 2024-07-03 15:03:24 -07:00 committed by GitHub
parent 2e7c7e2d82
commit 5abaacc56e

View File

@ -72,6 +72,7 @@ send a message to the agent we just registered:
```python ```python
agent = runtime.get("my_agent") agent = runtime.get("my_agent")
run_context = runtime.start() # Start processing messages in the background.
await runtime.send_message("Hello, World!", agent) await runtime.send_message("Hello, World!", agent)
``` ```
@ -87,23 +88,41 @@ is only used to communicate with the agent or retrieve its metadata (e.g., descr
### Running the Agent Runtime ### Running the Agent Runtime
The above code snippets will not actually produce any output because the The above code snippet uses `runtime.start()` to start a background task
runtime is not running. to process and deliver messages to recepients' message handlers.
The local embedded runtime {py:class}`~agnext.application.SingleThreadedAgentRuntime` This is a feature of the
can be called to process messages until there are no more messages to process. local embedded runtime {py:class}`~agnext.application.SingleThreadedAgentRuntime`.
To stop the background task immediately, use the `stop()` method:
```python ```python
run_context = runtime.start() run_context = runtime.start()
await run_context.stop_when_idle() # ... Send messages, publish messages, etc.
await run_context.stop() # This will return immediately but will not cancel
# any in-progress message handling.
``` ```
`runtime.start()` will start a background task to process messages. You can directly process messages without a background task using: You can resume the background task by calling `start()` again.
For batch scenarios such as running benchmarks for evaluating agents,
you may want to wait for the background task to stop automatically when
there are no unprocessed messages and no agent is handling messages --
the batch may considered complete.
You can achieve this by using the `stop_when_idle()` method:
```python
run_context = runtime.start()
# ... Send messages, publish messages, etc.
await run_context.stop_when_idle() # This will block until the runtime is idle.
```
You can also directly process messages one-by-one without a background task using:
```python ```python
await runtime.process_next() await runtime.process_next()
``` ```
Other runtime implementations will have their own way of running the runtime. Other runtime implementations will have their own ways of running the runtime.
## Messages ## Messages
@ -330,8 +349,9 @@ the message should be published via the runtime with the
{py:meth}`agnext.core.AgentRuntime.publish_message` method. {py:meth}`agnext.core.AgentRuntime.publish_message` method.
```python ```python
# ... Replace send_message with publish_message in the above example.
await runtime.publish_message("Hello, World! From the runtime!", namespace="default") await runtime.publish_message("Hello, World! From the runtime!", namespace="default")
await runtime.process_until_idle() # ...
``` ```
Running the above code will produce the following output: Running the above code will produce the following output: