|
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, |
|
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: '', |
|
}, |
|
} as any) |
|
} |
|
else if (item.type === 'select') { |
|
userInputs.push({ |
|
select: { |
|
label: item.name, |
|
variable: item.key, |
|
required: item.required !== false, |
|
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 |
|
} |
|
|