Merge pull request #3983 from janhq/fix/maintain-model-settings-allow-modelyml-editing

fix: migrate model settings and parameters but still allow model.yml editing
This commit is contained in:
Louis 2024-11-10 17:55:44 +07:00 committed by GitHub
commit 1643b9dd86
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 35 additions and 10 deletions

View File

@ -123,10 +123,10 @@ export class CortexAPI implements ICortexAPI {
* @param model * @param model
* @returns * @returns
*/ */
updateModel(model: object): Promise<void> { updateModel(model: Partial<Model>): Promise<void> {
return this.queue.add(() => return this.queue.add(() =>
ky ky
.patch(`${API_URL}/v1/models/${model}`, { json: { model } }) .patch(`${API_URL}/v1/models/${model.id}`, { json: { ...model } })
.json() .json()
.then() .then()
) )

View File

@ -193,7 +193,13 @@ export default class JanModelExtension extends ModelExtension {
]) // Copied models ]) // Copied models
: model.sources[0].url, // Symlink models, : model.sources[0].url, // Symlink models,
model.name model.name
) ).then((e) => {
this.updateModel({
id: model.id,
...model.settings,
...model.parameters,
} as Partial<Model>)
})
) )
) )

View File

@ -2,7 +2,17 @@ import { PropsWithChildren, useCallback, useEffect } from 'react'
import React from 'react' import React from 'react'
import { DownloadEvent, events, DownloadState, ModelEvent } from '@janhq/core' import {
DownloadEvent,
events,
DownloadState,
ModelEvent,
ExtensionTypeEnum,
ModelExtension,
ModelManager,
Model,
} from '@janhq/core'
import { useSetAtom } from 'jotai' import { useSetAtom } from 'jotai'
import { setDownloadStateAtom } from '@/hooks/useDownloadState' import { setDownloadStateAtom } from '@/hooks/useDownloadState'
@ -18,6 +28,7 @@ import EventHandler from './EventHandler'
import ModelImportListener from './ModelImportListener' import ModelImportListener from './ModelImportListener'
import QuickAskListener from './QuickAskListener' import QuickAskListener from './QuickAskListener'
import { extensionManager } from '@/extension'
import { import {
InstallingExtensionState, InstallingExtensionState,
removeInstallingExtensionAtom, removeInstallingExtensionAtom,
@ -83,12 +94,24 @@ const EventListenerWrapper = ({ children }: PropsWithChildren) => {
) )
const onFileDownloadSuccess = useCallback( const onFileDownloadSuccess = useCallback(
(state: DownloadState) => { async (state: DownloadState) => {
console.debug('onFileDownloadSuccess', state) console.debug('onFileDownloadSuccess', state)
if (state.downloadType !== 'extension') { if (state.downloadType !== 'extension') {
// Update model metadata accordingly
const model = ModelManager.instance().models.get(state.modelId)
if (model) {
await extensionManager
.get<ModelExtension>(ExtensionTypeEnum.Model)
?.updateModel({
id: model.id,
...model.settings,
...model.parameters,
} as Partial<Model>)
.catch((e) => console.debug(e))
}
state.downloadState = 'end' state.downloadState = 'end'
setDownloadState(state) setDownloadState(state)
if (state.percent !== 0) removeDownloadingModel(state.modelId) removeDownloadingModel(state.modelId)
} }
events.emit(ModelEvent.OnModelsUpdate, {}) events.emit(ModelEvent.OnModelsUpdate, {})
}, },

View File

@ -35,10 +35,6 @@ const useModels = () => {
const localModels = (await getModels()).map((e) => ({ const localModels = (await getModels()).map((e) => ({
...e, ...e,
name: ModelManager.instance().models.get(e.id)?.name ?? e.id, name: ModelManager.instance().models.get(e.id)?.name ?? e.id,
settings:
ModelManager.instance().models.get(e.id)?.settings ?? e.settings,
parameters:
ModelManager.instance().models.get(e.id)?.parameters ?? e.parameters,
metadata: metadata:
ModelManager.instance().models.get(e.id)?.metadata ?? e.metadata, ModelManager.instance().models.get(e.id)?.metadata ?? e.metadata,
})) }))