summaryrefslogtreecommitdiff
path: root/internal/usage/observer.go
diff options
context:
space:
mode:
authorChia <Chia@93.nz>2026-08-05 22:01:29 +1200
committerChia <Chia@93.nz>2026-08-05 22:07:50 +1200
commiteadb2ffe85c43cf6fc741c9823cd28eedb4a844c (patch)
tree1aba2536d57360da403aa35c9ced58b615c7064e /internal/usage/observer.go
parentcd0dd91ab93653631904f2ea0e574ccde6d60339 (diff)
feat: harden prepaid billing and commercial operations
Diffstat (limited to 'internal/usage/observer.go')
-rw-r--r--internal/usage/observer.go11
1 files changed, 11 insertions, 0 deletions
diff --git a/internal/usage/observer.go b/internal/usage/observer.go
index cc8b52f..808781f 100644
--- a/internal/usage/observer.go
+++ b/internal/usage/observer.go
@@ -44,6 +44,17 @@ func (o *Observer) Usage() domain.Usage {
return o.usage
}
+// Reported distinguishes a real zero-token usage object from a response that
+// omitted usage entirely. Billing must never infer this from token totals.
+func (o *Observer) Reported() bool {
+ if !o.stream {
+ o.parseJSON(o.buffer)
+ } else if len(o.line) > 0 {
+ o.parseSSELine(o.line)
+ }
+ return o.found
+}
+
func (o *Observer) captureTail(p []byte) {
if len(p) >= maxCaptureBytes {
o.buffer = append(o.buffer[:0], p[len(p)-maxCaptureBytes:]...)