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.
This commit is contained in:
Hannes Rudolph 2026-02-11 19:03:43 -07:00
parent 5f6364baf4
commit 844f43c8b6
2 changed files with 10 additions and 28 deletions

View file

@ -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<string, unknown> | 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",

View file

@ -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) {