From f521aefa58bbc538c47866ecf19bdec4d7794f95 Mon Sep 17 00:00:00 2001 From: "Tim Z." <91899951+aimbotterz@users.noreply.github.com> Date: Tue, 7 Apr 2026 13:05:13 +0200 Subject: [PATCH] fix(telemetry): pull missing token metrics, accurate route mapping, added ToolCalls header counter --- pkg/agent/loop.go | 12 +++++++++--- pkg/agent/metrics.go | 5 +++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/pkg/agent/loop.go b/pkg/agent/loop.go index 8cf8956c4..4247cd516 100644 --- a/pkg/agent/loop.go +++ b/pkg/agent/loop.go @@ -1637,7 +1637,7 @@ func (al *AgentLoop) runAgentLoop( } providerName := al.GetConfig().Agents.Defaults.Provider - modelName := al.GetConfig().Agents.Defaults.GetModelName() + modelName := agent.Model m := Metrics{ Version: version, @@ -1646,6 +1646,7 @@ func (al *AgentLoop) runAgentLoop( Model: modelName, Complexity: calculateComplexity(promptTokens, compTokens), Tokens: totalTokens, + ToolCalls: ts.currentIteration(), Processing: time.Since(ts.startedAt), } @@ -2268,10 +2269,15 @@ turnLoop: } } - // Save finishReason to turnState for SubTurn truncation detection + // Save finishReason and Usage permanently to the primary turnState + ts.SetLastFinishReason(response.FinishReason) + if response.Usage != nil { + ts.SetLastUsage(response.Usage) + } + + // Save to inner context if truncated if innerTS := turnStateFromContext(ctx); innerTS != nil { innerTS.SetLastFinishReason(response.FinishReason) - // Save usage for token budget tracking if response.Usage != nil { innerTS.SetLastUsage(response.Usage) } diff --git a/pkg/agent/metrics.go b/pkg/agent/metrics.go index b612c3be2..a30c83a5f 100644 --- a/pkg/agent/metrics.go +++ b/pkg/agent/metrics.go @@ -12,13 +12,14 @@ type Metrics struct { Model string Complexity int Tokens int + ToolCalls int Processing time.Duration } func WrapResponse(rawOutput string, m Metrics) string { header := fmt.Sprintf( - "System: picoclaw-%s\nAgent: %s\nRoute: %s\nModel: %s\nComplexity: %d\nTokens: %d\nProcessing: %.1fs\n\n", - m.Version, m.Agent, m.Route, m.Model, m.Complexity, m.Tokens, m.Processing.Seconds(), + "System: picoclaw-%s\nAgent: %s\nRoute: %s\nModel: %s\nComplexity: %d\nTokens: %d\nTool Calls: %d\nProcessing: %.1fs\n\n", + m.Version, m.Agent, m.Route, m.Model, m.Complexity, m.Tokens, m.ToolCalls, m.Processing.Seconds(), ) return header + rawOutput }