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

  1. Set Stream: true on the request before calling ExecuteProtocolStreamWithAuthManager
  2. 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

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


AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15). Data as JSON: /api/errors/c00f49c2ad360125. Report an issue: GitHub.