import type { UserInputFormItem } from '@/types/app' import type { PromptVariable } from '@/models/debug' export const userInputsFormToPromptVariables = (useInputs: UserInputFormItem[] | null, dataset_query_variable?: string) => { if (!useInputs) return [] const promptVariables: PromptVariable[] = [] useInputs.forEach((item: any) => { const isParagraph = !!item.paragraph const [type, content] = (() => { if (isParagraph) return ['paragraph', item.paragraph] if (item['text-input']) return ['string', item['text-input']] if (item.number) return ['number', item.number] if (item.file) return ['file', item.file] if (item['file-list']) return ['file-list', item['file-list']] if (item.external_data_tool) return [item.external_data_tool.type, item.external_data_tool] return ['select', item.select || {}] })() const is_context_var = dataset_query_variable === content?.variable if (type === 'string' || type === 'paragraph') { promptVariables.push({ key: content.variable, name: content.label, required: content.required, type, max_length: content.max_length, options: [], is_context_var, }) } else if (type === 'number') { promptVariables.push({ key: content.variable, name: content.label, required: content.required, type, options: [], }) } else if (type === 'select') { promptVariables.push({ key: content.variable, name: content.label, required: content.required, type: 'select', options: content.options, is_context_var, }) } else if (type === 'file') { promptVariables.push({ key: content.variable, name: content.label, required: content.required, type, config: { allowed_file_types: content.allowed_file_types, allowed_file_extensions: content.allowed_file_extensions, allowed_file_upload_methods: content.allowed_file_upload_methods, number_limits: 1, }, }) } else if (type === 'file-list') { promptVariables.push({ key: content.variable, name: content.label, required: content.required, type, config: { allowed_file_types: content.allowed_file_types, allowed_file_extensions: content.allowed_file_extensions, allowed_file_upload_methods: content.allowed_file_upload_methods, number_limits: content.max_length, }, }) } else { promptVariables.push({ key: content.variable, name: content.label, required: content.required, type: content.type, enabled: content.enabled, config: content.config, icon: content.icon, icon_background: content.icon_background, is_context_var, }) } }) return promptVariables } export const promptVariablesToUserInputsForm = (promptVariables: PromptVariable[]) => { const userInputs: UserInputFormItem[] = [] promptVariables.filter(({ key, name }) => { if (key && key.trim() && name && name.trim()) return true return false }).forEach((item: any) => { if (item.type === 'string' || item.type === 'paragraph') { userInputs.push({ [item.type === 'string' ? 'text-input' : 'paragraph']: { label: item.name, variable: item.key, required: item.required !== false, // default true max_length: item.max_length, default: '', }, } as any) return } if (item.type === 'number') { userInputs.push({ number: { label: item.name, variable: item.key, required: item.required !== false, // default true default: '', }, } as any) } else if (item.type === 'select') { userInputs.push({ select: { label: item.name, variable: item.key, required: item.required !== false, // default true options: item.options, default: '', }, } as any) } else { userInputs.push({ external_data_tool: { label: item.name, variable: item.key, enabled: item.enabled, type: item.type, config: item.config, required: item.required, icon: item.icon, icon_background: item.icon_background, }, } as any) } }) return userInputs }