chore: clean up code and remove some lint suppression (#1777)
* chore: clean up code and remove some lint suppression Signed-off-by: James <james@jan.ai> * Update .gitignore --------- Signed-off-by: James <james@jan.ai> Co-authored-by: James <james@jan.ai> Co-authored-by: Louis <louis@jan.ai>
This commit is contained in:
parent
85b58eb824
commit
143e76a0de
3
.gitignore
vendored
3
.gitignore
vendored
@ -12,6 +12,8 @@ build
|
|||||||
electron/renderer
|
electron/renderer
|
||||||
electron/models
|
electron/models
|
||||||
electron/docs
|
electron/docs
|
||||||
|
electron/engines
|
||||||
|
server/pre-install
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
|
||||||
*.log
|
*.log
|
||||||
@ -26,3 +28,4 @@ extensions/inference-nitro-extension/bin/*/*.exp
|
|||||||
extensions/inference-nitro-extension/bin/*/*.lib
|
extensions/inference-nitro-extension/bin/*/*.lib
|
||||||
extensions/inference-nitro-extension/bin/saved-*
|
extensions/inference-nitro-extension/bin/saved-*
|
||||||
extensions/inference-nitro-extension/bin/*.tar.gz
|
extensions/inference-nitro-extension/bin/*.tar.gz
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
import { fs, Assistant } from "@janhq/core";
|
import { fs, Assistant, AssistantExtension } from "@janhq/core";
|
||||||
import { AssistantExtension } from "@janhq/core";
|
|
||||||
import { join } from "path";
|
import { join } from "path";
|
||||||
|
|
||||||
export default class JanAssistantExtension extends AssistantExtension {
|
export default class JanAssistantExtension extends AssistantExtension {
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
import { MonitoringExtension } from "@janhq/core";
|
import { MonitoringExtension, executeOnMain } from "@janhq/core";
|
||||||
import { executeOnMain } from "@janhq/core";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JanMonitoringExtension is a extension that provides system monitoring functionality.
|
* JanMonitoringExtension is a extension that provides system monitoring functionality.
|
||||||
|
|||||||
@ -28,7 +28,7 @@ const BaseLayout = (props: PropsWithChildren) => {
|
|||||||
if (localStorage.getItem(SUCCESS_SET_NEW_DESTINATION) === 'true') {
|
if (localStorage.getItem(SUCCESS_SET_NEW_DESTINATION) === 'true') {
|
||||||
setMainViewState(MainViewState.Settings)
|
setMainViewState(MainViewState.Settings)
|
||||||
}
|
}
|
||||||
}, [])
|
}, [setMainViewState])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex h-screen w-screen flex-1 overflow-hidden">
|
<div className="flex h-screen w-screen flex-1 overflow-hidden">
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
import { ReactNode, useEffect, useRef } from 'react'
|
import { ReactNode, useCallback, useEffect, useRef } from 'react'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
events,
|
events,
|
||||||
@ -48,48 +48,61 @@ export default function EventHandler({ children }: { children: ReactNode }) {
|
|||||||
modelsRef.current = downloadedModels
|
modelsRef.current = downloadedModels
|
||||||
}, [downloadedModels])
|
}, [downloadedModels])
|
||||||
|
|
||||||
async function handleNewMessageResponse(message: ThreadMessage) {
|
const onNewMessageResponse = useCallback(
|
||||||
addNewMessage(message)
|
(message: ThreadMessage) => {
|
||||||
}
|
addNewMessage(message)
|
||||||
|
},
|
||||||
|
[addNewMessage]
|
||||||
|
)
|
||||||
|
|
||||||
async function handleModelReady(model: Model) {
|
const onModelReady = useCallback(
|
||||||
setActiveModel(model)
|
(model: Model) => {
|
||||||
toaster({
|
setActiveModel(model)
|
||||||
title: 'Success!',
|
toaster({
|
||||||
description: `Model ${model.id} has been started.`,
|
title: 'Success!',
|
||||||
})
|
description: `Model ${model.id} has been started.`,
|
||||||
setStateModel(() => ({
|
})
|
||||||
state: 'stop',
|
setStateModel(() => ({
|
||||||
loading: false,
|
state: 'stop',
|
||||||
model: model.id,
|
loading: false,
|
||||||
}))
|
model: model.id,
|
||||||
}
|
}))
|
||||||
|
},
|
||||||
|
[setActiveModel, setStateModel]
|
||||||
|
)
|
||||||
|
|
||||||
async function handleModelStopped() {
|
const onModelStopped = useCallback(() => {
|
||||||
setTimeout(async () => {
|
setTimeout(() => {
|
||||||
setActiveModel(undefined)
|
setActiveModel(undefined)
|
||||||
setStateModel({ state: 'start', loading: false, model: '' })
|
setStateModel({ state: 'start', loading: false, model: '' })
|
||||||
}, 500)
|
}, 500)
|
||||||
}
|
}, [setActiveModel, setStateModel])
|
||||||
|
|
||||||
async function handleModelFail(res: any) {
|
const onModelInitFailed = useCallback(
|
||||||
const errorMessage = `${res.error}`
|
(res: any) => {
|
||||||
alert(errorMessage)
|
const errorMessage = `${res.error}`
|
||||||
setStateModel(() => ({
|
console.error('Failed to load model: ' + errorMessage)
|
||||||
state: 'start',
|
setStateModel(() => ({
|
||||||
loading: false,
|
state: 'start',
|
||||||
model: res.modelId,
|
loading: false,
|
||||||
}))
|
model: res.modelId,
|
||||||
}
|
}))
|
||||||
|
},
|
||||||
|
[setStateModel]
|
||||||
|
)
|
||||||
|
|
||||||
|
const onMessageResponseUpdate = useCallback(
|
||||||
|
(message: ThreadMessage) => {
|
||||||
|
updateMessage(
|
||||||
|
message.id,
|
||||||
|
message.thread_id,
|
||||||
|
message.content,
|
||||||
|
message.status
|
||||||
|
)
|
||||||
|
if (message.status === MessageStatus.Pending) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
async function handleMessageResponseUpdate(message: ThreadMessage) {
|
|
||||||
updateMessage(
|
|
||||||
message.id,
|
|
||||||
message.thread_id,
|
|
||||||
message.content,
|
|
||||||
message.status
|
|
||||||
)
|
|
||||||
if (message.status !== MessageStatus.Pending) {
|
|
||||||
// Mark the thread as not waiting for response
|
// Mark the thread as not waiting for response
|
||||||
updateThreadWaiting(message.thread_id, false)
|
updateThreadWaiting(message.thread_id, false)
|
||||||
|
|
||||||
@ -111,26 +124,33 @@ export default function EventHandler({ children }: { children: ReactNode }) {
|
|||||||
.get<ConversationalExtension>(ExtensionTypeEnum.Conversational)
|
.get<ConversationalExtension>(ExtensionTypeEnum.Conversational)
|
||||||
?.addNewMessage(message)
|
?.addNewMessage(message)
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
[updateMessage, updateThreadWaiting]
|
||||||
|
)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
console.log('Registering events')
|
||||||
if (window.core?.events) {
|
if (window.core?.events) {
|
||||||
events.on(MessageEvent.OnMessageResponse, handleNewMessageResponse)
|
events.on(MessageEvent.OnMessageResponse, onNewMessageResponse)
|
||||||
events.on(MessageEvent.OnMessageUpdate, handleMessageResponseUpdate)
|
events.on(MessageEvent.OnMessageUpdate, onMessageResponseUpdate)
|
||||||
events.on(ModelEvent.OnModelReady, handleModelReady)
|
|
||||||
events.on(ModelEvent.OnModelFail, handleModelFail)
|
events.on(ModelEvent.OnModelReady, onModelReady)
|
||||||
events.on(ModelEvent.OnModelStopped, handleModelStopped)
|
events.on(ModelEvent.OnModelFail, onModelInitFailed)
|
||||||
|
events.on(ModelEvent.OnModelStopped, onModelStopped)
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
}, [
|
||||||
}, [])
|
onNewMessageResponse,
|
||||||
|
onMessageResponseUpdate,
|
||||||
|
onModelReady,
|
||||||
|
onModelInitFailed,
|
||||||
|
onModelStopped,
|
||||||
|
])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
return () => {
|
return () => {
|
||||||
events.off(MessageEvent.OnMessageResponse, handleNewMessageResponse)
|
events.off(MessageEvent.OnMessageResponse, onNewMessageResponse)
|
||||||
events.off(MessageEvent.OnMessageUpdate, handleMessageResponseUpdate)
|
events.off(MessageEvent.OnMessageUpdate, onMessageResponseUpdate)
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
}, [onNewMessageResponse, onMessageResponseUpdate])
|
||||||
}, [])
|
|
||||||
return <>{children}</>
|
return <>{children}</>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -105,12 +105,14 @@ export default function EventListenerWrapper({ children }: PropsWithChildren) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
return () => {}
|
return () => {}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
}, [
|
||||||
}, [])
|
setDownloadState,
|
||||||
|
setDownloadStateCancelled,
|
||||||
|
setDownloadStateFailed,
|
||||||
|
setDownloadStateSuccess,
|
||||||
|
setDownloadedModels,
|
||||||
|
setProgress,
|
||||||
|
])
|
||||||
|
|
||||||
return (
|
return <EventHandler>{children}</EventHandler>
|
||||||
<div id="eventlistener">
|
|
||||||
<EventHandler>{children}</EventHandler>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { useEffect, useState } from 'react'
|
import { useCallback, useEffect, useState } from 'react'
|
||||||
|
|
||||||
import { ExtensionTypeEnum, ModelExtension, Model } from '@janhq/core'
|
import { ExtensionTypeEnum, ModelExtension, Model } from '@janhq/core'
|
||||||
|
|
||||||
@ -8,24 +8,23 @@ export function useGetConfiguredModels() {
|
|||||||
const [loading, setLoading] = useState<boolean>(false)
|
const [loading, setLoading] = useState<boolean>(false)
|
||||||
const [models, setModels] = useState<Model[]>([])
|
const [models, setModels] = useState<Model[]>([])
|
||||||
|
|
||||||
const getConfiguredModels = async (): Promise<Model[]> => {
|
const fetchModels = useCallback(async () => {
|
||||||
const models = await extensionManager
|
|
||||||
.get<ModelExtension>(ExtensionTypeEnum.Model)
|
|
||||||
?.getConfiguredModels()
|
|
||||||
return models ?? []
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchModels() {
|
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
const models = await getConfiguredModels()
|
const models = await getConfiguredModels()
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
setModels(models)
|
setModels(models)
|
||||||
}
|
}, [])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchModels()
|
fetchModels()
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
}, [fetchModels])
|
||||||
}, [])
|
|
||||||
|
|
||||||
return { loading, models }
|
return { loading, models }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getConfiguredModels = async (): Promise<Model[]> => {
|
||||||
|
const models = await extensionManager
|
||||||
|
.get<ModelExtension>(ExtensionTypeEnum.Model)
|
||||||
|
?.getConfiguredModels()
|
||||||
|
return models ?? []
|
||||||
|
}
|
||||||
|
|||||||
@ -3,8 +3,8 @@ import {
|
|||||||
ExtensionTypeEnum,
|
ExtensionTypeEnum,
|
||||||
ThreadMessage,
|
ThreadMessage,
|
||||||
ChatCompletionRole,
|
ChatCompletionRole,
|
||||||
|
ConversationalExtension,
|
||||||
} from '@janhq/core'
|
} from '@janhq/core'
|
||||||
import { ConversationalExtension } from '@janhq/core'
|
|
||||||
import { useAtomValue, useSetAtom } from 'jotai'
|
import { useAtomValue, useSetAtom } from 'jotai'
|
||||||
import { RefreshCcw, CopyIcon, Trash2Icon, CheckIcon } from 'lucide-react'
|
import { RefreshCcw, CopyIcon, Trash2Icon, CheckIcon } from 'lucide-react'
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user