fix: remote engine should not allow reinit (#3284)

* chore: local engines should not allow reinit

* fix: remote engines should not have install action
This commit is contained in:
Louis 2024-08-07 12:45:47 +07:00 committed by GitHub
parent 105a9aa1a1
commit 98abff0da3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 39 additions and 18 deletions

View File

@ -19,6 +19,17 @@ export type LlmEngine = (typeof LlmEngines)[number]
export type LocalEngine = (typeof LocalEngines)[number] export type LocalEngine = (typeof LocalEngines)[number]
export type RemoteEngine = (typeof RemoteEngines)[number] export type RemoteEngine = (typeof RemoteEngines)[number]
/**
* The available engine statuses.
*/
export enum EngineStatus {
Ready = 'ready',
MissingConfiguration = 'missing_configuration',
NotInitialized = 'not_initialized',
NotSupported = 'not_supported',
Error = 'error',
}
export type ModelArtifact = { export type ModelArtifact = {
filename: string filename: string
url: string url: string

View File

@ -1,4 +1,4 @@
import { HuggingFaceRepoData } from '@janhq/core/.' import { HuggingFaceRepoData } from '@janhq/core'
import { atom } from 'jotai' import { atom } from 'jotai'
// modals // modals

View File

@ -1,4 +1,5 @@
import { Engine } from '@cortexso/cortex.js/resources' import { Engine } from '@cortexso/cortex.js/resources'
import { EngineStatus } from '@janhq/core'
import { useMutation, useQueryClient } from '@tanstack/react-query' import { useMutation, useQueryClient } from '@tanstack/react-query'
import useCortex from './useCortex' import useCortex from './useCortex'
@ -22,7 +23,7 @@ const useEngineInit = () => {
const engineStatuses = queryCacheData as Engine[] const engineStatuses = queryCacheData as Engine[]
engineStatuses.forEach((engine) => { engineStatuses.forEach((engine) => {
if (engine.name === engineName) { if (engine.name === engineName) {
engine.status = 'ready' engine.status = EngineStatus.Ready
} }
}) })
console.debug(`Updated engine status: ${engineStatuses}`) console.debug(`Updated engine status: ${engineStatuses}`)

View File

@ -1,6 +1,6 @@
import { useCallback } from 'react' import { useCallback } from 'react'
import { HuggingFaceRepoData } from '@janhq/core/.' import { HuggingFaceRepoData } from '@janhq/core'
import { useQueryClient } from '@tanstack/react-query' import { useQueryClient } from '@tanstack/react-query'
import { useSetAtom } from 'jotai' import { useSetAtom } from 'jotai'

View File

@ -3,6 +3,7 @@ import { useCallback, useRef } from 'react'
import { import {
ChatCompletionCreateParamsNonStreaming, ChatCompletionCreateParamsNonStreaming,
ChatCompletionMessageParam, ChatCompletionMessageParam,
EngineStatus,
LocalEngines, LocalEngines,
Message, Message,
MessageContent, MessageContent,
@ -193,7 +194,7 @@ const useSendMessage = () => {
return false return false
} }
if (engineStatus.status !== 'ready') { if (engineStatus.status !== EngineStatus.Ready) {
toaster({ toaster({
title: errorTitle, title: errorTitle,
description: `Engine ${engineStatus.name} is not ready`, description: `Engine ${engineStatus.name} is not ready`,

View File

@ -2,7 +2,7 @@ import { useCallback, useMemo } from 'react'
import Image from 'next/image' import Image from 'next/image'
import { RemoteEngine, RemoteEngines } from '@janhq/core' import { EngineStatus, RemoteEngine, RemoteEngines } from '@janhq/core'
import { Button } from '@janhq/joi' import { Button } from '@janhq/joi'
import { useSetAtom } from 'jotai' import { useSetAtom } from 'jotai'
@ -70,7 +70,8 @@ const SetUpComponent: React.FC<SetUpProps> = ({
() => () =>
engineData == null engineData == null
? false ? false
: engineData.find((e) => e.name === engine)?.status === 'ready', : engineData.find((e) => e.name === engine)?.status ===
EngineStatus.Ready,
[engineData, engine] [engineData, engine]
) )

View File

@ -1,6 +1,6 @@
import React, { useCallback, useMemo } from 'react' import React, { useCallback, useMemo } from 'react'
import { LocalEngines, RemoteEngine } from '@janhq/core' import { EngineStatus, LocalEngines, RemoteEngine } from '@janhq/core'
import { Button } from '@janhq/joi' import { Button } from '@janhq/joi'
import { useAtomValue, useSetAtom } from 'jotai' import { useAtomValue, useSetAtom } from 'jotai'
@ -54,7 +54,8 @@ const HubModelCard: React.FC<HfModelEntry> = ({ name, downloads, model }) => {
const isEngineConfigured: boolean = const isEngineConfigured: boolean =
engineData == null || model?.engine == null engineData == null || model?.engine == null
? false ? false
: engineData.find((e) => e.name === model.engine)?.status === 'ready' : engineData.find((e) => e.name === model.engine)?.status ===
EngineStatus.Ready
const isModelDownloaded = downloadedModels.find( const isModelDownloaded = downloadedModels.find(
(m) => m.model === model!.model (m) => m.model === model!.model
@ -78,7 +79,8 @@ const HubModelCard: React.FC<HfModelEntry> = ({ name, downloads, model }) => {
const isApiKeyAdded: boolean = const isApiKeyAdded: boolean =
engineData == null || model?.engine == null engineData == null || model?.engine == null
? false ? false
: engineData.find((e) => e.name === model.engine)?.status === 'ready' : engineData.find((e) => e.name === model.engine)?.status ===
EngineStatus.Ready
const isModelDownloaded = downloadedModels.find( const isModelDownloaded = downloadedModels.find(
(m) => m.model === model.model (m) => m.model === model.model

View File

@ -1,6 +1,6 @@
import React, { useCallback } from 'react' import React, { useCallback } from 'react'
import { RemoteEngine } from '@janhq/core' import { EngineStatus, RemoteEngine } from '@janhq/core'
import { useAtomValue, useSetAtom } from 'jotai' import { useAtomValue, useSetAtom } from 'jotai'
import { toaster } from '@/containers/Toast' import { toaster } from '@/containers/Toast'
@ -38,7 +38,8 @@ const RemoteModelCard: React.FC<HfModelEntry> = ({ name, model }) => {
const isApiKeyAdded: boolean = const isApiKeyAdded: boolean =
engineData == null || model?.engine == null engineData == null || model?.engine == null
? false ? false
: engineData.find((e) => e.name === model.engine)?.status === 'ready' : engineData.find((e) => e.name === model.engine)?.status ===
EngineStatus.Ready
const isModelDownloaded = downloadedModels.find( const isModelDownloaded = downloadedModels.find(
(m) => m.model === model.model (m) => m.model === model.model

View File

@ -4,7 +4,7 @@ import React from 'react'
import Image from 'next/image' import Image from 'next/image'
import { RemoteEngine } from '@janhq/core' import { EngineStatus, RemoteEngine } from '@janhq/core'
import { Button } from '@janhq/joi' import { Button } from '@janhq/joi'
import { useSetAtom } from 'jotai' import { useSetAtom } from 'jotai'
@ -47,7 +47,8 @@ const RemoteModelGroup: React.FC<Props> = ({ data, engine, onSeeAllClick }) => {
() => () =>
engineData == null || engine == null engineData == null || engine == null
? false ? false
: engineData.find((e) => e.name === engine)?.status === 'ready', : engineData.find((e) => e.name === engine)?.status ===
EngineStatus.Ready,
[engineData, engine] [engineData, engine]
) )

View File

@ -2,6 +2,7 @@ import { Fragment, useCallback, useEffect, useState } from 'react'
import Image from 'next/image' import Image from 'next/image'
import { EngineStatus } from '@janhq/core'
import { Button, Input, Modal } from '@janhq/joi' import { Button, Input, Modal } from '@janhq/joi'
import { useAtom, useSetAtom } from 'jotai' import { useAtom, useSetAtom } from 'jotai'
import { ArrowUpRight } from 'lucide-react' import { ArrowUpRight } from 'lucide-react'
@ -28,7 +29,8 @@ const SetUpApiKeyModal: React.FC = () => {
useEffect(() => { useEffect(() => {
if (!remoteEngine || !engineData) return if (!remoteEngine || !engineData) return
const isEngineReady = const isEngineReady =
engineData.find((e) => e.name === remoteEngine)?.status === 'ready' engineData.find((e) => e.name === remoteEngine)?.status ===
EngineStatus.Ready
const fakeApiKey = '******************************************' const fakeApiKey = '******************************************'
setApiKey(isEngineReady ? fakeApiKey : '') setApiKey(isEngineReady ? fakeApiKey : '')
}, [remoteEngine, engineData]) }, [remoteEngine, engineData])

View File

@ -1,4 +1,4 @@
import { LlmEngine } from '@janhq/core/.' import { EngineStatus, LlmEngine, LocalEngines } from '@janhq/core'
import { import {
Button, Button,
ScrollArea, ScrollArea,
@ -69,8 +69,9 @@ const EngineSetting: React.FC = () => {
</TableCell> </TableCell>
<TableCell>{getStatusTitle(engineStatus.status)}</TableCell> <TableCell>{getStatusTitle(engineStatus.status)}</TableCell>
<TableCell> <TableCell>
{['ready', 'not_initialized'].includes( {LocalEngines.some((e) => e === engineStatus.name) &&
engineStatus.status [EngineStatus.Ready, EngineStatus.NotInitialized].includes(
engineStatus.status as EngineStatus
) ? ( ) ? (
<Button <Button
theme="primary" theme="primary"
@ -80,7 +81,7 @@ const EngineSetting: React.FC = () => {
) )
} }
> >
{engineStatus.status === 'ready' {engineStatus.status === EngineStatus.Ready
? 'Reinstall' ? 'Reinstall'
: 'Install'} : 'Install'}
</Button> </Button>