Streaming
StreamTextAsync returns immediately. Enumerate TextStream for text deltas, or Stream for tool calls, tool results, sources, and the finish part.
var stream = client.StreamTextAsync(new StreamTextOptions
{
Model = model,
Prompt = "Draft a changelog entry.",
});
await foreach (var delta in stream.TextStream())
{
Console.Write(delta);
}
Console.WriteLine();
Console.WriteLine(await stream.FinishReason);
UI message stream
Vercel.AI.AspNetCore writes the same Server-Sent Events a JavaScript useChat client reads:
app.MapPost("/chat", (ChatRequest request) =>
{
var stream = client.StreamTextAsync(new StreamTextOptions { Model = model, Prompt = request.Prompt });
return stream.ToUIMessageStreamResult();
});
The response is text/event-stream with x-vercel-ai-ui-message-stream: v1. Chunks include text, reasoning, tool input and output, sources, step boundaries, finish, and errors. See COMPATIBILITY.md for chunk types that are not emitted yet.