| | |
| | | import type { FC } from 'react' |
| | | import React, { useMemo } from 'react' |
| | | import React from 'react' |
| | | import { useTranslation } from 'react-i18next' |
| | | import Split from '../_base/components/split' |
| | | import type { ToolNodeType } from './types' |
| | |
| | | import BeforeRunForm from '@/app/components/workflow/nodes/_base/components/before-run-form' |
| | | import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars' |
| | | import ResultPanel from '@/app/components/workflow/run/result-panel' |
| | | import { useRetryDetailShowInSingleRun } from '@/app/components/workflow/nodes/_base/components/retry/hooks' |
| | | import { useToolIcon } from '@/app/components/workflow/hooks' |
| | | import { useLogs } from '@/app/components/workflow/run/hooks' |
| | | import formatToTracingNodeList from '@/app/components/workflow/run/utils/format-log' |
| | | import StructureOutputItem from '@/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/show' |
| | | import { Type } from '../llm/types' |
| | | |
| | | const i18nPrefix = 'workflow.nodes.tool' |
| | | |
| | |
| | | handleRun, |
| | | handleStop, |
| | | runResult, |
| | | outputSchema, |
| | | hasObjectOutput, |
| | | } = useConfig(id, data) |
| | | const toolIcon = useToolIcon(data) |
| | | const logsParams = useLogs() |
| | | const nodeInfo = useMemo(() => { |
| | | if (!runResult) |
| | | return null |
| | | return formatToTracingNodeList([runResult], t)[0] |
| | | }, [runResult, t]) |
| | | const { |
| | | retryDetails, |
| | | handleRetryDetailsChange, |
| | | } = useRetryDetailShowInSingleRun() |
| | | |
| | | if (isLoading) { |
| | | return <div className='flex h-[200px] items-center justify-center'> |
| | |
| | | </> |
| | | )} |
| | | {!isShowAuthBtn && <> |
| | | <div className='space-y-4 px-4'> |
| | | <div className='px-4 space-y-4'> |
| | | {toolInputVarSchema.length > 0 && ( |
| | | <Field |
| | | title={t(`${i18nPrefix}.inputVars`)} |
| | |
| | | <Form |
| | | className='space-y-4' |
| | | itemClassName='!py-0' |
| | | fieldLabelClassName='!text-[13px] !font-semibold !text-text-secondary uppercase' |
| | | fieldLabelClassName='!text-[13px] !font-semibold !text-gray-700 uppercase' |
| | | value={toolSettingValue} |
| | | onChange={setToolSettingValue} |
| | | formSchemas={toolSettingSchema as any} |
| | | isEditMode={false} |
| | | showOnVariableMap={{}} |
| | | validating={false} |
| | | // inputClassName='!bg-gray-50' |
| | | inputClassName='!bg-gray-50' |
| | | readonly={readOnly} |
| | | /> |
| | | </div> |
| | |
| | | <> |
| | | <VarItem |
| | | name='text' |
| | | type='string' |
| | | type='String' |
| | | description={t(`${i18nPrefix}.outputVars.text`)} |
| | | isIndent={hasObjectOutput} |
| | | /> |
| | | <VarItem |
| | | name='files' |
| | | type='array[file]' |
| | | type='Array[File]' |
| | | description={t(`${i18nPrefix}.outputVars.files.title`)} |
| | | isIndent={hasObjectOutput} |
| | | /> |
| | | <VarItem |
| | | name='json' |
| | | type='array[object]' |
| | | type='Array[Object]' |
| | | description={t(`${i18nPrefix}.outputVars.json`)} |
| | | isIndent={hasObjectOutput} |
| | | /> |
| | | {outputSchema.map(outputItem => ( |
| | | <div key={outputItem.name}> |
| | | {outputItem.value?.type === 'object' ? ( |
| | | <StructureOutputItem |
| | | rootClassName='code-sm-semibold text-text-secondary' |
| | | payload={{ |
| | | schema: { |
| | | type: Type.object, |
| | | properties: { |
| | | [outputItem.name]: outputItem.value, |
| | | }, |
| | | additionalProperties: false, |
| | | }, |
| | | }} /> |
| | | ) : ( |
| | | <VarItem |
| | | name={outputItem.name} |
| | | type={outputItem.type.toLocaleLowerCase()} |
| | | description={outputItem.description} |
| | | isIndent={hasObjectOutput} |
| | | /> |
| | | )} |
| | | </div> |
| | | ))} |
| | | </> |
| | | </OutputVars> |
| | | </div> |
| | |
| | | runningStatus={runningStatus} |
| | | onRun={handleRun} |
| | | onStop={handleStop} |
| | | {...logsParams} |
| | | result={<ResultPanel {...runResult} showSteps={false} {...logsParams} nodeInfo={nodeInfo} />} |
| | | retryDetails={retryDetails} |
| | | onRetryDetailBack={handleRetryDetailsChange} |
| | | result={<ResultPanel {...runResult} showSteps={false} onShowRetryDetail={handleRetryDetailsChange} />} |
| | | /> |
| | | )} |
| | | </div> |