From a1d59e0db858307c21f6084dad9fa8d9dbec1554 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 27 May 2026 10:55:58 +0800 Subject: [PATCH] chore: harden dynamic provider logging --- lib/ai/dynamic-provider.ts | 175 ++++++++++++++++++---------------- scripts/check-log-hygiene.mjs | 1 + 2 files changed, 93 insertions(+), 83 deletions(-) diff --git a/lib/ai/dynamic-provider.ts b/lib/ai/dynamic-provider.ts index 828c8e3c1..8239c0076 100644 --- a/lib/ai/dynamic-provider.ts +++ b/lib/ai/dynamic-provider.ts @@ -12,6 +12,7 @@ import { getAiModelById, } from "@/lib/db/queries"; import type { AiProvider } from "@/lib/db/schema"; +import { createLogger } from "@/lib/observability/logger"; import { createLocalQwen } from "./providers/local-qwen"; import { createGeminiImage } from "./providers/gemini-image"; import { createHuankeGemini } from "./providers/huanke-gemini"; @@ -39,6 +40,7 @@ import { isBltcyVideoBaseUrl } from "./bltcy-video-models"; // 缓存已创建的 provider 实例 const providerCache = new Map(); +const logger = createLogger("dynamic-provider"); function isVolcanoMultimodalBaseUrl(baseUrl?: string | null) { if (!baseUrl) return false; @@ -49,6 +51,20 @@ function getOpenAICompatibleFetch(baseUrl?: string | null) { return isMoonshotOfficialBaseUrl(baseUrl) ? createMoonshotKimiFetch() : undefined; } +function logProviderCreated(providerType: string, baseUrl?: string | null) { + logger.debug("provider created", { providerType, baseUrl }); +} + +function logChatModelResult(providerType: string, baseModel: unknown) { + logger.debug("chat model resolved", { + providerType, + success: Boolean(baseModel), + modelType: typeof baseModel, + modelKeyCount: + baseModel && typeof baseModel === "object" ? Object.keys(baseModel).length : 0, + }); +} + /** * 根据提供商类型创建对应的 AI Provider 实例 * 不同供应商使用OpenAI兼容的API格式,但可能有细微差异 @@ -80,7 +96,7 @@ function getOrCreateProvider(provider: Pick