From bb78683847bb2ab698df7fc7a64ccc4aff0998f8 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 17 Nov 2023 14:01:42 +0700 Subject: [PATCH] refactor: remove unused hooks and resolve no-explicit-any --- plugins/inference-plugin/src/index.ts | 1 - plugins/model-plugin/src/@types/schema.ts | 21 +++++++++++ .../model-plugin/src/helpers/modelParser.ts | 35 ++++++++----------- web/helpers/atoms/Modal.atom.ts | 12 ------- web/hooks/useCreateConversation.ts | 2 +- web/hooks/useDeleteConversation.ts | 10 +----- web/hooks/useGetConfiguredModels.ts | 13 +++---- web/hooks/useGetDownloadedModels.ts | 9 +++-- web/hooks/useGetInputState.ts | 14 ++++---- web/hooks/useGetSystemResources.ts | 7 ++-- web/services/cloudNativeService.ts | 3 +- web/services/eventsService.ts | 2 +- web/utils/dummy.ts | 2 +- 13 files changed, 61 insertions(+), 70 deletions(-) create mode 100644 plugins/model-plugin/src/@types/schema.ts delete mode 100644 web/helpers/atoms/Modal.atom.ts diff --git a/plugins/inference-plugin/src/index.ts b/plugins/inference-plugin/src/index.ts index 5841b7abc..8cabf0343 100644 --- a/plugins/inference-plugin/src/index.ts +++ b/plugins/inference-plugin/src/index.ts @@ -7,7 +7,6 @@ */ import { - ChatCompletionMessage, ChatCompletionRole, EventName, MessageRequest, diff --git a/plugins/model-plugin/src/@types/schema.ts b/plugins/model-plugin/src/@types/schema.ts new file mode 100644 index 000000000..1d3c3a7d1 --- /dev/null +++ b/plugins/model-plugin/src/@types/schema.ts @@ -0,0 +1,21 @@ +interface Version { + name: string + quantMethod: string + bits: number + size: number + maxRamRequired: number + usecase: string + downloadLink: string +} +interface ModelSchema { + id: string + name: string + shortDescription: string + avatarUrl: string + longDescription: string + author: string + version: string + modelUrl: string + tags: string[] + versions: Version[] +} diff --git a/plugins/model-plugin/src/helpers/modelParser.ts b/plugins/model-plugin/src/helpers/modelParser.ts index 826a2afba..242dc7e63 100644 --- a/plugins/model-plugin/src/helpers/modelParser.ts +++ b/plugins/model-plugin/src/helpers/modelParser.ts @@ -1,8 +1,9 @@ -export const parseToModel = (model) => { +import { ModelCatalog } from '@janhq/core' + +export function parseToModel(schema: ModelSchema): ModelCatalog { const modelVersions = [] - model.versions.forEach((v) => { + schema.versions.forEach((v) => { const version = { - id: `${model.author}-${v.name}`, name: v.name, quantMethod: v.quantMethod, bits: v.bits, @@ -10,28 +11,22 @@ export const parseToModel = (model) => { maxRamRequired: v.maxRamRequired, usecase: v.usecase, downloadLink: v.downloadLink, - productId: model.id, } modelVersions.push(version) }) - const product = { - id: model.id, - name: model.name, - shortDescription: model.shortDescription, - avatarUrl: model.avatarUrl, - author: model.author, - version: model.version, - modelUrl: model.modelUrl, - nsfw: model.nsfw, - tags: model.tags, - greeting: model.defaultGreeting, - type: model.type, - createdAt: model.createdAt, - longDescription: model.longDescription, - status: 'Downloadable', + const model: ModelCatalog = { + id: schema.id, + name: schema.name, + shortDescription: schema.shortDescription, + avatarUrl: schema.avatarUrl, + author: schema.author, + version: schema.version, + modelUrl: schema.modelUrl, + tags: schema.tags, + longDescription: schema.longDescription, releaseDate: 0, availableVersions: modelVersions, } - return product + return model } diff --git a/web/helpers/atoms/Modal.atom.ts b/web/helpers/atoms/Modal.atom.ts deleted file mode 100644 index 5f13e1f9e..000000000 --- a/web/helpers/atoms/Modal.atom.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { atom } from 'jotai' - -export const showConfirmDeleteConversationModalAtom = atom(false) -export const showConfirmSignOutModalAtom = atom(false) -export const showConfirmDeleteModalAtom = atom(false) -export const showingAdvancedPromptAtom = atom(false) -export const showingProductDetailAtom = atom(false) -export const showingMobilePaneAtom = atom(false) -export const showingBotListModalAtom = atom(false) -export const showingCancelDownloadModalAtom = atom(false) - -export const showingModalNoActiveModel = atom(false) diff --git a/web/hooks/useCreateConversation.ts b/web/hooks/useCreateConversation.ts index 8984c0bfc..625ae59cd 100644 --- a/web/hooks/useCreateConversation.ts +++ b/web/hooks/useCreateConversation.ts @@ -35,7 +35,7 @@ export const useCreateConversation = () => { waitingForResponse: false, }) - pluginManager + await pluginManager .get(PluginType.Conversational) ?.saveConversation(mappedConvo) setUserConversations([mappedConvo, ...userConversations]) diff --git a/web/hooks/useDeleteConversation.ts b/web/hooks/useDeleteConversation.ts index 459b527b5..36ae2a789 100644 --- a/web/hooks/useDeleteConversation.ts +++ b/web/hooks/useDeleteConversation.ts @@ -16,10 +16,6 @@ import { getActiveConvoIdAtom, setActiveConvoIdAtom, } from '@/helpers/atoms/Conversation.atom' -import { - showingProductDetailAtom, - showingAdvancedPromptAtom, -} from '@/helpers/atoms/Modal.atom' export default function useDeleteConversation() { const { activeModel } = useActiveModel() @@ -27,8 +23,6 @@ export default function useDeleteConversation() { userConversationsAtom ) const setCurrentPrompt = useSetAtom(currentPromptAtom) - const setShowingProductDetail = useSetAtom(showingProductDetailAtom) - const setShowingAdvancedPrompt = useSetAtom(showingAdvancedPromptAtom) const activeConvoId = useAtomValue(getActiveConvoIdAtom) const setActiveConvoId = useSetAtom(setActiveConvoIdAtom) @@ -45,6 +39,7 @@ export default function useDeleteConversation() { ) setUserConversations(currentConversations) deleteMessages(activeConvoId) + setCurrentPrompt('') toaster({ title: 'Succes delete a chat', description: `Delete chat with ${activeModel?.name} has been completed`, @@ -54,9 +49,6 @@ export default function useDeleteConversation() { } else { setActiveConvoId(undefined) } - setCurrentPrompt('') - setShowingProductDetail(false) - setShowingAdvancedPrompt(false) } catch (err) { console.error(err) } diff --git a/web/hooks/useGetConfiguredModels.ts b/web/hooks/useGetConfiguredModels.ts index 308d6a2e9..59ae86399 100644 --- a/web/hooks/useGetConfiguredModels.ts +++ b/web/hooks/useGetConfiguredModels.ts @@ -20,14 +20,13 @@ export function useGetConfiguredModels() { const [models, setModels] = useState([]) async function getConfiguredModels(): Promise { - return ( - ((await pluginManager - .get(PluginType.Model) - ?.getConfiguredModels()) as ModelCatalog[]) ?? [] - ) + const models = await pluginManager + .get(PluginType.Model) + ?.getConfiguredModels() + return models ?? [] } - const fetchModels = async () => { + async function fetchModels() { setLoading(true) let models = await getConfiguredModels() if (process.env.NODE_ENV === 'development') { @@ -37,10 +36,8 @@ export function useGetConfiguredModels() { setModels(models) } - // TODO allow user for filter useEffect(() => { fetchModels() - // eslint-disable-next-line react-hooks/exhaustive-deps }, []) return { loading, models } diff --git a/web/hooks/useGetDownloadedModels.ts b/web/hooks/useGetDownloadedModels.ts index 42a695d58..d9621230f 100644 --- a/web/hooks/useGetDownloadedModels.ts +++ b/web/hooks/useGetDownloadedModels.ts @@ -12,11 +12,10 @@ export function useGetDownloadedModels() { const [downloadedModels, setDownloadedModels] = useAtom(downloadedModelAtom) async function getDownloadedModels(): Promise { - const models = - ((await pluginManager - .get(PluginType.Model) - ?.getDownloadedModels()) as Model[]) ?? [] - return models + const models = await pluginManager + .get(PluginType.Model) + ?.getDownloadedModels() + return models ?? [] } useEffect(() => { diff --git a/web/hooks/useGetInputState.ts b/web/hooks/useGetInputState.ts index f7934ae2c..2ecd36cd7 100644 --- a/web/hooks/useGetInputState.ts +++ b/web/hooks/useGetInputState.ts @@ -10,15 +10,15 @@ import { currentConversationAtom } from '@/helpers/atoms/Conversation.atom' export default function useGetInputState() { const [inputState, setInputState] = useState('loading') - const currentConvo = useAtomValue(currentConversationAtom) + const currentThread = useAtomValue(currentConversationAtom) const { activeModel } = useActiveModel() const { downloadedModels } = useGetDownloadedModels() const handleInputState = ( - convo: Thread | undefined, + thread: Thread | undefined, currentModel: Model | undefined ) => { - if (convo == null) return + if (thread == null) return if (currentModel == null) { setInputState('loading') return @@ -26,7 +26,7 @@ export default function useGetInputState() { // check if convo model id is in downloaded models const isModelAvailable = downloadedModels.some( - (model) => model.id === convo.modelId + (model) => model.id === thread.modelId ) if (!isModelAvailable) { @@ -35,7 +35,7 @@ export default function useGetInputState() { return } - if (convo.modelId !== currentModel.id) { + if (thread.modelId !== currentModel.id) { // in case convo model and active model is different, // ask user to init the required model setInputState('model-mismatch') @@ -46,11 +46,11 @@ export default function useGetInputState() { } useEffect(() => { - handleInputState(currentConvo, activeModel) + handleInputState(currentThread, activeModel) // eslint-disable-next-line react-hooks/exhaustive-deps }, []) - return { inputState, currentConvo } + return { inputState, currentThread } } type InputType = 'available' | 'loading' | 'model-mismatch' | 'model-not-found' diff --git a/web/hooks/useGetSystemResources.ts b/web/hooks/useGetSystemResources.ts index d7bae79c7..f61473148 100644 --- a/web/hooks/useGetSystemResources.ts +++ b/web/hooks/useGetSystemResources.ts @@ -34,14 +34,15 @@ export default function useGetSystemResources() { useEffect(() => { getSystemResources() - // Fetch interval - every 3s + // Fetch interval - every 5s + // TODO: Will we really need this? + // There is a possibility that this will be removed and replaced by the process event hook? const intervalId = setInterval(() => { getSystemResources() }, 5000) - // clean up + // clean up interval return () => clearInterval(intervalId) - // eslint-disable-next-line react-hooks/exhaustive-deps }, []) return { diff --git a/web/services/cloudNativeService.ts b/web/services/cloudNativeService.ts index 40cd05c1f..55164751b 100644 --- a/web/services/cloudNativeService.ts +++ b/web/services/cloudNativeService.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/naming-convention */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { toast } from 'react-toastify' const API_BASE_PATH: string = '/api/v1' @@ -48,7 +47,7 @@ export async function fetchApi( method: pluginFunc, args: args, }), - headers: { 'Content-Type': 'application/json', 'Authorization': '' }, + headers: { contentType: 'application/json', Authorization: '' }, }) if (!response.ok) { diff --git a/web/services/eventsService.ts b/web/services/eventsService.ts index c43f4497e..8a518a442 100644 --- a/web/services/eventsService.ts +++ b/web/services/eventsService.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/ban-types */ export class EventEmitter { private handlers: Map @@ -28,6 +27,7 @@ export class EventEmitter { } } + // eslint-disable-next-line @typescript-eslint/no-explicit-any public emit(eventName: string, args: any): void { if (!this.handlers.has(eventName)) { return diff --git a/web/utils/dummy.ts b/web/utils/dummy.ts index 989393202..647de1937 100644 --- a/web/utils/dummy.ts +++ b/web/utils/dummy.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/naming-convention */ -import { ModelCatalog, ModelVersion } from '@janhq/core' +import { ModelCatalog } from '@janhq/core' export const dummyModel: ModelCatalog = { id: 'aladar/TinyLLama-v0-GGUF',