mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-17 23:51:08 +00:00
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:
parent
5f6364baf4
commit
844f43c8b6
2 changed files with 10 additions and 28 deletions
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue