agent-messages.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import ModelIcon from '@/new-components/chat/content/ModelIcon';
  2. import { SwapRightOutlined } from '@ant-design/icons';
  3. import { GPTVis } from '@antv/gpt-vis';
  4. import rehypeRaw from 'rehype-raw';
  5. import remarkGfm from 'remark-gfm';
  6. import ReferencesContent from './ReferencesContent';
  7. import markdownComponents from './config';
  8. interface Props {
  9. data: {
  10. sender: string;
  11. receiver: string;
  12. model: string | null;
  13. markdown: string;
  14. resource: any;
  15. }[];
  16. }
  17. function AgentMessages({ data }: Props) {
  18. if (!data || !data.length) return null;
  19. return (
  20. <>
  21. {data.map((item, index) => (
  22. <div key={index} className='rounded'>
  23. <div className='flex items-center mb-3 text-sm'>
  24. {item.model ? <ModelIcon model={item.model} /> : <div className='rounded-full w-6 h-6 bg-gray-100' />}
  25. <div className='ml-2 opacity-70'>
  26. {item.sender}
  27. <SwapRightOutlined className='mx-2 text-base' />
  28. {item.receiver}
  29. </div>
  30. </div>
  31. <div className='whitespace-normal text-sm mb-3'>
  32. <GPTVis components={markdownComponents} remarkPlugins={[remarkGfm]} rehypePlugins={[rehypeRaw]}>
  33. {item.markdown}
  34. </GPTVis>
  35. </div>
  36. {item.resource && item.resource !== 'null' && <ReferencesContent references={item.resource} />}
  37. </div>
  38. ))}
  39. </>
  40. );
  41. }
  42. export default AgentMessages;