Skip to content

Commit fe3461f

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 edebfa2 commit fe3461f

19 files changed

+1243
-430
lines changed

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

6050
const RECONNECT_CONFIG = {
6151
MAX_ATTEMPTS: 5,
@@ -419,6 +409,20 @@ function setPortProxy(port, proxyTabId) {
419409
}
420410
}
421411

412+
function isUsingOpenAICompatibleApiSession(session) {
413+
return (
414+
isUsingCustomModel(session) ||
415+
isUsingChatgptApiModel(session) ||
416+
isUsingMoonshotApiModel(session) ||
417+
isUsingChatGLMApiModel(session) ||
418+
isUsingDeepSeekApiModel(session) ||
419+
isUsingOllamaApiModel(session) ||
420+
isUsingOpenRouterApiModel(session) ||
421+
isUsingAimlApiModel(session) ||
422+
isUsingGptCompletionApiModel(session)
423+
)
424+
}
425+
422426
async function executeApi(session, port, config) {
423427
console.log(
424428
`[background] executeApi called for model: ${session.modelName}, apiMode: ${session.apiMode}`,
@@ -434,29 +438,7 @@ async function executeApi(session, port, config) {
434438
)
435439
}
436440
try {
437-
if (isUsingCustomModel(session)) {
438-
console.debug('[background] Using Custom Model API')
439-
if (!session.apiMode)
440-
await generateAnswersWithCustomApi(
441-
port,
442-
session.question,
443-
session,
444-
config.customModelApiUrl.trim() || 'http://localhost:8000/v1/chat/completions',
445-
config.customApiKey,
446-
config.customModelName,
447-
)
448-
else
449-
await generateAnswersWithCustomApi(
450-
port,
451-
session.question,
452-
session,
453-
session.apiMode.customUrl?.trim() ||
454-
config.customModelApiUrl.trim() ||
455-
'http://localhost:8000/v1/chat/completions',
456-
session.apiMode.apiKey?.trim() || config.customApiKey,
457-
session.apiMode.customName,
458-
)
459-
} else if (isUsingChatgptWebModel(session)) {
441+
if (isUsingChatgptWebModel(session)) {
460442
console.debug('[background] Using ChatGPT Web Model')
461443
let tabId
462444
if (
@@ -581,46 +563,15 @@ async function executeApi(session, port, config) {
581563
console.debug('[background] Using Gemini Web Model')
582564
const cookies = await getBardCookies()
583565
await generateAnswersWithBardWebApi(port, session.question, session, cookies)
584-
} else if (isUsingChatgptApiModel(session)) {
585-
console.debug('[background] Using ChatGPT API Model')
586-
await generateAnswersWithChatgptApi(port, session.question, session, config.apiKey)
566+
} else if (isUsingOpenAICompatibleApiSession(session)) {
567+
console.debug('[background] Using OpenAI-compatible API provider')
568+
await generateAnswersWithOpenAICompatibleApi(port, session.question, session, config)
587569
} else if (isUsingClaudeApiModel(session)) {
588570
console.debug('[background] Using Claude API Model')
589571
await generateAnswersWithClaudeApi(port, session.question, session)
590-
} else if (isUsingMoonshotApiModel(session)) {
591-
console.debug('[background] Using Moonshot API Model')
592-
await generateAnswersWithMoonshotCompletionApi(
593-
port,
594-
session.question,
595-
session,
596-
config.moonshotApiKey,
597-
)
598-
} else if (isUsingChatGLMApiModel(session)) {
599-
console.debug('[background] Using ChatGLM API Model')
600-
await generateAnswersWithChatGLMApi(port, session.question, session)
601-
} else if (isUsingDeepSeekApiModel(session)) {
602-
console.debug('[background] Using DeepSeek API Model')
603-
await generateAnswersWithDeepSeekApi(port, session.question, session, config.deepSeekApiKey)
604-
} else if (isUsingOllamaApiModel(session)) {
605-
console.debug('[background] Using Ollama API Model')
606-
await generateAnswersWithOllamaApi(port, session.question, session)
607-
} else if (isUsingOpenRouterApiModel(session)) {
608-
console.debug('[background] Using OpenRouter API Model')
609-
await generateAnswersWithOpenRouterApi(
610-
port,
611-
session.question,
612-
session,
613-
config.openRouterApiKey,
614-
)
615-
} else if (isUsingAimlApiModel(session)) {
616-
console.debug('[background] Using AIML API Model')
617-
await generateAnswersWithAimlApi(port, session.question, session, config.aimlApiKey)
618572
} else if (isUsingAzureOpenAiApiModel(session)) {
619573
console.debug('[background] Using Azure OpenAI API Model')
620574
await generateAnswersWithAzureOpenaiApi(port, session.question, session)
621-
} else if (isUsingGptCompletionApiModel(session)) {
622-
console.debug('[background] Using GPT Completion API Model')
623-
await generateAnswersWithGptCompletionApi(port, session.question, session, config.apiKey)
624575
} else if (isUsingGithubThirdPartyApiModel(session)) {
625576
console.debug('[background] Using Github Third Party API Model')
626577
await generateAnswersWithWaylaidwandererApi(port, session.question, session)

0 commit comments

Comments
 (0)