import { Fragment, useCallback, useEffect } from 'react' import { Tooltip, Switch, Input } from '@janhq/joi' import { useAtom, useAtomValue } from 'jotai' import { InfoIcon } from 'lucide-react' import { useCreateNewThread } from '@/hooks/useCreateNewThread' import useRecommendedModel from '@/hooks/useRecommendedModel' import AssistantSetting from '@/screens/Thread/ThreadCenterPanel/AssistantSetting' import { getConfigurationsData } from '@/utils/componentSettings' import { experimentalFeatureEnabledAtom } from '@/helpers/atoms/AppConfig.atom' import { activeAssistantAtom } from '@/helpers/atoms/Assistant.atom' import { selectedModelAtom } from '@/helpers/atoms/Model.atom' import { activeThreadAtom } from '@/helpers/atoms/Thread.atom' const Tools = () => { const experimentalFeature = useAtomValue(experimentalFeatureEnabledAtom) const activeThread = useAtomValue(activeThreadAtom) const activeAssistant = useAtomValue(activeAssistantAtom) const [selectedModel, setSelectedModel] = useAtom(selectedModelAtom) const { updateThreadMetadata } = useCreateNewThread() const { recommendedModel, downloadedModels } = useRecommendedModel() const componentDataAssistantSetting = getConfigurationsData( (activeAssistant?.tools && activeAssistant?.tools[0]?.settings) ?? {} ) useEffect(() => { if (!activeThread) return const model = downloadedModels.find( (model) => model.id === activeAssistant?.model.id ) setSelectedModel(model) }, [ recommendedModel, activeThread, downloadedModels, setSelectedModel, activeAssistant?.model.id, ]) const onRetrievalSwitchUpdate = useCallback( (enabled: boolean) => { if (!activeThread || !activeAssistant) return updateThreadMetadata({ ...activeThread, assistants: [ { ...activeAssistant, tools: [ { type: 'retrieval', enabled: enabled, settings: (activeAssistant.tools && activeAssistant.tools[0]?.settings) ?? {}, }, ], }, ], }) }, [activeAssistant, activeThread, updateThreadMetadata] ) const onTimeWeightedRetrieverSwitchUpdate = useCallback( (enabled: boolean) => { if (!activeThread || !activeAssistant) return updateThreadMetadata({ ...activeThread, assistants: [ { ...activeAssistant, tools: [ { type: 'retrieval', enabled: true, useTimeWeightedRetriever: enabled, settings: (activeAssistant.tools && activeAssistant.tools[0]?.settings) ?? {}, }, ], }, ], }) }, [activeAssistant, activeThread, updateThreadMetadata] ) if (!experimentalFeature) return null return ( {activeAssistant?.tools && componentDataAssistantSetting.length > 0 && (
onRetrievalSwitchUpdate(e.target.checked)} />
{activeAssistant?.tools[0].enabled && (
} content="Converts text into numbers for AI processing." />
} content="Prioritizes newer documents while searching but still considers older ones." />
onTimeWeightedRetrieverSwitchUpdate(e.target.checked) } />
)}
)}
) } export default Tools