microsoft/semantic-kernel · error · ArgumentException
The streaming configuration must have StreamFinalResponse se
Error message
The streaming configuration must have StreamFinalResponse set to true.
What it means
Thrown by the streaming InvokeInternalAsync when StreamingConfigurations is non-null but StreamFinalResponse is not true. The streaming path requires StreamFinalResponse == true to actually receive streamed tokens; the code auto-sets it when null, but rejects an explicit false as a likely caller mistake.
Source
Thrown at dotnet/src/Agents/Bedrock/BedrockAgent.cs:491
}
}
private IAsyncEnumerable<StreamingChatMessageContent> InvokeStreamingInternalAsync(
InvokeAgentRequest invokeAgentRequest,
AgentThread thread,
KernelArguments? arguments,
CancellationToken cancellationToken = default)
{
if (invokeAgentRequest.StreamingConfigurations == null)
{
invokeAgentRequest.StreamingConfigurations = new()
{
StreamFinalResponse = true,
};
}
else if (!(invokeAgentRequest.StreamingConfigurations.StreamFinalResponse ?? false))
{
throw new ArgumentException("The streaming configuration must have StreamFinalResponse set to true.");
}
return InvokeInternal();
async IAsyncEnumerable<StreamingChatMessageContent> InvokeInternal()
{
var combinedResponseMessageBuilder = new StringBuilder();
StreamingChatMessageContent? lastMessage = null;
// The Bedrock agent service has the same API for both streaming and non-streaming responses.
// We are invoking the same method as the non-streaming response with the streaming configuration set,
// and converting the chat message content to streaming chat message content.
await foreach (var chatMessageContent in this.InternalInvokeAsync(invokeAgentRequest, arguments, cancellationToken).ConfigureAwait(false))
{
lastMessage = new StreamingChatMessageContent(chatMessageContent.Role, chatMessageContent.Content)
{
AuthorName = chatMessageContent.AuthorName,
ModelId = chatMessageContent.ModelId,View on GitHub (pinned to c028a0c7dc)
Solutions
- Set StreamingConfigurations.StreamFinalResponse = true, or
- Leave StreamingConfigurations null so the streaming path sets it for you.
Example fix
// before
request.StreamingConfigurations = new() { StreamFinalResponse = false };
await agent.InvokeStreamingInternalAsync(request, args); // throws 176
// after
request.StreamingConfigurations = new() { StreamFinalResponse = true }; Defensive patterns
Strategy: validation
Validate before calling
request.StreamingConfigurations ??= new() { StreamFinalResponse = true };
request.StreamingConfigurations.StreamFinalResponse = true; // ensure true for streaming Type guard
static bool IsStreamingReady(InvokeAgentRequest r) =>
r.StreamingConfigurations is null || (r.StreamingConfigurations.StreamFinalResponse ?? false); Try / catch
try { await agent.InvokeStreamingInternalAsync(request, args, ct); }
catch (ArgumentException ex) when (ex.Message.Contains("StreamFinalResponse"))
{ /* set StreamFinalResponse = true or null out the config and retry */ } Prevention
- For streaming, either set StreamFinalResponse = true or leave StreamingConfigurations null.
- Never set StreamFinalResponse = false on the streaming path.
When it happens
Trigger: Calling the streaming invoke path with an InvokeAgentRequest where StreamingConfigurations is provided but StreamFinalResponse is set to false (or left null inside an existing config object that the else-if branch catches).
Common situations: Caller constructed a StreamingConfigurations object for other fields but forgot/declined StreamFinalResponse; reused a config object that disabled it.
Related errors
- The streaming configuration must be null for non-streaming r
- The Bedrock agent requires a message to be invoked.
- Bedrock agents must be invoked with a user message
- Invalid role: {authorRole}
- Message content cannot be null.
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/a08c7de4bfe220f2.
Report an issue: GitHub.