Skip to content

Commit aa80060

Browse files
Refactor OpenAI-compatible provider execution into shared core
Consolidate OpenAI-compatible API request handling into a single shared module and route background dispatch through provider registry lookup. This removes duplicated streaming/parsing logic from openai-api and custom-api while keeping existing behavior. Add config migration to preserve existing API keys and custom mode entries by mapping them into providerSecrets and custom provider records. Keep legacy fallbacks for apiMode customUrl/custom apiKey to avoid user-visible regressions during rollout. Normalize apiMode objects at runtime and compare selection using stable identity fields so migrated and legacy session data continue to match correctly.
1 parent b1d6aab commit aa80060

23 files changed

Lines changed: 3855 additions & 461 deletions

src/background/index.mjs

Lines changed: 19 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,10 @@ import {
55
sendMessageFeedback,
66
} from '../services/apis/chatgpt-web'
77
import { generateAnswersWithBingWebApi } from '../services/apis/bing-web.mjs'
8-
import {
9-
generateAnswersWithChatgptApi,
10-
generateAnswersWithGptCompletionApi,
11-
} from '../services/apis/openai-api'
12-
import { generateAnswersWithCustomApi } from '../services/apis/custom-api.mjs'
13-
import { generateAnswersWithOllamaApi } from '../services/apis/ollama-api.mjs'
8+
import { generateAnswersWithOpenAICompatibleApi } from '../services/apis/openai-api'
149
import { generateAnswersWithAzureOpenaiApi } from '../services/apis/azure-openai-api.mjs'
1510
import { generateAnswersWithClaudeApi } from '../services/apis/claude-api.mjs'
16-
import { generateAnswersWithChatGLMApi } from '../services/apis/chatglm-api.mjs'
1711
import { generateAnswersWithWaylaidwandererApi } from '../services/apis/waylaidwanderer-api.mjs'
18-
import { generateAnswersWithOpenRouterApi } from '../services/apis/openrouter-api.mjs'
19-
import { generateAnswersWithAimlApi } from '../services/apis/aiml-api.mjs'
2012
import {
2113
defaultConfig,
2214
getUserConfig,
@@ -52,10 +44,8 @@ import { refreshMenu } from './menus.mjs'
5244
import { registerCommands } from './commands.mjs'
5345
import { generateAnswersWithBardWebApi } from '../services/apis/bard-web.mjs'
5446
import { generateAnswersWithClaudeWebApi } from '../services/apis/claude-web.mjs'
55-
import { generateAnswersWithMoonshotCompletionApi } from '../services/apis/moonshot-api.mjs'
5647
import { generateAnswersWithMoonshotWebApi } from '../services/apis/moonshot-web.mjs'
5748
import { isUsingModelName } from '../utils/model-name-convert.mjs'
58-
import { generateAnswersWithDeepSeekApi } from '../services/apis/deepseek-api.mjs'
5949
import { redactSensitiveFields } from './redact.mjs'
6050

6151
const RECONNECT_CONFIG = {
@@ -346,6 +336,20 @@ function setPortProxy(port, proxyTabId) {
346336
}
347337
}
348338

339+
function isUsingOpenAICompatibleApiSession(session) {
340+
return (
341+
isUsingCustomModel(session) ||
342+
isUsingChatgptApiModel(session) ||
343+
isUsingMoonshotApiModel(session) ||
344+
isUsingChatGLMApiModel(session) ||
345+
isUsingDeepSeekApiModel(session) ||
346+
isUsingOllamaApiModel(session) ||
347+
isUsingOpenRouterApiModel(session) ||
348+
isUsingAimlApiModel(session) ||
349+
isUsingGptCompletionApiModel(session)
350+
)
351+
}
352+
349353
async function executeApi(session, port, config) {
350354
console.log(
351355
`[background] executeApi called for model: ${session.modelName}, apiMode: ${session.apiMode}`,
@@ -361,29 +365,7 @@ async function executeApi(session, port, config) {
361365
)
362366
}
363367
try {
364-
if (isUsingCustomModel(session)) {
365-
console.debug('[background] Using Custom Model API')
366-
if (!session.apiMode)
367-
await generateAnswersWithCustomApi(
368-
port,
369-
session.question,
370-
session,
371-
config.customModelApiUrl.trim() || 'http://localhost:8000/v1/chat/completions',
372-
config.customApiKey,
373-
config.customModelName,
374-
)
375-
else
376-
await generateAnswersWithCustomApi(
377-
port,
378-
session.question,
379-
session,
380-
session.apiMode.customUrl?.trim() ||
381-
config.customModelApiUrl.trim() ||
382-
'http://localhost:8000/v1/chat/completions',
383-
session.apiMode.apiKey?.trim() || config.customApiKey,
384-
session.apiMode.customName,
385-
)
386-
} else if (isUsingChatgptWebModel(session)) {
368+
if (isUsingChatgptWebModel(session)) {
387369
console.debug('[background] Using ChatGPT Web Model')
388370
let tabId
389371
if (
@@ -508,46 +490,15 @@ async function executeApi(session, port, config) {
508490
console.debug('[background] Using Gemini Web Model')
509491
const cookies = await getBardCookies()
510492
await generateAnswersWithBardWebApi(port, session.question, session, cookies)
511-
} else if (isUsingChatgptApiModel(session)) {
512-
console.debug('[background] Using ChatGPT API Model')
513-
await generateAnswersWithChatgptApi(port, session.question, session, config.apiKey)
493+
} else if (isUsingOpenAICompatibleApiSession(session)) {
494+
console.debug('[background] Using OpenAI-compatible API provider')
495+
await generateAnswersWithOpenAICompatibleApi(port, session.question, session, config)
514496
} else if (isUsingClaudeApiModel(session)) {
515497
console.debug('[background] Using Claude API Model')
516498
await generateAnswersWithClaudeApi(port, session.question, session)
517-
} else if (isUsingMoonshotApiModel(session)) {
518-
console.debug('[background] Using Moonshot API Model')
519-
await generateAnswersWithMoonshotCompletionApi(
520-
port,
521-
session.question,
522-
session,
523-
config.moonshotApiKey,
524-
)
525-
} else if (isUsingChatGLMApiModel(session)) {
526-
console.debug('[background] Using ChatGLM API Model')
527-
await generateAnswersWithChatGLMApi(port, session.question, session)
528-
} else if (isUsingDeepSeekApiModel(session)) {
529-
console.debug('[background] Using DeepSeek API Model')
530-
await generateAnswersWithDeepSeekApi(port, session.question, session, config.deepSeekApiKey)
531-
} else if (isUsingOllamaApiModel(session)) {
532-
console.debug('[background] Using Ollama API Model')
533-
await generateAnswersWithOllamaApi(port, session.question, session)
534-
} else if (isUsingOpenRouterApiModel(session)) {
535-
console.debug('[background] Using OpenRouter API Model')
536-
await generateAnswersWithOpenRouterApi(
537-
port,
538-
session.question,
539-
session,
540-
config.openRouterApiKey,
541-
)
542-
} else if (isUsingAimlApiModel(session)) {
543-
console.debug('[background] Using AIML API Model')
544-
await generateAnswersWithAimlApi(port, session.question, session, config.aimlApiKey)
545499
} else if (isUsingAzureOpenAiApiModel(session)) {
546500
console.debug('[background] Using Azure OpenAI API Model')
547501
await generateAnswersWithAzureOpenaiApi(port, session.question, session)
548-
} else if (isUsingGptCompletionApiModel(session)) {
549-
console.debug('[background] Using GPT Completion API Model')
550-
await generateAnswersWithGptCompletionApi(port, session.question, session, config.apiKey)
551502
} else if (isUsingGithubThirdPartyApiModel(session)) {
552503
console.debug('[background] Using Github Third Party API Model')
553504
await generateAnswersWithWaylaidwandererApi(port, session.question, session)

0 commit comments

Comments
 (0)