Files

1 line
10 KiB
JSON

{"repo": "belongtomachine/my-blog-new", "files": {"lib/ai/providers.ts": {"e85a2884e317a0dd0eb89940b832e8d5646c6eef": {"t": 1785745596.7139482, "n": 1856, "h": "9ed37c6c78458aca", "c": "import { extractReasoningMiddleware, wrapLanguageModel, type LanguageModel } from \"ai\"\nimport { createOpenAI } from \"@ai-sdk/openai\"\n\nexport type AIProvider = \"deepseek\"\n\nconst PROVIDER: AIProvider = \"deepseek\"\nconst THINKING_ENABLED = process.env.AI_THINKING_ENABLED === \"true\"\n\n/* ─── DeepSeek ─── */\n\nconst DEEPSEEK_BASE_URL =\n process.env.DEEPSEEK_BASE_URL || \"https://api.deepseek.com/v1\"\nconst DEEPSEEK_MODEL = \"deepseek-v4-flash\"\n\nfunction getDeepSeekApiKey(): string {\n const key = process.env.DEEPSEEK_API_KEY\n if (!key) throw new Error(\"DEEPSEEK_API_KEY is not configured\")\n return key\n}\n\nfunction createDeepSeekFetch() {\n return async (input: RequestInfo | URL, init?: RequestInit) => {\n if (!init?.body || typeof init.body !== \"string\") {\n return fetch(input, init)\n }\n\n try {\n const body = JSON.parse(init.body) as Record<string, unknown>\n body.thinking = { type: THINKING_ENABLED ? \"enabled\" : \"disabled\" }\n\n if (!THINKING_ENABLED) {\n delete body.reasoning_effort\n }\n\n return fetch(input, {\n ...init,\n body: JSON.stringify(body),\n })\n } catch {\n return fetch(input, init)\n }\n }\n}\n\nfunction createDeepSeekModel(): LanguageModel {\n const deepseek = createOpenAI({\n name: \"deepseek\",\n apiKey: getDeepSeekApiKey(),\n baseURL: DEEPSEEK_BASE_URL,\n fetch: createDeepSeekFetch(),\n })\n\n const baseModel = deepseek.chat(DEEPSEEK_MODEL)\n\n if (!THINKING_ENABLED) {\n return baseModel\n }\n\n return wrapLanguageModel({\n model: baseModel,\n middleware: extractReasoningMiddleware({ tagName: \"think\" }),\n })\n}\n\n/* ─── Factory ─── */\n\nexport function getModel(): LanguageModel {\n return createDeepSeekModel()\n}\n\nexport function getProvider(): AIProvider {\n return PROVIDER\n}\n\nexport function isThinkingEnabled(): boolean {\n return THINKING_ENABLED\n}\n"}, "b49ef1c9d9ae64c3d4889c8582c6c9ef9de96457": {"t": 1785754626.4215064, "n": 1856, "h": "9ed37c6c78458aca", "c": "import { extractReasoningMiddleware, wrapLanguageModel, type LanguageModel } from \"ai\"\nimport { createOpenAI } from \"@ai-sdk/openai\"\n\nexport type AIProvider = \"deepseek\"\n\nconst PROVIDER: AIProvider = \"deepseek\"\nconst THINKING_ENABLED = process.env.AI_THINKING_ENABLED === \"true\"\n\n/* ─── DeepSeek ─── */\n\nconst DEEPSEEK_BASE_URL =\n process.env.DEEPSEEK_BASE_URL || \"https://api.deepseek.com/v1\"\nconst DEEPSEEK_MODEL = \"deepseek-v4-flash\"\n\nfunction getDeepSeekApiKey(): string {\n const key = process.env.DEEPSEEK_API_KEY\n if (!key) throw new Error(\"DEEPSEEK_API_KEY is not configured\")\n return key\n}\n\nfunction createDeepSeekFetch() {\n return async (input: RequestInfo | URL, init?: RequestInit) => {\n if (!init?.body || typeof init.body !== \"string\") {\n return fetch(input, init)\n }\n\n try {\n const body = JSON.parse(init.body) as Record<string, unknown>\n body.thinking = { type: THINKING_ENABLED ? \"enabled\" : \"disabled\" }\n\n if (!THINKING_ENABLED) {\n delete body.reasoning_effort\n }\n\n return fetch(input, {\n ...init,\n body: JSON.stringify(body),\n })\n } catch {\n return fetch(input, init)\n }\n }\n}\n\nfunction createDeepSeekModel(): LanguageModel {\n const deepseek = createOpenAI({\n name: \"deepseek\",\n apiKey: getDeepSeekApiKey(),\n baseURL: DEEPSEEK_BASE_URL,\n fetch: createDeepSeekFetch(),\n })\n\n const baseModel = deepseek.chat(DEEPSEEK_MODEL)\n\n if (!THINKING_ENABLED) {\n return baseModel\n }\n\n return wrapLanguageModel({\n model: baseModel,\n middleware: extractReasoningMiddleware({ tagName: \"think\" }),\n })\n}\n\n/* ─── Factory ─── */\n\nexport function getModel(): LanguageModel {\n return createDeepSeekModel()\n}\n\nexport function getProvider(): AIProvider {\n return PROVIDER\n}\n\nexport function isThinkingEnabled(): boolean {\n return THINKING_ENABLED\n}\n"}, "d731f588683e48b6a52e9be08b7a7c78c065c759": {"t": 1785754631.500726, "n": 1195, "h": "284631b2abca8d49", "c": "import { extractReasoningMiddleware, wrapLanguageModel, type LanguageModel } from \"ai\"\nimport { createOpenAI } from \"@ai-sdk/openai\"\n\nexport type AIProvider = \"deepseek\"\n\nconst PROVIDER: AIProvider = \"deepseek\"\nconst THINKING_ENABLED = process.env.AI_THINKING_ENABLED === \"true\"\n\n/* ─── DeepSeek ─── */\n\nconst DEEPSEEK_BASE_URL =\n process.env.DEEPSEEK_BASE_URL || \"https://api.deepseek.com/v1\"\nconst DEEPSEEK_MODEL = \"deepseek-v4-flash\"\n\nfunction getDeepSeekApiKey(): string {\n const key = process.env.DEEPSEEK_API_KEY\n if (!key) throw new Error(\"DEEPSEEK_API_KEY is not configured\")\n return key\n}\n\nfunction createDeepSeekModel(): LanguageModel {\n const deepseek = createOpenAI({\n name: \"deepseek\",\n apiKey: getDeepSeekApiKey(),\n baseURL: DEEPSEEK_BASE_URL,\n })\n\n const baseModel = deepseek.chat(DEEPSEEK_MODEL)\n\n return wrapLanguageModel({\n model: baseModel,\n middleware: extractReasoningMiddleware({ tagName: \"think\" }),\n })\n}\n\n/* ─── Factory ─── */\n\nexport function getModel(): LanguageModel {\n return createDeepSeekModel()\n}\n\nexport function getProvider(): AIProvider {\n return PROVIDER\n}\n\nexport function isThinkingEnabled(): boolean {\n return THINKING_ENABLED\n}\n"}, "4063fa77193f47a7a5c70ca5edfe708e4f1ce22d": {"t": 1785754633.0320365, "n": 2675, "h": "35eb5c183a4f7b6b", "c": "import { extractReasoningMiddleware, wrapLanguageModel, type LanguageModel } from \"ai\"\nimport { createOpenAI } from \"@ai-sdk/openai\"\n\nexport type AIProvider = \"minimax\" | \"deepseek\"\n\nconst PROVIDER = (process.env.AI_PROVIDER ?? \"minimax\") as AIProvider\nconst THINKING_ENABLED = process.env.AI_THINKING_ENABLED === \"true\"\n\n/* ─── MiniMax ─── */\n\nconst MINIMAX_BASE_URL =\n process.env.MINIMAX_BASE_URL || \"https://api.minimaxi.com/v1\"\nconst MINIMAX_MODEL = process.env.MINIMAX_MODEL || \"MiniMax-M2.5\"\n\nfunction getMiniMaxApiKey(): string {\n const key = process.env.MINIMAX_API_KEY\n if (!key) throw new Error(\"MINIMAX_API_KEY is not configured\")\n return key\n}\n\nfunction createMiniMaxModel(): LanguageModel {\n const minimax = createOpenAI({\n name: \"minimax\",\n apiKey: getMiniMaxApiKey(),\n baseURL: MINIMAX_BASE_URL,\n })\n\n const baseModel = minimax.chat(MINIMAX_MODEL)\n\n return wrapLanguageModel({\n model: baseModel,\n middleware: extractReasoningMiddleware({ tagName: \"think\" }),\n })\n}\n\n/* ─── DeepSeek ─── */\n\nconst DEEPSEEK_BASE_URL =\n process.env.DEEPSEEK_BASE_URL || \"https://api.deepseek.com/v1\"\n\nconst DEEPSEEK_MODEL_ALIASES: Record<string, string> = {\n \"deepseek v3 flash\": \"deepseek-v4-flash\",\n \"deepseek-v3-flash\": \"deepseek-v4-flash\",\n \"deepseek v4 flash\": \"deepseek-v4-flash\",\n \"deepseek v4 pro\": \"deepseek-v4-pro\",\n}\n\nfunction getDeepSeekModel(): string {\n const rawModel = process.env.DEEPSEEK_MODEL?.trim() || \"deepseek-v4-flash\"\n const normalizedModel =\n DEEPSEEK_MODEL_ALIASES[rawModel.toLowerCase()] ?? rawModel\n\n if (normalizedModel !== rawModel) {\n console.warn(\n `[ai] Normalized legacy DeepSeek model \"${rawModel}\" to \"${normalizedModel}\"`,\n )\n }\n\n return normalizedModel\n}\n\nfunction getDeepSeekApiKey(): string {\n const key = process.env.DEEPSEEK_API_KEY\n if (!key) throw new Error(\"DEEPSEEK_API_KEY is not configured\")\n return key\n}\n\nfunction createDeepSeekModel(): LanguageModel {\n const deepseek = createOpenAI({\n name: \"deepseek\",\n apiKey: getDeepSeekApiKey(),\n baseURL: DEEPSEEK_BASE_URL,\n })\n\n const baseModel = deepseek.chat(getDeepSeekModel())\n\n return wrapLanguageModel({\n model: baseModel,\n middleware: extractReasoningMiddleware({ tagName: \"think\" }),\n })\n}\n\n/* ─── Factory ─── */\n\nexport function getModel(): LanguageModel {\n switch (PROVIDER) {\n case \"minimax\":\n return createMiniMaxModel()\n case \"deepseek\":\n return createDeepSeekModel()\n default:\n throw new Error(`Unknown AI provider: ${PROVIDER}`)\n }\n}\n\nexport function getProvider(): AIProvider {\n return PROVIDER\n}\n\nexport function isThinkingEnabled(): boolean {\n return THINKING_ENABLED\n}\n"}, "86155701ee5acb617f9f36d05b595dcaec271c06": {"t": 1785754636.3326466, "n": 1595, "h": "d6f1e26b9300baa1", "c": "import { extractReasoningMiddleware, wrapLanguageModel, type LanguageModel } from \"ai\"\nimport { createOpenAI } from \"@ai-sdk/openai\"\n\nexport type AIProvider = \"minimax\" | \"deepseek\"\n\nconst PROVIDER = (process.env.AI_PROVIDER ?? \"minimax\") as AIProvider\nconst THINKING_ENABLED = process.env.AI_THINKING_ENABLED === \"true\"\n\n/* ─── MiniMax ─── */\n\nconst MINIMAX_BASE_URL =\n process.env.MINIMAX_BASE_URL || \"https://api.minimaxi.com/v1\"\nconst MINIMAX_MODEL = process.env.MINIMAX_MODEL || \"MiniMax-M2.5\"\n\nfunction getMiniMaxApiKey(): string {\n const key = process.env.MINIMAX_API_KEY\n if (!key) throw new Error(\"MINIMAX_API_KEY is not configured\")\n return key\n}\n\nfunction createMiniMaxModel(): LanguageModel {\n const minimax = createOpenAI({\n name: \"minimax\",\n apiKey: getMiniMaxApiKey(),\n baseURL: MINIMAX_BASE_URL,\n })\n\n const baseModel = minimax.chat(MINIMAX_MODEL)\n\n return wrapLanguageModel({\n model: baseModel,\n middleware: extractReasoningMiddleware({ tagName: \"think\" }),\n })\n}\n\n/* ─── DeepSeek (placeholder for future migration) ─── */\n\nfunction createDeepSeekModel(): LanguageModel {\n throw new Error(\"DeepSeek provider is not yet implemented\")\n}\n\n/* ─── Factory ─── */\n\nexport function getModel(): LanguageModel {\n switch (PROVIDER) {\n case \"minimax\":\n return createMiniMaxModel()\n case \"deepseek\":\n return createDeepSeekModel()\n default:\n throw new Error(`Unknown AI provider: ${PROVIDER}`)\n }\n}\n\nexport function getProvider(): AIProvider {\n return PROVIDER\n}\n\nexport function isThinkingEnabled(): boolean {\n return THINKING_ENABLED\n}\n"}}}}