fix: context cancel not working during node runner execution (#819)

This commit is contained in:
Zhj
2025-08-21 17:59:01 +08:00
committed by GitHub
parent 09d00c26cb
commit 19c63a1150
6 changed files with 161 additions and 121 deletions

View File

@@ -57,17 +57,25 @@ func (t *TokenCollector) addTokenUsage(usage *model.TokenUsage) {
}
func (t *TokenCollector) wait() *model.TokenUsage {
t.wg.Wait()
t.mu.Lock()
defer t.mu.Unlock()
t.wg.Wait()
usage := &model.TokenUsage{
PromptTokens: t.Usage.PromptTokens,
CompletionTokens: t.Usage.CompletionTokens,
TotalTokens: t.Usage.TotalTokens,
}
t.mu.Unlock()
return usage
}
func (t *TokenCollector) add(i int) {
t.mu.Lock()
defer t.mu.Unlock()
t.wg.Add(i)
return
}
func getTokenCollector(ctx context.Context) *TokenCollector {
c := GetExeCtx(ctx)
if c == nil {
@@ -83,7 +91,8 @@ func GetTokenCallbackHandler() callbacks.Handler {
if c == nil {
return ctx
}
c.wg.Add(1)
c.add(1)
//c.wg.Add(1)
return ctx
},
OnEnd: func(ctx context.Context, runInfo *callbacks.RunInfo, output *model.CallbackOutput) context.Context {
@@ -122,12 +131,16 @@ func GetTokenCallbackHandler() callbacks.Handler {
if chunk.TokenUsage == nil {
continue
}
// 在goroutine内部累加避免并发访问
newC.PromptTokens += chunk.TokenUsage.PromptTokens
newC.CompletionTokens += chunk.TokenUsage.CompletionTokens
newC.TotalTokens += chunk.TokenUsage.TotalTokens
}
c.addTokenUsage(newC)
// 只在最后调用一次addTokenUsage,减少锁竞争
if newC.TotalTokens > 0 {
c.addTokenUsage(newC)
}
})
return ctx
},