{"record":{"id":"f9f606763e9063b3","repo":"plandex-ai/plandex","slug":"error-calling-model-v","errorCode":null,"errorMessage":"error calling model: %v","messagePattern":"error calling model: (.+?)","errorType":"http","errorClass":null,"httpStatus":500,"severity":"error","filePath":"app/server/model/plan/build_whole_file.go","lineNumber":123,"sourceCode":"\t\tAfterReq: func() {\n\t\t\tfileState.builderRun.BuildWholeFileFinishedAt = time.Now()\n\t\t},\n\n\t\tWillCacheNumTokens:    willCacheNumTokens,\n\t\tEstimatedOutputTokens: maxExpectedOutputTokens,\n\n\t\tSessionId:     sessionId,\n\t\tSettings:      fileState.settings,\n\t\tOrgUserConfig: fileState.orgUserConfig,\n\t})\n\n\tif err != nil {\n\t\tif errors.Is(err, context.Canceled) {\n\t\t\tlog.Printf(\"buildWholeFileFallback - context canceled during model request for file %s\", filePath)\n\t\t\treturn \"\", err\n\t\t}\n\n\t\treturn \"\", fmt.Errorf(\"error calling model: %v\", err)\n\t}\n\n\tfileState.builderRun.GenerationIds = append(fileState.builderRun.GenerationIds, modelRes.GenerationId)\n\tfileState.builderRun.BuildWholeFileFinishedAt = time.Now()\n\n\tcontent := modelRes.Content\n\n\t// log.Printf(\"buildWholeFile - %s - content:\\n%s\\n\", filePath, content)\n\n\twholeFile := utils.GetXMLContent(content, \"PlandexWholeFile\")\n\n\tif wholeFile == \"\" {\n\t\tlog.Printf(\"buildWholeFile - no whole file found in response\\n\")\n\t\treturn fileState.wholeFileRetryOrError(buildCtx, proposedContent, desc, comments, sessionId, fmt.Errorf(\"no whole file found in response\"))\n\t}\n\n\treturn wholeFile, nil\n}","sourceCodeStart":105,"sourceCodeEnd":141,"githubUrl":"https://github.com/plandex-ai/plandex/blob/e2d772072efadbe41d2946d97d79be55532dbab5/app/server/model/plan/build_whole_file.go#L105-L141","documentation":"Wraps any non-context-canceled error from the model request made inside buildWholeFileFallback. If the context was canceled the raw error is returned; everything else is wrapped as 'error calling model'.","triggerScenarios":"The LLM API call fails: network errors, auth failures, rate limits, invalid model config, or provider 5xx — anything except context.Canceled.","commonSituations":"Expired/invalid API keys, provider outages, misconfigured base model config, rate limiting during heavy usage.","solutions":["Inspect the wrapped %v cause to identify the provider failure","Check API key/auth vars and model pack configuration","Retry with backoff for transient network/rate-limit errors"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"if err := validateModelConfig(authVars, settings); err != nil {\n    return fmt.Errorf(\"model config invalid before call: %v\", err)\n}","typeGuard":null,"tryCatchPattern":"content, err := buildWholeFileFallback(...)\nvar ctxErr error\nif errors.Is(err, context.Canceled) {\n    return err // do not retry cancellations\n}\nif strings.HasPrefix(err.Error(), \"error calling model:\") {\n    // retry with backoff for transient provider failures\n}","preventionTips":["Check API keys and model config before requests","Use exponential backoff for transient network/rate-limit errors","Distinguish context.Canceled from real failures to avoid pointless retries"],"tags":["go","network","llm-api","error-wrapping"],"backgroundTag":"model-request-failed","analyzedSha":"e2d772072efadbe41d2946d97d79be55532dbab5","analyzedAt":"2026-09-05T20:56:53.631Z","contentChangedAt":"2026-09-05T20:56:53.631Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}