import { TimelineContent, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, } from '@/components/originui/timeline'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from '@/components/ui/accordion'; import { cn } from '@/lib/utils'; import { isEmpty } from 'lodash'; import { Operator } from '../constant'; import OperatorIcon, { SVGIconMap } from '../operator-icon'; import { JsonViewer, toLowerCaseStringAndDeleteChar, typeMap, } from './workflow-timeline'; type IToolIcon = | Operator.ArXiv | Operator.GitHub | Operator.Bing | Operator.DuckDuckGo | Operator.Google | Operator.GoogleScholar | Operator.PubMed | Operator.TavilyExtract | Operator.TavilySearch | Operator.Wikipedia | Operator.YahooFinance | Operator.WenCai | Operator.Crawler; const capitalizeWords = (str: string, separator: string = '_'): string[] => { if (!str) return ['']; const resultStrArr = str.split(separator).map((word) => { return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); }); return resultStrArr; }; const changeToolName = (toolName: any) => { const name = 'Agent ' + capitalizeWords(toolName).join(' '); return name; }; const ToolTimelineItem = ({ tools, sendLoading = false, isShare = false, }: { tools: Record[]; sendLoading: boolean; isShare?: boolean; }) => { if (!tools || tools.length === 0 || !Array.isArray(tools)) return null; const blackList = ['add_memory', 'gen_citations']; const filteredTools = tools.filter( (tool) => !blackList.includes(tool.tool_name), ); const parentName = (str: string, separator: string = '-->') => { if (!str) return ''; const strs = str.split(separator); if (strs.length > 1) { return strs[strs.length - 1]; } else { return str; } }; return ( <> {filteredTools?.map((tool, idx) => { const toolName = capitalizeWords(tool.tool_name, '_').join(''); return ( = filteredTools.length - 1 && tool.result === '...' && sendLoading ), }, )} >
= filteredTools.length - 1 && tool.result === '...' && sendLoading, })} >
{!isShare && ( {parentName(tool.path) + ' '} {capitalizeWords(tool.tool_name, '_').join(' ')} )} {isShare && ( {typeMap[ toLowerCaseStringAndDeleteChar( tool.tool_name, ) as keyof typeof typeMap ] ?? changeToolName(tool.tool_name)} )} {/* 0:00*/} {tool.elapsed_time?.toString().slice(0, 6) || ''} {tool.elapsed_time ? 's' : ''} Online
{!isShare && (
)} {isShare && !isEmpty(tool.arguments) && (
{tool && tool.arguments && Object.entries(tool.arguments).length && Object.entries(tool.arguments).map(([key, val]) => { return (
{key}
{val as string}
); })}
)}
); })} ); }; export default ToolTimelineItem;