refactor: remove unused hooks and resolve no-explicit-any
This commit is contained in:
parent
cc68e42415
commit
bb78683847
@ -7,7 +7,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ChatCompletionMessage,
|
|
||||||
ChatCompletionRole,
|
ChatCompletionRole,
|
||||||
EventName,
|
EventName,
|
||||||
MessageRequest,
|
MessageRequest,
|
||||||
|
|||||||
21
plugins/model-plugin/src/@types/schema.ts
Normal file
21
plugins/model-plugin/src/@types/schema.ts
Normal file
@ -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[]
|
||||||
|
}
|
||||||
@ -1,8 +1,9 @@
|
|||||||
export const parseToModel = (model) => {
|
import { ModelCatalog } from '@janhq/core'
|
||||||
|
|
||||||
|
export function parseToModel(schema: ModelSchema): ModelCatalog {
|
||||||
const modelVersions = []
|
const modelVersions = []
|
||||||
model.versions.forEach((v) => {
|
schema.versions.forEach((v) => {
|
||||||
const version = {
|
const version = {
|
||||||
id: `${model.author}-${v.name}`,
|
|
||||||
name: v.name,
|
name: v.name,
|
||||||
quantMethod: v.quantMethod,
|
quantMethod: v.quantMethod,
|
||||||
bits: v.bits,
|
bits: v.bits,
|
||||||
@ -10,28 +11,22 @@ export const parseToModel = (model) => {
|
|||||||
maxRamRequired: v.maxRamRequired,
|
maxRamRequired: v.maxRamRequired,
|
||||||
usecase: v.usecase,
|
usecase: v.usecase,
|
||||||
downloadLink: v.downloadLink,
|
downloadLink: v.downloadLink,
|
||||||
productId: model.id,
|
|
||||||
}
|
}
|
||||||
modelVersions.push(version)
|
modelVersions.push(version)
|
||||||
})
|
})
|
||||||
|
|
||||||
const product = {
|
const model: ModelCatalog = {
|
||||||
id: model.id,
|
id: schema.id,
|
||||||
name: model.name,
|
name: schema.name,
|
||||||
shortDescription: model.shortDescription,
|
shortDescription: schema.shortDescription,
|
||||||
avatarUrl: model.avatarUrl,
|
avatarUrl: schema.avatarUrl,
|
||||||
author: model.author,
|
author: schema.author,
|
||||||
version: model.version,
|
version: schema.version,
|
||||||
modelUrl: model.modelUrl,
|
modelUrl: schema.modelUrl,
|
||||||
nsfw: model.nsfw,
|
tags: schema.tags,
|
||||||
tags: model.tags,
|
longDescription: schema.longDescription,
|
||||||
greeting: model.defaultGreeting,
|
|
||||||
type: model.type,
|
|
||||||
createdAt: model.createdAt,
|
|
||||||
longDescription: model.longDescription,
|
|
||||||
status: 'Downloadable',
|
|
||||||
releaseDate: 0,
|
releaseDate: 0,
|
||||||
availableVersions: modelVersions,
|
availableVersions: modelVersions,
|
||||||
}
|
}
|
||||||
return product
|
return model
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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<boolean>(false)
|
|
||||||
export const showingProductDetailAtom = atom<boolean>(false)
|
|
||||||
export const showingMobilePaneAtom = atom<boolean>(false)
|
|
||||||
export const showingBotListModalAtom = atom<boolean>(false)
|
|
||||||
export const showingCancelDownloadModalAtom = atom<boolean>(false)
|
|
||||||
|
|
||||||
export const showingModalNoActiveModel = atom<boolean>(false)
|
|
||||||
@ -35,7 +35,7 @@ export const useCreateConversation = () => {
|
|||||||
waitingForResponse: false,
|
waitingForResponse: false,
|
||||||
})
|
})
|
||||||
|
|
||||||
pluginManager
|
await pluginManager
|
||||||
.get<ConversationalPlugin>(PluginType.Conversational)
|
.get<ConversationalPlugin>(PluginType.Conversational)
|
||||||
?.saveConversation(mappedConvo)
|
?.saveConversation(mappedConvo)
|
||||||
setUserConversations([mappedConvo, ...userConversations])
|
setUserConversations([mappedConvo, ...userConversations])
|
||||||
|
|||||||
@ -16,10 +16,6 @@ import {
|
|||||||
getActiveConvoIdAtom,
|
getActiveConvoIdAtom,
|
||||||
setActiveConvoIdAtom,
|
setActiveConvoIdAtom,
|
||||||
} from '@/helpers/atoms/Conversation.atom'
|
} from '@/helpers/atoms/Conversation.atom'
|
||||||
import {
|
|
||||||
showingProductDetailAtom,
|
|
||||||
showingAdvancedPromptAtom,
|
|
||||||
} from '@/helpers/atoms/Modal.atom'
|
|
||||||
|
|
||||||
export default function useDeleteConversation() {
|
export default function useDeleteConversation() {
|
||||||
const { activeModel } = useActiveModel()
|
const { activeModel } = useActiveModel()
|
||||||
@ -27,8 +23,6 @@ export default function useDeleteConversation() {
|
|||||||
userConversationsAtom
|
userConversationsAtom
|
||||||
)
|
)
|
||||||
const setCurrentPrompt = useSetAtom(currentPromptAtom)
|
const setCurrentPrompt = useSetAtom(currentPromptAtom)
|
||||||
const setShowingProductDetail = useSetAtom(showingProductDetailAtom)
|
|
||||||
const setShowingAdvancedPrompt = useSetAtom(showingAdvancedPromptAtom)
|
|
||||||
const activeConvoId = useAtomValue(getActiveConvoIdAtom)
|
const activeConvoId = useAtomValue(getActiveConvoIdAtom)
|
||||||
|
|
||||||
const setActiveConvoId = useSetAtom(setActiveConvoIdAtom)
|
const setActiveConvoId = useSetAtom(setActiveConvoIdAtom)
|
||||||
@ -45,6 +39,7 @@ export default function useDeleteConversation() {
|
|||||||
)
|
)
|
||||||
setUserConversations(currentConversations)
|
setUserConversations(currentConversations)
|
||||||
deleteMessages(activeConvoId)
|
deleteMessages(activeConvoId)
|
||||||
|
setCurrentPrompt('')
|
||||||
toaster({
|
toaster({
|
||||||
title: 'Succes delete a chat',
|
title: 'Succes delete a chat',
|
||||||
description: `Delete chat with ${activeModel?.name} has been completed`,
|
description: `Delete chat with ${activeModel?.name} has been completed`,
|
||||||
@ -54,9 +49,6 @@ export default function useDeleteConversation() {
|
|||||||
} else {
|
} else {
|
||||||
setActiveConvoId(undefined)
|
setActiveConvoId(undefined)
|
||||||
}
|
}
|
||||||
setCurrentPrompt('')
|
|
||||||
setShowingProductDetail(false)
|
|
||||||
setShowingAdvancedPrompt(false)
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err)
|
console.error(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,14 +20,13 @@ export function useGetConfiguredModels() {
|
|||||||
const [models, setModels] = useState<ModelCatalog[]>([])
|
const [models, setModels] = useState<ModelCatalog[]>([])
|
||||||
|
|
||||||
async function getConfiguredModels(): Promise<ModelCatalog[]> {
|
async function getConfiguredModels(): Promise<ModelCatalog[]> {
|
||||||
return (
|
const models = await pluginManager
|
||||||
((await pluginManager
|
.get<ModelPlugin>(PluginType.Model)
|
||||||
.get<ModelPlugin>(PluginType.Model)
|
?.getConfiguredModels()
|
||||||
?.getConfiguredModels()) as ModelCatalog[]) ?? []
|
return models ?? []
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const fetchModels = async () => {
|
async function fetchModels() {
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
let models = await getConfiguredModels()
|
let models = await getConfiguredModels()
|
||||||
if (process.env.NODE_ENV === 'development') {
|
if (process.env.NODE_ENV === 'development') {
|
||||||
@ -37,10 +36,8 @@ export function useGetConfiguredModels() {
|
|||||||
setModels(models)
|
setModels(models)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO allow user for filter
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchModels()
|
fetchModels()
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
return { loading, models }
|
return { loading, models }
|
||||||
|
|||||||
@ -12,11 +12,10 @@ export function useGetDownloadedModels() {
|
|||||||
const [downloadedModels, setDownloadedModels] = useAtom(downloadedModelAtom)
|
const [downloadedModels, setDownloadedModels] = useAtom(downloadedModelAtom)
|
||||||
|
|
||||||
async function getDownloadedModels(): Promise<Model[]> {
|
async function getDownloadedModels(): Promise<Model[]> {
|
||||||
const models =
|
const models = await pluginManager
|
||||||
((await pluginManager
|
.get<ModelPlugin>(PluginType.Model)
|
||||||
.get<ModelPlugin>(PluginType.Model)
|
?.getDownloadedModels()
|
||||||
?.getDownloadedModels()) as Model[]) ?? []
|
return models ?? []
|
||||||
return models
|
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@ -10,15 +10,15 @@ import { currentConversationAtom } from '@/helpers/atoms/Conversation.atom'
|
|||||||
|
|
||||||
export default function useGetInputState() {
|
export default function useGetInputState() {
|
||||||
const [inputState, setInputState] = useState<InputType>('loading')
|
const [inputState, setInputState] = useState<InputType>('loading')
|
||||||
const currentConvo = useAtomValue(currentConversationAtom)
|
const currentThread = useAtomValue(currentConversationAtom)
|
||||||
const { activeModel } = useActiveModel()
|
const { activeModel } = useActiveModel()
|
||||||
const { downloadedModels } = useGetDownloadedModels()
|
const { downloadedModels } = useGetDownloadedModels()
|
||||||
|
|
||||||
const handleInputState = (
|
const handleInputState = (
|
||||||
convo: Thread | undefined,
|
thread: Thread | undefined,
|
||||||
currentModel: Model | undefined
|
currentModel: Model | undefined
|
||||||
) => {
|
) => {
|
||||||
if (convo == null) return
|
if (thread == null) return
|
||||||
if (currentModel == null) {
|
if (currentModel == null) {
|
||||||
setInputState('loading')
|
setInputState('loading')
|
||||||
return
|
return
|
||||||
@ -26,7 +26,7 @@ export default function useGetInputState() {
|
|||||||
|
|
||||||
// check if convo model id is in downloaded models
|
// check if convo model id is in downloaded models
|
||||||
const isModelAvailable = downloadedModels.some(
|
const isModelAvailable = downloadedModels.some(
|
||||||
(model) => model.id === convo.modelId
|
(model) => model.id === thread.modelId
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!isModelAvailable) {
|
if (!isModelAvailable) {
|
||||||
@ -35,7 +35,7 @@ export default function useGetInputState() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (convo.modelId !== currentModel.id) {
|
if (thread.modelId !== currentModel.id) {
|
||||||
// in case convo model and active model is different,
|
// in case convo model and active model is different,
|
||||||
// ask user to init the required model
|
// ask user to init the required model
|
||||||
setInputState('model-mismatch')
|
setInputState('model-mismatch')
|
||||||
@ -46,11 +46,11 @@ export default function useGetInputState() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
handleInputState(currentConvo, activeModel)
|
handleInputState(currentThread, activeModel)
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
return { inputState, currentConvo }
|
return { inputState, currentThread }
|
||||||
}
|
}
|
||||||
|
|
||||||
type InputType = 'available' | 'loading' | 'model-mismatch' | 'model-not-found'
|
type InputType = 'available' | 'loading' | 'model-mismatch' | 'model-not-found'
|
||||||
|
|||||||
@ -34,14 +34,15 @@ export default function useGetSystemResources() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getSystemResources()
|
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(() => {
|
const intervalId = setInterval(() => {
|
||||||
getSystemResources()
|
getSystemResources()
|
||||||
}, 5000)
|
}, 5000)
|
||||||
|
|
||||||
// clean up
|
// clean up interval
|
||||||
return () => clearInterval(intervalId)
|
return () => clearInterval(intervalId)
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
/* eslint-disable @typescript-eslint/naming-convention */
|
|
||||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
import { toast } from 'react-toastify'
|
import { toast } from 'react-toastify'
|
||||||
const API_BASE_PATH: string = '/api/v1'
|
const API_BASE_PATH: string = '/api/v1'
|
||||||
@ -48,7 +47,7 @@ export async function fetchApi(
|
|||||||
method: pluginFunc,
|
method: pluginFunc,
|
||||||
args: args,
|
args: args,
|
||||||
}),
|
}),
|
||||||
headers: { 'Content-Type': 'application/json', 'Authorization': '' },
|
headers: { contentType: 'application/json', Authorization: '' },
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
||||||
/* eslint-disable @typescript-eslint/ban-types */
|
/* eslint-disable @typescript-eslint/ban-types */
|
||||||
export class EventEmitter {
|
export class EventEmitter {
|
||||||
private handlers: Map<string, Function[]>
|
private handlers: Map<string, Function[]>
|
||||||
@ -28,6 +27,7 @@ export class EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
public emit(eventName: string, args: any): void {
|
public emit(eventName: string, args: any): void {
|
||||||
if (!this.handlers.has(eventName)) {
|
if (!this.handlers.has(eventName)) {
|
||||||
return
|
return
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
/* eslint-disable @typescript-eslint/naming-convention */
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
import { ModelCatalog, ModelVersion } from '@janhq/core'
|
import { ModelCatalog } from '@janhq/core'
|
||||||
|
|
||||||
export const dummyModel: ModelCatalog = {
|
export const dummyModel: ModelCatalog = {
|
||||||
id: 'aladar/TinyLLama-v0-GGUF',
|
id: 'aladar/TinyLLama-v0-GGUF',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user