can1357/oh-my-pi · error · Error
${response.errorMessage ?? "provider error"}
Error message
${response.errorMessage ?? "provider error"} What it means
generateChangelogEntries() calls the LLM to draft changelog entries; if the response's stopReason is "error", the raw provider error message is rethrown as an Error (defaulting to "provider error" when errorMessage is absent). This propagates transport/auth/model failures from the changelog-generation call.
Source
Thrown at packages/coding-agent/src/commit/changelog/generate.ts:71
is_package_changelog: isPackageChangelog,
existing_entries: existingEntries,
stat,
diff,
});
const response = await retryTransientCompletion(() =>
completeSimple(
model,
{
systemPrompt: [prompt.render(changelogSystemPrompt)],
messages: [{ role: "user", content: userContent, timestamp: Date.now() }],
tools: [changelogTool],
},
{ apiKey, maxTokens: 1200, reasoning: toReasoningEffort(thinkingLevel) },
),
);
if (response.stopReason === "error") {
throw new Error(response.errorMessage ?? "provider error");
}
const parsed = parseChangelogResponse(response);
return { entries: dedupeEntries(parsed.entries) };
}
function parseChangelogResponse(message: AssistantMessage): ChangelogGenerationResult {
const toolCall = extractToolCall(message, "create_changelog_entries");
if (toolCall) {
const parsed = validateToolCall([changelogTool], toolCall) as typeof changelogTool.parameters.infer;
return { entries: parsed.entries ?? {} };
}
const text = extractTextContent(message);
const parsed = parseJsonPayload(text) as ChangelogGenerationResult;
return { entries: parsed.entries ?? {} };
}
View on GitHub (pinned to 9690622007)
Solutions
- Read the embedded errorMessage — it names the provider-side cause (auth, 429, model id)
- Verify the provider API key is set and valid
- Retry — rate-limit and transient network errors are often temporary
- Use --no-changelog or a different model to bypass changelog generation
Example fix
// before
const apiKey = process.env.PI_API_KEY; // undefined -> provider error
// after
if (!apiKey) throw new Error("Set PI_API_KEY before generating changelog"); Defensive patterns
Strategy: retry
Validate before calling
if (!apiKey) throw new Error("Changelog generation skipped: no API key configured"); Try / catch
try {
const { entries } = await generateChangelogEntries(...);
} catch (err) {
logger.warn("Changelog generation failed", { cause: err.message });
// proceed without changelog or run with --no-changelog
} Prevention
- Ensure provider API keys are set and valid before running commit automation
- Add bounded retries with backoff for rate-limit errors
- Keep changelog prompts small (maxTokens: 1200 cap)
When it happens
Trigger: The changelog LLM request completes with stopReason === "error" — invalid/missing apiKey, network failure, model not found, rate limit, or context overflow with maxTokens: 1200.
Common situations: Expired or unset provider API key; network outage; selected model unavailable; request exceeding provider rate limits during bulk commits.
Related errors
- ${message.errorMessage ?? "Provider error"}
- AI staging request failed: ${response.errorMessage ?? "unkno
- Empty model response
- timed out: {command}
- GPT-5 Harmony leak persisted after ${harmonyRetryAttempt} re
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/f32aa61b22e2fd00.
Report an issue: GitHub.