mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-10-06 15:50:49 +08:00
fix(devin): calculate total_input_tokens and total_tokens correctly
This commit is contained in:
@@ -704,9 +704,14 @@ func (e *DevinExecutor) streamDevinFrames(
|
||||
completedEvent, _ = sjson.SetBytes(completedEvent, "interaction.id", interactionID)
|
||||
completedEvent, _ = sjson.SetBytes(completedEvent, "interaction.model", req.Model)
|
||||
if finalUsage != nil {
|
||||
completedEvent, _ = sjson.SetBytes(completedEvent, "interaction.usage.total_input_tokens", finalUsage.PromptTokens)
|
||||
completedEvent, _ = sjson.SetBytes(completedEvent, "interaction.usage.total_output_tokens", finalUsage.CompletionTokens)
|
||||
totalInput := finalUsage.PromptTokens + finalUsage.CachedTokens
|
||||
totalOutput := finalUsage.CompletionTokens
|
||||
totalTokens := totalInput + totalOutput
|
||||
|
||||
completedEvent, _ = sjson.SetBytes(completedEvent, "interaction.usage.total_input_tokens", totalInput)
|
||||
completedEvent, _ = sjson.SetBytes(completedEvent, "interaction.usage.total_output_tokens", totalOutput)
|
||||
completedEvent, _ = sjson.SetBytes(completedEvent, "interaction.usage.total_cached_tokens", finalUsage.CachedTokens)
|
||||
completedEvent, _ = sjson.SetBytes(completedEvent, "interaction.usage.total_tokens", totalTokens)
|
||||
if detail, ok := helps.ParseInteractionsStreamUsage(completedEvent); ok {
|
||||
reporter.Publish(ctx, detail)
|
||||
}
|
||||
@@ -895,9 +900,14 @@ func consumeDevinFramesToInteractions(body io.Reader, model, chatModelUID string
|
||||
}
|
||||
|
||||
if finalUsage != nil {
|
||||
out, _ = sjson.SetBytes(out, "usage.total_input_tokens", finalUsage.PromptTokens)
|
||||
out, _ = sjson.SetBytes(out, "usage.total_output_tokens", finalUsage.CompletionTokens)
|
||||
totalInput := finalUsage.PromptTokens + finalUsage.CachedTokens
|
||||
totalOutput := finalUsage.CompletionTokens
|
||||
totalTokens := totalInput + totalOutput
|
||||
|
||||
out, _ = sjson.SetBytes(out, "usage.total_input_tokens", totalInput)
|
||||
out, _ = sjson.SetBytes(out, "usage.total_output_tokens", totalOutput)
|
||||
out, _ = sjson.SetBytes(out, "usage.total_cached_tokens", finalUsage.CachedTokens)
|
||||
out, _ = sjson.SetBytes(out, "usage.total_tokens", totalTokens)
|
||||
}
|
||||
|
||||
respLog := &helps.DevinUpstreamResponseLog{
|
||||
|
||||
@@ -351,8 +351,8 @@ func TestConsumeDevinFramesToInteractions(t *testing.T) {
|
||||
if root.Get("status").String() != "completed" {
|
||||
t.Errorf("status = %q, want completed", root.Get("status").String())
|
||||
}
|
||||
if root.Get("usage.total_input_tokens").Int() != 100 {
|
||||
t.Errorf("input tokens = %d, want 100", root.Get("usage.total_input_tokens").Int())
|
||||
if root.Get("usage.total_input_tokens").Int() != 120 {
|
||||
t.Errorf("input tokens = %d, want 120", root.Get("usage.total_input_tokens").Int())
|
||||
}
|
||||
if root.Get("usage.total_output_tokens").Int() != 50 {
|
||||
t.Errorf("output tokens = %d, want 50", root.Get("usage.total_output_tokens").Int())
|
||||
@@ -360,6 +360,9 @@ func TestConsumeDevinFramesToInteractions(t *testing.T) {
|
||||
if root.Get("usage.total_cached_tokens").Int() != 20 {
|
||||
t.Errorf("cached tokens = %d, want 20", root.Get("usage.total_cached_tokens").Int())
|
||||
}
|
||||
if root.Get("usage.total_tokens").Int() != 170 {
|
||||
t.Errorf("total tokens = %d, want 170", root.Get("usage.total_tokens").Int())
|
||||
}
|
||||
|
||||
steps := root.Get("steps").Array()
|
||||
if len(steps) != 3 {
|
||||
|
||||
Reference in New Issue
Block a user