You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Analytics** — tabbed sections (Cost / Tokens / Performance) with summary strips, 10 chart types including heatmap
11
+
-**Chameleon mascot** — pixel-art pet that roams the UI, changes color to match the dominant provider, sleeps when proxy is off, reacts to clicks (pet / startle), has a terminal "home"
12
+
-**Click-to-copy** — model names, providers, endpoints, request IDs, metric values are all copyable with visual feedback
6
13
-**7 new providers** — Groq, Together AI, Fireworks, DeepSeek, Mistral, Perplexity, xAI
7
14
- DeepSeek: custom cache token support (`prompt_cache_hit_tokens`)
8
15
- Perplexity: Sonar API format (`/v1/sonar` endpoint)
@@ -11,9 +18,16 @@
11
18
-**Wire format parsers moved to `provider/wire` subpackage** — clear separation between providers (domain → format mapping) and wire formats (response parsing)
12
19
- Deduplicated Chat Completions parsing via `usageMapper` callback — adding new OpenAI-compatible providers requires only a usage mapper function
13
20
- Removed unused `statusCode` parameter from `Format.Parse` interface
21
+
-**Analytics refactored** — split into 7 sub-methods with proper row scoping
22
+
-**Dashboard cache** — replaced unbounded map with single-entry cache
23
+
-**`timeFilter` helper** — extracted shared WHERE clause builder to `helpers.go`
24
+
- Code splitting — Dashboard and Analytics lazy-loaded (recharts deferred)
14
25
15
26
### Fixed
16
27
-**Error responses (4xx/5xx) are now tracked** — model name is recovered from the request body when the API response doesn't include it
28
+
-**Zero-time bug** — `DashboardStats` and `Analytics` now handle all-time queries correctly (IsZero check)
29
+
-**NULL cursor pagination** — COALESCE for nullable sort columns prevents skipped records
30
+
-**Proxy port** — unified constant, no more magic numbers
-**Minimal overhead** — logging is async and never blocks your requests
35
36
-**Single binary** — pure Go, no CGO, no dependencies
36
37
@@ -66,7 +67,19 @@ After setup, **open a new terminal** (or run `source ~/.zshrc`) — then every L
66
67
> Tools that route through their own servers (Cursor Pro, VS Code Copilot with built-in subscription) won't be logged.
67
68
> If the tool supports your own API key, requests go directly to the provider and llm.log captures them.
68
69
69
-
## Dashboard
70
+
## Web UI
71
+
72
+
```bash
73
+
llm-log ui # opens http://localhost:9923
74
+
```
75
+
76
+
| Page | What it shows |
77
+
|------|---------------|
78
+
|**Dashboard**| Real-time metrics (animated), area charts (requests/cost/tokens), provider breakdown, top models |
79
+
|**Requests**| Paginated table with sorting, filters, search. Click a row to see full detail with copyable values |
80
+
|**Analytics**| Tabbed sections — Cost (over time, cumulative, by provider, distribution, top expensive), Tokens (over time, avg/model, cache hit rate), Performance (latency, heatmap) |
0 commit comments