Module: Ask::Agent::Streaming
- Defined in:
- lib/ask/agent/streaming.rb
Overview
Framework-agnostic SSE streaming for agent sessions.
Returns a Rack-compatible Enumerator that yields SSE-formatted strings as the agent runs. Works with any Rack server (Puma, Falcon, etc.) without requiring ActionController::Live or Rails.
Constant Summary collapse
- DEFAULT_EVENT_MAP =
{ Events::TextDelta => "delta", Events::ThinkingDelta => "thinking", Events::ToolCallDelta => "tool_call_delta", Events::ToolExecutionStart => "tool_start", Events::ToolExecutionUpdate => "tool_update", Events::ToolExecutionEnd => "tool_end", Events::SessionEnd => "done", Events::Error => "error" }.freeze
Class Method Summary collapse
-
.run(session, prompt, event_map: {}) {|type, data| ... } ⇒ Enumerator?
Run an agent session and stream events as SSE-formatted strings.
Class Method Details
.run(session, prompt, event_map: {}) {|type, data| ... } ⇒ Enumerator?
Run an agent session and stream events as SSE-formatted strings.
Two modes:
-
No block — returns a Rack-compatible Enumerator that yields raw SSE strings: "data: \"type\":\"delta\",\"content\":\"..\"type\":\"delta\",\"content\":\"...\"\n\n"
-
With block — calls the block for each event with
(event_type_string, data_hash). The block is responsible for writing/handling the data. This mode is designed for use with Rails'ActionController::Live::SSE#write.
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/ask/agent/streaming.rb', line 72 def run(session, prompt, event_map: {}, &block) mapping = DEFAULT_EVENT_MAP.merge(event_map) if block run_with_block(session, prompt, mapping, &block) nil else run_with_enumerator(session, prompt, mapping) end end |