Add debug stats
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user