Streaming shows output token-by-token instead of waiting for the complete response. Users see progress immediately, which matters for longer outputs or interactive applications.
Compare: non-streaming vs streaming (same scenario)
The scenario below is the same in both snippets. The only difference is whether you set stream=Trueand iterate over the stream.
In Python, non-streaming refers to stream=False, not “sync”. If you use AsyncDedalus,
you’ll still write async code and use asyncio.run(...). If you prefer fully synchronous code,
use the Dedalus client (example below).
import asynciofrom dedalus_labs import AsyncDedalus, DedalusRunnerfrom dotenv import load_dotenvload_dotenv()async def main(): client = AsyncDedalus() runner = DedalusRunner(client) result = await runner.run( input="Find me the nearest basketball games in January in San Francisco.", model="anthropic/claude-opus-4-5", mcp_servers=["windsor/ticketmaster-mcp"], # Discover events via Ticketmaster ) # You only see output after the full run completes. print(result.final_output)if __name__ == "__main__": asyncio.run(main())
from dedalus_labs import Dedalus, DedalusRunnerfrom dotenv import load_dotenvload_dotenv()def main(): client = Dedalus() runner = DedalusRunner(client) result = runner.run( input="Find me the nearest basketball games in January in San Francisco.", model="anthropic/claude-opus-4-5", mcp_servers=["windsor/ticketmaster-mcp"], # Discover events via Ticketmaster ) print(result.final_output)if __name__ == "__main__": main()
import Dedalus from "dedalus-labs";import { DedalusRunner } from "dedalus-labs";const client = new Dedalus();const runner = new DedalusRunner(client, true);async function main() { const result = await runner.run({ input: "Find me the nearest basketball games in January in San Francisco.", model: "anthropic/claude-opus-4-5", mcpServers: ["windsor/ticketmaster-mcp"], // Discover events via Ticketmaster }); console.log((result as any).finalOutput);}main();