fix(ai): handle OpenAI Responses reasoning text deltas
This commit is contained in:
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed OpenAI Responses reasoning text streaming for LM Studio and other compatible providers that emit `response.reasoning_text.delta` events ([#4191](https://github.com/badlogic/pi-mono/pull/4191) by [@yaanfpv](https://github.com/yaanfpv)).
|
||||||
|
- Fixed OpenAI Codex OAuth refresh failures writing directly to stderr while the TUI is active ([#4141](https://github.com/badlogic/pi-mono/issues/4141)).
|
||||||
|
|
||||||
## [0.73.0] - 2026-05-04
|
## [0.73.0] - 2026-05-04
|
||||||
|
|
||||||
### Breaking Changes
|
### Breaking Changes
|
||||||
|
|||||||
@@ -354,6 +354,16 @@ export async function processResponsesStream<TApi extends Api>(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (event.type === "response.reasoning_text.delta") {
|
||||||
|
if (currentItem?.type === "reasoning" && currentBlock?.type === "thinking") {
|
||||||
|
currentBlock.thinking += event.delta;
|
||||||
|
stream.push({
|
||||||
|
type: "thinking_delta",
|
||||||
|
contentIndex: blockIndex(),
|
||||||
|
delta: event.delta,
|
||||||
|
partial: output,
|
||||||
|
});
|
||||||
|
}
|
||||||
} else if (event.type === "response.content_part.added") {
|
} else if (event.type === "response.content_part.added") {
|
||||||
if (currentItem?.type === "message") {
|
if (currentItem?.type === "message") {
|
||||||
currentItem.content = currentItem.content || [];
|
currentItem.content = currentItem.content || [];
|
||||||
@@ -429,7 +439,9 @@ export async function processResponsesStream<TApi extends Api>(
|
|||||||
const item = event.item;
|
const item = event.item;
|
||||||
|
|
||||||
if (item.type === "reasoning" && currentBlock?.type === "thinking") {
|
if (item.type === "reasoning" && currentBlock?.type === "thinking") {
|
||||||
currentBlock.thinking = item.summary?.map((s) => s.text).join("\n\n") || "";
|
const summaryText = item.summary?.map((s) => s.text).join("\n\n") || "";
|
||||||
|
const contentText = item.content?.map((c) => c.text).join("\n\n") || "";
|
||||||
|
currentBlock.thinking = summaryText || contentText || currentBlock.thinking;
|
||||||
currentBlock.thinkingSignature = JSON.stringify(item);
|
currentBlock.thinkingSignature = JSON.stringify(item);
|
||||||
stream.push({
|
stream.push({
|
||||||
type: "thinking_end",
|
type: "thinking_end",
|
||||||
|
|||||||
Reference in New Issue
Block a user