From a2ceadcc2acb8c47acd63293ff94a22bf4237f81 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Feb 2026 19:08:47 +0000 Subject: [PATCH] refactor(gateway): dedupe assistant delta parsing --- src/gateway/agent-event-assistant-text.ts | 7 +++++++ src/gateway/openai-http.ts | 5 ++--- src/gateway/openresponses-http.ts | 5 ++--- 3 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 src/gateway/agent-event-assistant-text.ts diff --git a/src/gateway/agent-event-assistant-text.ts b/src/gateway/agent-event-assistant-text.ts new file mode 100644 index 0000000000..6341664d7d --- /dev/null +++ b/src/gateway/agent-event-assistant-text.ts @@ -0,0 +1,7 @@ +import type { AgentEventPayload } from "../infra/agent-events.js"; + +export function resolveAssistantStreamDeltaText(evt: AgentEventPayload): string { + const delta = evt.data.delta; + const text = evt.data.text; + return typeof delta === "string" ? delta : typeof text === "string" ? text : ""; +} diff --git a/src/gateway/openai-http.ts b/src/gateway/openai-http.ts index 038dc3540d..12d80cdfac 100644 --- a/src/gateway/openai-http.ts +++ b/src/gateway/openai-http.ts @@ -7,6 +7,7 @@ import { agentCommand } from "../commands/agent.js"; import { emitAgentEvent, onAgentEvent } from "../infra/agent-events.js"; import { logWarn } from "../logger.js"; import { defaultRuntime } from "../runtime.js"; +import { resolveAssistantStreamDeltaText } from "./agent-event-assistant-text.js"; import { buildAgentMessageFromConversationEntries, type ConversationEntry, @@ -243,9 +244,7 @@ export async function handleOpenAiHttpRequest( } if (evt.stream === "assistant") { - const delta = evt.data?.delta; - const text = evt.data?.text; - const content = typeof delta === "string" ? delta : typeof text === "string" ? text : ""; + const content = resolveAssistantStreamDeltaText(evt); if (!content) { return; } diff --git a/src/gateway/openresponses-http.ts b/src/gateway/openresponses-http.ts index 896ae9b184..0ce1189d5c 100644 --- a/src/gateway/openresponses-http.ts +++ b/src/gateway/openresponses-http.ts @@ -36,6 +36,7 @@ import { type InputImageSource, } from "../media/input-files.js"; import { defaultRuntime } from "../runtime.js"; +import { resolveAssistantStreamDeltaText } from "./agent-event-assistant-text.js"; import { buildAgentMessageFromConversationEntries, type ConversationEntry, @@ -727,9 +728,7 @@ export async function handleOpenResponsesHttpRequest( } if (evt.stream === "assistant") { - const delta = evt.data?.delta; - const text = evt.data?.text; - const content = typeof delta === "string" ? delta : typeof text === "string" ? text : ""; + const content = resolveAssistantStreamDeltaText(evt); if (!content) { return; }