- 引入 cloudwego/eino v0.9.9 和 eino-ext/components/model/openai v0.1.13 - 新增 internal/eino/ 包: - types.go: PipelineInput/Output、STTOutput、TokenUsage 类型定义 - state.go: PipelineState 跨节点状态收集(线程安全) - callback.go: ChatModel OnEndWithStreamOutput 回调,逐 token 推送 llm_chunk - nodes_stt.go: STT Lambda,支持文本/语音输入模式 - nodes_history.go: 历史组装 Lambda,含多模态图片支持 - nodes_splitter.go: 句子分割 Transform Lambda - nodes_tts.go: TTS Lambda,逐句合成推送音频 - nodes_done.go: Done Lambda,发送 llm_done 并追加历史 Co-Authored-By: Claude <noreply@anthropic.com>
37 lines
1.0 KiB
Go
37 lines
1.0 KiB
Go
package eino
|
||
|
||
import (
|
||
"context"
|
||
"strings"
|
||
"sync"
|
||
)
|
||
|
||
// PipelineState Graph 全局状态,用于跨节点收集数据。
|
||
// 通过 compose.WithGenLocalState 注册,各节点通过 StatePreHandler/StatePostHandler 读写。
|
||
type PipelineState struct {
|
||
mu sync.Mutex
|
||
FullResponse strings.Builder // LLM 完整回复(由 Callback 累积)
|
||
TranscribedText string // STT 识别文本
|
||
Model string // 实际使用的模型名
|
||
TokenUsage *TokenUsage // token 用量
|
||
}
|
||
|
||
// genLocalState 创建每请求的 PipelineState 实例。
|
||
func genLocalState(ctx context.Context) *PipelineState {
|
||
return &PipelineState{}
|
||
}
|
||
|
||
// AppendText 追加文本到 FullResponse(线程安全)。
|
||
func (s *PipelineState) AppendText(text string) {
|
||
s.mu.Lock()
|
||
defer s.mu.Unlock()
|
||
s.FullResponse.WriteString(text)
|
||
}
|
||
|
||
// GetFullResponse 获取完整回复文本(线程安全)。
|
||
func (s *PipelineState) GetFullResponse() string {
|
||
s.mu.Lock()
|
||
defer s.mu.Unlock()
|
||
return s.FullResponse.String()
|
||
}
|