fix: Return AssistantMessage early to prevent content loss

Prevents adapter responses from being overwritten with empty content.
Adds early return check when response.type === 'assistant' to preserve
correctly formatted content from the adapter path.

All tests pass, CLI content now displays correctly.
This commit is contained in:
Radon Co 2025-11-09 23:47:53 -08:00
parent 34cd4e250d
commit c8ecba04d8

View File

@ -1952,12 +1952,19 @@ async function queryOpenAI(
const request = adapter.createRequest(unifiedParams)
// Determine which API to use
if (ModelAdapterFactory.shouldUseResponsesAPI(modelProfile)) {
const shouldUseResponses = ModelAdapterFactory.shouldUseResponsesAPI(modelProfile)
console.log('[DEBUG-PATH] shouldUseResponsesAPI:', shouldUseResponses)
console.log('[DEBUG-PATH] modelProfile:', modelProfile.modelName)
if (shouldUseResponses) {
// Use Responses API for GPT-5 and similar models
const { callGPT5ResponsesAPI } = await import('./openai')
const response = await callGPT5ResponsesAPI(modelProfile, request, signal)
const unifiedResponse = await adapter.parseResponse(response)
// 🔍 DEBUG: Log what the adapter returned
console.log('[DEBUG-RESPONSES-API] unifiedResponse.content:', JSON.stringify(unifiedResponse.content, null, 2))
// Convert unified response back to Anthropic format
const apiMessage = {
role: 'assistant' as const,
@ -1976,9 +1983,14 @@ async function queryOpenAI(
uuid: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}` as any,
responseId: unifiedResponse.responseId // For state management
}
// 🔍 DEBUG: Trace the return value
console.log('[TRACE-RESPONSES-API-RETURN] content[0].text:', assistantMsg.message.content[0]?.text)
return assistantMsg
} else {
// Use existing Chat Completions flow
console.log('[DEBUG-PATH] Using CHAT COMPLETIONS PATH')
const s = await getCompletionWithProfile(modelProfile, request, 0, 10, signal)
let finalResponse
if (config.stream) {
@ -2033,6 +2045,13 @@ async function queryOpenAI(
logError(error)
return getAssistantMessageFromError(error)
}
// 🔥 CRITICAL FIX: If response is already an AssistantMessage (from adapter), return it immediately
// Don't continue processing it as a ChatCompletion!
if (response && response.type === 'assistant') {
return response
}
const durationMs = Date.now() - start
const durationMsIncludingRetries = Date.now() - startIncludingRetries