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

chore: update

上级 bc53e756
import { Bubble, BubbleProps } from '@ant-design/x'
import MarkdownRender from '@/components/MarkdownRender'
const renderMarkdown = (content: string) => <MarkdownRender>{content}</MarkdownRender>
export default function AIBubble(props: BubbleProps) {
return <Bubble messageRender={renderMarkdown} {...props}></Bubble>
}
...@@ -134,11 +134,11 @@ export async function openAI(data: AIData, options: SSEOptions) { ...@@ -134,11 +134,11 @@ export async function openAI(data: AIData, options: SSEOptions) {
const aiService = { const aiService = {
async post(data: AIData, options: SSEOptions) { async post(data: AIData, options: SSEOptions) {
const messages: AIMessage[] = [] const messages: AIMessage[] = []
// const dataset = localStorage.getItem('dataset') const dataset = localStorage.getItem('dataset')
// if (dataset) { if (dataset) {
// const datasetInfo = JSON.parse(dataset) const datasetInfo = JSON.parse(dataset)
// messages.push({ role: 'system', content: `这是一个数据集:${JSON.stringify(datasetInfo)}` }) messages.push({ role: 'system', content: `这是一个数据集:${JSON.stringify(datasetInfo)}` })
// } }
data.messages = [...messages, ...data.messages] data.messages = [...messages, ...data.messages]
const providers = { const providers = {
...@@ -150,7 +150,7 @@ const aiService = { ...@@ -150,7 +150,7 @@ const aiService = {
openAI, openAI,
} }
const provider = providers[data.model as keyof typeof providers] || openAI const provider = providers[data.model as keyof typeof providers] || qwen
await provider(data, options) await provider(data, options)
}, },
} }
......
...@@ -9,6 +9,7 @@ export interface AIMessage { ...@@ -9,6 +9,7 @@ export interface AIMessage {
content: string content: string
reasoning_content?: string reasoning_content?: string
json?: any json?: any
loading?: boolean
} }
export interface AIData { export interface AIData {
......
...@@ -54,6 +54,7 @@ export const useAIStore = create<AIState>((set, get) => ({ ...@@ -54,6 +54,7 @@ export const useAIStore = create<AIState>((set, get) => ({
{ {
signal: controller.signal, signal: controller.signal,
onUpdate: (message) => { onUpdate: (message) => {
console.log(message)
set((state) => { set((state) => {
const messageIndex = state.messages.findIndex((msg) => msg.id === message.id) const messageIndex = state.messages.findIndex((msg) => msg.id === message.id)
......
import { Button, Flex, Modal, Spin } from 'antd' import { Button, Modal } from 'antd'
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { useAI } from '@/ai/useAI' import { useAI } from '@/ai/useAI'
import MarkdownRender from '@/components/MarkdownRender' import AIBubble from '@/ai/AIBubble'
export default function AIModal({ prompt }: { prompt: string }) { export default function AIModal({ prompt }: { prompt: string }) {
const [open, setOpen] = useState(false) const [open, setOpen] = useState(false)
...@@ -9,9 +9,7 @@ export default function AIModal({ prompt }: { prompt: string }) { ...@@ -9,9 +9,7 @@ export default function AIModal({ prompt }: { prompt: string }) {
useEffect(() => { useEffect(() => {
if (open) { if (open) {
post({ post({ messages: [{ role: 'user', content: prompt }] })
messages: [{ role: 'user', content: prompt }],
})
} }
}, [open, prompt]) }, [open, prompt])
return ( return (
...@@ -20,10 +18,7 @@ export default function AIModal({ prompt }: { prompt: string }) { ...@@ -20,10 +18,7 @@ export default function AIModal({ prompt }: { prompt: string }) {
AI建议 AI建议
</Button> </Button>
<Modal title="AI建议" open={open} footer={null} width={1000} onCancel={() => setOpen(false)} destroyOnClose> <Modal title="AI建议" open={open} footer={null} width={1000} onCancel={() => setOpen(false)} destroyOnClose>
<MarkdownRender>{message?.content}</MarkdownRender> <AIBubble loading={!message?.content} typing={isLoading} content={message?.content}></AIBubble>
<Flex justify="center">
<Spin size="large" spinning={isLoading}></Spin>
</Flex>
</Modal> </Modal>
</> </>
) )
......
import { Button, Flex, Modal, Spin } from 'antd' import { Button, Modal } from 'antd'
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { useAI } from '@/ai/useAI' import { useAI } from '@/ai/useAI'
import MarkdownRender from '@/components/MarkdownRender' import AIBubble from '@/ai/AIBubble'
export default function DataReport() { export default function DataReport() {
const [open, setOpen] = useState(false) const [open, setOpen] = useState(false)
...@@ -26,10 +26,7 @@ export default function DataReport() { ...@@ -26,10 +26,7 @@ export default function DataReport() {
数据分析报告 数据分析报告
</Button> </Button>
<Modal title="数据分析报告" open={open} footer={null} width={1000} onCancel={() => setOpen(false)} destroyOnClose> <Modal title="数据分析报告" open={open} footer={null} width={1000} onCancel={() => setOpen(false)} destroyOnClose>
<MarkdownRender>{message?.content}</MarkdownRender> <AIBubble loading={!message?.content} typing={isLoading} content={message?.content}></AIBubble>
<Flex justify="center">
<Spin size="large" spinning={isLoading}></Spin>
</Flex>
</Modal> </Modal>
</> </>
) )
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论