From 31e11aa8d8bd6084cab1fc2994530bf3e4dd0b70 Mon Sep 17 00:00:00 2001 From: soyelmismo Date: Sat, 30 May 2026 07:59:04 -0500 Subject: [PATCH] perf: extract optimizations from perf/cpu-optimization-chat-completions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extract 3 high-value CPU/RAM optimizations from perf branch: 1. estimateSizeFast() — fast object-tree size estimator replacing JSON.stringify().length in isSmallEnoughForSemanticCache(). Walks object tree with a stack, zero string allocation, early exit at 256KB. 2. Consolidate settings reads — move getCachedSettings() to a single early read in handleChatCore(), eliminating a redundant second read 200 lines later. Also removes the isDetailedLoggingEnabled() wrapper call (reads settings internally) in favor of direct field check. 3. Registry Proxy→direct export — convert 8 registries from lazy Proxy+getOrCreate pattern to simple exported const objects. Eliminates Proxy trap overhead on every provider property access during routing. Affected: audio, embedding, image, moderation, music, rerank, search, video registries (-451 lines of Proxy boilerplate). These changes are independent of the CPU leak fix (limiter eviction) and complement it by reducing per-request CPU overhead. --- open-sse/config/audioRegistry.ts | 110 +++----------------------- open-sse/config/embeddingRegistry.ts | 51 +----------- open-sse/config/imageRegistry.ts | 53 ++----------- open-sse/config/moderationRegistry.ts | 60 +++----------- open-sse/config/musicRegistry.ts | 62 +++------------ open-sse/config/rerankRegistry.ts | 51 +----------- open-sse/config/searchRegistry.ts | 58 ++------------ open-sse/config/videoRegistry.ts | 62 +++------------ open-sse/handlers/chatCore.ts | 41 ++++++++-- 9 files changed, 97 insertions(+), 451 deletions(-) diff --git a/open-sse/config/audioRegistry.ts b/open-sse/config/audioRegistry.ts index dc84b12305..338b6fb485 100644 --- a/open-sse/config/audioRegistry.ts +++ b/open-sse/config/audioRegistry.ts @@ -22,11 +22,7 @@ export interface AudioProvider { models: AudioModel[]; } -let _AUDIO_TRANSCRIPTION_PROVIDERS: Record | null = null; - -function getOrCreateTranscriptionProviders(): Record { - if (!_AUDIO_TRANSCRIPTION_PROVIDERS) { - _AUDIO_TRANSCRIPTION_PROVIDERS = { +export const AUDIO_TRANSCRIPTION_PROVIDERS: Record = { openai: { id: "openai", baseUrl: "https://api.openai.com/v1/audio/transcriptions", @@ -149,56 +145,9 @@ function getOrCreateTranscriptionProviders(): Record { { id: "elevenlabs/audio-isolation", name: "ElevenLabs Audio Isolation" }, ], }, - }; -} - return _AUDIO_TRANSCRIPTION_PROVIDERS; -} +}; -export const AUDIO_TRANSCRIPTION_PROVIDERS: Record = new Proxy({} as Record, { - get(target, key: string) { - if (key in target) { - return target[key]; - } - return getOrCreateTranscriptionProviders()[key]; - }, - set(target, key: string, value) { - target[key] = value; - getOrCreateTranscriptionProviders()[key] = value; - return true; - }, - deleteProperty(target, key: string) { - delete target[key]; - delete getOrCreateTranscriptionProviders()[key]; - return true; - }, - ownKeys(target) { - const targetKeys = Reflect.ownKeys(target); - const registryKeys = Reflect.ownKeys(getOrCreateTranscriptionProviders()); - return Array.from(new Set([...targetKeys, ...registryKeys])); - }, - has(target, key) { - return key in target || key in getOrCreateTranscriptionProviders(); - }, - getOwnPropertyDescriptor(target, key) { - if (key in target) { - return Reflect.getOwnPropertyDescriptor(target, key); - } - if (key in getOrCreateTranscriptionProviders()) { - return { configurable: true, enumerable: true, value: getOrCreateTranscriptionProviders()[key as string] }; - } - return undefined; - }, -}); - -export function getTranscriptionProviders(): Record { - return AUDIO_TRANSCRIPTION_PROVIDERS; -} - -let _AUDIO_SPEECH_PROVIDERS: Record | null = null; - -function getOrCreateSpeechProviders(): Record { - if (!_AUDIO_SPEECH_PROVIDERS) { - _AUDIO_SPEECH_PROVIDERS = { +export const AUDIO_SPEECH_PROVIDERS: Record = { openai: { id: "openai", baseUrl: "https://api.openai.com/v1/audio/speech", @@ -418,57 +367,22 @@ function getOrCreateSpeechProviders(): Record { { id: "mimo-v2.5-tts-voiceclone", name: "MiMo V2.5 Voice Clone" }, ], }, - }; -} - return _AUDIO_SPEECH_PROVIDERS; -} - -export const AUDIO_SPEECH_PROVIDERS: Record = new Proxy({} as Record, { - get(target, key: string) { - if (key in target) { - return target[key]; - } - return getOrCreateSpeechProviders()[key]; - }, - set(target, key: string, value) { - target[key] = value; - getOrCreateSpeechProviders()[key] = value; - return true; - }, - deleteProperty(target, key: string) { - delete target[key]; - delete getOrCreateSpeechProviders()[key]; - return true; - }, - ownKeys(target) { - const targetKeys = Reflect.ownKeys(target); - const registryKeys = Reflect.ownKeys(getOrCreateSpeechProviders()); - return Array.from(new Set([...targetKeys, ...registryKeys])); - }, - has(target, key) { - return key in target || key in getOrCreateSpeechProviders(); - }, - getOwnPropertyDescriptor(target, key) { - if (key in target) { - return Reflect.getOwnPropertyDescriptor(target, key); - } - if (key in getOrCreateSpeechProviders()) { - return { configurable: true, enumerable: true, value: getOrCreateSpeechProviders()[key as string] }; - } - return undefined; - }, -}); - -export function getSpeechProviders(): Record { - return AUDIO_SPEECH_PROVIDERS; -} +}; +/** + * Get transcription provider config by ID + */ export function getTranscriptionProvider(providerId: string): AudioProvider | null { return AUDIO_TRANSCRIPTION_PROVIDERS[providerId] || null; } + +/** + * Get speech provider config by ID + */ export function getSpeechProvider(providerId: string): AudioProvider | null { return AUDIO_SPEECH_PROVIDERS[providerId] || null; } + export interface ProviderNodeRow { prefix: string; name: string; diff --git a/open-sse/config/embeddingRegistry.ts b/open-sse/config/embeddingRegistry.ts index 1053bb6f02..69994c323a 100644 --- a/open-sse/config/embeddingRegistry.ts +++ b/open-sse/config/embeddingRegistry.ts @@ -45,11 +45,7 @@ export function buildDynamicEmbeddingProvider(node: EmbeddingProviderNodeRow): E }; } -let _EMBEDDING_PROVIDERS: Record | null = null; - -function getOrCreateEmbeddingProviders(): Record { - if (!_EMBEDDING_PROVIDERS) { - _EMBEDDING_PROVIDERS = { +export const EMBEDDING_PROVIDERS: Record = { cohere: { id: "cohere", baseUrl: "https://api.cohere.com/v2/embed", @@ -237,50 +233,7 @@ function getOrCreateEmbeddingProviders(): Record { { id: "jina-colbert-v2", name: "Jina ColBERT v2", dimensions: 128 }, ], }, - }; - } - return _EMBEDDING_PROVIDERS; -} - -export const EMBEDDING_PROVIDERS: Record = new Proxy({} as Record, { - get(target, key: string) { - if (key in target) { - return target[key]; - } - return getOrCreateEmbeddingProviders()[key]; - }, - set(target, key: string, value) { - target[key] = value; - getOrCreateEmbeddingProviders()[key] = value; - return true; - }, - deleteProperty(target, key: string) { - delete target[key]; - delete getOrCreateEmbeddingProviders()[key]; - return true; - }, - ownKeys(target) { - const targetKeys = Reflect.ownKeys(target); - const registryKeys = Reflect.ownKeys(getOrCreateEmbeddingProviders()); - return Array.from(new Set([...targetKeys, ...registryKeys])); - }, - has(target, key) { - return key in target || key in getOrCreateEmbeddingProviders(); - }, - getOwnPropertyDescriptor(target, key) { - if (key in target) { - return Reflect.getOwnPropertyDescriptor(target, key); - } - if (key in getOrCreateEmbeddingProviders()) { - return { configurable: true, enumerable: true, value: getOrCreateEmbeddingProviders()[key as string] }; - } - return undefined; - }, -}); - -export function getEmbeddingProviders(): Record { - return EMBEDDING_PROVIDERS; -} +}; const EMBEDDING_PROVIDER_ALIASES: Record = { jina: "jina-ai", diff --git a/open-sse/config/imageRegistry.ts b/open-sse/config/imageRegistry.ts index d37aa2c509..a32ce55638 100644 --- a/open-sse/config/imageRegistry.ts +++ b/open-sse/config/imageRegistry.ts @@ -112,11 +112,7 @@ function findImageModelConfig(providerId, modelId) { return provider.models.find((model) => model.id === modelId) || null; } -let _IMAGE_PROVIDERS: Record | null = null; - -function getOrCreateImageProviders(): Record { - if (!_IMAGE_PROVIDERS) { - _IMAGE_PROVIDERS = { +export const IMAGE_PROVIDERS: Record = { openai: { id: "openai", baseUrl: "https://api.openai.com/v1/images/generations", @@ -544,53 +540,14 @@ function getOrCreateImageProviders(): Record { supportedSizes: ["1024x1024", "1024x1280", "1280x1024"], }, }; -} -return _IMAGE_PROVIDERS; -} - -export function getImageProviders(): Record { - return IMAGE_PROVIDERS; -} - -export const IMAGE_PROVIDERS = new Proxy({} as Record, { - get(target, key: string) { - if (key in target) { - return target[key]; - } - return getOrCreateImageProviders()[key]; - }, - set(target, key: string, value) { - target[key] = value; - getOrCreateImageProviders()[key] = value; - return true; - }, - deleteProperty(target, key: string) { - delete target[key]; - delete getOrCreateImageProviders()[key]; - return true; - }, - ownKeys(target) { - const targetKeys = Reflect.ownKeys(target); - const registryKeys = Reflect.ownKeys(getOrCreateImageProviders()); - return Array.from(new Set([...targetKeys, ...registryKeys])); - }, - has(target, key) { - return key in target || key in getOrCreateImageProviders(); - }, - getOwnPropertyDescriptor(target, key) { - if (key in target) { - return Reflect.getOwnPropertyDescriptor(target, key); - } - if (key in getOrCreateImageProviders()) { - return { configurable: true, enumerable: true, value: getOrCreateImageProviders()[key as string] }; - } - return undefined; - }, -}); +/** + * Get image provider config by ID + */ export function getImageProvider(providerId) { return IMAGE_PROVIDERS[providerId] || null; } + /** * Parse image model string (format: "provider/model") * Returns { provider, model } diff --git a/open-sse/config/moderationRegistry.ts b/open-sse/config/moderationRegistry.ts index 7ff3ff8db5..4a3f621998 100644 --- a/open-sse/config/moderationRegistry.ts +++ b/open-sse/config/moderationRegistry.ts @@ -5,11 +5,7 @@ * Follows OpenAI's moderation API format. */ -let _MODERATION_PROVIDERS: Record | null = null; - -function getOrCreateModerationProviders(): Record { - if (!_MODERATION_PROVIDERS) { - _MODERATION_PROVIDERS = { +export const MODERATION_PROVIDERS = { openai: { id: "openai", baseUrl: "https://api.openai.com/v1/moderations", @@ -20,55 +16,18 @@ function getOrCreateModerationProviders(): Record { { id: "text-moderation-latest", name: "Text Moderation Latest" }, ], }, - }; - } - return _MODERATION_PROVIDERS; -} - -export const MODERATION_PROVIDERS = new Proxy({} as Record, { - get(target, key: string) { - if (key in target) { - return target[key]; - } - return getOrCreateModerationProviders()[key]; - }, - set(target, key: string, value) { - target[key] = value; - getOrCreateModerationProviders()[key] = value; - return true; - }, - deleteProperty(target, key: string) { - delete target[key]; - delete getOrCreateModerationProviders()[key]; - return true; - }, - ownKeys(target) { - const targetKeys = Reflect.ownKeys(target); - const registryKeys = Reflect.ownKeys(getOrCreateModerationProviders()); - return Array.from(new Set([...targetKeys, ...registryKeys])); - }, - has(target, key) { - return key in target || key in getOrCreateModerationProviders(); - }, - getOwnPropertyDescriptor(target, key) { - if (key in target) { - return Reflect.getOwnPropertyDescriptor(target, key); - } - if (key in getOrCreateModerationProviders()) { - return { configurable: true, enumerable: true, value: getOrCreateModerationProviders()[key as string] }; - } - return undefined; - }, -}); - -export function getModerationProviders(): Record { - return MODERATION_PROVIDERS; -} +}; +/** + * Get moderation provider config by ID + */ export function getModerationProvider(providerId) { return MODERATION_PROVIDERS[providerId] || null; } +/** + * Parse moderation model string + */ export function parseModerationModel(modelStr) { if (!modelStr) return { provider: null, model: null }; @@ -87,6 +46,9 @@ export function parseModerationModel(modelStr) { return { provider: null, model: modelStr }; } +/** + * Get all moderation models as a flat list + */ export function getAllModerationModels() { const models = []; for (const [providerId, config] of Object.entries(MODERATION_PROVIDERS)) { diff --git a/open-sse/config/musicRegistry.ts b/open-sse/config/musicRegistry.ts index 492eb444bb..7ca68d5891 100644 --- a/open-sse/config/musicRegistry.ts +++ b/open-sse/config/musicRegistry.ts @@ -23,11 +23,7 @@ interface MusicProvider { models: MusicModel[]; } -let _MUSIC_PROVIDERS: Record | null = null; - -function getOrCreateMusicProviders(): Record { - if (!_MUSIC_PROVIDERS) { - _MUSIC_PROVIDERS = { +export const MUSIC_PROVIDERS: Record = { kie: { id: "kie", baseUrl: "https://api.kie.ai", @@ -86,59 +82,25 @@ function getOrCreateMusicProviders(): Record { { id: "musicgen-medium", name: "MusicGen Medium" }, ], }, - }; -} - return _MUSIC_PROVIDERS; -} - -export const MUSIC_PROVIDERS: Record = new Proxy({} as Record, { - get(target, key: string) { - if (key in target) { - return target[key]; - } - return getOrCreateMusicProviders()[key]; - }, - set(target, key: string, value) { - target[key] = value; - getOrCreateMusicProviders()[key] = value; - return true; - }, - deleteProperty(target, key: string) { - delete target[key]; - delete getOrCreateMusicProviders()[key]; - return true; - }, - ownKeys(target) { - const targetKeys = Reflect.ownKeys(target); - const registryKeys = Reflect.ownKeys(getOrCreateMusicProviders()); - return Array.from(new Set([...targetKeys, ...registryKeys])); - }, - has(target, key) { - return key in target || key in getOrCreateMusicProviders(); - }, - getOwnPropertyDescriptor(target, key) { - if (key in target) { - return Reflect.getOwnPropertyDescriptor(target, key); - } - if (key in getOrCreateMusicProviders()) { - return { configurable: true, enumerable: true, value: getOrCreateMusicProviders()[key as string] }; - } - return undefined; - }, -}); - -export function getMusicProviders(): Record { - return MUSIC_PROVIDERS; -} +}; +/** + * Get music provider config by ID + */ export function getMusicProvider(providerId: string): MusicProvider | null { return MUSIC_PROVIDERS[providerId] || null; } +/** + * Parse music model string (format: "provider/model" or just "model") + */ export function parseMusicModel(modelStr: string | null) { return parseModelFromRegistry(modelStr, MUSIC_PROVIDERS); } +/** + * Get all music models as a flat list + */ export function getAllMusicModels() { return getAllModelsFromRegistry(MUSIC_PROVIDERS); -} \ No newline at end of file +} diff --git a/open-sse/config/rerankRegistry.ts b/open-sse/config/rerankRegistry.ts index 431afcf6ca..bf14c0cc23 100644 --- a/open-sse/config/rerankRegistry.ts +++ b/open-sse/config/rerankRegistry.ts @@ -8,11 +8,7 @@ * keyed by provider ID (e.g. "cohere", "together"). */ -let _RERANK_PROVIDERS: Record | null = null; - -function getOrCreateRerankProviders(): Record { - if (!_RERANK_PROVIDERS) { - _RERANK_PROVIDERS = { +export const RERANK_PROVIDERS = { cohere: { id: "cohere", baseUrl: "https://api.cohere.com/v2/rerank", @@ -75,50 +71,7 @@ function getOrCreateRerankProviders(): Record { { id: "jina-reranker-m0", name: "Jina Reranker m0" }, ], }, - }; -} - return _RERANK_PROVIDERS; -} - -export const RERANK_PROVIDERS = new Proxy({} as Record, { - get(target, key: string) { - if (key in target) { - return target[key]; - } - return getOrCreateRerankProviders()[key]; - }, - set(target, key: string, value) { - target[key] = value; - getOrCreateRerankProviders()[key] = value; - return true; - }, - deleteProperty(target, key: string) { - delete target[key]; - delete getOrCreateRerankProviders()[key]; - return true; - }, - ownKeys(target) { - const targetKeys = Reflect.ownKeys(target); - const registryKeys = Reflect.ownKeys(getOrCreateRerankProviders()); - return Array.from(new Set([...targetKeys, ...registryKeys])); - }, - has(target, key) { - return key in target || key in getOrCreateRerankProviders(); - }, - getOwnPropertyDescriptor(target, key) { - if (key in target) { - return Reflect.getOwnPropertyDescriptor(target, key); - } - if (key in getOrCreateRerankProviders()) { - return { configurable: true, enumerable: true, value: getOrCreateRerankProviders()[key as string] }; - } - return undefined; - }, -}); - -export function getRerankProviders(): Record { - return RERANK_PROVIDERS; -} +}; const RERANK_PROVIDER_ALIASES = { jina: "jina-ai", diff --git a/open-sse/config/searchRegistry.ts b/open-sse/config/searchRegistry.ts index b33239a559..724d349525 100644 --- a/open-sse/config/searchRegistry.ts +++ b/open-sse/config/searchRegistry.ts @@ -26,11 +26,7 @@ export interface SearchProviderConfig { cacheTTLMs: number; } -let _SEARCH_PROVIDERS: Record | null = null; - -function getOrCreateSearchProviders(): Record { - if (!_SEARCH_PROVIDERS) { - _SEARCH_PROVIDERS = { +export const SEARCH_PROVIDERS: Record = { "serper-search": { id: "serper-search", name: "Serper Search", @@ -222,52 +218,14 @@ function getOrCreateSearchProviders(): Record { timeoutMs: 10_000, cacheTTLMs: 5 * 60 * 1000, }, - }; -} - return _SEARCH_PROVIDERS; -} +}; -export const SEARCH_PROVIDERS: Record = new Proxy({} as Record, { - get(target, key: string) { - if (key in target) { - return target[key]; - } - return getOrCreateSearchProviders()[key]; - }, - set(target, key: string, value) { - target[key] = value; - getOrCreateSearchProviders()[key] = value; - return true; - }, - deleteProperty(target, key: string) { - delete target[key]; - delete getOrCreateSearchProviders()[key]; - return true; - }, - ownKeys(target) { - const targetKeys = Reflect.ownKeys(target); - const registryKeys = Reflect.ownKeys(getOrCreateSearchProviders()); - return Array.from(new Set([...targetKeys, ...registryKeys])); - }, - has(target, key) { - return key in target || key in getOrCreateSearchProviders(); - }, - getOwnPropertyDescriptor(target, key) { - if (key in target) { - return Reflect.getOwnPropertyDescriptor(target, key); - } - if (key in getOrCreateSearchProviders()) { - return { configurable: true, enumerable: true, value: getOrCreateSearchProviders()[key as string] }; - } - return undefined; - }, -}); - -export function getSearchProviders(): Record { - return SEARCH_PROVIDERS; -} - -export const SEARCH_CREDENTIAL_FALLBACKS: Record = { "perplexity-search": "perplexity", +/** + * Credential fallback mapping — search providers that can reuse credentials + * from a related provider (e.g., perplexity-search uses the same API key as perplexity chat). + */ +export const SEARCH_CREDENTIAL_FALLBACKS: Record = { + "perplexity-search": "perplexity", "ollama-search": "ollama-cloud", "zai-search": "zai", }; diff --git a/open-sse/config/videoRegistry.ts b/open-sse/config/videoRegistry.ts index 4a0da6d253..b876bb0b6e 100644 --- a/open-sse/config/videoRegistry.ts +++ b/open-sse/config/videoRegistry.ts @@ -24,11 +24,7 @@ interface VideoProvider { models: VideoModel[]; } -let _VIDEO_PROVIDERS: Record | null = null; - -function getOrCreateVideoProviders(): Record { - if (!_VIDEO_PROVIDERS) { - _VIDEO_PROVIDERS = { +export const VIDEO_PROVIDERS: Record = { kie: { id: "kie", baseUrl: "https://api.kie.ai", @@ -152,59 +148,25 @@ function getOrCreateVideoProviders(): Record { format: "runwayml", models: RUNWAYML_SUPPORTED_VIDEO_MODELS, }, - }; -} - return _VIDEO_PROVIDERS; -} - -export const VIDEO_PROVIDERS: Record = new Proxy({} as Record, { - get(target, key: string) { - if (key in target) { - return target[key]; - } - return getOrCreateVideoProviders()[key]; - }, - set(target, key: string, value) { - target[key] = value; - getOrCreateVideoProviders()[key] = value; - return true; - }, - deleteProperty(target, key: string) { - delete target[key]; - delete getOrCreateVideoProviders()[key]; - return true; - }, - ownKeys(target) { - const targetKeys = Reflect.ownKeys(target); - const registryKeys = Reflect.ownKeys(getOrCreateVideoProviders()); - return Array.from(new Set([...targetKeys, ...registryKeys])); - }, - has(target, key) { - return key in target || key in getOrCreateVideoProviders(); - }, - getOwnPropertyDescriptor(target, key) { - if (key in target) { - return Reflect.getOwnPropertyDescriptor(target, key); - } - if (key in getOrCreateVideoProviders()) { - return { configurable: true, enumerable: true, value: getOrCreateVideoProviders()[key as string] }; - } - return undefined; - }, -}); - -export function getVideoProviders(): Record { - return VIDEO_PROVIDERS; -} +}; +/** + * Get video provider config by ID + */ export function getVideoProvider(providerId: string): VideoProvider | null { return VIDEO_PROVIDERS[providerId] || null; } +/** + * Parse video model string (format: "provider/model" or just "model") + */ export function parseVideoModel(modelStr: string | null) { return parseModelFromRegistry(modelStr, VIDEO_PROVIDERS); } +/** + * Get all video models as a flat list + */ export function getAllVideoModels() { return getAllModelsFromRegistry(VIDEO_PROVIDERS); -} \ No newline at end of file +} diff --git a/open-sse/handlers/chatCore.ts b/open-sse/handlers/chatCore.ts index 36dfb78f5e..78e4f11817 100644 --- a/open-sse/handlers/chatCore.ts +++ b/open-sse/handlers/chatCore.ts @@ -68,7 +68,7 @@ import { connectionHasExtraKeys, type KeyHealth, } from "../services/apiKeyRotator.ts"; -import { isDetailedLoggingEnabled } from "@/lib/db/detailedLogs"; + import { getCallLogPipelineCaptureStreamChunks, getChatLogTextLimit, @@ -277,12 +277,32 @@ function cloneBoundedChatLogPayload(value: unknown, depth = 0): unknown { return result; } -function isSmallEnoughForSemanticCache(value: unknown): boolean { - try { - return JSON.stringify(value).length <= 256 * 1024; - } catch { - return false; +/** Fast size estimator — walks object tree without JSON.stringify */ +function estimateSizeFast(value: unknown): number { + let bytes = 0; + const stack: unknown[] = [value]; + while (stack.length > 0) { + const v = stack.pop(); + if (v === null || v === undefined) continue; + if (typeof v === "string") { + bytes += v.length; + if (bytes > 262144) return bytes; + } else if (typeof v === "number") bytes += 8; + else if (typeof v === "boolean") bytes += 4; + else if (typeof v === "object") { + if (Array.isArray(v)) { + for (let i = 0; i < v.length; i++) stack.push(v[i]); + } else { + const vals = Object.values(v); + for (let i = 0; i < vals.length; i++) stack.push(vals[i]); + } + } } + return bytes; +} + +function isSmallEnoughForSemanticCache(value: unknown): boolean { + return estimateSizeFast(value) <= 256 * 1024; } function extractMemoryTextFromResponse( @@ -1915,7 +1935,13 @@ export async function handleChatCore({ ); } const noLogEnabled = apiKeyInfo?.noLog === true; - const detailedLoggingEnabled = !noLogEnabled && (await isDetailedLoggingEnabled()); + // Consolidate settings reads — fetch once, reuse throughout the request + const settings = cachedSettings ?? (await getCachedSettings()); + const detailedLoggingEnabled = + !noLogEnabled && + (settings.call_log_pipeline_enabled === true || + settings.call_log_pipeline_enabled === "1" || + settings.call_log_pipeline_enabled === "true"); const capturePipelineStreamChunks = detailedLoggingEnabled && getCallLogPipelineCaptureStreamChunks(); const skillRequestId = generateRequestId(); @@ -2134,7 +2160,6 @@ export async function handleChatCore({ nativeCodexPassthrough && isCompactResponsesEndpoint(endpointPath) ? false : resolveStreamFlag(body?.stream, acceptHeader, sourceFormat); - const settings = cachedSettings ?? (await getCachedSettings()); credentials = applyCodexGlobalFastServiceTier(provider, credentials, settings, { model: requestedModel, body: body && typeof body === "object" ? (body as Record) : null,