diff --git a/extensions/inference-nitro-extension/src/index.ts b/extensions/inference-nitro-extension/src/index.ts index 5c00421fab..b6c63f59a7 100644 --- a/extensions/inference-nitro-extension/src/index.ts +++ b/extensions/inference-nitro-extension/src/index.ts @@ -22,6 +22,7 @@ import { joinPath, InferenceExtension, log, + InferenceEngine, } from "@janhq/core"; import { requestInference } from "./helpers/sse"; import { ulid } from "ulid"; @@ -128,7 +129,7 @@ export default class JanInferenceNitroExtension implements InferenceExtension { } private async onModelInit(model: Model) { - if (model.engine !== "nitro") return; + if (model.engine !== InferenceEngine.nitro) return; const modelFullPath = await joinPath(["models", model.id]); diff --git a/extensions/inference-nitro-extension/src/module.ts b/extensions/inference-nitro-extension/src/module.ts index 41ec2c6012..6907f244a2 100644 --- a/extensions/inference-nitro-extension/src/module.ts +++ b/extensions/inference-nitro-extension/src/module.ts @@ -180,7 +180,7 @@ function promptTemplateConverter(promptTemplate) { * @returns A Promise that resolves when the model is loaded successfully, or rejects with an error message if the model is not found or fails to load. */ function loadLLMModel(settings): Promise { - log(`[NITRO]::Debug: Loading model with params ${settings}`); + log(`[NITRO]::Debug: Loading model with params ${JSON.stringify(settings)}`); return fetchRetry(NITRO_HTTP_LOAD_MODEL_URL, { method: "POST", headers: { diff --git a/web/hooks/useActiveModel.ts b/web/hooks/useActiveModel.ts index 6b54d4ce1e..97c04caf02 100644 --- a/web/hooks/useActiveModel.ts +++ b/web/hooks/useActiveModel.ts @@ -1,11 +1,12 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { EventName, events, Model } from '@janhq/core' -import { atom, useAtom } from 'jotai' +import { atom, useAtom, useAtomValue } from 'jotai' import { toaster } from '@/containers/Toast' import { useGetDownloadedModels } from './useGetDownloadedModels' import { LAST_USED_MODEL_ID } from './useRecommendedModel' +import { activeThreadAtom } from '@/helpers/atoms/Thread.atom' export const activeModelAtom = atom(undefined) @@ -17,6 +18,7 @@ export const stateModelAtom = atom({ export function useActiveModel() { const [activeModel, setActiveModel] = useAtom(activeModelAtom) + const activeThread = useAtomValue(activeThreadAtom) const [stateModel, setStateModel] = useAtom(stateModelAtom) const { downloadedModels } = useGetDownloadedModels() @@ -34,7 +36,7 @@ export function useActiveModel() { setStateModel({ state: 'start', loading: true, model: modelId }) - const model = downloadedModels.find((e) => e.id === modelId) + let model = downloadedModels.find((e) => e.id === modelId) if (!model) { toaster({ @@ -49,6 +51,17 @@ export function useActiveModel() { return } + /// Apply thread model settings + if (activeThread?.assistants[0]?.model.id === modelId) { + model = { + ...model, + settings: { + ...model.settings, + ...activeThread.assistants[0].model.settings, + }, + } + } + localStorage.setItem(LAST_USED_MODEL_ID, model.id) events.emit(EventName.OnModelInit, model) }