router-for-me/CLIProxyAPI · error
ExecuteProtocolStreamWithAuthManager requires Stream=true
Error message
ExecuteProtocolStreamWithAuthManager requires Stream=true
What it means
Programmer error in the route-level execution API: ExecuteProtocolStreamWithAuthManager() performs streaming requests with explicit entry/exit protocols, so passing ProtocolExecutionRequest{Stream: false} (the zero value) is rejected with a mode error. Use ExecuteProtocolWithAuthManager for non-streaming execution.
Source
Thrown at sdk/api/handlers/model_execution.go:168
Headers: req.Headers,
Query: req.Query,
ForcedProvider: req.ForcedProvider,
AuthSelectionModel: req.AuthSelectionModel,
})
if errMsg != nil {
return ModelExecutionResponse{}, errMsg
}
return ModelExecutionResponse{
StatusCode: http.StatusOK,
Headers: cloneHeader(headers),
Body: cloneBytes(body),
}, nil
}
// ExecuteProtocolStreamWithAuthManager executes a route-level streaming request with explicit protocols.
func (h *BaseAPIHandler) ExecuteProtocolStreamWithAuthManager(ctx context.Context, req ProtocolExecutionRequest) (ModelExecutionStream, *interfaces.ErrorMessage) {
if !req.Stream {
return ModelExecutionStream{}, modelExecutionModeError("ExecuteProtocolStreamWithAuthManager requires Stream=true")
}
dataChan, headers, errChan := h.executeStreamWithAuthManagerFormats(ctx, req.EntryProtocol, req.ExitProtocol, req.Model, cloneBytes(req.Body), req.Alt, false, modelExecutionOptions{
Headers: req.Headers,
Query: req.Query,
ForcedProvider: req.ForcedProvider,
AuthSelectionModel: req.AuthSelectionModel,
})
chunks, errMsg := prepareModelExecutionStream(ctx, dataChan, errChan)
if errMsg != nil {
return ModelExecutionStream{}, errMsg
}
return ModelExecutionStream{
StatusCode: http.StatusOK,
Headers: cloneHeader(headers),
Chunks: chunks,
}, nil
}
View on GitHub (pinned to 78f0c4079e)
Solutions
- Set Stream: true on the request before calling ExecuteProtocolStreamWithAuthManager
- Use ExecuteProtocolWithAuthManager when a buffered response is wanted
Example fix
// before stream, errMsg := h.ExecuteProtocolStreamWithAuthManager(ctx, req) // req.Stream == false // after req.Stream = true stream, errMsg := h.ExecuteProtocolStreamWithAuthManager(ctx, req)
Defensive patterns
Strategy: validation
Validate before calling
if !req.Stream {
return nil, fmt.Errorf("use ExecuteProtocolWithAuthManager for buffered responses")
}
stream, errMsg := h.ExecuteProtocolStreamWithAuthManager(ctx, req) Type guard
func isStreamingProtocolRequest(req ProtocolExecutionRequest) bool {
return req.Stream
} Try / catch
stream, errMsg := h.ExecuteProtocolStreamWithAuthManager(ctx, req)
if errMsg != nil && strings.Contains(errMsg.Error(), "requires Stream=true") {
log.Error("route bug: Stream flag missing for the streaming protocol executor")
} Prevention
- Explicitly set Stream: true whenever the streaming executor is used — the zero value fails
- Add compile-time-style helpers that force the flag, e.g. newStreamProtocolRequest(...)
When it happens
Trigger: An internal route handler or plugin calls BaseAPIHandler.ExecuteProtocolStreamWithAuthManager without setting Stream: true on the request.
Common situations: Forgetting the Stream flag because false is the struct zero value; sharing one request builder between both variants.
Related errors
- ExecuteModelStream requires Stream=true
- ExecuteProtocolWithAuthManager requires Stream=false
- ExecuteModel requires Stream=false
- count must be a positive integer
- Codex live multipart body requires an sdp field
AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15).
Data as JSON: /api/errors/c00f49c2ad360125.
Report an issue: GitHub.