diff --git a/lua/codecompanion/adapters/http/openai_responses.lua b/lua/codecompanion/adapters/http/openai_responses.lua index 198e7216a..f01a26ac2 100644 --- a/lua/codecompanion/adapters/http/openai_responses.lua +++ b/lua/codecompanion/adapters/http/openai_responses.lua @@ -332,6 +332,7 @@ return { if not self.opts.stream then -- Reasoning local reasoning = {} + local content = nil if json.output then for _, item in ipairs(json.output) do if item.type == "reasoning" then @@ -342,6 +343,12 @@ return { reasoning.content = reasoning.content and (reasoning.content .. "\n\n" .. block.text) or block.text end end + elseif item.type == "message" then + for _, block in ipairs(item.content) do + if block.type == "output_text" then + content = content and (content .. "\n\n" .. block.text) or block.text + end + end end end end @@ -369,13 +376,6 @@ return { end) end - local content = json.output - and json.output[1] - and json.output[1].content - and json.output[1].content[1] - and json.output[1].content[1].text - or nil - return { status = "success", output = { diff --git a/tests/adapters/http/test_openai_responses.lua b/tests/adapters/http/test_openai_responses.lua index 5990e49b0..1ac3eaec7 100644 --- a/tests/adapters/http/test_openai_responses.lua +++ b/tests/adapters/http/test_openai_responses.lua @@ -536,16 +536,12 @@ T["Responses"]["No Streaming"]["can process reasoning output"] = function() -- Match the format of the actual request local json = { body = data } - h.expect_contains( - "**Choosing descriptive terms**", - adapter.handlers.response.parse_chat(adapter, json).output.reasoning.content - ) + local output = adapter.handlers.response.parse_chat(adapter, json).output - h.eq( - "rs_0a10a8c968d594670168e91d0204ac8195b26b3e4de997f65c", - adapter.handlers.response.parse_chat(adapter, json).output.reasoning.id - ) - h.eq("gAAAAABo6", adapter.handlers.response.parse_chat(adapter, json).output.reasoning.encrypted_content) + h.expect_contains("**Choosing descriptive terms**", output.reasoning.content) + h.eq("rs_0a10a8c968d594670168e91d0204ac8195b26b3e4de997f65c", output.reasoning.id) + h.eq("gAAAAABo6", output.reasoning.encrypted_content) + h.eq("Dynamic expressive", output.content) end T["Responses"]["Streaming"] = new_set()