@usagetap/sdk 1.3.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +372 -39
- package/dist/adapters/anthropic.cjs +995 -69
- package/dist/adapters/anthropic.cjs.map +1 -1
- package/dist/adapters/anthropic.d.cts +45 -3
- package/dist/adapters/anthropic.d.ts +45 -3
- package/dist/adapters/anthropic.mjs +995 -70
- package/dist/adapters/anthropic.mjs.map +1 -1
- package/dist/adapters/openai.cjs +1208 -106
- package/dist/adapters/openai.cjs.map +1 -1
- package/dist/adapters/openai.d.cts +46 -3
- package/dist/adapters/openai.d.ts +46 -3
- package/dist/adapters/openai.mjs +1208 -107
- package/dist/adapters/openai.mjs.map +1 -1
- package/dist/adapters/openrouter.cjs +3912 -53
- package/dist/adapters/openrouter.cjs.map +1 -1
- package/dist/adapters/openrouter.d.cts +6 -3
- package/dist/adapters/openrouter.d.ts +6 -3
- package/dist/adapters/openrouter.mjs +3910 -54
- package/dist/adapters/openrouter.mjs.map +1 -1
- package/dist/anthropic/index.cjs +995 -69
- package/dist/anthropic/index.cjs.map +1 -1
- package/dist/anthropic/index.d.cts +2 -2
- package/dist/anthropic/index.d.ts +2 -2
- package/dist/anthropic/index.mjs +995 -70
- package/dist/anthropic/index.mjs.map +1 -1
- package/dist/client-C0UiaqVB.d.cts +1305 -0
- package/dist/client-C0UiaqVB.d.ts +1305 -0
- package/dist/express/index.cjs +399 -64
- package/dist/express/index.cjs.map +1 -1
- package/dist/express/index.d.cts +2 -2
- package/dist/express/index.d.ts +2 -2
- package/dist/express/index.mjs +399 -64
- package/dist/express/index.mjs.map +1 -1
- package/dist/index.cjs +1044 -163
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -5
- package/dist/index.d.ts +16 -5
- package/dist/index.mjs +1044 -163
- package/dist/index.mjs.map +1 -1
- package/dist/openai/index.cjs +1209 -107
- package/dist/openai/index.cjs.map +1 -1
- package/dist/openai/index.d.cts +2 -2
- package/dist/openai/index.d.ts +2 -2
- package/dist/openai/index.mjs +1209 -108
- package/dist/openai/index.mjs.map +1 -1
- package/dist/openrouter/index.cjs +1226 -109
- package/dist/openrouter/index.cjs.map +1 -1
- package/dist/openrouter/index.d.cts +3 -3
- package/dist/openrouter/index.d.ts +3 -3
- package/dist/openrouter/index.mjs +1224 -108
- package/dist/openrouter/index.mjs.map +1 -1
- package/dist/react/index.cjs +19 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +17 -4
- package/dist/react/index.d.ts +17 -4
- package/dist/react/index.mjs +19 -1
- package/dist/react/index.mjs.map +1 -1
- package/package.json +2 -2
- package/dist/client-BD8O2J8Z.d.cts +0 -668
- package/dist/client-BD8O2J8Z.d.ts +0 -668
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/errors.ts","../../src/idempotency.ts","../../src/retry.ts","../../src/prompt-compression.ts","../../src/client.ts","../../src/adapters/openai.ts","../../src/adapters/openrouter.ts"],"names":["apiPromise","wrappedPromise","wrappedStream","dedupeStrings"],"mappings":"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","file":"index.mjs","sourcesContent":["export type UsageTapErrorCode =\n | \"USAGETAP_BROWSER_RUNTIME\"\n | \"USAGETAP_AUTH_ERROR\"\n | \"USAGETAP_BAD_REQUEST\"\n | \"USAGETAP_INVALID_RESPONSE\"\n | \"USAGETAP_NETWORK_ERROR\"\n | \"USAGETAP_RATE_LIMITED\"\n | \"USAGETAP_SERVER_ERROR\"\n | \"USAGETAP_RETRY_EXHAUSTED\"\n | \"USAGETAP_END_CALL_ERROR\";\n\nexport interface UsageTapErrorInit {\n status?: number;\n retryable?: boolean;\n correlationId?: string;\n details?: Record<string, unknown>;\n cause?: unknown;\n}\n\nexport class UsageTapError extends Error {\n public readonly code: UsageTapErrorCode;\n public readonly status?: number;\n public readonly retryable: boolean;\n public readonly correlationId?: string;\n public readonly details?: Record<string, unknown>;\n\n constructor(code: UsageTapErrorCode, message: string, init: UsageTapErrorInit = {}) {\n super(message, init.cause ? { cause: init.cause as Error } : undefined);\n this.name = \"UsageTapError\";\n this.code = code;\n this.status = init.status;\n this.retryable = init.retryable ?? false;\n this.correlationId = init.correlationId;\n this.details = init.details;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n status: this.status,\n retryable: this.retryable,\n correlationId: this.correlationId,\n details: this.details,\n };\n }\n}\n\nexport function isUsageTapError(error: unknown): error is UsageTapError {\n return error instanceof UsageTapError;\n}\n","export function createIdempotencyKey(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n\n const random = (): string => Math.random().toString(16).slice(2, 10);\n return `${random()}-${random()}`;\n}\n","import type { RetryOptions } from \"./types\";\n\nexport interface ResolvedRetryOptions {\n maxAttempts: number;\n baseDelayMs: number;\n maxDelayMs: number;\n jitterRatio: number;\n}\n\nconst DEFAULTS: ResolvedRetryOptions = {\n maxAttempts: 3,\n baseDelayMs: 250,\n maxDelayMs: 5000,\n jitterRatio: 0.2,\n};\n\nexport function resolveRetryOptions(\n base?: RetryOptions,\n override?: RetryOptions,\n): ResolvedRetryOptions {\n const merged = { ...DEFAULTS, ...base, ...override } satisfies ResolvedRetryOptions;\n return {\n maxAttempts: Math.max(1, Math.floor(merged.maxAttempts)),\n baseDelayMs: Math.max(0, merged.baseDelayMs),\n maxDelayMs: Math.max(merged.baseDelayMs, merged.maxDelayMs),\n jitterRatio: Math.min(Math.max(merged.jitterRatio, 0), 1),\n };\n}\n\nexport async function sleep(delayMs: number, signal?: AbortSignal): Promise<void> {\n if (delayMs <= 0) {\n signal?.throwIfAborted?.();\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n cleanup();\n resolve();\n }, delayMs);\n\n const cleanup = (): void => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n };\n\n const onAbort = (): void => {\n cleanup();\n const abortError = new Error(\"Aborted\");\n abortError.name = \"AbortError\";\n reject(abortError);\n };\n\n if (signal) {\n if (signal.aborted) {\n onAbort();\n return;\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n}\n\nexport function computeDelay(attempt: number, options: ResolvedRetryOptions): number {\n const exp = options.baseDelayMs * Math.pow(2, attempt - 1);\n const capped = Math.min(exp, options.maxDelayMs);\n const jitter = capped * options.jitterRatio;\n const min = capped - jitter;\n const max = capped + jitter;\n return Math.max(0, Math.random() * (max - min) + min);\n}\n\nexport async function runWithRetry<T>(\n operation: (attempt: number) => Promise<T>,\n options: ResolvedRetryOptions,\n shouldRetry: (error: unknown) => boolean,\n onSchedule?: (attempt: number, delayMs: number, error: unknown) => void,\n signal?: AbortSignal,\n): Promise<T> {\n let attempt = 0;\n let lastError: unknown;\n while (attempt < options.maxAttempts) {\n attempt += 1;\n signal?.throwIfAborted?.();\n\n try {\n return await operation(attempt);\n } catch (error) {\n lastError = error;\n if (attempt >= options.maxAttempts || !shouldRetry(error)) {\n throw error;\n }\n const delayMs = computeDelay(attempt, options);\n onSchedule?.(attempt, delayMs, error);\n await sleep(delayMs, signal);\n }\n }\n\n throw lastError instanceof Error ? lastError : new Error(String(lastError));\n}\n","export type PromptCompressionProvider = \"heuristic\" | \"toon\" | \"thetokencompany\" | \"usagetap\";\n\n/**\n * Default request-context threshold used by the reversible compression wrappers.\n * The estimate is intentionally lightweight because it only gates whether a\n * compression request is worth its added latency.\n */\nexport const DEFAULT_PROMPT_COMPRESSION_MIN_CONTEXT_TOKENS = 1_000;\nexport type PromptCompressionMessageRole = \"system\" | \"user\" | \"tool\" | \"assistant\";\nexport type PromptCompressionRoleAggressiveness =\n Partial<Record<PromptCompressionMessageRole, number>>;\nexport type PromptCompressionMessagesAggressiveness =\n number | PromptCompressionRoleAggressiveness;\n\nexport interface PromptCompressionInput {\n input?: unknown;\n text?: string;\n provider?: PromptCompressionProvider;\n tokenCompanyApiKey?: string;\n tokenCompanyEndpoint?: string;\n model?: string;\n tokenCompanyModel?: string;\n aggressiveness?: number;\n tokenCompanyAggressiveness?: number;\n tokenCompanyAppId?: string;\n usageTapCompressionApiKey?: string;\n usageTapCompressionEndpoint?: string;\n usageTapCompressionModel?: string;\n usageTapCompressionAggressiveness?: number;\n fetchImpl?: typeof fetch;\n signal?: AbortSignal;\n failOpen?: boolean;\n}\n\nexport interface PromptCompressionMessagesInput<TInput = unknown> {\n input: TInput;\n provider?: Extract<PromptCompressionProvider, \"usagetap\">;\n usageTapCompressionApiKey?: string;\n usageTapCompressionMessagesEndpoint?: string;\n aggressiveness?: PromptCompressionMessagesAggressiveness;\n usageTapCompressionAggressiveness?: PromptCompressionMessagesAggressiveness;\n fetchImpl?: typeof fetch;\n signal?: AbortSignal;\n failOpen?: boolean;\n}\n\nexport interface PromptCompressionResult<TInput = unknown> {\n input: TInput;\n compressedInput: unknown;\n provider: PromptCompressionProvider;\n originalCharacters: number;\n compressedCharacters: number;\n savedCharacters: number;\n originalTokens: number;\n compressedTokens: number;\n savedTokens: number;\n tokenSavingsRatio: number;\n savingsRatio: number;\n techniques: string[];\n}\n\nconst DEFAULT_TTC_ENDPOINT = \"https://api.thetokencompany.com/v1/compress\";\nconst DEFAULT_TTC_MODEL = \"bear-2\";\nconst DEFAULT_TTC_AGGRESSIVENESS = 0.2;\nconst DEFAULT_USAGETAP_COMPRESSION_ENDPOINT = \"https://compress.usagetap.com/v1/compress\";\nconst DEFAULT_USAGETAP_MESSAGES_COMPRESSION_ENDPOINT = \"https://compress.usagetap.com/v1/messages/compress\";\nconst PROTECTED_TEXT_PATTERN = /<ttc_safe>[\\s\\S]*?<\\/ttc_safe>|<usagetap_safe>[\\s\\S]*?<\\/usagetap_safe>/g;\n\ntype PromptCompressionTokenCounts = {\n originalTokens: number;\n compressedTokens: number;\n savedTokens: number;\n};\n\ntype TheTokenCompanyCompressResponse = {\n output: string;\n output_tokens: number;\n input_tokens: number;\n tokens_saved: number;\n compression_ratio: number;\n};\n\nexport function protectPromptText(text: string): string {\n return `<ttc_safe>${text}</ttc_safe>`;\n}\n\nexport const protect = protectPromptText;\n\nexport async function compressPrompt<TInput = unknown>(\n options: PromptCompressionInput\n): Promise<PromptCompressionResult<TInput>> {\n const input = resolvePromptCompressionInput(options);\n\n try {\n if (options.provider === \"usagetap\") {\n return await compressWithUsageTap(options) as PromptCompressionResult<TInput>;\n }\n\n if (options.provider === \"thetokencompany\" || options.tokenCompanyApiKey) {\n return await compressWithTheTokenCompany(options) as PromptCompressionResult<TInput>;\n }\n\n if (options.provider === \"toon\") {\n return compressPromptToon(input) as PromptCompressionResult<TInput>;\n }\n\n return compressPromptHeuristic(input) as PromptCompressionResult<TInput>;\n } catch (error) {\n if (options.failOpen === false) {\n throw error;\n }\n return createPromptCompressionFallback(\n input,\n options.provider ?? (options.tokenCompanyApiKey ? \"thetokencompany\" : \"heuristic\"),\n error\n ) as PromptCompressionResult<TInput>;\n }\n}\n\nexport function compressPromptHeuristic<TInput = unknown>(\n input: TInput\n): PromptCompressionResult<TInput> {\n const original = stableStringifyInput(input);\n const techniques = new Set<string>();\n const compressedInput = compressValue(input, techniques, { allowToonString: false });\n const compressed = stableStringifyInput(compressedInput);\n const chosenInput = compressed.length <= original.length ? compressedInput : input;\n const chosen = compressed.length <= original.length ? compressed : original;\n\n if (!techniques.size) {\n techniques.add(\"no-op\");\n }\n\n return buildResult(\n input,\n chosenInput,\n \"heuristic\",\n original,\n chosen,\n Array.from(techniques)\n ) as PromptCompressionResult<TInput>;\n}\n\nexport function compressPromptToon<TInput = unknown>(\n input: TInput\n): PromptCompressionResult<TInput> {\n const original = stableStringifyInput(input);\n const compressedInput =\n typeof input === \"string\"\n ? compressText(input, new Set<string>(), { allowToonString: true })\n : encodeToon(input);\n const compressed = stableStringifyInput(compressedInput);\n\n return buildResult(input, compressedInput, \"toon\", original, compressed, [\n \"toon\",\n \"json-minify\",\n ]) as PromptCompressionResult<TInput>;\n}\n\nexport async function compressPromptMessages<TInput = unknown>(\n options: PromptCompressionMessagesInput<TInput>\n): Promise<PromptCompressionResult<TInput>> {\n try {\n return await compressMessagesWithUsageTap(options) as PromptCompressionResult<TInput>;\n } catch (error) {\n if (options.failOpen === false) {\n throw error;\n }\n return createPromptCompressionFallback(\n options.input,\n options.provider ?? \"usagetap\",\n error\n ) as PromptCompressionResult<TInput>;\n }\n}\n\nasync function compressWithTheTokenCompany(\n options: PromptCompressionInput\n): Promise<PromptCompressionResult> {\n if (!options.tokenCompanyApiKey) {\n throw new Error(\n \"tokenCompanyApiKey is required when provider is thetokencompany\"\n );\n }\n\n const fetchCandidate = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchCandidate !== \"function\") {\n throw new Error(\n \"A fetch implementation is required for The Token Company compression\"\n );\n }\n\n return compressWithCompatibleRemoteProvider({\n options,\n provider: \"thetokencompany\",\n endpoint: options.tokenCompanyEndpoint ?? DEFAULT_TTC_ENDPOINT,\n model: options.model ?? options.tokenCompanyModel ?? DEFAULT_TTC_MODEL,\n aggressiveness:\n options.aggressiveness ??\n options.tokenCompanyAggressiveness ??\n DEFAULT_TTC_AGGRESSIVENESS,\n apiKey: options.tokenCompanyApiKey,\n appId: options.tokenCompanyAppId,\n providerLabel: \"The Token Company\",\n });\n}\n\nasync function compressWithUsageTap(\n options: PromptCompressionInput\n): Promise<PromptCompressionResult> {\n const fetchCandidate = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchCandidate !== \"function\") {\n throw new Error(\n \"A fetch implementation is required for UsageTap prompt compression\"\n );\n }\n\n return compressWithCompatibleRemoteProvider({\n options,\n provider: \"usagetap\",\n endpoint:\n options.usageTapCompressionEndpoint ?? DEFAULT_USAGETAP_COMPRESSION_ENDPOINT,\n model:\n options.model ??\n options.usageTapCompressionModel ??\n options.tokenCompanyModel ??\n DEFAULT_TTC_MODEL,\n aggressiveness:\n options.aggressiveness ??\n options.usageTapCompressionAggressiveness ??\n options.tokenCompanyAggressiveness ??\n DEFAULT_TTC_AGGRESSIVENESS,\n apiKey: options.usageTapCompressionApiKey,\n appId: options.tokenCompanyAppId,\n providerLabel: \"UsageTap prompt compression\",\n });\n}\n\nasync function compressMessagesWithUsageTap(\n options: PromptCompressionMessagesInput\n): Promise<PromptCompressionResult> {\n const fetchCandidate = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchCandidate !== \"function\") {\n throw new Error(\n \"A fetch implementation is required for UsageTap prompt message compression\"\n );\n }\n\n const aggressiveness =\n options.aggressiveness ??\n options.usageTapCompressionAggressiveness ??\n DEFAULT_TTC_AGGRESSIVENESS;\n validateAggressiveness(\n aggressiveness,\n \"UsageTap prompt message compression\"\n );\n\n const original = stableStringifyInput(options.input);\n const headers: Record<string, string> = {\n \"content-type\": \"application/json\",\n };\n if (options.usageTapCompressionApiKey) {\n headers.authorization = `Bearer ${options.usageTapCompressionApiKey}`;\n }\n\n const response = await fetchCandidate(\n options.usageTapCompressionMessagesEndpoint ??\n DEFAULT_USAGETAP_MESSAGES_COMPRESSION_ENDPOINT,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n ...cloneInputRecord(options.input),\n compression_settings: { aggressiveness },\n }),\n signal: options.signal,\n }\n );\n\n if (!response.ok) {\n throw new Error(\n `UsageTap prompt message compression failed with HTTP ${response.status}`\n );\n }\n\n const payload = (await response.json()) as Record<string, unknown>;\n const compressedInput =\n payload.compressed_request ??\n payload.compressedInput ??\n payload.compressed ??\n (payload.messages !== undefined\n ? { ...cloneInputRecord(options.input), messages: payload.messages }\n : undefined);\n\n if (compressedInput === undefined) {\n throw new Error(\n \"UsageTap prompt message compression response did not include compressed content\"\n );\n }\n\n const compressed = stableStringifyInput(compressedInput);\n const tokenCounts = normalizeCompatibleTokenCounts(payload);\n\n return buildResult(\n options.input,\n compressedInput,\n \"usagetap\",\n original,\n compressed,\n [\"usagetap\", \"messages-endpoint\"],\n tokenCounts\n );\n}\n\nasync function compressWithCompatibleRemoteProvider(args: {\n options: PromptCompressionInput;\n provider: Extract<PromptCompressionProvider, \"thetokencompany\" | \"usagetap\">;\n endpoint: string;\n model: string;\n aggressiveness: number;\n apiKey?: string;\n appId?: string;\n providerLabel: string;\n}): Promise<PromptCompressionResult> {\n const { options, provider, endpoint, model, aggressiveness, apiKey, appId, providerLabel } = args;\n const fetchCandidate = options.fetchImpl ?? globalThis.fetch;\n const sourceInput = resolvePromptCompressionInput(options);\n const original = stableStringifyInput(sourceInput);\n const heuristic = compressPromptHeuristic(sourceInput);\n const input = typeof heuristic.compressedInput === \"string\"\n ? heuristic.compressedInput\n : stableStringifyInput(heuristic.compressedInput);\n\n if (\n !isValidAggressiveness(aggressiveness)\n ) {\n throw new Error(`${providerLabel} aggressiveness must be between 0.0 and 1.0`);\n }\n\n const headers: Record<string, string> = {\n \"content-type\": \"application/json\",\n };\n if (apiKey) {\n headers.authorization = `Bearer ${apiKey}`;\n }\n\n const response = await fetchCandidate(\n endpoint,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n model,\n input,\n ...(provider === \"usagetap\" ? { text: input } : {}),\n compression_settings: { aggressiveness },\n ...(appId ? { app_id: appId } : {}),\n }),\n signal: options.signal,\n }\n );\n\n if (!response.ok) {\n throw new Error(\n `${providerLabel} failed with HTTP ${response.status}`\n );\n }\n\n const payload = (await response.json()) as Record<string, unknown>;\n const tokenCompanyResult = normalizeTheTokenCompanyCompressResponse(payload);\n const compressedInput =\n payload.compressedInput ??\n payload.compressed ??\n tokenCompanyResult?.output ??\n payload.output ??\n payload.text;\n if (compressedInput === undefined) {\n throw new Error(`${providerLabel} response did not include compressed content`);\n }\n\n const compressed = stableStringifyInput(compressedInput);\n const tokenCounts = tokenCompanyResult\n ? {\n originalTokens: tokenCompanyResult.input_tokens,\n compressedTokens: tokenCompanyResult.output_tokens,\n savedTokens: tokenCompanyResult.tokens_saved,\n }\n : undefined;\n\n return buildResult(\n sourceInput,\n compressedInput,\n provider,\n original,\n compressed,\n [...heuristic.techniques, provider],\n tokenCounts\n );\n}\n\nfunction resolvePromptCompressionInput(options: PromptCompressionInput): unknown {\n if (options.input !== undefined) {\n return options.input;\n }\n if (options.text !== undefined) {\n return options.text;\n }\n throw new Error(\"Prompt compression requires input or text\");\n}\n\nfunction validateAggressiveness(\n value: PromptCompressionMessagesAggressiveness,\n label: string\n): void {\n if (typeof value === \"number\") {\n if (!isValidAggressiveness(value)) {\n throw new Error(`${label} aggressiveness must be between 0.0 and 1.0`);\n }\n return;\n }\n\n for (const aggressiveness of Object.values(value)) {\n if (aggressiveness !== undefined && !isValidAggressiveness(aggressiveness)) {\n throw new Error(`${label} aggressiveness must be between 0.0 and 1.0`);\n }\n }\n}\n\nfunction isValidAggressiveness(value: unknown): value is number {\n return (\n typeof value === \"number\" &&\n Number.isFinite(value) &&\n value >= 0 &&\n value <= 1\n );\n}\n\nfunction cloneInputRecord(input: unknown): Record<string, unknown> {\n return input && typeof input === \"object\" && !Array.isArray(input)\n ? { ...(input as Record<string, unknown>) }\n : { input };\n}\n\nfunction normalizeCompatibleTokenCounts(\n data: Record<string, unknown>\n): PromptCompressionTokenCounts | undefined {\n const inputTokens =\n typeof data.input_tokens === \"number\"\n ? data.input_tokens\n : data.original_input_tokens;\n const outputTokens = data.output_tokens;\n\n if (typeof inputTokens !== \"number\" || typeof outputTokens !== \"number\") {\n return undefined;\n }\n\n return {\n originalTokens: inputTokens,\n compressedTokens: outputTokens,\n savedTokens:\n typeof data.tokens_saved === \"number\"\n ? data.tokens_saved\n : inputTokens - outputTokens,\n };\n}\n\nfunction normalizeTheTokenCompanyCompressResponse(\n data: Record<string, unknown>\n): TheTokenCompanyCompressResponse | undefined {\n if (\n typeof data.output !== \"string\" ||\n typeof data.output_tokens !== \"number\"\n ) {\n return undefined;\n }\n\n const inputTokens =\n typeof data.input_tokens === \"number\"\n ? data.input_tokens\n : data.original_input_tokens;\n\n if (typeof inputTokens !== \"number\") {\n return undefined;\n }\n\n const tokensSaved =\n typeof data.tokens_saved === \"number\"\n ? data.tokens_saved\n : inputTokens - data.output_tokens;\n const compressionRatio =\n typeof data.compression_ratio === \"number\"\n ? data.compression_ratio\n : data.output_tokens === 0\n ? 0\n : inputTokens / data.output_tokens;\n\n return {\n output: data.output,\n output_tokens: data.output_tokens,\n input_tokens: inputTokens,\n tokens_saved: tokensSaved,\n compression_ratio: compressionRatio,\n };\n}\n\nexport function createPromptCompressionFallback<TInput = unknown>(\n input: TInput,\n provider: PromptCompressionProvider = \"heuristic\",\n error?: unknown\n): PromptCompressionResult<TInput> {\n const original = stableStringifyInput(input);\n const techniques = [\"fallback-original\"];\n if (error) {\n techniques.push(\"compression-error\");\n }\n\n return buildResult(input, input, provider, original, original, techniques) as\n PromptCompressionResult<TInput>;\n}\n\nfunction buildResult(\n input: unknown,\n compressedInput: unknown,\n provider: PromptCompressionProvider,\n original: string,\n compressed: string,\n techniques: string[],\n tokenCounts?: PromptCompressionTokenCounts\n): PromptCompressionResult {\n const originalCharacters = original.length;\n const compressedCharacters = compressed.length;\n const savedCharacters = Math.max(\n 0,\n originalCharacters - compressedCharacters\n );\n const originalTokens = tokenCounts?.originalTokens ?? estimatePromptTokens(original);\n const compressedTokens = tokenCounts?.compressedTokens ?? estimatePromptTokens(compressed);\n const savedTokens = Math.max(\n 0,\n tokenCounts?.savedTokens ?? originalTokens - compressedTokens\n );\n\n return {\n input,\n compressedInput,\n provider,\n originalCharacters,\n compressedCharacters,\n savedCharacters,\n originalTokens,\n compressedTokens,\n savedTokens,\n tokenSavingsRatio: originalTokens > 0 ? savedTokens / originalTokens : 0,\n savingsRatio: originalCharacters > 0 ? savedCharacters / originalCharacters : 0,\n techniques,\n };\n}\n\nexport function estimatePromptTokens(input: unknown): number {\n const text = typeof input === \"string\" ? input : stableStringifyInput(input);\n return text.match(/[\\p{L}\\p{N}]+|[^\\s]/gu)?.length ?? 0;\n}\n\nfunction compressValue(\n value: unknown,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): unknown {\n if (typeof value === \"string\") return compressText(value, techniques, options);\n if (Array.isArray(value)) {\n techniques.add(\"json-minify\");\n return value.map((item) => compressValue(item, techniques, options));\n }\n if (value && typeof value === \"object\") {\n techniques.add(\"json-minify\");\n return Object.keys(value as Record<string, unknown>)\n .reduce<Record<string, unknown>>((acc, key) => {\n const child = (value as Record<string, unknown>)[key];\n if (child !== undefined) {\n acc[key] = compressValue(child, techniques, options);\n }\n return acc;\n }, {});\n }\n return value;\n}\n\nfunction compressText(\n value: string,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): string {\n const protectedSpans: string[] = [];\n const text = value.replace(PROTECTED_TEXT_PATTERN, (match) => {\n const placeholder = `__USAGETAP_PROTECTED_${protectedSpans.length}__`;\n protectedSpans.push(match);\n techniques.add(\"protected-text\");\n return placeholder;\n });\n\n const compressed = compressTextWithoutProtection(text, techniques, options);\n\n return protectedSpans.reduce(\n (output, span, index) =>\n output.replace(`__USAGETAP_PROTECTED_${index}__`, span),\n compressed\n );\n}\n\nfunction compressTextWithoutProtection(\n value: string,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): string {\n const fencePattern = /```([\\w-]+)?\\n([\\s\\S]*?)```/g;\n const parts: string[] = [];\n let cursor = 0;\n let match: RegExpExecArray | null;\n\n while ((match = fencePattern.exec(value)) !== null) {\n const before = value.slice(cursor, match.index);\n const compressedBefore = compressPlainTextAndEmbeddedJson(\n before,\n techniques,\n options\n );\n if (compressedBefore) parts.push(compressedBefore);\n\n const lang = match[1]?.toLowerCase();\n const code = cleanCodeBlock(match[2] ?? \"\");\n const compressedCode =\n lang === \"json\" ? compressJsonText(code, techniques, options) : undefined;\n\n if (compressedCode?.format === \"toon\") {\n parts.push(`\\`\\`\\`toon\\n${compressedCode.text}\\n\\`\\`\\``);\n } else if (compressedCode?.format === \"json\") {\n parts.push(`\\`\\`\\`json\\n${compressedCode.text}\\n\\`\\`\\``);\n } else {\n if (code !== match[2]) {\n techniques.add(\"code-whitespace\");\n }\n parts.push(lang ? `\\`\\`\\`${lang}\\n${code}\\n\\`\\`\\`` : `\\`\\`\\`\\n${code}\\n\\`\\`\\``);\n }\n cursor = match.index + match[0].length;\n }\n\n const after = compressPlainTextAndEmbeddedJson(value.slice(cursor), techniques, options);\n if (after) parts.push(after);\n\n return parts.join(\"\\n\").trim();\n}\n\nfunction compressPlainText(value: string, techniques: Set<string>): string {\n const compressed = value\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line)\n .join(\"\\n\")\n .replace(/[ \\t]{2,}/g, \" \")\n .trim();\n\n if (compressed !== value.trim()) {\n techniques.add(\"text-whitespace\");\n }\n\n return compressed;\n}\n\nfunction compressPlainTextAndEmbeddedJson(\n value: string,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): string {\n const normalized = compressPlainText(value, techniques);\n return compressEmbeddedJson(normalized, techniques, options);\n}\n\nfunction cleanCodeBlock(code: string): string {\n const lines = code.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n while (lines.length && lines[0].trim() === \"\") lines.shift();\n while (lines.length && lines[lines.length - 1].trim() === \"\") lines.pop();\n\n const commonIndent = lines\n .filter((line) => line.trim())\n .reduce<number | undefined>((min, line) => {\n const indent = /^[ \\t]*/.exec(line)?.[0].length ?? 0;\n return min === undefined ? indent : Math.min(min, indent);\n }, undefined);\n\n return lines\n .map((line) => (commonIndent ? line.slice(commonIndent) : line))\n .join(\"\\n\")\n .replace(/[ \\t]+$/gm, \"\");\n}\n\nfunction stableStringifyInput(input: unknown): string {\n if (typeof input === \"string\") return input;\n return JSON.stringify(input) ?? String(input);\n}\n\ntype JsonCompressionCandidate = {\n format: \"json\" | \"toon\";\n text: string;\n};\n\nfunction compressJsonText(\n text: string,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): JsonCompressionCandidate | undefined {\n const parsed = safeParseJson(text);\n if (parsed === undefined) {\n return undefined;\n }\n\n const compactJson = JSON.stringify(parsed);\n const candidates: JsonCompressionCandidate[] = [\n { format: \"json\", text: compactJson },\n ];\n\n if (options.allowToonString || shouldUseToonForJson(parsed)) {\n candidates.push({ format: \"toon\", text: encodeToon(parsed) });\n }\n\n const originalLength = text.trim().length;\n const best = candidates.reduce((winner, candidate) =>\n candidate.text.length < winner.text.length ? candidate : winner\n );\n\n if (best.text.length >= originalLength) {\n return undefined;\n }\n\n techniques.add(best.format === \"toon\" ? \"embedded-json-toon\" : \"embedded-json-minify\");\n return best;\n}\n\nfunction compressEmbeddedJson(\n text: string,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): string {\n let result = \"\";\n let cursor = 0;\n\n while (cursor < text.length) {\n const start = findNextJsonStart(text, cursor);\n if (start < 0) {\n result += text.slice(cursor);\n break;\n }\n\n result += text.slice(cursor, start);\n const span = findBalancedJsonSpan(text, start);\n if (!span) {\n result += text[start];\n cursor = start + 1;\n continue;\n }\n\n const candidate = compressJsonText(span.text, techniques, options);\n if (candidate) {\n result += candidate.text;\n } else {\n result += span.text;\n }\n cursor = span.end;\n }\n\n return result;\n}\n\nfunction findNextJsonStart(text: string, from: number): number {\n const objectStart = text.indexOf(\"{\", from);\n const arrayStart = text.indexOf(\"[\", from);\n if (objectStart < 0) return arrayStart;\n if (arrayStart < 0) return objectStart;\n return Math.min(objectStart, arrayStart);\n}\n\nfunction findBalancedJsonSpan(\n text: string,\n start: number\n): { text: string; end: number } | undefined {\n const opener = text[start];\n const closer = opener === \"{\" ? \"}\" : opener === \"[\" ? \"]\" : undefined;\n if (!closer) return undefined;\n\n const stack = [closer];\n let inString = false;\n let escaped = false;\n\n for (let index = start + 1; index < text.length; index += 1) {\n const char = text[index];\n if (inString) {\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === \"\\\"\") {\n inString = false;\n }\n continue;\n }\n\n if (char === \"\\\"\") {\n inString = true;\n continue;\n }\n\n if (char === \"{\" || char === \"[\") {\n stack.push(char === \"{\" ? \"}\" : \"]\");\n continue;\n }\n\n if (char === stack[stack.length - 1]) {\n stack.pop();\n if (!stack.length) {\n const end = index + 1;\n return { text: text.slice(start, end), end };\n }\n }\n }\n\n return undefined;\n}\n\nfunction safeParseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n\nfunction shouldUseToonForJson(value: unknown): boolean {\n if (Array.isArray(value)) {\n return isUniformObjectArray(value) || value.some(shouldUseToonForJson);\n }\n if (isPlainObject(value)) {\n return Object.values(value).some(shouldUseToonForJson);\n }\n return false;\n}\n\nfunction encodeToon(value: unknown, indent = 0): string {\n if (isPrimitive(value)) {\n return scalarToToon(value);\n }\n\n if (Array.isArray(value)) {\n return encodeArrayToon(value, indent);\n }\n\n if (isPlainObject(value)) {\n const lines: string[] = [];\n for (const [key, child] of Object.entries(value)) {\n lines.push(...encodePropertyToon(key, child, indent));\n }\n return lines.join(\"\\n\");\n }\n\n return scalarToToon(String(value));\n}\n\nfunction encodePropertyToon(key: string, value: unknown, indent: number): string[] {\n const prefix = \" \".repeat(indent);\n const toonKey = keyToToon(key);\n\n if (isPrimitive(value)) {\n return [`${prefix}${toonKey}: ${scalarToToon(value)}`];\n }\n\n if (Array.isArray(value)) {\n if (value.every(isPrimitive)) {\n return [`${prefix}${toonKey}[${value.length}]: ${value.map(scalarToToon).join(\",\")}`];\n }\n\n if (isUniformObjectArray(value)) {\n const fields = Object.keys(value[0] as Record<string, unknown>);\n const header = `${prefix}${toonKey}[${value.length}]{${fields.map(keyToToon).join(\",\")}}:`;\n const rows = value.map((item) =>\n `${\" \".repeat(indent + 2)}${fields.map((field) =>\n scalarToToon((item as Record<string, unknown>)[field])\n ).join(\",\")}`\n );\n return [header, ...rows];\n }\n\n return [\n `${prefix}${toonKey}[${value.length}]:`,\n ...value.flatMap((item, index) => {\n if (isPrimitive(item)) {\n return [`${\" \".repeat(indent + 2)}- ${scalarToToon(item)}`];\n }\n return [\n `${\" \".repeat(indent + 2)}- item${index}:`,\n ...encodeToon(item, indent + 4).split(\"\\n\"),\n ];\n }),\n ];\n }\n\n return [`${prefix}${toonKey}:`, ...encodeToon(value, indent + 2).split(\"\\n\")];\n}\n\nfunction encodeArrayToon(value: unknown[], indent: number): string {\n if (value.every(isPrimitive)) {\n return `[${value.length}]: ${value.map(scalarToToon).join(\",\")}`;\n }\n\n if (isUniformObjectArray(value)) {\n const fields = Object.keys(value[0] as Record<string, unknown>);\n return [\n `[${value.length}]{${fields.map(keyToToon).join(\",\")}}:`,\n ...value.map((item) =>\n `${\" \".repeat(indent + 2)}${fields.map((field) =>\n scalarToToon((item as Record<string, unknown>)[field])\n ).join(\",\")}`\n ),\n ].join(\"\\n\");\n }\n\n return value\n .flatMap((item, index) => [\n `${\" \".repeat(indent)}- item${index}:`,\n ...encodeToon(item, indent + 2).split(\"\\n\"),\n ])\n .join(\"\\n\");\n}\n\nfunction isUniformObjectArray(value: unknown[]): boolean {\n if (!value.length || !value.every(isPlainObject)) {\n return false;\n }\n\n const fields = Object.keys(value[0] as Record<string, unknown>);\n if (!fields.length) {\n return false;\n }\n\n return value.every((item) => {\n const record = item as Record<string, unknown>;\n const itemFields = Object.keys(record);\n return (\n itemFields.length === fields.length &&\n fields.every((field) => itemFields.includes(field) && isPrimitive(record[field]))\n );\n });\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitive(value: unknown): boolean {\n return (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction keyToToon(key: string): string {\n return /^[A-Za-z_][A-Za-z0-9_-]*$/.test(key) ? key : JSON.stringify(key);\n}\n\nfunction scalarToToon(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n\n const text = String(value);\n if (\n text &&\n !/^(true|false|null|-?\\d+(?:\\.\\d+)?)$/i.test(text) &&\n /^[A-Za-z0-9_./@-]+(?: [A-Za-z0-9_./@-]+)*$/.test(text)\n ) {\n return text;\n }\n\n return JSON.stringify(text);\n}\n","import type {\n BeginCallOptions,\n BeginCallRequest,\n BeginCallResponseBody,\n CreateCustomerOptions,\n CreateCustomerRequest,\n CreateCustomerResponseBody,\n CheckUsageOptions,\n CheckUsageRequest,\n CheckUsageResponseBody,\n ChangePlanOptions,\n ChangePlanRequest,\n ChangePlanResponseBody,\n IncrementCustomMeterOptions,\n IncrementCustomMeterRequest,\n IncrementCustomMeterResponseBody,\n EndCallOptions,\n EndCallRequest,\n EndCallResponseBody,\n UsageTapClientOptions,\n UsageTapLogEntry,\n UsageTapSuccessResponse,\n UsageMetricEvent,\n WithUsageContext,\n WithUsageOptions,\n PromptCompressionRequest,\n PromptCompressionOptions,\n PromptCompressionMessagesOptions,\n PromptCompressionResponseBody,\n PromptCompressionStandaloneOptions,\n PromptCompressionTelemetry,\n RecordPromptCompressionRequest,\n} from \"./types\";\nimport {\n UsageTapError,\n type UsageTapErrorCode,\n isUsageTapError,\n} from \"./errors\";\nimport { createIdempotencyKey } from \"./idempotency\";\nimport {\n runWithRetry,\n resolveRetryOptions,\n type ResolvedRetryOptions,\n} from \"./retry\";\nimport type { RetryOptions } from \"./types\";\nimport {\n compressPrompt,\n compressPromptMessages,\n createPromptCompressionFallback,\n type PromptCompressionResult,\n} from \"./prompt-compression\";\n\nconst CALL_BEGIN_PATH = \"call_begin\";\nconst CALL_END_PATH = \"call_end\";\nconst COMPRESS_PROMPT_PATH = \"compress_prompt\";\nconst CHECK_USAGE_PATH = \"customers/{customerId}/usage\";\nconst CREATE_CUSTOMER_PATH = \"customers\";\nconst CHANGE_PLAN_PATH = \"customers/{customerId}/change_plan\";\nconst INCREMENT_CUSTOM_METER_PATH = \"custom_meter\";\nconst AUTH_HEADER = \"authorization\";\nconst API_KEY_HEADER = \"x-api-key\";\nconst CORRELATION_HEADER = \"x-usage-correlation-id\";\nconst IDEMPOTENCY_HEADER = \"idempotency-key\";\nconst SDK_HEADER = \"x-usage-sdk\";\nconst USER_AGENT = \"UsageTapClient\";\nconst CANONICAL_MEDIA_TYPE = \"application/vnd.usagetap.v1+json\";\nconst DEFAULT_BASE_URL = \"https://api.usagetap.com\";\n\ndeclare const __SDK_VERSION__: string | undefined;\nconst SDK_VERSION =\n typeof __SDK_VERSION__ === \"string\" ? __SDK_VERSION__ : \"0.1.0\";\nconst HAS_WINDOW =\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as Record<string, unknown>).window !== \"undefined\";\n\ntype HeadersDict = Record<string, string>;\n\ntype InternalRequestOptions = {\n signal?: AbortSignal;\n headers?: HeadersDict;\n retries?: RetryOptions;\n correlationId?: string;\n idempotencyKey?: string;\n};\n\ntype EnvelopeShape = {\n result?: {\n status?: string;\n code?: string;\n message?: string;\n timestamp?: string;\n };\n data?: unknown;\n error?: {\n code?: string;\n message?: string;\n details?: Record<string, unknown>;\n };\n correlationId?: string;\n};\n\nexport type UsageTapCompressOptions = Omit<\n PromptCompressionStandaloneOptions,\n \"provider\"\n>;\n\nexport type UsageTapCompressResult = Omit<\n PromptCompressionResult<string>,\n \"compressedInput\"\n> & {\n /** The compressed text, ready to pass to an LLM. */\n output: string;\n /** Alias retained for consistency with the lower-level compression APIs. */\n compressedInput: string;\n};\n\nexport type MeterRequest = string | BeginCallRequest;\n\nexport class UsageTapClient {\n private readonly apiKey: string;\n private readonly baseUrl: URL;\n private readonly fetchImpl: typeof fetch;\n private readonly defaultFeature?: string;\n private readonly defaultTags?: string[];\n private readonly defaultHeaders: HeadersDict;\n private readonly retryDefaults: ResolvedRetryOptions;\n private readonly idempotencyGenerator: () => string;\n private readonly logFn?: (entry: UsageTapLogEntry) => void;\n private readonly metricFn?: (event: UsageMetricEvent) => void;\n private readonly authHeader: typeof AUTH_HEADER | typeof API_KEY_HEADER;\n private readonly autoIdempotency: boolean;\n private readonly tokenCompanyApiKey?: string;\n private readonly tokenCompanyEndpoint?: string;\n private readonly model?: string;\n private readonly tokenCompanyModel?: string;\n private readonly aggressiveness?: number;\n private readonly tokenCompanyAggressiveness?: number;\n private readonly tokenCompanyAppId?: string;\n private readonly usageTapCompressionApiKey?: string;\n private readonly usageTapCompressionEndpoint?: string;\n private readonly usageTapCompressionMessagesEndpoint?: string;\n private readonly usageTapCompressionModel?: string;\n private readonly usageTapCompressionAggressiveness?: number;\n\n constructor(options: UsageTapClientOptions = {}) {\n const apiKey = options.apiKey?.trim() || readEnvironmentVariable(\"USAGETAP_API_KEY\");\n const baseUrl =\n options.baseUrl?.trim() ||\n readEnvironmentVariable(\"USAGETAP_BASE_URL\") ||\n DEFAULT_BASE_URL;\n\n if (!apiKey) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"UsageTapClient requires an apiKey or the USAGETAP_API_KEY environment variable\"\n );\n }\n\n if (HAS_WINDOW && !options.allowBrowser) {\n throw new UsageTapError(\n \"USAGETAP_BROWSER_RUNTIME\",\n \"UsageTapClient is designed for server-side environments. Pass allowBrowser=true only for testing.\"\n );\n }\n\n const fetchCandidate = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchCandidate !== \"function\") {\n throw new UsageTapError(\n \"USAGETAP_NETWORK_ERROR\",\n \"A global fetch implementation was not found. Pass fetchImpl in UsageTapClientOptions.\"\n );\n }\n\n const normalizedBaseUrl = normalizeBaseUrl(baseUrl);\n this.baseUrl = new URL(normalizedBaseUrl);\n this.apiKey = apiKey;\n this.fetchImpl = wrapFetchImplementation(fetchCandidate, !options.fetchImpl);\n this.defaultFeature = options.defaultFeature;\n this.defaultTags = options.defaultTags?.length\n ? dedupeStrings(options.defaultTags)\n : undefined;\n this.defaultHeaders = options.headers\n ? normalizeHeaderDictionary(options.headers)\n : {};\n this.retryDefaults = resolveRetryOptions(options.retries);\n this.idempotencyGenerator =\n options.idempotencyGenerator ?? createIdempotencyKey;\n this.logFn = options.onLog;\n this.metricFn = options.onUsageMetric;\n this.authHeader = options.useApiKeyHeader ? API_KEY_HEADER : AUTH_HEADER;\n this.autoIdempotency = options.autoIdempotency ?? true;\n this.tokenCompanyApiKey = options.tokenCompanyApiKey;\n this.tokenCompanyEndpoint = options.tokenCompanyEndpoint;\n this.model = options.model;\n this.tokenCompanyModel = options.tokenCompanyModel;\n this.aggressiveness = options.aggressiveness;\n this.tokenCompanyAggressiveness = options.tokenCompanyAggressiveness;\n this.tokenCompanyAppId = options.tokenCompanyAppId;\n this.usageTapCompressionApiKey =\n options.usageTapCompressionApiKey ?? apiKey;\n this.usageTapCompressionEndpoint = options.usageTapCompressionEndpoint;\n this.usageTapCompressionMessagesEndpoint =\n options.usageTapCompressionMessagesEndpoint;\n this.usageTapCompressionModel = options.usageTapCompressionModel;\n this.usageTapCompressionAggressiveness =\n options.usageTapCompressionAggressiveness;\n }\n\n async beginCall(\n request: BeginCallRequest,\n options: BeginCallOptions = {}\n ): Promise<UsageTapSuccessResponse<BeginCallResponseBody>> {\n const idempotencyKey =\n request.idempotencyKey ??\n request.idempotency ??\n (this.autoIdempotency ? this.idempotencyGenerator() : undefined);\n const payload: BeginCallRequest = {\n ...request,\n feature: request.feature ?? this.defaultFeature,\n tags: this.mergeTags(request.tags),\n } satisfies BeginCallRequest;\n if (idempotencyKey) {\n payload.idempotencyKey = idempotencyKey;\n // Also set deprecated field for backward compatibility\n payload.idempotency = idempotencyKey;\n }\n\n const response = await this.request<BeginCallResponseBody>(\n CALL_BEGIN_PATH,\n payload,\n {\n ...options,\n idempotencyKey,\n }\n );\n\n return response;\n }\n\n async promptCompress(\n request: PromptCompressionRequest,\n options: PromptCompressionOptions = {}\n ): Promise<PromptCompressionResult & { callId: string }> {\n if (!request?.callId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"promptCompress requires callId\"\n );\n }\n\n const requestInput = request.input ?? request.text;\n if (requestInput === undefined) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"promptCompress requires input or text\"\n );\n }\n\n const result = await this.compressPromptInput(requestInput, {\n provider: request.provider,\n model: request.model,\n tokenCompanyModel: request.tokenCompanyModel,\n aggressiveness: request.aggressiveness,\n tokenCompanyAggressiveness: request.tokenCompanyAggressiveness,\n tokenCompanyAppId: request.tokenCompanyAppId,\n usageTapCompressionModel: request.usageTapCompressionModel,\n usageTapCompressionAggressiveness:\n request.usageTapCompressionAggressiveness,\n signal: options.signal,\n });\n\n try {\n await this.recordPromptCompression(\n {\n callId: request.callId,\n promptCompression: this.toPromptCompressionTelemetry(result),\n },\n options\n );\n\n return { ...result, callId: request.callId };\n } catch (error) {\n return {\n ...createPromptCompressionFallback(\n requestInput,\n request.provider ?? result.provider,\n error\n ),\n callId: request.callId,\n };\n }\n }\n\n async compressPromptInput<TInput = unknown>(\n input: TInput,\n options: PromptCompressionStandaloneOptions = {}\n ): Promise<PromptCompressionResult<TInput>> {\n return compressPrompt<TInput>({\n input,\n provider: options.provider,\n tokenCompanyApiKey: this.tokenCompanyApiKey,\n tokenCompanyEndpoint: this.tokenCompanyEndpoint,\n model: options.model ?? this.model,\n tokenCompanyModel: options.tokenCompanyModel ?? this.tokenCompanyModel,\n aggressiveness:\n options.aggressiveness ??\n this.aggressiveness,\n tokenCompanyAggressiveness:\n options.tokenCompanyAggressiveness ?? this.tokenCompanyAggressiveness,\n tokenCompanyAppId: options.tokenCompanyAppId ?? this.tokenCompanyAppId,\n usageTapCompressionApiKey: this.usageTapCompressionApiKey,\n usageTapCompressionEndpoint: this.usageTapCompressionEndpoint,\n usageTapCompressionModel:\n options.usageTapCompressionModel ?? this.usageTapCompressionModel,\n usageTapCompressionAggressiveness:\n options.usageTapCompressionAggressiveness ??\n this.usageTapCompressionAggressiveness,\n fetchImpl: this.fetchImpl,\n signal: options.signal,\n failOpen: options.failOpen,\n });\n }\n\n /**\n * Compress text with UsageTap's hosted compression service.\n *\n * This is the short, standalone path. It does not create a metered call and\n * fails open to the original text unless failOpen is explicitly disabled.\n */\n async compress(\n text: string,\n options: UsageTapCompressOptions = {}\n ): Promise<UsageTapCompressResult> {\n if (typeof text !== \"string\") {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"compress requires text\"\n );\n }\n\n const result = await this.compressPromptInput<string>(text, {\n ...options,\n provider: \"usagetap\",\n });\n const output =\n typeof result.compressedInput === \"string\"\n ? result.compressedInput\n : text;\n\n return {\n ...result,\n compressedInput: output,\n output,\n };\n }\n\n async compressPromptMessages<TInput = unknown>(\n input: TInput,\n options: PromptCompressionMessagesOptions = {}\n ): Promise<PromptCompressionResult<TInput>> {\n return compressPromptMessages<TInput>({\n input,\n provider: options.provider ?? \"usagetap\",\n usageTapCompressionApiKey: this.usageTapCompressionApiKey,\n usageTapCompressionMessagesEndpoint:\n this.usageTapCompressionMessagesEndpoint,\n aggressiveness:\n options.aggressiveness ??\n this.aggressiveness,\n usageTapCompressionAggressiveness:\n options.usageTapCompressionAggressiveness ??\n this.usageTapCompressionAggressiveness,\n fetchImpl: this.fetchImpl,\n signal: options.signal,\n failOpen: options.failOpen,\n });\n }\n\n async recordPromptCompression(\n request: RecordPromptCompressionRequest,\n options: PromptCompressionOptions = {}\n ): Promise<UsageTapSuccessResponse<PromptCompressionResponseBody>> {\n if (!request?.callId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"recordPromptCompression requires callId\"\n );\n }\n\n return this.request<PromptCompressionResponseBody>(\n COMPRESS_PROMPT_PATH,\n {\n callId: request.callId,\n promptCompression: request.promptCompression,\n },\n options\n );\n }\n\n async endCall(\n request: EndCallRequest,\n options: EndCallOptions = {}\n ): Promise<UsageTapSuccessResponse<EndCallResponseBody>> {\n if (!request?.callId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"endCall requires callId\"\n );\n }\n\n // Extract metric-only fields before sending to API\n const { customerId, feature, tags, ...apiPayload } = request;\n const response = await this.request<EndCallResponseBody>(\n CALL_END_PATH,\n apiPayload,\n options\n );\n\n // Emit usage metric for observability export\n this.emitUsageMetric({\n type: \"call_end\",\n timestamp: new Date().toISOString(),\n customerId: customerId ?? \"unknown\",\n callId: request.callId,\n feature: feature ?? this.defaultFeature,\n tags: tags ?? this.defaultTags,\n modelUsed: request.modelUsed,\n metrics: {\n inputTokens: request.inputTokens,\n responseTokens: request.responseTokens,\n cachedInputTokens: request.cachedInputTokens,\n reasoningTokens: request.reasoningTokens,\n searches: request.searches,\n audioSeconds: request.audioSeconds,\n costUsd: response.data.costUSD,\n },\n correlationId: response.correlationId,\n });\n\n return response;\n }\n\n async checkUsage(\n request: CheckUsageRequest,\n options: CheckUsageOptions = {}\n ): Promise<UsageTapSuccessResponse<CheckUsageResponseBody>> {\n if (!request?.customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"checkUsage requires customerId\"\n );\n }\n\n const path = CHECK_USAGE_PATH.replace(\n \"{customerId}\",\n encodeURIComponent(request.customerId)\n );\n const response = await this.requestGet<CheckUsageResponseBody>(\n path,\n options\n );\n\n return response;\n }\n\n async createCustomer(\n request: CreateCustomerRequest,\n options: CreateCustomerOptions = {}\n ): Promise<UsageTapSuccessResponse<CreateCustomerResponseBody>> {\n if (!request?.customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"createCustomer requires customerId\"\n );\n }\n\n const idempotencyKey =\n options.idempotencyKey ??\n (this.autoIdempotency ? this.idempotencyGenerator() : undefined);\n\n const response = await this.request<CreateCustomerResponseBody>(\n CREATE_CUSTOMER_PATH,\n { ...request },\n {\n ...options,\n idempotencyKey,\n }\n );\n\n return response;\n }\n\n async changePlan(\n request: ChangePlanRequest,\n options: ChangePlanOptions = {}\n ): Promise<UsageTapSuccessResponse<ChangePlanResponseBody>> {\n if (!request?.customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"changePlan requires customerId\"\n );\n }\n\n if (!request?.planId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"changePlan requires planId\"\n );\n }\n\n const path = CHANGE_PLAN_PATH.replace(\n \"{customerId}\",\n encodeURIComponent(request.customerId)\n );\n\n const idempotencyKey =\n options.idempotencyKey ??\n (this.autoIdempotency ? this.idempotencyGenerator() : undefined);\n\n const payload: Record<string, unknown> = {\n planId: request.planId,\n strategy: request.strategy ?? \"IMMEDIATE_RESET\",\n };\n\n const response = await this.request<ChangePlanResponseBody>(\n path,\n payload,\n {\n ...options,\n idempotencyKey,\n }\n );\n\n return response;\n }\n\n async incrementCustomMeter(\n request: IncrementCustomMeterRequest,\n options: IncrementCustomMeterOptions = {}\n ): Promise<UsageTapSuccessResponse<IncrementCustomMeterResponseBody>> {\n if (!request?.customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"incrementCustomMeter requires customerId\"\n );\n }\n\n if (!request?.meterSlot) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"incrementCustomMeter requires meterSlot\"\n );\n }\n\n if (![\"CUSTOM1\", \"CUSTOM2\"].includes(request.meterSlot)) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"meterSlot must be CUSTOM1 or CUSTOM2\"\n );\n }\n\n if (\n typeof request.amount !== \"number\" ||\n !Number.isFinite(request.amount) ||\n request.amount <= 0\n ) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"incrementCustomMeter requires a positive numeric amount\"\n );\n }\n\n const idempotencyKey =\n options.idempotencyKey ??\n (this.autoIdempotency ? this.idempotencyGenerator() : undefined);\n\n const payload: Record<string, unknown> = {\n customerId: request.customerId,\n meterSlot: request.meterSlot,\n amount: request.amount,\n };\n\n if (request.feature) {\n payload.feature = request.feature;\n }\n\n if (request.tags && request.tags.length > 0) {\n payload.tags = request.tags;\n }\n\n if (request.metadata) {\n payload.metadata = request.metadata;\n }\n\n const response = await this.request<IncrementCustomMeterResponseBody>(\n INCREMENT_CUSTOM_METER_PATH,\n payload,\n {\n ...options,\n idempotencyKey,\n }\n );\n\n // Emit usage metric for observability export\n this.emitUsageMetric({\n type: \"custom_meter\",\n timestamp: new Date().toISOString(),\n customerId: request.customerId,\n feature: request.feature ?? this.defaultFeature,\n tags: request.tags ?? this.defaultTags,\n metrics: {\n customMeterSlot: request.meterSlot,\n customMeterAmount: request.amount,\n },\n correlationId: response.correlationId,\n });\n\n return response;\n }\n\n async withUsage<T>(\n beginRequest: BeginCallRequest,\n handler: (context: WithUsageContext) => Promise<T>,\n options: WithUsageOptions = {}\n ): Promise<T> {\n const idempotencyKey =\n beginRequest.idempotencyKey ??\n beginRequest.idempotency ??\n (this.autoIdempotency ? this.idempotencyGenerator() : undefined);\n const beginPayload = idempotencyKey\n ? { ...beginRequest, idempotencyKey, idempotency: idempotencyKey }\n : { ...beginRequest };\n const beginResponse = await this.beginCall(beginPayload, options);\n\n let usage: Partial<Omit<EndCallRequest, \"callId\" | \"error\">> = {};\n const initialStripeCustomerId =\n typeof beginResponse.data.stripeCustomerId === \"string\"\n ? beginResponse.data.stripeCustomerId\n : typeof beginRequest.stripeCustomerId === \"string\"\n ? beginRequest.stripeCustomerId\n : undefined;\n if (initialStripeCustomerId) {\n usage = { ...usage, stripeCustomerId: initialStripeCustomerId };\n }\n let errorPayload: EndCallRequest[\"error\"] | undefined;\n let handlerResult: T | undefined;\n let handlerError: unknown;\n let endCallError: unknown;\n\n const context: WithUsageContext = {\n begin: beginResponse,\n setUsage: (u) => {\n usage = { ...usage, ...u };\n },\n setError: (err) => {\n errorPayload = err;\n },\n };\n\n try {\n handlerResult = await handler(context);\n } catch (error) {\n handlerError = error;\n if (!errorPayload) {\n errorPayload = {\n code: options.defaultErrorCode ?? \"VENDOR_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n };\n }\n } finally {\n try {\n await this.endCall(\n {\n callId: beginResponse.data.callId,\n // Pass context for metric tracking\n customerId: beginRequest.customerId,\n feature: beginRequest.feature ?? this.defaultFeature,\n tags: beginRequest.tags ?? this.defaultTags,\n ...(usage as Partial<Omit<EndCallRequest, \"callId\" | \"error\">>),\n error: errorPayload,\n },\n {\n ...options,\n correlationId: beginResponse.correlationId,\n }\n );\n } catch (error) {\n endCallError = error;\n }\n }\n\n if (handlerError) {\n throw handlerError;\n }\n\n if (endCallError) {\n throw wrapEndCallError(endCallError, beginResponse.correlationId);\n }\n\n return handlerResult as T;\n }\n\n /**\n * Meter one operation. Pass only a customer ID for the common path, or the\n * existing begin-call request object when feature, tags, or entitlements are needed.\n */\n async meter<T>(\n request: MeterRequest,\n handler: (context: WithUsageContext) => Promise<T>,\n options: WithUsageOptions = {}\n ): Promise<T> {\n const beginRequest =\n typeof request === \"string\" ? { customerId: request } : request;\n\n return this.withUsage(beginRequest, handler, options);\n }\n\n private toPromptCompressionTelemetry(\n result: PromptCompressionResult\n ): PromptCompressionTelemetry {\n return {\n provider: result.provider,\n originalCharacters: result.originalCharacters,\n compressedCharacters: result.compressedCharacters,\n savedCharacters: result.savedCharacters,\n originalTokens: result.originalTokens,\n compressedTokens: result.compressedTokens,\n savedTokens: result.savedTokens,\n tokenSavingsRatio: result.tokenSavingsRatio,\n savingsRatio: result.savingsRatio,\n techniques: result.techniques,\n };\n }\n\n private async request<T>(\n path: string,\n payload: unknown,\n options: InternalRequestOptions\n ): Promise<UsageTapSuccessResponse<T>> {\n const url = new URL(path, this.baseUrl).toString();\n const body = payload !== undefined ? JSON.stringify(payload) : undefined;\n const headers = this.composeHeaders(body, options);\n const resolvedRetry = resolveRetryOptions(\n this.retryDefaults,\n options.retries\n );\n\n const startTime = (): number =>\n typeof performance !== \"undefined\" ? performance.now() : Date.now();\n\n return runWithRetry(\n async (attempt) => {\n const startedAt = startTime();\n this.log({\n event: \"request:start\",\n path,\n attempt,\n idempotencyKey: options.idempotencyKey,\n correlationId: options.correlationId,\n });\n\n const response = await this.performFetch<T>({\n url,\n method: \"POST\",\n headers,\n body,\n signal: options.signal,\n });\n\n this.log({\n event: \"request:success\",\n path,\n attempt,\n idempotencyKey: options.idempotencyKey,\n correlationId: response.correlationId,\n elapsedMs: startTime() - startedAt,\n });\n\n return response;\n },\n resolvedRetry,\n (error) => this.shouldRetry(error),\n (attempt, delayMs, error) => {\n this.log({\n event: \"retry:scheduled\",\n path,\n attempt,\n idempotencyKey: options.idempotencyKey,\n correlationId: options.correlationId,\n error,\n elapsedMs: delayMs,\n });\n },\n options.signal\n ).catch((error) => {\n this.log({\n event: \"retry:exhausted\",\n path,\n attempt: resolvedRetry.maxAttempts,\n idempotencyKey: options.idempotencyKey,\n correlationId: options.correlationId,\n error,\n });\n throw error;\n });\n }\n\n private async requestGet<T>(\n path: string,\n options: InternalRequestOptions\n ): Promise<UsageTapSuccessResponse<T>> {\n const url = new URL(path, this.baseUrl).toString();\n const headers = this.composeHeaders(undefined, options);\n const resolvedRetry = resolveRetryOptions(\n this.retryDefaults,\n options.retries\n );\n\n const startTime = (): number =>\n typeof performance !== \"undefined\" ? performance.now() : Date.now();\n\n return runWithRetry(\n async (attempt) => {\n const startedAt = startTime();\n this.log({\n event: \"request:start\",\n path,\n attempt,\n correlationId: options.correlationId,\n });\n\n const response = await this.performFetch<T>({\n url,\n method: \"GET\",\n headers,\n signal: options.signal,\n });\n\n this.log({\n event: \"request:success\",\n path,\n attempt,\n correlationId: response.correlationId,\n elapsedMs: startTime() - startedAt,\n });\n\n return response;\n },\n resolvedRetry,\n (error) => this.shouldRetry(error),\n (attempt, delayMs, error) => {\n this.log({\n event: \"retry:scheduled\",\n path,\n attempt,\n correlationId: options.correlationId,\n error,\n elapsedMs: delayMs,\n });\n },\n options.signal\n ).catch((error) => {\n this.log({\n event: \"retry:exhausted\",\n path,\n attempt: resolvedRetry.maxAttempts,\n correlationId: options.correlationId,\n error,\n });\n throw error;\n });\n }\n\n private async performFetch<T>(init: {\n url: string;\n method: string;\n headers: HeadersDict;\n body?: string;\n signal?: AbortSignal;\n }): Promise<UsageTapSuccessResponse<T>> {\n let response: Response;\n try {\n response = await this.fetchImpl(init.url, {\n method: init.method,\n headers: init.headers,\n body: init.body,\n signal: init.signal,\n });\n } catch (error) {\n throw new UsageTapError(\n \"USAGETAP_NETWORK_ERROR\",\n \"Failed to reach UsageTap\",\n {\n retryable: true,\n cause: error,\n }\n );\n }\n\n const correlationId = response.headers.get(CORRELATION_HEADER) ?? undefined;\n const text = await response.text();\n let payload: EnvelopeShape | undefined;\n\n if (text) {\n try {\n payload = JSON.parse(text) as EnvelopeShape;\n } catch (error) {\n throw new UsageTapError(\n \"USAGETAP_INVALID_RESPONSE\",\n \"UsageTap returned invalid JSON\",\n {\n retryable: false,\n correlationId,\n cause: error,\n }\n );\n }\n }\n\n if (!response.ok) {\n throw this.toHttpError(response.status, payload, correlationId);\n }\n\n if (!payload?.result || payload.result.status !== \"ACCEPTED\") {\n throw this.toApiError(payload, correlationId);\n }\n\n const resolvedCorrelation = payload.correlationId ?? correlationId;\n if (\n payload.data === undefined ||\n payload.data === null ||\n !resolvedCorrelation\n ) {\n throw new UsageTapError(\n \"USAGETAP_INVALID_RESPONSE\",\n \"UsageTap response missing data or correlationId\",\n {\n correlationId: resolvedCorrelation ?? correlationId,\n }\n );\n }\n\n return {\n result: {\n status: payload.result.status as \"ACCEPTED\",\n code: payload.result.code,\n message: payload.result.message,\n timestamp: payload.result.timestamp,\n },\n data: payload.data as T,\n correlationId: resolvedCorrelation,\n } satisfies UsageTapSuccessResponse<T>;\n }\n\n private composeHeaders(\n body: string | undefined,\n options: InternalRequestOptions\n ): HeadersDict {\n const headers: HeadersDict = {\n ...this.defaultHeaders,\n [SDK_HEADER]: `js/${SDK_VERSION}`,\n \"content-type\": \"application/json\",\n accept: CANONICAL_MEDIA_TYPE,\n };\n\n if (!HAS_WINDOW) {\n // Browsers forbid setting user-agent; only attach it server-side.\n headers[\"user-agent\"] = `${USER_AGENT}/${SDK_VERSION}`;\n }\n\n if (this.authHeader === API_KEY_HEADER) {\n headers[API_KEY_HEADER] = this.apiKey;\n } else {\n headers[AUTH_HEADER] = `Bearer ${this.apiKey}`;\n }\n\n if (options.idempotencyKey) {\n headers[IDEMPOTENCY_HEADER] = options.idempotencyKey;\n }\n\n if (options.correlationId) {\n headers[CORRELATION_HEADER] = options.correlationId;\n }\n\n if (!body) {\n delete headers[\"content-type\"];\n }\n\n if (options.headers) {\n Object.assign(headers, normalizeHeaderDictionary(options.headers));\n }\n\n return headers;\n }\n\n private log(entry: UsageTapLogEntry): void {\n this.logFn?.(entry);\n }\n\n private emitUsageMetric(event: UsageMetricEvent): void {\n try {\n this.metricFn?.(event);\n } catch {\n // Non-blocking: metric export errors should not fail the main request\n }\n }\n\n private mergeTags(tags?: string[]): string[] | undefined {\n if (!tags && !this.defaultTags) {\n return undefined;\n }\n\n const combined = [...(this.defaultTags ?? []), ...(tags ?? [])].filter(\n Boolean\n );\n return combined.length ? dedupeStrings(combined) : undefined;\n }\n\n private shouldRetry(error: unknown): boolean {\n if (isUsageTapError(error)) {\n return Boolean(error.retryable);\n }\n\n if (error instanceof Error && error.name === \"AbortError\") {\n return false;\n }\n\n return false;\n }\n\n private toHttpError(\n status: number,\n payload: EnvelopeShape | undefined,\n correlationId?: string\n ): UsageTapError {\n const code = mapStatusToErrorCode(status);\n const retryable = isRetryableStatus(status);\n const message =\n payload?.error?.message ??\n payload?.result?.message ??\n `UsageTap responded with HTTP ${status}`;\n\n return new UsageTapError(code, message, {\n status,\n retryable,\n correlationId: payload?.correlationId ?? correlationId,\n details: sanitizeDetails(payload),\n });\n }\n\n private toApiError(\n payload: EnvelopeShape | undefined,\n correlationId?: string\n ): UsageTapError {\n const normalizedCode =\n payload?.error?.code ?? payload?.result?.code ?? \"UNKNOWN\";\n const retryable = isRetryableApiCode(normalizedCode);\n const message =\n payload?.error?.message ??\n payload?.result?.message ??\n \"UsageTap reported an error\";\n\n return new UsageTapError(mapApiCodeToError(normalizedCode), message, {\n retryable,\n correlationId: payload?.correlationId ?? correlationId,\n details: sanitizeDetails(payload),\n });\n }\n}\n\nfunction mapStatusToErrorCode(status: number): UsageTapErrorCode {\n if (status === 401 || status === 403) return \"USAGETAP_AUTH_ERROR\";\n if (status === 400 || status === 404 || status === 409)\n return \"USAGETAP_BAD_REQUEST\";\n if (status === 429) return \"USAGETAP_RATE_LIMITED\";\n if (status >= 500) return \"USAGETAP_SERVER_ERROR\";\n return \"USAGETAP_INVALID_RESPONSE\";\n}\n\nfunction isRetryableStatus(status: number): boolean {\n return (\n status === 408 ||\n status === 425 ||\n status === 429 ||\n status === 500 ||\n status === 502 ||\n status === 503 ||\n status === 504\n );\n}\n\nfunction isRetryableApiCode(code: string): boolean {\n const normalized = code.toUpperCase();\n return (\n normalized.includes(\"TRANSIENT\") ||\n normalized.includes(\"RETRY\") ||\n normalized.includes(\"TIMEOUT\") ||\n normalized.includes(\"THROTTLE\") ||\n normalized.includes(\"RATE_LIMIT\")\n );\n}\n\nfunction mapApiCodeToError(code: string): UsageTapErrorCode {\n const normalized = code.toUpperCase();\n if (normalized.includes(\"AUTH\") || normalized.includes(\"TOKEN\")) {\n return \"USAGETAP_AUTH_ERROR\";\n }\n if (normalized.includes(\"RATE\") || normalized.includes(\"THROTTLE\")) {\n return \"USAGETAP_RATE_LIMITED\";\n }\n if (normalized.includes(\"SERVER\") || normalized.includes(\"TRANSIENT\")) {\n return \"USAGETAP_SERVER_ERROR\";\n }\n if (\n normalized.includes(\"IDEMPOTENCY\") ||\n normalized.includes(\"VALIDATION\") ||\n normalized.includes(\"REQUEST\")\n ) {\n return \"USAGETAP_BAD_REQUEST\";\n }\n return \"USAGETAP_INVALID_RESPONSE\";\n}\n\nfunction sanitizeDetails(\n payload: EnvelopeShape | undefined\n): Record<string, unknown> | undefined {\n if (!payload) return undefined;\n const details: Record<string, unknown> = {};\n if (payload.result) details.result = payload.result;\n if (payload.error) details.error = payload.error;\n return Object.keys(details).length ? details : undefined;\n}\n\nfunction readEnvironmentVariable(name: string): string | undefined {\n const runtime = globalThis as typeof globalThis & {\n process?: { env?: Record<string, string | undefined> };\n };\n const value = runtime.process?.env?.[name]?.trim();\n return value || undefined;\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n const trimmed = baseUrl.trim();\n if (!trimmed) return trimmed;\n return trimmed.endsWith(\"/\") ? trimmed : `${trimmed}/`;\n}\n\nfunction normalizeHeaderDictionary(dict: Record<string, string>): HeadersDict {\n return Object.keys(dict).reduce<HeadersDict>((acc, key) => {\n acc[key.toLowerCase()] = dict[key];\n return acc;\n }, {});\n}\n\nfunction dedupeStrings(values: string[]): string[] {\n return Array.from(\n new Set(values.map((value) => value.trim()).filter(Boolean))\n );\n}\n\nfunction wrapFetchImplementation(\n fetchCandidate: typeof fetch,\n preferGlobalContext: boolean\n): typeof fetch {\n const target = preferGlobalContext ? globalThis : undefined;\n return ((...args: Parameters<typeof fetch>) =>\n target\n ? Reflect.apply(fetchCandidate, target, args)\n : fetchCandidate(...args)) as typeof fetch;\n}\n\nfunction wrapEndCallError(\n error: unknown,\n correlationId?: string\n): UsageTapError {\n if (isUsageTapError(error)) {\n return new UsageTapError(\"USAGETAP_END_CALL_ERROR\", error.message, {\n correlationId: error.correlationId ?? correlationId,\n details: error.details,\n cause: error,\n });\n }\n\n return new UsageTapError(\n \"USAGETAP_END_CALL_ERROR\",\n \"Failed to finalize UsageTap call\",\n {\n correlationId,\n cause: error,\n }\n );\n}\n","import type OpenAI from \"openai\";\nimport { UsageTapClient } from \"../client\";\nimport { UsageTapError } from \"../errors\";\nimport {\n DEFAULT_PROMPT_COMPRESSION_MIN_CONTEXT_TOKENS,\n estimatePromptTokens,\n} from \"../prompt-compression\";\nimport type {\n PromptCompressionProvider,\n PromptCompressionResult,\n} from \"../prompt-compression\";\nimport type {\n BeginCallRequest,\n BeginCallResponseBody,\n EndCallRequest,\n PromptCompressionOptions,\n PromptCompressionTelemetry,\n UsageTapSuccessResponse,\n VendorHints,\n WithUsageContext,\n WithUsageOptions,\n} from \"../types\";\n\nexport interface OpenAIAdapterInit {\n client: OpenAI;\n usageTap: UsageTapClient;\n}\n\nexport interface OpenAIRequestContext {\n hints?: VendorHints;\n begin: UsageTapSuccessResponse<BeginCallResponseBody>;\n}\n\nexport interface OpenAIInvokeParams<TResponse> {\n begin: BeginCallRequest;\n call: (client: OpenAI, ctx: OpenAIRequestContext) => Promise<TResponse>;\n extractUsage?: (response: TResponse) => Partial<Omit<EndCallRequest, \"callId\" | \"error\">> | void;\n withUsageOptions?: WithUsageOptions;\n}\n\nexport interface OpenAIInvokeResult<TResponse> {\n data: TResponse;\n begin: UsageTapSuccessResponse<BeginCallResponseBody>;\n}\n\nexport interface OpenAIStreamCallResult<TStream> {\n stream: AsyncIterable<TStream>;\n onComplete?: () => Promise<Partial<Omit<EndCallRequest, \"callId\" | \"error\">> | void> | Partial<Omit<EndCallRequest, \"callId\" | \"error\">> | void;\n}\n\nexport interface OpenAIStreamParams<TStream> {\n begin: BeginCallRequest;\n call: (client: OpenAI, ctx: OpenAIRequestContext) => Promise<OpenAIStreamCallResult<TStream>>;\n withUsageOptions?: WithUsageOptions;\n}\n\nexport interface OpenAIStreamResult<TStream> {\n stream: AsyncIterable<TStream> & { __usageTapFinalize?: () => Promise<void> };\n begin: UsageTapSuccessResponse<BeginCallResponseBody>;\n finalize: () => Promise<void>;\n}\n\nexport interface OpenAIAdapter {\n invoke<TResponse>(params: OpenAIInvokeParams<TResponse>): Promise<OpenAIInvokeResult<TResponse>>;\n invokeStream<TStream>(params: OpenAIStreamParams<TStream>): Promise<OpenAIStreamResult<TStream>>;\n}\n\ntype ReplaceProperty<T, K extends keyof T, V> = Omit<T, K> & Record<K, V>;\n\nexport type WrapOpenAIContext = BeginCallRequest;\n\nexport type OpenAIPromptCompressionRole = \"system\" | \"user\" | \"tool\" | \"assistant\";\n\nexport interface OpenAIPromptCompressionRoleOptions {\n enabled?: boolean;\n provider?: PromptCompressionProvider;\n minTokens?: number;\n aggressiveness?: number;\n /** @deprecated Use aggressiveness instead. */\n tokenCompanyAggressiveness?: number;\n /** @deprecated Use aggressiveness instead. */\n usageTapCompressionAggressiveness?: number;\n}\n\nexport type OpenAIPromptCompressionRoleSetting =\n | boolean\n | OpenAIPromptCompressionRoleOptions;\n\nexport interface OpenAIPromptCompressionOptions {\n enabled?: boolean;\n provider?: PromptCompressionProvider;\n roles?: Partial<Record<OpenAIPromptCompressionRole, OpenAIPromptCompressionRoleSetting>>;\n /**\n * Skip compression when the combined request context is estimated below this\n * many tokens. `withCompression` defaults to 1,000; set to 0 to always try.\n */\n minContextTokens?: number;\n /** Minimum estimated tokens for each individual text segment. */\n minTokens?: number;\n failOpen?: boolean;\n tokenCompanyModel?: string;\n aggressiveness?: number | Partial<Record<OpenAIPromptCompressionRole, number>>;\n /** @deprecated Use aggressiveness instead. */\n tokenCompanyAggressiveness?: number | Partial<Record<OpenAIPromptCompressionRole, number>>;\n tokenCompanyAppId?: string;\n usageTapCompressionModel?: string;\n /** @deprecated Use aggressiveness instead. */\n usageTapCompressionAggressiveness?: number | Partial<Record<OpenAIPromptCompressionRole, number>>;\n}\n\nexport interface OpenAIPromptCompressionTurnStats extends PromptCompressionTelemetry {\n callId: string;\n operation: \"chat.completions.create\" | \"chat.completions.stream\" | \"responses.create\";\n messagesCompressed: number;\n timestamp: number;\n}\n\nexport interface OpenAIPromptCompressionFailure {\n callId: string;\n operation: OpenAIPromptCompressionTurnStats[\"operation\"];\n stage: \"telemetry\";\n message: string;\n timestamp: number;\n}\n\nexport class OpenAIPromptCompressionStats {\n history: OpenAIPromptCompressionTurnStats[] = [];\n failures: OpenAIPromptCompressionFailure[] = [];\n\n _record(turn: OpenAIPromptCompressionTurnStats): void {\n this.history.push(turn);\n }\n\n _recordFailure(failure: OpenAIPromptCompressionFailure): void {\n this.failures.push(failure);\n }\n\n get totalOriginalTokens(): number {\n return this.history.reduce((sum, turn) => sum + (turn.originalTokens ?? 0), 0);\n }\n\n get totalCompressedTokens(): number {\n return this.history.reduce((sum, turn) => sum + (turn.compressedTokens ?? 0), 0);\n }\n\n get totalTokensSaved(): number {\n return this.history.reduce((sum, turn) => sum + (turn.savedTokens ?? 0), 0);\n }\n\n get totalOriginalCharacters(): number {\n return this.history.reduce((sum, turn) => sum + turn.originalCharacters, 0);\n }\n\n get totalCompressedCharacters(): number {\n return this.history.reduce((sum, turn) => sum + turn.compressedCharacters, 0);\n }\n\n get totalCharactersSaved(): number {\n return this.history.reduce((sum, turn) => sum + turn.savedCharacters, 0);\n }\n\n get calls(): number {\n return this.history.length;\n }\n\n get telemetryFailures(): number {\n return this.failures.length;\n }\n\n get failOpenEvents(): number {\n return this.history.filter((turn) =>\n turn.techniques.includes(\"compression-error\") ||\n turn.techniques.includes(\"fallback-original\"),\n ).length;\n }\n\n get tokenSavingsRatio(): number {\n return this.totalOriginalTokens > 0\n ? this.totalTokensSaved / this.totalOriginalTokens\n : 0;\n }\n\n get savingsRatio(): number {\n return this.totalOriginalCharacters > 0\n ? this.totalCharactersSaved / this.totalOriginalCharacters\n : 0;\n }\n}\n\nexport interface WrapOpenAIOptions {\n defaultContext?: Partial<WrapOpenAIContext>;\n applyVendorHints?: boolean;\n promptCompression?: boolean | OpenAIPromptCompressionOptions;\n}\n\nexport interface OpenAICompressionOptions extends OpenAIPromptCompressionOptions {\n /** UsageTap API key. Defaults to USAGETAP_API_KEY. */\n apiKey?: string;\n /** Reuse an existing client when custom transport or endpoints are configured. */\n usageTapClient?: UsageTapClient;\n}\n\nexport type CompressionWrappedOpenAI = OpenAI & {\n /** Return the original, unwrapped OpenAI-compatible client. */\n unwrap: () => OpenAI;\n};\n\nexport type WithMeteringOpenAIOptions = BeginCallRequest & {\n /** UsageTap API key. Defaults to USAGETAP_API_KEY. */\n apiKey?: string;\n /** Reuse an existing client when custom transport or endpoints are configured. */\n usageTapClient?: UsageTapClient;\n applyVendorHints?: boolean;\n promptCompression?: boolean | OpenAIPromptCompressionOptions;\n};\n\ntype ChatCompletionsResource = OpenAI[\"chat\"][\"completions\"];\ntype ChatCompletionCreate = ChatCompletionsResource[\"create\"];\ntype ChatCompletionCreateParams = Parameters<ChatCompletionCreate>[0];\ntype ChatCompletionCreateOptions = Parameters<ChatCompletionCreate>[1];\ntype ChatCompletionCreateReturn = ReturnType<ChatCompletionCreate>;\n\nexport type WrapOpenAICallOptions = (ChatCompletionCreateOptions extends undefined\n ? { usageTap?: Partial<WrapOpenAIContext>; withUsage?: WithUsageOptions; promptCompression?: boolean | OpenAIPromptCompressionOptions }\n : ChatCompletionCreateOptions & { usageTap?: Partial<WrapOpenAIContext>; withUsage?: WithUsageOptions; promptCompression?: boolean | OpenAIPromptCompressionOptions });\n\ninterface WrappedChatCompletions extends Omit<ChatCompletionsResource, \"create\"> {\n create: (\n params: ChatCompletionCreateParams,\n options?: WrapOpenAICallOptions,\n ) => ChatCompletionCreateReturn;\n}\n\ntype ResponsesResource = OpenAI extends { responses: infer R } ? R : never;\ntype ResponsesCreate = ResponsesResource extends { create: infer T } ? T : never;\ntype ResponsesCreateParams = ResponsesCreate extends (...args: infer P) => unknown ? P[0] : never;\ntype ResponsesCreateOptions = ResponsesCreate extends (...args: infer P) => unknown ? P[1] : never;\ntype ResponsesCreateReturn = ResponsesCreate extends (...args: unknown[]) => infer R ? R : never;\n\nexport type WrapOpenAIResponseCallOptions = (ResponsesCreateOptions extends undefined\n ? { usageTap?: Partial<WrapOpenAIContext>; withUsage?: WithUsageOptions; promptCompression?: boolean | OpenAIPromptCompressionOptions }\n : ResponsesCreateOptions & { usageTap?: Partial<WrapOpenAIContext>; withUsage?: WithUsageOptions; promptCompression?: boolean | OpenAIPromptCompressionOptions });\n\ntype WrappedResponses = ResponsesResource extends undefined\n ? undefined\n : Omit<NonNullable<ResponsesResource>, \"create\"> & {\n create: (\n params: ResponsesCreateParams,\n options?: WrapOpenAIResponseCallOptions,\n ) => ResponsesCreateReturn;\n };\n\nexport type WrappedOpenAI = OpenAI & {\n chat: ReplaceProperty<OpenAI[\"chat\"], \"completions\", WrappedChatCompletions>;\n} & (ResponsesResource extends undefined\n ? { responses?: undefined }\n : { responses: WrappedResponses }) & {\n toNextResponse: typeof toNextResponse;\n pipeToResponse: typeof pipeToResponse;\n promptCompression: OpenAIPromptCompressionStats;\n unwrap: () => OpenAI;\n };\n\nexport interface StreamOpenAIRouteOptions {\n getRequest: (req: Request) => Promise<{\n params: ChatCompletionCreateParams;\n usageTap?: Partial<WrapOpenAIContext>;\n withUsage?: WithUsageOptions;\n promptCompression?: boolean | OpenAIPromptCompressionOptions;\n }>;\n wrapOptions?: WrapOpenAIOptions;\n defaultContext?: Partial<WrapOpenAIContext>;\n stream?: {\n mode?: StreamMode;\n headers?: Record<string, string>;\n responseInit?: ResponseInit;\n };\n}\n\nexport type StreamMode = \"text\" | \"sse\";\n\nexport interface StreamToResponseOptions {\n mode?: StreamMode;\n headers?: Record<string, string>;\n contentType?: string;\n sse?: {\n event?: string;\n retry?: number;\n };\n}\n\nexport function createOpenAIAdapter(init: OpenAIAdapterInit): OpenAIAdapter {\n const { client, usageTap } = init;\n\n return {\n async invoke<TResponse>(params: OpenAIInvokeParams<TResponse>): Promise<OpenAIInvokeResult<TResponse>> {\n const result = await usageTap.withUsage<OpenAIInvokeResult<TResponse>>(\n params.begin,\n async (ctx) => {\n const response = await params.call(client, {\n hints: ctx.begin.data.vendorHints,\n begin: ctx.begin,\n });\n\n tryInferUsage(response, ctx.begin.data.vendorHints, params.extractUsage, ctx);\n\n return {\n data: response,\n begin: ctx.begin,\n } satisfies OpenAIInvokeResult<TResponse>;\n },\n params.withUsageOptions,\n );\n\n return result;\n },\n\n async invokeStream<TStream>(params: OpenAIStreamParams<TStream>): Promise<OpenAIStreamResult<TStream>> {\n const result = await usageTap.withUsage<OpenAIStreamResult<TStream>>(\n params.begin,\n async (ctx) => {\n const { stream, onComplete } = await params.call(client, {\n hints: ctx.begin.data.vendorHints,\n begin: ctx.begin,\n });\n\n const wrapped = wrapStreamForUsageTap(stream, async () => {\n if (!onComplete) return;\n try {\n const maybeUsage = await onComplete();\n if (maybeUsage) {\n ctx.setUsage(maybeUsage);\n }\n } catch (error) {\n ctx.setError({\n code: \"USAGE_FINALIZE_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n }, ctx);\n\n const finalize = async (): Promise<void> => {\n await wrapped.__usageTapFinalize?.();\n };\n\n return {\n stream: wrapped,\n begin: ctx.begin,\n finalize,\n } satisfies OpenAIStreamResult<TStream>;\n },\n params.withUsageOptions,\n );\n\n return result;\n },\n };\n}\n\nexport type UsageTapStream<T> = AsyncIterable<T> & { __usageTapFinalize?: () => Promise<void> };\ntype UsageTapIterableIterator<T> = AsyncIterator<T> & UsageTapStream<T> & {\n __usageTapFinalize: () => Promise<void>;\n};\n\nexport function toNextResponse<T>(\n stream: UsageTapStream<T>,\n options: StreamToResponseOptions = {},\n): Response {\n const mode = options.mode ?? \"text\";\n const headers = new Headers(options.headers ?? {});\n\n if (mode === \"sse\") {\n headers.set(\"content-type\", \"text/event-stream; charset=utf-8\");\n headers.set(\"cache-control\", \"no-cache, no-transform\");\n headers.set(\"connection\", \"keep-alive\");\n headers.set(\"x-accel-buffering\", \"no\");\n } else {\n headers.set(\"content-type\", options.contentType ?? \"text/plain; charset=utf-8\");\n }\n\n const encoder = new TextEncoder();\n let iterator: AsyncIterator<T> | undefined;\n\n const body = new ReadableStream<Uint8Array>({\n async start(controller: ReadableStreamDefaultController<Uint8Array>): Promise<void> {\n try {\n const getIterator = stream[Symbol.asyncIterator];\n if (typeof getIterator !== \"function\") {\n controller.close();\n return;\n }\n\n iterator = getIterator.call(stream);\n\n while (true) {\n const result = await iterator.next();\n if (result.done) {\n break;\n }\n\n const text = chunkToText(result.value);\n if (!text) {\n continue;\n }\n\n if (mode === \"sse\") {\n controller.enqueue(encoder.encode(formatSsePayload(text, options.sse)));\n } else {\n controller.enqueue(encoder.encode(text));\n }\n }\n controller.close();\n } catch (error) {\n controller.error(error);\n } finally {\n await stream.__usageTapFinalize?.();\n }\n },\n async cancel(): Promise<void> {\n if (!iterator) {\n const getIterator = stream[Symbol.asyncIterator];\n if (typeof getIterator === \"function\") {\n iterator = getIterator.call(stream);\n }\n }\n\n if (iterator && typeof iterator.return === \"function\") {\n await iterator.return();\n }\n await stream.__usageTapFinalize?.();\n },\n });\n\n return new Response(body, { headers });\n}\n\nexport async function pipeToResponse<T>(\n stream: UsageTapStream<T>,\n res: NodeResponseLike,\n options: StreamToResponseOptions = {},\n): Promise<void> {\n const mode = options.mode ?? \"text\";\n\n if (mode === \"sse\") {\n setHeaderIfPossible(res, \"Content-Type\", \"text/event-stream; charset=utf-8\");\n setHeaderIfPossible(res, \"Cache-Control\", \"no-cache, no-transform\");\n setHeaderIfPossible(res, \"Connection\", \"keep-alive\");\n setHeaderIfPossible(res, \"X-Accel-Buffering\", \"no\");\n } else {\n setHeaderIfPossible(res, \"Content-Type\", options.contentType ?? \"text/plain; charset=utf-8\");\n }\n\n const encoder = new TextEncoder();\n const iterator = stream[Symbol.asyncIterator]();\n\n try {\n while (true) {\n const result = await iterator.next();\n if (result.done) {\n break;\n }\n const text = chunkToText(result.value);\n if (!text) {\n continue;\n }\n\n const payload = mode === \"sse\" ? formatSsePayload(text, options.sse) : text;\n res.write(Buffer.from(encoder.encode(payload)));\n res.flush?.();\n }\n } finally {\n res.end();\n await stream.__usageTapFinalize?.();\n }\n}\n\nconst USAGETAP_CORRELATION_HEADER = \"x-usage-correlation-id\";\n\n/**\n * Add hosted prompt compression to an OpenAI-compatible client without\n * changing any of its call sites. Works with OpenAI and OpenRouter clients.\n */\nexport function withCompression(\n client: OpenAI,\n options: OpenAICompressionOptions = {},\n): CompressionWrappedOpenAI {\n if (!client) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"withCompression requires an OpenAI-compatible client instance\",\n );\n }\n\n const {\n apiKey,\n usageTapClient,\n ...compressionOverrides\n } = options;\n const usageTap = usageTapClient ?? new UsageTapClient({ apiKey });\n const compression: OpenAIPromptCompressionOptions = {\n provider: \"usagetap\",\n minContextTokens: DEFAULT_PROMPT_COMPRESSION_MIN_CONTEXT_TOKENS,\n ...compressionOverrides,\n };\n const proxiedChat = client.chat\n ? createCompressionOnlyChatProxy(client.chat, usageTap, compression)\n : undefined;\n const proxiedResponses = typeof client.responses !== \"undefined\"\n ? createCompressionOnlyResponsesProxy(\n client.responses as ResponsesResource,\n usageTap,\n compression,\n )\n : undefined;\n\n return new Proxy(client, {\n get(target, prop, receiver) {\n if (prop === \"chat\" && proxiedChat) {\n return proxiedChat;\n }\n if (prop === \"responses\" && typeof target.responses !== \"undefined\") {\n return proxiedResponses ?? (Reflect.get(target as object, prop, receiver) as unknown);\n }\n if (prop === \"unwrap\") {\n return () => target;\n }\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n }) as CompressionWrappedOpenAI;\n}\n\n/**\n * Add UsageTap metering to an OpenAI-compatible client. The string form is the\n * shortest path; pass an object when feature, tags, entitlements, or compression\n * are also needed.\n */\nexport function withMetering(\n client: OpenAI,\n customer: string | WithMeteringOpenAIOptions,\n): WrappedOpenAI {\n const config = typeof customer === \"string\"\n ? { customerId: customer }\n : customer;\n\n if (!config?.customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"withMetering requires a customerId\",\n );\n }\n\n const {\n apiKey,\n usageTapClient,\n applyVendorHints,\n promptCompression,\n ...defaultContext\n } = config;\n const usageTap = usageTapClient ?? new UsageTapClient({ apiKey });\n const normalizedCompression = promptCompression === true\n ? { provider: \"usagetap\" as const }\n : promptCompression\n ? { provider: \"usagetap\" as const, ...promptCompression }\n : undefined;\n\n return wrapOpenAI(client, usageTap, {\n defaultContext,\n applyVendorHints,\n promptCompression: normalizedCompression,\n });\n}\n\nexport function wrapOpenAI(\n client: OpenAI,\n usageTap: UsageTapClient,\n options: WrapOpenAIOptions = {},\n): WrappedOpenAI {\n if (!client) {\n throw new UsageTapError(\"USAGETAP_BAD_REQUEST\", \"wrapOpenAI requires an OpenAI client instance\");\n }\n\n const defaultContext = options.defaultContext;\n const applyVendorHints = options.applyVendorHints !== false;\n const defaultPromptCompression = normalizePromptCompressionOptions(options.promptCompression);\n const promptCompressionStats = new OpenAIPromptCompressionStats();\n\n const proxiedChat = client.chat\n ? createChatProxy(\n client.chat,\n usageTap,\n defaultContext,\n applyVendorHints,\n defaultPromptCompression,\n promptCompressionStats,\n )\n : undefined;\n\n const proxiedResponses = typeof client.responses !== \"undefined\"\n ? createResponsesProxy(\n client.responses,\n usageTap,\n defaultContext,\n applyVendorHints,\n defaultPromptCompression,\n promptCompressionStats,\n )\n : undefined;\n\n const handler: ProxyHandler<OpenAI> = {\n get(target, prop, receiver) {\n if (prop === \"chat\" && proxiedChat) {\n return proxiedChat;\n }\n\n if (prop === \"responses\" && typeof target.responses !== \"undefined\") {\n return proxiedResponses ?? (Reflect.get(target as object, prop, receiver) as unknown);\n }\n\n if (prop === \"toNextResponse\") {\n return toNextResponse;\n }\n\n if (prop === \"pipeToResponse\") {\n return pipeToResponse;\n }\n\n if (prop === \"promptCompression\") {\n return promptCompressionStats;\n }\n\n if (prop === \"unwrap\") {\n return () => target;\n }\n\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n };\n\n return new Proxy(client, handler) as WrappedOpenAI;\n}\n\nfunction createCompressionOnlyChatProxy(\n resource: OpenAI[\"chat\"],\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n): OpenAI[\"chat\"] {\n const completions = resource.completions;\n const originalCreate = completions.create.bind(completions);\n const streamCandidate = (completions as { stream?: unknown }).stream;\n const originalStream = typeof streamCandidate === \"function\"\n ? (streamCandidate as (...args: unknown[]) => unknown).bind(completions)\n : undefined;\n\n const wrappedCreate = (\n params: ChatCompletionCreateParams,\n options?: ChatCompletionCreateOptions,\n ): ChatCompletionCreateReturn => {\n return compressChatParams(params, usageTap, compression)\n .then((outcome) => originalCreate(outcome.params, options)) as unknown as ChatCompletionCreateReturn;\n };\n\n const wrappedStream = originalStream\n ? (params: ChatCompletionCreateParams, options?: ChatCompletionCreateOptions) =>\n compressChatParams(params, usageTap, compression)\n .then((outcome) => originalStream(outcome.params, options))\n : undefined;\n\n const proxiedCompletions = new Proxy(completions, {\n get(target, prop, receiver) {\n if (prop === \"create\") return wrappedCreate;\n if (prop === \"stream\" && wrappedStream) return wrappedStream;\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n });\n\n return new Proxy(resource, {\n get(target, prop, receiver) {\n if (prop === \"completions\") return proxiedCompletions;\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n });\n}\n\nfunction createCompressionOnlyResponsesProxy(\n resource: ResponsesResource,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n): ResponsesResource {\n if (!resource || typeof resource !== \"object\") {\n return resource;\n }\n if (!(\"create\" in resource) || typeof (resource as { create?: unknown }).create !== \"function\") {\n return resource;\n }\n\n const originalCreate = (resource as { create: (...args: unknown[]) => unknown }).create.bind(resource);\n const wrappedCreate = (\n params: ResponsesCreateParams,\n options?: ResponsesCreateOptions,\n ): ResponsesCreateReturn => {\n return compressResponsesParams(params, usageTap, compression)\n .then((outcome) => originalCreate(outcome.params, options)) as unknown as ResponsesCreateReturn;\n };\n\n return new Proxy(resource as object, {\n get(target, prop, receiver) {\n if (prop === \"create\") return wrappedCreate;\n return Reflect.get(target, prop, receiver) as unknown;\n },\n }) as ResponsesResource;\n}\n\nexport function streamOpenAIRoute(\n usageTap: UsageTapClient,\n openai: OpenAI,\n options: StreamOpenAIRouteOptions,\n): (req: Request) => Promise<Response> {\n if (!options?.getRequest) {\n throw new UsageTapError(\"USAGETAP_BAD_REQUEST\", \"streamOpenAIRoute requires a getRequest function\");\n }\n\n const wrapConfig: WrapOpenAIOptions | undefined = options.wrapOptions || options.defaultContext\n ? {\n ...(options.wrapOptions ?? {}),\n defaultContext: options.defaultContext ?? options.wrapOptions?.defaultContext,\n }\n : undefined;\n\n const wrappedClient = wrapConfig\n ? wrapOpenAI(openai, usageTap, wrapConfig)\n : wrapOpenAI(openai, usageTap);\n\n return async (req: Request): Promise<Response> => {\n const requestConfig = await options.getRequest(req);\n const mergedParams: ChatCompletionCreateParams = {\n ...requestConfig.params,\n stream: true,\n };\n\n const callOptions: Partial<WrapOpenAICallOptions> = {};\n if (requestConfig.usageTap) {\n callOptions.usageTap = requestConfig.usageTap;\n }\n if (requestConfig.withUsage) {\n callOptions.withUsage = requestConfig.withUsage;\n }\n if (requestConfig.promptCompression !== undefined) {\n callOptions.promptCompression = requestConfig.promptCompression;\n }\n\n const stream = await wrappedClient.chat.completions.create(\n mergedParams,\n Object.keys(callOptions).length ? (callOptions as WrapOpenAICallOptions) : undefined,\n );\n\n const baseResponse = toNextResponse(stream as UsageTapStream<unknown>, {\n mode: options.stream?.mode ?? \"sse\",\n headers: options.stream?.headers,\n });\n\n const init = options.stream?.responseInit;\n if (!init) {\n return baseResponse;\n }\n\n const mergedHeaders = new Headers(baseResponse.headers);\n if (init.headers) {\n const extra = normalizeHeaders(init.headers);\n for (const [key, value] of Object.entries(extra)) {\n mergedHeaders.set(key, value);\n }\n }\n\n return new Response(baseResponse.body, {\n status: init.status ?? baseResponse.status,\n statusText: init.statusText ?? baseResponse.statusText,\n headers: mergedHeaders,\n });\n };\n}\n\nexport interface NodeResponseLike {\n write(chunk: string | Uint8Array | Buffer): unknown;\n end(chunk?: string | Uint8Array | Buffer): unknown;\n setHeader?(name: string, value: string): void;\n headersSent?: boolean;\n statusCode?: number;\n status?(code: number): void;\n flush?(): void;\n}\n\nfunction createChatProxy(\n resource: OpenAI[\"chat\"],\n usageTap: UsageTapClient,\n defaultContext: Partial<WrapOpenAIContext> | undefined,\n applyVendorHints: boolean,\n defaultPromptCompression: OpenAIPromptCompressionOptions | undefined,\n promptCompressionStats: OpenAIPromptCompressionStats,\n): ReplaceProperty<OpenAI[\"chat\"], \"completions\", WrappedChatCompletions> {\n const completions = createChatCompletionsProxy(\n resource.completions,\n usageTap,\n defaultContext,\n applyVendorHints,\n defaultPromptCompression,\n promptCompressionStats,\n );\n\n const handler: ProxyHandler<OpenAI[\"chat\"]> = {\n get(target, prop, receiver) {\n if (prop === \"completions\") {\n return completions;\n }\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n };\n\n return new Proxy(resource, handler) as ReplaceProperty<OpenAI[\"chat\"], \"completions\", WrappedChatCompletions>;\n}\n\nfunction createResponsesProxy(\n resource: ResponsesResource,\n usageTap: UsageTapClient,\n defaultContext: Partial<WrapOpenAIContext> | undefined,\n applyVendorHints: boolean,\n defaultPromptCompression: OpenAIPromptCompressionOptions | undefined,\n promptCompressionStats: OpenAIPromptCompressionStats,\n): WrappedResponses | undefined {\n if (!resource || typeof resource !== \"object\") {\n return undefined;\n }\n\n if (!(\"create\" in resource) || typeof (resource as { create?: unknown }).create !== \"function\") {\n return resource as unknown as WrappedResponses;\n }\n\n const originalCreate = (resource as { create: (...args: unknown[]) => unknown }).create.bind(resource);\n\n const wrappedCreate = (\n params: ResponsesCreateParams,\n options?: WrapOpenAIResponseCallOptions,\n ): ResponsesCreateReturn => {\n const {\n requestOptions,\n usageContext,\n withUsage,\n promptCompression,\n } = splitUsageOptions(options);\n const beginRequest = resolveBeginRequest(defaultContext, usageContext);\n const wantsStream = isStreamingRequest(params);\n\n return usageTap.withUsage(beginRequest, async (ctx) => {\n const hintedParams = applyVendorHints\n ? applyResponsesVendorHints(params, ctx.begin.data.vendorHints)\n : params;\n const finalParams = await compressResponsesParamsForCall({\n params: hintedParams,\n usageTap,\n ctx,\n defaultPromptCompression,\n callPromptCompression: promptCompression,\n stats: promptCompressionStats,\n withUsage,\n operation: \"responses.create\",\n });\n const request = attachCorrelationHeader(requestOptions, ctx.begin.correlationId) as ResponsesCreateOptions;\n\n if (wantsStream) {\n const apiPromise = originalCreate(finalParams, request);\n const wrappedPromise = transformApiPromise(apiPromise, (rawStream) => {\n ensureAsyncIterable(rawStream, \"responses.create\");\n const wrappedStream = wrapStreamForUsageTap(rawStream, async () => {\n const usage = await extractUsageFromStream(rawStream, ctx.begin.data.vendorHints);\n if (usage) {\n ctx.setUsage(usage);\n }\n }, ctx);\n return wrappedStream;\n });\n\n return wrappedPromise as unknown as ResponsesCreateReturn;\n }\n\n const apiPromise = originalCreate(finalParams, request);\n const wrappedPromise = transformApiPromise(apiPromise, (response) => {\n tryInferUsage(response, ctx.begin.data.vendorHints, undefined, ctx);\n return response;\n });\n return wrappedPromise as unknown as ResponsesCreateReturn;\n }, withUsage) as ResponsesCreateReturn;\n };\n\n const handler: ProxyHandler<object> = {\n get(target, prop, receiver) {\n if (prop === \"create\") {\n return wrappedCreate;\n }\n return Reflect.get(target, prop, receiver) as unknown;\n },\n };\n\n return new Proxy(resource as object, handler) as WrappedResponses;\n}\n\nfunction createChatCompletionsProxy(\n resource: ChatCompletionsResource,\n usageTap: UsageTapClient,\n defaultContext: Partial<WrapOpenAIContext> | undefined,\n applyVendorHints: boolean,\n defaultPromptCompression: OpenAIPromptCompressionOptions | undefined,\n promptCompressionStats: OpenAIPromptCompressionStats,\n): WrappedChatCompletions {\n const originalCreate = resource.create.bind(resource);\n const streamCandidate = (resource as { stream?: unknown }).stream;\n const originalStream = typeof streamCandidate === \"function\"\n ? (streamCandidate as (...args: unknown[]) => unknown).bind(resource)\n : undefined;\n\n const wrappedCreate = (\n params: ChatCompletionCreateParams,\n options?: WrapOpenAICallOptions,\n ): ChatCompletionCreateReturn => {\n const {\n requestOptions,\n usageContext,\n withUsage,\n promptCompression,\n } = splitUsageOptions(options);\n const beginRequest = resolveBeginRequest(defaultContext, usageContext);\n const wantsStream = isStreamingRequest(params);\n\n return usageTap.withUsage(beginRequest, async (ctx) => {\n const hintedParams = applyVendorHints\n ? applyChatVendorHints(params, ctx.begin.data.vendorHints)\n : params;\n const finalParams = await compressChatParamsForCall({\n params: hintedParams,\n usageTap,\n ctx,\n defaultPromptCompression,\n callPromptCompression: promptCompression,\n stats: promptCompressionStats,\n withUsage,\n operation: \"chat.completions.create\",\n });\n const request = attachCorrelationHeader(requestOptions, ctx.begin.correlationId) as ChatCompletionCreateOptions;\n\n if (wantsStream) {\n const apiPromise = originalCreate(finalParams, request);\n const wrappedPromise = transformApiPromise(apiPromise, (rawStream) => {\n ensureAsyncIterable(rawStream, \"chat.completions.create\");\n const wrappedStream = wrapStreamForUsageTap(rawStream, async () => {\n const usage = await extractUsageFromStream(rawStream, ctx.begin.data.vendorHints);\n if (usage) {\n ctx.setUsage(usage);\n }\n }, ctx);\n return wrappedStream;\n });\n\n return wrappedPromise as unknown as ChatCompletionCreateReturn;\n }\n\n const apiPromise = originalCreate(finalParams, request);\n const wrappedPromise = transformApiPromise(apiPromise, (response) => {\n tryInferUsage(response, ctx.begin.data.vendorHints, undefined, ctx);\n return response;\n });\n return wrappedPromise as unknown as ChatCompletionCreateReturn;\n }, withUsage) as ChatCompletionCreateReturn;\n };\n\n const wrappedStream = originalStream\n ? (\n params: ChatCompletionCreateParams,\n options?: WrapOpenAICallOptions,\n ): ChatCompletionCreateReturn => {\n const {\n requestOptions,\n usageContext,\n withUsage,\n promptCompression,\n } = splitUsageOptions(options);\n const beginRequest = resolveBeginRequest(defaultContext, usageContext);\n\n return usageTap.withUsage(beginRequest, async (ctx) => {\n const hintedParams = applyVendorHints\n ? applyChatVendorHints(params, ctx.begin.data.vendorHints)\n : params;\n const finalParams = await compressChatParamsForCall({\n params: hintedParams,\n usageTap,\n ctx,\n defaultPromptCompression,\n callPromptCompression: promptCompression,\n stats: promptCompressionStats,\n withUsage,\n operation: \"chat.completions.stream\",\n });\n const request = attachCorrelationHeader(requestOptions, ctx.begin.correlationId) as ChatCompletionCreateOptions;\n\n const apiPromise = originalStream(finalParams, request);\n const wrappedPromise = transformApiPromise(apiPromise, (rawStream) => {\n ensureAsyncIterable(rawStream, \"chat.completions.stream\");\n const wrappedStreamInner = wrapStreamForUsageTap(rawStream, async () => {\n const usage = await extractUsageFromStream(rawStream, ctx.begin.data.vendorHints);\n if (usage) {\n ctx.setUsage(usage);\n }\n }, ctx);\n return wrappedStreamInner;\n });\n\n return wrappedPromise as unknown as ChatCompletionCreateReturn;\n }, withUsage) as ChatCompletionCreateReturn;\n }\n : undefined;\n\n const handler: ProxyHandler<ChatCompletionsResource> = {\n get(target, prop, receiver) {\n if (prop === \"create\") {\n return wrappedCreate;\n }\n\n if (prop === \"stream\" && wrappedStream) {\n return wrappedStream;\n }\n\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n };\n\n return new Proxy(resource, handler) as unknown as WrappedChatCompletions;\n}\n\ntype PromptCompressionOperation = OpenAIPromptCompressionTurnStats[\"operation\"];\n\ninterface ResolvedRoleCompressionOptions {\n provider?: PromptCompressionProvider;\n minTokens?: number;\n failOpen?: boolean;\n tokenCompanyModel?: string;\n aggressiveness?: number;\n tokenCompanyAggressiveness?: number;\n tokenCompanyAppId?: string;\n usageTapCompressionModel?: string;\n usageTapCompressionAggressiveness?: number;\n}\n\ninterface SegmentCompression {\n role: OpenAIPromptCompressionRole;\n result: PromptCompressionResult<unknown>;\n}\n\ninterface CompressionOutcome<TParams> {\n params: TParams;\n segments: SegmentCompression[];\n}\n\nasync function compressChatParamsForCall(args: {\n params: ChatCompletionCreateParams;\n usageTap: UsageTapClient;\n ctx: WithUsageContext;\n defaultPromptCompression: OpenAIPromptCompressionOptions | undefined;\n callPromptCompression: boolean | OpenAIPromptCompressionOptions | undefined;\n stats: OpenAIPromptCompressionStats;\n withUsage?: WithUsageOptions;\n operation: PromptCompressionOperation;\n}): Promise<ChatCompletionCreateParams> {\n const compression = resolveEffectivePromptCompressionOptions(\n args.defaultPromptCompression,\n args.callPromptCompression,\n );\n if (!compression) {\n return args.params;\n }\n\n const outcome = await compressChatParams(\n args.params,\n args.usageTap,\n compression,\n args.withUsage?.signal,\n );\n await recordCompressionOutcome({\n outcome,\n compression,\n usageTap: args.usageTap,\n ctx: args.ctx,\n stats: args.stats,\n withUsage: args.withUsage,\n operation: args.operation,\n });\n return outcome.params;\n}\n\nasync function compressResponsesParamsForCall(args: {\n params: ResponsesCreateParams;\n usageTap: UsageTapClient;\n ctx: WithUsageContext;\n defaultPromptCompression: OpenAIPromptCompressionOptions | undefined;\n callPromptCompression: boolean | OpenAIPromptCompressionOptions | undefined;\n stats: OpenAIPromptCompressionStats;\n withUsage?: WithUsageOptions;\n operation: PromptCompressionOperation;\n}): Promise<ResponsesCreateParams> {\n const compression = resolveEffectivePromptCompressionOptions(\n args.defaultPromptCompression,\n args.callPromptCompression,\n );\n if (!compression) {\n return args.params;\n }\n\n const outcome = await compressResponsesParams(\n args.params,\n args.usageTap,\n compression,\n args.withUsage?.signal,\n );\n await recordCompressionOutcome({\n outcome,\n compression,\n usageTap: args.usageTap,\n ctx: args.ctx,\n stats: args.stats,\n withUsage: args.withUsage,\n operation: args.operation,\n });\n return outcome.params;\n}\n\nasync function recordCompressionOutcome<TParams>(args: {\n outcome: CompressionOutcome<TParams>;\n compression: OpenAIPromptCompressionOptions;\n usageTap: UsageTapClient;\n ctx: WithUsageContext;\n stats: OpenAIPromptCompressionStats;\n withUsage?: WithUsageOptions;\n operation: PromptCompressionOperation;\n}): Promise<void> {\n const telemetry = buildPromptCompressionTelemetry(args.outcome.segments);\n if (!telemetry) {\n return;\n }\n\n const turn: OpenAIPromptCompressionTurnStats = {\n ...telemetry,\n callId: args.ctx.begin.data.callId,\n operation: args.operation,\n messagesCompressed: args.outcome.segments.length,\n timestamp: Date.now(),\n };\n args.stats._record(turn);\n\n try {\n await args.usageTap.recordPromptCompression(\n {\n callId: args.ctx.begin.data.callId,\n promptCompression: telemetry,\n },\n promptCompressionRequestOptions(args.withUsage, args.ctx.begin.correlationId),\n );\n } catch (error) {\n args.stats._recordFailure({\n callId: args.ctx.begin.data.callId,\n operation: args.operation,\n stage: \"telemetry\",\n message: error instanceof Error ? error.message : String(error),\n timestamp: Date.now(),\n });\n if (args.compression.failOpen === false) {\n throw error;\n }\n }\n}\n\nasync function compressChatParams(\n params: ChatCompletionCreateParams,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<CompressionOutcome<ChatCompletionCreateParams>> {\n if (!params || typeof params !== \"object\") {\n return { params, segments: [] };\n }\n\n const source = cloneRecord(params);\n const messages = Array.isArray(source.messages) ? source.messages : undefined;\n if (!messages) {\n return { params, segments: [] };\n }\n\n if (isBelowMinContextTokens(\n { messages, tools: source.tools },\n compression.minContextTokens,\n )) {\n return { params, segments: [] };\n }\n\n if (shouldUseUsageTapMessageEndpoint(compression)) {\n const result = await usageTap.compressPromptMessages(source, {\n provider: \"usagetap\",\n failOpen: compression.failOpen,\n aggressiveness:\n resolveMessageEndpointAggressiveness(compression),\n signal,\n });\n return {\n params: result.compressedInput as ChatCompletionCreateParams,\n segments: [{ role: \"user\", result }],\n };\n }\n\n const messageResults = await Promise.all(\n messages.map((message) =>\n compressOpenAIMessage(message, usageTap, compression, signal),\n ),\n );\n\n return {\n params: {\n ...source,\n messages: messageResults.map((result) => result.value),\n } as unknown as ChatCompletionCreateParams,\n segments: messageResults.flatMap((result) => result.segments),\n };\n}\n\nasync function compressResponsesParams(\n params: ResponsesCreateParams,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<CompressionOutcome<ResponsesCreateParams>> {\n if (!params || typeof params !== \"object\") {\n return { params, segments: [] };\n }\n\n const source = cloneRecord(params);\n const segments: SegmentCompression[] = [];\n\n if (isBelowMinContextTokens(\n {\n instructions: source.instructions,\n input: source.input,\n tools: source.tools,\n },\n compression.minContextTokens,\n )) {\n return { params, segments };\n }\n\n if (typeof source.instructions === \"string\") {\n const compressed = await compressTextForRole(\n source.instructions,\n \"system\",\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n source.instructions = compressed.text;\n segments.push(compressed.segment);\n }\n }\n\n if (typeof source.input === \"string\") {\n const compressed = await compressTextForRole(\n source.input,\n \"user\",\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n source.input = compressed.text;\n segments.push(compressed.segment);\n }\n } else if (Array.isArray(source.input)) {\n const inputResults = await Promise.all(\n source.input.map((item) =>\n compressResponsesInputItem(item, usageTap, compression, signal),\n ),\n );\n source.input = inputResults.map((result) => result.value);\n segments.push(...inputResults.flatMap((result) => result.segments));\n }\n\n return {\n params: source as unknown as ResponsesCreateParams,\n segments,\n };\n}\n\nasync function compressOpenAIMessage(\n message: unknown,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<{ value: unknown; segments: SegmentCompression[] }> {\n if (!isObjectRecord(message)) {\n return { value: message, segments: [] };\n }\n\n const role = mapOpenAIRole(message.role);\n if (!role) {\n return { value: message, segments: [] };\n }\n\n const content = message.content;\n if (typeof content === \"string\") {\n const compressed = await compressTextForRole(\n content,\n role,\n usageTap,\n compression,\n signal,\n );\n if (!compressed) {\n return { value: message, segments: [] };\n }\n return {\n value: { ...message, content: compressed.text },\n segments: [compressed.segment],\n };\n }\n\n if (Array.isArray(content)) {\n const blockResults = await Promise.all(\n content.map((block) =>\n compressOpenAITextBlock(block, role, usageTap, compression, signal),\n ),\n );\n const segments = blockResults.flatMap((result) =>\n result.segment ? [result.segment] : [],\n );\n return {\n value: segments.length\n ? { ...message, content: blockResults.map((result) => result.value) }\n : message,\n segments,\n };\n }\n\n return { value: message, segments: [] };\n}\n\nasync function compressOpenAITextBlock(\n block: unknown,\n role: OpenAIPromptCompressionRole,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<{ value: unknown; segment?: SegmentCompression }> {\n if (\n !isObjectRecord(block) ||\n block.type !== \"text\" ||\n typeof block.text !== \"string\"\n ) {\n return { value: block };\n }\n\n const compressed = await compressTextForRole(\n block.text,\n role,\n usageTap,\n compression,\n signal,\n );\n if (!compressed) {\n return { value: block };\n }\n\n return {\n value: { ...block, text: compressed.text },\n segment: compressed.segment,\n };\n}\n\nasync function compressResponsesInputItem(\n item: unknown,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<{ value: unknown; segments: SegmentCompression[] }> {\n if (!isObjectRecord(item)) {\n return { value: item, segments: [] };\n }\n\n const specialToolRole = mapResponsesItemTypeToRole(item.type);\n const role = specialToolRole ?? mapOpenAIRole(item.role);\n const segments: SegmentCompression[] = [];\n let next: Record<PropertyKey, unknown> = item;\n\n if (role && typeof item.content === \"string\") {\n const compressed = await compressTextForRole(\n item.content,\n role,\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n next = { ...next, content: compressed.text };\n segments.push(compressed.segment);\n }\n } else if (role && Array.isArray(item.content)) {\n const contentResults = await Promise.all(\n item.content.map((block) =>\n compressResponsesContentBlock(block, role, usageTap, compression, signal),\n ),\n );\n segments.push(\n ...contentResults.flatMap((result) =>\n result.segment ? [result.segment] : [],\n ),\n );\n if (segments.length) {\n next = {\n ...next,\n content: contentResults.map((result) => result.value),\n };\n }\n }\n\n if (specialToolRole && typeof item.output === \"string\") {\n const compressed = await compressTextForRole(\n item.output,\n specialToolRole,\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n next = { ...next, output: compressed.text };\n segments.push(compressed.segment);\n }\n }\n\n return { value: next, segments };\n}\n\nasync function compressResponsesContentBlock(\n block: unknown,\n role: OpenAIPromptCompressionRole,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<{ value: unknown; segment?: SegmentCompression }> {\n if (!isObjectRecord(block)) {\n return { value: block };\n }\n\n if (\n (block.type === \"input_text\" || block.type === \"text\") &&\n typeof block.text === \"string\"\n ) {\n const compressed = await compressTextForRole(\n block.text,\n role,\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n return {\n value: { ...block, text: compressed.text },\n segment: compressed.segment,\n };\n }\n }\n\n if (role === \"tool\" && typeof block.output === \"string\") {\n const compressed = await compressTextForRole(\n block.output,\n role,\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n return {\n value: { ...block, output: compressed.text },\n segment: compressed.segment,\n };\n }\n }\n\n return { value: block };\n}\n\nasync function compressTextForRole(\n text: string,\n role: OpenAIPromptCompressionRole,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<{ text: string; segment: SegmentCompression } | undefined> {\n if (!text.trim()) {\n return undefined;\n }\n\n const roleOptions = resolveRoleCompressionOptions(compression, role);\n if (!roleOptions) {\n return undefined;\n }\n\n const estimatedTokens = estimatePromptTokens(text);\n if (typeof roleOptions.minTokens === \"number\" && estimatedTokens < roleOptions.minTokens) {\n return undefined;\n }\n\n const result = await usageTap.compressPromptInput<string>(text, {\n provider: roleOptions.provider,\n failOpen: roleOptions.failOpen,\n tokenCompanyModel: roleOptions.tokenCompanyModel,\n aggressiveness: roleOptions.aggressiveness,\n tokenCompanyAggressiveness: roleOptions.tokenCompanyAggressiveness,\n tokenCompanyAppId: roleOptions.tokenCompanyAppId,\n usageTapCompressionModel: roleOptions.usageTapCompressionModel,\n usageTapCompressionAggressiveness:\n roleOptions.usageTapCompressionAggressiveness,\n signal,\n });\n const compressedText =\n typeof result.compressedInput === \"string\"\n ? result.compressedInput\n : String(result.compressedInput);\n\n return {\n text: compressedText,\n segment: { role, result: { ...result, compressedInput: compressedText } },\n };\n}\n\nfunction normalizePromptCompressionOptions(\n options: boolean | OpenAIPromptCompressionOptions | undefined,\n): OpenAIPromptCompressionOptions | undefined {\n if (!options) {\n return undefined;\n }\n if (options === true) {\n return {};\n }\n if (options.enabled === false) {\n return undefined;\n }\n return options;\n}\n\nfunction isBelowMinContextTokens(\n context: unknown,\n minContextTokens: number | undefined,\n): boolean {\n return typeof minContextTokens === \"number\" &&\n estimatePromptTokens(context) < Math.max(0, minContextTokens);\n}\n\nfunction resolveEffectivePromptCompressionOptions(\n defaults: OpenAIPromptCompressionOptions | undefined,\n override: boolean | OpenAIPromptCompressionOptions | undefined,\n): OpenAIPromptCompressionOptions | undefined {\n if (override === false) {\n return undefined;\n }\n if (override === undefined) {\n return defaults;\n }\n if (override === true) {\n return defaults ?? {};\n }\n\n const merged: OpenAIPromptCompressionOptions = {\n ...(defaults ?? {}),\n ...override,\n roles: override.roles ?? defaults?.roles,\n };\n return normalizePromptCompressionOptions(merged);\n}\n\nfunction resolveRoleCompressionOptions(\n compression: OpenAIPromptCompressionOptions,\n role: OpenAIPromptCompressionRole,\n): ResolvedRoleCompressionOptions | undefined {\n const hasExplicitRoles = compression.roles !== undefined;\n const setting = compression.roles?.[role];\n\n if (hasExplicitRoles && setting === undefined) {\n return undefined;\n }\n\n if (!hasExplicitRoles && role === \"assistant\") {\n return undefined;\n }\n\n if (setting === false) {\n return undefined;\n }\n\n const roleOptions = typeof setting === \"object\" ? setting : undefined;\n if (roleOptions?.enabled === false) {\n return undefined;\n }\n\n return {\n provider: roleOptions?.provider ?? compression.provider,\n minTokens: roleOptions?.minTokens ?? compression.minTokens,\n failOpen: compression.failOpen,\n tokenCompanyModel: compression.tokenCompanyModel,\n aggressiveness:\n roleOptions?.aggressiveness ??\n resolveAggressiveness(compression, role),\n tokenCompanyAggressiveness:\n roleOptions?.tokenCompanyAggressiveness ??\n resolveTokenCompanyAggressiveness(compression, role),\n tokenCompanyAppId: compression.tokenCompanyAppId,\n usageTapCompressionModel: compression.usageTapCompressionModel,\n usageTapCompressionAggressiveness:\n roleOptions?.usageTapCompressionAggressiveness ??\n resolveUsageTapCompressionAggressiveness(compression, role),\n };\n}\n\nfunction resolveAggressiveness(\n compression: OpenAIPromptCompressionOptions,\n role: OpenAIPromptCompressionRole,\n): number | undefined {\n if (typeof compression.aggressiveness === \"number\") {\n return compression.aggressiveness;\n }\n return compression.aggressiveness?.[role];\n}\n\nfunction resolveTokenCompanyAggressiveness(\n compression: OpenAIPromptCompressionOptions,\n role: OpenAIPromptCompressionRole,\n): number | undefined {\n if (typeof compression.tokenCompanyAggressiveness === \"number\") {\n return compression.tokenCompanyAggressiveness;\n }\n return compression.tokenCompanyAggressiveness?.[role];\n}\n\nfunction resolveUsageTapCompressionAggressiveness(\n compression: OpenAIPromptCompressionOptions,\n role: OpenAIPromptCompressionRole,\n): number | undefined {\n if (typeof compression.usageTapCompressionAggressiveness === \"number\") {\n return compression.usageTapCompressionAggressiveness;\n }\n return compression.usageTapCompressionAggressiveness?.[role];\n}\n\nfunction shouldUseUsageTapMessageEndpoint(\n compression: OpenAIPromptCompressionOptions,\n): boolean {\n if (compression.provider !== \"usagetap\") {\n return false;\n }\n\n return Object.values(compression.roles ?? {}).every((setting) => {\n if (typeof setting !== \"object\" || setting === null) {\n return true;\n }\n return setting.provider === undefined || setting.provider === \"usagetap\";\n });\n}\n\nfunction resolveMessageEndpointAggressiveness(\n compression: OpenAIPromptCompressionOptions,\n): number | Partial<Record<OpenAIPromptCompressionRole, number>> | undefined {\n const base =\n compression.aggressiveness ??\n compression.usageTapCompressionAggressiveness ??\n compression.tokenCompanyAggressiveness;\n\n if (typeof base === \"number\" || base === undefined) {\n return hasExplicitEnabledRoles(compression)\n ? buildRoleAggressiveness(compression, base)\n : base;\n }\n\n return buildRoleAggressiveness(compression, undefined, base);\n}\n\nfunction hasExplicitEnabledRoles(\n compression: OpenAIPromptCompressionOptions,\n): boolean {\n return Object.values(compression.roles ?? {}).some((setting) => setting !== false);\n}\n\nfunction buildRoleAggressiveness(\n compression: OpenAIPromptCompressionOptions,\n fallback?: number,\n base: Partial<Record<OpenAIPromptCompressionRole, number>> = {},\n): Partial<Record<OpenAIPromptCompressionRole, number>> {\n const roles: OpenAIPromptCompressionRole[] = [\"system\", \"user\", \"tool\", \"assistant\"];\n const result: Partial<Record<OpenAIPromptCompressionRole, number>> = {};\n\n for (const role of roles) {\n const roleOptions = resolveRoleCompressionOptions(compression, role);\n if (!roleOptions) {\n continue;\n }\n\n const roleAggressiveness =\n roleOptions.aggressiveness ??\n roleOptions.usageTapCompressionAggressiveness ??\n roleOptions.tokenCompanyAggressiveness ??\n base[role] ??\n fallback;\n if (roleAggressiveness !== undefined) {\n result[role] = roleAggressiveness;\n }\n }\n\n return result;\n}\n\nfunction buildPromptCompressionTelemetry(\n segments: SegmentCompression[],\n): PromptCompressionTelemetry | undefined {\n if (!segments.length) {\n return undefined;\n }\n\n const originalCharacters = segments.reduce(\n (sum, segment) => sum + segment.result.originalCharacters,\n 0,\n );\n const compressedCharacters = segments.reduce(\n (sum, segment) => sum + segment.result.compressedCharacters,\n 0,\n );\n const originalTokens = segments.reduce(\n (sum, segment) => sum + segment.result.originalTokens,\n 0,\n );\n const compressedTokens = segments.reduce(\n (sum, segment) => sum + segment.result.compressedTokens,\n 0,\n );\n const savedCharacters = Math.max(0, originalCharacters - compressedCharacters);\n const savedTokens = Math.max(0, originalTokens - compressedTokens);\n const providers = dedupeStrings(segments.map((segment) => segment.result.provider));\n const roles = dedupeStrings(segments.map((segment) => `role:${segment.role}`));\n const techniques = dedupeStrings([\n \"openai-wrapper\",\n ...roles,\n ...segments.flatMap((segment) => segment.result.techniques),\n ...(providers.length > 1 ? [\"mixed-providers\"] : []),\n ]);\n\n return {\n provider: segments[0]?.result.provider ?? \"heuristic\",\n originalCharacters,\n compressedCharacters,\n savedCharacters,\n originalTokens,\n compressedTokens,\n savedTokens,\n tokenSavingsRatio: originalTokens > 0 ? savedTokens / originalTokens : 0,\n savingsRatio: originalCharacters > 0 ? savedCharacters / originalCharacters : 0,\n techniques,\n };\n}\n\nfunction promptCompressionRequestOptions(\n withUsage: WithUsageOptions | undefined,\n correlationId: string,\n): PromptCompressionOptions {\n return {\n signal: withUsage?.signal,\n headers: withUsage?.headers,\n retries: withUsage?.retries,\n correlationId,\n };\n}\n\nfunction mapOpenAIRole(role: unknown): OpenAIPromptCompressionRole | undefined {\n if (role === \"system\" || role === \"developer\") {\n return \"system\";\n }\n if (role === \"user\") {\n return \"user\";\n }\n if (role === \"tool\" || role === \"function\") {\n return \"tool\";\n }\n if (role === \"assistant\") {\n return \"assistant\";\n }\n return undefined;\n}\n\nfunction mapResponsesItemTypeToRole(type: unknown): OpenAIPromptCompressionRole | undefined {\n if (\n type === \"function_call_output\" ||\n type === \"tool_result\" ||\n type === \"computer_call_output\"\n ) {\n return \"tool\";\n }\n return undefined;\n}\n\ninterface SplitUsageOptionsResult {\n requestOptions?: Record<string, unknown>;\n usageContext?: Partial<WrapOpenAIContext>;\n withUsage?: WithUsageOptions;\n promptCompression?: boolean | OpenAIPromptCompressionOptions;\n}\n\nfunction splitUsageOptions(options: unknown): SplitUsageOptionsResult {\n if (!options || typeof options !== \"object\") {\n return {};\n }\n\n const { usageTap, withUsage, promptCompression, ...rest } = options as {\n usageTap?: Partial<WrapOpenAIContext>;\n withUsage?: WithUsageOptions;\n promptCompression?: boolean | OpenAIPromptCompressionOptions;\n } & Record<string, unknown>;\n\n const requestOptions = Object.keys(rest).length ? cloneRequestOptions(rest) : undefined;\n\n return {\n requestOptions,\n usageContext: usageTap,\n withUsage,\n promptCompression,\n } satisfies SplitUsageOptionsResult;\n}\n\nfunction resolveBeginRequest(\n defaults: Partial<WrapOpenAIContext> | undefined,\n override: Partial<WrapOpenAIContext> | undefined,\n): BeginCallRequest {\n const base = defaults ?? {};\n const current = override ?? {};\n const customerId = current.customerId ?? base.customerId;\n\n if (!customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"wrapOpenAI requires usageTap.customerId (provide defaultContext or options.usageTap)\",\n );\n }\n\n const tags = mergeTags(base.tags, current.tags);\n const begin: BeginCallRequest = { customerId } satisfies BeginCallRequest;\n\n const requested = current.requested ?? base.requested;\n if (requested) begin.requested = requested;\n\n const feature = current.feature ?? base.feature;\n if (feature) begin.feature = feature;\n\n const idempotency = current.idempotency ?? base.idempotency;\n if (idempotency) begin.idempotency = idempotency;\n\n const customerName = current.customerName ?? base.customerName;\n if (customerName) begin.customerName = customerName;\n\n const customerEmail = current.customerEmail ?? base.customerEmail;\n if (customerEmail) begin.customerEmail = customerEmail;\n\n if (tags?.length) {\n begin.tags = tags;\n }\n\n return begin;\n}\n\ntype PromiseLikeOrValue<T> = PromiseLike<T> | T;\n\nfunction transformApiPromise<TValue, TResult>(\n apiPromise: PromiseLikeOrValue<TValue>,\n onResolve: (value: TValue) => PromiseLike<TResult> | TResult,\n): Promise<TResult> {\n const resolvedPromise = Promise.resolve(apiPromise).then(onResolve);\n\n if (isObjectRecord(apiPromise)) {\n const proto = Object.getPrototypeOf(apiPromise) as object | null;\n if (proto) {\n Object.setPrototypeOf(resolvedPromise, proto);\n }\n\n for (const key of Reflect.ownKeys(apiPromise)) {\n if (key === \"then\" || key === \"catch\" || key === \"finally\") {\n continue;\n }\n\n try {\n const descriptor = Object.getOwnPropertyDescriptor(apiPromise, key);\n if (descriptor) {\n Reflect.defineProperty(resolvedPromise, key, descriptor);\n }\n } catch {\n /* ignore non-configurable properties */\n }\n }\n }\n\n return resolvedPromise;\n}\n\nfunction isObjectRecord(value: unknown): value is Record<PropertyKey, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction cloneRecord(value: unknown): Record<string, unknown> {\n return isObjectRecord(value) ? { ...(value as Record<string, unknown>) } : {};\n}\n\nfunction isStringTuple(value: unknown): value is [string, string] {\n return Array.isArray(value) && value.length >= 2 && typeof value[0] === \"string\" && typeof value[1] === \"string\";\n}\n\nfunction cloneRequestOptions(source: Record<string, unknown>): Record<string, unknown> {\n const clone: Record<string, unknown> = { ...source };\n\n if (\"headers\" in clone) {\n clone.headers = normalizeHeaders((clone as { headers?: unknown }).headers);\n }\n\n return clone;\n}\n\nfunction attachCorrelationHeader(\n options: Record<string, unknown> | undefined,\n correlationId: string,\n): Record<string, unknown> | undefined {\n const normalized = normalizeHeaders(options?.headers);\n\n if (correlationId && !normalized[USAGETAP_CORRELATION_HEADER]) {\n normalized[USAGETAP_CORRELATION_HEADER] = correlationId;\n }\n\n if (!options) {\n return Object.keys(normalized).length\n ? ({ headers: normalized } satisfies Record<string, unknown>)\n : undefined;\n }\n\n const next = { ...options } satisfies Record<string, unknown>;\n if (Object.keys(normalized).length) {\n next.headers = normalized;\n }\n return next;\n}\n\nfunction normalizeHeaders(headers: unknown): Record<string, string> {\n if (!headers) {\n return {};\n }\n\n if (headers instanceof Headers) {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key.toLowerCase()] = value;\n });\n return result;\n }\n\n if (Array.isArray(headers)) {\n const result: Record<string, string> = {};\n for (const entry of headers) {\n if (!isStringTuple(entry)) {\n continue;\n }\n const [key, value] = entry;\n result[key.toLowerCase()] = value;\n }\n return result;\n }\n\n if (isObjectRecord(headers)) {\n const result: Record<string, string> = {};\n const record = headers as Record<string, unknown>;\n for (const key of Object.keys(record)) {\n const value = record[key];\n if (value !== undefined && value !== null) {\n result[key.toLowerCase()] = String(value);\n }\n }\n return result;\n }\n\n return {};\n}\n\nfunction mergeTags(a?: string[], b?: string[]): string[] | undefined {\n const values = [...(a ?? []), ...(b ?? [])]\n .map((value) => (typeof value === \"string\" ? value.trim() : \"\"))\n .filter(Boolean);\n\n if (!values.length) {\n return undefined;\n }\n\n return dedupeStrings(values);\n}\n\nfunction dedupeStrings(values: string[]): string[] {\n return Array.from(new Set(values));\n}\n\nfunction isStreamingRequest(params: unknown): boolean {\n if (!params || typeof params !== \"object\") {\n return false;\n }\n\n const stream = (params as { stream?: unknown }).stream;\n if (typeof stream === \"boolean\") {\n return stream;\n }\n\n return stream != null;\n}\n\nfunction applyChatVendorHints(\n params: ChatCompletionCreateParams,\n hints: VendorHints | undefined,\n): ChatCompletionCreateParams {\n if (!hints) {\n return params;\n }\n\n const next = cloneRecord(params);\n\n if (hints.preferredModel && (next.model === undefined || next.model === null)) {\n next.model = hints.preferredModel;\n }\n\n if (typeof hints.maxResponseTokens === \"number\" && next.max_tokens == null) {\n next.max_tokens = hints.maxResponseTokens;\n }\n\n if (typeof hints.maxInputTokens === \"number\" && (next as { max_input_tokens?: unknown }).max_input_tokens == null) {\n (next as { max_input_tokens?: number }).max_input_tokens = hints.maxInputTokens;\n }\n\n return next as unknown as ChatCompletionCreateParams;\n}\n\nfunction applyResponsesVendorHints(\n params: ResponsesCreateParams,\n hints: VendorHints | undefined,\n): ResponsesCreateParams {\n if (!hints) {\n return params;\n }\n\n const next = cloneRecord(params);\n\n if (hints.preferredModel && (next.model === undefined || next.model === null)) {\n next.model = hints.preferredModel;\n }\n\n if (typeof hints.maxResponseTokens === \"number\" && (next as { max_output_tokens?: unknown }).max_output_tokens == null) {\n (next as { max_output_tokens?: number }).max_output_tokens = hints.maxResponseTokens;\n }\n\n return next as unknown as ResponsesCreateParams;\n}\n\nasync function extractUsageFromStream(\n stream: unknown,\n hints: VendorHints | undefined,\n): Promise<Partial<Omit<EndCallRequest, \"callId\" | \"error\">> | undefined> {\n const finalPayload = await resolveStreamFinalPayload(stream);\n if (!finalPayload) {\n return undefined;\n }\n\n return inferUsageFromResponse(finalPayload, hints);\n}\n\nasync function resolveStreamFinalPayload(stream: unknown): Promise<unknown> {\n if (!stream || typeof stream !== \"object\") {\n return undefined;\n }\n\n const candidate = stream as {\n finalChatCompletion?: () => Promise<unknown>;\n finalCompletion?: () => Promise<unknown>;\n finalResponse?: () => Promise<unknown>;\n finalContent?: () => Promise<unknown>;\n };\n\n if (typeof candidate.finalChatCompletion === \"function\") {\n return candidate.finalChatCompletion();\n }\n\n if (typeof candidate.finalResponse === \"function\") {\n return candidate.finalResponse();\n }\n\n if (typeof candidate.finalCompletion === \"function\") {\n return candidate.finalCompletion();\n }\n\n if (typeof candidate.finalContent === \"function\") {\n return candidate.finalContent();\n }\n\n return undefined;\n}\n\nfunction ensureAsyncIterable(value: unknown, label: string): asserts value is AsyncIterable<unknown> {\n if (!value || typeof value !== \"object\" || typeof (value as AsyncIterable<unknown>)[Symbol.asyncIterator] !== \"function\") {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n `${label} expected an async iterable stream but received ${typeof value}`,\n );\n }\n}\n\nfunction chunkToText(chunk: unknown): string {\n if (chunk === undefined || chunk === null) {\n return \"\";\n }\n\n if (typeof chunk === \"string\") {\n return chunk;\n }\n\n if (typeof chunk === \"object\") {\n const candidate = chunk as {\n choices?: Array<{\n delta?: {\n content?: string | Array<{ text?: string }>;\n };\n }>;\n content?: string;\n };\n\n const delta = candidate.choices?.[0]?.delta;\n const content = delta?.content ?? candidate.content;\n\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n return content\n .map((entry) => {\n if (!entry) return \"\";\n if (typeof entry === \"string\") return entry;\n if (typeof entry.text === \"string\") return entry.text;\n return \"\";\n })\n .join(\"\");\n }\n }\n\n return String(chunk);\n}\n\nfunction formatSsePayload(\n text: string,\n options: StreamToResponseOptions[\"sse\"],\n): string {\n if (!text) {\n return \"\";\n }\n\n const lines = text.split(/\\r?\\n/);\n const eventLine = options?.event ? `event: ${options.event}\\n` : \"\";\n const retryLine = options?.retry ? `retry: ${options.retry}\\n` : \"\";\n const dataLines = lines.map((line) => `data: ${line}`).join(\"\\n\");\n return `${eventLine}${retryLine}${dataLines}\\n\\n`;\n}\n\nfunction setHeaderIfPossible(res: NodeResponseLike, key: string, value: string): void {\n if (typeof res.setHeader === \"function\" && res.headersSent !== true) {\n res.setHeader(key, value);\n }\n}\n\nfunction tryInferUsage<TResponse>(\n response: TResponse,\n hints: VendorHints | undefined,\n extractor: OpenAIInvokeParams<TResponse>[\"extractUsage\"],\n ctx: WithUsageContext,\n): void {\n const explicit = extractor?.(response);\n const inferred = explicit ?? inferUsageFromResponse(response, hints);\n\n if (inferred) {\n ctx.setUsage(inferred);\n }\n}\n\nfunction inferUsageFromResponse(\n response: unknown,\n hints: VendorHints | undefined,\n): Partial<Omit<EndCallRequest, \"callId\" | \"error\">> | undefined {\n if (!response || typeof response !== \"object\") {\n return undefined;\n }\n\n const candidate = response as {\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n cached_tokens?: number;\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n };\n model?: string;\n };\n\n if (!candidate.usage) {\n return undefined;\n }\n\n const cachedInputTokens =\n candidate.usage.prompt_tokens_details?.cached_tokens ??\n candidate.usage.cached_tokens;\n\n return {\n modelUsed: candidate.model ?? hints?.preferredModel,\n inputTokens: candidate.usage.prompt_tokens,\n responseTokens: candidate.usage.completion_tokens,\n cachedInputTokens,\n } satisfies Partial<Omit<EndCallRequest, \"callId\" | \"error\">>;\n}\n\nfunction wrapStreamForUsageTap<TStream>(\n source: UsageTapStream<TStream> | AsyncIterable<TStream>,\n finalize: () => Promise<void> | void,\n ctx: WithUsageContext,\n): AsyncIterable<TStream> & { __usageTapFinalize: () => Promise<void> } {\n const getIterator = source[Symbol.asyncIterator];\n if (typeof getIterator !== \"function\") {\n throw new TypeError(\"Stream is not async iterable\");\n }\n\n const iterator = getIterator.call(source) as AsyncIterator<TStream>;\n let completed = false;\n\n const invokeFinalize = async (): Promise<void> => {\n if (completed) return;\n completed = true;\n try {\n await finalize();\n } catch (error) {\n ctx.setError({\n code: \"USAGE_FINALIZE_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n };\n\n const prototype = (Object.getPrototypeOf(source as object) as object | null) ?? Object.prototype;\n const wrapped = Object.create(prototype) as unknown as UsageTapIterableIterator<TStream>;\n\n for (const key of Reflect.ownKeys(source as object)) {\n try {\n const descriptor = Object.getOwnPropertyDescriptor(source as object, key);\n if (descriptor) {\n Object.defineProperty(wrapped, key, descriptor);\n }\n } catch {\n /* ignore non-configurable properties */\n }\n }\n\n Object.defineProperty(wrapped, Symbol.asyncIterator, {\n value(): UsageTapIterableIterator<TStream> {\n return this as UsageTapIterableIterator<TStream>;\n },\n configurable: true,\n });\n\n Object.defineProperty(wrapped, \"next\", {\n value: async (...args: Parameters<AsyncIterator<TStream>[\"next\"]>): Promise<IteratorResult<TStream>> => {\n try {\n const result = await iterator.next(...args);\n if (result.done) {\n await invokeFinalize();\n }\n return result;\n } catch (error) {\n await invokeFinalize().catch(() => undefined);\n throw error;\n }\n },\n configurable: true,\n writable: true,\n });\n\n Object.defineProperty(wrapped, \"return\", {\n value: async (value?: TStream): Promise<IteratorResult<TStream>> => {\n if (typeof iterator.return === \"function\") {\n const rawResult: unknown = await iterator.return(value);\n if (!isIteratorResult<TStream>(rawResult)) {\n throw new TypeError(\"Iterator.return() returned an invalid result\");\n }\n await invokeFinalize();\n return rawResult;\n }\n await invokeFinalize();\n return { done: true, value } as IteratorResult<TStream>;\n },\n configurable: true,\n writable: true,\n });\n\n Object.defineProperty(wrapped, \"throw\", {\n value: async (error?: unknown): Promise<IteratorResult<TStream>> => {\n if (typeof iterator.throw === \"function\") {\n const rawResult: unknown = await iterator.throw(error);\n if (!isIteratorResult<TStream>(rawResult)) {\n throw new TypeError(\"Iterator.throw() returned an invalid result\");\n }\n await invokeFinalize();\n return rawResult;\n }\n await invokeFinalize();\n throw error;\n },\n configurable: true,\n writable: true,\n });\n\n Object.defineProperty(wrapped, \"__usageTapFinalize\", {\n value: async (): Promise<void> => {\n await invokeFinalize();\n },\n configurable: true,\n });\n\n return wrapped;\n}\n\nfunction isIteratorResult<T>(value: unknown): value is IteratorResult<T> {\n return isObjectRecord(value) && \"done\" in value;\n}\n","import type OpenAI from \"openai\";\nimport { UsageTapClient } from \"../client\";\nimport type { OpenAIAdapter } from \"./openai\";\nimport { createOpenAIAdapter } from \"./openai\";\n\nexport interface OpenRouterAdapterInit {\n client: OpenAI;\n usageTap: UsageTapClient;\n}\n\nexport function createOpenRouterAdapter(init: OpenRouterAdapterInit): OpenAIAdapter {\n return createOpenAIAdapter(init);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/errors.ts","../../src/idempotency.ts","../../src/retry.ts","../../src/prompt-compression.ts","../../src/resources.ts","../../src/client.ts","../../src/adapters/openai.ts","../../src/adapters/openrouter.ts"],"names":["message","CANONICAL_MEDIA_TYPE","normalizedBaseUrl","apiPromise","wrappedPromise","wrappedStream","dedupeStrings","error","withMetering","wrapOpenAI","withSampling"],"mappings":"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","file":"index.mjs","sourcesContent":["export type UsageTapErrorCode =\n | \"USAGETAP_BROWSER_RUNTIME\"\n | \"USAGETAP_AUTH_ERROR\"\n | \"USAGETAP_BAD_REQUEST\"\n | \"USAGETAP_INVALID_RESPONSE\"\n | \"USAGETAP_NETWORK_ERROR\"\n | \"USAGETAP_RATE_LIMITED\"\n | \"USAGETAP_CIRCUIT_OPEN\"\n | \"USAGETAP_SERVER_ERROR\"\n | \"USAGETAP_RETRY_EXHAUSTED\"\n | \"USAGETAP_END_CALL_ERROR\";\n\nexport interface UsageTapErrorInit {\n status?: number;\n retryable?: boolean;\n correlationId?: string;\n details?: Record<string, unknown>;\n cause?: unknown;\n}\n\nexport class UsageTapError extends Error {\n public readonly code: UsageTapErrorCode;\n public readonly status?: number;\n public readonly retryable: boolean;\n public readonly correlationId?: string;\n public readonly details?: Record<string, unknown>;\n\n constructor(code: UsageTapErrorCode, message: string, init: UsageTapErrorInit = {}) {\n super(message, init.cause ? { cause: init.cause as Error } : undefined);\n this.name = \"UsageTapError\";\n this.code = code;\n this.status = init.status;\n this.retryable = init.retryable ?? false;\n this.correlationId = init.correlationId;\n this.details = init.details;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n status: this.status,\n retryable: this.retryable,\n correlationId: this.correlationId,\n details: this.details,\n };\n }\n}\n\nexport function isUsageTapError(error: unknown): error is UsageTapError {\n return error instanceof UsageTapError;\n}\n","export function createIdempotencyKey(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n\n const random = (): string => Math.random().toString(16).slice(2, 10);\n return `${random()}-${random()}`;\n}\n","import type { RetryOptions } from \"./types\";\n\nexport interface ResolvedRetryOptions {\n maxAttempts: number;\n baseDelayMs: number;\n maxDelayMs: number;\n jitterRatio: number;\n}\n\nconst DEFAULTS: ResolvedRetryOptions = {\n maxAttempts: 3,\n baseDelayMs: 250,\n maxDelayMs: 5000,\n jitterRatio: 0.2,\n};\n\nexport function resolveRetryOptions(\n base?: RetryOptions,\n override?: RetryOptions,\n): ResolvedRetryOptions {\n const merged = { ...DEFAULTS, ...base, ...override } satisfies ResolvedRetryOptions;\n return {\n maxAttempts: Math.max(1, Math.floor(merged.maxAttempts)),\n baseDelayMs: Math.max(0, merged.baseDelayMs),\n maxDelayMs: Math.max(merged.baseDelayMs, merged.maxDelayMs),\n jitterRatio: Math.min(Math.max(merged.jitterRatio, 0), 1),\n };\n}\n\nexport async function sleep(delayMs: number, signal?: AbortSignal): Promise<void> {\n if (delayMs <= 0) {\n signal?.throwIfAborted?.();\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n cleanup();\n resolve();\n }, delayMs);\n\n const cleanup = (): void => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n };\n\n const onAbort = (): void => {\n cleanup();\n const abortError = new Error(\"Aborted\");\n abortError.name = \"AbortError\";\n reject(abortError);\n };\n\n if (signal) {\n if (signal.aborted) {\n onAbort();\n return;\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n}\n\nexport function computeDelay(attempt: number, options: ResolvedRetryOptions): number {\n const exp = options.baseDelayMs * Math.pow(2, attempt - 1);\n const capped = Math.min(exp, options.maxDelayMs);\n const jitter = capped * options.jitterRatio;\n const min = capped - jitter;\n const max = capped + jitter;\n return Math.max(0, Math.random() * (max - min) + min);\n}\n\nexport async function runWithRetry<T>(\n operation: (attempt: number) => Promise<T>,\n options: ResolvedRetryOptions,\n shouldRetry: (error: unknown) => boolean,\n onSchedule?: (attempt: number, delayMs: number, error: unknown) => void,\n signal?: AbortSignal,\n): Promise<T> {\n let attempt = 0;\n let lastError: unknown;\n while (attempt < options.maxAttempts) {\n attempt += 1;\n signal?.throwIfAborted?.();\n\n try {\n return await operation(attempt);\n } catch (error) {\n lastError = error;\n if (attempt >= options.maxAttempts || !shouldRetry(error)) {\n throw error;\n }\n const delayMs = computeDelay(attempt, options);\n onSchedule?.(attempt, delayMs, error);\n await sleep(delayMs, signal);\n }\n }\n\n throw lastError instanceof Error ? lastError : new Error(String(lastError));\n}\n","export type PromptCompressionProvider = \"heuristic\" | \"toon\" | \"thetokencompany\" | \"usagetap\";\n\n/**\n * Default request-context threshold used by the reversible compression wrappers.\n * The estimate is intentionally lightweight because it only gates whether a\n * compression request is worth its added latency.\n */\nexport const DEFAULT_PROMPT_COMPRESSION_MIN_CONTEXT_TOKENS = 1_000;\nexport type PromptCompressionMessageRole = \"system\" | \"user\" | \"tool\" | \"assistant\";\nexport type PromptCompressionMode =\n | \"deterministic\"\n | \"model_auto\"\n | \"model_force\";\nexport type PromptCompressionRoleAggressiveness =\n Partial<Record<PromptCompressionMessageRole, number>>;\nexport type PromptCompressionMessagesAggressiveness =\n number | PromptCompressionRoleAggressiveness;\n\nexport interface PromptCompressionInput {\n input?: unknown;\n text?: string;\n provider?: PromptCompressionProvider;\n tokenCompanyApiKey?: string;\n tokenCompanyEndpoint?: string;\n model?: string;\n tokenCompanyModel?: string;\n aggressiveness?: number;\n tokenCompanyAggressiveness?: number;\n tokenCompanyAppId?: string;\n usageTapCompressionApiKey?: string;\n usageTapCompressionEndpoint?: string;\n usageTapCompressionModel?: string;\n usageTapCompressionAggressiveness?: number;\n fetchImpl?: typeof fetch;\n signal?: AbortSignal;\n failOpen?: boolean;\n}\n\nexport interface PromptCompressionMessagesInput<TInput = unknown> {\n input: TInput;\n provider?: Extract<PromptCompressionProvider, \"usagetap\">;\n usageTapCompressionApiKey?: string;\n usageTapCompressionMessagesEndpoint?: string;\n aggressiveness?: PromptCompressionMessagesAggressiveness;\n usageTapCompressionAggressiveness?: PromptCompressionMessagesAggressiveness;\n /** Select deterministic-only, automatic model gating, or a forced model pass. */\n mode?: PromptCompressionMode;\n /** Maximum compression latency the service should target. */\n latencyBudgetMs?: number;\n /** Remove empty user messages before compression. */\n compactEmptyUserMessages?: boolean;\n /** Deduplicate repeated text parts within user messages. */\n compactDuplicateUserTextParts?: boolean;\n fetchImpl?: typeof fetch;\n signal?: AbortSignal;\n failOpen?: boolean;\n}\n\nexport interface PromptCompressionResult<TInput = unknown> {\n input: TInput;\n compressedInput: unknown;\n provider: PromptCompressionProvider;\n originalCharacters: number;\n compressedCharacters: number;\n savedCharacters: number;\n originalTokens: number;\n compressedTokens: number;\n savedTokens: number;\n tokenSavingsRatio: number;\n savingsRatio: number;\n techniques: string[];\n}\n\nconst DEFAULT_TTC_ENDPOINT = \"https://api.thetokencompany.com/v1/compress\";\nconst DEFAULT_TTC_MODEL = \"bear-2\";\nconst DEFAULT_TTC_AGGRESSIVENESS = 0.2;\nconst DEFAULT_USAGETAP_COMPRESSION_ENDPOINT = \"https://compress.usagetap.com/v1/compress\";\nconst DEFAULT_USAGETAP_MESSAGES_COMPRESSION_ENDPOINT = \"https://compress.usagetap.com/v1/messages/compress\";\nconst PROTECTED_TEXT_PATTERN = /<ttc_safe>[\\s\\S]*?<\\/ttc_safe>|<usagetap_safe>[\\s\\S]*?<\\/usagetap_safe>/g;\n\ntype PromptCompressionTokenCounts = {\n originalTokens: number;\n compressedTokens: number;\n savedTokens: number;\n};\n\ntype TheTokenCompanyCompressResponse = {\n output: string;\n output_tokens: number;\n input_tokens: number;\n tokens_saved: number;\n compression_ratio: number;\n};\n\nexport function protectPromptText(text: string): string {\n return `<ttc_safe>${text}</ttc_safe>`;\n}\n\nexport const protect = protectPromptText;\n\nexport async function compressPrompt<TInput = unknown>(\n options: PromptCompressionInput\n): Promise<PromptCompressionResult<TInput>> {\n const input = resolvePromptCompressionInput(options);\n\n try {\n if (options.provider === \"usagetap\") {\n return await compressWithUsageTap(options) as PromptCompressionResult<TInput>;\n }\n\n if (options.provider === \"thetokencompany\" || options.tokenCompanyApiKey) {\n return await compressWithTheTokenCompany(options) as PromptCompressionResult<TInput>;\n }\n\n if (options.provider === \"toon\") {\n return compressPromptToon(input) as PromptCompressionResult<TInput>;\n }\n\n return compressPromptHeuristic(input) as PromptCompressionResult<TInput>;\n } catch (error) {\n if (options.failOpen === false) {\n throw error;\n }\n return createPromptCompressionFallback(\n input,\n options.provider ?? (options.tokenCompanyApiKey ? \"thetokencompany\" : \"heuristic\"),\n error\n ) as PromptCompressionResult<TInput>;\n }\n}\n\nexport function compressPromptHeuristic<TInput = unknown>(\n input: TInput\n): PromptCompressionResult<TInput> {\n const original = stableStringifyInput(input);\n const techniques = new Set<string>();\n const compressedInput = compressValue(input, techniques, { allowToonString: false });\n const compressed = stableStringifyInput(compressedInput);\n const chosenInput = compressed.length <= original.length ? compressedInput : input;\n const chosen = compressed.length <= original.length ? compressed : original;\n\n if (!techniques.size) {\n techniques.add(\"no-op\");\n }\n\n return buildResult(\n input,\n chosenInput,\n \"heuristic\",\n original,\n chosen,\n Array.from(techniques)\n ) as PromptCompressionResult<TInput>;\n}\n\nexport function compressPromptToon<TInput = unknown>(\n input: TInput\n): PromptCompressionResult<TInput> {\n const original = stableStringifyInput(input);\n const compressedInput =\n typeof input === \"string\"\n ? compressText(input, new Set<string>(), { allowToonString: true })\n : encodeToon(input);\n const compressed = stableStringifyInput(compressedInput);\n\n return buildResult(input, compressedInput, \"toon\", original, compressed, [\n \"toon\",\n \"json-minify\",\n ]) as PromptCompressionResult<TInput>;\n}\n\nexport async function compressPromptMessages<TInput = unknown>(\n options: PromptCompressionMessagesInput<TInput>\n): Promise<PromptCompressionResult<TInput>> {\n try {\n return await compressMessagesWithUsageTap(options) as PromptCompressionResult<TInput>;\n } catch (error) {\n if (options.failOpen === false) {\n throw error;\n }\n return createPromptCompressionFallback(\n options.input,\n options.provider ?? \"usagetap\",\n error\n ) as PromptCompressionResult<TInput>;\n }\n}\n\nasync function compressWithTheTokenCompany(\n options: PromptCompressionInput\n): Promise<PromptCompressionResult> {\n if (!options.tokenCompanyApiKey) {\n throw new Error(\n \"tokenCompanyApiKey is required when provider is thetokencompany\"\n );\n }\n\n const fetchCandidate = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchCandidate !== \"function\") {\n throw new Error(\n \"A fetch implementation is required for The Token Company compression\"\n );\n }\n\n return compressWithCompatibleRemoteProvider({\n options,\n provider: \"thetokencompany\",\n endpoint: options.tokenCompanyEndpoint ?? DEFAULT_TTC_ENDPOINT,\n model: options.model ?? options.tokenCompanyModel ?? DEFAULT_TTC_MODEL,\n aggressiveness:\n options.aggressiveness ??\n options.tokenCompanyAggressiveness ??\n DEFAULT_TTC_AGGRESSIVENESS,\n apiKey: options.tokenCompanyApiKey,\n appId: options.tokenCompanyAppId,\n providerLabel: \"The Token Company\",\n });\n}\n\nasync function compressWithUsageTap(\n options: PromptCompressionInput\n): Promise<PromptCompressionResult> {\n const fetchCandidate = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchCandidate !== \"function\") {\n throw new Error(\n \"A fetch implementation is required for UsageTap prompt compression\"\n );\n }\n\n return compressWithCompatibleRemoteProvider({\n options,\n provider: \"usagetap\",\n endpoint:\n options.usageTapCompressionEndpoint ?? DEFAULT_USAGETAP_COMPRESSION_ENDPOINT,\n model:\n options.model ??\n options.usageTapCompressionModel ??\n options.tokenCompanyModel ??\n DEFAULT_TTC_MODEL,\n aggressiveness:\n options.aggressiveness ??\n options.usageTapCompressionAggressiveness ??\n options.tokenCompanyAggressiveness ??\n DEFAULT_TTC_AGGRESSIVENESS,\n apiKey: options.usageTapCompressionApiKey,\n appId: options.tokenCompanyAppId,\n providerLabel: \"UsageTap prompt compression\",\n });\n}\n\nasync function compressMessagesWithUsageTap(\n options: PromptCompressionMessagesInput\n): Promise<PromptCompressionResult> {\n const fetchCandidate = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchCandidate !== \"function\") {\n throw new Error(\n \"A fetch implementation is required for UsageTap prompt message compression\"\n );\n }\n\n const aggressiveness =\n options.aggressiveness ??\n options.usageTapCompressionAggressiveness ??\n DEFAULT_TTC_AGGRESSIVENESS;\n validateAggressiveness(\n aggressiveness,\n \"UsageTap prompt message compression\"\n );\n\n if (options.latencyBudgetMs !== undefined &&\n (!Number.isFinite(options.latencyBudgetMs) || options.latencyBudgetMs < 0)) {\n throw new Error(\n \"UsageTap prompt message compression latencyBudgetMs must be a non-negative number\"\n );\n }\n\n const original = stableStringifyInput(options.input);\n const headers: Record<string, string> = {\n \"content-type\": \"application/json\",\n };\n if (options.usageTapCompressionApiKey) {\n headers.authorization = `Bearer ${options.usageTapCompressionApiKey}`;\n }\n\n const response = await fetchCandidate(\n options.usageTapCompressionMessagesEndpoint ??\n DEFAULT_USAGETAP_MESSAGES_COMPRESSION_ENDPOINT,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n ...cloneInputRecord(options.input),\n compression_settings: {\n aggressiveness,\n ...(options.mode === undefined ? {} : { mode: options.mode }),\n ...(options.latencyBudgetMs === undefined\n ? {}\n : { latency_budget_ms: options.latencyBudgetMs }),\n ...(options.compactEmptyUserMessages === undefined\n ? {}\n : { compact_empty_user_messages: options.compactEmptyUserMessages }),\n ...(options.compactDuplicateUserTextParts === undefined\n ? {}\n : {\n compact_duplicate_user_text_parts:\n options.compactDuplicateUserTextParts,\n }),\n },\n }),\n signal: options.signal,\n }\n );\n\n if (!response.ok) {\n throw new Error(\n `UsageTap prompt message compression failed with HTTP ${response.status}`\n );\n }\n\n const payload = (await response.json()) as Record<string, unknown>;\n const compressedInput =\n payload.compressed_request ??\n payload.compressedInput ??\n payload.compressed ??\n (payload.messages !== undefined\n ? { ...cloneInputRecord(options.input), messages: payload.messages }\n : undefined);\n\n if (compressedInput === undefined) {\n throw new Error(\n \"UsageTap prompt message compression response did not include compressed content\"\n );\n }\n\n const compressed = stableStringifyInput(compressedInput);\n const tokenCounts = normalizeCompatibleTokenCounts(payload);\n\n return buildResult(\n options.input,\n compressedInput,\n \"usagetap\",\n original,\n compressed,\n [\"usagetap\", \"messages-endpoint\"],\n tokenCounts\n );\n}\n\nasync function compressWithCompatibleRemoteProvider(args: {\n options: PromptCompressionInput;\n provider: Extract<PromptCompressionProvider, \"thetokencompany\" | \"usagetap\">;\n endpoint: string;\n model: string;\n aggressiveness: number;\n apiKey?: string;\n appId?: string;\n providerLabel: string;\n}): Promise<PromptCompressionResult> {\n const { options, provider, endpoint, model, aggressiveness, apiKey, appId, providerLabel } = args;\n const fetchCandidate = options.fetchImpl ?? globalThis.fetch;\n const sourceInput = resolvePromptCompressionInput(options);\n const original = stableStringifyInput(sourceInput);\n const heuristic = compressPromptHeuristic(sourceInput);\n const input = typeof heuristic.compressedInput === \"string\"\n ? heuristic.compressedInput\n : stableStringifyInput(heuristic.compressedInput);\n\n if (\n !isValidAggressiveness(aggressiveness)\n ) {\n throw new Error(`${providerLabel} aggressiveness must be between 0.0 and 1.0`);\n }\n\n const headers: Record<string, string> = {\n \"content-type\": \"application/json\",\n };\n if (apiKey) {\n headers.authorization = `Bearer ${apiKey}`;\n }\n\n const response = await fetchCandidate(\n endpoint,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n model,\n input,\n ...(provider === \"usagetap\" ? { text: input } : {}),\n compression_settings: { aggressiveness },\n ...(appId ? { app_id: appId } : {}),\n }),\n signal: options.signal,\n }\n );\n\n if (!response.ok) {\n throw new Error(\n `${providerLabel} failed with HTTP ${response.status}`\n );\n }\n\n const payload = (await response.json()) as Record<string, unknown>;\n const tokenCompanyResult = normalizeTheTokenCompanyCompressResponse(payload);\n const compressedInput =\n payload.compressedInput ??\n payload.compressed ??\n tokenCompanyResult?.output ??\n payload.output ??\n payload.text;\n if (compressedInput === undefined) {\n throw new Error(`${providerLabel} response did not include compressed content`);\n }\n\n const compressed = stableStringifyInput(compressedInput);\n const tokenCounts = tokenCompanyResult\n ? {\n originalTokens: tokenCompanyResult.input_tokens,\n compressedTokens: tokenCompanyResult.output_tokens,\n savedTokens: tokenCompanyResult.tokens_saved,\n }\n : undefined;\n\n return buildResult(\n sourceInput,\n compressedInput,\n provider,\n original,\n compressed,\n [...heuristic.techniques, provider],\n tokenCounts\n );\n}\n\nfunction resolvePromptCompressionInput(options: PromptCompressionInput): unknown {\n if (options.input !== undefined) {\n return options.input;\n }\n if (options.text !== undefined) {\n return options.text;\n }\n throw new Error(\"Prompt compression requires input or text\");\n}\n\nfunction validateAggressiveness(\n value: PromptCompressionMessagesAggressiveness,\n label: string\n): void {\n if (typeof value === \"number\") {\n if (!isValidAggressiveness(value)) {\n throw new Error(`${label} aggressiveness must be between 0.0 and 1.0`);\n }\n return;\n }\n\n for (const aggressiveness of Object.values(value)) {\n if (aggressiveness !== undefined && !isValidAggressiveness(aggressiveness)) {\n throw new Error(`${label} aggressiveness must be between 0.0 and 1.0`);\n }\n }\n}\n\nfunction isValidAggressiveness(value: unknown): value is number {\n return (\n typeof value === \"number\" &&\n Number.isFinite(value) &&\n value >= 0 &&\n value <= 1\n );\n}\n\nfunction cloneInputRecord(input: unknown): Record<string, unknown> {\n return input && typeof input === \"object\" && !Array.isArray(input)\n ? { ...(input as Record<string, unknown>) }\n : { input };\n}\n\nfunction normalizeCompatibleTokenCounts(\n data: Record<string, unknown>\n): PromptCompressionTokenCounts | undefined {\n const inputTokens =\n typeof data.input_tokens === \"number\"\n ? data.input_tokens\n : data.original_input_tokens;\n const outputTokens = data.output_tokens;\n\n if (typeof inputTokens !== \"number\" || typeof outputTokens !== \"number\") {\n return undefined;\n }\n\n return {\n originalTokens: inputTokens,\n compressedTokens: outputTokens,\n savedTokens:\n typeof data.tokens_saved === \"number\"\n ? data.tokens_saved\n : inputTokens - outputTokens,\n };\n}\n\nfunction normalizeTheTokenCompanyCompressResponse(\n data: Record<string, unknown>\n): TheTokenCompanyCompressResponse | undefined {\n if (\n typeof data.output !== \"string\" ||\n typeof data.output_tokens !== \"number\"\n ) {\n return undefined;\n }\n\n const inputTokens =\n typeof data.input_tokens === \"number\"\n ? data.input_tokens\n : data.original_input_tokens;\n\n if (typeof inputTokens !== \"number\") {\n return undefined;\n }\n\n const tokensSaved =\n typeof data.tokens_saved === \"number\"\n ? data.tokens_saved\n : inputTokens - data.output_tokens;\n const compressionRatio =\n typeof data.compression_ratio === \"number\"\n ? data.compression_ratio\n : data.output_tokens === 0\n ? 0\n : inputTokens / data.output_tokens;\n\n return {\n output: data.output,\n output_tokens: data.output_tokens,\n input_tokens: inputTokens,\n tokens_saved: tokensSaved,\n compression_ratio: compressionRatio,\n };\n}\n\nexport function createPromptCompressionFallback<TInput = unknown>(\n input: TInput,\n provider: PromptCompressionProvider = \"heuristic\",\n error?: unknown\n): PromptCompressionResult<TInput> {\n const original = stableStringifyInput(input);\n const techniques = [\"fallback-original\"];\n if (error) {\n techniques.push(\"compression-error\");\n }\n\n return buildResult(input, input, provider, original, original, techniques) as\n PromptCompressionResult<TInput>;\n}\n\nfunction buildResult(\n input: unknown,\n compressedInput: unknown,\n provider: PromptCompressionProvider,\n original: string,\n compressed: string,\n techniques: string[],\n tokenCounts?: PromptCompressionTokenCounts\n): PromptCompressionResult {\n const originalCharacters = original.length;\n const compressedCharacters = compressed.length;\n const savedCharacters = Math.max(\n 0,\n originalCharacters - compressedCharacters\n );\n const originalTokens = tokenCounts?.originalTokens ?? estimatePromptTokens(original);\n const compressedTokens = tokenCounts?.compressedTokens ?? estimatePromptTokens(compressed);\n const savedTokens = Math.max(\n 0,\n tokenCounts?.savedTokens ?? originalTokens - compressedTokens\n );\n\n return {\n input,\n compressedInput,\n provider,\n originalCharacters,\n compressedCharacters,\n savedCharacters,\n originalTokens,\n compressedTokens,\n savedTokens,\n tokenSavingsRatio: originalTokens > 0 ? savedTokens / originalTokens : 0,\n savingsRatio: originalCharacters > 0 ? savedCharacters / originalCharacters : 0,\n techniques,\n };\n}\n\nexport function estimatePromptTokens(input: unknown): number {\n const text = typeof input === \"string\" ? input : stableStringifyInput(input);\n return text.match(/[\\p{L}\\p{N}]+|[^\\s]/gu)?.length ?? 0;\n}\n\nfunction compressValue(\n value: unknown,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): unknown {\n if (typeof value === \"string\") return compressText(value, techniques, options);\n if (Array.isArray(value)) {\n techniques.add(\"json-minify\");\n return value.map((item) => compressValue(item, techniques, options));\n }\n if (value && typeof value === \"object\") {\n techniques.add(\"json-minify\");\n return Object.keys(value as Record<string, unknown>)\n .reduce<Record<string, unknown>>((acc, key) => {\n const child = (value as Record<string, unknown>)[key];\n if (child !== undefined) {\n acc[key] = compressValue(child, techniques, options);\n }\n return acc;\n }, {});\n }\n return value;\n}\n\nfunction compressText(\n value: string,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): string {\n const protectedSpans: string[] = [];\n const text = value.replace(PROTECTED_TEXT_PATTERN, (match) => {\n const placeholder = `__USAGETAP_PROTECTED_${protectedSpans.length}__`;\n protectedSpans.push(match);\n techniques.add(\"protected-text\");\n return placeholder;\n });\n\n const compressed = compressTextWithoutProtection(text, techniques, options);\n\n return protectedSpans.reduce(\n (output, span, index) =>\n output.replace(`__USAGETAP_PROTECTED_${index}__`, span),\n compressed\n );\n}\n\nfunction compressTextWithoutProtection(\n value: string,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): string {\n const fencePattern = /```([\\w-]+)?\\n([\\s\\S]*?)```/g;\n const parts: string[] = [];\n let cursor = 0;\n let match: RegExpExecArray | null;\n\n while ((match = fencePattern.exec(value)) !== null) {\n const before = value.slice(cursor, match.index);\n const compressedBefore = compressPlainTextAndEmbeddedJson(\n before,\n techniques,\n options\n );\n if (compressedBefore) parts.push(compressedBefore);\n\n const lang = match[1]?.toLowerCase();\n const code = cleanCodeBlock(match[2] ?? \"\");\n const compressedCode =\n lang === \"json\" ? compressJsonText(code, techniques, options) : undefined;\n\n if (compressedCode?.format === \"toon\") {\n parts.push(`\\`\\`\\`toon\\n${compressedCode.text}\\n\\`\\`\\``);\n } else if (compressedCode?.format === \"json\") {\n parts.push(`\\`\\`\\`json\\n${compressedCode.text}\\n\\`\\`\\``);\n } else {\n if (code !== match[2]) {\n techniques.add(\"code-whitespace\");\n }\n parts.push(lang ? `\\`\\`\\`${lang}\\n${code}\\n\\`\\`\\`` : `\\`\\`\\`\\n${code}\\n\\`\\`\\``);\n }\n cursor = match.index + match[0].length;\n }\n\n const after = compressPlainTextAndEmbeddedJson(value.slice(cursor), techniques, options);\n if (after) parts.push(after);\n\n return parts.join(\"\\n\").trim();\n}\n\nfunction compressPlainText(value: string, techniques: Set<string>): string {\n const compressed = value\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line)\n .join(\"\\n\")\n .replace(/[ \\t]{2,}/g, \" \")\n .trim();\n\n if (compressed !== value.trim()) {\n techniques.add(\"text-whitespace\");\n }\n\n return compressed;\n}\n\nfunction compressPlainTextAndEmbeddedJson(\n value: string,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): string {\n const normalized = compressPlainText(value, techniques);\n return compressEmbeddedJson(normalized, techniques, options);\n}\n\nfunction cleanCodeBlock(code: string): string {\n const lines = code.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n while (lines.length && lines[0].trim() === \"\") lines.shift();\n while (lines.length && lines[lines.length - 1].trim() === \"\") lines.pop();\n\n const commonIndent = lines\n .filter((line) => line.trim())\n .reduce<number | undefined>((min, line) => {\n const indent = /^[ \\t]*/.exec(line)?.[0].length ?? 0;\n return min === undefined ? indent : Math.min(min, indent);\n }, undefined);\n\n return lines\n .map((line) => (commonIndent ? line.slice(commonIndent) : line))\n .join(\"\\n\")\n .replace(/[ \\t]+$/gm, \"\");\n}\n\nfunction stableStringifyInput(input: unknown): string {\n if (typeof input === \"string\") return input;\n return JSON.stringify(input) ?? String(input);\n}\n\ntype JsonCompressionCandidate = {\n format: \"json\" | \"toon\";\n text: string;\n};\n\nfunction compressJsonText(\n text: string,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): JsonCompressionCandidate | undefined {\n const parsed = safeParseJson(text);\n if (parsed === undefined) {\n return undefined;\n }\n\n const compactJson = JSON.stringify(parsed);\n const candidates: JsonCompressionCandidate[] = [\n { format: \"json\", text: compactJson },\n ];\n\n if (options.allowToonString || shouldUseToonForJson(parsed)) {\n candidates.push({ format: \"toon\", text: encodeToon(parsed) });\n }\n\n const originalLength = text.trim().length;\n const best = candidates.reduce((winner, candidate) =>\n candidate.text.length < winner.text.length ? candidate : winner\n );\n\n if (best.text.length >= originalLength) {\n return undefined;\n }\n\n techniques.add(best.format === \"toon\" ? \"embedded-json-toon\" : \"embedded-json-minify\");\n return best;\n}\n\nfunction compressEmbeddedJson(\n text: string,\n techniques: Set<string>,\n options: { allowToonString: boolean }\n): string {\n let result = \"\";\n let cursor = 0;\n\n while (cursor < text.length) {\n const start = findNextJsonStart(text, cursor);\n if (start < 0) {\n result += text.slice(cursor);\n break;\n }\n\n result += text.slice(cursor, start);\n const span = findBalancedJsonSpan(text, start);\n if (!span) {\n result += text[start];\n cursor = start + 1;\n continue;\n }\n\n const candidate = compressJsonText(span.text, techniques, options);\n if (candidate) {\n result += candidate.text;\n } else {\n result += span.text;\n }\n cursor = span.end;\n }\n\n return result;\n}\n\nfunction findNextJsonStart(text: string, from: number): number {\n const objectStart = text.indexOf(\"{\", from);\n const arrayStart = text.indexOf(\"[\", from);\n if (objectStart < 0) return arrayStart;\n if (arrayStart < 0) return objectStart;\n return Math.min(objectStart, arrayStart);\n}\n\nfunction findBalancedJsonSpan(\n text: string,\n start: number\n): { text: string; end: number } | undefined {\n const opener = text[start];\n const closer = opener === \"{\" ? \"}\" : opener === \"[\" ? \"]\" : undefined;\n if (!closer) return undefined;\n\n const stack = [closer];\n let inString = false;\n let escaped = false;\n\n for (let index = start + 1; index < text.length; index += 1) {\n const char = text[index];\n if (inString) {\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === \"\\\"\") {\n inString = false;\n }\n continue;\n }\n\n if (char === \"\\\"\") {\n inString = true;\n continue;\n }\n\n if (char === \"{\" || char === \"[\") {\n stack.push(char === \"{\" ? \"}\" : \"]\");\n continue;\n }\n\n if (char === stack[stack.length - 1]) {\n stack.pop();\n if (!stack.length) {\n const end = index + 1;\n return { text: text.slice(start, end), end };\n }\n }\n }\n\n return undefined;\n}\n\nfunction safeParseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n\nfunction shouldUseToonForJson(value: unknown): boolean {\n if (Array.isArray(value)) {\n return isUniformObjectArray(value) || value.some(shouldUseToonForJson);\n }\n if (isPlainObject(value)) {\n return Object.values(value).some(shouldUseToonForJson);\n }\n return false;\n}\n\nfunction encodeToon(value: unknown, indent = 0): string {\n if (isPrimitive(value)) {\n return scalarToToon(value);\n }\n\n if (Array.isArray(value)) {\n return encodeArrayToon(value, indent);\n }\n\n if (isPlainObject(value)) {\n const lines: string[] = [];\n for (const [key, child] of Object.entries(value)) {\n lines.push(...encodePropertyToon(key, child, indent));\n }\n return lines.join(\"\\n\");\n }\n\n return scalarToToon(String(value));\n}\n\nfunction encodePropertyToon(key: string, value: unknown, indent: number): string[] {\n const prefix = \" \".repeat(indent);\n const toonKey = keyToToon(key);\n\n if (isPrimitive(value)) {\n return [`${prefix}${toonKey}: ${scalarToToon(value)}`];\n }\n\n if (Array.isArray(value)) {\n if (value.every(isPrimitive)) {\n return [`${prefix}${toonKey}[${value.length}]: ${value.map(scalarToToon).join(\",\")}`];\n }\n\n if (isUniformObjectArray(value)) {\n const fields = Object.keys(value[0] as Record<string, unknown>);\n const header = `${prefix}${toonKey}[${value.length}]{${fields.map(keyToToon).join(\",\")}}:`;\n const rows = value.map((item) =>\n `${\" \".repeat(indent + 2)}${fields.map((field) =>\n scalarToToon((item as Record<string, unknown>)[field])\n ).join(\",\")}`\n );\n return [header, ...rows];\n }\n\n return [\n `${prefix}${toonKey}[${value.length}]:`,\n ...value.flatMap((item, index) => {\n if (isPrimitive(item)) {\n return [`${\" \".repeat(indent + 2)}- ${scalarToToon(item)}`];\n }\n return [\n `${\" \".repeat(indent + 2)}- item${index}:`,\n ...encodeToon(item, indent + 4).split(\"\\n\"),\n ];\n }),\n ];\n }\n\n return [`${prefix}${toonKey}:`, ...encodeToon(value, indent + 2).split(\"\\n\")];\n}\n\nfunction encodeArrayToon(value: unknown[], indent: number): string {\n if (value.every(isPrimitive)) {\n return `[${value.length}]: ${value.map(scalarToToon).join(\",\")}`;\n }\n\n if (isUniformObjectArray(value)) {\n const fields = Object.keys(value[0] as Record<string, unknown>);\n return [\n `[${value.length}]{${fields.map(keyToToon).join(\",\")}}:`,\n ...value.map((item) =>\n `${\" \".repeat(indent + 2)}${fields.map((field) =>\n scalarToToon((item as Record<string, unknown>)[field])\n ).join(\",\")}`\n ),\n ].join(\"\\n\");\n }\n\n return value\n .flatMap((item, index) => [\n `${\" \".repeat(indent)}- item${index}:`,\n ...encodeToon(item, indent + 2).split(\"\\n\"),\n ])\n .join(\"\\n\");\n}\n\nfunction isUniformObjectArray(value: unknown[]): boolean {\n if (!value.length || !value.every(isPlainObject)) {\n return false;\n }\n\n const fields = Object.keys(value[0] as Record<string, unknown>);\n if (!fields.length) {\n return false;\n }\n\n return value.every((item) => {\n const record = item as Record<string, unknown>;\n const itemFields = Object.keys(record);\n return (\n itemFields.length === fields.length &&\n fields.every((field) => itemFields.includes(field) && isPrimitive(record[field]))\n );\n });\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitive(value: unknown): boolean {\n return (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction keyToToon(key: string): string {\n return /^[A-Za-z_][A-Za-z0-9_-]*$/.test(key) ? key : JSON.stringify(key);\n}\n\nfunction scalarToToon(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n\n const text = String(value);\n if (\n text &&\n !/^(true|false|null|-?\\d+(?:\\.\\d+)?)$/i.test(text) &&\n /^[A-Za-z0-9_./@-]+(?: [A-Za-z0-9_./@-]+)*$/.test(text)\n ) {\n return text;\n }\n\n return JSON.stringify(text);\n}\n","import { UsageTapError } from \"./errors\";\nimport { createIdempotencyKey } from \"./idempotency\";\nimport { sleep } from \"./retry\";\n\nconst CANONICAL_MEDIA_TYPE = \"application/vnd.usagetap.v1+json\";\nconst DEFAULT_GATEWAY_BASE_URL = \"https://gateway.usagetap.com\";\n\ntype JsonRecord = Record<string, unknown>;\ntype HttpMethod = \"GET\" | \"POST\";\n\nexport interface ResourceRequestOptions {\n signal?: AbortSignal;\n headers?: Record<string, string>;\n idempotencyKey?: string;\n}\n\nexport interface WaitOptions extends ResourceRequestOptions {\n /** Delay between status requests. */\n pollIntervalMs?: number;\n /** Maximum total polling time. */\n timeoutMs?: number;\n}\n\nexport interface SummarizationContext {\n id: string;\n type: string;\n content: string;\n version?: string;\n contentType?: string;\n}\n\nexport type SummarizationStatus = \"QUEUED\" | \"RUNNING\" | \"COMPLETE\" | \"FAILED\";\n\nexport interface SummarizationJob {\n jobId: string;\n status: SummarizationStatus;\n phase?: string;\n profile?: string;\n version?: number;\n statusUrl?: string;\n progress?: JsonRecord;\n billing?: JsonRecord;\n result?: JsonRecord;\n error?: string;\n}\n\nexport interface SummarizationCreateParams {\n profile: string;\n context: SummarizationContext;\n wait?: boolean;\n}\n\nexport interface SummarizationBatchCreateParams {\n profile: string;\n items: SummarizationContext[];\n}\n\nexport interface SummarizationBatchJob extends Partial<SummarizationJob> {\n jobId: string;\n contextId?: string;\n}\n\nexport interface SummarizationBatch {\n batchId: string;\n status: SummarizationStatus;\n profile?: string;\n version?: number;\n submittedAt?: string;\n statusUrl?: string;\n jobs: SummarizationBatchJob[];\n}\n\nexport interface SummarizationProfile {\n profile: string;\n version: number;\n name: string;\n description?: string;\n settings: {\n model: string;\n reasoningEffort?: string;\n maxOutputTokens?: number;\n outputFormat?: string;\n outputSchema?: unknown;\n temperature?: number;\n };\n prompt: {\n system: string;\n userTemplate: string;\n contextPlaceholder: string;\n assetId?: string;\n schemaVersion?: string;\n };\n measurementUrl: string;\n}\n\nexport interface SummarizationMeasurementCreateParams {\n profile: string;\n contextId?: string;\n source: { tokens: number };\n summary: { tokens: number };\n provider?: {\n inputTokens?: number;\n outputTokens?: number;\n costUsd?: number;\n };\n}\n\nexport interface SummarizationMeasurement {\n measurementId: string;\n tokensSaved: number;\n reported: boolean;\n}\n\nexport interface GatewayChatMessage {\n role: string;\n content: unknown;\n [key: string]: unknown;\n}\n\nexport interface GatewayChatCompletionCreateParams {\n model?: string;\n models?: string[];\n messages: GatewayChatMessage[];\n stream?: false;\n [key: string]: unknown;\n}\n\nexport interface GatewayChatCompletion {\n id?: string;\n object?: string;\n created?: number;\n model?: string;\n choices: Array<{\n index?: number;\n message?: {\n role?: string;\n content?: string | null;\n [key: string]: unknown;\n };\n finish_reason?: string | null;\n [key: string]: unknown;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n [key: string]: unknown;\n };\n usagetap?: JsonRecord;\n [key: string]: unknown;\n}\n\nexport type GatewayResponseVerbosity = \"low\" | \"medium\" | \"high\";\n\nexport interface GatewayPromptCacheBreakpoint {\n mode: \"explicit\";\n}\n\nexport interface GatewayResponseInputText {\n type: \"input_text\";\n text: string;\n prompt_cache_breakpoint?: GatewayPromptCacheBreakpoint;\n [key: string]: unknown;\n}\n\nexport interface GatewayResponseInputMessage {\n type?: \"message\";\n role: \"system\" | \"developer\" | \"user\" | \"assistant\";\n content: string | Array<GatewayResponseInputText | JsonRecord>;\n [key: string]: unknown;\n}\n\nexport type GatewayResponseInputItem =\n | GatewayResponseInputMessage\n | ({ type: string } & JsonRecord);\n\nexport type GatewayResponseTextFormat =\n | { type: \"text\" }\n | { type: \"json_object\" }\n | {\n type: \"json_schema\";\n name: string;\n schema: JsonRecord;\n description?: string;\n strict?: boolean;\n };\n\nexport interface GatewayResponseTextConfig {\n format?: GatewayResponseTextFormat;\n verbosity?: GatewayResponseVerbosity;\n}\n\nexport interface GatewayResponsePromptCacheOptions {\n mode?: \"implicit\" | \"explicit\";\n ttl?: \"30m\";\n}\n\nexport interface GatewayResponseCreateParams {\n model?: string;\n models?: string[];\n input: string | GatewayResponseInputItem[];\n instructions?: string;\n tools?: Array<{ type: string; [key: string]: unknown }>;\n tool_choice?: unknown;\n reasoning?: {\n effort?: \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n [key: string]: unknown;\n };\n text?: GatewayResponseTextConfig;\n prompt_cache_key?: string;\n prompt_cache_options?: GatewayResponsePromptCacheOptions;\n max_output_tokens?: number;\n stream?: false;\n background?: false;\n /** Ask the Gateway to compress eligible request text before provider invocation. */\n compress?: boolean;\n [key: string]: unknown;\n}\n\nexport interface GatewayResponse {\n id: string;\n object?: string;\n status?: string;\n model?: string;\n output: Array<{ type: string; [key: string]: unknown }>;\n output_text?: string;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n input_tokens_details?: {\n cached_tokens?: number;\n cache_write_tokens?: number;\n [key: string]: unknown;\n };\n output_tokens_details?: {\n reasoning_tokens?: number;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n };\n usagetap?: JsonRecord;\n [key: string]: unknown;\n}\n\nexport interface GatewayModel {\n id: string;\n object?: string;\n created?: number;\n owned_by?: string;\n [key: string]: unknown;\n}\n\nexport interface GatewayModelList {\n object: string;\n data: GatewayModel[];\n}\n\nexport type GatewayBatchStatus =\n | \"queued\"\n | \"submitting\"\n | \"in_progress\"\n | \"finalizing\"\n | \"cancelling\"\n | \"completed\"\n | \"failed\"\n | \"expired\"\n | \"cancelled\";\n\nexport interface GatewayBatchRequest {\n custom_id: string;\n body: GatewayChatCompletionCreateParams;\n}\n\nexport interface GatewayBatchCreateParams {\n requests: GatewayBatchRequest[];\n}\n\nexport interface GatewayBatch {\n id: string;\n object: \"batch\";\n status: GatewayBatchStatus;\n provider?: string;\n created_at: string;\n updated_at: string;\n completed_at?: string;\n request_counts: {\n total: number;\n completed: number;\n failed: number;\n };\n calls: Array<{\n custom_id: string;\n call_id: string;\n status: number;\n error?: { code: string; message: string };\n }>;\n error?: { code: string; message: string };\n}\n\nexport interface GatewayBatchResult {\n custom_id: string;\n call_id: string;\n status: number;\n response?: GatewayChatCompletion;\n usage?: JsonRecord;\n compression?: {\n applied: boolean;\n status: \"applied\" | \"no_savings\" | \"failed_open\";\n original_input_tokens?: number;\n compressed_input_tokens?: number;\n tokens_saved?: number;\n reduction_percent?: number;\n };\n error?: { code: string; message: string };\n}\n\ninterface ResourceClientConfig {\n apiKey: string;\n apiBaseUrl: string;\n gatewayBaseUrl?: string;\n fetchImpl: typeof fetch;\n headers?: Record<string, string>;\n sdkVersion: string;\n idempotencyGenerator?: () => string;\n}\n\ninterface TransportRequest {\n method: HttpMethod;\n path: string;\n body?: unknown;\n options?: ResourceRequestOptions;\n response: \"data\" | \"json\" | \"ndjson\";\n}\n\nfunction normalizedBaseUrl(value: string): string {\n return `${value.replace(/\\/+$/, \"\")}/`;\n}\n\nfunction errorMessage(payload: unknown, status: number): string {\n if (payload && typeof payload === \"object\") {\n const record = payload as JsonRecord;\n const error = record.error;\n if (error && typeof error === \"object\") {\n const message = (error as JsonRecord).message;\n if (typeof message === \"string\" && message) return message;\n }\n const message = record.message;\n if (typeof message === \"string\" && message) return message;\n }\n return `UsageTap request failed with HTTP ${status}`;\n}\n\nfunction errorCode(status: number): UsageTapError[\"code\"] {\n if (status === 401 || status === 403) return \"USAGETAP_AUTH_ERROR\" as const;\n if (status === 429) return \"USAGETAP_RATE_LIMITED\" as const;\n if (status >= 500) return \"USAGETAP_SERVER_ERROR\" as const;\n return \"USAGETAP_BAD_REQUEST\" as const;\n}\n\nclass ResourceTransport {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly fetchImpl: typeof fetch;\n private readonly defaultHeaders: Record<string, string>;\n private readonly sdkVersion: string;\n\n constructor(\n baseUrl: string,\n config: Pick<\n ResourceClientConfig,\n \"apiKey\" | \"fetchImpl\" | \"headers\" | \"sdkVersion\"\n >,\n ) {\n this.baseUrl = normalizedBaseUrl(baseUrl);\n this.apiKey = config.apiKey;\n this.fetchImpl = config.fetchImpl;\n this.defaultHeaders = config.headers ?? {};\n this.sdkVersion = config.sdkVersion;\n }\n\n async request<T>(request: TransportRequest): Promise<T> {\n const body =\n request.body === undefined ? undefined : JSON.stringify(request.body);\n const headers: Record<string, string> = {\n ...this.defaultHeaders,\n accept:\n request.response === \"data\"\n ? CANONICAL_MEDIA_TYPE\n : request.response === \"ndjson\"\n ? \"application/x-ndjson\"\n : \"application/json\",\n authorization: `Bearer ${this.apiKey}`,\n \"x-usage-sdk\": `js/${this.sdkVersion}`,\n ...(body ? { \"content-type\": \"application/json\" } : {}),\n ...(request.options?.idempotencyKey\n ? { \"idempotency-key\": request.options.idempotencyKey }\n : {}),\n ...request.options?.headers,\n };\n\n let response: Response;\n try {\n response = await this.fetchImpl(\n new URL(request.path.replace(/^\\/+/, \"\"), this.baseUrl),\n {\n method: request.method,\n headers,\n body,\n signal: request.options?.signal,\n },\n );\n } catch (error) {\n throw new UsageTapError(\n \"USAGETAP_NETWORK_ERROR\",\n \"Failed to reach UsageTap\",\n { retryable: true, cause: error },\n );\n }\n\n const requestId =\n response.headers.get(\"x-request-id\") ??\n response.headers.get(\"x-usage-correlation-id\") ??\n undefined;\n const text = await response.text();\n let payload: unknown;\n if (text && request.response !== \"ndjson\") {\n try {\n payload = JSON.parse(text) as unknown;\n } catch (error) {\n throw new UsageTapError(\n \"USAGETAP_INVALID_RESPONSE\",\n \"UsageTap returned invalid JSON\",\n { status: response.status, correlationId: requestId, cause: error },\n );\n }\n }\n\n if (!response.ok) {\n throw new UsageTapError(\n errorCode(response.status),\n errorMessage(payload, response.status),\n {\n status: response.status,\n retryable: response.status === 429 || response.status >= 500,\n correlationId: requestId,\n details:\n payload && typeof payload === \"object\"\n ? (payload as JsonRecord)\n : undefined,\n },\n );\n }\n\n if (request.response === \"ndjson\") {\n if (!text.trim()) return [] as T;\n try {\n return text\n .trim()\n .split(/\\r?\\n/)\n .filter(Boolean)\n .map((line) => JSON.parse(line) as unknown) as T;\n } catch (error) {\n throw new UsageTapError(\n \"USAGETAP_INVALID_RESPONSE\",\n \"UsageTap returned invalid NDJSON\",\n { status: response.status, correlationId: requestId, cause: error },\n );\n }\n }\n\n if (request.response === \"data\") {\n if (\n !payload ||\n typeof payload !== \"object\" ||\n !(\"data\" in payload)\n ) {\n throw new UsageTapError(\n \"USAGETAP_INVALID_RESPONSE\",\n \"UsageTap response missing data\",\n { status: response.status, correlationId: requestId },\n );\n }\n return (payload as { data: T }).data;\n }\n\n if (payload === undefined) {\n throw new UsageTapError(\n \"USAGETAP_INVALID_RESPONSE\",\n \"UsageTap response was empty\",\n { status: response.status, correlationId: requestId },\n );\n }\n return payload as T;\n }\n}\n\nfunction resourceId(\n value: string | { jobId?: string; batchId?: string; id?: string },\n keys: Array<\"jobId\" | \"batchId\" | \"id\">,\n label: string,\n): string {\n const id =\n typeof value === \"string\"\n ? value\n : keys\n .map((key) => value[key])\n .find((candidate): candidate is string => Boolean(candidate?.trim()));\n if (!id?.trim()) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n `${label} requires a non-empty ID`,\n );\n }\n return id.trim();\n}\n\nfunction terminalSummary(status: SummarizationStatus): boolean {\n return status === \"COMPLETE\" || status === \"FAILED\";\n}\n\nfunction terminalGatewayBatch(status: GatewayBatchStatus): boolean {\n return [\"completed\", \"failed\", \"expired\", \"cancelled\"].includes(status);\n}\n\nfunction validateWaitOptions(options: WaitOptions): {\n pollIntervalMs: number;\n timeoutMs: number;\n} {\n const pollIntervalMs = options.pollIntervalMs ?? 1_500;\n const timeoutMs = options.timeoutMs ?? 3 * 60_000;\n if (!Number.isFinite(pollIntervalMs) || pollIntervalMs < 0) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"pollIntervalMs must be a non-negative number\",\n );\n }\n if (!Number.isFinite(timeoutMs) || timeoutMs < 1) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"timeoutMs must be a positive number\",\n );\n }\n return { pollIntervalMs, timeoutMs };\n}\n\nexport class SummarizationResource {\n public readonly summaries: {\n create: (\n params: SummarizationCreateParams,\n options?: ResourceRequestOptions,\n ) => Promise<SummarizationJob>;\n retrieve: (\n jobId: string,\n options?: ResourceRequestOptions,\n ) => Promise<SummarizationJob>;\n wait: (\n job: string | SummarizationJob,\n options?: WaitOptions,\n ) => Promise<SummarizationJob>;\n };\n\n public readonly batches: {\n create: (\n params: SummarizationBatchCreateParams,\n options?: ResourceRequestOptions,\n ) => Promise<SummarizationBatch>;\n retrieve: (\n batchId: string,\n options?: ResourceRequestOptions,\n ) => Promise<SummarizationBatch>;\n wait: (\n batch: string | SummarizationBatch,\n options?: WaitOptions,\n ) => Promise<SummarizationBatch>;\n };\n\n public readonly profiles: {\n retrieve: (\n profile: string,\n options?: ResourceRequestOptions,\n ) => Promise<SummarizationProfile>;\n };\n\n public readonly measurements: {\n create: (\n params: SummarizationMeasurementCreateParams,\n options?: ResourceRequestOptions,\n ) => Promise<SummarizationMeasurement>;\n };\n\n private readonly transport: ResourceTransport;\n\n constructor(config: ResourceClientConfig) {\n this.transport = new ResourceTransport(config.apiBaseUrl, config);\n this.summaries = {\n create: (params, options) =>\n this.transport.request({\n method: \"POST\",\n path: \"/v1/compression/summaries\",\n body: params,\n options,\n response: \"data\",\n }),\n retrieve: (jobId, options) =>\n this.transport.request({\n method: \"GET\",\n path: `/v1/compression/jobs/${encodeURIComponent(\n resourceId(jobId, [\"jobId\"], \"summaries.retrieve\"),\n )}`,\n options,\n response: \"data\",\n }),\n wait: (job, options) => this.waitForSummary(job, options),\n };\n this.batches = {\n create: (params, options) =>\n this.transport.request({\n method: \"POST\",\n path: \"/v1/compression/batches\",\n body: params,\n options,\n response: \"data\",\n }),\n retrieve: (batchId, options) =>\n this.transport.request({\n method: \"GET\",\n path: `/v1/compression/batches/${encodeURIComponent(\n resourceId(batchId, [\"batchId\"], \"summarization.batches.retrieve\"),\n )}`,\n options,\n response: \"data\",\n }),\n wait: (batch, options) => this.waitForBatch(batch, options),\n };\n this.profiles = {\n retrieve: (profile, options) =>\n this.transport.request({\n method: \"GET\",\n path: `/v1/compression/profiles/${encodeURIComponent(\n resourceId(profile, [], \"summarization.profiles.retrieve\"),\n )}`,\n options,\n response: \"data\",\n }),\n };\n this.measurements = {\n create: (params, options) =>\n this.transport.request({\n method: \"POST\",\n path: \"/v1/compression/measurements\",\n body: params,\n options,\n response: \"data\",\n }),\n };\n }\n\n private async waitForSummary(\n value: string | SummarizationJob,\n options: WaitOptions = {},\n ): Promise<SummarizationJob> {\n const { pollIntervalMs, timeoutMs } = validateWaitOptions(options);\n const deadline = Date.now() + timeoutMs;\n let job =\n typeof value === \"string\"\n ? await this.summaries.retrieve(value, options)\n : value;\n while (!terminalSummary(job.status)) {\n if (Date.now() >= deadline) {\n throw new UsageTapError(\n \"USAGETAP_RETRY_EXHAUSTED\",\n `Summarization job ${job.jobId} did not finish before timeout`,\n { retryable: true },\n );\n }\n await sleep(pollIntervalMs, options.signal);\n job = await this.summaries.retrieve(job.jobId, options);\n }\n return job;\n }\n\n private async waitForBatch(\n value: string | SummarizationBatch,\n options: WaitOptions = {},\n ): Promise<SummarizationBatch> {\n const { pollIntervalMs, timeoutMs } = validateWaitOptions(options);\n const deadline = Date.now() + timeoutMs;\n let batch =\n typeof value === \"string\"\n ? await this.batches.retrieve(value, options)\n : value;\n while (!terminalSummary(batch.status)) {\n if (Date.now() >= deadline) {\n throw new UsageTapError(\n \"USAGETAP_RETRY_EXHAUSTED\",\n `Summarization batch ${batch.batchId} did not finish before timeout`,\n { retryable: true },\n );\n }\n await sleep(pollIntervalMs, options.signal);\n batch = await this.batches.retrieve(batch.batchId, options);\n }\n return batch;\n }\n}\n\nexport class GatewayResource {\n public readonly chat: {\n completions: {\n create: <T extends GatewayChatCompletion = GatewayChatCompletion>(\n params: GatewayChatCompletionCreateParams,\n options?: ResourceRequestOptions,\n ) => Promise<T>;\n };\n };\n\n /** Buffered OpenAI Responses-compatible requests. */\n public readonly responses: {\n create: <T extends GatewayResponse = GatewayResponse>(\n params: GatewayResponseCreateParams,\n options?: ResourceRequestOptions,\n ) => Promise<T>;\n };\n\n public readonly models: {\n list: (options?: ResourceRequestOptions) => Promise<GatewayModelList>;\n };\n\n public readonly batches: {\n create: (\n params: GatewayBatchCreateParams,\n options?: ResourceRequestOptions,\n ) => Promise<GatewayBatch>;\n retrieve: (\n batchId: string,\n options?: ResourceRequestOptions,\n ) => Promise<GatewayBatch>;\n wait: (\n batch: string | GatewayBatch,\n options?: WaitOptions,\n ) => Promise<GatewayBatch>;\n cancel: (\n batchId: string,\n options?: ResourceRequestOptions,\n ) => Promise<GatewayBatch>;\n results: (\n batchId: string,\n options?: ResourceRequestOptions,\n ) => Promise<GatewayBatchResult[]>;\n };\n\n private readonly transport: ResourceTransport;\n private readonly idempotencyGenerator: () => string;\n\n constructor(config: ResourceClientConfig) {\n this.transport = new ResourceTransport(\n config.gatewayBaseUrl ?? DEFAULT_GATEWAY_BASE_URL,\n config,\n );\n this.idempotencyGenerator =\n config.idempotencyGenerator ?? createIdempotencyKey;\n this.chat = {\n completions: {\n create: <T extends GatewayChatCompletion = GatewayChatCompletion>(\n params: GatewayChatCompletionCreateParams,\n options?: ResourceRequestOptions,\n ) =>\n this.transport.request<T>({\n method: \"POST\",\n path: \"/v1/chat/completions\",\n body: params,\n options,\n response: \"json\",\n }),\n },\n };\n this.responses = {\n create: <T extends GatewayResponse = GatewayResponse>(\n params: GatewayResponseCreateParams,\n options?: ResourceRequestOptions,\n ) =>\n this.transport.request<T>({\n method: \"POST\",\n path: \"/v1/responses\",\n body: params,\n options,\n response: \"json\",\n }),\n };\n this.models = {\n list: (options) =>\n this.transport.request({\n method: \"GET\",\n path: \"/v1/models\",\n options,\n response: \"json\",\n }),\n };\n this.batches = {\n create: (params, options = {}) =>\n this.transport.request({\n method: \"POST\",\n path: \"/v1/batches\",\n body: params,\n options: {\n ...options,\n idempotencyKey:\n options.idempotencyKey ?? this.idempotencyGenerator(),\n },\n response: \"json\",\n }),\n retrieve: (batchId, options) =>\n this.transport.request({\n method: \"GET\",\n path: `/v1/batches/${encodeURIComponent(\n resourceId(batchId, [\"id\"], \"gateway.batches.retrieve\"),\n )}`,\n options,\n response: \"json\",\n }),\n wait: (batch, options) => this.waitForBatch(batch, options),\n cancel: (batchId, options) =>\n this.transport.request({\n method: \"POST\",\n path: `/v1/batches/${encodeURIComponent(\n resourceId(batchId, [\"id\"], \"gateway.batches.cancel\"),\n )}/cancel`,\n options,\n response: \"json\",\n }),\n results: (batchId, options) =>\n this.transport.request({\n method: \"GET\",\n path: `/v1/batches/${encodeURIComponent(\n resourceId(batchId, [\"id\"], \"gateway.batches.results\"),\n )}/results`,\n options,\n response: \"ndjson\",\n }),\n };\n }\n\n private async waitForBatch(\n value: string | GatewayBatch,\n options: WaitOptions = {},\n ): Promise<GatewayBatch> {\n const { pollIntervalMs, timeoutMs } = validateWaitOptions(options);\n const deadline = Date.now() + timeoutMs;\n let batch =\n typeof value === \"string\"\n ? await this.batches.retrieve(value, options)\n : value;\n while (!terminalGatewayBatch(batch.status)) {\n if (Date.now() >= deadline) {\n throw new UsageTapError(\n \"USAGETAP_RETRY_EXHAUSTED\",\n `Gateway batch ${batch.id} did not finish before timeout`,\n { retryable: true },\n );\n }\n await sleep(pollIntervalMs, options.signal);\n batch = await this.batches.retrieve(batch.id, options);\n }\n return batch;\n }\n}\n","import type {\n BeginCallOptions,\n BeginCallRequest,\n BeginCallResponseBody,\n CreateCustomerOptions,\n CreateCustomerRequest,\n CreateCustomerResponseBody,\n CheckUsageOptions,\n CheckUsageRequest,\n CheckUsageResponseBody,\n ChangePlanOptions,\n ChangePlanRequest,\n ChangePlanResponseBody,\n IncrementCustomMeterOptions,\n IncrementCustomMeterRequest,\n IncrementCustomMeterResponseBody,\n EndCallOptions,\n EndCallRequest,\n EndCallResponseBody,\n UsageTapClientOptions,\n UsageTapLogEntry,\n UsageTapSuccessResponse,\n UsageMetricEvent,\n WithUsageContext,\n WithUsageOptions,\n PromptCompressionRequest,\n PromptCompressionOptions,\n PromptCompressionMessagesOptions,\n PromptCompressionResponseBody,\n PromptCompressionStandaloneOptions,\n PromptCompressionTelemetry,\n RecordPromptCompressionRequest,\n SamplingOptions,\n SamplingDecisionInput,\n CaptureSampleRequest,\n CaptureSampleOptions,\n CaptureSampleResponseBody,\n SamplingSettings,\n GetSamplingSettingsOptions,\n SamplingDecisionRequest,\n SamplingDecisionResponseBody,\n SamplingDecisionOptions,\n CircuitBreakerDecision,\n CircuitBreakerOptions,\n} from \"./types\";\nimport {\n UsageTapError,\n type UsageTapErrorCode,\n isUsageTapError,\n} from \"./errors\";\nimport { createIdempotencyKey } from \"./idempotency\";\nimport {\n runWithRetry,\n resolveRetryOptions,\n type ResolvedRetryOptions,\n} from \"./retry\";\nimport type { RetryOptions } from \"./types\";\nimport {\n compressPrompt,\n compressPromptMessages,\n createPromptCompressionFallback,\n estimatePromptTokens,\n type PromptCompressionResult,\n} from \"./prompt-compression\";\nimport {\n GatewayResource,\n SummarizationResource,\n} from \"./resources\";\n\nconst CALL_BEGIN_PATH = \"call_begin\";\nconst CALL_END_PATH = \"call_end\";\nconst COMPRESS_PROMPT_PATH = \"compress_prompt\";\nconst SAMPLES_PATH = \"samples\";\nconst SAMPLING_SETTINGS_PATH = \"sampling/settings\";\nconst SAMPLING_DECIDE_PATH = \"sampling/decide\";\nconst CHECK_USAGE_PATH = \"customers/{customerId}/usage\";\nconst CREATE_CUSTOMER_PATH = \"customers\";\nconst CHANGE_PLAN_PATH = \"customers/{customerId}/change_plan\";\nconst INCREMENT_CUSTOM_METER_PATH = \"custom_meter\";\nconst AUTH_HEADER = \"authorization\";\nconst API_KEY_HEADER = \"x-api-key\";\nconst CORRELATION_HEADER = \"x-usage-correlation-id\";\nconst IDEMPOTENCY_HEADER = \"idempotency-key\";\nconst SDK_HEADER = \"x-usage-sdk\";\nconst USER_AGENT = \"UsageTapClient\";\nconst CANONICAL_MEDIA_TYPE = \"application/vnd.usagetap.v1+json\";\nconst DEFAULT_BASE_URL = \"https://api.usagetap.com\";\nconst DEFAULT_RUN_INACTIVITY_MS = 60 * 60 * 1000;\n\ndeclare const __SDK_VERSION__: string | undefined;\nconst SDK_VERSION =\n typeof __SDK_VERSION__ === \"string\" ? __SDK_VERSION__ : \"0.1.0\";\nconst HAS_WINDOW =\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as Record<string, unknown>).window !== \"undefined\";\n\ntype HeadersDict = Record<string, string>;\n\ntype InternalRequestOptions = {\n signal?: AbortSignal;\n headers?: HeadersDict;\n retries?: RetryOptions;\n correlationId?: string;\n idempotencyKey?: string;\n};\n\ntype EnvelopeShape = {\n result?: {\n status?: string;\n code?: string;\n message?: string;\n timestamp?: string;\n };\n data?: unknown;\n error?: {\n code?: string;\n message?: string;\n details?: Record<string, unknown>;\n };\n correlationId?: string;\n};\n\ntype CircuitBreakerRunState = {\n calls: number;\n reservationKeys: Set<string>;\n lastSeenAtMs: number;\n};\n\nexport type UsageTapCompressOptions = Omit<\n PromptCompressionStandaloneOptions,\n \"provider\"\n>;\n\nexport type UsageTapCompressResult = Omit<\n PromptCompressionResult<string>,\n \"compressedInput\"\n> & {\n /** The compressed text, ready to pass to an LLM. */\n output: string;\n /** Alias retained for consistency with the lower-level compression APIs. */\n compressedInput: string;\n};\n\nexport type MeterRequest = string | BeginCallRequest;\n\nexport class UsageTapClient {\n /** OpenAI-compatible chat, model, and native batch operations. */\n public readonly gateway: GatewayResource;\n /** Published-profile context summarization operations. */\n public readonly summarization: SummarizationResource;\n private readonly apiKey: string;\n private readonly baseUrl: URL;\n private readonly fetchImpl: typeof fetch;\n private readonly defaultFeature?: string;\n private readonly defaultTags?: string[];\n private readonly defaultHeaders: HeadersDict;\n private readonly retryDefaults: ResolvedRetryOptions;\n private readonly idempotencyGenerator: () => string;\n private readonly logFn?: (entry: UsageTapLogEntry) => void;\n private readonly metricFn?: (event: UsageMetricEvent) => void;\n private readonly authHeader: typeof AUTH_HEADER | typeof API_KEY_HEADER;\n private readonly autoIdempotency: boolean;\n private readonly tokenCompanyApiKey?: string;\n private readonly tokenCompanyEndpoint?: string;\n private readonly model?: string;\n private readonly tokenCompanyModel?: string;\n private readonly aggressiveness?: number;\n private readonly tokenCompanyAggressiveness?: number;\n private readonly tokenCompanyAppId?: string;\n private readonly usageTapCompressionApiKey?: string;\n private readonly usageTapCompressionEndpoint?: string;\n private readonly usageTapCompressionMessagesEndpoint?: string;\n private readonly usageTapCompressionModel?: string;\n private readonly usageTapCompressionAggressiveness?: number;\n private readonly sampling?: SamplingOptions | false;\n private readonly samplingSettingsCacheMs: number;\n private readonly circuitBreaker?: Required<CircuitBreakerOptions>;\n private readonly circuitBreakerRuns = new Map<string, CircuitBreakerRunState>();\n private samplingSettingsCache?: {\n settings: SamplingSettings;\n expiresAtMs: number;\n };\n\n constructor(options: UsageTapClientOptions = {}) {\n const apiKey = options.apiKey?.trim() || readEnvironmentVariable(\"USAGETAP_API_KEY\");\n const baseUrl =\n options.baseUrl?.trim() ||\n readEnvironmentVariable(\"USAGETAP_BASE_URL\") ||\n DEFAULT_BASE_URL;\n\n if (!apiKey) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"UsageTapClient requires an apiKey or the USAGETAP_API_KEY environment variable\"\n );\n }\n\n if (HAS_WINDOW && !options.allowBrowser) {\n throw new UsageTapError(\n \"USAGETAP_BROWSER_RUNTIME\",\n \"UsageTapClient is designed for server-side environments. Pass allowBrowser=true only for testing.\"\n );\n }\n\n const fetchCandidate = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchCandidate !== \"function\") {\n throw new UsageTapError(\n \"USAGETAP_NETWORK_ERROR\",\n \"A global fetch implementation was not found. Pass fetchImpl in UsageTapClientOptions.\"\n );\n }\n\n const normalizedBaseUrl = normalizeBaseUrl(baseUrl);\n this.baseUrl = new URL(normalizedBaseUrl);\n this.apiKey = apiKey;\n this.fetchImpl = wrapFetchImplementation(fetchCandidate, !options.fetchImpl);\n const resourceConfig = {\n apiKey,\n apiBaseUrl: normalizedBaseUrl,\n gatewayBaseUrl:\n options.gatewayBaseUrl?.trim() ||\n readEnvironmentVariable(\"USAGETAP_GATEWAY_URL\"),\n fetchImpl: this.fetchImpl,\n headers: options.headers,\n sdkVersion: SDK_VERSION,\n idempotencyGenerator: options.idempotencyGenerator,\n };\n this.gateway = new GatewayResource(resourceConfig);\n this.summarization = new SummarizationResource(resourceConfig);\n this.defaultFeature = options.defaultFeature;\n this.defaultTags = options.defaultTags?.length\n ? dedupeStrings(options.defaultTags)\n : undefined;\n this.defaultHeaders = options.headers\n ? normalizeHeaderDictionary(options.headers)\n : {};\n this.retryDefaults = resolveRetryOptions(options.retries);\n this.idempotencyGenerator =\n options.idempotencyGenerator ?? createIdempotencyKey;\n this.logFn = options.onLog;\n this.metricFn = options.onUsageMetric;\n this.authHeader = options.useApiKeyHeader ? API_KEY_HEADER : AUTH_HEADER;\n this.autoIdempotency = options.autoIdempotency ?? true;\n this.tokenCompanyApiKey = options.tokenCompanyApiKey;\n this.tokenCompanyEndpoint = options.tokenCompanyEndpoint;\n this.model = options.model;\n this.tokenCompanyModel = options.tokenCompanyModel;\n this.aggressiveness = options.aggressiveness;\n this.tokenCompanyAggressiveness = options.tokenCompanyAggressiveness;\n this.tokenCompanyAppId = options.tokenCompanyAppId;\n this.usageTapCompressionApiKey =\n options.usageTapCompressionApiKey ?? apiKey;\n this.usageTapCompressionEndpoint = options.usageTapCompressionEndpoint;\n this.usageTapCompressionMessagesEndpoint =\n options.usageTapCompressionMessagesEndpoint;\n this.usageTapCompressionModel = options.usageTapCompressionModel;\n this.usageTapCompressionAggressiveness =\n options.usageTapCompressionAggressiveness;\n this.sampling = options.sampling;\n this.samplingSettingsCacheMs = Number.isFinite(options.samplingSettingsCacheMs)\n ? Math.max(0, Number(options.samplingSettingsCacheMs))\n : 5 * 60 * 1000;\n if (options.circuitBreaker) {\n const maxCallsPerRun = options.circuitBreaker.maxCallsPerRun;\n if (!Number.isInteger(maxCallsPerRun) || maxCallsPerRun < 1) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"circuitBreaker.maxCallsPerRun must be a positive integer\"\n );\n }\n const runInactivityMs =\n options.circuitBreaker.runInactivityMs ?? DEFAULT_RUN_INACTIVITY_MS;\n if (!Number.isFinite(runInactivityMs) || runInactivityMs < 1) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"circuitBreaker.runInactivityMs must be a positive number\"\n );\n }\n this.circuitBreaker = {\n maxCallsPerRun,\n runInactivityMs,\n };\n }\n }\n\n shouldSample(\n request: SamplingDecisionInput,\n policy: SamplingOptions | undefined = this.sampling || undefined\n ): boolean {\n if (!policy) return false;\n const rate = Math.min(1, Math.max(0, Number(policy.rate) || 0));\n if (rate <= 0) return false;\n\n const customerId = request.customerId?.trim();\n if (customerId && policy.customers?.exclude?.includes(customerId)) return false;\n\n const feature = request.feature?.trim();\n if (feature && policy.features?.exclude?.includes(feature)) return false;\n const included = policy.features?.include?.filter(Boolean) ?? [];\n if (included.length > 0 && (!feature || !included.includes(feature))) return false;\n\n const minimum = Math.max(0, Math.round(policy.minInputTokens ?? 0));\n if (minimum > 0 && estimatePromptTokens(request.input) < minimum) return false;\n return (policy.random ?? Math.random)() < rate;\n }\n\n async getSamplingSettings(\n options: GetSamplingSettingsOptions = {}\n ): Promise<UsageTapSuccessResponse<SamplingSettings>> {\n const now = Date.now();\n if (\n !options.forceRefresh &&\n this.samplingSettingsCache &&\n this.samplingSettingsCache.expiresAtMs > now\n ) {\n return {\n result: { status: \"ACCEPTED\", code: \"SAMPLING_SETTINGS_CACHED\" },\n data: this.samplingSettingsCache.settings,\n correlationId: options.correlationId ?? \"local-cache\",\n };\n }\n const response = await this.requestGet<SamplingSettings>(\n SAMPLING_SETTINGS_PATH,\n {\n signal: options.signal,\n headers: options.headers,\n retries: options.retries,\n correlationId: options.correlationId,\n }\n );\n const serverCacheMs = Math.max(0, Number(response.data.cacheSeconds) || 0) * 1000;\n const cacheMs = Math.min(this.samplingSettingsCacheMs, serverCacheMs);\n this.samplingSettingsCache = {\n settings: response.data,\n expiresAtMs: now + cacheMs,\n };\n return response;\n }\n\n async shouldSampleAsync(\n request: SamplingDecisionInput,\n policy?: SamplingOptions\n ): Promise<boolean> {\n if (policy) return this.shouldSample(request, policy);\n if (this.sampling === false) return false;\n if (this.sampling) return this.shouldSample(request, this.sampling);\n try {\n const settings = await this.getSamplingSettings();\n return this.shouldSample(request, settings.data);\n } catch {\n // Sampling is observability: configuration failures must not affect calls\n // and must not cause raw input to leave the application unexpectedly.\n return false;\n }\n }\n\n async decideSample(\n request: SamplingDecisionRequest,\n options: SamplingDecisionOptions = {}\n ): Promise<UsageTapSuccessResponse<SamplingDecisionResponseBody>> {\n const hasTokens = Number.isFinite(request.inputTokens) && Number(request.inputTokens) >= 0;\n const hasCharacters = Number.isFinite(request.inputCharacters) && Number(request.inputCharacters) >= 0;\n if (!hasTokens && !hasCharacters) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"decideSample requires inputTokens or inputCharacters\"\n );\n }\n return this.request<SamplingDecisionResponseBody>(\n SAMPLING_DECIDE_PATH,\n request,\n options\n );\n }\n\n async captureSample(\n request: CaptureSampleRequest,\n options: CaptureSampleOptions = {}\n ): Promise<UsageTapSuccessResponse<CaptureSampleResponseBody>> {\n if (!request || request.input === undefined) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"captureSample requires input\"\n );\n }\n if (!request.provider?.trim()) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"captureSample requires provider\"\n );\n }\n const sampleId = request.sampleId?.trim() || this.idempotencyGenerator();\n return this.request<CaptureSampleResponseBody>(\n SAMPLES_PATH,\n { ...request, sampleId },\n { ...options, idempotencyKey: sampleId }\n );\n }\n\n async beginCall(\n request: BeginCallRequest,\n options: BeginCallOptions = {}\n ): Promise<UsageTapSuccessResponse<BeginCallResponseBody>> {\n const idempotencyKey =\n request.idempotencyKey ??\n request.idempotency ??\n (this.autoIdempotency ? this.idempotencyGenerator() : undefined);\n this.reserveRunCall(request, idempotencyKey);\n const apiRequest = { ...request };\n delete apiRequest.runId;\n const payload: BeginCallRequest = {\n ...apiRequest,\n feature: request.feature ?? this.defaultFeature,\n tags: this.mergeTags(request.tags),\n } satisfies BeginCallRequest;\n if (idempotencyKey) {\n payload.idempotencyKey = idempotencyKey;\n // Also set deprecated field for backward compatibility\n payload.idempotency = idempotencyKey;\n }\n\n const response = await this.request<BeginCallResponseBody>(\n CALL_BEGIN_PATH,\n payload,\n {\n ...options,\n idempotencyKey,\n }\n );\n\n return response;\n }\n\n /**\n * Inspect a configured run circuit breaker without consuming another call.\n */\n canRunContinue(request: Pick<BeginCallRequest, \"customerId\" | \"runId\">): CircuitBreakerDecision {\n const identity = this.resolveRunIdentity(request);\n if (!identity || !this.circuitBreaker) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"canRunContinue requires circuitBreaker configuration and a non-empty runId\"\n );\n }\n\n this.expireInactiveRuns();\n const calls = this.circuitBreakerRuns.get(identity.key)?.calls ?? 0;\n return this.createCircuitBreakerDecision(identity.customerId, identity.runId, calls);\n }\n\n /**\n * Release local state after a workflow finishes. Returns true when state existed.\n */\n resetRun(request: Pick<BeginCallRequest, \"customerId\" | \"runId\">): boolean {\n const identity = this.resolveRunIdentity(request);\n return identity ? this.circuitBreakerRuns.delete(identity.key) : false;\n }\n\n async promptCompress(\n request: PromptCompressionRequest,\n options: PromptCompressionOptions = {}\n ): Promise<PromptCompressionResult & { callId: string }> {\n if (!request?.callId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"promptCompress requires callId\"\n );\n }\n\n const requestInput = request.input ?? request.text;\n if (requestInput === undefined) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"promptCompress requires input or text\"\n );\n }\n\n const result = await this.compressPromptInput(requestInput, {\n provider: request.provider,\n model: request.model,\n tokenCompanyModel: request.tokenCompanyModel,\n aggressiveness: request.aggressiveness,\n tokenCompanyAggressiveness: request.tokenCompanyAggressiveness,\n tokenCompanyAppId: request.tokenCompanyAppId,\n usageTapCompressionModel: request.usageTapCompressionModel,\n usageTapCompressionAggressiveness:\n request.usageTapCompressionAggressiveness,\n signal: options.signal,\n });\n\n try {\n await this.recordPromptCompression(\n {\n callId: request.callId,\n promptCompression: this.toPromptCompressionTelemetry(result),\n },\n options\n );\n\n return { ...result, callId: request.callId };\n } catch (error) {\n return {\n ...createPromptCompressionFallback(\n requestInput,\n request.provider ?? result.provider,\n error\n ),\n callId: request.callId,\n };\n }\n }\n\n async compressPromptInput<TInput = unknown>(\n input: TInput,\n options: PromptCompressionStandaloneOptions = {}\n ): Promise<PromptCompressionResult<TInput>> {\n return compressPrompt<TInput>({\n input,\n provider: options.provider,\n tokenCompanyApiKey: this.tokenCompanyApiKey,\n tokenCompanyEndpoint: this.tokenCompanyEndpoint,\n model: options.model ?? this.model,\n tokenCompanyModel: options.tokenCompanyModel ?? this.tokenCompanyModel,\n aggressiveness:\n options.aggressiveness ??\n this.aggressiveness,\n tokenCompanyAggressiveness:\n options.tokenCompanyAggressiveness ?? this.tokenCompanyAggressiveness,\n tokenCompanyAppId: options.tokenCompanyAppId ?? this.tokenCompanyAppId,\n usageTapCompressionApiKey: this.usageTapCompressionApiKey,\n usageTapCompressionEndpoint: this.usageTapCompressionEndpoint,\n usageTapCompressionModel:\n options.usageTapCompressionModel ?? this.usageTapCompressionModel,\n usageTapCompressionAggressiveness:\n options.usageTapCompressionAggressiveness ??\n this.usageTapCompressionAggressiveness,\n fetchImpl: this.fetchImpl,\n signal: options.signal,\n failOpen: options.failOpen,\n });\n }\n\n /**\n * Compress text with UsageTap's hosted compression service.\n *\n * This is the short, standalone path. It does not create a metered call and\n * fails open to the original text unless failOpen is explicitly disabled.\n */\n async compress(\n text: string,\n options: UsageTapCompressOptions = {}\n ): Promise<UsageTapCompressResult> {\n if (typeof text !== \"string\") {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"compress requires text\"\n );\n }\n\n const result = await this.compressPromptInput<string>(text, {\n ...options,\n provider: \"usagetap\",\n });\n const output =\n typeof result.compressedInput === \"string\"\n ? result.compressedInput\n : text;\n\n return {\n ...result,\n compressedInput: output,\n output,\n };\n }\n\n async compressPromptMessages<TInput = unknown>(\n input: TInput,\n options: PromptCompressionMessagesOptions = {}\n ): Promise<PromptCompressionResult<TInput>> {\n return compressPromptMessages<TInput>({\n input,\n provider: options.provider ?? \"usagetap\",\n usageTapCompressionApiKey: this.usageTapCompressionApiKey,\n usageTapCompressionMessagesEndpoint:\n this.usageTapCompressionMessagesEndpoint,\n aggressiveness:\n options.aggressiveness ??\n this.aggressiveness,\n usageTapCompressionAggressiveness:\n options.usageTapCompressionAggressiveness ??\n this.usageTapCompressionAggressiveness,\n mode: options.mode,\n latencyBudgetMs: options.latencyBudgetMs,\n compactEmptyUserMessages: options.compactEmptyUserMessages,\n compactDuplicateUserTextParts: options.compactDuplicateUserTextParts,\n fetchImpl: this.fetchImpl,\n signal: options.signal,\n failOpen: options.failOpen,\n });\n }\n\n async recordPromptCompression(\n request: RecordPromptCompressionRequest,\n options: PromptCompressionOptions = {}\n ): Promise<UsageTapSuccessResponse<PromptCompressionResponseBody>> {\n if (!request?.callId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"recordPromptCompression requires callId\"\n );\n }\n\n return this.request<PromptCompressionResponseBody>(\n COMPRESS_PROMPT_PATH,\n {\n callId: request.callId,\n promptCompression: request.promptCompression,\n },\n options\n );\n }\n\n async endCall(\n request: EndCallRequest,\n options: EndCallOptions = {}\n ): Promise<UsageTapSuccessResponse<EndCallResponseBody>> {\n if (!request?.callId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"endCall requires callId\"\n );\n }\n\n // Extract metric-only fields before sending to API\n const { customerId, feature, tags, ...apiPayload } = request;\n const response = await this.request<EndCallResponseBody>(\n CALL_END_PATH,\n apiPayload,\n options\n );\n\n // Emit usage metric for observability export\n this.emitUsageMetric({\n type: \"call_end\",\n timestamp: new Date().toISOString(),\n customerId: customerId ?? \"unknown\",\n callId: request.callId,\n feature: feature ?? this.defaultFeature,\n tags: tags ?? this.defaultTags,\n providerUsed: request.providerUsed,\n modelUsed: request.modelUsed,\n reasoningEffort: request.reasoningEffort,\n reasoningEffortSource: request.reasoningEffortSource,\n reasoningMode: request.reasoningMode,\n reasoningBudgetTokens: request.reasoningBudgetTokens,\n metrics: {\n inputTokens: request.inputTokens,\n responseTokens: request.responseTokens,\n cachedInputTokens: request.cachedInputTokens,\n cacheWriteInputTokens: request.cacheWriteInputTokens,\n cacheWrite5mInputTokens: request.cacheWrite5mInputTokens,\n cacheWrite1hInputTokens: request.cacheWrite1hInputTokens,\n reasoningTokens: request.reasoningTokens,\n searches: request.searches,\n audioSeconds: request.audioSeconds,\n imageInputCount: request.imageInputCount,\n imageInputTokens: request.imageInputTokens,\n imageOutputCount: request.imageOutputCount,\n imageOutputTokens: request.imageOutputTokens,\n audioInputTokens: request.audioInputTokens,\n cachedAudioInputTokens: request.cachedAudioInputTokens,\n audioOutputTokens: request.audioOutputTokens,\n costUsd: response.data.costUSD,\n },\n correlationId: response.correlationId,\n });\n\n return response;\n }\n\n async checkUsage(\n request: CheckUsageRequest,\n options: CheckUsageOptions = {}\n ): Promise<UsageTapSuccessResponse<CheckUsageResponseBody>> {\n if (!request?.customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"checkUsage requires customerId\"\n );\n }\n\n const path = CHECK_USAGE_PATH.replace(\n \"{customerId}\",\n encodeURIComponent(request.customerId)\n );\n const response = await this.requestGet<CheckUsageResponseBody>(\n path,\n options\n );\n\n return response;\n }\n\n async createCustomer(\n request: CreateCustomerRequest,\n options: CreateCustomerOptions = {}\n ): Promise<UsageTapSuccessResponse<CreateCustomerResponseBody>> {\n if (!request?.customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"createCustomer requires customerId\"\n );\n }\n\n const idempotencyKey =\n options.idempotencyKey ??\n (this.autoIdempotency ? this.idempotencyGenerator() : undefined);\n\n const response = await this.request<CreateCustomerResponseBody>(\n CREATE_CUSTOMER_PATH,\n { ...request },\n {\n ...options,\n idempotencyKey,\n }\n );\n\n return response;\n }\n\n async changePlan(\n request: ChangePlanRequest,\n options: ChangePlanOptions = {}\n ): Promise<UsageTapSuccessResponse<ChangePlanResponseBody>> {\n if (!request?.customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"changePlan requires customerId\"\n );\n }\n\n if (!request?.planId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"changePlan requires planId\"\n );\n }\n\n const path = CHANGE_PLAN_PATH.replace(\n \"{customerId}\",\n encodeURIComponent(request.customerId)\n );\n\n const idempotencyKey =\n options.idempotencyKey ??\n (this.autoIdempotency ? this.idempotencyGenerator() : undefined);\n\n const payload: Record<string, unknown> = {\n planId: request.planId,\n strategy: request.strategy ?? \"IMMEDIATE_RESET\",\n };\n\n const response = await this.request<ChangePlanResponseBody>(\n path,\n payload,\n {\n ...options,\n idempotencyKey,\n }\n );\n\n return response;\n }\n\n async incrementCustomMeter(\n request: IncrementCustomMeterRequest,\n options: IncrementCustomMeterOptions = {}\n ): Promise<UsageTapSuccessResponse<IncrementCustomMeterResponseBody>> {\n if (!request?.customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"incrementCustomMeter requires customerId\"\n );\n }\n\n if (!request?.meterSlot) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"incrementCustomMeter requires meterSlot\"\n );\n }\n\n if (![\"CUSTOM1\", \"CUSTOM2\", \"AGENTIC_API\"].includes(request.meterSlot)) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"meterSlot must be CUSTOM1, CUSTOM2 or AGENTIC_API\"\n );\n }\n\n if (\n typeof request.amount !== \"number\" ||\n !Number.isFinite(request.amount) ||\n request.amount <= 0\n ) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"incrementCustomMeter requires a positive numeric amount\"\n );\n }\n\n const idempotencyKey =\n options.idempotencyKey ??\n (this.autoIdempotency ? this.idempotencyGenerator() : undefined);\n\n const payload: Record<string, unknown> = {\n customerId: request.customerId,\n meterSlot: request.meterSlot,\n amount: request.amount,\n };\n\n if (request.customerUserId) {\n payload.customerUserId = request.customerUserId;\n }\n if (request.customerUserName) {\n payload.customerUserName = request.customerUserName;\n }\n if (request.customerUserEmail) {\n payload.customerUserEmail = request.customerUserEmail;\n }\n\n if (request.feature) {\n payload.feature = request.feature;\n }\n\n if (request.tags && request.tags.length > 0) {\n payload.tags = request.tags;\n }\n\n if (request.metadata) {\n payload.metadata = request.metadata;\n }\n\n const response = await this.request<IncrementCustomMeterResponseBody>(\n INCREMENT_CUSTOM_METER_PATH,\n payload,\n {\n ...options,\n idempotencyKey,\n }\n );\n\n // Emit usage metric for observability export\n this.emitUsageMetric({\n type: \"custom_meter\",\n timestamp: new Date().toISOString(),\n customerId: request.customerId,\n feature: request.feature ?? this.defaultFeature,\n tags: request.tags ?? this.defaultTags,\n metrics: {\n customMeterSlot: request.meterSlot,\n customMeterAmount: request.amount,\n },\n correlationId: response.correlationId,\n });\n\n return response;\n }\n\n async withUsage<T>(\n beginRequest: BeginCallRequest,\n handler: (context: WithUsageContext) => Promise<T>,\n options: WithUsageOptions = {}\n ): Promise<T> {\n const idempotencyKey =\n beginRequest.idempotencyKey ??\n beginRequest.idempotency ??\n (this.autoIdempotency ? this.idempotencyGenerator() : undefined);\n const beginPayload = idempotencyKey\n ? { ...beginRequest, idempotencyKey, idempotency: idempotencyKey }\n : { ...beginRequest };\n const beginResponse = await this.beginCall(beginPayload, options);\n\n let usage: Partial<Omit<EndCallRequest, \"callId\" | \"error\">> = {};\n const pricingMode =\n beginResponse.data.pricingMode ??\n beginRequest.pricingMode ??\n (beginRequest.batch === true\n ? \"batch\"\n : beginRequest.batch === false\n ? \"standard\"\n : undefined);\n if (pricingMode) {\n usage.pricingMode = pricingMode;\n usage.batch = pricingMode === \"batch\";\n }\n const initialStripeCustomerId =\n typeof beginResponse.data.stripeCustomerId === \"string\"\n ? beginResponse.data.stripeCustomerId\n : typeof beginRequest.stripeCustomerId === \"string\"\n ? beginRequest.stripeCustomerId\n : undefined;\n if (initialStripeCustomerId) {\n usage = { ...usage, stripeCustomerId: initialStripeCustomerId };\n }\n let errorPayload: EndCallRequest[\"error\"] | undefined;\n let handlerResult: T | undefined;\n let handlerError: unknown;\n let endCallError: unknown;\n let finalizationDeferred = false;\n let finalizationPromise: Promise<void> | undefined;\n\n const finalize = (): Promise<void> => {\n if (!finalizationPromise) {\n finalizationPromise = this.endCall(\n {\n callId: beginResponse.data.callId,\n // Pass context for metric tracking\n customerId: beginRequest.customerId,\n feature: beginRequest.feature ?? this.defaultFeature,\n tags: beginRequest.tags ?? this.defaultTags,\n ...(usage as Partial<Omit<EndCallRequest, \"callId\" | \"error\">>),\n error: errorPayload,\n },\n {\n ...options,\n correlationId: beginResponse.correlationId,\n }\n ).then(() => undefined);\n }\n return finalizationPromise as Promise<void>;\n };\n\n const context: WithUsageContext = {\n begin: beginResponse,\n setUsage: (u) => {\n usage = { ...usage, ...u };\n },\n setError: (err) => {\n errorPayload = err;\n },\n deferFinalization: () => {\n finalizationDeferred = true;\n return finalize;\n },\n };\n\n try {\n handlerResult = await handler(context);\n } catch (error) {\n handlerError = error;\n if (!errorPayload) {\n errorPayload = {\n code: options.defaultErrorCode ?? \"VENDOR_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n };\n }\n } finally {\n if (handlerError || !finalizationDeferred) {\n try {\n await finalize();\n } catch (error) {\n endCallError = error;\n }\n }\n }\n\n if (handlerError) {\n throw handlerError;\n }\n\n if (endCallError) {\n throw wrapEndCallError(endCallError, beginResponse.correlationId);\n }\n\n return handlerResult as T;\n }\n\n /**\n * Meter one operation. Pass only a customer ID for the common path, or the\n * existing begin-call request object when feature, tags, or entitlements are needed.\n */\n async meter<T>(\n request: MeterRequest,\n handler: (context: WithUsageContext) => Promise<T>,\n options: WithUsageOptions = {}\n ): Promise<T> {\n const beginRequest =\n typeof request === \"string\" ? { customerId: request } : request;\n\n return this.withUsage(beginRequest, handler, options);\n }\n\n private toPromptCompressionTelemetry(\n result: PromptCompressionResult\n ): PromptCompressionTelemetry {\n return {\n provider: result.provider,\n originalTokens: result.originalTokens,\n compressedTokens: result.compressedTokens,\n savedTokens: result.savedTokens,\n tokenSavingsRatio: result.tokenSavingsRatio,\n techniques: result.techniques,\n };\n }\n\n private reserveRunCall(\n request: BeginCallRequest,\n idempotencyKey: string | undefined\n ): void {\n const identity = this.resolveRunIdentity(request);\n if (!identity || !this.circuitBreaker) return;\n\n this.expireInactiveRuns();\n const now = Date.now();\n const state = this.circuitBreakerRuns.get(identity.key) ?? {\n calls: 0,\n reservationKeys: new Set<string>(),\n lastSeenAtMs: now,\n };\n const reservationKey = idempotencyKey ?? this.idempotencyGenerator();\n\n state.lastSeenAtMs = now;\n if (state.reservationKeys.has(reservationKey)) {\n this.circuitBreakerRuns.set(identity.key, state);\n return;\n }\n\n const decision = this.createCircuitBreakerDecision(\n identity.customerId,\n identity.runId,\n state.calls\n );\n if (!decision.allowed) {\n throw new UsageTapError(\n \"USAGETAP_CIRCUIT_OPEN\",\n `Run ${identity.runId} reached its ${decision.limit}-call circuit-breaker limit`,\n {\n details: {\n reason: decision.reason,\n customerId: identity.customerId,\n runId: identity.runId,\n calls: decision.calls,\n limit: decision.limit,\n remaining: decision.remaining,\n },\n }\n );\n }\n\n state.calls += 1;\n state.reservationKeys.add(reservationKey);\n this.circuitBreakerRuns.set(identity.key, state);\n }\n\n private resolveRunIdentity(\n request: Pick<BeginCallRequest, \"customerId\" | \"runId\">\n ): { key: string; customerId: string; runId: string } | undefined {\n const customerId = request.customerId?.trim();\n const runId = request.runId?.trim();\n if (!customerId || !runId) return undefined;\n return {\n key: `${customerId}\\u0000${runId}`,\n customerId,\n runId,\n };\n }\n\n private createCircuitBreakerDecision(\n customerId: string,\n runId: string,\n calls: number\n ): CircuitBreakerDecision {\n const limit = this.circuitBreaker?.maxCallsPerRun ?? 0;\n const allowed = calls < limit;\n return {\n allowed,\n ...(allowed ? {} : { reason: \"max_calls_per_run\" as const }),\n customerId,\n runId,\n calls,\n limit,\n remaining: Math.max(0, limit - calls),\n };\n }\n\n private expireInactiveRuns(): void {\n if (!this.circuitBreaker || this.circuitBreakerRuns.size === 0) return;\n const expiredBefore = Date.now() - this.circuitBreaker.runInactivityMs;\n for (const [key, state] of this.circuitBreakerRuns) {\n if (state.lastSeenAtMs < expiredBefore) {\n this.circuitBreakerRuns.delete(key);\n }\n }\n }\n\n private async request<T>(\n path: string,\n payload: unknown,\n options: InternalRequestOptions\n ): Promise<UsageTapSuccessResponse<T>> {\n const url = new URL(path, this.baseUrl).toString();\n const body = payload !== undefined ? JSON.stringify(payload) : undefined;\n const headers = this.composeHeaders(body, options);\n const resolvedRetry = resolveRetryOptions(\n this.retryDefaults,\n options.retries\n );\n\n const startTime = (): number =>\n typeof performance !== \"undefined\" ? performance.now() : Date.now();\n\n return runWithRetry(\n async (attempt) => {\n const startedAt = startTime();\n this.log({\n event: \"request:start\",\n path,\n attempt,\n idempotencyKey: options.idempotencyKey,\n correlationId: options.correlationId,\n });\n\n const response = await this.performFetch<T>({\n url,\n method: \"POST\",\n headers,\n body,\n signal: options.signal,\n });\n\n this.log({\n event: \"request:success\",\n path,\n attempt,\n idempotencyKey: options.idempotencyKey,\n correlationId: response.correlationId,\n elapsedMs: startTime() - startedAt,\n });\n\n return response;\n },\n resolvedRetry,\n (error) => this.shouldRetry(error),\n (attempt, delayMs, error) => {\n this.log({\n event: \"retry:scheduled\",\n path,\n attempt,\n idempotencyKey: options.idempotencyKey,\n correlationId: options.correlationId,\n error,\n elapsedMs: delayMs,\n });\n },\n options.signal\n ).catch((error) => {\n this.log({\n event: \"retry:exhausted\",\n path,\n attempt: resolvedRetry.maxAttempts,\n idempotencyKey: options.idempotencyKey,\n correlationId: options.correlationId,\n error,\n });\n throw error;\n });\n }\n\n private async requestGet<T>(\n path: string,\n options: InternalRequestOptions\n ): Promise<UsageTapSuccessResponse<T>> {\n const url = new URL(path, this.baseUrl).toString();\n const headers = this.composeHeaders(undefined, options);\n const resolvedRetry = resolveRetryOptions(\n this.retryDefaults,\n options.retries\n );\n\n const startTime = (): number =>\n typeof performance !== \"undefined\" ? performance.now() : Date.now();\n\n return runWithRetry(\n async (attempt) => {\n const startedAt = startTime();\n this.log({\n event: \"request:start\",\n path,\n attempt,\n correlationId: options.correlationId,\n });\n\n const response = await this.performFetch<T>({\n url,\n method: \"GET\",\n headers,\n signal: options.signal,\n });\n\n this.log({\n event: \"request:success\",\n path,\n attempt,\n correlationId: response.correlationId,\n elapsedMs: startTime() - startedAt,\n });\n\n return response;\n },\n resolvedRetry,\n (error) => this.shouldRetry(error),\n (attempt, delayMs, error) => {\n this.log({\n event: \"retry:scheduled\",\n path,\n attempt,\n correlationId: options.correlationId,\n error,\n elapsedMs: delayMs,\n });\n },\n options.signal\n ).catch((error) => {\n this.log({\n event: \"retry:exhausted\",\n path,\n attempt: resolvedRetry.maxAttempts,\n correlationId: options.correlationId,\n error,\n });\n throw error;\n });\n }\n\n private async performFetch<T>(init: {\n url: string;\n method: string;\n headers: HeadersDict;\n body?: string;\n signal?: AbortSignal;\n }): Promise<UsageTapSuccessResponse<T>> {\n let response: Response;\n try {\n response = await this.fetchImpl(init.url, {\n method: init.method,\n headers: init.headers,\n body: init.body,\n signal: init.signal,\n });\n } catch (error) {\n throw new UsageTapError(\n \"USAGETAP_NETWORK_ERROR\",\n \"Failed to reach UsageTap\",\n {\n retryable: true,\n cause: error,\n }\n );\n }\n\n const correlationId = response.headers.get(CORRELATION_HEADER) ?? undefined;\n const text = await response.text();\n let payload: EnvelopeShape | undefined;\n\n if (text) {\n try {\n payload = JSON.parse(text) as EnvelopeShape;\n } catch (error) {\n throw new UsageTapError(\n \"USAGETAP_INVALID_RESPONSE\",\n \"UsageTap returned invalid JSON\",\n {\n retryable: false,\n correlationId,\n cause: error,\n }\n );\n }\n }\n\n if (!response.ok) {\n throw this.toHttpError(response.status, payload, correlationId);\n }\n\n if (!payload?.result || payload.result.status !== \"ACCEPTED\") {\n throw this.toApiError(payload, correlationId);\n }\n\n const resolvedCorrelation = payload.correlationId ?? correlationId;\n if (\n payload.data === undefined ||\n payload.data === null ||\n !resolvedCorrelation\n ) {\n throw new UsageTapError(\n \"USAGETAP_INVALID_RESPONSE\",\n \"UsageTap response missing data or correlationId\",\n {\n correlationId: resolvedCorrelation ?? correlationId,\n }\n );\n }\n\n return {\n result: {\n status: payload.result.status as \"ACCEPTED\",\n code: payload.result.code,\n message: payload.result.message,\n timestamp: payload.result.timestamp,\n },\n data: payload.data as T,\n correlationId: resolvedCorrelation,\n } satisfies UsageTapSuccessResponse<T>;\n }\n\n private composeHeaders(\n body: string | undefined,\n options: InternalRequestOptions\n ): HeadersDict {\n const headers: HeadersDict = {\n ...this.defaultHeaders,\n [SDK_HEADER]: `js/${SDK_VERSION}`,\n \"content-type\": \"application/json\",\n accept: CANONICAL_MEDIA_TYPE,\n };\n\n if (!HAS_WINDOW) {\n // Browsers forbid setting user-agent; only attach it server-side.\n headers[\"user-agent\"] = `${USER_AGENT}/${SDK_VERSION}`;\n }\n\n if (this.authHeader === API_KEY_HEADER) {\n headers[API_KEY_HEADER] = this.apiKey;\n } else {\n headers[AUTH_HEADER] = `Bearer ${this.apiKey}`;\n }\n\n if (options.idempotencyKey) {\n headers[IDEMPOTENCY_HEADER] = options.idempotencyKey;\n }\n\n if (options.correlationId) {\n headers[CORRELATION_HEADER] = options.correlationId;\n }\n\n if (!body) {\n delete headers[\"content-type\"];\n }\n\n if (options.headers) {\n Object.assign(headers, normalizeHeaderDictionary(options.headers));\n }\n\n return headers;\n }\n\n private log(entry: UsageTapLogEntry): void {\n this.logFn?.(entry);\n }\n\n private emitUsageMetric(event: UsageMetricEvent): void {\n try {\n this.metricFn?.(event);\n } catch {\n // Non-blocking: metric export errors should not fail the main request\n }\n }\n\n private mergeTags(tags?: string[]): string[] | undefined {\n if (!tags && !this.defaultTags) {\n return undefined;\n }\n\n const combined = [...(this.defaultTags ?? []), ...(tags ?? [])].filter(\n Boolean\n );\n return combined.length ? dedupeStrings(combined) : undefined;\n }\n\n private shouldRetry(error: unknown): boolean {\n if (isUsageTapError(error)) {\n return Boolean(error.retryable);\n }\n\n if (error instanceof Error && error.name === \"AbortError\") {\n return false;\n }\n\n return false;\n }\n\n private toHttpError(\n status: number,\n payload: EnvelopeShape | undefined,\n correlationId?: string\n ): UsageTapError {\n const code = mapStatusToErrorCode(status);\n const apiCode =\n payload?.error?.code ?? payload?.result?.code ?? \"UNKNOWN\";\n const retryable =\n isRetryableStatus(status) || isRetryableApiCode(apiCode);\n const message =\n payload?.error?.message ??\n payload?.result?.message ??\n `UsageTap responded with HTTP ${status}`;\n\n return new UsageTapError(code, message, {\n status,\n retryable,\n correlationId: payload?.correlationId ?? correlationId,\n details: sanitizeDetails(payload),\n });\n }\n\n private toApiError(\n payload: EnvelopeShape | undefined,\n correlationId?: string\n ): UsageTapError {\n const normalizedCode =\n payload?.error?.code ?? payload?.result?.code ?? \"UNKNOWN\";\n const retryable = isRetryableApiCode(normalizedCode);\n const message =\n payload?.error?.message ??\n payload?.result?.message ??\n \"UsageTap reported an error\";\n\n return new UsageTapError(mapApiCodeToError(normalizedCode), message, {\n retryable,\n correlationId: payload?.correlationId ?? correlationId,\n details: sanitizeDetails(payload),\n });\n }\n}\n\nfunction mapStatusToErrorCode(status: number): UsageTapErrorCode {\n if (status === 401 || status === 403) return \"USAGETAP_AUTH_ERROR\";\n if (status === 400 || status === 404 || status === 409)\n return \"USAGETAP_BAD_REQUEST\";\n if (status === 429) return \"USAGETAP_RATE_LIMITED\";\n if (status >= 500) return \"USAGETAP_SERVER_ERROR\";\n return \"USAGETAP_INVALID_RESPONSE\";\n}\n\nfunction isRetryableStatus(status: number): boolean {\n return (\n status === 408 ||\n status === 425 ||\n status === 429 ||\n status === 500 ||\n status === 502 ||\n status === 503 ||\n status === 504\n );\n}\n\nfunction isRetryableApiCode(code: string): boolean {\n const normalized = code.toUpperCase();\n return (\n normalized === \"PAYG_CONFLICT\" ||\n normalized.includes(\"TRANSIENT\") ||\n normalized.includes(\"RETRY\") ||\n normalized.includes(\"TIMEOUT\") ||\n normalized.includes(\"THROTTLE\") ||\n normalized.includes(\"RATE_LIMIT\")\n );\n}\n\nfunction mapApiCodeToError(code: string): UsageTapErrorCode {\n const normalized = code.toUpperCase();\n if (normalized.includes(\"AUTH\") || normalized.includes(\"TOKEN\")) {\n return \"USAGETAP_AUTH_ERROR\";\n }\n if (normalized.includes(\"RATE\") || normalized.includes(\"THROTTLE\")) {\n return \"USAGETAP_RATE_LIMITED\";\n }\n if (normalized.includes(\"SERVER\") || normalized.includes(\"TRANSIENT\")) {\n return \"USAGETAP_SERVER_ERROR\";\n }\n if (\n normalized.includes(\"IDEMPOTENCY\") ||\n normalized.includes(\"VALIDATION\") ||\n normalized.includes(\"REQUEST\")\n ) {\n return \"USAGETAP_BAD_REQUEST\";\n }\n return \"USAGETAP_INVALID_RESPONSE\";\n}\n\nfunction sanitizeDetails(\n payload: EnvelopeShape | undefined\n): Record<string, unknown> | undefined {\n if (!payload) return undefined;\n const details: Record<string, unknown> = {};\n if (payload.result) details.result = payload.result;\n if (payload.error) details.error = payload.error;\n return Object.keys(details).length ? details : undefined;\n}\n\nfunction readEnvironmentVariable(name: string): string | undefined {\n const runtime = globalThis as typeof globalThis & {\n process?: { env?: Record<string, string | undefined> };\n };\n const value = runtime.process?.env?.[name]?.trim();\n return value || undefined;\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n const trimmed = baseUrl.trim();\n if (!trimmed) return trimmed;\n return trimmed.endsWith(\"/\") ? trimmed : `${trimmed}/`;\n}\n\nfunction normalizeHeaderDictionary(dict: Record<string, string>): HeadersDict {\n return Object.keys(dict).reduce<HeadersDict>((acc, key) => {\n acc[key.toLowerCase()] = dict[key];\n return acc;\n }, {});\n}\n\nfunction dedupeStrings(values: string[]): string[] {\n return Array.from(\n new Set(values.map((value) => value.trim()).filter(Boolean))\n );\n}\n\nfunction wrapFetchImplementation(\n fetchCandidate: typeof fetch,\n preferGlobalContext: boolean\n): typeof fetch {\n const target = preferGlobalContext ? globalThis : undefined;\n return ((...args: Parameters<typeof fetch>) =>\n target\n ? Reflect.apply(fetchCandidate, target, args)\n : fetchCandidate(...args)) as typeof fetch;\n}\n\nfunction wrapEndCallError(\n error: unknown,\n correlationId?: string\n): UsageTapError {\n if (isUsageTapError(error)) {\n return new UsageTapError(\"USAGETAP_END_CALL_ERROR\", error.message, {\n correlationId: error.correlationId ?? correlationId,\n details: error.details,\n cause: error,\n });\n }\n\n return new UsageTapError(\n \"USAGETAP_END_CALL_ERROR\",\n \"Failed to finalize UsageTap call\",\n {\n correlationId,\n cause: error,\n }\n );\n}\n","import type OpenAI from \"openai\";\nimport { UsageTapClient } from \"../client\";\nimport { UsageTapError } from \"../errors\";\nimport {\n DEFAULT_PROMPT_COMPRESSION_MIN_CONTEXT_TOKENS,\n estimatePromptTokens,\n} from \"../prompt-compression\";\nimport type {\n PromptCompressionMode,\n PromptCompressionProvider,\n PromptCompressionResult,\n} from \"../prompt-compression\";\nimport type {\n BeginCallRequest,\n BeginCallResponseBody,\n EndCallRequest,\n PromptCompressionOptions,\n PromptCompressionTelemetry,\n UsageTapSuccessResponse,\n VendorHints,\n WithUsageContext,\n WithUsageOptions,\n SamplingOptions,\n} from \"../types\";\n\nexport interface OpenAIAdapterInit {\n client: OpenAI;\n usageTap: UsageTapClient;\n /** Vendor label recorded at call_end. Defaults to `openai`. */\n provider?: string;\n}\n\nexport interface OpenAIRequestContext {\n hints?: VendorHints;\n begin: UsageTapSuccessResponse<BeginCallResponseBody>;\n}\n\nexport interface OpenAIInvokeParams<TResponse> {\n begin: BeginCallRequest;\n call: (client: OpenAI, ctx: OpenAIRequestContext) => Promise<TResponse>;\n extractUsage?: (response: TResponse) => Partial<Omit<EndCallRequest, \"callId\" | \"error\">> | void;\n withUsageOptions?: WithUsageOptions;\n}\n\nexport interface OpenAIInvokeResult<TResponse> {\n data: TResponse;\n begin: UsageTapSuccessResponse<BeginCallResponseBody>;\n}\n\nexport interface OpenAIStreamCallResult<TStream> {\n stream: AsyncIterable<TStream>;\n onComplete?: () => Promise<Partial<Omit<EndCallRequest, \"callId\" | \"error\">> | void> | Partial<Omit<EndCallRequest, \"callId\" | \"error\">> | void;\n}\n\nexport interface OpenAIStreamParams<TStream> {\n begin: BeginCallRequest;\n call: (client: OpenAI, ctx: OpenAIRequestContext) => Promise<OpenAIStreamCallResult<TStream>>;\n withUsageOptions?: WithUsageOptions;\n}\n\nexport interface OpenAIStreamResult<TStream> {\n stream: AsyncIterable<TStream> & { __usageTapFinalize?: () => Promise<void> };\n begin: UsageTapSuccessResponse<BeginCallResponseBody>;\n finalize: () => Promise<void>;\n}\n\ntype StreamTermination = \"complete\" | \"cancel\" | \"error\" | \"manual\";\n\nexport interface OpenAIAdapter {\n invoke<TResponse>(params: OpenAIInvokeParams<TResponse>): Promise<OpenAIInvokeResult<TResponse>>;\n invokeStream<TStream>(params: OpenAIStreamParams<TStream>): Promise<OpenAIStreamResult<TStream>>;\n}\n\ntype ReplaceProperty<T, K extends keyof T, V> = Omit<T, K> & Record<K, V>;\n\nexport type WrapOpenAIContext = BeginCallRequest;\n\nexport type OpenAIPromptCompressionRole = \"system\" | \"user\" | \"tool\" | \"assistant\";\n\nexport interface OpenAIPromptCompressionRoleOptions {\n enabled?: boolean;\n provider?: PromptCompressionProvider;\n minTokens?: number;\n aggressiveness?: number;\n /** @deprecated Use aggressiveness instead. */\n tokenCompanyAggressiveness?: number;\n /** @deprecated Use aggressiveness instead. */\n usageTapCompressionAggressiveness?: number;\n}\n\nexport type OpenAIPromptCompressionRoleSetting =\n | boolean\n | OpenAIPromptCompressionRoleOptions;\n\nexport interface OpenAIPromptCompressionOptions {\n enabled?: boolean;\n provider?: PromptCompressionProvider;\n roles?: Partial<Record<OpenAIPromptCompressionRole, OpenAIPromptCompressionRoleSetting>>;\n /**\n * Skip compression when the combined request context is estimated below this\n * many tokens. `withCompression` defaults to 1,000; set to 0 to always try.\n */\n minContextTokens?: number;\n /** Minimum estimated tokens for each individual text segment. */\n minTokens?: number;\n failOpen?: boolean;\n /** Select deterministic-only, automatic model gating, or a forced model pass. */\n mode?: PromptCompressionMode;\n /** Maximum compression latency the service should target. */\n latencyBudgetMs?: number;\n /** Remove empty user messages before compression. */\n compactEmptyUserMessages?: boolean;\n /** Deduplicate repeated text parts within user messages. */\n compactDuplicateUserTextParts?: boolean;\n tokenCompanyModel?: string;\n aggressiveness?: number | Partial<Record<OpenAIPromptCompressionRole, number>>;\n /** @deprecated Use aggressiveness instead. */\n tokenCompanyAggressiveness?: number | Partial<Record<OpenAIPromptCompressionRole, number>>;\n tokenCompanyAppId?: string;\n usageTapCompressionModel?: string;\n /** @deprecated Use aggressiveness instead. */\n usageTapCompressionAggressiveness?: number | Partial<Record<OpenAIPromptCompressionRole, number>>;\n}\n\ninterface PromptCompressionTelemetryWithDiagnostics\n extends PromptCompressionTelemetry {\n originalCharacters: number;\n compressedCharacters: number;\n savedCharacters: number;\n savingsRatio: number;\n}\n\nexport interface OpenAIPromptCompressionTurnStats\n extends PromptCompressionTelemetryWithDiagnostics {\n callId: string;\n operation: \"chat.completions.create\" | \"chat.completions.stream\" | \"responses.create\";\n messagesCompressed: number;\n timestamp: number;\n}\n\nexport interface OpenAIPromptCompressionFailure {\n callId: string;\n operation: OpenAIPromptCompressionTurnStats[\"operation\"];\n stage: \"telemetry\";\n message: string;\n timestamp: number;\n}\n\nexport class OpenAIPromptCompressionStats {\n history: OpenAIPromptCompressionTurnStats[] = [];\n failures: OpenAIPromptCompressionFailure[] = [];\n\n _record(turn: OpenAIPromptCompressionTurnStats): void {\n this.history.push(turn);\n }\n\n _recordFailure(failure: OpenAIPromptCompressionFailure): void {\n this.failures.push(failure);\n }\n\n get totalOriginalTokens(): number {\n return this.history.reduce((sum, turn) => sum + (turn.originalTokens ?? 0), 0);\n }\n\n get totalCompressedTokens(): number {\n return this.history.reduce((sum, turn) => sum + (turn.compressedTokens ?? 0), 0);\n }\n\n get totalTokensSaved(): number {\n return this.history.reduce((sum, turn) => sum + (turn.savedTokens ?? 0), 0);\n }\n\n get totalOriginalCharacters(): number {\n return this.history.reduce((sum, turn) => sum + turn.originalCharacters, 0);\n }\n\n get totalCompressedCharacters(): number {\n return this.history.reduce((sum, turn) => sum + turn.compressedCharacters, 0);\n }\n\n get totalCharactersSaved(): number {\n return this.history.reduce((sum, turn) => sum + turn.savedCharacters, 0);\n }\n\n get calls(): number {\n return this.history.length;\n }\n\n get telemetryFailures(): number {\n return this.failures.length;\n }\n\n get failOpenEvents(): number {\n return this.history.filter((turn) =>\n turn.techniques.includes(\"compression-error\") ||\n turn.techniques.includes(\"fallback-original\"),\n ).length;\n }\n\n get tokenSavingsRatio(): number {\n return this.totalOriginalTokens > 0\n ? this.totalTokensSaved / this.totalOriginalTokens\n : 0;\n }\n\n get savingsRatio(): number {\n return this.totalOriginalCharacters > 0\n ? this.totalCharactersSaved / this.totalOriginalCharacters\n : 0;\n }\n}\n\nexport interface WrapOpenAIOptions {\n /** Vendor label recorded at call_end. Defaults to `openai`. */\n provider?: string;\n defaultContext?: Partial<WrapOpenAIContext>;\n applyVendorHints?: boolean;\n promptCompression?: boolean | OpenAIPromptCompressionOptions;\n /** Retain eligible metered calls with an exact link to their UsageTap call. */\n sampling?: MeteredOpenAISamplingOptions | true;\n}\n\nexport interface OpenAICompressionOptions extends OpenAIPromptCompressionOptions {\n /** UsageTap API key. Defaults to USAGETAP_API_KEY. */\n apiKey?: string;\n /** Reuse an existing client when custom transport or endpoints are configured. */\n usageTapClient?: UsageTapClient;\n /** Also retain eligible calls after the provider responds. */\n sampling?: SamplingOptions | true;\n}\n\nexport type OpenAISamplingOptions = Partial<SamplingOptions> & {\n /** UsageTap API key. Defaults to USAGETAP_API_KEY. */\n apiKey?: string;\n /** Reuse an existing UsageTap client. */\n usageTapClient?: UsageTapClient;\n /** Provider label stored with each sample. */\n provider?: string;\n};\n\nexport type MeteredOpenAISamplingOptions = Partial<SamplingOptions> & {\n /** Provider label stored with each retained sample. */\n provider?: string;\n};\n\ntype ResolvedMeteredOpenAISampling = {\n provider: string;\n policy?: SamplingOptions;\n};\n\nexport type SamplingWrappedOpenAI = OpenAI & {\n unwrap: () => OpenAI;\n};\n\nexport type CompressionWrappedOpenAI = OpenAI & {\n /** Return the original, unwrapped OpenAI-compatible client. */\n unwrap: () => OpenAI;\n};\n\nexport type WithMeteringOpenAIOptions = BeginCallRequest & {\n /** UsageTap API key. Defaults to USAGETAP_API_KEY. */\n apiKey?: string;\n /** Reuse an existing client when custom transport or endpoints are configured. */\n usageTapClient?: UsageTapClient;\n /** Vendor label recorded at call_end. Defaults to `openai`. */\n provider?: string;\n applyVendorHints?: boolean;\n promptCompression?: boolean | OpenAIPromptCompressionOptions;\n /** Retain eligible calls using the same ID as the metered UsageTap call. */\n sampling?: MeteredOpenAISamplingOptions | true;\n};\n\ntype ChatCompletionsResource = OpenAI[\"chat\"][\"completions\"];\ntype ChatCompletionCreate = ChatCompletionsResource[\"create\"];\ntype ChatCompletionCreateParams = Parameters<ChatCompletionCreate>[0];\ntype ChatCompletionCreateOptions = Parameters<ChatCompletionCreate>[1];\ntype ChatCompletionCreateReturn = ReturnType<ChatCompletionCreate>;\n\nexport type WrapOpenAICallOptions = (ChatCompletionCreateOptions extends undefined\n ? { usageTap?: Partial<WrapOpenAIContext>; withUsage?: WithUsageOptions; promptCompression?: boolean | OpenAIPromptCompressionOptions }\n : ChatCompletionCreateOptions & { usageTap?: Partial<WrapOpenAIContext>; withUsage?: WithUsageOptions; promptCompression?: boolean | OpenAIPromptCompressionOptions });\n\ninterface WrappedChatCompletions extends Omit<ChatCompletionsResource, \"create\"> {\n create: (\n params: ChatCompletionCreateParams,\n options?: WrapOpenAICallOptions,\n ) => ChatCompletionCreateReturn;\n}\n\ntype ResponsesResource = OpenAI extends { responses: infer R } ? R : never;\ntype ResponsesCreate = ResponsesResource extends { create: infer T } ? T : never;\ntype ResponsesCreateParams = ResponsesCreate extends (...args: infer P) => unknown ? P[0] : never;\ntype ResponsesCreateOptions = ResponsesCreate extends (...args: infer P) => unknown ? P[1] : never;\ntype ResponsesCreateReturn = ResponsesCreate extends (...args: unknown[]) => infer R ? R : never;\n\nexport type WrapOpenAIResponseCallOptions = (ResponsesCreateOptions extends undefined\n ? { usageTap?: Partial<WrapOpenAIContext>; withUsage?: WithUsageOptions; promptCompression?: boolean | OpenAIPromptCompressionOptions }\n : ResponsesCreateOptions & { usageTap?: Partial<WrapOpenAIContext>; withUsage?: WithUsageOptions; promptCompression?: boolean | OpenAIPromptCompressionOptions });\n\ntype WrappedResponses = ResponsesResource extends undefined\n ? undefined\n : Omit<NonNullable<ResponsesResource>, \"create\"> & {\n create: (\n params: ResponsesCreateParams,\n options?: WrapOpenAIResponseCallOptions,\n ) => ResponsesCreateReturn;\n };\n\nexport type WrappedOpenAI = OpenAI & {\n chat: ReplaceProperty<OpenAI[\"chat\"], \"completions\", WrappedChatCompletions>;\n} & (ResponsesResource extends undefined\n ? { responses?: undefined }\n : { responses: WrappedResponses }) & {\n toNextResponse: typeof toNextResponse;\n pipeToResponse: typeof pipeToResponse;\n promptCompression: OpenAIPromptCompressionStats;\n unwrap: () => OpenAI;\n };\n\nexport interface StreamOpenAIRouteOptions {\n getRequest: (req: Request) => Promise<{\n params: ChatCompletionCreateParams;\n usageTap?: Partial<WrapOpenAIContext>;\n withUsage?: WithUsageOptions;\n promptCompression?: boolean | OpenAIPromptCompressionOptions;\n }>;\n wrapOptions?: WrapOpenAIOptions;\n defaultContext?: Partial<WrapOpenAIContext>;\n stream?: {\n mode?: StreamMode;\n headers?: Record<string, string>;\n responseInit?: ResponseInit;\n };\n}\n\nexport type StreamMode = \"text\" | \"sse\";\n\nexport interface StreamToResponseOptions {\n mode?: StreamMode;\n headers?: Record<string, string>;\n contentType?: string;\n sse?: {\n event?: string;\n retry?: number;\n };\n}\n\nexport function createOpenAIAdapter(init: OpenAIAdapterInit): OpenAIAdapter {\n const { client, usageTap, provider = \"openai\" } = init;\n\n return {\n async invoke<TResponse>(params: OpenAIInvokeParams<TResponse>): Promise<OpenAIInvokeResult<TResponse>> {\n const result = await usageTap.withUsage<OpenAIInvokeResult<TResponse>>(\n params.begin,\n async (ctx) => {\n ctx.setUsage({ providerUsed: provider });\n const response = await params.call(client, {\n hints: ctx.begin.data.vendorHints,\n begin: ctx.begin,\n });\n\n tryInferUsage(response, ctx.begin.data.vendorHints, params.extractUsage, ctx, provider);\n\n return {\n data: response,\n begin: ctx.begin,\n } satisfies OpenAIInvokeResult<TResponse>;\n },\n params.withUsageOptions,\n );\n\n return result;\n },\n\n async invokeStream<TStream>(params: OpenAIStreamParams<TStream>): Promise<OpenAIStreamResult<TStream>> {\n const result = await usageTap.withUsage<OpenAIStreamResult<TStream>>(\n params.begin,\n async (ctx) => {\n const settle = deferUsageFinalization(ctx);\n ctx.setUsage({ providerUsed: provider });\n const { stream, onComplete } = await params.call(client, {\n hints: ctx.begin.data.vendorHints,\n begin: ctx.begin,\n });\n\n const wrapped = wrapStreamForUsageTap(stream, async (termination) => {\n try {\n if (termination === \"complete\" && onComplete) {\n const maybeUsage = await onComplete();\n if (maybeUsage) {\n ctx.setUsage(maybeUsage);\n }\n }\n } catch (error) {\n ctx.setError({\n code: \"USAGE_FINALIZE_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n });\n await settle();\n throw error;\n }\n await settle();\n }, ctx);\n\n const finalize = async (): Promise<void> => {\n await wrapped.__usageTapFinalize?.();\n };\n\n return {\n stream: wrapped,\n begin: ctx.begin,\n finalize,\n } satisfies OpenAIStreamResult<TStream>;\n },\n params.withUsageOptions,\n );\n\n return result;\n },\n };\n}\n\nexport type UsageTapStream<T> = AsyncIterable<T> & { __usageTapFinalize?: () => Promise<void> };\ntype UsageTapIterableIterator<T> = AsyncIterator<T> & UsageTapStream<T> & {\n __usageTapFinalize: () => Promise<void>;\n};\n\nexport function toNextResponse<T>(\n stream: UsageTapStream<T>,\n options: StreamToResponseOptions = {},\n): Response {\n const mode = options.mode ?? \"text\";\n const headers = new Headers(options.headers ?? {});\n\n if (mode === \"sse\") {\n headers.set(\"content-type\", \"text/event-stream; charset=utf-8\");\n headers.set(\"cache-control\", \"no-cache, no-transform\");\n headers.set(\"connection\", \"keep-alive\");\n headers.set(\"x-accel-buffering\", \"no\");\n } else {\n headers.set(\"content-type\", options.contentType ?? \"text/plain; charset=utf-8\");\n }\n\n const encoder = new TextEncoder();\n let iterator: AsyncIterator<T> | undefined;\n\n const body = new ReadableStream<Uint8Array>({\n async start(controller: ReadableStreamDefaultController<Uint8Array>): Promise<void> {\n try {\n const getIterator = stream[Symbol.asyncIterator];\n if (typeof getIterator !== \"function\") {\n controller.close();\n return;\n }\n\n iterator = getIterator.call(stream);\n\n while (true) {\n const result = await iterator.next();\n if (result.done) {\n break;\n }\n\n const text = chunkToText(result.value);\n if (!text) {\n continue;\n }\n\n if (mode === \"sse\") {\n controller.enqueue(encoder.encode(formatSsePayload(text, options.sse)));\n } else {\n controller.enqueue(encoder.encode(text));\n }\n }\n controller.close();\n } catch (error) {\n controller.error(error);\n } finally {\n await stream.__usageTapFinalize?.();\n }\n },\n async cancel(): Promise<void> {\n if (!iterator) {\n const getIterator = stream[Symbol.asyncIterator];\n if (typeof getIterator === \"function\") {\n iterator = getIterator.call(stream);\n }\n }\n\n if (iterator && typeof iterator.return === \"function\") {\n await iterator.return();\n }\n await stream.__usageTapFinalize?.();\n },\n });\n\n return new Response(body, { headers });\n}\n\nexport async function pipeToResponse<T>(\n stream: UsageTapStream<T>,\n res: NodeResponseLike,\n options: StreamToResponseOptions = {},\n): Promise<void> {\n const mode = options.mode ?? \"text\";\n\n if (mode === \"sse\") {\n setHeaderIfPossible(res, \"Content-Type\", \"text/event-stream; charset=utf-8\");\n setHeaderIfPossible(res, \"Cache-Control\", \"no-cache, no-transform\");\n setHeaderIfPossible(res, \"Connection\", \"keep-alive\");\n setHeaderIfPossible(res, \"X-Accel-Buffering\", \"no\");\n } else {\n setHeaderIfPossible(res, \"Content-Type\", options.contentType ?? \"text/plain; charset=utf-8\");\n }\n\n const encoder = new TextEncoder();\n const iterator = stream[Symbol.asyncIterator]();\n\n try {\n while (true) {\n const result = await iterator.next();\n if (result.done) {\n break;\n }\n const text = chunkToText(result.value);\n if (!text) {\n continue;\n }\n\n const payload = mode === \"sse\" ? formatSsePayload(text, options.sse) : text;\n res.write(Buffer.from(encoder.encode(payload)));\n res.flush?.();\n }\n } finally {\n res.end();\n await stream.__usageTapFinalize?.();\n }\n}\n\nconst USAGETAP_CORRELATION_HEADER = \"x-usage-correlation-id\";\n\n/** Retain locally-selected OpenAI-compatible calls without changing call sites. */\nexport function withSampling(\n client: OpenAI,\n options: OpenAISamplingOptions = {},\n): SamplingWrappedOpenAI {\n if (!client || !options) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"withSampling requires an OpenAI-compatible client and sampling options\",\n );\n }\n const { apiKey, usageTapClient, provider = \"openai\", ...policy } = options;\n const localPolicy = typeof policy.rate === \"number\"\n ? policy as SamplingOptions\n : undefined;\n const usageTap = usageTapClient ?? new UsageTapClient({ apiKey, sampling: localPolicy });\n\n const wrapCreate = (create: (...args: unknown[]) => unknown) =>\n async (params: Record<string, unknown>, requestOptions?: Record<string, unknown>) => {\n const { usageTap: callContextRaw, ...providerOptions } = requestOptions ?? {};\n const callContext = isObjectRecord(callContextRaw) ? callContextRaw : {};\n const streaming = params.stream === true;\n const decision = streaming\n ? Promise.resolve(false)\n : usageTap.shouldSampleAsync({\n customerId: readString(callContext.customerId),\n feature: readString(callContext.feature),\n input: params,\n }, localPolicy);\n const startedAt = Date.now();\n\n try {\n const response = await create(\n params,\n Object.keys(providerOptions).length ? providerOptions : undefined,\n );\n const selected = await decision;\n if (selected) {\n const record = isObjectRecord(response) ? response : {};\n await usageTap.captureSample({\n customerId: readString(callContext.customerId),\n feature: readString(callContext.feature),\n environment: readString(callContext.environment),\n tags: readStringArray(callContext.tags),\n provider,\n model: readString(record.model) ?? readString(params.model),\n input: params,\n output: response,\n usage: record.usage,\n latencyMs: Date.now() - startedAt,\n }).catch(() => undefined);\n }\n return response;\n } catch (error) {\n const selected = await decision;\n if (selected) {\n await usageTap.captureSample({\n customerId: readString(callContext.customerId),\n feature: readString(callContext.feature),\n environment: readString(callContext.environment),\n tags: readStringArray(callContext.tags),\n provider,\n model: readString(params.model),\n input: params,\n latencyMs: Date.now() - startedAt,\n error: serializeSamplingError(error),\n }).catch(() => undefined);\n }\n throw error;\n }\n };\n\n const chat = client.chat?.completions\n ? new Proxy(client.chat, {\n get(target, prop, receiver) {\n if (prop !== \"completions\") return safeReflectGet(target as object, prop, receiver);\n const completions = target.completions;\n return new Proxy(completions, {\n get(completionTarget, completionProp, completionReceiver) {\n if (completionProp === \"create\") {\n return wrapCreate(\n (completionTarget.create as (...args: unknown[]) => unknown).bind(completionTarget),\n );\n }\n return safeReflectGet(\n completionTarget as object,\n completionProp,\n completionReceiver,\n );\n },\n });\n },\n })\n : undefined;\n const responses = typeof client.responses !== \"undefined\" && client.responses\n ? new Proxy(client.responses as object, {\n get(target, prop, receiver) {\n if (prop === \"create\") {\n const create = Reflect.get(target, prop, receiver) as (...args: unknown[]) => unknown;\n return wrapCreate(create.bind(target));\n }\n return safeReflectGet(target, prop, receiver);\n },\n })\n : undefined;\n\n return new Proxy(client, {\n get(target, prop, receiver) {\n if (prop === \"chat\" && chat) return chat;\n if (prop === \"responses\" && responses) return responses;\n if (prop === \"unwrap\") return () => target;\n return safeReflectGet(target as object, prop, receiver);\n },\n }) as SamplingWrappedOpenAI;\n}\n\nfunction safeReflectGet(target: object, prop: PropertyKey, receiver: unknown): unknown {\n return Reflect.get(target, prop, receiver as object) as unknown;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const strings = value.filter((item): item is string => typeof item === \"string\");\n return strings.length ? strings : undefined;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction serializeSamplingError(error: unknown): Record<string, unknown> {\n if (error instanceof Error) {\n return { name: error.name, message: error.message };\n }\n return { message: String(error) };\n}\n\nfunction normalizeMeteredOpenAISampling(\n options: MeteredOpenAISamplingOptions | true | undefined,\n): ResolvedMeteredOpenAISampling | undefined {\n if (!options) return undefined;\n if (options === true) return { provider: \"openai\" };\n const { provider = \"openai\", ...policyFields } = options;\n return {\n provider,\n policy:\n typeof policyFields.rate === \"number\"\n ? policyFields as SamplingOptions\n : undefined,\n };\n}\n\nfunction startMeteredOpenAISampleDecision({\n usageTap,\n sampling,\n beginRequest,\n input,\n}: {\n usageTap: UsageTapClient;\n sampling: ResolvedMeteredOpenAISampling | undefined;\n beginRequest: BeginCallRequest;\n input: unknown;\n}): Promise<boolean> {\n if (!sampling) return Promise.resolve(false);\n return usageTap.shouldSampleAsync(\n {\n customerId: beginRequest.customerId,\n feature: beginRequest.feature,\n input,\n },\n sampling.policy,\n );\n}\n\nasync function captureMeteredOpenAISample({\n usageTap,\n sampling,\n decision,\n ctx,\n beginRequest,\n input,\n response,\n error,\n startedAt,\n}: {\n usageTap: UsageTapClient;\n sampling: ResolvedMeteredOpenAISampling | undefined;\n decision: Promise<boolean>;\n ctx: WithUsageContext;\n beginRequest: BeginCallRequest;\n input: Record<string, unknown>;\n response?: unknown;\n error?: unknown;\n startedAt: number;\n}): Promise<void> {\n if (!sampling) return;\n let selected = false;\n try {\n selected = await decision;\n } catch {\n return;\n }\n if (!selected) return;\n const record = isObjectRecord(response) ? response : {};\n await usageTap.captureSample({\n sampleId: ctx.begin.data.callId,\n callId: ctx.begin.data.callId,\n customerId: beginRequest.customerId,\n feature: beginRequest.feature,\n tags: beginRequest.tags,\n provider: sampling.provider,\n model: readString(record.model) ?? readString(input.model),\n input,\n ...(response === undefined ? {} : { output: response }),\n usage: record.usage,\n latencyMs: Date.now() - startedAt,\n ...(error === undefined ? {} : { error: serializeSamplingError(error) }),\n }).catch(() => undefined);\n}\n\n/**\n * Add hosted prompt compression to an OpenAI-compatible client without\n * changing any of its call sites. Works with OpenAI and OpenRouter clients.\n */\nexport function withCompression(\n client: OpenAI,\n options: OpenAICompressionOptions = {},\n): CompressionWrappedOpenAI {\n if (!client) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"withCompression requires an OpenAI-compatible client instance\",\n );\n }\n\n const {\n apiKey,\n usageTapClient,\n sampling,\n ...compressionOverrides\n } = options;\n const usageTap = usageTapClient ?? new UsageTapClient({ apiKey });\n const compression: OpenAIPromptCompressionOptions = {\n provider: \"usagetap\",\n roles: { user: { enabled: true, aggressiveness: 0.2 } },\n minContextTokens: DEFAULT_PROMPT_COMPRESSION_MIN_CONTEXT_TOKENS,\n ...compressionOverrides,\n };\n const proxiedChat = client.chat\n ? createCompressionOnlyChatProxy(client.chat, usageTap, compression)\n : undefined;\n const proxiedResponses = typeof client.responses !== \"undefined\"\n ? createCompressionOnlyResponsesProxy(\n client.responses as ResponsesResource,\n usageTap,\n compression,\n )\n : undefined;\n\n const compressed = new Proxy(client, {\n get(target, prop, receiver) {\n if (prop === \"chat\" && proxiedChat) {\n return proxiedChat;\n }\n if (prop === \"responses\" && typeof target.responses !== \"undefined\") {\n return proxiedResponses ?? (Reflect.get(target as object, prop, receiver) as unknown);\n }\n if (prop === \"unwrap\") {\n return () => target;\n }\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n }) as CompressionWrappedOpenAI;\n\n return sampling\n ? withSampling(compressed, {\n ...(sampling === true ? {} : sampling),\n apiKey,\n usageTapClient,\n })\n : compressed;\n}\n\n/**\n * Add UsageTap metering to an OpenAI-compatible client. The string form is the\n * shortest path; pass an object when feature, tags, entitlements, or compression\n * are also needed.\n */\nexport function withMetering(\n client: OpenAI,\n customer: string | WithMeteringOpenAIOptions,\n): WrappedOpenAI {\n const config = typeof customer === \"string\"\n ? { customerId: customer }\n : customer;\n\n if (!config?.customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"withMetering requires a customerId\",\n );\n }\n\n const {\n apiKey,\n usageTapClient,\n applyVendorHints,\n promptCompression,\n sampling,\n provider,\n ...defaultContext\n } = config;\n const usageTap = usageTapClient ?? new UsageTapClient({ apiKey });\n const normalizedCompression = promptCompression === true\n ? { provider: \"usagetap\" as const }\n : promptCompression\n ? { provider: \"usagetap\" as const, ...promptCompression }\n : undefined;\n\n return wrapOpenAI(client, usageTap, {\n defaultContext,\n applyVendorHints,\n promptCompression: normalizedCompression,\n sampling,\n provider,\n });\n}\n\nexport function wrapOpenAI(\n client: OpenAI,\n usageTap: UsageTapClient,\n options: WrapOpenAIOptions = {},\n): WrappedOpenAI {\n if (!client) {\n throw new UsageTapError(\"USAGETAP_BAD_REQUEST\", \"wrapOpenAI requires an OpenAI client instance\");\n }\n\n const defaultContext = options.defaultContext;\n const applyVendorHints = options.applyVendorHints !== false;\n const defaultPromptCompression = normalizePromptCompressionOptions(options.promptCompression);\n const defaultSampling = normalizeMeteredOpenAISampling(options.sampling);\n const provider = options.provider ?? \"openai\";\n const promptCompressionStats = new OpenAIPromptCompressionStats();\n\n const proxiedChat = client.chat\n ? createChatProxy(\n client.chat,\n usageTap,\n defaultContext,\n applyVendorHints,\n defaultPromptCompression,\n promptCompressionStats,\n defaultSampling,\n provider,\n )\n : undefined;\n\n const proxiedResponses = typeof client.responses !== \"undefined\"\n ? createResponsesProxy(\n client.responses,\n usageTap,\n defaultContext,\n applyVendorHints,\n defaultPromptCompression,\n promptCompressionStats,\n defaultSampling,\n provider,\n )\n : undefined;\n\n const handler: ProxyHandler<OpenAI> = {\n get(target, prop, receiver) {\n if (prop === \"chat\" && proxiedChat) {\n return proxiedChat;\n }\n\n if (prop === \"responses\" && typeof target.responses !== \"undefined\") {\n return proxiedResponses ?? (Reflect.get(target as object, prop, receiver) as unknown);\n }\n\n if (prop === \"toNextResponse\") {\n return toNextResponse;\n }\n\n if (prop === \"pipeToResponse\") {\n return pipeToResponse;\n }\n\n if (prop === \"promptCompression\") {\n return promptCompressionStats;\n }\n\n if (prop === \"unwrap\") {\n return () => target;\n }\n\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n };\n\n return new Proxy(client, handler) as WrappedOpenAI;\n}\n\nfunction createCompressionOnlyChatProxy(\n resource: OpenAI[\"chat\"],\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n): OpenAI[\"chat\"] {\n const completions = resource.completions;\n const originalCreate = completions.create.bind(completions);\n const streamCandidate = (completions as { stream?: unknown }).stream;\n const originalStream = typeof streamCandidate === \"function\"\n ? (streamCandidate as (...args: unknown[]) => unknown).bind(completions)\n : undefined;\n\n const wrappedCreate = (\n params: ChatCompletionCreateParams,\n options?: ChatCompletionCreateOptions,\n ): ChatCompletionCreateReturn => {\n return compressChatParams(params, usageTap, compression)\n .then((outcome) => originalCreate(outcome.params, options)) as unknown as ChatCompletionCreateReturn;\n };\n\n const wrappedStream = originalStream\n ? (params: ChatCompletionCreateParams, options?: ChatCompletionCreateOptions) =>\n compressChatParams(params, usageTap, compression)\n .then((outcome) => originalStream(outcome.params, options))\n : undefined;\n\n const proxiedCompletions = new Proxy(completions, {\n get(target, prop, receiver) {\n if (prop === \"create\") return wrappedCreate;\n if (prop === \"stream\" && wrappedStream) return wrappedStream;\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n });\n\n return new Proxy(resource, {\n get(target, prop, receiver) {\n if (prop === \"completions\") return proxiedCompletions;\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n });\n}\n\nfunction createCompressionOnlyResponsesProxy(\n resource: ResponsesResource,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n): ResponsesResource {\n if (!resource || typeof resource !== \"object\") {\n return resource;\n }\n if (!(\"create\" in resource) || typeof (resource as { create?: unknown }).create !== \"function\") {\n return resource;\n }\n\n const originalCreate = (resource as { create: (...args: unknown[]) => unknown }).create.bind(resource);\n const wrappedCreate = (\n params: ResponsesCreateParams,\n options?: ResponsesCreateOptions,\n ): ResponsesCreateReturn => {\n return compressResponsesParams(params, usageTap, compression)\n .then((outcome) => originalCreate(outcome.params, options)) as unknown as ResponsesCreateReturn;\n };\n\n return new Proxy(resource as object, {\n get(target, prop, receiver) {\n if (prop === \"create\") return wrappedCreate;\n return Reflect.get(target, prop, receiver) as unknown;\n },\n }) as ResponsesResource;\n}\n\nexport function streamOpenAIRoute(\n usageTap: UsageTapClient,\n openai: OpenAI,\n options: StreamOpenAIRouteOptions,\n): (req: Request) => Promise<Response> {\n if (!options?.getRequest) {\n throw new UsageTapError(\"USAGETAP_BAD_REQUEST\", \"streamOpenAIRoute requires a getRequest function\");\n }\n\n const wrapConfig: WrapOpenAIOptions | undefined = options.wrapOptions || options.defaultContext\n ? {\n ...(options.wrapOptions ?? {}),\n defaultContext: options.defaultContext ?? options.wrapOptions?.defaultContext,\n }\n : undefined;\n\n const wrappedClient = wrapConfig\n ? wrapOpenAI(openai, usageTap, wrapConfig)\n : wrapOpenAI(openai, usageTap);\n\n return async (req: Request): Promise<Response> => {\n const requestConfig = await options.getRequest(req);\n const mergedParams: ChatCompletionCreateParams = {\n ...requestConfig.params,\n stream: true,\n };\n\n const callOptions: Partial<WrapOpenAICallOptions> = {};\n if (requestConfig.usageTap) {\n callOptions.usageTap = requestConfig.usageTap;\n }\n if (requestConfig.withUsage) {\n callOptions.withUsage = requestConfig.withUsage;\n }\n if (requestConfig.promptCompression !== undefined) {\n callOptions.promptCompression = requestConfig.promptCompression;\n }\n\n const stream = await wrappedClient.chat.completions.create(\n mergedParams,\n Object.keys(callOptions).length ? (callOptions as WrapOpenAICallOptions) : undefined,\n );\n\n const baseResponse = toNextResponse(stream as UsageTapStream<unknown>, {\n mode: options.stream?.mode ?? \"sse\",\n headers: options.stream?.headers,\n });\n\n const init = options.stream?.responseInit;\n if (!init) {\n return baseResponse;\n }\n\n const mergedHeaders = new Headers(baseResponse.headers);\n if (init.headers) {\n const extra = normalizeHeaders(init.headers);\n for (const [key, value] of Object.entries(extra)) {\n mergedHeaders.set(key, value);\n }\n }\n\n return new Response(baseResponse.body, {\n status: init.status ?? baseResponse.status,\n statusText: init.statusText ?? baseResponse.statusText,\n headers: mergedHeaders,\n });\n };\n}\n\nexport interface NodeResponseLike {\n write(chunk: string | Uint8Array | Buffer): unknown;\n end(chunk?: string | Uint8Array | Buffer): unknown;\n setHeader?(name: string, value: string): void;\n headersSent?: boolean;\n statusCode?: number;\n status?(code: number): void;\n flush?(): void;\n}\n\nfunction createChatProxy(\n resource: OpenAI[\"chat\"],\n usageTap: UsageTapClient,\n defaultContext: Partial<WrapOpenAIContext> | undefined,\n applyVendorHints: boolean,\n defaultPromptCompression: OpenAIPromptCompressionOptions | undefined,\n promptCompressionStats: OpenAIPromptCompressionStats,\n defaultSampling: ResolvedMeteredOpenAISampling | undefined,\n provider: string,\n): ReplaceProperty<OpenAI[\"chat\"], \"completions\", WrappedChatCompletions> {\n const completions = createChatCompletionsProxy(\n resource.completions,\n usageTap,\n defaultContext,\n applyVendorHints,\n defaultPromptCompression,\n promptCompressionStats,\n defaultSampling,\n provider,\n );\n\n const handler: ProxyHandler<OpenAI[\"chat\"]> = {\n get(target, prop, receiver) {\n if (prop === \"completions\") {\n return completions;\n }\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n };\n\n return new Proxy(resource, handler) as ReplaceProperty<OpenAI[\"chat\"], \"completions\", WrappedChatCompletions>;\n}\n\nfunction createResponsesProxy(\n resource: ResponsesResource,\n usageTap: UsageTapClient,\n defaultContext: Partial<WrapOpenAIContext> | undefined,\n applyVendorHints: boolean,\n defaultPromptCompression: OpenAIPromptCompressionOptions | undefined,\n promptCompressionStats: OpenAIPromptCompressionStats,\n defaultSampling: ResolvedMeteredOpenAISampling | undefined,\n provider: string,\n): WrappedResponses | undefined {\n if (!resource || typeof resource !== \"object\") {\n return undefined;\n }\n\n if (!(\"create\" in resource) || typeof (resource as { create?: unknown }).create !== \"function\") {\n return resource as unknown as WrappedResponses;\n }\n\n const originalCreate = (resource as { create: (...args: unknown[]) => unknown }).create.bind(resource);\n\n const wrappedCreate = (\n params: ResponsesCreateParams,\n options?: WrapOpenAIResponseCallOptions,\n ): ResponsesCreateReturn => {\n const {\n requestOptions,\n usageContext,\n withUsage,\n promptCompression,\n } = splitUsageOptions(options);\n const beginRequest = responsesBeginRequest(\n resolveBeginRequest(defaultContext, usageContext),\n params,\n );\n const wantsStream = isStreamingRequest(params);\n\n return usageTap.withUsage(beginRequest, async (ctx) => {\n const settle = wantsStream ? deferUsageFinalization(ctx) : undefined;\n const sampleStartedAt = Date.now();\n const sampleDecision = wantsStream\n ? Promise.resolve(false)\n : startMeteredOpenAISampleDecision({\n usageTap,\n sampling: defaultSampling,\n beginRequest,\n input: params,\n });\n const hintedParams = applyVendorHints\n ? applyResponsesVendorHints(params, ctx.begin.data.vendorHints)\n : params;\n const finalParams = await compressResponsesParamsForCall({\n params: hintedParams,\n usageTap,\n ctx,\n defaultPromptCompression,\n callPromptCompression: promptCompression,\n stats: promptCompressionStats,\n withUsage,\n operation: \"responses.create\",\n });\n ctx.setUsage(openAIRequestExecutionMetadata(finalParams, provider));\n const request = attachCorrelationHeader(requestOptions, ctx.begin.correlationId) as ResponsesCreateOptions;\n\n if (wantsStream) {\n const apiPromise = originalCreate(finalParams, request);\n const wrappedPromise = transformApiPromise(apiPromise, (rawStream) => {\n ensureAsyncIterable(rawStream, \"responses.create\");\n const wrappedStream = wrapStreamForUsageTap(rawStream, async (termination) => {\n try {\n if (termination === \"complete\") {\n const usage = await extractUsageFromStream(rawStream, ctx.begin.data.vendorHints, provider);\n if (usage) {\n ctx.setUsage(usage);\n }\n }\n } catch (error) {\n ctx.setError({\n code: \"USAGE_FINALIZE_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n await settle?.();\n }\n }, ctx, (chunk) => {\n tryInferUsageFromStreamChunk(\n chunk,\n ctx.begin.data.vendorHints,\n ctx,\n provider,\n );\n });\n return wrappedStream;\n });\n\n return wrappedPromise as unknown as ResponsesCreateReturn;\n }\n\n const apiPromise = originalCreate(finalParams, request);\n const wrappedPromise = transformApiPromise(apiPromise, async (response) => {\n tryInferUsage(response, ctx.begin.data.vendorHints, undefined, ctx, provider);\n await captureMeteredOpenAISample({\n usageTap,\n sampling: defaultSampling,\n decision: sampleDecision,\n ctx,\n beginRequest,\n input: params as unknown as Record<string, unknown>,\n response,\n startedAt: sampleStartedAt,\n });\n return response;\n }, async (error) => {\n await captureMeteredOpenAISample({\n usageTap,\n sampling: defaultSampling,\n decision: sampleDecision,\n ctx,\n beginRequest,\n input: params as unknown as Record<string, unknown>,\n error,\n startedAt: sampleStartedAt,\n });\n throw error;\n });\n return wrappedPromise as unknown as ResponsesCreateReturn;\n }, withUsage) as ResponsesCreateReturn;\n };\n\n const handler: ProxyHandler<object> = {\n get(target, prop, receiver) {\n if (prop === \"create\") {\n return wrappedCreate;\n }\n return Reflect.get(target, prop, receiver) as unknown;\n },\n };\n\n return new Proxy(resource as object, handler) as WrappedResponses;\n}\n\nfunction createChatCompletionsProxy(\n resource: ChatCompletionsResource,\n usageTap: UsageTapClient,\n defaultContext: Partial<WrapOpenAIContext> | undefined,\n applyVendorHints: boolean,\n defaultPromptCompression: OpenAIPromptCompressionOptions | undefined,\n promptCompressionStats: OpenAIPromptCompressionStats,\n defaultSampling: ResolvedMeteredOpenAISampling | undefined,\n provider: string,\n): WrappedChatCompletions {\n const originalCreate = resource.create.bind(resource);\n const streamCandidate = (resource as { stream?: unknown }).stream;\n const originalStream = typeof streamCandidate === \"function\"\n ? (streamCandidate as (...args: unknown[]) => unknown).bind(resource)\n : undefined;\n\n const wrappedCreate = (\n params: ChatCompletionCreateParams,\n options?: WrapOpenAICallOptions,\n ): ChatCompletionCreateReturn => {\n const {\n requestOptions,\n usageContext,\n withUsage,\n promptCompression,\n } = splitUsageOptions(options);\n const beginRequest = resolveBeginRequest(defaultContext, usageContext);\n const wantsStream = isStreamingRequest(params);\n\n return usageTap.withUsage(beginRequest, async (ctx) => {\n const settle = wantsStream ? deferUsageFinalization(ctx) : undefined;\n const sampleStartedAt = Date.now();\n const sampleDecision = wantsStream\n ? Promise.resolve(false)\n : startMeteredOpenAISampleDecision({\n usageTap,\n sampling: defaultSampling,\n beginRequest,\n input: params,\n });\n const hintedParams = applyVendorHints\n ? applyChatVendorHints(params, ctx.begin.data.vendorHints)\n : params;\n const compressedParams = await compressChatParamsForCall({\n params: hintedParams,\n usageTap,\n ctx,\n defaultPromptCompression,\n callPromptCompression: promptCompression,\n stats: promptCompressionStats,\n withUsage,\n operation: \"chat.completions.create\",\n });\n const finalParams = wantsStream\n ? ensureOpenAIStreamUsage(compressedParams)\n : compressedParams;\n ctx.setUsage(openAIRequestExecutionMetadata(finalParams, provider));\n const request = attachCorrelationHeader(requestOptions, ctx.begin.correlationId) as ChatCompletionCreateOptions;\n\n if (wantsStream) {\n const apiPromise = originalCreate(finalParams, request);\n const wrappedPromise = transformApiPromise(apiPromise, (rawStream) => {\n ensureAsyncIterable(rawStream, \"chat.completions.create\");\n const wrappedStream = wrapStreamForUsageTap(rawStream, async (termination) => {\n try {\n if (termination === \"complete\") {\n const usage = await extractUsageFromStream(rawStream, ctx.begin.data.vendorHints, provider);\n if (usage) {\n ctx.setUsage(usage);\n }\n }\n } catch (error) {\n ctx.setError({\n code: \"USAGE_FINALIZE_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n await settle?.();\n }\n }, ctx, (chunk) => {\n tryInferUsageFromStreamChunk(\n chunk,\n ctx.begin.data.vendorHints,\n ctx,\n provider,\n );\n });\n return wrappedStream;\n });\n\n return wrappedPromise as unknown as ChatCompletionCreateReturn;\n }\n\n const apiPromise = originalCreate(finalParams, request);\n const wrappedPromise = transformApiPromise(apiPromise, async (response) => {\n tryInferUsage(response, ctx.begin.data.vendorHints, undefined, ctx, provider);\n await captureMeteredOpenAISample({\n usageTap,\n sampling: defaultSampling,\n decision: sampleDecision,\n ctx,\n beginRequest,\n input: params as unknown as Record<string, unknown>,\n response,\n startedAt: sampleStartedAt,\n });\n return response;\n }, async (error) => {\n await captureMeteredOpenAISample({\n usageTap,\n sampling: defaultSampling,\n decision: sampleDecision,\n ctx,\n beginRequest,\n input: params as unknown as Record<string, unknown>,\n error,\n startedAt: sampleStartedAt,\n });\n throw error;\n });\n return wrappedPromise as unknown as ChatCompletionCreateReturn;\n }, withUsage) as ChatCompletionCreateReturn;\n };\n\n const wrappedStream = originalStream\n ? (\n params: ChatCompletionCreateParams,\n options?: WrapOpenAICallOptions,\n ): ChatCompletionCreateReturn => {\n const {\n requestOptions,\n usageContext,\n withUsage,\n promptCompression,\n } = splitUsageOptions(options);\n const beginRequest = resolveBeginRequest(defaultContext, usageContext);\n\n return usageTap.withUsage(beginRequest, async (ctx) => {\n const settle = deferUsageFinalization(ctx);\n const hintedParams = applyVendorHints\n ? applyChatVendorHints(params, ctx.begin.data.vendorHints)\n : params;\n const compressedParams = await compressChatParamsForCall({\n params: hintedParams,\n usageTap,\n ctx,\n defaultPromptCompression,\n callPromptCompression: promptCompression,\n stats: promptCompressionStats,\n withUsage,\n operation: \"chat.completions.stream\",\n });\n const finalParams = ensureOpenAIStreamUsage(compressedParams);\n ctx.setUsage(openAIRequestExecutionMetadata(finalParams, provider));\n const request = attachCorrelationHeader(requestOptions, ctx.begin.correlationId) as ChatCompletionCreateOptions;\n\n const apiPromise = originalStream(finalParams, request);\n const wrappedPromise = transformApiPromise(apiPromise, (rawStream) => {\n ensureAsyncIterable(rawStream, \"chat.completions.stream\");\n const wrappedStreamInner = wrapStreamForUsageTap(rawStream, async (termination) => {\n try {\n if (termination === \"complete\") {\n const usage = await extractUsageFromStream(\n rawStream,\n ctx.begin.data.vendorHints,\n provider,\n );\n if (usage) {\n ctx.setUsage(usage);\n }\n }\n } catch (error) {\n ctx.setError({\n code: \"USAGE_FINALIZE_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n await settle();\n }\n }, ctx, (chunk) => {\n tryInferUsageFromStreamChunk(\n chunk,\n ctx.begin.data.vendorHints,\n ctx,\n provider,\n );\n });\n return wrappedStreamInner;\n });\n\n return wrappedPromise as unknown as ChatCompletionCreateReturn;\n }, withUsage) as ChatCompletionCreateReturn;\n }\n : undefined;\n\n const handler: ProxyHandler<ChatCompletionsResource> = {\n get(target, prop, receiver) {\n if (prop === \"create\") {\n return wrappedCreate;\n }\n\n if (prop === \"stream\" && wrappedStream) {\n return wrappedStream;\n }\n\n return Reflect.get(target as object, prop, receiver) as unknown;\n },\n };\n\n return new Proxy(resource, handler) as unknown as WrappedChatCompletions;\n}\n\ntype PromptCompressionOperation = OpenAIPromptCompressionTurnStats[\"operation\"];\n\ninterface ResolvedRoleCompressionOptions {\n provider?: PromptCompressionProvider;\n minTokens?: number;\n failOpen?: boolean;\n tokenCompanyModel?: string;\n aggressiveness?: number;\n tokenCompanyAggressiveness?: number;\n tokenCompanyAppId?: string;\n usageTapCompressionModel?: string;\n usageTapCompressionAggressiveness?: number;\n}\n\ninterface SegmentCompression {\n role: OpenAIPromptCompressionRole;\n result: PromptCompressionResult<unknown>;\n}\n\ninterface CompressionOutcome<TParams> {\n params: TParams;\n segments: SegmentCompression[];\n}\n\nasync function compressChatParamsForCall(args: {\n params: ChatCompletionCreateParams;\n usageTap: UsageTapClient;\n ctx: WithUsageContext;\n defaultPromptCompression: OpenAIPromptCompressionOptions | undefined;\n callPromptCompression: boolean | OpenAIPromptCompressionOptions | undefined;\n stats: OpenAIPromptCompressionStats;\n withUsage?: WithUsageOptions;\n operation: PromptCompressionOperation;\n}): Promise<ChatCompletionCreateParams> {\n const compression = resolveEffectivePromptCompressionOptions(\n args.defaultPromptCompression,\n args.callPromptCompression,\n );\n if (!compression) {\n return args.params;\n }\n\n const outcome = await compressChatParams(\n args.params,\n args.usageTap,\n compression,\n args.withUsage?.signal,\n );\n await recordCompressionOutcome({\n outcome,\n compression,\n usageTap: args.usageTap,\n ctx: args.ctx,\n stats: args.stats,\n withUsage: args.withUsage,\n operation: args.operation,\n });\n return outcome.params;\n}\n\nasync function compressResponsesParamsForCall(args: {\n params: ResponsesCreateParams;\n usageTap: UsageTapClient;\n ctx: WithUsageContext;\n defaultPromptCompression: OpenAIPromptCompressionOptions | undefined;\n callPromptCompression: boolean | OpenAIPromptCompressionOptions | undefined;\n stats: OpenAIPromptCompressionStats;\n withUsage?: WithUsageOptions;\n operation: PromptCompressionOperation;\n}): Promise<ResponsesCreateParams> {\n const compression = resolveEffectivePromptCompressionOptions(\n args.defaultPromptCompression,\n args.callPromptCompression,\n );\n if (!compression) {\n return args.params;\n }\n\n const outcome = await compressResponsesParams(\n args.params,\n args.usageTap,\n compression,\n args.withUsage?.signal,\n );\n await recordCompressionOutcome({\n outcome,\n compression,\n usageTap: args.usageTap,\n ctx: args.ctx,\n stats: args.stats,\n withUsage: args.withUsage,\n operation: args.operation,\n });\n return outcome.params;\n}\n\nasync function recordCompressionOutcome<TParams>(args: {\n outcome: CompressionOutcome<TParams>;\n compression: OpenAIPromptCompressionOptions;\n usageTap: UsageTapClient;\n ctx: WithUsageContext;\n stats: OpenAIPromptCompressionStats;\n withUsage?: WithUsageOptions;\n operation: PromptCompressionOperation;\n}): Promise<void> {\n const telemetry = buildPromptCompressionTelemetry(args.outcome.segments);\n if (!telemetry) {\n return;\n }\n\n const turn: OpenAIPromptCompressionTurnStats = {\n ...telemetry,\n callId: args.ctx.begin.data.callId,\n operation: args.operation,\n messagesCompressed: args.outcome.segments.length,\n timestamp: Date.now(),\n };\n args.stats._record(turn);\n\n try {\n await args.usageTap.recordPromptCompression(\n {\n callId: args.ctx.begin.data.callId,\n promptCompression: telemetry,\n },\n promptCompressionRequestOptions(args.withUsage, args.ctx.begin.correlationId),\n );\n } catch (error) {\n args.stats._recordFailure({\n callId: args.ctx.begin.data.callId,\n operation: args.operation,\n stage: \"telemetry\",\n message: error instanceof Error ? error.message : String(error),\n timestamp: Date.now(),\n });\n if (args.compression.failOpen === false) {\n throw error;\n }\n }\n}\n\nasync function compressChatParams(\n params: ChatCompletionCreateParams,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<CompressionOutcome<ChatCompletionCreateParams>> {\n if (!params || typeof params !== \"object\") {\n return { params, segments: [] };\n }\n\n const source = cloneRecord(params);\n const messages = Array.isArray(source.messages) ? source.messages : undefined;\n if (!messages) {\n return { params, segments: [] };\n }\n\n if (isBelowMinContextTokens(\n { messages, tools: source.tools },\n compression.minContextTokens,\n )) {\n return { params, segments: [] };\n }\n\n if (shouldUseUsageTapMessageEndpoint(compression)) {\n const result = await usageTap.compressPromptMessages(source, {\n provider: \"usagetap\",\n failOpen: compression.failOpen,\n mode: compression.mode,\n latencyBudgetMs: compression.latencyBudgetMs,\n compactEmptyUserMessages: compression.compactEmptyUserMessages,\n compactDuplicateUserTextParts:\n compression.compactDuplicateUserTextParts,\n aggressiveness:\n resolveMessageEndpointAggressiveness(compression),\n signal,\n });\n return {\n params: result.compressedInput as ChatCompletionCreateParams,\n segments: [{ role: \"user\", result }],\n };\n }\n\n const messageResults = await Promise.all(\n messages.map((message) =>\n compressOpenAIMessage(message, usageTap, compression, signal),\n ),\n );\n\n return {\n params: {\n ...source,\n messages: messageResults.map((result) => result.value),\n } as unknown as ChatCompletionCreateParams,\n segments: messageResults.flatMap((result) => result.segments),\n };\n}\n\nasync function compressResponsesParams(\n params: ResponsesCreateParams,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<CompressionOutcome<ResponsesCreateParams>> {\n if (!params || typeof params !== \"object\") {\n return { params, segments: [] };\n }\n\n const source = cloneRecord(params);\n const segments: SegmentCompression[] = [];\n\n if (isBelowMinContextTokens(\n {\n instructions: source.instructions,\n input: source.input,\n tools: source.tools,\n },\n compression.minContextTokens,\n )) {\n return { params, segments };\n }\n\n if (typeof source.instructions === \"string\") {\n const compressed = await compressTextForRole(\n source.instructions,\n \"system\",\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n source.instructions = compressed.text;\n segments.push(compressed.segment);\n }\n }\n\n if (typeof source.input === \"string\") {\n const compressed = await compressTextForRole(\n source.input,\n \"user\",\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n source.input = compressed.text;\n segments.push(compressed.segment);\n }\n } else if (Array.isArray(source.input)) {\n const inputResults = await Promise.all(\n source.input.map((item) =>\n compressResponsesInputItem(item, usageTap, compression, signal),\n ),\n );\n source.input = inputResults.map((result) => result.value);\n segments.push(...inputResults.flatMap((result) => result.segments));\n }\n\n return {\n params: source as unknown as ResponsesCreateParams,\n segments,\n };\n}\n\nasync function compressOpenAIMessage(\n message: unknown,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<{ value: unknown; segments: SegmentCompression[] }> {\n if (!isObjectRecord(message)) {\n return { value: message, segments: [] };\n }\n\n const role = mapOpenAIRole(message.role);\n if (!role) {\n return { value: message, segments: [] };\n }\n\n const content = message.content;\n if (typeof content === \"string\") {\n const compressed = await compressTextForRole(\n content,\n role,\n usageTap,\n compression,\n signal,\n );\n if (!compressed) {\n return { value: message, segments: [] };\n }\n return {\n value: { ...message, content: compressed.text },\n segments: [compressed.segment],\n };\n }\n\n if (Array.isArray(content)) {\n const blockResults = await Promise.all(\n content.map((block) =>\n compressOpenAITextBlock(block, role, usageTap, compression, signal),\n ),\n );\n const segments = blockResults.flatMap((result) =>\n result.segment ? [result.segment] : [],\n );\n return {\n value: segments.length\n ? { ...message, content: blockResults.map((result) => result.value) }\n : message,\n segments,\n };\n }\n\n return { value: message, segments: [] };\n}\n\nasync function compressOpenAITextBlock(\n block: unknown,\n role: OpenAIPromptCompressionRole,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<{ value: unknown; segment?: SegmentCompression }> {\n if (\n !isObjectRecord(block) ||\n block.type !== \"text\" ||\n typeof block.text !== \"string\"\n ) {\n return { value: block };\n }\n\n const compressed = await compressTextForRole(\n block.text,\n role,\n usageTap,\n compression,\n signal,\n );\n if (!compressed) {\n return { value: block };\n }\n\n return {\n value: { ...block, text: compressed.text },\n segment: compressed.segment,\n };\n}\n\nasync function compressResponsesInputItem(\n item: unknown,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<{ value: unknown; segments: SegmentCompression[] }> {\n if (!isObjectRecord(item)) {\n return { value: item, segments: [] };\n }\n\n const specialToolRole = mapResponsesItemTypeToRole(item.type);\n const role = specialToolRole ?? mapOpenAIRole(item.role);\n const segments: SegmentCompression[] = [];\n let next: Record<PropertyKey, unknown> = item;\n\n if (role && typeof item.content === \"string\") {\n const compressed = await compressTextForRole(\n item.content,\n role,\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n next = { ...next, content: compressed.text };\n segments.push(compressed.segment);\n }\n } else if (role && Array.isArray(item.content)) {\n const contentResults = await Promise.all(\n item.content.map((block) =>\n compressResponsesContentBlock(block, role, usageTap, compression, signal),\n ),\n );\n segments.push(\n ...contentResults.flatMap((result) =>\n result.segment ? [result.segment] : [],\n ),\n );\n if (segments.length) {\n next = {\n ...next,\n content: contentResults.map((result) => result.value),\n };\n }\n }\n\n if (specialToolRole && typeof item.output === \"string\") {\n const compressed = await compressTextForRole(\n item.output,\n specialToolRole,\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n next = { ...next, output: compressed.text };\n segments.push(compressed.segment);\n }\n }\n\n return { value: next, segments };\n}\n\nasync function compressResponsesContentBlock(\n block: unknown,\n role: OpenAIPromptCompressionRole,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<{ value: unknown; segment?: SegmentCompression }> {\n if (!isObjectRecord(block)) {\n return { value: block };\n }\n\n if (\n (block.type === \"input_text\" || block.type === \"text\") &&\n typeof block.text === \"string\"\n ) {\n const compressed = await compressTextForRole(\n block.text,\n role,\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n return {\n value: { ...block, text: compressed.text },\n segment: compressed.segment,\n };\n }\n }\n\n if (role === \"tool\" && typeof block.output === \"string\") {\n const compressed = await compressTextForRole(\n block.output,\n role,\n usageTap,\n compression,\n signal,\n );\n if (compressed) {\n return {\n value: { ...block, output: compressed.text },\n segment: compressed.segment,\n };\n }\n }\n\n return { value: block };\n}\n\nasync function compressTextForRole(\n text: string,\n role: OpenAIPromptCompressionRole,\n usageTap: UsageTapClient,\n compression: OpenAIPromptCompressionOptions,\n signal?: AbortSignal,\n): Promise<{ text: string; segment: SegmentCompression } | undefined> {\n if (!text.trim()) {\n return undefined;\n }\n\n const roleOptions = resolveRoleCompressionOptions(compression, role);\n if (!roleOptions) {\n return undefined;\n }\n\n const estimatedTokens = estimatePromptTokens(text);\n if (typeof roleOptions.minTokens === \"number\" && estimatedTokens < roleOptions.minTokens) {\n return undefined;\n }\n\n const result = await usageTap.compressPromptInput<string>(text, {\n provider: roleOptions.provider,\n failOpen: roleOptions.failOpen,\n tokenCompanyModel: roleOptions.tokenCompanyModel,\n aggressiveness: roleOptions.aggressiveness,\n tokenCompanyAggressiveness: roleOptions.tokenCompanyAggressiveness,\n tokenCompanyAppId: roleOptions.tokenCompanyAppId,\n usageTapCompressionModel: roleOptions.usageTapCompressionModel,\n usageTapCompressionAggressiveness:\n roleOptions.usageTapCompressionAggressiveness,\n signal,\n });\n const compressedText =\n typeof result.compressedInput === \"string\"\n ? result.compressedInput\n : String(result.compressedInput);\n\n return {\n text: compressedText,\n segment: { role, result: { ...result, compressedInput: compressedText } },\n };\n}\n\nfunction normalizePromptCompressionOptions(\n options: boolean | OpenAIPromptCompressionOptions | undefined,\n): OpenAIPromptCompressionOptions | undefined {\n if (!options) {\n return undefined;\n }\n if (options === true) {\n return {};\n }\n if (options.enabled === false) {\n return undefined;\n }\n return options;\n}\n\nfunction isBelowMinContextTokens(\n context: unknown,\n minContextTokens: number | undefined,\n): boolean {\n return typeof minContextTokens === \"number\" &&\n estimatePromptTokens(context) < Math.max(0, minContextTokens);\n}\n\nfunction resolveEffectivePromptCompressionOptions(\n defaults: OpenAIPromptCompressionOptions | undefined,\n override: boolean | OpenAIPromptCompressionOptions | undefined,\n): OpenAIPromptCompressionOptions | undefined {\n if (override === false) {\n return undefined;\n }\n if (override === undefined) {\n return defaults;\n }\n if (override === true) {\n return defaults ?? {};\n }\n\n const merged: OpenAIPromptCompressionOptions = {\n ...(defaults ?? {}),\n ...override,\n roles: override.roles ?? defaults?.roles,\n };\n return normalizePromptCompressionOptions(merged);\n}\n\nfunction resolveRoleCompressionOptions(\n compression: OpenAIPromptCompressionOptions,\n role: OpenAIPromptCompressionRole,\n): ResolvedRoleCompressionOptions | undefined {\n const hasExplicitRoles = compression.roles !== undefined;\n const setting = compression.roles?.[role];\n\n if (hasExplicitRoles && setting === undefined) {\n return undefined;\n }\n\n if (!hasExplicitRoles && role === \"assistant\") {\n return undefined;\n }\n\n if (setting === false) {\n return undefined;\n }\n\n const roleOptions = typeof setting === \"object\" ? setting : undefined;\n if (roleOptions?.enabled === false) {\n return undefined;\n }\n\n return {\n provider: roleOptions?.provider ?? compression.provider,\n minTokens: roleOptions?.minTokens ?? compression.minTokens,\n failOpen: compression.failOpen,\n tokenCompanyModel: compression.tokenCompanyModel,\n aggressiveness:\n roleOptions?.aggressiveness ??\n resolveAggressiveness(compression, role),\n tokenCompanyAggressiveness:\n roleOptions?.tokenCompanyAggressiveness ??\n resolveTokenCompanyAggressiveness(compression, role),\n tokenCompanyAppId: compression.tokenCompanyAppId,\n usageTapCompressionModel: compression.usageTapCompressionModel,\n usageTapCompressionAggressiveness:\n roleOptions?.usageTapCompressionAggressiveness ??\n resolveUsageTapCompressionAggressiveness(compression, role),\n };\n}\n\nfunction resolveAggressiveness(\n compression: OpenAIPromptCompressionOptions,\n role: OpenAIPromptCompressionRole,\n): number | undefined {\n if (typeof compression.aggressiveness === \"number\") {\n return compression.aggressiveness;\n }\n return compression.aggressiveness?.[role];\n}\n\nfunction resolveTokenCompanyAggressiveness(\n compression: OpenAIPromptCompressionOptions,\n role: OpenAIPromptCompressionRole,\n): number | undefined {\n if (typeof compression.tokenCompanyAggressiveness === \"number\") {\n return compression.tokenCompanyAggressiveness;\n }\n return compression.tokenCompanyAggressiveness?.[role];\n}\n\nfunction resolveUsageTapCompressionAggressiveness(\n compression: OpenAIPromptCompressionOptions,\n role: OpenAIPromptCompressionRole,\n): number | undefined {\n if (typeof compression.usageTapCompressionAggressiveness === \"number\") {\n return compression.usageTapCompressionAggressiveness;\n }\n return compression.usageTapCompressionAggressiveness?.[role];\n}\n\nfunction shouldUseUsageTapMessageEndpoint(\n compression: OpenAIPromptCompressionOptions,\n): boolean {\n if (compression.provider !== \"usagetap\") {\n return false;\n }\n\n return Object.values(compression.roles ?? {}).every((setting) => {\n if (typeof setting !== \"object\" || setting === null) {\n return true;\n }\n return setting.provider === undefined || setting.provider === \"usagetap\";\n });\n}\n\nfunction resolveMessageEndpointAggressiveness(\n compression: OpenAIPromptCompressionOptions,\n): number | Partial<Record<OpenAIPromptCompressionRole, number>> | undefined {\n const base =\n compression.aggressiveness ??\n compression.usageTapCompressionAggressiveness ??\n compression.tokenCompanyAggressiveness;\n\n if (typeof base === \"number\" || base === undefined) {\n return hasExplicitEnabledRoles(compression)\n ? buildRoleAggressiveness(compression, base)\n : base;\n }\n\n return buildRoleAggressiveness(compression, undefined, base);\n}\n\nfunction hasExplicitEnabledRoles(\n compression: OpenAIPromptCompressionOptions,\n): boolean {\n return Object.values(compression.roles ?? {}).some((setting) => setting !== false);\n}\n\nfunction buildRoleAggressiveness(\n compression: OpenAIPromptCompressionOptions,\n fallback?: number,\n base: Partial<Record<OpenAIPromptCompressionRole, number>> = {},\n): Partial<Record<OpenAIPromptCompressionRole, number>> {\n const roles: OpenAIPromptCompressionRole[] = [\"system\", \"user\", \"tool\", \"assistant\"];\n const result: Partial<Record<OpenAIPromptCompressionRole, number>> = {};\n\n for (const role of roles) {\n const roleOptions = resolveRoleCompressionOptions(compression, role);\n if (!roleOptions) {\n continue;\n }\n\n const roleAggressiveness =\n roleOptions.aggressiveness ??\n roleOptions.usageTapCompressionAggressiveness ??\n roleOptions.tokenCompanyAggressiveness ??\n base[role] ??\n fallback;\n if (roleAggressiveness !== undefined) {\n result[role] = roleAggressiveness;\n }\n }\n\n return result;\n}\n\nfunction buildPromptCompressionTelemetry(\n segments: SegmentCompression[],\n): PromptCompressionTelemetryWithDiagnostics | undefined {\n if (!segments.length) {\n return undefined;\n }\n\n const originalCharacters = segments.reduce(\n (sum, segment) => sum + segment.result.originalCharacters,\n 0,\n );\n const compressedCharacters = segments.reduce(\n (sum, segment) => sum + segment.result.compressedCharacters,\n 0,\n );\n const originalTokens = segments.reduce(\n (sum, segment) => sum + segment.result.originalTokens,\n 0,\n );\n const compressedTokens = segments.reduce(\n (sum, segment) => sum + segment.result.compressedTokens,\n 0,\n );\n const savedCharacters = Math.max(0, originalCharacters - compressedCharacters);\n const savedTokens = Math.max(0, originalTokens - compressedTokens);\n const providers = dedupeStrings(segments.map((segment) => segment.result.provider));\n const roles = dedupeStrings(segments.map((segment) => `role:${segment.role}`));\n const techniques = dedupeStrings([\n \"openai-wrapper\",\n ...roles,\n ...segments.flatMap((segment) => segment.result.techniques),\n ...(providers.length > 1 ? [\"mixed-providers\"] : []),\n ]);\n\n return {\n provider: segments[0]?.result.provider ?? \"heuristic\",\n originalCharacters,\n compressedCharacters,\n savedCharacters,\n originalTokens,\n compressedTokens,\n savedTokens,\n tokenSavingsRatio: originalTokens > 0 ? savedTokens / originalTokens : 0,\n savingsRatio: originalCharacters > 0 ? savedCharacters / originalCharacters : 0,\n techniques,\n };\n}\n\nfunction promptCompressionRequestOptions(\n withUsage: WithUsageOptions | undefined,\n correlationId: string,\n): PromptCompressionOptions {\n return {\n signal: withUsage?.signal,\n headers: withUsage?.headers,\n retries: withUsage?.retries,\n correlationId,\n };\n}\n\nfunction mapOpenAIRole(role: unknown): OpenAIPromptCompressionRole | undefined {\n if (role === \"system\" || role === \"developer\") {\n return \"system\";\n }\n if (role === \"user\") {\n return \"user\";\n }\n if (role === \"tool\" || role === \"function\") {\n return \"tool\";\n }\n if (role === \"assistant\") {\n return \"assistant\";\n }\n return undefined;\n}\n\nfunction mapResponsesItemTypeToRole(type: unknown): OpenAIPromptCompressionRole | undefined {\n if (\n type === \"function_call_output\" ||\n type === \"tool_result\" ||\n type === \"computer_call_output\"\n ) {\n return \"tool\";\n }\n return undefined;\n}\n\ninterface SplitUsageOptionsResult {\n requestOptions?: Record<string, unknown>;\n usageContext?: Partial<WrapOpenAIContext>;\n withUsage?: WithUsageOptions;\n promptCompression?: boolean | OpenAIPromptCompressionOptions;\n}\n\nfunction splitUsageOptions(options: unknown): SplitUsageOptionsResult {\n if (!options || typeof options !== \"object\") {\n return {};\n }\n\n const { usageTap, withUsage, promptCompression, ...rest } = options as {\n usageTap?: Partial<WrapOpenAIContext>;\n withUsage?: WithUsageOptions;\n promptCompression?: boolean | OpenAIPromptCompressionOptions;\n } & Record<string, unknown>;\n\n const requestOptions = Object.keys(rest).length ? cloneRequestOptions(rest) : undefined;\n\n return {\n requestOptions,\n usageContext: usageTap,\n withUsage,\n promptCompression,\n } satisfies SplitUsageOptionsResult;\n}\n\nfunction resolveBeginRequest(\n defaults: Partial<WrapOpenAIContext> | undefined,\n override: Partial<WrapOpenAIContext> | undefined,\n): BeginCallRequest {\n const base = defaults ?? {};\n const current = override ?? {};\n const customerId = current.customerId ?? base.customerId;\n\n if (!customerId) {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n \"wrapOpenAI requires usageTap.customerId (provide defaultContext or options.usageTap)\",\n );\n }\n\n const tags = mergeTags(base.tags, current.tags);\n const begin: BeginCallRequest = { customerId } satisfies BeginCallRequest;\n const requested = current.requested ?? base.requested;\n if (requested) begin.requested = requested;\n\n const feature = current.feature ?? base.feature;\n if (feature) begin.feature = feature;\n\n const runId = current.runId ?? base.runId;\n if (runId) begin.runId = runId;\n\n const idempotency = current.idempotency ?? base.idempotency;\n if (idempotency) begin.idempotency = idempotency;\n\n const customerName = current.customerName ?? base.customerName;\n if (customerName) begin.customerName = customerName;\n\n const customerEmail = current.customerEmail ?? base.customerEmail;\n if (customerEmail) begin.customerEmail = customerEmail;\n\n const customerUserId = current.customerUserId ?? base.customerUserId;\n if (customerUserId) begin.customerUserId = customerUserId;\n\n const customerUserName = current.customerUserName ?? base.customerUserName;\n if (customerUserName) begin.customerUserName = customerUserName;\n\n const customerUserEmail = current.customerUserEmail ?? base.customerUserEmail;\n if (customerUserEmail) begin.customerUserEmail = customerUserEmail;\n\n const stripeCustomerId = current.stripeCustomerId ?? base.stripeCustomerId;\n if (stripeCustomerId) begin.stripeCustomerId = stripeCustomerId;\n\n const batch = current.batch ?? base.batch;\n if (typeof batch === \"boolean\") begin.batch = batch;\n\n const pricingMode = current.pricingMode ?? base.pricingMode;\n if (pricingMode) begin.pricingMode = pricingMode;\n\n if (tags?.length) {\n begin.tags = tags;\n }\n\n return begin;\n}\n\nfunction responsesBeginRequest(\n begin: BeginCallRequest,\n params: unknown,\n): BeginCallRequest {\n if (!responsesRequestUsesWebSearch(params)) return begin;\n return {\n ...begin,\n requested: {\n ...(begin.requested ?? {}),\n search: true,\n },\n };\n}\n\nfunction responsesRequestUsesWebSearch(params: unknown): boolean {\n if (!params || typeof params !== \"object\") return false;\n const tools = (params as { tools?: unknown }).tools;\n return Array.isArray(tools) && tools.some((tool) => {\n if (!tool || typeof tool !== \"object\") return false;\n const type = (tool as { type?: unknown }).type;\n return type === \"web_search\" || type === \"web_search_preview\";\n });\n}\n\ntype PromiseLikeOrValue<T> = PromiseLike<T> | T;\n\nfunction transformApiPromise<TValue, TResult>(\n apiPromise: PromiseLikeOrValue<TValue>,\n onResolve: (value: TValue) => PromiseLike<TResult> | TResult,\n onReject?: (error: unknown) => PromiseLike<TResult> | TResult,\n): Promise<TResult> {\n const resolvedPromise = Promise.resolve(apiPromise).then(onResolve, onReject);\n\n if (isObjectRecord(apiPromise)) {\n const proto = Object.getPrototypeOf(apiPromise) as object | null;\n if (proto) {\n Object.setPrototypeOf(resolvedPromise, proto);\n }\n\n for (const key of Reflect.ownKeys(apiPromise)) {\n if (key === \"then\" || key === \"catch\" || key === \"finally\") {\n continue;\n }\n\n try {\n const descriptor = Object.getOwnPropertyDescriptor(apiPromise, key);\n if (descriptor) {\n Reflect.defineProperty(resolvedPromise, key, descriptor);\n }\n } catch {\n /* ignore non-configurable properties */\n }\n }\n }\n\n return resolvedPromise;\n}\n\nfunction isObjectRecord(value: unknown): value is Record<PropertyKey, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction cloneRecord(value: unknown): Record<string, unknown> {\n return isObjectRecord(value) ? { ...(value as Record<string, unknown>) } : {};\n}\n\nfunction isStringTuple(value: unknown): value is [string, string] {\n return Array.isArray(value) && value.length >= 2 && typeof value[0] === \"string\" && typeof value[1] === \"string\";\n}\n\nfunction cloneRequestOptions(source: Record<string, unknown>): Record<string, unknown> {\n const clone: Record<string, unknown> = { ...source };\n\n if (\"headers\" in clone) {\n clone.headers = normalizeHeaders((clone as { headers?: unknown }).headers);\n }\n\n return clone;\n}\n\nfunction attachCorrelationHeader(\n options: Record<string, unknown> | undefined,\n correlationId: string,\n): Record<string, unknown> | undefined {\n const normalized = normalizeHeaders(options?.headers);\n\n if (correlationId && !normalized[USAGETAP_CORRELATION_HEADER]) {\n normalized[USAGETAP_CORRELATION_HEADER] = correlationId;\n }\n\n if (!options) {\n return Object.keys(normalized).length\n ? ({ headers: normalized } satisfies Record<string, unknown>)\n : undefined;\n }\n\n const next = { ...options } satisfies Record<string, unknown>;\n if (Object.keys(normalized).length) {\n next.headers = normalized;\n }\n return next;\n}\n\nfunction normalizeHeaders(headers: unknown): Record<string, string> {\n if (!headers) {\n return {};\n }\n\n if (headers instanceof Headers) {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key.toLowerCase()] = value;\n });\n return result;\n }\n\n if (Array.isArray(headers)) {\n const result: Record<string, string> = {};\n for (const entry of headers) {\n if (!isStringTuple(entry)) {\n continue;\n }\n const [key, value] = entry;\n result[key.toLowerCase()] = value;\n }\n return result;\n }\n\n if (isObjectRecord(headers)) {\n const result: Record<string, string> = {};\n const record = headers as Record<string, unknown>;\n for (const key of Object.keys(record)) {\n const value = record[key];\n if (value !== undefined && value !== null) {\n result[key.toLowerCase()] = String(value);\n }\n }\n return result;\n }\n\n return {};\n}\n\nfunction mergeTags(a?: string[], b?: string[]): string[] | undefined {\n const values = [...(a ?? []), ...(b ?? [])]\n .map((value) => (typeof value === \"string\" ? value.trim() : \"\"))\n .filter(Boolean);\n\n if (!values.length) {\n return undefined;\n }\n\n return dedupeStrings(values);\n}\n\nfunction dedupeStrings(values: string[]): string[] {\n return Array.from(new Set(values));\n}\n\nfunction isStreamingRequest(params: unknown): boolean {\n if (!params || typeof params !== \"object\") {\n return false;\n }\n\n const stream = (params as { stream?: unknown }).stream;\n if (typeof stream === \"boolean\") {\n return stream;\n }\n\n return stream != null;\n}\n\nfunction applyChatVendorHints(\n params: ChatCompletionCreateParams,\n hints: VendorHints | undefined,\n): ChatCompletionCreateParams {\n if (!hints) {\n return params;\n }\n\n const next = cloneRecord(params);\n\n if (hints.preferredModel && (next.model === undefined || next.model === null)) {\n next.model = hints.preferredModel;\n }\n\n if (typeof hints.maxResponseTokens === \"number\" && next.max_tokens == null) {\n next.max_tokens = hints.maxResponseTokens;\n }\n\n if (typeof hints.maxInputTokens === \"number\" && (next as { max_input_tokens?: unknown }).max_input_tokens == null) {\n (next as { max_input_tokens?: number }).max_input_tokens = hints.maxInputTokens;\n }\n\n return next as unknown as ChatCompletionCreateParams;\n}\n\nfunction applyResponsesVendorHints(\n params: ResponsesCreateParams,\n hints: VendorHints | undefined,\n): ResponsesCreateParams {\n if (!hints) {\n return params;\n }\n\n const next = cloneRecord(params);\n\n if (hints.preferredModel && (next.model === undefined || next.model === null)) {\n next.model = hints.preferredModel;\n }\n\n if (typeof hints.maxResponseTokens === \"number\" && (next as { max_output_tokens?: unknown }).max_output_tokens == null) {\n (next as { max_output_tokens?: number }).max_output_tokens = hints.maxResponseTokens;\n }\n\n return next as unknown as ResponsesCreateParams;\n}\n\nasync function extractUsageFromStream(\n stream: unknown,\n hints: VendorHints | undefined,\n provider = \"openai\",\n): Promise<Partial<Omit<EndCallRequest, \"callId\" | \"error\">> | undefined> {\n const finalPayload = await resolveStreamFinalPayload(stream);\n if (!finalPayload) {\n return undefined;\n }\n\n return inferUsageFromResponse(finalPayload, hints, provider);\n}\n\nasync function resolveStreamFinalPayload(stream: unknown): Promise<unknown> {\n if (!stream || typeof stream !== \"object\") {\n return undefined;\n }\n\n const candidate = stream as {\n finalChatCompletion?: () => Promise<unknown>;\n finalCompletion?: () => Promise<unknown>;\n finalResponse?: () => Promise<unknown>;\n finalContent?: () => Promise<unknown>;\n };\n\n if (typeof candidate.finalChatCompletion === \"function\") {\n return candidate.finalChatCompletion();\n }\n\n if (typeof candidate.finalResponse === \"function\") {\n return candidate.finalResponse();\n }\n\n if (typeof candidate.finalCompletion === \"function\") {\n return candidate.finalCompletion();\n }\n\n if (typeof candidate.finalContent === \"function\") {\n return candidate.finalContent();\n }\n\n return undefined;\n}\n\nfunction ensureAsyncIterable(value: unknown, label: string): asserts value is AsyncIterable<unknown> {\n if (!value || typeof value !== \"object\" || typeof (value as AsyncIterable<unknown>)[Symbol.asyncIterator] !== \"function\") {\n throw new UsageTapError(\n \"USAGETAP_BAD_REQUEST\",\n `${label} expected an async iterable stream but received ${typeof value}`,\n );\n }\n}\n\nfunction chunkToText(chunk: unknown): string {\n if (chunk === undefined || chunk === null) {\n return \"\";\n }\n\n if (typeof chunk === \"string\") {\n return chunk;\n }\n\n if (typeof chunk === \"object\") {\n const candidate = chunk as {\n choices?: Array<{\n delta?: {\n content?: string | Array<{ text?: string }>;\n };\n }>;\n content?: string;\n };\n\n const delta = candidate.choices?.[0]?.delta;\n const content = delta?.content ?? candidate.content;\n\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n return content\n .map((entry) => {\n if (!entry) return \"\";\n if (typeof entry === \"string\") return entry;\n if (typeof entry.text === \"string\") return entry.text;\n return \"\";\n })\n .join(\"\");\n }\n }\n\n return String(chunk);\n}\n\nfunction formatSsePayload(\n text: string,\n options: StreamToResponseOptions[\"sse\"],\n): string {\n if (!text) {\n return \"\";\n }\n\n const lines = text.split(/\\r?\\n/);\n const eventLine = options?.event ? `event: ${options.event}\\n` : \"\";\n const retryLine = options?.retry ? `retry: ${options.retry}\\n` : \"\";\n const dataLines = lines.map((line) => `data: ${line}`).join(\"\\n\");\n return `${eventLine}${retryLine}${dataLines}\\n\\n`;\n}\n\nfunction setHeaderIfPossible(res: NodeResponseLike, key: string, value: string): void {\n if (typeof res.setHeader === \"function\" && res.headersSent !== true) {\n res.setHeader(key, value);\n }\n}\n\nfunction tryInferUsage<TResponse>(\n response: TResponse,\n hints: VendorHints | undefined,\n extractor: OpenAIInvokeParams<TResponse>[\"extractUsage\"],\n ctx: WithUsageContext,\n provider = \"openai\",\n): void {\n const explicit = extractor?.(response);\n const inferred = explicit ?? inferUsageFromResponse(response, hints, provider);\n\n if (inferred) {\n ctx.setUsage(inferred);\n }\n}\n\nfunction inferUsageFromResponse(\n response: unknown,\n hints: VendorHints | undefined,\n provider = \"openai\",\n): Partial<Omit<EndCallRequest, \"callId\" | \"error\">> | undefined {\n if (!response || typeof response !== \"object\") {\n return undefined;\n }\n\n const candidate = response as {\n usage?: {\n prompt_tokens?: number;\n input_tokens?: number;\n completion_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n cached_tokens?: number;\n cache_write_tokens?: number;\n cache_creation_input_tokens?: number;\n cache_write_input_tokens?: number;\n cache_write_5m_input_tokens?: number;\n cache_write_1h_input_tokens?: number;\n cache_creation?: {\n ephemeral_5m_input_tokens?: number;\n ephemeral_1h_input_tokens?: number;\n };\n searches?: number;\n web_search_queries?: number;\n server_tool_use?: { web_search_requests?: number };\n prompt_tokens_details?: {\n cached_tokens?: number;\n cache_write_tokens?: number;\n cache_creation_tokens?: number;\n audio_tokens?: number;\n cached_audio_tokens?: number;\n cached_tokens_details?: { audio_tokens?: number; image_tokens?: number };\n image_tokens?: number;\n };\n input_tokens_details?: {\n cached_tokens?: number;\n cache_write_tokens?: number;\n cache_creation_tokens?: number;\n audio_tokens?: number;\n cached_audio_tokens?: number;\n cached_tokens_details?: { audio_tokens?: number; image_tokens?: number };\n image_tokens?: number;\n };\n completion_tokens_details?: {\n reasoning_tokens?: number;\n audio_tokens?: number;\n image_tokens?: number;\n };\n output_tokens_details?: {\n reasoning_tokens?: number;\n audio_tokens?: number;\n image_tokens?: number;\n };\n };\n model?: string;\n reasoning?: { effort?: unknown; type?: unknown; mode?: unknown };\n output?: Array<{ type?: unknown }>;\n };\n\n if (!candidate.usage) {\n return undefined;\n }\n\n const cachedInputTokens =\n candidate.usage.prompt_tokens_details?.cached_tokens ??\n candidate.usage.input_tokens_details?.cached_tokens ??\n candidate.usage.cached_tokens;\n const cacheWriteInputTokens =\n candidate.usage.prompt_tokens_details?.cache_write_tokens ??\n candidate.usage.prompt_tokens_details?.cache_creation_tokens ??\n candidate.usage.input_tokens_details?.cache_write_tokens ??\n candidate.usage.input_tokens_details?.cache_creation_tokens ??\n candidate.usage.cache_creation_input_tokens ??\n candidate.usage.cache_write_input_tokens ??\n candidate.usage.cache_write_tokens;\n const cacheWrite5mInputTokens =\n candidate.usage.cache_write_5m_input_tokens ??\n candidate.usage.cache_creation?.ephemeral_5m_input_tokens;\n const cacheWrite1hInputTokens =\n candidate.usage.cache_write_1h_input_tokens ??\n candidate.usage.cache_creation?.ephemeral_1h_input_tokens;\n const outputSearches = Array.isArray(candidate.output)\n ? candidate.output.filter((item) => item?.type === \"web_search_call\").length\n : 0;\n const searches =\n candidate.usage.searches ??\n candidate.usage.web_search_queries ??\n candidate.usage.server_tool_use?.web_search_requests ??\n outputSearches;\n const responseEffort = normalizeExecutionReasoningEffort(\n candidate.reasoning?.effort,\n );\n\n return {\n providerUsed: provider,\n modelUsed: candidate.model ?? hints?.preferredModel,\n inputTokens: candidate.usage.prompt_tokens ?? candidate.usage.input_tokens,\n responseTokens: candidate.usage.completion_tokens ?? candidate.usage.output_tokens,\n cachedInputTokens,\n cacheWriteInputTokens,\n cacheWrite5mInputTokens,\n cacheWrite1hInputTokens,\n audioInputTokens:\n candidate.usage.prompt_tokens_details?.audio_tokens ??\n candidate.usage.input_tokens_details?.audio_tokens,\n cachedAudioInputTokens:\n candidate.usage.prompt_tokens_details?.cached_audio_tokens ??\n candidate.usage.input_tokens_details?.cached_audio_tokens ??\n candidate.usage.prompt_tokens_details?.cached_tokens_details?.audio_tokens ??\n candidate.usage.input_tokens_details?.cached_tokens_details?.audio_tokens,\n imageInputTokens:\n candidate.usage.prompt_tokens_details?.image_tokens ??\n candidate.usage.input_tokens_details?.image_tokens,\n imageOutputTokens:\n candidate.usage.completion_tokens_details?.image_tokens ??\n candidate.usage.output_tokens_details?.image_tokens,\n audioOutputTokens:\n candidate.usage.completion_tokens_details?.audio_tokens ??\n candidate.usage.output_tokens_details?.audio_tokens,\n reasoningTokens:\n candidate.usage.completion_tokens_details?.reasoning_tokens ??\n candidate.usage.output_tokens_details?.reasoning_tokens,\n ...(responseEffort\n ? {\n reasoningEffort: responseEffort,\n reasoningEffortSource: \"provider_response\" as const,\n }\n : {}),\n ...(typeof candidate.reasoning?.type === \"string\"\n ? { reasoningMode: candidate.reasoning.type }\n : typeof candidate.reasoning?.mode === \"string\"\n ? { reasoningMode: candidate.reasoning.mode }\n : {}),\n ...(typeof searches === \"number\" && searches > 0 ? { searches } : {}),\n } satisfies Partial<Omit<EndCallRequest, \"callId\" | \"error\">>;\n}\n\nfunction normalizeExecutionReasoningEffort(\n value: unknown,\n): EndCallRequest[\"reasoningEffort\"] | undefined {\n return value === \"none\" ||\n value === \"minimal\" ||\n value === \"low\" ||\n value === \"medium\" ||\n value === \"high\" ||\n value === \"xhigh\" ||\n value === \"max\"\n ? value\n : undefined;\n}\n\nfunction openAIRequestExecutionMetadata(\n params: unknown,\n provider: string,\n): Partial<Omit<EndCallRequest, \"callId\" | \"error\">> {\n const record = params && typeof params === \"object\"\n ? params as Record<string, unknown>\n : {};\n const reasoning = record.reasoning && typeof record.reasoning === \"object\"\n ? record.reasoning as Record<string, unknown>\n : undefined;\n const effort = normalizeExecutionReasoningEffort(\n record.reasoning_effort ?? reasoning?.effort ?? record.thinking_level,\n );\n const mode = typeof reasoning?.type === \"string\"\n ? reasoning.type\n : typeof reasoning?.mode === \"string\"\n ? reasoning.mode\n : undefined;\n const rawBudget =\n reasoning?.budget_tokens ?? record.thinking_budget ?? record.thinking_budget_tokens;\n const budget = typeof rawBudget === \"number\" && Number.isInteger(rawBudget) && rawBudget >= 0\n ? rawBudget\n : undefined;\n return {\n providerUsed: provider,\n ...(typeof record.model === \"string\" ? { modelUsed: record.model } : {}),\n ...(effort\n ? { reasoningEffort: effort, reasoningEffortSource: \"provider_request\" as const }\n : {}),\n ...(mode ? { reasoningMode: mode } : {}),\n ...(budget !== undefined ? { reasoningBudgetTokens: budget } : {}),\n };\n}\n\nfunction tryInferUsageFromStreamChunk(\n chunk: unknown,\n hints: VendorHints | undefined,\n ctx: WithUsageContext,\n provider: string,\n): void {\n const payload = isObjectRecord(chunk) && isObjectRecord(chunk.response)\n ? chunk.response\n : chunk;\n const inferred = inferUsageFromResponse(payload, hints, provider);\n if (inferred) {\n ctx.setUsage(inferred);\n }\n}\n\nfunction ensureOpenAIStreamUsage<TParams>(params: TParams): TParams {\n if (!isObjectRecord(params)) {\n return params;\n }\n const streamOptions = isObjectRecord(params.stream_options)\n ? params.stream_options\n : {};\n return {\n ...params,\n stream_options: {\n ...streamOptions,\n include_usage: true,\n },\n } as TParams;\n}\n\nfunction deferUsageFinalization(ctx: WithUsageContext): () => Promise<void> {\n return ctx.deferFinalization?.() ?? (() => Promise.resolve());\n}\n\nfunction wrapStreamForUsageTap<TStream>(\n source: UsageTapStream<TStream> | AsyncIterable<TStream>,\n finalize: (termination: StreamTermination) => Promise<void> | void,\n ctx: WithUsageContext,\n onChunk?: (chunk: TStream) => void,\n): AsyncIterable<TStream> & { __usageTapFinalize: () => Promise<void> } {\n const getIterator = source[Symbol.asyncIterator];\n if (typeof getIterator !== \"function\") {\n throw new TypeError(\"Stream is not async iterable\");\n }\n\n const iterator = getIterator.call(source) as AsyncIterator<TStream>;\n let completed = false;\n\n const invokeFinalize = async (\n termination: StreamTermination,\n error?: unknown,\n ): Promise<void> => {\n if (completed) return;\n completed = true;\n if (termination === \"cancel\" || termination === \"manual\") {\n ctx.setError({\n code: \"STREAM_ABORTED\",\n message: termination === \"cancel\"\n ? \"Provider stream consumption was cancelled before completion\"\n : \"Provider stream was finalized before completion\",\n });\n } else if (termination === \"error\") {\n ctx.setError({\n code: \"VENDOR_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n });\n }\n try {\n await finalize(termination);\n } catch (error) {\n ctx.setError({\n code: \"USAGE_FINALIZE_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n };\n\n const prototype = (Object.getPrototypeOf(source as object) as object | null) ?? Object.prototype;\n const wrapped = Object.create(prototype) as unknown as UsageTapIterableIterator<TStream>;\n\n for (const key of Reflect.ownKeys(source as object)) {\n try {\n const descriptor = Object.getOwnPropertyDescriptor(source as object, key);\n if (descriptor) {\n Object.defineProperty(wrapped, key, descriptor);\n }\n } catch {\n /* ignore non-configurable properties */\n }\n }\n\n Object.defineProperty(wrapped, Symbol.asyncIterator, {\n value(): UsageTapIterableIterator<TStream> {\n return this as UsageTapIterableIterator<TStream>;\n },\n configurable: true,\n });\n\n Object.defineProperty(wrapped, \"next\", {\n value: async (...args: Parameters<AsyncIterator<TStream>[\"next\"]>): Promise<IteratorResult<TStream>> => {\n try {\n const result = await iterator.next(...args);\n if (!result.done) {\n onChunk?.(result.value);\n }\n if (result.done) {\n await invokeFinalize(\"complete\");\n }\n return result;\n } catch (error) {\n await invokeFinalize(\"error\", error).catch(() => undefined);\n throw error;\n }\n },\n configurable: true,\n writable: true,\n });\n\n Object.defineProperty(wrapped, \"return\", {\n value: async (value?: TStream): Promise<IteratorResult<TStream>> => {\n try {\n if (typeof iterator.return === \"function\") {\n const rawResult: unknown = await iterator.return(value);\n if (!isIteratorResult<TStream>(rawResult)) {\n throw new TypeError(\"Iterator.return() returned an invalid result\");\n }\n await invokeFinalize(\"cancel\");\n return rawResult;\n }\n await invokeFinalize(\"cancel\");\n return { done: true, value } as IteratorResult<TStream>;\n } catch (error) {\n await invokeFinalize(\"error\", error).catch(() => undefined);\n throw error;\n }\n },\n configurable: true,\n writable: true,\n });\n\n Object.defineProperty(wrapped, \"throw\", {\n value: async (error?: unknown): Promise<IteratorResult<TStream>> => {\n try {\n if (typeof iterator.throw === \"function\") {\n const rawResult: unknown = await iterator.throw(error);\n if (!isIteratorResult<TStream>(rawResult)) {\n throw new TypeError(\"Iterator.throw() returned an invalid result\");\n }\n await invokeFinalize(\"error\", error);\n return rawResult;\n }\n await invokeFinalize(\"error\", error);\n throw error;\n } catch (thrownError) {\n await invokeFinalize(\"error\", thrownError).catch(() => undefined);\n throw thrownError;\n }\n },\n configurable: true,\n writable: true,\n });\n\n Object.defineProperty(wrapped, \"__usageTapFinalize\", {\n value: async (): Promise<void> => {\n await invokeFinalize(\"manual\");\n },\n configurable: true,\n });\n\n return wrapped;\n}\n\nfunction isIteratorResult<T>(value: unknown): value is IteratorResult<T> {\n return isObjectRecord(value) && \"done\" in value;\n}\n","import type OpenAI from \"openai\";\nimport { UsageTapClient } from \"../client\";\nimport type {\n OpenAIAdapter,\n OpenAISamplingOptions,\n SamplingWrappedOpenAI,\n WithMeteringOpenAIOptions,\n WrapOpenAIOptions,\n WrappedOpenAI,\n} from \"./openai\";\nimport {\n createOpenAIAdapter,\n withMetering as withOpenAIMetering,\n withSampling as withOpenAISampling,\n wrapOpenAI as wrapOpenAICompatible,\n} from \"./openai\";\n\nexport interface OpenRouterAdapterInit {\n client: OpenAI;\n usageTap: UsageTapClient;\n}\n\nexport function createOpenRouterAdapter(init: OpenRouterAdapterInit): OpenAIAdapter {\n return createOpenAIAdapter({ ...init, provider: \"openrouter\" });\n}\n\nexport function withMetering(\n client: OpenAI,\n customer: string | WithMeteringOpenAIOptions,\n): WrappedOpenAI {\n return withOpenAIMetering(\n client,\n typeof customer === \"string\"\n ? { customerId: customer, provider: \"openrouter\" }\n : { ...customer, provider: \"openrouter\" },\n );\n}\n\nexport function wrapOpenAI(\n client: OpenAI,\n usageTap: UsageTapClient,\n options: WrapOpenAIOptions = {},\n): WrappedOpenAI {\n return wrapOpenAICompatible(client, usageTap, {\n ...options,\n provider: \"openrouter\",\n });\n}\n\nexport function withSampling(\n client: OpenAI,\n options: OpenAISamplingOptions = {},\n): SamplingWrappedOpenAI {\n return withOpenAISampling(client, { ...options, provider: \"openrouter\" });\n}\n"]}
|