Files
smartmate/backend/services/agent/stream/sse_adapter.go
Losita d7184b776b Version: 0.9.75.dev.260505
后端:
1.收口阶段 6 agent 结构迁移,将 newAgent 内核与 agentsvc 编排层迁入 services/agent
- 切换 Agent 启动装配与 HTTP handler 直连 agent sv,移除旧 service agent bridge
- 补齐 Agent 对 memory、task、task-class、schedule 的 RPC 适配与契约字段
- 扩展 schedule、task、task-class RPC/contract 支撑 Agent 查询、写入与 provider 切流
- 更新迁移文档、README 与相关注释,明确 agent 当前切流点和剩余 memory 迁移面
2026-05-05 16:00:57 +08:00

38 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package agentstream
import "log"
// NewSSEPayloadEmitter 创建将 chunk 事件写入 outChan 的 emitter。
//
// 职责边界:
// 1. 接收 outChanSSE 输出通道),返回 PayloadEmitter 函数;
// 2. 只把原始 JSON payload 写入通道,不添加 "data: " 前缀和 "\n\n" 后缀;
// 3. SSE 格式化("data: " + payload + "\n\n")由 API 层的 writeSSEData 统一处理;
// 4. 通道满时静默丢弃并返回 nil让图继续完成状态持久化避免因客户端超时而丢失快照。
//
// 使用示例:
//
// emitter := NewSSEPayloadEmitter(outChan)
// chunkEmitter := NewChunkEmitter(emitter, requestID, modelName, created)
// chunkEmitter.EmitAssistantText("", "", "hello", true)
func NewSSEPayloadEmitter(outChan chan<- string) PayloadEmitter {
return func(payload string) error {
if outChan == nil {
return nil
}
if payload == "" {
return nil
}
select {
case outChan <- payload:
return nil
default:
// 通道已满:客户端可能已断开或消费过慢。
// 静默丢弃此 chunk让图继续执行并完成状态持久化。
// 客户端重连后可从 Redis 快照恢复,不需要这条消息。
log.Printf("[WARN] SSE outChan full, dropping payload (len=%d)", len(payload))
return nil
}
}
}