diff --git a/core/src/browser/extensions/engines/helpers/sse.ts b/core/src/browser/extensions/engines/helpers/sse.ts index aaafbf7e5..55cde56b4 100644 --- a/core/src/browser/extensions/engines/helpers/sse.ts +++ b/core/src/browser/extensions/engines/helpers/sse.ts @@ -91,8 +91,12 @@ export function requestInference( const toParse = cachedLines + line if (!line.includes('data: [DONE]')) { const data = JSON.parse(toParse.replace('data: ', '')) - if ('error' in data) { - subscriber.error(data.error) + if ( + 'error' in data || + 'message' in data || + 'detail' in data + ) { + subscriber.error(data.error ?? data) subscriber.complete() return } diff --git a/extensions/engine-management-extension/resources/mistral.json b/extensions/engine-management-extension/resources/mistral.json index 0d8e6de75..3f447dc4c 100644 --- a/extensions/engine-management-extension/resources/mistral.json +++ b/extensions/engine-management-extension/resources/mistral.json @@ -10,7 +10,7 @@ "transform_req": { "chat_completions": { "url": "https://api.mistral.ai/v1/chat/completions", - "template": "{{tojson(input_request)}}" + "template": "{ {% set first = true %} {% for key, value in input_request %} {% if key == \"messages\" or key == \"model\" or key == \"temperature\" or key == \"store\" or key == \"max_tokens\" or key == \"stream\" or key == \"presence_penalty\" or key == \"metadata\" or key == \"frequency_penalty\" or key == \"tools\" or key == \"tool_choice\" or key == \"logprobs\" or key == \"top_logprobs\" or key == \"logit_bias\" or key == \"n\" or key == \"modalities\" or key == \"prediction\" or key == \"response_format\" or key == \"service_tier\" or key == \"seed\" or key == \"stop\" or key == \"stream_options\" or key == \"top_p\" or key == \"parallel_tool_calls\" or key == \"user\" %} {% if not first %},{% endif %} \"{{ key }}\": {{ tojson(value) }} {% set first = false %} {% endif %} {% endfor %} }" } }, "transform_resp": { diff --git a/extensions/inference-cortex-extension/bin/version.txt b/extensions/inference-cortex-extension/bin/version.txt index fad0ae17f..d3b342f1a 100644 --- a/extensions/inference-cortex-extension/bin/version.txt +++ b/extensions/inference-cortex-extension/bin/version.txt @@ -1 +1 @@ -1.0.9-rc3 +1.0.9-rc4 diff --git a/web/screens/Settings/MyModels/index.tsx b/web/screens/Settings/MyModels/index.tsx index 7128d7016..e4d1b9c47 100644 --- a/web/screens/Settings/MyModels/index.tsx +++ b/web/screens/Settings/MyModels/index.tsx @@ -36,8 +36,6 @@ import { import MyModelList from './MyModelList' -import { extensionManager } from '@/extension' - import { downloadedModelsAtom, showEngineListModelAtom, @@ -52,9 +50,6 @@ const MyModels = () => { showEngineListModelAtom ) - const [extensionHasSettings, setExtensionHasSettings] = useState< - { name?: string; setting: string; apiKey: string; provider: string }[] - >([]) const { engines } = useGetEngines() const isLocalEngine = useCallback( @@ -97,45 +92,6 @@ const MyModels = () => { setSearchText(input) }, []) - useEffect(() => { - const getAllSettings = async () => { - const extensionsMenu: { - name?: string - setting: string - apiKey: string - provider: string - }[] = [] - const extensions = extensionManager.getAll() - - for (const extension of extensions) { - if (typeof extension.getSettings === 'function') { - const settings = await extension.getSettings() - - if ( - (settings && settings.length > 0) || - (await extension.installationState()) !== 'NotRequired' - ) { - extensionsMenu.push({ - name: extension.productName, - setting: extension.name, - apiKey: - 'apiKey' in extension && typeof extension.apiKey === 'string' - ? extension.apiKey - : '', - provider: - 'provider' in extension && - typeof extension.provider === 'string' - ? extension.provider - : '', - }) - } - } - } - setExtensionHasSettings(extensionsMenu) - } - getAllSettings() - }, []) - const findByEngine = filteredDownloadedModels.map((x) => { // Legacy engine support - they will be grouped under Cortex LlamaCPP if (x.engine === InferenceEngine.nitro) @@ -158,9 +114,11 @@ const MyModels = () => { } }) - const getEngineStatusReady: InferenceEngine[] = extensionHasSettings - ?.filter((e) => e.apiKey.length > 0) - .map((x) => x.provider as InferenceEngine) + const getEngineStatusReady: InferenceEngine[] = Object.entries(engines ?? {}) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + ?.filter(([_, value]) => (value?.[0]?.api_key?.length ?? 0) > 0) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .map(([key, _]) => key as InferenceEngine) useEffect(() => { setShowEngineListModel((prev) => [ @@ -168,7 +126,7 @@ const MyModels = () => { ...(getEngineStatusReady as InferenceEngine[]), ]) // eslint-disable-next-line react-hooks/exhaustive-deps - }, [setShowEngineListModel, extensionHasSettings]) + }, [setShowEngineListModel, engines]) return (