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

chore: update

上级 4ac31a11
import axios from '@/utils/axios'
import fetchEventSource from '@/utils/fetchEventSource'
// 流式编辑接口
export function aiEdit(options) {
return fetchEventSource('/api/ai/sky3/edit', options)
}
// 流式对话接口
export function aiChat(data) {
return axios.post('/api/ai/sky3/chat', data)
}
// 文本生成图片接口
export function aiGenerateImage(data) {
return axios.post('/api/ai/sky3/generateImage', data)
}
// 百度聊天接口
export function baiduAIChat(data) {
......
......@@ -2,13 +2,13 @@ import { useState, useEffect } from 'react'
import { SendOutlined } from '@ant-design/icons'
import { Drawer, Input, Button, message } from 'antd'
import dayjs from 'dayjs'
import { useAIChat } from './useAIChat'
import { useAIChat } from '@/hooks/useTiangongAI'
import normalAvatar from '@/assets/images/icon-normal-avatar.png'
import './AIChatDrawer.less'
const AIChatDrawer = props => {
const AIChatDrawer = (props) => {
const selectText = props.editor.getSelectionText()
const [open, setOpen] = useState(true)
......@@ -58,7 +58,9 @@ const AIChatDrawer = props => {
{messages.map((item, index) => {
return (
<div className={`chat-content-item`} key={index}>
{item.role_type === 'user' && <div className="time">{dayjs(item.time).format('YYYY-MM-DD HH:mm')}</div>}
{item.role_type === 'user' && (
<div className="time">{dayjs(item.time).format('YYYY-MM-DD HH:mm')}</div>
)}
{item.role_type === 'ai' && (
<div className="inside">
<div className="ai-in-content">
......@@ -92,12 +94,17 @@ const AIChatDrawer = props => {
defaultValue={value}
allowClear
disabled={isLoading}
onChange={e => setValue(e.target.value)}
onChange={(e) => setValue(e.target.value)}
placeholder="请输入内容"
style={{ height: '80px', resize: 'none' }}></Input.TextArea>
</div>
<div className="button">
<Button type="primary" icon={<SendOutlined />} loading={isLoading} size="large" onClick={targetChat}></Button>
<Button
type="primary"
icon={<SendOutlined />}
loading={isLoading}
size="large"
onClick={targetChat}></Button>
</div>
</div>
</div>
......
差异被折叠。
import { useState } from 'react'
import { aiEdit, aiChat, aiGenerateImage } from '@/api/ai'
export function useAIEdit() {
const [messages, setMessages] = useState([])
const [isLoading, setIsLoading] = useState(false)
const latestMessage = messages[messages.length - 1] || {}
const { text = '' } = latestMessage
const fetch = async params => {
setIsLoading(true)
try {
const res = await aiEdit({
body: JSON.stringify({ params }),
onmessage: res => {
let message = JSON.parse(res.data)
message = { ...message.data, request_id: message.request_id }
setMessages(prevMessages => {
const messageIndex = prevMessages.findIndex(m => m.request_id === message.request_id)
if (messageIndex === -1) {
return [...prevMessages, message]
} else {
return prevMessages.map(m => (m.request_id === message.request_id ? message : m))
}
})
}
})
} catch (error) {
console.error('Error fetching AI edit:', error)
} finally {
setIsLoading(false)
}
}
return { messages, text, setMessages, fetch, isLoading }
}
export function useAIChat() {
const [messages, setMessages] = useState([])
const fetch = async params => {
const res = await aiChat({
body: JSON.stringify({ params }),
onmessage: res => {
const message = JSON.parse(res.data)
console.log(message)
setMessages(messages => [...messages, message])
}
})
}
}
export function useAIGenerateImage() {
const [messages, setMessages] = useState([])
const fetch = async params => {
const res = await aiGenerateImage(params)
setMessages(res)
}
}
......@@ -7,13 +7,13 @@ export function useAIEdit() {
const latestMessage = messages[messages.length - 1] || {}
const text = latestMessage?.content || ''
const fetch = useCallback(async params => {
const fetch = useCallback(async (params) => {
setIsLoading(true)
try {
const defaultParams = { ernie_name: 'ERNIE-4.0-8K-Preview', stream: false }
const res = await baiduAIChat({ ...defaultParams, params })
const message = { role: 'assistant', content: res.data.result }
setMessages(prevMessages => [...prevMessages, message])
setMessages((prevMessages) => [...prevMessages, message])
} catch (error) {
console.error('Error fetching data:', error)
} finally {
......
......@@ -10,19 +10,21 @@ export function useAIChat() {
const [chatId, setChatId] = useState(null)
const [isLoading, setIsLoading] = useState(false)
const addMessage = useCallback(message => {
setMessages(prevMessages => [...prevMessages, message])
const addMessage = useCallback((message) => {
setMessages((prevMessages) => [...prevMessages, message])
}, [])
const updateMessages = useCallback(newMessage => {
setMessages(prevMessages => {
const existingMessage = prevMessages.find(msg => msg.conversationId === newMessage.conversationId)
const updateMessages = useCallback((newMessage) => {
setMessages((prevMessages) => {
const existingMessage = prevMessages.find((msg) => msg.conversationId === newMessage.conversationId)
const content = newMessage.content === '\n' ? '<br/>' : newMessage.content || ''
if (existingMessage) {
// 更新现有消息
return prevMessages.map(msg => (msg.conversationId === newMessage.conversationId ? { ...msg, content: msg.content + content } : msg))
return prevMessages.map((msg) =>
msg.conversationId === newMessage.conversationId ? { ...msg, content: msg.content + content } : msg
)
} else {
// 新增消息
return [...prevMessages, { ...newMessage, content, role_type: 'ai', time: Date.now() }]
......@@ -31,7 +33,7 @@ export function useAIChat() {
}, [])
const post = useCallback(
async data => {
async (data) => {
const timestamp = Date.now()
const sign = md5(`${authKey}${authSecret}${timestamp}`)
......@@ -40,7 +42,7 @@ export function useAIChat() {
role_type: 'user',
content: data.userChatInput,
conversationId: `user-${timestamp}`, // 生成一个唯一的 conversationId
time: Date.now()
time: Date.now(),
})
setIsLoading(true)
......@@ -52,7 +54,7 @@ export function useAIChat() {
authKey,
timestamp,
sign,
'Content-Type': 'application/json'
'Content-Type': 'application/json',
},
body: JSON.stringify({ ...data, chatId, agentId: authKey }),
onopen(response) {
......@@ -70,7 +72,7 @@ export function useAIChat() {
},
onclose() {
setIsLoading(false)
}
},
})
} catch (error) {
console.error('Post error:', error)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论