Eai.ResultCollector (eai v1.0.6)

Copy Markdown

增量状态机流式收集器。

三阶段状态机 + 增量扫描,将复杂度从 O(N²/n) 降至 O(N): :searching_start → 只在新 chunk + tail 中找 @left :collecting_core → 只在新 chunk + tail 中找 @right,核心内容用 IO list O(1) 追加 :complete → 停止接收

ANSI 清洗延迟到最终提取时一次性完成。

状态由 PTY.Session GenServer 持有(不在 Cache 中逐 chunk 读写), 仅在任务完成时将结果写入 Cache 供 get/1 查询。

同时提供超时提醒窗口(深度计数器)和中断标记(Cache)机制。

Summary

Functions

检查并清除中断标记,返回 true/false

检查当前超时窗口深度。如果 >0,消耗一层并返回提醒消息;否则清除并返回 nil。

增量收集一个 PTY 数据块。

超时时强制取出已收集的数据,尽力提取有效内容后标记完成。 接收收集器状态,返回 {:ok, output}

初始化收集器状态(供 GenServer 持有)。

初始化 Cache 中的任务状态(供 get/1 查询)。

设置强制中断标记

任务完成时将结果写入 Cache(供 get/1 查询)。

触发超时提醒窗口:在 Cache 中写入超时深度。 每次模型调用 get_task_result 时会消耗一层深度并返回提醒消息。

Functions

check_and_clear_interrupt_flag(pty_session_id)

检查并清除中断标记,返回 true/false

check_timeout_window(pty_session_id)

检查当前超时窗口深度。如果 >0,消耗一层并返回提醒消息;否则清除并返回 nil。

collect(state, data)

增量收集一个 PTY 数据块。

返回 {new_state, :collecting | {:complete, output}}

force_complete(result_collector)

超时时强制取出已收集的数据,尽力提取有效内容后标记完成。 接收收集器状态,返回 {:ok, output}

get(task_id)

init_state()

初始化收集器状态(供 GenServer 持有)。

init_task(task_id)

初始化 Cache 中的任务状态(供 get/1 查询)。

sentinel_left()

sentinel_right()

set_interrupt_flag(pty_session_id)

设置强制中断标记

store_complete(task_id, output)

任务完成时将结果写入 Cache(供 get/1 查询)。

trigger_timeout_window(pty_session_id, depth \\ 1)

触发超时提醒窗口:在 Cache 中写入超时深度。 每次模型调用 get_task_result 时会消耗一层深度并返回提醒消息。