From 844f43c8b62f37c6106373cec51c88b7203ea690 Mon Sep 17 00:00:00 2001 From: Hannes Rudolph Date: Wed, 11 Feb 2026 19:03:43 -0700 Subject: [PATCH] refactor: remove duplicate toFiniteNumber/firstFiniteNumber from openrouter.ts Replace inline utility functions with the shared toFiniteNumber and firstNumber exports from usage-metrics.ts, eliminating code duplication as flagged in the review. --- src/api/providers/openrouter.ts | 36 ++++++------------------ src/api/providers/utils/usage-metrics.ts | 2 +- 2 files changed, 10 insertions(+), 28 deletions(-) diff --git a/src/api/providers/openrouter.ts b/src/api/providers/openrouter.ts index 2bd7807100..b59fcc1216 100644 --- a/src/api/providers/openrouter.ts +++ b/src/api/providers/openrouter.ts @@ -30,6 +30,7 @@ import { getModelEndpoints } from "./fetchers/modelEndpointCache" import { applyRouterToolPreferences } from "./utils/router-tool-preferences" import { generateImageWithProvider, ImageGenerationResult } from "./utils/image-generation" import { normalizeProviderUsage } from "./utils/normalize-provider-usage" +import { toFiniteNumber, firstNumber } from "./utils/usage-metrics" import type { ApiHandlerCreateMessageMetadata, SingleCompletionHandler } from "../index" import type { ApiStreamChunk } from "../transform/stream" @@ -180,44 +181,25 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH const usage = await result.usage const totalUsage = await result.totalUsage const rawUsage = (usage as any)?.raw as Record | undefined - const toFiniteNumber = (value: unknown): number | undefined => { - if (typeof value === "number" && Number.isFinite(value)) { - return value - } - if (typeof value === "string") { - const parsed = Number(value) - return Number.isFinite(parsed) ? parsed : undefined - } - return undefined - } - const firstFiniteNumber = (...values: unknown[]): number | undefined => { - for (const value of values) { - const parsed = toFiniteNumber(value) - if (parsed !== undefined) { - return parsed - } - } - return undefined - } const usageRecord = { ...(usage as any), - inputTokens: firstFiniteNumber( + inputTokens: firstNumber([ totalUsage.inputTokens, (usage as any).inputTokens, (usage as any).promptTokens, (usage as any).prompt_tokens, - rawUsage?.prompt_tokens, - rawUsage?.input_tokens, - ), - outputTokens: firstFiniteNumber( + rawUsage?.prompt_tokens as number | undefined, + rawUsage?.input_tokens as number | undefined, + ]), + outputTokens: firstNumber([ totalUsage.outputTokens, (usage as any).outputTokens, (usage as any).completionTokens, (usage as any).completion_tokens, - rawUsage?.completion_tokens, - rawUsage?.output_tokens, - ), + rawUsage?.completion_tokens as number | undefined, + rawUsage?.output_tokens as number | undefined, + ]), } const { chunk } = normalizeProviderUsage({ provider: "openrouter", diff --git a/src/api/providers/utils/usage-metrics.ts b/src/api/providers/utils/usage-metrics.ts index a0472712f4..7a5f46bca8 100644 --- a/src/api/providers/utils/usage-metrics.ts +++ b/src/api/providers/utils/usage-metrics.ts @@ -194,7 +194,7 @@ export function firstNumberFromPaths(source: unknown, paths: string[]): number | return undefined } -function firstNumber(values: NumberLike[]): number | undefined { +export function firstNumber(values: NumberLike[]): number | undefined { for (const value of values) { const asNumber = toFiniteNumber(value) if (asNumber !== undefined) {