diff --git a/src/renderer/src/components/Preview/MermaidPreview.tsx b/src/renderer/src/components/Preview/MermaidPreview.tsx index 4c41e3c4b9..60708fbee8 100644 --- a/src/renderer/src/components/Preview/MermaidPreview.tsx +++ b/src/renderer/src/components/Preview/MermaidPreview.tsx @@ -56,6 +56,7 @@ const MermaidPreview = ({ document.body.removeChild(measureEl) } }, + // eslint-disable-next-line react-hooks/exhaustive-deps [diagramId, mermaid, forceRenderKey] ) diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index c6b745ac85..365b0797d1 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -1552,6 +1552,7 @@ "selected": "Selected tags" }, "function_calling": "Function Calling", + "invalid_model": "Invalid Model", "no_matches": "No models available", "parameter_name": "Parameter Name", "parameter_type": { diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index a00750d71e..51a9f0d799 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -1552,6 +1552,7 @@ "selected": "選択済みのタグ" }, "function_calling": "関数呼び出し", + "invalid_model": "無効なモデル", "no_matches": "利用可能なモデルがありません", "parameter_name": "パラメータ名", "parameter_type": { diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index d6c6d4d198..0fc5d567ac 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -1552,6 +1552,7 @@ "selected": "Выбранные теги" }, "function_calling": "Вызов функции", + "invalid_model": "Недействительная модель", "no_matches": "Нет доступных моделей", "parameter_name": "Имя параметра", "parameter_type": { diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index bf3215a35c..feb7338be3 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -1552,6 +1552,7 @@ "selected": "已选标签" }, "function_calling": "函数调用", + "invalid_model": "无效模型", "no_matches": "无可用模型", "parameter_name": "参数名称", "parameter_type": { diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 93881b95f9..b8337ac2c1 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -1552,6 +1552,7 @@ "selected": "已選標籤" }, "function_calling": "函數調用", + "invalid_model": "無效模型", "no_matches": "無可用模型", "parameter_name": "參數名稱", "parameter_type": { diff --git a/src/renderer/src/i18n/translate/el-gr.json b/src/renderer/src/i18n/translate/el-gr.json index 43602afe6f..e5cb29ec8a 100644 --- a/src/renderer/src/i18n/translate/el-gr.json +++ b/src/renderer/src/i18n/translate/el-gr.json @@ -1550,6 +1550,7 @@ "selected": "Επιλεγμένη ετικέτα" }, "function_calling": "Ξεχωριστική Κλήση Συναρτήσεων", + "invalid_model": "Μη έγκυρο μοντέλο", "no_matches": "Δεν υπάρχουν διαθέσιμα μοντέλα", "parameter_name": "Όνομα παραμέτρου", "parameter_type": { diff --git a/src/renderer/src/i18n/translate/es-es.json b/src/renderer/src/i18n/translate/es-es.json index 715401149f..6924a3731c 100644 --- a/src/renderer/src/i18n/translate/es-es.json +++ b/src/renderer/src/i18n/translate/es-es.json @@ -1550,6 +1550,7 @@ "selected": "Etiquetas seleccionadas" }, "function_calling": "Llamada a función", + "invalid_model": "Modelo inválido", "no_matches": "No hay modelos disponibles", "parameter_name": "Nombre del parámetro", "parameter_type": { diff --git a/src/renderer/src/i18n/translate/fr-fr.json b/src/renderer/src/i18n/translate/fr-fr.json index 794c76a35e..d3e216b809 100644 --- a/src/renderer/src/i18n/translate/fr-fr.json +++ b/src/renderer/src/i18n/translate/fr-fr.json @@ -1550,6 +1550,7 @@ "selected": "Étiquette sélectionnée" }, "function_calling": "Appel de fonction", + "invalid_model": "Modèle invalide", "no_matches": "Aucun modèle disponible", "parameter_name": "Nom du paramètre", "parameter_type": { diff --git a/src/renderer/src/i18n/translate/pt-pt.json b/src/renderer/src/i18n/translate/pt-pt.json index 57d26464e8..1595318214 100644 --- a/src/renderer/src/i18n/translate/pt-pt.json +++ b/src/renderer/src/i18n/translate/pt-pt.json @@ -1550,6 +1550,7 @@ "selected": "Etiqueta selecionada" }, "function_calling": "Chamada de função", + "invalid_model": "Modelo inválido", "no_matches": "Nenhum modelo disponível", "parameter_name": "Nome do parâmetro", "parameter_type": { diff --git a/src/renderer/src/pages/home/components/SelectModelButton.tsx b/src/renderer/src/pages/home/components/SelectModelButton.tsx index 214ceb7185..bd6af86f7b 100644 --- a/src/renderer/src/pages/home/components/SelectModelButton.tsx +++ b/src/renderer/src/pages/home/components/SelectModelButton.tsx @@ -4,8 +4,9 @@ import { isLocalAi } from '@renderer/config/env' import { isEmbeddingModel, isRerankModel, isWebSearchModel } from '@renderer/config/models' import { useAssistant } from '@renderer/hooks/useAssistant' import { getProviderName } from '@renderer/services/ProviderService' +import { useAppSelector } from '@renderer/store' import { Assistant, Model } from '@renderer/types' -import { Button } from 'antd' +import { Button, Tag } from 'antd' import { ChevronsUpDown } from 'lucide-react' import { FC, useEffect, useRef } from 'react' import { useTranslation } from 'react-i18next' @@ -19,6 +20,7 @@ const SelectModelButton: FC = ({ assistant }) => { const { model, updateAssistant } = useAssistant(assistant.id) const { t } = useTranslation() const timerRef = useRef(undefined) + const provider = useAppSelector((state) => state.llm.providers.find((p) => p.id === model?.provider)) const modelFilter = (model: Model) => !isEmbeddingModel(model) && !isRerankModel(model) @@ -60,6 +62,7 @@ const SelectModelButton: FC = ({ assistant }) => { + {!provider && {t('models.invalid_model')}} ) }