From eba4042a62562aac6852e0f5b7c6a0708a7ef905 Mon Sep 17 00:00:00 2001 From: AkaraChen Date: Tue, 31 Dec 2024 11:52:15 +0800 Subject: [PATCH] wip: instruction field --- .../components/agent-strategy-selector.tsx | 2 +- .../nodes/_base/components/agent-strategy.tsx | 54 ++++++++++++++++--- .../nodes/_base/components/prompt/editor.tsx | 35 ++++++++---- .../components/workflow/nodes/agent/panel.tsx | 2 +- .../workflow/nodes/agent/use-config.ts | 18 ++++--- 5 files changed, 86 insertions(+), 25 deletions(-) diff --git a/web/app/components/workflow/nodes/_base/components/agent-strategy-selector.tsx b/web/app/components/workflow/nodes/_base/components/agent-strategy-selector.tsx index f82beaab93..9a4944080b 100644 --- a/web/app/components/workflow/nodes/_base/components/agent-strategy-selector.tsx +++ b/web/app/components/workflow/nodes/_base/components/agent-strategy-selector.tsx @@ -89,7 +89,7 @@ export const AgentStrategySelector = (props: AgentStrategySelectorProps) => { const { t } = useTranslation() return -
setOpen(o => !o)}> +
setOpen(o => !o)}> {/* eslint-disable-next-line @next/next/no-img-element */} {icon &&
= Omit & { typ type ToolSelectorSchema = CustomSchema<'tool-selector'> type MultipleToolSelectorSchema = CustomSchema<'array[tools]'> type StringSchema = CustomSchema<'string', { - template: { + template?: { enabled: boolean }, - auto_generate: { + auto_generate?: { type: string } }> @@ -50,6 +51,7 @@ export const AgentStrategy = (props: AgentStrategyProps) => { const { strategy, onStrategyChange, formSchema, formValue, onFormValueChange } = props const { t } = useTranslation() const language = useLanguage() + const defaultModel = useDefaultModel(ModelTypeEnum.textGeneration) const override: ComponentProps>['override'] = [ [FormTypeEnum.textNumber], (schema, props) => { @@ -125,14 +127,33 @@ export const AgentStrategy = (props: AgentStrategyProps) => { } case 'string': { const value = props.value[schema.variable] - const onChange = (value: any) => { + const onChange = (value: string) => { props.onChange({ ...props.value, [schema.variable]: value }) } return } } @@ -143,7 +164,26 @@ export const AgentStrategy = (props: AgentStrategyProps) => { strategy ?
- formSchemas={formSchema} + formSchemas={[ + ...formSchema, + ...[{ + name: 'instruction2', + type: 'string', + required: true, + label: { + en_US: 'Instruction2', + zh_Hans: '指令2', + pt_BR: 'Instruction2', + }, + auto_generate: { + type: 'prompt_instruction', + }, + template: { + enabled: true, + }, + // @ts-expect-error just for test + }].map(strategyParamToCredientialForm), + ]} value={formValue} onChange={onFormValueChange} validating={false} diff --git a/web/app/components/workflow/nodes/_base/components/prompt/editor.tsx b/web/app/components/workflow/nodes/_base/components/prompt/editor.tsx index 31e4282ff2..7fc0362da1 100644 --- a/web/app/components/workflow/nodes/_base/components/prompt/editor.tsx +++ b/web/app/components/workflow/nodes/_base/components/prompt/editor.tsx @@ -1,5 +1,5 @@ 'use client' -import type { FC } from 'react' +import type { FC, ReactNode } from 'react' import React, { useCallback, useRef } from 'react' import { RiDeleteBinLine, @@ -37,7 +37,7 @@ import Switch from '@/app/components/base/switch' import { Jinja } from '@/app/components/base/icons/src/vender/workflow' import { useStore } from '@/app/components/workflow/store' -interface Props { +type Props = { className?: string headerClassName?: string instanceId?: string @@ -68,6 +68,12 @@ interface Props { onEditionTypeChange?: (editionType: EditionType) => void varList?: Variable[] handleAddVariable?: (payload: any) => void + containerClassName?: string + gradientBorder?: boolean + titleTooltip?: ReactNode + inputClassName?: string + editorContainerClassName?: string + placeholderClassName?: string } const Editor: FC = ({ @@ -96,6 +102,12 @@ const Editor: FC = ({ handleAddVariable, onGenerated, modelConfig, + containerClassName, + gradientBorder = true, + titleTooltip, + inputClassName, + placeholderClassName, + editorContainerClassName, }) => { const { t } = useTranslation() const { eventEmitter } = useEventEmitterContextContext() @@ -129,10 +141,13 @@ const Editor: FC = ({ return ( -
-
-
-
{title}
+
+
+
+
+
{title}
+ {titleTooltip && } +
{value?.length || 0}
{isSupportPromptGenerator && ( @@ -201,12 +216,13 @@ const Editor: FC = ({
{!(isSupportJinja && editionType === EditionType.jinja2) ? ( -
+
= ({
) : ( -
+
= ({ onChange={onChange} noWrapper isExpand={isExpand} + className={inputClassName} />
)} diff --git a/web/app/components/workflow/nodes/agent/panel.tsx b/web/app/components/workflow/nodes/agent/panel.tsx index 31ef8fc6a4..7ea501815b 100644 --- a/web/app/components/workflow/nodes/agent/panel.tsx +++ b/web/app/components/workflow/nodes/agent/panel.tsx @@ -11,7 +11,7 @@ import type { CredentialFormSchema } from '@/app/components/header/account-setti const i18nPrefix = 'workflow.nodes.agent' -function strategyParamToCredientialForm(param: StrategyParamItem): CredentialFormSchema { +export function strategyParamToCredientialForm(param: StrategyParamItem): CredentialFormSchema { return { ...param as any, variable: param.name, diff --git a/web/app/components/workflow/nodes/agent/use-config.ts b/web/app/components/workflow/nodes/agent/use-config.ts index 04020da497..9cd3d12d87 100644 --- a/web/app/components/workflow/nodes/agent/use-config.ts +++ b/web/app/components/workflow/nodes/agent/use-config.ts @@ -16,12 +16,18 @@ const useConfig = (id: string, payload: AgentNodeType) => { inputs, setInputs, }) - const strategies = useStrategyProviderDetail( + const strategyProvider = useStrategyProviderDetail( inputs.agent_strategy_provider_name || '', ) - const currentStrategy = strategies.data?.declaration.strategies.find( + const currentStrategy = strategyProvider.data?.declaration.strategies.find( str => str.identity.name === inputs.agent_strategy_name, ) + const currentStrategyStatus = useMemo(() => { + if (strategyProvider.isLoading) return 'loading' + if (strategyProvider.isError) return 'plugin-not-found' + if (!currentStrategy) return 'strategy-not-found' + return 'success' + }, [currentStrategy, strategyProvider]) const formData = useMemo(() => { return Object.fromEntries( Object.entries(inputs.agent_parameters || {}).map(([key, value]) => { @@ -31,12 +37,9 @@ const useConfig = (id: string, payload: AgentNodeType) => { }, [inputs.agent_parameters]) const onFormChange = (value: Record) => { const res: ToolVarInputs = {} - const params = currentStrategy!.parameters Object.entries(value).forEach(([key, val]) => { - const param = params.find(p => p.name === key) - const isMixed = param?.type === 'string' res[key] = { - type: isMixed ? VarType.mixed : VarType.constant, + type: VarType.constant, value: val, } }) @@ -44,7 +47,6 @@ const useConfig = (id: string, payload: AgentNodeType) => { ...inputs, agent_parameters: res, }) - console.log(res) } return { readOnly, @@ -55,6 +57,8 @@ const useConfig = (id: string, payload: AgentNodeType) => { currentStrategy, formData, onFormChange, + currentStrategyStatus, + strategyProvider: strategyProvider.data, } }