From 38a3cafe20494a2ec1f5d98a6dfe5affeb777868 Mon Sep 17 00:00:00 2001 From: jiangwel Date: Mon, 27 Oct 2025 11:17:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(AzureOpenAI):=20=E6=B7=BB=E5=8A=A0reso?= =?UTF-8?q?urce=5Fname=E5=AD=97=E6=AE=B5=E6=94=AF=E6=8C=81Azure=20OpenAI?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在Azure OpenAI集成中添加resource_name字段用于指定资源名称,并自动生成base_url。同时禁用AzureOpenAI提供商的urlWrite选项,强制使用资源名称生成URL。添加相关表单验证和自动填充逻辑。 --- ui/ModelModal/src/ModelModal.tsx | 52 ++++++++++++++++++++++++ ui/ModelModal/src/constants/providers.ts | 2 +- ui/ModelModal/src/types/types.ts | 1 + 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/ui/ModelModal/src/ModelModal.tsx b/ui/ModelModal/src/ModelModal.tsx index e2d480d..ca83547 100644 --- a/ui/ModelModal/src/ModelModal.tsx +++ b/ui/ModelModal/src/ModelModal.tsx @@ -115,6 +115,7 @@ export const ModelModal: React.FC = ({ api_version: '', api_header_key: '', api_header_value: '', + resource_name: '', // 重置高级设置 context_window_size: 64000, max_output_tokens: 8192, @@ -157,6 +158,14 @@ export const ModelModal: React.FC = ({ return forceUseOriginalHost() ? baseUrl : `${baseUrl}/v1`; }; + // 从Azure OpenAI base_url中提取resource_name + const extractResourceNameFromUrl = (baseUrl: string): string => { + if (!baseUrl) return ''; + // 匹配 https://.openai.azure.com 格式 + const match = baseUrl.match(/https:\/\/([^.]+)\.openai\.azure\.com/); + return match ? match[1] : ''; + }; + const getModel = (value: AddModelForm) => { let header = ''; if (value.api_header_key && value.api_header_value) { @@ -337,6 +346,7 @@ export const ModelModal: React.FC = ({ api_header_value: value.api_header?.split('=')[1] || '', model_type, show_name: value.show_name || '', + resource_name: value.provider === 'AzureOpenAI' ? extractResourceNameFromUrl(value.base_url || '') : '', context_window_size: 64000, max_output_tokens: 8192, enable_r1_params: false, @@ -355,6 +365,7 @@ export const ModelModal: React.FC = ({ api_header_key: value.api_header?.split('=')[0] || '', api_header_value: value.api_header?.split('=')[1] || '', show_name: value.show_name || '', + resource_name: value.provider === 'AzureOpenAI' ? extractResourceNameFromUrl(value.base_url || '') : '', context_window_size: value.param?.context_window || 64000, max_output_tokens: value.param?.max_tokens || 8192, enable_r1_params: value.param?.r1_enabled || false, @@ -379,6 +390,7 @@ export const ModelModal: React.FC = ({ api_header_key: '', api_header_value: '', show_name: '', + resource_name: '', // 高级设置默认值 context_window_size: 64000, max_output_tokens: 8192, @@ -533,6 +545,7 @@ export const ModelModal: React.FC = ({ api_header_key: '', api_header_value: '', show_name: '', + resource_name: '', // 重置高级设置 context_window_size: 64000, max_output_tokens: 8192, @@ -765,6 +778,45 @@ export const ModelModal: React.FC = ({ )} {providerBrand === 'AzureOpenAI' && ( <> + + Resource Name + + * + + + ( + { + field.onChange(e.target.value); + // 动态更新base_url + const resourceName = e.target.value; + if (resourceName) { + setValue('base_url', `https://${resourceName}.openai.azure.com`); + } else { + setValue('base_url', ''); + } + setModelUserList([]); + setValue('model_name', ''); + setSuccess(false); + setAddModelError(''); + }} + /> + )} + /> API Version diff --git a/ui/ModelModal/src/constants/providers.ts b/ui/ModelModal/src/constants/providers.ts index 411bd70..b70b32d 100644 --- a/ui/ModelModal/src/constants/providers.ts +++ b/ui/ModelModal/src/constants/providers.ts @@ -166,7 +166,7 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { label: 'AzureOpenAI', cn: 'Azure OpenAI', icon: 'ikun-azure', - urlWrite: true, + urlWrite: false, secretRequired: true, customHeader: false, chat: true, diff --git a/ui/ModelModal/src/types/types.ts b/ui/ModelModal/src/types/types.ts index b4b5330..321ec17 100644 --- a/ui/ModelModal/src/types/types.ts +++ b/ui/ModelModal/src/types/types.ts @@ -147,6 +147,7 @@ export interface AddModelForm { model_type: string; show_name: string; api_header: string; + resource_name: string; // Azure OpenAI resource name // 高级设置字段 context_window_size: number; max_output_tokens: number; From 6714f8b679d1f7dbb8749e0dbfb8367619a0b23a Mon Sep 17 00:00:00 2001 From: jiangwel Date: Mon, 27 Oct 2025 11:24:50 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(=E6=A8=A1=E5=9E=8B=E5=BC=B9=E7=AA=97):?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=E6=A8=A1=E5=9E=8B=E6=95=99=E7=A8=8B?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E5=AD=97=E6=AE=B5=E5=B9=B6=E5=9C=A8UI?= =?UTF-8?q?=E4=B8=AD=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为模型提供商配置添加addingModelTutorial字段,用于存储添加模型的教程链接 在API地址输入框旁添加教程链接按钮,点击可跳转到对应教程页面 --- ui/ModelModal/src/ModelModal.tsx | 36 ++++++++++++++++++++---- ui/ModelModal/src/constants/providers.ts | 4 +++ ui/ModelModal/src/types/types.ts | 1 + 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/ui/ModelModal/src/ModelModal.tsx b/ui/ModelModal/src/ModelModal.tsx index ca83547..40ea240 100644 --- a/ui/ModelModal/src/ModelModal.tsx +++ b/ui/ModelModal/src/ModelModal.tsx @@ -584,12 +584,38 @@ export const ModelModal: React.FC = ({ }, }} > - - API 地址{' '} - - * + + + API 地址{' '} + + * + - + {providers[providerBrand].addingModelTutorial && ( + + window.open( + providers[providerBrand].addingModelTutorial, + '_blank' + ) + } + > + 添加模型教程 + + )} +