chore: clean up some redundant code (#2215)
Signed-off-by: James <james@jan.ai> Co-authored-by: James <james@jan.ai>
This commit is contained in:
parent
7f2513fe3e
commit
52f84dce9f
@ -11,8 +11,6 @@ import EventListenerWrapper from '@/containers/Providers/EventListener'
|
||||
import JotaiWrapper from '@/containers/Providers/Jotai'
|
||||
import ThemeWrapper from '@/containers/Providers/Theme'
|
||||
|
||||
import FeatureToggleWrapper from '@/context/FeatureToggle'
|
||||
|
||||
import { setupCoreServices } from '@/services/coreService'
|
||||
import {
|
||||
isCoreExtensionInstalled,
|
||||
@ -81,15 +79,13 @@ const Providers = (props: PropsWithChildren) => {
|
||||
{settingUp && <Loader description="Preparing Update..." />}
|
||||
{setupCore && activated && (
|
||||
<KeyListener>
|
||||
<FeatureToggleWrapper>
|
||||
<EventListenerWrapper>
|
||||
<TooltipProvider delayDuration={0}>
|
||||
<DataLoader>{children}</DataLoader>
|
||||
</TooltipProvider>
|
||||
{!isMac && <GPUDriverPrompt />}
|
||||
</EventListenerWrapper>
|
||||
<Toaster />
|
||||
</FeatureToggleWrapper>
|
||||
<EventListenerWrapper>
|
||||
<TooltipProvider delayDuration={0}>
|
||||
<DataLoader>{children}</DataLoader>
|
||||
</TooltipProvider>
|
||||
{!isMac && <GPUDriverPrompt />}
|
||||
</EventListenerWrapper>
|
||||
<Toaster />
|
||||
</KeyListener>
|
||||
)}
|
||||
</ThemeWrapper>
|
||||
|
||||
@ -1,104 +0,0 @@
|
||||
import { createContext, ReactNode, useEffect, useState } from 'react'
|
||||
|
||||
interface FeatureToggleContextType {
|
||||
experimentalFeature: boolean
|
||||
ignoreSSL: boolean
|
||||
proxy: string
|
||||
proxyEnabled: boolean
|
||||
vulkanEnabled: boolean
|
||||
setExperimentalFeature: (on: boolean) => void
|
||||
setVulkanEnabled: (on: boolean) => void
|
||||
setIgnoreSSL: (on: boolean) => void
|
||||
setProxy: (value: string) => void
|
||||
setProxyEnabled: (on: boolean) => void
|
||||
}
|
||||
|
||||
const initialContext: FeatureToggleContextType = {
|
||||
experimentalFeature: false,
|
||||
ignoreSSL: false,
|
||||
proxy: '',
|
||||
proxyEnabled: false,
|
||||
vulkanEnabled: false,
|
||||
setExperimentalFeature: () => {},
|
||||
setVulkanEnabled: () => {},
|
||||
setIgnoreSSL: () => {},
|
||||
setProxy: () => {},
|
||||
setProxyEnabled: () => {},
|
||||
}
|
||||
|
||||
export const FeatureToggleContext =
|
||||
createContext<FeatureToggleContextType>(initialContext)
|
||||
|
||||
export default function FeatureToggleWrapper({
|
||||
children,
|
||||
}: {
|
||||
children: ReactNode
|
||||
}) {
|
||||
const EXPERIMENTAL_FEATURE = 'experimentalFeature'
|
||||
const VULKAN_ENABLED = 'vulkanEnabled'
|
||||
const IGNORE_SSL = 'ignoreSSLFeature'
|
||||
const HTTPS_PROXY_FEATURE = 'httpsProxyFeature'
|
||||
const PROXY_FEATURE_ENABLED = 'proxyFeatureEnabled'
|
||||
|
||||
const [experimentalFeature, directSetExperimentalFeature] =
|
||||
useState<boolean>(false)
|
||||
const [proxyEnabled, directSetProxyEnabled] = useState<boolean>(false)
|
||||
const [vulkanEnabled, directEnableVulkan] = useState<boolean>(false)
|
||||
const [ignoreSSL, directSetIgnoreSSL] = useState<boolean>(false)
|
||||
const [proxy, directSetProxy] = useState<string>('')
|
||||
|
||||
useEffect(() => {
|
||||
directSetExperimentalFeature(
|
||||
localStorage.getItem(EXPERIMENTAL_FEATURE) === 'true'
|
||||
)
|
||||
directSetIgnoreSSL(localStorage.getItem(IGNORE_SSL) === 'true')
|
||||
directSetProxy(localStorage.getItem(HTTPS_PROXY_FEATURE) ?? '')
|
||||
directSetProxyEnabled(
|
||||
localStorage.getItem(PROXY_FEATURE_ENABLED) === 'true'
|
||||
)
|
||||
}, [])
|
||||
|
||||
const setExperimentalFeature = (on: boolean) => {
|
||||
localStorage.setItem(EXPERIMENTAL_FEATURE, on ? 'true' : 'false')
|
||||
directSetExperimentalFeature(on)
|
||||
}
|
||||
|
||||
const setVulkanEnabled = (on: boolean) => {
|
||||
localStorage.setItem(VULKAN_ENABLED, on ? 'true' : 'false')
|
||||
directEnableVulkan(on)
|
||||
}
|
||||
|
||||
const setIgnoreSSL = (on: boolean) => {
|
||||
localStorage.setItem(IGNORE_SSL, on ? 'true' : 'false')
|
||||
directSetIgnoreSSL(on)
|
||||
}
|
||||
|
||||
const setProxy = (proxy: string) => {
|
||||
localStorage.setItem(HTTPS_PROXY_FEATURE, proxy)
|
||||
directSetProxy(proxy)
|
||||
}
|
||||
|
||||
const setProxyEnabled = (on: boolean) => {
|
||||
localStorage.setItem(PROXY_FEATURE_ENABLED, on ? 'true' : 'false')
|
||||
directSetProxyEnabled(on)
|
||||
}
|
||||
|
||||
return (
|
||||
<FeatureToggleContext.Provider
|
||||
value={{
|
||||
experimentalFeature,
|
||||
ignoreSSL,
|
||||
proxy,
|
||||
proxyEnabled,
|
||||
vulkanEnabled,
|
||||
setExperimentalFeature,
|
||||
setVulkanEnabled,
|
||||
setIgnoreSSL,
|
||||
setProxy,
|
||||
setProxyEnabled,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</FeatureToggleContext.Provider>
|
||||
)
|
||||
}
|
||||
16
web/helpers/atoms/ApiServer.atom.ts
Normal file
16
web/helpers/atoms/ApiServer.atom.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { atomWithStorage } from 'jotai/utils'
|
||||
|
||||
export const hostOptions = ['127.0.0.1', '0.0.0.0']
|
||||
|
||||
export const apiServerPortAtom = atomWithStorage('apiServerPort', '1337')
|
||||
export const apiServerHostAtom = atomWithStorage('apiServerHost', '127.0.0.1')
|
||||
|
||||
export const apiServerCorsEnabledAtom = atomWithStorage(
|
||||
'apiServerCorsEnabled',
|
||||
true
|
||||
)
|
||||
|
||||
export const apiServerVerboseLogEnabledAtom = atomWithStorage(
|
||||
'apiServerVerboseLogEnabled',
|
||||
true
|
||||
)
|
||||
@ -1,3 +1,21 @@
|
||||
import { atom } from 'jotai'
|
||||
import { atomWithStorage } from 'jotai/utils'
|
||||
|
||||
const EXPERIMENTAL_FEATURE = 'experimentalFeature'
|
||||
const PROXY_FEATURE_ENABLED = 'proxyFeatureEnabled'
|
||||
const VULKAN_ENABLED = 'vulkanEnabled'
|
||||
const IGNORE_SSL = 'ignoreSSLFeature'
|
||||
const HTTPS_PROXY_FEATURE = 'httpsProxyFeature'
|
||||
|
||||
export const janDataFolderPathAtom = atom('')
|
||||
|
||||
export const experimentalFeatureEnabledAtom = atomWithStorage(
|
||||
EXPERIMENTAL_FEATURE,
|
||||
false
|
||||
)
|
||||
|
||||
export const proxyEnabledAtom = atomWithStorage(PROXY_FEATURE_ENABLED, false)
|
||||
export const proxyAtom = atomWithStorage(HTTPS_PROXY_FEATURE, '')
|
||||
|
||||
export const ignoreSslAtom = atomWithStorage(IGNORE_SSL, false)
|
||||
export const vulkanEnabledAtom = atomWithStorage(VULKAN_ENABLED, false)
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
import { useContext } from 'react'
|
||||
|
||||
import {
|
||||
ExtensionTypeEnum,
|
||||
HuggingFaceExtension,
|
||||
@ -7,18 +5,18 @@ import {
|
||||
Quantization,
|
||||
} from '@janhq/core'
|
||||
|
||||
import { useSetAtom } from 'jotai'
|
||||
|
||||
import { FeatureToggleContext } from '@/context/FeatureToggle'
|
||||
import { useAtomValue, useSetAtom } from 'jotai'
|
||||
|
||||
import { extensionManager } from '@/extension/ExtensionManager'
|
||||
import { ignoreSslAtom, proxyAtom } from '@/helpers/atoms/AppConfig.atom'
|
||||
import {
|
||||
conversionStatusAtom,
|
||||
conversionErrorAtom,
|
||||
} from '@/helpers/atoms/HFConverter.atom'
|
||||
|
||||
export const useConvertHuggingFaceModel = () => {
|
||||
const { ignoreSSL, proxy } = useContext(FeatureToggleContext)
|
||||
const proxy = useAtomValue(proxyAtom)
|
||||
const ignoreSSL = useAtomValue(ignoreSslAtom)
|
||||
const setConversionStatus = useSetAtom(conversionStatusAtom)
|
||||
const setConversionError = useSetAtom(conversionErrorAtom)
|
||||
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
import { useContext } from 'react'
|
||||
|
||||
import {
|
||||
Assistant,
|
||||
ConversationalExtension,
|
||||
@ -17,8 +15,6 @@ import { atom, useAtomValue, useSetAtom } from 'jotai'
|
||||
import { selectedModelAtom } from '@/containers/DropdownListSidebar'
|
||||
import { fileUploadAtom } from '@/containers/Providers/Jotai'
|
||||
|
||||
import { FeatureToggleContext } from '@/context/FeatureToggle'
|
||||
|
||||
import { generateThreadId } from '@/utils/thread'
|
||||
|
||||
import useRecommendedModel from './useRecommendedModel'
|
||||
@ -27,6 +23,7 @@ import useSetActiveThread from './useSetActiveThread'
|
||||
|
||||
import { extensionManager } from '@/extension'
|
||||
|
||||
import { experimentalFeatureEnabledAtom } from '@/helpers/atoms/AppConfig.atom'
|
||||
import {
|
||||
threadsAtom,
|
||||
threadStatesAtom,
|
||||
@ -59,7 +56,8 @@ export const useCreateNewThread = () => {
|
||||
const setFileUpload = useSetAtom(fileUploadAtom)
|
||||
const setSelectedModel = useSetAtom(selectedModelAtom)
|
||||
const setThreadModelParams = useSetAtom(setThreadModelParamsAtom)
|
||||
const { experimentalFeature } = useContext(FeatureToggleContext)
|
||||
|
||||
const experimentalEnabled = useAtomValue(experimentalFeatureEnabledAtom)
|
||||
const setIsGeneratingResponse = useSetAtom(isGeneratingResponseAtom)
|
||||
|
||||
const { recommendedModel, downloadedModels } = useRecommendedModel()
|
||||
@ -94,7 +92,7 @@ export const useCreateNewThread = () => {
|
||||
const assistantInfo: ThreadAssistantInfo = {
|
||||
assistant_id: assistant.id,
|
||||
assistant_name: assistant.name,
|
||||
tools: experimentalFeature ? [assistantTools] : assistant.tools,
|
||||
tools: experimentalEnabled ? [assistantTools] : assistant.tools,
|
||||
model: {
|
||||
id: defaultModel?.id ?? '*',
|
||||
settings: defaultModel?.settings ?? {},
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { useCallback, useContext } from 'react'
|
||||
import { useCallback } from 'react'
|
||||
|
||||
import {
|
||||
Model,
|
||||
@ -10,17 +10,22 @@ import {
|
||||
DownloadState,
|
||||
} from '@janhq/core'
|
||||
|
||||
import { useSetAtom } from 'jotai'
|
||||
|
||||
import { FeatureToggleContext } from '@/context/FeatureToggle'
|
||||
import { useAtomValue, useSetAtom } from 'jotai'
|
||||
|
||||
import { setDownloadStateAtom } from './useDownloadState'
|
||||
|
||||
import { extensionManager } from '@/extension/ExtensionManager'
|
||||
import {
|
||||
ignoreSslAtom,
|
||||
proxyAtom,
|
||||
proxyEnabledAtom,
|
||||
} from '@/helpers/atoms/AppConfig.atom'
|
||||
import { addDownloadingModelAtom } from '@/helpers/atoms/Model.atom'
|
||||
|
||||
export default function useDownloadModel() {
|
||||
const { ignoreSSL, proxy, proxyEnabled } = useContext(FeatureToggleContext)
|
||||
const ignoreSSL = useAtomValue(ignoreSslAtom)
|
||||
const proxy = useAtomValue(proxyAtom)
|
||||
const proxyEnabled = useAtomValue(proxyEnabledAtom)
|
||||
const setDownloadState = useSetAtom(setDownloadStateAtom)
|
||||
const addDownloadingModel = useSetAtom(addDownloadingModelAtom)
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { useContext, useEffect, useRef, useState } from 'react'
|
||||
import { useEffect, useRef, useState } from 'react'
|
||||
|
||||
import { InferenceEvent, MessageStatus, events } from '@janhq/core'
|
||||
|
||||
@ -24,8 +24,6 @@ import { twMerge } from 'tailwind-merge'
|
||||
|
||||
import { currentPromptAtom, fileUploadAtom } from '@/containers/Providers/Jotai'
|
||||
|
||||
import { FeatureToggleContext } from '@/context/FeatureToggle'
|
||||
|
||||
import { useActiveModel } from '@/hooks/useActiveModel'
|
||||
import { useClickOutside } from '@/hooks/useClickOutside'
|
||||
|
||||
@ -34,6 +32,7 @@ import useSendChatMessage from '@/hooks/useSendChatMessage'
|
||||
import FileUploadPreview from '../FileUploadPreview'
|
||||
import ImageUploadPreview from '../ImageUploadPreview'
|
||||
|
||||
import { experimentalFeatureEnabledAtom } from '@/helpers/atoms/AppConfig.atom'
|
||||
import { getCurrentChatMessagesAtom } from '@/helpers/atoms/ChatMessage.atom'
|
||||
import {
|
||||
activeThreadAtom,
|
||||
@ -58,7 +57,7 @@ const ChatInput: React.FC = () => {
|
||||
const fileInputRef = useRef<HTMLInputElement>(null)
|
||||
const imageInputRef = useRef<HTMLInputElement>(null)
|
||||
const [showAttacmentMenus, setShowAttacmentMenus] = useState(false)
|
||||
const { experimentalFeature } = useContext(FeatureToggleContext)
|
||||
const experimentalFeature = useAtomValue(experimentalFeatureEnabledAtom)
|
||||
const isGeneratingResponse = useAtomValue(isGeneratingResponseAtom)
|
||||
const threadStates = useAtomValue(threadStatesAtom)
|
||||
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import React, { useContext } from 'react'
|
||||
import React from 'react'
|
||||
|
||||
import {
|
||||
Input,
|
||||
@ -24,8 +23,6 @@ import DropdownListSidebar, {
|
||||
selectedModelAtom,
|
||||
} from '@/containers/DropdownListSidebar'
|
||||
|
||||
import { FeatureToggleContext } from '@/context/FeatureToggle'
|
||||
|
||||
import { useCreateNewThread } from '@/hooks/useCreateNewThread'
|
||||
|
||||
import { getConfigurationsData } from '@/utils/componentSettings'
|
||||
@ -37,6 +34,7 @@ import ModelSetting from '../ModelSetting'
|
||||
|
||||
import SettingComponentBuilder from '../ModelSetting/SettingComponent'
|
||||
|
||||
import { experimentalFeatureEnabledAtom } from '@/helpers/atoms/AppConfig.atom'
|
||||
import {
|
||||
activeThreadAtom,
|
||||
getActiveThreadModelParamsAtom,
|
||||
@ -50,7 +48,7 @@ const Sidebar: React.FC = () => {
|
||||
const activeModelParams = useAtomValue(getActiveThreadModelParamsAtom)
|
||||
const selectedModel = useAtomValue(selectedModelAtom)
|
||||
const { updateThreadMetadata } = useCreateNewThread()
|
||||
const { experimentalFeature } = useContext(FeatureToggleContext)
|
||||
const experimentalFeature = useAtomValue(experimentalFeatureEnabledAtom)
|
||||
|
||||
const modelEngineParams = toSettingParams(activeModelParams)
|
||||
const modelRuntimeParams = toRuntimeParams(activeModelParams)
|
||||
@ -174,7 +172,7 @@ const Sidebar: React.FC = () => {
|
||||
<div className="px-2 py-4">
|
||||
<SettingComponentBuilder
|
||||
componentData={componentDataEngineSetting}
|
||||
selector={(x: any) => x.name === 'prompt_template'}
|
||||
selector={(x) => x.name === 'prompt_template'}
|
||||
/>
|
||||
</div>
|
||||
</CardSidebar>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/* eslint-disable @typescript-eslint/naming-convention */
|
||||
import React, { useContext, useEffect, useState } from 'react'
|
||||
import React, { useEffect, useState } from 'react'
|
||||
|
||||
import { useDropzone } from 'react-dropzone'
|
||||
|
||||
@ -18,8 +18,6 @@ import { showLeftSideBarAtom } from '@/containers/Providers/KeyListener'
|
||||
|
||||
import { snackbar } from '@/containers/Toast'
|
||||
|
||||
import { FeatureToggleContext } from '@/context/FeatureToggle'
|
||||
|
||||
import { activeModelAtom } from '@/hooks/useActiveModel'
|
||||
import { queuedMessageAtom, reloadModelAtom } from '@/hooks/useSendChatMessage'
|
||||
|
||||
@ -31,6 +29,7 @@ import ChatInput from './ChatInput'
|
||||
import RequestDownloadModel from './RequestDownloadModel'
|
||||
import Sidebar from './Sidebar'
|
||||
|
||||
import { experimentalFeatureEnabledAtom } from '@/helpers/atoms/AppConfig.atom'
|
||||
import {
|
||||
activeThreadAtom,
|
||||
engineParamsUpdateAtom,
|
||||
@ -63,7 +62,7 @@ const ChatScreen: React.FC = () => {
|
||||
const reloadModel = useAtomValue(reloadModelAtom)
|
||||
const [dragRejected, setDragRejected] = useState({ code: '' })
|
||||
const setFileUpload = useSetAtom(fileUploadAtom)
|
||||
const { experimentalFeature } = useContext(FeatureToggleContext)
|
||||
const experimentalFeature = useAtomValue(experimentalFeatureEnabledAtom)
|
||||
|
||||
const activeModel = useAtomValue(activeModelAtom)
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { useCallback, useContext, useState } from 'react'
|
||||
import { useCallback, useState } from 'react'
|
||||
|
||||
import {
|
||||
Input,
|
||||
@ -15,13 +15,12 @@ import {
|
||||
import { useAtomValue, useSetAtom } from 'jotai'
|
||||
import { UploadIcon, SearchIcon } from 'lucide-react'
|
||||
|
||||
import { FeatureToggleContext } from '@/context/FeatureToggle'
|
||||
|
||||
import { setImportModelStageAtom } from '@/hooks/useImportModel'
|
||||
|
||||
import ExploreModelList from './ExploreModelList'
|
||||
import { HuggingFaceModal } from './HuggingFaceModal'
|
||||
|
||||
import { experimentalFeatureEnabledAtom } from '@/helpers/atoms/AppConfig.atom'
|
||||
import {
|
||||
configuredModelsAtom,
|
||||
downloadedModelsAtom,
|
||||
@ -38,7 +37,7 @@ const ExploreModelsScreen = () => {
|
||||
const [showHuggingFaceModal, setShowHuggingFaceModal] = useState(false)
|
||||
const setImportModelStage = useSetAtom(setImportModelStageAtom)
|
||||
|
||||
const { experimentalFeature } = useContext(FeatureToggleContext)
|
||||
const experimentalFeature = useAtomValue(experimentalFeatureEnabledAtom)
|
||||
|
||||
const filteredModels = configuredModels.filter((x) => {
|
||||
if (sortSelected === 'Downloaded') {
|
||||
|
||||
@ -20,7 +20,7 @@ import {
|
||||
SelectValue,
|
||||
} from '@janhq/uikit'
|
||||
|
||||
import { atom, useAtom, useAtomValue, useSetAtom } from 'jotai'
|
||||
import { useAtom, useAtomValue, useSetAtom } from 'jotai'
|
||||
|
||||
import { Paintbrush, CodeIcon } from 'lucide-react'
|
||||
import { ExternalLinkIcon, InfoIcon } from 'lucide-react'
|
||||
@ -53,13 +53,15 @@ import SettingComponentBuilder from '../Chat/ModelSetting/SettingComponent'
|
||||
|
||||
import { showRightSideBarAtom } from '../Chat/Sidebar'
|
||||
|
||||
import {
|
||||
apiServerCorsEnabledAtom,
|
||||
apiServerHostAtom,
|
||||
apiServerPortAtom,
|
||||
apiServerVerboseLogEnabledAtom,
|
||||
hostOptions,
|
||||
} from '@/helpers/atoms/ApiServer.atom'
|
||||
import { serverEnabledAtom } from '@/helpers/atoms/LocalServer.atom'
|
||||
|
||||
const corsEnabledAtom = atom(true)
|
||||
const verboseEnabledAtom = atom(true)
|
||||
const hostAtom = atom('127.0.0.1')
|
||||
const portAtom = atom('1337')
|
||||
|
||||
const LocalServerScreen = () => {
|
||||
const [errorRangePort, setErrorRangePort] = useState(false)
|
||||
const [serverEnabled, setServerEnabled] = useAtom(serverEnabledAtom)
|
||||
@ -73,14 +75,14 @@ const LocalServerScreen = () => {
|
||||
const modelEngineParams = toSettingParams(selectedModel?.settings)
|
||||
const componentDataEngineSetting = getConfigurationsData(modelEngineParams)
|
||||
|
||||
const [isCorsEnabled, setIsCorsEnabled] = useAtom(corsEnabledAtom)
|
||||
const [isVerboseEnabled, setIsVerboseEnabled] = useAtom(verboseEnabledAtom)
|
||||
const [host, setHost] = useAtom(hostAtom)
|
||||
const [port, setPort] = useAtom(portAtom)
|
||||
const [isCorsEnabled, setIsCorsEnabled] = useAtom(apiServerCorsEnabledAtom)
|
||||
const [isVerboseEnabled, setIsVerboseEnabled] = useAtom(
|
||||
apiServerVerboseLogEnabledAtom
|
||||
)
|
||||
const [host, setHost] = useAtom(apiServerHostAtom)
|
||||
const [port, setPort] = useAtom(apiServerPortAtom)
|
||||
const [loadModelError, setLoadModelError] = useAtom(loadModelErrorAtom)
|
||||
|
||||
const hostOptions = ['127.0.0.1', '0.0.0.0']
|
||||
|
||||
const FIRST_TIME_VISIT_API_SERVER = 'firstTimeVisitAPIServer'
|
||||
|
||||
const [firstTimeVisitAPIServer, setFirstTimeVisitAPIServer] =
|
||||
@ -88,11 +90,7 @@ const LocalServerScreen = () => {
|
||||
|
||||
const handleChangePort = useCallback(
|
||||
(value: string) => {
|
||||
if (Number(value) <= 0 || Number(value) >= 65536) {
|
||||
setErrorRangePort(true)
|
||||
} else {
|
||||
setErrorRangePort(false)
|
||||
}
|
||||
setErrorRangePort(Number(value) <= 0 || Number(value) >= 65536)
|
||||
setPort(value)
|
||||
},
|
||||
[setPort]
|
||||
|
||||
@ -1,12 +1,6 @@
|
||||
'use client'
|
||||
|
||||
import {
|
||||
useContext,
|
||||
useEffect,
|
||||
useState,
|
||||
useCallback,
|
||||
ChangeEvent,
|
||||
} from 'react'
|
||||
import { useEffect, useState, useCallback, ChangeEvent } from 'react'
|
||||
|
||||
import { openExternalUrl, fs } from '@janhq/core'
|
||||
|
||||
@ -29,20 +23,27 @@ import {
|
||||
ScrollArea,
|
||||
} from '@janhq/uikit'
|
||||
|
||||
import { useAtom } from 'jotai'
|
||||
import { AlertTriangleIcon, AlertCircleIcon } from 'lucide-react'
|
||||
|
||||
import ShortcutModal from '@/containers/ShortcutModal'
|
||||
|
||||
import { snackbar, toaster } from '@/containers/Toast'
|
||||
|
||||
import { FeatureToggleContext } from '@/context/FeatureToggle'
|
||||
|
||||
import { useActiveModel } from '@/hooks/useActiveModel'
|
||||
import { useSettings } from '@/hooks/useSettings'
|
||||
|
||||
import DataFolder from './DataFolder'
|
||||
import FactoryReset from './FactoryReset'
|
||||
|
||||
import {
|
||||
experimentalFeatureEnabledAtom,
|
||||
ignoreSslAtom,
|
||||
proxyAtom,
|
||||
proxyEnabledAtom,
|
||||
vulkanEnabledAtom,
|
||||
} from '@/helpers/atoms/AppConfig.atom'
|
||||
|
||||
type GPU = {
|
||||
id: string
|
||||
vram: number | null
|
||||
@ -50,22 +51,19 @@ type GPU = {
|
||||
}
|
||||
|
||||
const Advanced = () => {
|
||||
const {
|
||||
experimentalFeature,
|
||||
setExperimentalFeature,
|
||||
ignoreSSL,
|
||||
setIgnoreSSL,
|
||||
proxy,
|
||||
setProxy,
|
||||
proxyEnabled,
|
||||
setProxyEnabled,
|
||||
vulkanEnabled,
|
||||
setVulkanEnabled,
|
||||
} = useContext(FeatureToggleContext)
|
||||
const [experimentalEnabled, setExperimentalEnabled] = useAtom(
|
||||
experimentalFeatureEnabledAtom
|
||||
)
|
||||
const [vulkanEnabled, setVulkanEnabled] = useAtom(vulkanEnabledAtom)
|
||||
const [proxyEnabled, setProxyEnabled] = useAtom(proxyEnabledAtom)
|
||||
const [proxy, setProxy] = useAtom(proxyAtom)
|
||||
const [ignoreSSL, setIgnoreSSL] = useAtom(ignoreSslAtom)
|
||||
|
||||
const [partialProxy, setPartialProxy] = useState<string>(proxy)
|
||||
const [gpuEnabled, setGpuEnabled] = useState<boolean>(false)
|
||||
const [gpuList, setGpuList] = useState<GPU[]>([])
|
||||
const [gpusInUse, setGpusInUse] = useState<string[]>([])
|
||||
|
||||
const { readSettings, saveSettings, validateSettings, setShowNotification } =
|
||||
useSettings()
|
||||
const { stopModel } = useActiveModel()
|
||||
@ -169,8 +167,8 @@ const Advanced = () => {
|
||||
</p>
|
||||
</div>
|
||||
<Switch
|
||||
checked={experimentalFeature}
|
||||
onCheckedChange={setExperimentalFeature}
|
||||
checked={experimentalEnabled}
|
||||
onCheckedChange={setExperimentalEnabled}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@ -355,7 +353,7 @@ const Advanced = () => {
|
||||
)}
|
||||
|
||||
{/* Vulkan for AMD GPU/ APU and Intel Arc GPU */}
|
||||
{!isMac && experimentalFeature && (
|
||||
{!isMac && experimentalEnabled && (
|
||||
<div className="flex w-full items-start justify-between border-b border-border py-4 first:pt-0 last:border-none">
|
||||
<div className="flex-shrink-0 space-y-1.5">
|
||||
<div className="flex gap-x-2">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user