| import { useMemo } from 'react'; | |
| import { Capabilities } from 'librechat-data-provider'; | |
| import { useFormContext, useWatch } from 'react-hook-form'; | |
| import type { TConfig, AssistantsEndpoint } from 'librechat-data-provider'; | |
| import type { AssistantForm } from '~/common'; | |
| import ImageVision from './ImageVision'; | |
| import { useLocalize } from '~/hooks'; | |
| import Retrieval from './Retrieval'; | |
| import CodeFiles from './CodeFiles'; | |
| import Code from './Code'; | |
| export default function CapabilitiesForm({ | |
| version, | |
| endpoint, | |
| codeEnabled, | |
| retrievalEnabled, | |
| assistantsConfig, | |
| }: { | |
| version: number | string; | |
| codeEnabled?: boolean; | |
| retrievalEnabled?: boolean; | |
| endpoint: AssistantsEndpoint; | |
| assistantsConfig?: TConfig | null; | |
| }) { | |
| const localize = useLocalize(); | |
| const methods = useFormContext<AssistantForm>(); | |
| const { control } = methods; | |
| const assistant = useWatch({ control, name: 'assistant' }); | |
| const assistant_id = useWatch({ control, name: 'id' }); | |
| const files = useMemo(() => { | |
| if (typeof assistant === 'string') { | |
| return []; | |
| } | |
| return assistant.code_files; | |
| }, [assistant]); | |
| const retrievalModels = useMemo( | |
| () => new Set(assistantsConfig?.retrievalModels ?? []), | |
| [assistantsConfig], | |
| ); | |
| const imageVisionEnabled = useMemo( | |
| () => assistantsConfig?.capabilities?.includes(Capabilities.image_vision), | |
| [assistantsConfig], | |
| ); | |
| return ( | |
| <div className="mb-4"> | |
| <div className="mb-1.5 flex items-center"> | |
| <span> | |
| <label className="text-token-text-primary block font-medium"> | |
| {localize('com_assistants_capabilities')} | |
| </label> | |
| </span> | |
| </div> | |
| <div className="flex flex-col items-start gap-2"> | |
| {codeEnabled && <Code version={version} />} | |
| {retrievalEnabled && ( | |
| <Retrieval endpoint={endpoint} version={version} retrievalModels={retrievalModels} /> | |
| )} | |
| {imageVisionEnabled && version == 1 && <ImageVision />} | |
| {codeEnabled && version && ( | |
| <CodeFiles | |
| assistant_id={assistant_id} | |
| version={version} | |
| endpoint={endpoint} | |
| files={files} | |
| /> | |
| )} | |
| </div> | |
| </div> | |
| ); | |
| } | |