plandex-ai/plandex · error
no describePlan function call found in response
Error message
no describePlan function call found in response
What it means
In the non-XML path, genPlanDescription forces a describePlan function/tool call; if the model returns empty content (no tool call payload), the server reports that no describePlan function call was found and returns a 500 ApiError. This indicates the provider never produced the forced tool invocation.
Source
Thrown at app/server/model/plan/commit_msg.go:145
var commitMsg string
if baseModelConfig.PreferredOutputFormat == shared.ModelOutputFormatXml {
commitMsg = utils.GetXMLContent(content, "commitMsg")
if commitMsg == "" {
go notify.NotifyErr(notify.SeverityError, fmt.Errorf("no commitMsg tag found in XML response"))
return nil, &shared.ApiError{
Type: shared.ApiErrorTypeOther,
Status: http.StatusInternalServerError,
Msg: "No commitMsg tag found in XML response",
}
}
} else {
if content == "" {
fmt.Println("no describePlan function call found in response")
go notify.NotifyErr(notify.SeverityError, fmt.Errorf("no describePlan function call found in response"))
return nil, &shared.ApiError{
Type: shared.ApiErrorTypeOther,
Status: http.StatusInternalServerError,
Msg: "No describePlan function call found in response. The model failed to generate a valid response.",
}
}
var desc shared.ConvoMessageDescription
err = json.Unmarshal([]byte(content), &desc)
if err != nil {
fmt.Printf("Error unmarshalling plan description response: %v\n", err)
go notify.NotifyErr(notify.SeverityError, fmt.Errorf("error unmarshalling plan description response: %v", err))
return nil, &shared.ApiError{
Type: shared.ApiErrorTypeOther,
Status: http.StatusInternalServerError,View on GitHub (pinned to e2d772072e)
Solutions
- Verify the CommitMsg model supports function calling and tool_choice forced invocation
- Bypass proxies/gateways that may strip the tools/tool_choice fields and retry
- Check provider status/incidents for empty-completion behavior
- Switch the CommitMsg model to one with known tool-calling support
Example fix
// before: model without tool support
"CommitMsg": {"ModelName": "some-legacy-completion-model"}
// after: tool-calling capable model
"CommitMsg": {"ModelName": "gpt-4o-mini"} Defensive patterns
Strategy: fallback
Validate before calling
// confirm the model supports tool calls before wiring it into the CommitMsg pack
supportsTools, err := providerSupportsFunctionCalling(modelName)
if err != nil || !supportsTools { log.Fatal("CommitMsg model must support function calling") } Try / catch
desc, apiErr := genPlanDescription(...)
if apiErr != nil && strings.Contains(apiErr.Msg, "describePlan function call") {
// use a locally generated summary instead of the LLM one
return localCommitMsg(currentPlanState), nil
} Prevention
- Choose CommitMsg models with documented tool-calling support
- Avoid proxies that strip tools/tool_choice fields
- Monitor for empty completions per provider and alert on spikes
- Pin model versions to avoid silent deprecation of tool support
When it happens
Trigger: The model provider doesn't support forced tool_choice for the configured model; the response stream ended with empty content due to a provider error, content filter, or max_tokens=0-like truncation; the model pack's CommitMsg entry is misconfigured with a chat model lacking tool support.
Common situations: Using a model (e.g., older open-source endpoints, some proxies/gateways) that silently drops the tools parameter; proxy stripping function-calling fields; provider returning empty completions during incidents.
Related errors
- No namePlan function call found in response. The model faile
- No namePipedData function call found in response. The model
- No nameNote function call found in response. The model faile
- no response from model
- client not found for provider composite: %s
AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05).
Data as JSON: /api/errors/319d1efcf74224a5.
Report an issue: GitHub.