{"record":{"id":"fece277eb29545bf","repo":"router-for-me/CLIProxyAPI","slug":"executeprotocolwithauthmanager-requires-stream-fal","errorCode":null,"errorMessage":"ExecuteProtocolWithAuthManager requires Stream=false","messagePattern":"ExecuteProtocolWithAuthManager requires Stream=false","errorType":"http","errorClass":null,"httpStatus":400,"severity":"error","filePath":"sdk/api/handlers/model_execution.go","lineNumber":147,"sourceCode":"\t\tInternalSource:          true,\n\t\tSkipInterceptorPluginID: req.SkipInterceptorPluginID,\n\t\tSkipRouterPluginID:      req.SkipRouterPluginID,\n\t})\n\tchunks, errMsg := prepareModelExecutionStream(ctx, dataChan, errChan)\n\tif errMsg != nil {\n\t\treturn ModelExecutionStream{}, errMsg\n\t}\n\treturn ModelExecutionStream{\n\t\tStatusCode: http.StatusOK,\n\t\tHeaders:    cloneHeader(headers),\n\t\tChunks:     chunks,\n\t}, nil\n}\n\n// ExecuteProtocolWithAuthManager executes a route-level non-streaming request with explicit protocols.\nfunc (h *BaseAPIHandler) ExecuteProtocolWithAuthManager(ctx context.Context, req ProtocolExecutionRequest) (ModelExecutionResponse, *interfaces.ErrorMessage) {\n\tif req.Stream {\n\t\treturn ModelExecutionResponse{}, modelExecutionModeError(\"ExecuteProtocolWithAuthManager requires Stream=false\")\n\t}\n\tbody, headers, errMsg := h.executeWithAuthManagerFormats(ctx, req.EntryProtocol, req.ExitProtocol, req.Model, cloneBytes(req.Body), req.Alt, false, modelExecutionOptions{\n\t\tHeaders:            req.Headers,\n\t\tQuery:              req.Query,\n\t\tForcedProvider:     req.ForcedProvider,\n\t\tAuthSelectionModel: req.AuthSelectionModel,\n\t})\n\tif errMsg != nil {\n\t\treturn ModelExecutionResponse{}, errMsg\n\t}\n\treturn ModelExecutionResponse{\n\t\tStatusCode: http.StatusOK,\n\t\tHeaders:    cloneHeader(headers),\n\t\tBody:       cloneBytes(body),\n\t}, nil\n}\n\n// ExecuteProtocolStreamWithAuthManager executes a route-level streaming request with explicit protocols.","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/router-for-me/CLIProxyAPI/blob/78f0c4079e3e6273d65d03b5549cffc898703264/sdk/api/handlers/model_execution.go#L129-L165","documentation":"Programmer error in the route-level execution API: ExecuteProtocolWithAuthManager() performs non-streaming requests with explicit entry/exit protocols, so passing ProtocolExecutionRequest{Stream: true} is rejected with a mode error before dispatch. Use ExecuteProtocolStreamWithAuthManager for streaming.","triggerScenarios":"An internal route handler or plugin calls BaseAPIHandler.ExecuteProtocolWithAuthManager with a request whose Stream field is true — typically a request struct shared between the streaming and non-streaming paths.","commonSituations":"One request struct reused for both variants with Stream toggled by a flag; refactoring a route from streaming to buffered and leaving Stream set.","solutions":["Set Stream: false before calling ExecuteProtocolWithAuthManager","Route the call to ExecuteProtocolStreamWithAuthManager when the caller needs chunks"],"exampleFix":"// before\nresp, errMsg := h.ExecuteProtocolWithAuthManager(ctx, req) // req.Stream == true\n// after\nreq.Stream = false\nresp, errMsg := h.ExecuteProtocolWithAuthManager(ctx, req)","handlingStrategy":"validation","validationCode":"if req.Stream {\n    return nil, fmt.Errorf(\"use ExecuteProtocolStreamWithAuthManager for streaming\")\n}\nresp, errMsg := h.ExecuteProtocolWithAuthManager(ctx, req)","typeGuard":"func isNonStreamingProtocolRequest(req ProtocolExecutionRequest) bool {\n    return !req.Stream\n}","tryCatchPattern":"resp, errMsg := h.ExecuteProtocolWithAuthManager(ctx, req)\nif errMsg != nil && strings.Contains(errMsg.Error(), \"requires Stream=false\") {\n    log.Error(\"route bug: streaming request reached the non-streaming protocol executor\")\n}","preventionTips":["Do not share one mutable request struct between streaming and non-streaming paths","Set Stream immediately before the matching Execute* call"],"tags":["api-misuse","sdk","plugin-api","validation","protocols"],"backgroundTag":null,"analyzedSha":"78f0c4079e3e6273d65d03b5549cffc898703264","analyzedAt":"2026-08-15T12:26:37.444Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}