import type { LLMGenerationItem } from '@/types/workflow' import { RiArrowRightSLine, } from '@remixicon/react' import { useState } from 'react' import { useTranslation } from 'react-i18next' import AppIcon from '@/app/components/base/app-icon' import { TerminalSquare } from '@/app/components/base/icons/src/vender/line/development' import { Thinking } from '@/app/components/base/icons/src/vender/workflow' import { Markdown } from '@/app/components/base/markdown' import BlockIcon from '@/app/components/workflow/block-icon' import CodeEditor from '@/app/components/workflow/nodes/_base/components/editor/code-editor' import { CodeLanguage } from '@/app/components/workflow/nodes/code/types' import { BlockEnum } from '@/app/components/workflow/types' import { cn } from '@/utils/classnames' type ToolCallItemComponentProps = { className?: string payload: LLMGenerationItem } const isBashTool = (toolName?: string) => !!toolName?.toLowerCase().includes('bash') const ToolCallItemComponent = ({ className, payload, }: ToolCallItemComponentProps) => { const { t } = useTranslation() const [expand, setExpand] = useState(false) if (payload.type === 'text') { return ( ) } return (
{ setExpand(!expand) }} > { payload.type === 'thought' && ( ) } { payload.type === 'tool' && ( isBashTool(payload.toolName) ? (
) : ( ) ) } { payload.type === 'model' && ( ) } { payload.type === 'thought' && (
{ payload.thoughtCompleted && !expand && (payload.thoughtOutput || '') as string } { payload.thoughtCompleted && expand && 'THOUGHT' } { !payload.thoughtCompleted && 'THINKING...' }
) } { payload.type === 'tool' && (
{payload.toolName}
) } { payload.type === 'model' && (
{payload.modelName}
) } { !!payload.toolDuration && (
{payload.toolDuration?.toFixed(1)} s
) } { !!payload.modelDuration && (
{payload.modelDuration?.toFixed(1)} s
) }
{ expand && (
{ payload.type === 'thought' && typeof payload.thoughtOutput === 'string' && (
{payload.thoughtOutput}
) } { payload.type === 'model' && ( {t('common.data', { ns: 'workflow' })}
} language={CodeLanguage.json} value={payload.modelOutput} isJSONStringifyBeauty /> ) } { payload.type === 'tool' && ( {t('common.input', { ns: 'workflow' })}
} language={CodeLanguage.json} value={payload.toolArguments} isJSONStringifyBeauty /> ) } { payload.type === 'tool' && ( {t('common.output', { ns: 'workflow' })}} language={CodeLanguage.json} value={payload.toolOutput} isJSONStringifyBeauty /> ) } ) } ) } export default ToolCallItemComponent