feat: Allow using file variables directly in the LLM node and support more file types. (#10679)

Co-authored-by: Joel <iamjoel007@gmail.com>
This commit is contained in:
-LAN-
2024-11-22 16:30:22 +08:00
committed by GitHub
parent 535c72cad7
commit c5f7d650b5
36 changed files with 1033 additions and 265 deletions

View File

@@ -160,6 +160,7 @@ const CodeEditor: FC<Props> = ({
hideSearch
vars={availableVars}
onChange={handleSelectVar}
isSupportFileVar={false}
/>
</div>
)}

View File

@@ -18,6 +18,7 @@ type Props = {
isSupportConstantValue?: boolean
onlyLeafNodeVar?: boolean
filterVar?: (payload: Var, valueSelector: ValueSelector) => boolean
isSupportFileVar?: boolean
}
const VarList: FC<Props> = ({
@@ -29,6 +30,7 @@ const VarList: FC<Props> = ({
isSupportConstantValue,
onlyLeafNodeVar,
filterVar,
isSupportFileVar = true,
}) => {
const { t } = useTranslation()
@@ -94,6 +96,7 @@ const VarList: FC<Props> = ({
defaultVarKindType={item.variable_type}
onlyLeafNodeVar={onlyLeafNodeVar}
filterVar={filterVar}
isSupportFileVar={isSupportFileVar}
/>
{!readonly && (
<RemoveButton

View File

@@ -59,6 +59,7 @@ type Props = {
isInTable?: boolean
onRemove?: () => void
typePlaceHolder?: string
isSupportFileVar?: boolean
}
const VarReferencePicker: FC<Props> = ({
@@ -81,6 +82,7 @@ const VarReferencePicker: FC<Props> = ({
isInTable,
onRemove,
typePlaceHolder,
isSupportFileVar = true,
}) => {
const { t } = useTranslation()
const store = useStoreApi()
@@ -382,6 +384,7 @@ const VarReferencePicker: FC<Props> = ({
vars={outputVars}
onChange={handleVarReferenceChange}
itemWidth={isAddBtnTrigger ? 260 : triggerWidth}
isSupportFileVar={isSupportFileVar}
/>
)}
</PortalToFollowElemContent>

View File

@@ -8,11 +8,13 @@ type Props = {
vars: NodeOutPutVar[]
onChange: (value: ValueSelector, varDetail: Var) => void
itemWidth?: number
isSupportFileVar?: boolean
}
const VarReferencePopup: FC<Props> = ({
vars,
onChange,
itemWidth,
isSupportFileVar = true,
}) => {
// max-h-[300px] overflow-y-auto todo: use portal to handle long list
return (
@@ -24,7 +26,7 @@ const VarReferencePopup: FC<Props> = ({
vars={vars}
onChange={onChange}
itemWidth={itemWidth}
isSupportFileVar
isSupportFileVar={isSupportFileVar}
/>
</div >
)

View File

@@ -89,6 +89,7 @@ const Panel: FC<NodePanelProps<CodeNodeType>> = ({
list={inputs.variables}
onChange={handleVarListChange}
filterVar={filterVar}
isSupportFileVar={false}
/>
</Field>
<Split />

View File

@@ -144,6 +144,7 @@ const ConfigPromptItem: FC<Props> = ({
onEditionTypeChange={onEditionTypeChange}
varList={varList}
handleAddVariable={handleAddVariable}
isSupportFileVar
/>
)
}

View File

@@ -67,6 +67,7 @@ const Panel: FC<NodePanelProps<LLMNodeType>> = ({
handleStop,
varInputs,
runResult,
filterJinjia2InputVar,
} = useConfig(id, data)
const model = inputs.model
@@ -194,7 +195,8 @@ const Panel: FC<NodePanelProps<LLMNodeType>> = ({
list={inputs.prompt_config?.jinja2_variables || []}
onChange={handleVarListChange}
onVarNameChange={handleVarNameChange}
filterVar={filterVar}
filterVar={filterJinjia2InputVar}
isSupportFileVar={false}
/>
</Field>
)}
@@ -233,6 +235,7 @@ const Panel: FC<NodePanelProps<LLMNodeType>> = ({
hasSetBlockStatus={hasSetBlockStatus}
nodesOutputVars={availableVars}
availableNodes={availableNodesWithParent}
isSupportFileVar
/>
{inputs.memory.query_prompt_template && !inputs.memory.query_prompt_template.includes('{{#sys.query#}}') && (

View File

@@ -278,11 +278,15 @@ const useConfig = (id: string, payload: LLMNodeType) => {
}, [inputs, setInputs])
const filterInputVar = useCallback((varPayload: Var) => {
return [VarType.number, VarType.string, VarType.secret, VarType.arrayString, VarType.arrayNumber, VarType.file, VarType.arrayFile].includes(varPayload.type)
}, [])
const filterJinjia2InputVar = useCallback((varPayload: Var) => {
return [VarType.number, VarType.string, VarType.secret, VarType.arrayString, VarType.arrayNumber].includes(varPayload.type)
}, [])
const filterMemoryPromptVar = useCallback((varPayload: Var) => {
return [VarType.arrayObject, VarType.array, VarType.number, VarType.string, VarType.secret, VarType.arrayString, VarType.arrayNumber].includes(varPayload.type)
return [VarType.arrayObject, VarType.array, VarType.number, VarType.string, VarType.secret, VarType.arrayString, VarType.arrayNumber, VarType.file, VarType.arrayFile].includes(varPayload.type)
}, [])
const {
@@ -406,6 +410,7 @@ const useConfig = (id: string, payload: LLMNodeType) => {
handleRun,
handleStop,
runResult,
filterJinjia2InputVar,
}
}

View File

@@ -64,6 +64,7 @@ const Panel: FC<NodePanelProps<TemplateTransformNodeType>> = ({
onChange={handleVarListChange}
onVarNameChange={handleVarNameChange}
filterVar={filterVar}
isSupportFileVar={false}
/>
</Field>
<Split />