Skip to content

Commit 8039ee4

Browse files
committed
Always emit model usage array
1 parent c30e61b commit 8039ee4

2 files changed

Lines changed: 21 additions & 6 deletions

File tree

source/Calamari.Tests/AiAgent/ClaudeCodeBehaviour/ClaudeCodeUsageReporterFixture.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,22 @@ public void RunSummaryAttributes_ArePreservedOnTheMessage()
107107
msg.GetValue(ClaudeCodeServiceMessages.Usage.ModelUsageAttribute).Should().NotBeNull();
108108
}
109109

110+
[Test]
111+
public void RunSummaryWithoutModelUsage_StillCarriesAnEmptyModelUsageAttribute()
112+
{
113+
// The server requires the attribute; a run that fails before any model round-trip has none
114+
reporter.SetRunSummary(new ClaudeCodeRunSummary
115+
{
116+
TotalCostUsd = 0,
117+
DurationMs = 1234,
118+
NumTurns = 0,
119+
});
120+
121+
reporter.WriteServiceMessage(log);
122+
123+
DeserializeModelUsage().Should().BeEmpty();
124+
}
125+
110126
ClaudeCodeModelUsage[] DeserializeModelUsage()
111127
{
112128
var msg = log.ServiceMessages.Single(m => m.Name == ClaudeCodeServiceMessages.Usage.Name);

source/Calamari/AiAgent/ClaudeCodeBehaviour/ClaudeCodeUsageReporter.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,13 @@ public void WriteServiceMessage(ILog log)
4444
{
4545
if (modelUsage.Count == 0 && summaryProperties.Count == 0)
4646
return;
47+
48+
if (modelUsage.Count == 0)
49+
log.Verbose("Claude Code reported no per-model usage for this run.");
4750

4851
var properties = new Dictionary<string, string>(summaryProperties);
49-
50-
if (modelUsage.Count > 0)
51-
{
52-
var usageList = new List<ClaudeCodeModelUsage>(modelUsage.Values);
53-
properties[ClaudeCodeServiceMessages.Usage.ModelUsageAttribute] = JsonSerializer.Serialize(usageList);
54-
}
52+
var usageList = new List<ClaudeCodeModelUsage>(modelUsage.Values);
53+
properties[ClaudeCodeServiceMessages.Usage.ModelUsageAttribute] = JsonSerializer.Serialize(usageList);
5554

5655
log.WriteServiceMessage(new ServiceMessage(ClaudeCodeServiceMessages.Usage.Name, properties));
5756
}

0 commit comments

Comments
 (0)