codev / src /server /services /openaiOfficialProvider.ts
chenbhao's picture
feat: desktop
1f21206
Raw
History Blame Contribute Delete
2.52 kB
import { OPENAI_CODEX_API_ENDPOINT } from '../../services/openaiAuth/client.js'
import {
OPENAI_CODEX_MODEL_CATALOG,
OPENAI_DEFAULT_HAIKU_MODEL,
OPENAI_DEFAULT_MAIN_MODEL,
OPENAI_DEFAULT_SONNET_MODEL,
getOpenAICodexContextWindowForModel,
} from '../../services/openaiAuth/models.js'
import { MODEL_CONTEXT_WINDOWS_ENV_KEY } from '../../utils/model/modelContextWindows.js'
import { getHahaOpenAIOAuthFilePath } from './hahaOpenAIOAuthService.js'
import type { SavedProvider } from '../types/provider.js'
export const OPENAI_OFFICIAL_PROVIDER_ID = 'openai-official'
export const OPENAI_OFFICIAL_PROVIDER_NAME = 'ChatGPT Official'
export const OPENAI_OAUTH_PROVIDER_ENV_KEY = 'CC_HAHA_OPENAI_OAUTH_PROVIDER'
export const OPENAI_CODEX_OAUTH_FILE_ENV_KEY = 'OPENAI_CODEX_OAUTH_FILE'
export function isOpenAIOfficialProviderId(
id: string | null | undefined,
): boolean {
return id === OPENAI_OFFICIAL_PROVIDER_ID
}
const openAIModels: SavedProvider['models'] = {
main: OPENAI_DEFAULT_MAIN_MODEL,
haiku: OPENAI_DEFAULT_HAIKU_MODEL,
sonnet: OPENAI_DEFAULT_SONNET_MODEL,
opus: OPENAI_DEFAULT_MAIN_MODEL,
}
const modelContextWindows = Object.fromEntries(
OPENAI_CODEX_MODEL_CATALOG.map(
({ value }) =>
[value, getOpenAICodexContextWindowForModel(value)] as const,
)
.filter((entry): entry is readonly [string, number] => entry[1] !== null),
)
export const OPENAI_OFFICIAL_PROVIDER: SavedProvider = {
id: OPENAI_OFFICIAL_PROVIDER_ID,
presetId: OPENAI_OFFICIAL_PROVIDER_ID,
name: OPENAI_OFFICIAL_PROVIDER_NAME,
apiKey: '',
authStrategy: 'dual_dummy',
baseUrl: new URL('/backend-api/codex', OPENAI_CODEX_API_ENDPOINT)
.toString()
.replace(/\/+$/, ''),
apiFormat: 'openai_responses',
runtimeKind: 'openai_oauth',
models: openAIModels,
modelContextWindows,
}
export function buildOpenAIOfficialRuntimeEnv(): Record<string, string> {
const modelContextWindows = OPENAI_OFFICIAL_PROVIDER.modelContextWindows ?? {}
return {
[OPENAI_OAUTH_PROVIDER_ENV_KEY]: '1',
[OPENAI_CODEX_OAUTH_FILE_ENV_KEY]: getHahaOpenAIOAuthFilePath(),
...(Object.keys(modelContextWindows).length > 0 && {
[MODEL_CONTEXT_WINDOWS_ENV_KEY]: JSON.stringify(modelContextWindows),
}),
ANTHROPIC_MODEL: OPENAI_OFFICIAL_PROVIDER.models.main,
ANTHROPIC_DEFAULT_HAIKU_MODEL: OPENAI_OFFICIAL_PROVIDER.models.haiku,
ANTHROPIC_DEFAULT_SONNET_MODEL: OPENAI_OFFICIAL_PROVIDER.models.sonnet,
ANTHROPIC_DEFAULT_OPUS_MODEL: OPENAI_OFFICIAL_PROVIDER.models.opus,
}
}