mirror of
https://github.com/langgenius/dify.git
synced 2026-07-20 09:38:32 +08:00
feat: add Responses API tip for GPT-5.6 and later models in multiple languages (#39188)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
38045078dc
commit
2f3c785f27
@ -1,5 +1,6 @@
|
||||
import type * as React from 'react'
|
||||
import type { Credential, CredentialFormSchema, ModelProvider } from '../../declarations'
|
||||
import type { FormSchema } from '@/app/components/base/form/types'
|
||||
import { fireEvent, render, screen, waitFor, within } from '@testing-library/react'
|
||||
import {
|
||||
ConfigurationMethodEnum,
|
||||
@ -125,8 +126,10 @@ vi.mock('@/app/components/base/form/form-scenarios/auth', async () => {
|
||||
const AuthForm = React.forwardRef(
|
||||
(
|
||||
{
|
||||
formSchemas,
|
||||
onChange,
|
||||
}: {
|
||||
formSchemas: FormSchema[]
|
||||
onChange?: (field: string, value: string) => void
|
||||
},
|
||||
ref: React.ForwardedRef<{
|
||||
@ -141,6 +144,12 @@ vi.mock('@/app/components/base/form/form-scenarios/auth', async () => {
|
||||
}))
|
||||
return (
|
||||
<div>
|
||||
{formSchemas.map(
|
||||
(schema) =>
|
||||
typeof schema.description === 'string' && (
|
||||
<div key={schema.name}>{schema.description}</div>
|
||||
),
|
||||
)}
|
||||
<button type="button" onClick={() => onChange?.('__model_name', 'updated-model')}>
|
||||
Model Name Change
|
||||
</button>
|
||||
@ -281,6 +290,61 @@ describe('ModelModal', () => {
|
||||
expect(screen.getByText('common.modelProvider.auth.modelCredential'))!.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should show the Responses API tip only for official OpenAI credential forms', () => {
|
||||
const tip = 'common.modelProvider.auth.openAIResponsesAPITip'
|
||||
mockState.formSchemas = [
|
||||
{ variable: 'api_protocol', type: 'select' } as unknown as CredentialFormSchema,
|
||||
]
|
||||
|
||||
const officialOpenAI = renderModal({
|
||||
provider: createProvider({ provider: 'langgenius/openai/openai' }),
|
||||
})
|
||||
expect(screen.getByText(tip))!.toBeInTheDocument()
|
||||
officialOpenAI.unmount()
|
||||
|
||||
const legacyOpenAI = renderModal()
|
||||
expect(screen.getByText(tip))!.toBeInTheDocument()
|
||||
legacyOpenAI.unmount()
|
||||
|
||||
mockState.formSchemas = []
|
||||
const openAIWithoutProtocolField = renderModal()
|
||||
expect(screen.queryByText(tip)).not.toBeInTheDocument()
|
||||
openAIWithoutProtocolField.unmount()
|
||||
|
||||
mockState.formSchemas = [
|
||||
{ variable: 'api_protocol', type: 'select' } as unknown as CredentialFormSchema,
|
||||
]
|
||||
renderModal({
|
||||
provider: createProvider({ provider: 'langgenius/azure_openai/azure_openai' }),
|
||||
})
|
||||
expect(screen.queryByText(tip)).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should show the Responses API tip when adding a new custom model credential', () => {
|
||||
const tip = 'common.modelProvider.auth.openAIResponsesAPITip'
|
||||
mockState.formSchemas = [
|
||||
{ variable: 'api_protocol', type: 'select' } as unknown as CredentialFormSchema,
|
||||
]
|
||||
const customModel = renderModal({ mode: ModelModalModeEnum.configCustomModel })
|
||||
expect(screen.getByText(tip))!.toBeInTheDocument()
|
||||
customModel.unmount()
|
||||
|
||||
const modelCredential = renderModal({
|
||||
mode: ModelModalModeEnum.configModelCredential,
|
||||
model: { model: 'gpt-5.6', model_type: ModelTypeEnum.textGeneration },
|
||||
})
|
||||
expect(screen.getByText(tip))!.toBeInTheDocument()
|
||||
modelCredential.unmount()
|
||||
|
||||
renderModal({ mode: ModelModalModeEnum.addCustomModelToModelList })
|
||||
|
||||
expect(screen.queryByText(tip)).not.toBeInTheDocument()
|
||||
|
||||
fireEvent.click(screen.getByText('Add New'))
|
||||
|
||||
expect(screen.getByText(tip))!.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should call onCancel when the cancel button is clicked', () => {
|
||||
const { onCancel } = renderModal()
|
||||
|
||||
|
||||
@ -30,6 +30,7 @@ import {
|
||||
import ModelIcon from '@/app/components/header/account-setting/model-provider-page/model-icon'
|
||||
import { useCredentialPermissions } from '@/hooks/use-credential-permissions'
|
||||
import { useRenderI18nObject } from '@/hooks/use-i18n'
|
||||
import { ModelProviderQuotaGetPaid } from '@/types/model-provider'
|
||||
import { ConfigurationMethodEnum, FormTypeEnum, ModelModalModeEnum } from '../declarations'
|
||||
import { useLanguage } from '../hooks'
|
||||
import { CredentialSelector } from '../model-auth'
|
||||
@ -285,6 +286,8 @@ const ModelModal: FC<ModelModalProps> = ({
|
||||
if (getForm()) getForm()?.setFieldValue(field, value)
|
||||
}, [])
|
||||
const notAllowCustomCredential = provider.allow_custom_token === false
|
||||
const isOfficialOpenAIProvider =
|
||||
provider.provider === ModelProviderQuotaGetPaid.OPENAI || provider.provider === 'openai'
|
||||
|
||||
const handleOpenChange = useCallback(
|
||||
(open: boolean) => {
|
||||
@ -357,6 +360,13 @@ const ModelModal: FC<ModelModalProps> = ({
|
||||
...formSchema,
|
||||
name: formSchema.variable,
|
||||
showRadioUI: formSchema.type === FormTypeEnum.radio,
|
||||
...(isOfficialOpenAIProvider && formSchema.variable === 'api_protocol'
|
||||
? {
|
||||
description: t(($) => $['modelProvider.auth.openAIResponsesAPITip'], {
|
||||
ns: 'common',
|
||||
}),
|
||||
}
|
||||
: {}),
|
||||
}
|
||||
}) as FormSchema[]
|
||||
}
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "إدارة بيانات الاعتماد",
|
||||
"modelProvider.auth.modelCredential": "بيانات اعتماد النموذج",
|
||||
"modelProvider.auth.modelCredentials": "بيانات اعتماد النموذج",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "بالنسبة إلى نماذج GPT-5.6 والإصدارات الأحدث، نوصي باستخدام Responses API.",
|
||||
"modelProvider.auth.providerManaged": "مدار من قبل المزود",
|
||||
"modelProvider.auth.providerManagedTip": "يتم استضافة التكوين الحالي بواسطة المزود.",
|
||||
"modelProvider.auth.removeModel": "إزالة النموذج",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Anmeldeinformationen verwalten",
|
||||
"modelProvider.auth.modelCredential": "Zeugnis des Modells",
|
||||
"modelProvider.auth.modelCredentials": "Modellanmeldeinformationen",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Für GPT-5.6 und neuere Modelle empfehlen wir die Verwendung der Responses API.",
|
||||
"modelProvider.auth.providerManaged": "Anbieter verwaltet",
|
||||
"modelProvider.auth.providerManagedTip": "Die aktuelle Konfiguration wird vom Anbieter gehostet.",
|
||||
"modelProvider.auth.removeModel": "Modell entfernen",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Manage Credentials",
|
||||
"modelProvider.auth.modelCredential": "Model credential",
|
||||
"modelProvider.auth.modelCredentials": "Model credentials",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "For GPT-5.6 and later models, we recommend using the Responses API.",
|
||||
"modelProvider.auth.providerManaged": "Provider managed",
|
||||
"modelProvider.auth.providerManagedTip": "The current configuration is hosted by the provider.",
|
||||
"modelProvider.auth.removeModel": "Remove Model",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Administrar credenciales",
|
||||
"modelProvider.auth.modelCredential": "Credencial modelo",
|
||||
"modelProvider.auth.modelCredentials": "Credenciales del modelo",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Para GPT-5.6 y modelos posteriores, recomendamos usar la API Responses.",
|
||||
"modelProvider.auth.providerManaged": "Proveedor gestionado",
|
||||
"modelProvider.auth.providerManagedTip": "La configuración actual es hospedada por el proveedor.",
|
||||
"modelProvider.auth.removeModel": "Eliminar modelo",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "مدیریت اعتبارنامه ها",
|
||||
"modelProvider.auth.modelCredential": "اعتبار مدل",
|
||||
"modelProvider.auth.modelCredentials": "مدل اعتبارنامه",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "برای مدلهای GPT-5.6 و جدیدتر، استفاده از Responses API را توصیه میکنیم.",
|
||||
"modelProvider.auth.providerManaged": "مدیریت شده توسط ارائهدهنده",
|
||||
"modelProvider.auth.providerManagedTip": "تنظیمات فعلی توسط ارائهدهنده میزبانی میشود.",
|
||||
"modelProvider.auth.removeModel": "حذف مدل",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Gérer les informations d’identification",
|
||||
"modelProvider.auth.modelCredential": "Références du modèle",
|
||||
"modelProvider.auth.modelCredentials": "Informations d'identification du modèle",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Pour GPT-5.6 et les modèles ultérieurs, nous recommandons d’utiliser l’API Responses.",
|
||||
"modelProvider.auth.providerManaged": "Fournisseur géré",
|
||||
"modelProvider.auth.providerManagedTip": "La configuration actuelle est hébergée par le fournisseur.",
|
||||
"modelProvider.auth.removeModel": "Supprimer le modèle",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "क्रेडेंशियल्स प्रबंधित करें",
|
||||
"modelProvider.auth.modelCredential": "मॉडल क्रेडेंशियल",
|
||||
"modelProvider.auth.modelCredentials": "मॉडल क्रेडेंशियल्स",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "GPT-5.6 और बाद के मॉडल के लिए, हम Responses API का उपयोग करने की सलाह देते हैं।",
|
||||
"modelProvider.auth.providerManaged": "प्रदाता द्वारा प्रबंधित",
|
||||
"modelProvider.auth.providerManagedTip": "वर्तमान कॉन्फ़िगरेशन प्रदाता द्वारा होस्ट किया गया है।",
|
||||
"modelProvider.auth.removeModel": "मॉडल हटाएं",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Kelola Kredensial",
|
||||
"modelProvider.auth.modelCredential": "Kredensial model",
|
||||
"modelProvider.auth.modelCredentials": "Kredensial model",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Untuk GPT-5.6 dan model yang lebih baru, kami menyarankan penggunaan Responses API.",
|
||||
"modelProvider.auth.providerManaged": "Penyedia dikelola",
|
||||
"modelProvider.auth.providerManagedTip": "Konfigurasi saat ini dihosting oleh penyedia.",
|
||||
"modelProvider.auth.removeModel": "Hapus Model",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Gestisci credenziali",
|
||||
"modelProvider.auth.modelCredential": "Credenziale del modello",
|
||||
"modelProvider.auth.modelCredentials": "Credenziali del modello",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Per GPT-5.6 e modelli successivi, consigliamo di utilizzare la Responses API.",
|
||||
"modelProvider.auth.providerManaged": "Fornitore gestito",
|
||||
"modelProvider.auth.providerManagedTip": "La configurazione attuale è ospitata dal fornitore.",
|
||||
"modelProvider.auth.removeModel": "Rimuovi modello",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "認証情報を管理",
|
||||
"modelProvider.auth.modelCredential": "モデルの資格情報",
|
||||
"modelProvider.auth.modelCredentials": "モデルの資格情報",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "GPT-5.6 以降のモデルでは、Responses API の使用をお勧めします。",
|
||||
"modelProvider.auth.providerManaged": "プロバイダー管理",
|
||||
"modelProvider.auth.providerManagedTip": "現在の設定はプロバイダーによってホストされています。",
|
||||
"modelProvider.auth.removeModel": "モデルを削除",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "자격 증명 관리",
|
||||
"modelProvider.auth.modelCredential": "모델 자격 증명",
|
||||
"modelProvider.auth.modelCredentials": "모델 자격 증명",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "GPT-5.6 이상 모델에서는 Responses API 사용을 권장합니다.",
|
||||
"modelProvider.auth.providerManaged": "제공자가 관리하는",
|
||||
"modelProvider.auth.providerManagedTip": "현재 구성은 제공업체에 의해 호스팅되고 있습니다.",
|
||||
"modelProvider.auth.removeModel": "모델 제거",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Manage Credentials",
|
||||
"modelProvider.auth.modelCredential": "Model credential",
|
||||
"modelProvider.auth.modelCredentials": "Model credentials",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Voor GPT-5.6 en nieuwere modellen raden we het gebruik van de Responses API aan.",
|
||||
"modelProvider.auth.providerManaged": "Provider managed",
|
||||
"modelProvider.auth.providerManagedTip": "The current configuration is hosted by the provider.",
|
||||
"modelProvider.auth.removeModel": "Remove Model",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Zarządzanie poświadczeniami",
|
||||
"modelProvider.auth.modelCredential": "Poświadczenie modelu",
|
||||
"modelProvider.auth.modelCredentials": "Uprawnienia modelu",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "W przypadku modelu GPT-5.6 i nowszych zalecamy korzystanie z interfejsu Responses API.",
|
||||
"modelProvider.auth.providerManaged": "Zarządzane przez dostawcę",
|
||||
"modelProvider.auth.providerManagedTip": "Bieżąca konfiguracja jest hostowana przez dostawcę.",
|
||||
"modelProvider.auth.removeModel": "Usuń model",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Gerenciar credenciais",
|
||||
"modelProvider.auth.modelCredential": "Credencial de modelo",
|
||||
"modelProvider.auth.modelCredentials": "Credenciais do modelo",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Para o GPT-5.6 e modelos posteriores, recomendamos usar a API Responses.",
|
||||
"modelProvider.auth.providerManaged": "Provedor gerenciado",
|
||||
"modelProvider.auth.providerManagedTip": "A configuração atual é hospedada pelo provedor.",
|
||||
"modelProvider.auth.removeModel": "Remover modelo",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Gestionați acreditările",
|
||||
"modelProvider.auth.modelCredential": "Model de acreditare",
|
||||
"modelProvider.auth.modelCredentials": "Credențiale model",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Pentru GPT-5.6 și modelele ulterioare, recomandăm utilizarea API-ului Responses.",
|
||||
"modelProvider.auth.providerManaged": "Gestionat de furnizor",
|
||||
"modelProvider.auth.providerManagedTip": "Configurarea curentă este găzduită de furnizor.",
|
||||
"modelProvider.auth.removeModel": "Eliminați modelul",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Управление учетными данными",
|
||||
"modelProvider.auth.modelCredential": "Удостоверение модели",
|
||||
"modelProvider.auth.modelCredentials": "Учетные данные модели",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Для GPT-5.6 и более новых моделей рекомендуется использовать Responses API.",
|
||||
"modelProvider.auth.providerManaged": "Управляемый провайдером",
|
||||
"modelProvider.auth.providerManagedTip": "Текущая конфигурация размещена у провайдера.",
|
||||
"modelProvider.auth.removeModel": "Удалить модель",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Upravljanje poverilnic",
|
||||
"modelProvider.auth.modelCredential": "Poverilnice modela",
|
||||
"modelProvider.auth.modelCredentials": "Model akreditivi",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Za GPT-5.6 in novejše modele priporočamo uporabo Responses API.",
|
||||
"modelProvider.auth.providerManaged": "Zagotavlja upravljano",
|
||||
"modelProvider.auth.providerManagedTip": "Trenutna konfiguracija je gostovana pri ponudniku.",
|
||||
"modelProvider.auth.removeModel": "Odstrani model",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "จัดการข้อมูลประจําตัว",
|
||||
"modelProvider.auth.modelCredential": "ข้อมูลประจําตัวของรุ่น",
|
||||
"modelProvider.auth.modelCredentials": "ข้อมูลรับรองโมเดล",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "สำหรับ GPT-5.6 และโมเดลที่ใหม่กว่า เราขอแนะนำให้ใช้ Responses API",
|
||||
"modelProvider.auth.providerManaged": "ผู้ให้บริการจัดการ",
|
||||
"modelProvider.auth.providerManagedTip": "การกำหนดค่าปัจจุบันถูกโฮสต์โดยผู้ให้บริการ.",
|
||||
"modelProvider.auth.removeModel": "ลบโมเดล",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Kimlik Bilgilerini Yönet",
|
||||
"modelProvider.auth.modelCredential": "Model kimlik bilgileri",
|
||||
"modelProvider.auth.modelCredentials": "Model kimlik bilgileri",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "GPT-5.6 ve sonraki modeller için Responses API'yi kullanmanızı öneririz.",
|
||||
"modelProvider.auth.providerManaged": "Sağlayıcı yönetimi",
|
||||
"modelProvider.auth.providerManagedTip": "Mevcut yapılandırma sağlayıcı tarafından barındırılmaktadır.",
|
||||
"modelProvider.auth.removeModel": "Modeli Kaldır",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Керування обліковими даними",
|
||||
"modelProvider.auth.modelCredential": "Облікові дані моделі",
|
||||
"modelProvider.auth.modelCredentials": "Модельні облікові дані",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Для GPT-5.6 і новіших моделей рекомендуємо використовувати Responses API.",
|
||||
"modelProvider.auth.providerManaged": "Постачальник управляє",
|
||||
"modelProvider.auth.providerManagedTip": "Поточна конфігурація розміщується провайдером.",
|
||||
"modelProvider.auth.removeModel": "Видалити модель",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "Quản lý thông tin đăng nhập",
|
||||
"modelProvider.auth.modelCredential": "Thông tin đăng nhập mô hình",
|
||||
"modelProvider.auth.modelCredentials": "Chứng chỉ của mô hình",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "Đối với GPT-5.6 và các mô hình mới hơn, chúng tôi khuyên dùng Responses API.",
|
||||
"modelProvider.auth.providerManaged": "Nhà cung cấp đã được quản lý",
|
||||
"modelProvider.auth.providerManagedTip": "Cấu hình hiện tại được lưu trữ bởi nhà cung cấp.",
|
||||
"modelProvider.auth.removeModel": "Loại bỏ mô hình",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "管理凭据",
|
||||
"modelProvider.auth.modelCredential": "模型凭据",
|
||||
"modelProvider.auth.modelCredentials": "模型凭据",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "使用 GPT-5.6 及以上模型时,建议使用 Responses API。",
|
||||
"modelProvider.auth.providerManaged": "由模型供应商管理",
|
||||
"modelProvider.auth.providerManagedTip": "使用模型供应商提供的单组凭据。",
|
||||
"modelProvider.auth.removeModel": "移除模型",
|
||||
|
||||
@ -332,6 +332,7 @@
|
||||
"modelProvider.auth.manageCredentials": "管理憑證",
|
||||
"modelProvider.auth.modelCredential": "模型認證",
|
||||
"modelProvider.auth.modelCredentials": "模型憑證",
|
||||
"modelProvider.auth.openAIResponsesAPITip": "使用 GPT-5.6 及以上模型時,建議使用 Responses API。",
|
||||
"modelProvider.auth.providerManaged": "供應商管理",
|
||||
"modelProvider.auth.providerManagedTip": "當前的配置由提供者主辦。",
|
||||
"modelProvider.auth.removeModel": "移除模型",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user