Add debug stats

This commit is contained in:
dwrz
2026-06-27 00:13:16 +00:00
parent bcdbd9092a
commit f2edd39160
8 changed files with 553 additions and 28 deletions

View File

@@ -1,9 +1,13 @@
package service
import (
"encoding/json"
"net/http"
"net/http/httptest"
"strings"
"testing"
"code.chimeric.al/chimerical/odidere/internal/llm"
)
func TestStatusHandler(t *testing.T) {
@@ -22,3 +26,84 @@ func TestStatusHandler(t *testing.T) {
)
}
}
func TestResponseIncludesStatsInJSON(t *testing.T) {
resp := Response{
Messages: []llm.Message{
{Role: llm.RoleAssistant, ContentParts: []llm.ContentPart{{
Type: llm.ContentTypeText,
Text: "hello",
}}},
},
Provider: "test-provider",
Model: "test-model",
Usage: &llm.Usage{
PromptTokens: 10,
CompletionTokens: 5,
TotalTokens: 15,
PromptTokensDetails: &llm.TokenDetails{
CachedTokens: 3,
},
CompletionTokensDetails: &llm.TokenDetails{
ReasoningTokens: 2,
},
},
Timings: &llm.Timings{
PromptMS: 50.5,
PromptPerSecond: 198.0,
PredictedMS: 100.0,
PredictedPerSecond: 50.0,
},
}
// Verify JSON encoding includes stats fields
var buf strings.Builder
enc := json.NewEncoder(&buf)
if err := enc.Encode(resp); err != nil {
t.Fatalf("encode Response: %v", err)
}
jsonStr := buf.String()
if !strings.Contains(jsonStr, `"prompt_tokens":10`) {
t.Errorf("JSON missing prompt_tokens: %s", jsonStr)
}
if !strings.Contains(jsonStr, `"completion_tokens":5`) {
t.Errorf("JSON missing completion_tokens: %s", jsonStr)
}
if !strings.Contains(jsonStr, `"total_tokens":15`) {
t.Errorf("JSON missing total_tokens: %s", jsonStr)
}
if !strings.Contains(jsonStr, `"prompt_ms":50.5`) {
t.Errorf("JSON missing prompt_ms: %s", jsonStr)
}
if !strings.Contains(jsonStr, `"predicted_ms":100`) {
t.Errorf("JSON missing predicted_ms: %s", jsonStr)
}
}
func TestStreamMessageIncludesUsageInJSON(t *testing.T) {
msg := StreamMessage{
Delta: "hello",
Provider: "test-provider",
Model: "test-model",
Usage: &llm.Usage{
PromptTokens: 10,
CompletionTokens: 5,
TotalTokens: 15,
},
}
var buf strings.Builder
enc := json.NewEncoder(&buf)
if err := enc.Encode(msg); err != nil {
t.Fatalf("encode StreamMessage: %v", err)
}
jsonStr := buf.String()
if !strings.Contains(jsonStr, `"prompt_tokens":10`) {
t.Errorf("JSON missing prompt_tokens: %s", jsonStr)
}
if !strings.Contains(jsonStr, `"total_tokens":15`) {
t.Errorf("JSON missing total_tokens: %s", jsonStr)
}
}