@@ -0,0 +1,96 @@
|
||||
import { option } from '@typebot.io/forge'
|
||||
import { z } from '@typebot.io/forge/zod'
|
||||
import { baseOptions } from '../baseOptions'
|
||||
|
||||
const extractInfoBaseShape = {
|
||||
variableId: option.string.layout({
|
||||
inputType: 'variableDropdown',
|
||||
}),
|
||||
description: option.string.layout({
|
||||
label: 'Description',
|
||||
accordion: 'Advanced',
|
||||
}),
|
||||
isRequired: option.boolean.layout({
|
||||
label: 'Is required',
|
||||
moreInfoTooltip:
|
||||
'If set to false, there is a chance the variable will be empty',
|
||||
accordion: 'Advanced',
|
||||
defaultValue: true,
|
||||
}),
|
||||
}
|
||||
|
||||
export const toolParametersSchema = option
|
||||
.array(
|
||||
option.discriminatedUnion('type', [
|
||||
option
|
||||
.object({
|
||||
type: option.literal('string'),
|
||||
})
|
||||
.extend(extractInfoBaseShape),
|
||||
option
|
||||
.object({
|
||||
type: option.literal('number'),
|
||||
})
|
||||
.extend(extractInfoBaseShape),
|
||||
option
|
||||
.object({
|
||||
type: option.literal('boolean'),
|
||||
})
|
||||
.extend(extractInfoBaseShape),
|
||||
option
|
||||
.object({
|
||||
type: option.literal('enum'),
|
||||
values: option
|
||||
.array(option.string)
|
||||
.layout({ itemLabel: 'possible value', mergeWithLastField: true }),
|
||||
})
|
||||
.extend(extractInfoBaseShape),
|
||||
])
|
||||
)
|
||||
.layout({
|
||||
itemLabel: 'variable mapping',
|
||||
accordion: 'Schema',
|
||||
})
|
||||
|
||||
type Props = {
|
||||
defaultModel?: string
|
||||
modelFetch: string | readonly [string, ...string[]]
|
||||
modelHelperText?: string
|
||||
}
|
||||
|
||||
export const parseGenerateVariablesOptions = ({
|
||||
defaultModel,
|
||||
modelFetch,
|
||||
modelHelperText,
|
||||
}: Props) =>
|
||||
option.object({
|
||||
model:
|
||||
typeof modelFetch === 'string'
|
||||
? option.string.layout({
|
||||
placeholder: 'Select a model',
|
||||
label: 'Model',
|
||||
defaultValue: defaultModel,
|
||||
fetcher: modelFetch,
|
||||
helperText: modelHelperText,
|
||||
})
|
||||
: option.enum(modelFetch).layout({
|
||||
placeholder: 'Select a model',
|
||||
label: 'Model',
|
||||
defaultValue: defaultModel,
|
||||
helperText: modelHelperText,
|
||||
}),
|
||||
prompt: option.string.layout({
|
||||
label: 'Prompt',
|
||||
placeholder: 'Type your text here',
|
||||
inputType: 'textarea',
|
||||
isRequired: true,
|
||||
moreInfoTooltip:
|
||||
'Meant to guide the model on what to generate. i.e. "Generate a role-playing game character", "Extract the company name from this text", etc.',
|
||||
}),
|
||||
variablesToExtract: toolParametersSchema,
|
||||
})
|
||||
|
||||
export type GenerateVariablesOptions = z.infer<
|
||||
ReturnType<typeof parseGenerateVariablesOptions>
|
||||
> &
|
||||
z.infer<typeof baseOptions>
|
||||
Reference in New Issue
Block a user