Files
CC-Switch/src/config/codexProviderPresets.ts
T
Jason 254896e5eb feat(providers): add DMXAPI provider and refine naming
- Add DMXAPI provider for both Claude and Codex
- Rename "Codex Official" to "OpenAI Official" for clarity
- Rename "Azure OpenAI (gpt-5-codex)" to "Azure OpenAI"
- Reorganize AiHubMix position in Claude presets
2025-11-05 14:48:07 +08:00

160 lines
4.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Codex 预设供应商配置模板
*/
import { ProviderCategory } from "../types";
import type { PresetTheme } from "./claudeProviderPresets";
export interface CodexProviderPreset {
name: string;
websiteUrl: string;
// 第三方供应商可提供单独的获取 API Key 链接
apiKeyUrl?: string;
auth: Record<string, any>; // 将写入 ~/.codex/auth.json
config: string; // 将写入 ~/.codex/config.tomlTOML 字符串)
isOfficial?: boolean; // 标识是否为官方预设
category?: ProviderCategory; // 新增:分类
isCustomTemplate?: boolean; // 标识是否为自定义模板
// 新增:请求地址候选列表(用于地址管理/测速)
endpointCandidates?: string[];
// 新增:视觉主题配置
theme?: PresetTheme;
}
/**
* 生成第三方供应商的 auth.json
*/
export function generateThirdPartyAuth(apiKey: string): Record<string, any> {
return {
OPENAI_API_KEY: apiKey || "",
};
}
/**
* 生成第三方供应商的 config.toml
*/
export function generateThirdPartyConfig(
providerName: string,
baseUrl: string,
modelName = "gpt-5-codex",
): string {
// 清理供应商名称,确保符合TOML键名规范
const cleanProviderName =
providerName
.toLowerCase()
.replace(/[^a-z0-9_]/g, "_")
.replace(/^_+|_+$/g, "") || "custom";
return `model_provider = "${cleanProviderName}"
model = "${modelName}"
model_reasoning_effort = "high"
disable_response_storage = true
[model_providers.${cleanProviderName}]
name = "${cleanProviderName}"
base_url = "${baseUrl}"
wire_api = "responses"
requires_openai_auth = true`;
}
export const codexProviderPresets: CodexProviderPreset[] = [
{
name: "OpenAI Official",
websiteUrl: "https://chatgpt.com/codex",
isOfficial: true,
category: "official",
auth: {},
config: ``,
theme: {
icon: "codex",
backgroundColor: "#1F2937", // gray-800
textColor: "#FFFFFF",
},
},
{
name: "Azure OpenAI",
websiteUrl:
"https://learn.microsoft.com/azure/ai-services/openai/how-to/overview",
category: "third_party",
isOfficial: true,
auth: generateThirdPartyAuth(""),
config: `model_provider = "azure"
model = "gpt-5-codex"
model_reasoning_effort = "high"
disable_response_storage = true
[model_providers.azure]
name = "Azure OpenAI"
base_url = "https://YOUR_RESOURCE_NAME.openai.azure.com/openai"
env_key = "OPENAI_API_KEY"
query_params = { "api-version" = "2025-04-01-preview" }
wire_api = "responses"
requires_openai_auth = true`,
endpointCandidates: ["https://YOUR_RESOURCE_NAME.openai.azure.com/openai"],
theme: {
icon: "codex",
backgroundColor: "#0078D4",
textColor: "#FFFFFF",
},
},
{
name: "AiHubMix",
websiteUrl: "https://aihubmix.com",
category: "aggregator",
auth: generateThirdPartyAuth(""),
config: generateThirdPartyConfig(
"aihubmix",
"https://aihubmix.com/v1",
"gpt-5-codex",
),
endpointCandidates: [
"https://aihubmix.com/v1",
"https://api.aihubmix.com/v1",
],
},
{
name: "DMXAPI",
websiteUrl: "https://www.dmxapi.cn",
category: "aggregator",
auth: generateThirdPartyAuth(""),
config: generateThirdPartyConfig(
"dmxapi",
"https://www.dmxapi.cn/v1",
"gpt-5-codex",
),
endpointCandidates: [
"https://www.dmxapi.cn/v1",
],
},
{
name: "PackyCode",
websiteUrl: "https://www.packyapi.com",
category: "third_party",
auth: generateThirdPartyAuth(""),
config: generateThirdPartyConfig(
"packycode",
"https://www.packyapi.com/v1",
"gpt-5-codex",
),
endpointCandidates: [
"https://www.packyapi.com/v1",
"https://api-slb.packyapi.com/v1",
],
},
{
name: "AnyRouter",
websiteUrl: "https://anyrouter.top",
category: "third_party",
auth: generateThirdPartyAuth(""),
config: generateThirdPartyConfig(
"anyrouter",
"https://anyrouter.top/v1",
"gpt-5-codex",
),
endpointCandidates: [
"https://anyrouter.top/v1",
"https://q.quuvv.cn/v1",
"https://pmpjfbhq.cn-nb1.rainapp.top/v1",
],
},
];