提交 07948398 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 dff88a5f
...@@ -2,21 +2,22 @@ import { useState, KeyboardEvent, useEffect, useRef } from 'react' ...@@ -2,21 +2,22 @@ import { useState, KeyboardEvent, useEffect, useRef } from 'react'
import { Button, Card, FloatButton, Input, Select } from 'antd' import { Button, Card, FloatButton, Input, Select } from 'antd'
import { CircleArrowLeft, CircleArrowRight } from 'lucide-react' import { CircleArrowLeft, CircleArrowRight } from 'lucide-react'
import { OpenAIOutlined, ArrowUpOutlined } from '@ant-design/icons' import { OpenAIOutlined, ArrowUpOutlined } from '@ant-design/icons'
import { useAIStore, AIMessage } from './useAIStore' import { useAIStore } from './useAIStore'
import MarkdownRender from '@/components/MarkdownRender' // import MarkdownRender from '@/components/MarkdownRender'
import AIBubble from './AIBubble'
import './AIChat.scss' import './AIChat.scss'
export const MessageItem = ({ message }: { message: AIMessage }) => { // export const MessageItem = ({ message }: { message: AIMessage }) => {
return ( // return (
<div className={`message-item ${message.role}`}> // <div className={`message-item ${message.role}`}>
<div className="message-box"> // <div className="message-box">
<div className="message-content"> // <div className="message-content">
<MarkdownRender>{message.content}</MarkdownRender> // <MarkdownRender>{message.content}</MarkdownRender>
</div> // </div>
</div> // </div>
</div> // </div>
) // )
} // }
export default function AIChat() { export default function AIChat() {
const { ai, setAI, options, post, messages, isLoading, collapsed, toggleCollapsed } = useAIStore() const { ai, setAI, options, post, messages, isLoading, collapsed, toggleCollapsed } = useAIStore()
...@@ -51,7 +52,16 @@ export default function AIChat() { ...@@ -51,7 +52,16 @@ export default function AIChat() {
<div className="ai-chat-container"> <div className="ai-chat-container">
<div className="message-scroll" ref={messageScrollRef}> <div className="message-scroll" ref={messageScrollRef}>
{messages.map((message, index) => { {messages.map((message, index) => {
return <MessageItem message={message} key={index}></MessageItem> return (
<AIBubble
placement={message.role === 'assistant' ? 'start' : 'end'}
content={message.full_content || message.content}
loading={message.status === 'loading'}
typing={isLoading && index === messages.length - 1}
key={index}
style={{ margin: '10px 0' }}
/>
)
})} })}
</div> </div>
<div className="input-container"> <div className="input-container">
......
...@@ -10,7 +10,7 @@ export interface AIMessage { ...@@ -10,7 +10,7 @@ export interface AIMessage {
reasoning_content?: string reasoning_content?: string
full_content?: string full_content?: string
json?: any json?: any
status?: 'loading' | 'success' | 'error' status?: 'loading' | 'success' | 'error' | 'typing'
} }
export interface AIData { export interface AIData {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论