POST /v1/messages — SSE streaming (Anthropic event shape) #10

Open
opened 2026-08-03 16:55:32 -07:00 by kalmiya · 0 comments
Owner

Kanban ticket: t_4048d742
Board: hermes-anthropic-api


Task t_4048d742: POST /v1/messages — SSE streaming (Anthropic event shape)
status: ready
assignee: -
workspace: scratch
max-retries: 2 (default)
created: 2026-08-03 16:53 by kalmiya

Body:
Anthropic Messages streaming via stream: true.

Event sequence (Anthropic):

  1. message_start — full message envelope, type=message_start
  2. ping — keepalive
  3. content_block_start — per content block (index, content_block)
  4. content_block_delta — incremental (delta.type=text_delta|input_json_delta|thinking_delta|signature_delta)
  5. content_block_stop
  6. message_delta — delta.stop_reason, delta.stop_sequence?, usage.output_tokens
  7. message_stop

Implementation:

  • Convert the Hermes agent's token stream into Anthropic's content_block_delta shape.
  • Maintain index counter for concurrent content blocks (rare in Hermes but possible with extended thinking).
  • Emit message_start first, then stream deltas, then message_delta with usage, then message_stop.
  • All events as event: <name>\ndata: <json>\n\n (Anthropic's SSE format uses bare data: with the event name on the preceding event: line — distinct from OpenAI's [DONE]).
  • Error mid-stream: emit a single event: error\ndata: {...} and close.

Events (1):
[2026-08-03 16:53] created {'assignee': None, 'status': 'ready', 'parents': [], 'tenant': None, 'workspace_kind': 'scratch', 'workspace_path': None, 'branch_name': None, 'project_id': None, 'skills': None, 'goal_mode': None, 'model_override': None, 'provider_override': None}

**Kanban ticket:** `t_4048d742` **Board:** `hermes-anthropic-api` --- Task t_4048d742: POST /v1/messages — SSE streaming (Anthropic event shape) status: ready assignee: - workspace: scratch max-retries: 2 (default) created: 2026-08-03 16:53 by kalmiya Body: Anthropic Messages streaming via `stream: true`. Event sequence (Anthropic): 1. `message_start` — full message envelope, `type=message_start` 2. `ping` — keepalive 3. `content_block_start` — per content block (`index`, `content_block`) 4. `content_block_delta` — incremental (`delta.type=text_delta|input_json_delta|thinking_delta|signature_delta`) 5. `content_block_stop` 6. `message_delta` — `delta.stop_reason, delta.stop_sequence?, usage.output_tokens` 7. `message_stop` Implementation: - Convert the Hermes agent's token stream into Anthropic's `content_block_delta` shape. - Maintain `index` counter for concurrent content blocks (rare in Hermes but possible with extended thinking). - Emit `message_start` first, then stream deltas, then `message_delta` with `usage`, then `message_stop`. - All events as `event: <name>\ndata: <json>\n\n` (Anthropic's SSE format uses bare `data:` with the event name on the preceding `event:` line — distinct from OpenAI's `[DONE]`). - Error mid-stream: emit a single `event: error\ndata: {...}` and close. Events (1): [2026-08-03 16:53] created {'assignee': None, 'status': 'ready', 'parents': [], 'tenant': None, 'workspace_kind': 'scratch', 'workspace_path': None, 'branch_name': None, 'project_id': None, 'skills': None, 'goal_mode': None, 'model_override': None, 'provider_override': None}
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kalmiya/hermes-anthropic-api#10
No description provided.