






















@@ -896,6 +896,7 @@ describe("diagnostics-otel service", () => {
896896type: "model.usage",
897897sessionKey: "session-key",
898898channel: "webchat",
899+agentId: "ops",
899900provider: "openai",
900901model: "gpt-5.4",
901902usage: {
@@ -919,6 +920,14 @@ describe("diagnostics-otel service", () => {
919920}),
920921);
921922const genAiTokenUsage = telemetryState.histograms.get("gen_ai.client.token.usage");
923+const tokens = telemetryState.counters.get("openclaw.tokens");
924+expect(tokens?.add).toHaveBeenCalledWith(12, {
925+"openclaw.channel": "webchat",
926+"openclaw.agent": "ops",
927+"openclaw.provider": "openai",
928+"openclaw.model": "gpt-5.4",
929+"openclaw.token": "input",
930+});
922931expect(genAiTokenUsage?.record).toHaveBeenCalledTimes(2);
923932expect(genAiTokenUsage?.record).toHaveBeenCalledWith(12, {
924933"gen_ai.operation.name": "chat",
@@ -936,6 +945,33 @@ describe("diagnostics-otel service", () => {
936945await service.stop?.(ctx);
937946});
938947948+test("bounds agent identifiers on model usage metric attributes", async () => {
949+const service = createDiagnosticsOtelService();
950+const ctx = createOtelContext(OTEL_TEST_ENDPOINT, { metrics: true });
951+await service.start(ctx);
952+953+emitDiagnosticEvent({
954+type: "model.usage",
955+agentId: "Bearer sk-test-secret-value",
956+provider: "openai",
957+model: "gpt-5.4",
958+usage: { input: 2 },
959+});
960+await flushDiagnosticEvents();
961+962+expect(telemetryState.counters.get("openclaw.tokens")?.add).toHaveBeenCalledWith(2, {
963+"openclaw.channel": "unknown",
964+"openclaw.agent": "unknown",
965+"openclaw.provider": "openai",
966+"openclaw.model": "gpt-5.4",
967+"openclaw.token": "input",
968+});
969+expect(
970+JSON.stringify(telemetryState.counters.get("openclaw.tokens")?.add.mock.calls),
971+).not.toContain("sk-test-secret-value");
972+await service.stop?.(ctx);
973+});
974+939975test("keeps GenAI token usage metric model attribute present when model is unavailable", async () => {
940976const service = createDiagnosticsOtelService();
941977const ctx = createOtelContext(OTEL_TEST_ENDPOINT, { metrics: true });
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。