mirror of
https://github.com/router-for-me/CLIProxyAPIPlus.git
synced 2026-03-21 16:40:22 +00:00
fix(kiro): handle empty content in messages to prevent Bad Request errors
Problem: - OpenCode's /compaction command and auto-compaction (at 80%+ context) sends requests that can result in empty assistant message content - Kiro API strictly requires non-empty content for all messages - This causes 'Bad Request: Improperly formed request' errors - After compaction failure, the malformed message stays in history, breaking all subsequent requests in the session Solution: - Add fallback content for empty assistant messages in buildAssistantMessageFromOpenAI() - Add history truncation (max 50 messages) to prevent oversized requests - This ensures all messages have valid content before sending to Kiro API Fixes issues with: - /compaction command returning Bad Request - Auto-compaction breaking sessions - Conversations becoming unresponsive after compaction failure
This commit is contained in:
@@ -576,9 +576,23 @@ func processOpenAIMessages(messages gjson.Result, modelID, origin string) ([]Kir
|
||||
}
|
||||
}
|
||||
|
||||
// Truncate history if too long to prevent Kiro API errors
|
||||
history = truncateHistoryIfNeeded(history)
|
||||
|
||||
return history, currentUserMsg, currentToolResults
|
||||
}
|
||||
|
||||
const kiroMaxHistoryMessages = 50
|
||||
|
||||
func truncateHistoryIfNeeded(history []KiroHistoryMessage) []KiroHistoryMessage {
|
||||
if len(history) <= kiroMaxHistoryMessages {
|
||||
return history
|
||||
}
|
||||
|
||||
log.Debugf("kiro-openai: truncating history from %d to %d messages", len(history), kiroMaxHistoryMessages)
|
||||
return history[len(history)-kiroMaxHistoryMessages:]
|
||||
}
|
||||
|
||||
// buildUserMessageFromOpenAI builds a user message from OpenAI format and extracts tool results
|
||||
func buildUserMessageFromOpenAI(msg gjson.Result, modelID, origin string) (KiroUserInputMessage, []KiroToolResult) {
|
||||
content := msg.Get("content")
|
||||
@@ -677,8 +691,20 @@ func buildAssistantMessageFromOpenAI(msg gjson.Result) KiroAssistantResponseMess
|
||||
}
|
||||
}
|
||||
|
||||
// CRITICAL FIX: Kiro API requires non-empty content for assistant messages
|
||||
// This can happen with compaction requests or error recovery scenarios
|
||||
finalContent := contentBuilder.String()
|
||||
if strings.TrimSpace(finalContent) == "" {
|
||||
if len(toolUses) > 0 {
|
||||
finalContent = "I'll help you with that."
|
||||
} else {
|
||||
finalContent = "I understand."
|
||||
}
|
||||
log.Debugf("kiro-openai: assistant content was empty, using default: %s", finalContent)
|
||||
}
|
||||
|
||||
return KiroAssistantResponseMessage{
|
||||
Content: contentBuilder.String(),
|
||||
Content: finalContent,
|
||||
ToolUses: toolUses,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user