fix(claude haiku): update handling of unsupported adaptive thinking and output_config.effort

This commit is contained in:
decolua
2026-06-20 16:29:15 +07:00
parent 9cdb8173d7
commit 401d93bd5c

View File

@@ -81,13 +81,14 @@ export function fixToolUseOrdering(messages) {
return merged;
}
// Models that reject thinking.type "adaptive" (only Sonnet/Opus support it)
// Models that reject thinking.type "adaptive" + output_config.effort (Opus 4.5+/Sonnet 4.6+ only)
const ADAPTIVE_THINKING_UNSUPPORTED = /haiku/i;
// Normalize a native Claude passthrough body to match Anthropic Messages API spec.
// Newer Cowork/Claude Code clients emit beta-only shapes that OAuth endpoints reject:
// 1. thinking.type "adaptive" → unsupported on Haiku
// 2. role "system" messages (mid-conversation-system beta) → only top-level system is allowed
// 2. output_config.effort → unsupported on Haiku
// 3. role "system" messages (mid-conversation-system beta) → only top-level system is allowed
export function normalizeClaudePassthrough(body, model = "") {
if (!body || typeof body !== "object") return body;
@@ -96,6 +97,12 @@ export function normalizeClaudePassthrough(body, model = "") {
body.thinking = { type: "enabled", budget_tokens: 10000 };
}
// 2. Strip effort param for models that don't support it (keep other output_config fields)
if (ADAPTIVE_THINKING_UNSUPPORTED.test(model) && body.output_config?.effort != null) {
delete body.output_config.effort;
if (Object.keys(body.output_config).length === 0) delete body.output_config;
}
// 2. Hoist mid-conversation system messages into the top-level system field
if (Array.isArray(body.messages)) {
const systemBlocks = [];