/v1/responses SSE frames omit the in-payload type field — OpenAI-SDK-style clients (ZeroClaw) see an unparseable stream
#156
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom
ZeroClaw (on bob, podman) pointed at cortex via the OpenAI Responses API: prompts arrive at neuron on beast, generation runs to completion (~25s streams,
response.completedemitted), but ZeroClaw chat sessions never show an answer.Root cause
neuron's Responses SSE projection (
crates/neuron/src/wire/openai_responses.rs,project_responses_stream) carries the event name only in the SSEevent:field. Real OpenAI additionally stamps the event name into the JSON payload as"type"(plus asequence_number), e.g.Official SDKs — and ZeroClaw's parser (
zeroclaw-providers/src/openai_codex.rs,match event.get("type")) — dispatch ondata.typeand ignore the SSEevent:line entirely. With notypefield, every frame is unrecognized: no text deltas, no completion, no answer surfaced.Verified live 2026-07-15: replaying ZeroClaw's exact request (instructions + user message) against cortex
/v1/responsesstreams a correct answer; the frames just lacktype/sequence_number.Fix
Stamp
"type": <event name>and a monotonic"sequence_number"into every frame's data object inproject_responses_stream. Additive — clients keying on theevent:line (opencode, a0) are unaffected.