import React from 'react'; import { Checkbox, CreatableSelectInput, FormGroup, SelectInput, TextAreaInput, TextInput, } from '@/components/formInputs'; import { CaptionJobConfig } from '@/types'; import { handleCaptionerTypeChange } from '@/helpers/captionJobConfig'; import { captionerTypes, defaultQtype, groupedCaptionerTypes, maxNewTokensOptions, maxResOptions, quantizationOptions, } from '@/helpers/captionOptions'; type Props = { jobConfig: CaptionJobConfig; setJobConfig: (value: any, key?: string) => void; gpuIDs: string | null; setGpuIDs: (value: string | null) => void; gpuList: any; showGPUSelect: boolean; }; const CaptionSimpleJob: React.FC = ({ jobConfig, setJobConfig, gpuIDs, setGpuIDs, gpuList, showGPUSelect }) => { const selectedCaptionOption = captionerTypes.find(option => option.name === jobConfig.config.process[0].type); const additionalSections = selectedCaptionOption?.additionalSections || []; const minNewTokens = selectedCaptionOption?.minNewTokens ?? 0; const newTokensOptions = maxNewTokensOptions.filter(option => parseInt(option.value) >= minNewTokens); return (
{ handleCaptionerTypeChange(jobConfig.config.process[0].type, value, jobConfig, setJobConfig); }} options={groupedCaptionerTypes} />
{showGPUSelect && (
setGpuIDs(value)} options={gpuList.map((gpu: any) => ({ value: `${gpu.index}`, label: `GPU #${gpu.index}` }))} />
)}
{ if (value?.trim() === '') { value = null; } setJobConfig(value, 'config.process[0].caption.model_name_or_path'); }} placeholder="" options={selectedCaptionOption?.name_or_path_options || []} required />
{additionalSections.includes('caption.model_name_or_path2') && (
{ if (value?.trim() === '') { value = null; } setJobConfig(value, 'config.process[0].caption.model_name_or_path2'); }} placeholder="" options={selectedCaptionOption?.name_or_path2_options || []} />
)} {additionalSections.includes('caption.fixed_caption') && (
{ if (value?.trim() === '') { //@ts-ignore value = undefined; } setJobConfig(value, 'config.process[0].caption.fixed_caption'); }} placeholder="Enter fixed caption (if you want the same caption for all audio files)" />
)}
{ if (value === '') { setJobConfig(false, 'config.process[0].caption.quantize'); value = defaultQtype; } else { setJobConfig(true, 'config.process[0].caption.quantize'); } setJobConfig(value, 'config.process[0].caption.qtype'); }} options={quantizationOptions} />
{ setJobConfig(value, 'config.process[0].caption.caption_extension'); }} options={[ { value: 'txt', label: 'txt' }, { value: 'json', label: 'json' }, { value: 'caption', label: 'caption' }, ]} />
{additionalSections.includes('caption.max_res') && (
{ const intVal = parseInt(value); if (!isNaN(intVal)) { setJobConfig(intVal, 'config.process[0].caption.max_res'); } }} options={maxResOptions} />
)} {additionalSections.includes('caption.max_new_tokens') && (
{ const intVal = parseInt(value); if (!isNaN(intVal)) { setJobConfig(intVal, 'config.process[0].caption.max_new_tokens'); } }} options={newTokensOptions} />
)}
setJobConfig(value, 'config.process[0].caption.low_vram')} /> setJobConfig(value, 'config.process[0].caption.recaption')} /> setJobConfig(value, 'config.process[0].caption.compile')} /> {additionalSections.includes('caption.thinking') && ( setJobConfig(value, 'config.process[0].caption.thinking')} /> )}
{additionalSections.includes('caption.caption_prompt') && (
{ setJobConfig(value, 'config.process[0].caption.caption_prompt'); }} placeholder="Enter caption prompt" />
)}
); }; export default CaptionSimpleJob;