diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts
index 5f968ac7..8a952075 100644
--- a/frontend/src/i18n/locales/en.ts
+++ b/frontend/src/i18n/locales/en.ts
@@ -2283,6 +2283,8 @@ export default {
webSearchEmulation: 'Web Search Emulation',
webSearchEmulationHint: '⚠️ When enabled, all accounts in this channel\'s Anthropic groups will intercept web_search requests. Use with caution.',
webSearchEmulationGlobalDisabled: 'Please enable the global switch first in Settings → Gateway → Web Search Emulation',
+ codexImageGenerationBridge: 'Codex Image Generation Bridge',
+ codexImageGenerationBridgeHint: 'When enabled, Codex /responses text requests in OpenAI groups may be automatically given the image_generation tool. Keep off unless the routed accounts support image generation.',
basicSettings: 'Basic Settings',
addPlatform: 'Add Platform',
noPlatforms: 'Click "Add Platform" to start configuring the channel',
diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts
index a37a9786..14fe5bbd 100644
--- a/frontend/src/i18n/locales/zh.ts
+++ b/frontend/src/i18n/locales/zh.ts
@@ -2360,6 +2360,8 @@ export default {
webSearchEmulation: 'Web Search 模拟',
webSearchEmulationHint: '⚠️ 开启后该渠道下所有 Anthropic 分组的账号将自动拦截 web_search 请求,请谨慎操作',
webSearchEmulationGlobalDisabled: '请先在系统设置 → 网关 → Web Search 模拟中启用全局开关',
+ codexImageGenerationBridge: 'Codex 图片生成桥接',
+ codexImageGenerationBridgeHint: '开启后,OpenAI 分组的 Codex /responses 文本请求可能会被自动注入 image_generation 工具。仅在路由账号支持图片生成时开启。',
basicSettings: '基础设置',
addPlatform: '添加平台',
noPlatforms: '点击"添加平台"开始配置渠道',
diff --git a/frontend/src/views/admin/ChannelsView.vue b/frontend/src/views/admin/ChannelsView.vue
index e4452b98..89be573e 100644
--- a/frontend/src/views/admin/ChannelsView.vue
+++ b/frontend/src/views/admin/ChannelsView.vue
@@ -339,6 +339,21 @@
+
+
+
+
+
+
+ {{ t('admin.channels.form.codexImageGenerationBridgeHint') }}
+
+
+
+
+
+
@@ -643,6 +658,7 @@ interface PlatformSection {
model_mapping: Record
model_pricing: PricingFormEntry[]
web_search_emulation: boolean
+ codex_image_generation_bridge: boolean
account_stats_pricing_rules: FormPricingRule[]
}
@@ -738,6 +754,7 @@ function addPlatformSection(platform: GroupPlatform) {
model_mapping: {},
model_pricing: [],
web_search_emulation: false,
+ codex_image_generation_bridge: false,
account_stats_pricing_rules: [],
})
}
@@ -1047,6 +1064,19 @@ function formToAPI(): { group_ids: number[], model_pricing: ChannelModelPricing[
delete featuresConfig.web_search_emulation
}
+ const codexImageGenerationBridge: Record = {}
+ for (const section of form.platforms) {
+ if (!section.enabled) continue
+ if (section.platform === 'openai') {
+ codexImageGenerationBridge[section.platform] = !!section.codex_image_generation_bridge
+ }
+ }
+ if (Object.keys(codexImageGenerationBridge).length > 0) {
+ featuresConfig.codex_image_generation_bridge = codexImageGenerationBridge
+ } else {
+ delete featuresConfig.codex_image_generation_bridge
+ }
+
return { group_ids, model_pricing, model_mapping, features_config: featuresConfig }
}
@@ -1095,6 +1125,8 @@ function apiToForm(channel: Channel): PlatformSection[] {
const fc = channel.features_config
const wsEmulation = fc?.web_search_emulation as Record | undefined
const webSearchEnabled = wsEmulation?.[platform] === true
+ const codexImageGenerationBridge = fc?.codex_image_generation_bridge as Record | undefined
+ const codexImageGenerationBridgeEnabled = codexImageGenerationBridge?.[platform] === true
sections.push({
platform,
@@ -1104,6 +1136,7 @@ function apiToForm(channel: Channel): PlatformSection[] {
model_mapping: { ...mapping },
model_pricing: pricing,
web_search_emulation: webSearchEnabled,
+ codex_image_generation_bridge: codexImageGenerationBridgeEnabled,
account_stats_pricing_rules: [],
})
}