mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-10-20 14:37:20 +02:00
Merge remote-tracking branch 'origin/main' into codex/project-resume-reuse
This commit is contained in:
commit
ac42b925da
30 files changed
+1025
-57
No files matched your search
@@ -13,6 +13,7 @@ type einoRunUsageSummary struct {
|
||||
CompletionTokens int
|
||||
TotalTokens int
|
||||
CachedTokens int
|
||||
CacheWriteTokens int
|
||||
ReasoningTokens int
|
||||
}
|
||||
|
||||
@@ -42,8 +43,13 @@ func (a *einoRunUsageAccumulator) AddUsage(usage *schema.TokenUsage) bool {
|
||||
a.summary.ModelCalls++
|
||||
a.summary.PromptTokens += usage.PromptTokens
|
||||
a.summary.CompletionTokens += usage.CompletionTokens
|
||||
a.summary.TotalTokens += usage.TotalTokens
|
||||
total := usage.TotalTokens
|
||||
if total == 0 {
|
||||
total = usage.PromptTokens + usage.CompletionTokens
|
||||
}
|
||||
a.summary.TotalTokens += total
|
||||
a.summary.CachedTokens += usage.PromptTokenDetails.CachedTokens
|
||||
a.summary.CacheWriteTokens += usage.PromptTokenDetails.CacheWriteTokens
|
||||
a.summary.ReasoningTokens += usage.CompletionTokensDetails.ReasoningTokens
|
||||
return true
|
||||
}
|
||||
@@ -88,6 +94,7 @@ func (a *einoRunUsageAccumulator) EmitOnce(
|
||||
"completionTokens": s.CompletionTokens,
|
||||
"totalTokens": s.TotalTokens,
|
||||
"cachedTokens": s.CachedTokens,
|
||||
"cacheWriteTokens": s.CacheWriteTokens,
|
||||
"reasoningTokens": s.ReasoningTokens,
|
||||
}
|
||||
if progress != nil {
|
||||
@@ -104,6 +111,7 @@ func (a *einoRunUsageAccumulator) EmitOnce(
|
||||
zap.Int("completionTokens", s.CompletionTokens),
|
||||
zap.Int("totalTokens", s.TotalTokens),
|
||||
zap.Int("cachedTokens", s.CachedTokens),
|
||||
zap.Int("cacheWriteTokens", s.CacheWriteTokens),
|
||||
zap.Int("reasoningTokens", s.ReasoningTokens),
|
||||
)
|
||||
}
|
||||
@@ -129,6 +137,9 @@ func maxEinoTokenUsage(dst *schema.TokenUsage, src *schema.TokenUsage) *schema.T
|
||||
if src.PromptTokenDetails.CachedTokens > dst.PromptTokenDetails.CachedTokens {
|
||||
dst.PromptTokenDetails.CachedTokens = src.PromptTokenDetails.CachedTokens
|
||||
}
|
||||
if src.PromptTokenDetails.CacheWriteTokens > dst.PromptTokenDetails.CacheWriteTokens {
|
||||
dst.PromptTokenDetails.CacheWriteTokens = src.PromptTokenDetails.CacheWriteTokens
|
||||
}
|
||||
if src.CompletionTokensDetails.ReasoningTokens > dst.CompletionTokensDetails.ReasoningTokens {
|
||||
dst.CompletionTokensDetails.ReasoningTokens = src.CompletionTokensDetails.ReasoningTokens
|
||||
}
|
||||
@@ -149,5 +160,6 @@ func tokenUsageEmpty(u *schema.TokenUsage) bool {
|
||||
u.CompletionTokens == 0 &&
|
||||
u.TotalTokens == 0 &&
|
||||
u.PromptTokenDetails.CachedTokens == 0 &&
|
||||
u.PromptTokenDetails.CacheWriteTokens == 0 &&
|
||||
u.CompletionTokensDetails.ReasoningTokens == 0)
|
||||
}
|
||||
@@ -79,3 +79,25 @@ func TestMaxEinoTokenUsageUsesLargestStreamChunkValues(t *testing.T) {
|
||||
t.Fatalf("usage = %#v", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEinoRunUsageCacheWriteDoesNotInflateTotal(t *testing.T) {
|
||||
acc := newEinoRunUsageAccumulator()
|
||||
var stream *schema.TokenUsage
|
||||
for i := 0; i < 2; i++ {
|
||||
stream = maxEinoTokenUsage(stream, &schema.TokenUsage{
|
||||
PromptTokens: 100, CompletionTokens: 20,
|
||||
PromptTokenDetails: schema.PromptTokenDetails{CachedTokens: 40, CacheWriteTokens: 30},
|
||||
CompletionTokensDetails: schema.CompletionTokensDetails{ReasoningTokens: 10},
|
||||
})
|
||||
}
|
||||
acc.AddUsage(stream)
|
||||
got := acc.Summary()
|
||||
if got.ModelCalls != 1 || got.TotalTokens != 120 || got.CacheWriteTokens != 30 || got.CachedTokens != 40 || got.ReasoningTokens != 10 {
|
||||
t.Fatalf("summary = %#v", got)
|
||||
}
|
||||
var emitted map[string]interface{}
|
||||
acc.EmitOnce("conv", "deep", "final", "claude-test", func(_, _ string, data interface{}) { emitted = data.(map[string]interface{}) }, nil)
|
||||
if emitted["cacheWriteTokens"] != 30 || emitted["totalTokens"] != 120 {
|
||||
t.Fatalf("event = %#v", emitted)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user