From d422815070aebe7abfda020e693082841e20043a Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Thu, 14 May 2026 07:36:05 +0000 Subject: [PATCH 1/2] feat(o11y): add kilo_user_id to API metrics analytics and stream Include kiloUserId (already present in ApiMetricsParamsSchema) as blob7 in the Analytics Engine data point and as kilo_user_id in the Pipeline stream payload so that o11y API metrics records can be reconciled with microdollar usage records by user. --- services/o11y/pipelines/api-metrics-schema.json | 1 + services/o11y/src/o11y-analytics.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/services/o11y/pipelines/api-metrics-schema.json b/services/o11y/pipelines/api-metrics-schema.json index 8685ecf59f..94935145aa 100644 --- a/services/o11y/pipelines/api-metrics-schema.json +++ b/services/o11y/pipelines/api-metrics-schema.json @@ -6,6 +6,7 @@ { "name": "is_error", "type": "bool", "required": true }, { "name": "inference_provider", "type": "string", "required": false }, { "name": "user_byok", "type": "bool", "required": true }, + { "name": "kilo_user_id", "type": "string", "required": true }, { "name": "ttfb_ms", "type": "int64", "required": true }, { "name": "complete_request_ms", "type": "int64", "required": true }, { "name": "status_code", "type": "int32", "required": true }, diff --git a/services/o11y/src/o11y-analytics.ts b/services/o11y/src/o11y-analytics.ts index 0a3a3b9644..10833a6ed0 100644 --- a/services/o11y/src/o11y-analytics.ts +++ b/services/o11y/src/o11y-analytics.ts @@ -15,6 +15,7 @@ type ApiMetricsParams = z.infer; * blob4 = "1" if error (statusCode >= 400), "0" otherwise * blob5 = inferenceProvider (best-effort) * blob6 = "1" if userByok, "0" otherwise + * blob7 = kiloUserId * double1 = ttfbMs * double2 = completeRequestMs * double3 = statusCode @@ -36,6 +37,7 @@ export function writeApiMetricsDataPoint( isError ? '1' : '0', params.inferenceProvider, params.userByok ? '1' : '0', + params.kiloUserId, ], doubles: [params.ttfbMs, params.completeRequestMs, params.statusCode], }); @@ -52,6 +54,7 @@ export function writeApiMetricsDataPoint( is_error: isError, inference_provider: params.inferenceProvider, user_byok: params.userByok, + kilo_user_id: params.kiloUserId, ttfb_ms: params.ttfbMs, complete_request_ms: params.completeRequestMs, status_code: params.statusCode, From 232322bcb56286c3ecf7bd50a9b8b9d6fa01208f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20=C5=A0=C4=87eki=C4=87?= Date: Tue, 19 May 2026 17:08:40 +0200 Subject: [PATCH 2/2] test(o11y): update API metrics user assertions --- services/o11y/test/index.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/o11y/test/index.spec.ts b/services/o11y/test/index.spec.ts index 1170c20c18..704de0fe44 100644 --- a/services/o11y/test/index.spec.ts +++ b/services/o11y/test/index.spec.ts @@ -144,6 +144,7 @@ describe('o11y worker', () => { '0', 'openai', '0', + 'user_123', ]); expect(call.doubles).toEqual([45, 123, 200]); @@ -156,6 +157,7 @@ describe('o11y worker', () => { is_error: false, inference_provider: 'openai', user_byok: false, + kilo_user_id: 'user_123', ttfb_ms: 45, complete_request_ms: 123, status_code: 200,