feat: add error message
This commit is contained in:
parent
3c70ff4f8e
commit
88aefb6ad1
@ -1,8 +1,10 @@
|
|||||||
import { theme, ThemeConfig } from 'antd'
|
import { theme, ThemeConfig } from 'antd'
|
||||||
|
|
||||||
|
export const colorPrimary = '#00b96b'
|
||||||
|
|
||||||
export const AntdThemeConfig: ThemeConfig = {
|
export const AntdThemeConfig: ThemeConfig = {
|
||||||
token: {
|
token: {
|
||||||
colorPrimary: '#00b96b',
|
colorPrimary,
|
||||||
borderRadius: 5
|
borderRadius: 5
|
||||||
},
|
},
|
||||||
algorithm: [theme.darkAlgorithm]
|
algorithm: [theme.darkAlgorithm]
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import { CheckOutlined, PlusOutlined } from '@ant-design/icons'
|
|||||||
import { SystemAssistant } from '@renderer/types'
|
import { SystemAssistant } from '@renderer/types'
|
||||||
import { getDefaultAssistant } from '@renderer/services/assistant'
|
import { getDefaultAssistant } from '@renderer/services/assistant'
|
||||||
import { useAssistants } from '@renderer/hooks/useAssistant'
|
import { useAssistants } from '@renderer/hooks/useAssistant'
|
||||||
|
import { colorPrimary } from '@renderer/config/antd'
|
||||||
|
|
||||||
const { Title } = Typography
|
const { Title } = Typography
|
||||||
|
|
||||||
@ -45,7 +46,7 @@ const AppsPage: FC = () => {
|
|||||||
<Col span={6} key={group + index} style={{ marginBottom: 16 }}>
|
<Col span={6} key={group + index} style={{ marginBottom: 16 }}>
|
||||||
<AssistantCard>
|
<AssistantCard>
|
||||||
<AssistantHeader>
|
<AssistantHeader>
|
||||||
<Title level={5} style={{ marginBottom: 0, color: '#00b96b' }}>
|
<Title level={5} style={{ marginBottom: 0, color: colorPrimary }}>
|
||||||
{assistant.name}
|
{assistant.name}
|
||||||
</Title>
|
</Title>
|
||||||
{added && (
|
{added && (
|
||||||
|
|||||||
@ -94,11 +94,11 @@ const Messages: FC<Props> = ({ assistant, topic }) => {
|
|||||||
useEffect(() => hljs.highlightAll(), [messages, lastMessage])
|
useEffect(() => hljs.highlightAll(), [messages, lastMessage])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
messagesRef.current?.scrollIntoView({ behavior: 'smooth' })
|
messagesRef.current?.scrollTo({ top: 100000, behavior: 'auto' })
|
||||||
}, [messages])
|
}, [messages])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container id="messages" ref={messagesRef}>
|
<Container id="messages" key={assistant.id} ref={messagesRef}>
|
||||||
{lastMessage && <MessageItem message={lastMessage} />}
|
{lastMessage && <MessageItem message={lastMessage} />}
|
||||||
{reverse([...messages]).map((message) => (
|
{reverse([...messages]).map((message) => (
|
||||||
<MessageItem message={message} key={message.id} showMenu onDeleteMessage={onDeleteMessage} />
|
<MessageItem message={message} key={message.id} showMenu onDeleteMessage={onDeleteMessage} />
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { NavbarCenter } from '@renderer/components/app/Navbar'
|
import { NavbarCenter } from '@renderer/components/app/Navbar'
|
||||||
|
import { colorPrimary } from '@renderer/config/antd'
|
||||||
import { useAssistant } from '@renderer/hooks/useAssistant'
|
import { useAssistant } from '@renderer/hooks/useAssistant'
|
||||||
import { useProviders } from '@renderer/hooks/useProvider'
|
import { useProviders } from '@renderer/hooks/useProvider'
|
||||||
import { Assistant } from '@renderer/types'
|
import { Assistant } from '@renderer/types'
|
||||||
@ -23,7 +24,7 @@ const Navigation: FC<Props> = ({ activeAssistant }) => {
|
|||||||
children: p.models.map((m) => ({
|
children: p.models.map((m) => ({
|
||||||
key: m.id,
|
key: m.id,
|
||||||
label: m.name,
|
label: m.name,
|
||||||
style: m.id === model?.id ? { color: '#00b96b' } : undefined,
|
style: m.id === model?.id ? { color: colorPrimary } : undefined,
|
||||||
onClick: () => setModel(m)
|
onClick: () => setModel(m)
|
||||||
}))
|
}))
|
||||||
}))
|
}))
|
||||||
|
|||||||
@ -28,15 +28,6 @@ export async function fetchChatCompletion({ messages, topic, assistant, onRespon
|
|||||||
const defaultModel = getDefaultModel()
|
const defaultModel = getDefaultModel()
|
||||||
const model = assistant.model || defaultModel
|
const model = assistant.model || defaultModel
|
||||||
|
|
||||||
const stream = await openaiProvider.chat.completions.create({
|
|
||||||
model: model.id,
|
|
||||||
messages: [
|
|
||||||
{ role: 'system', content: assistant.prompt },
|
|
||||||
...takeRight(messages, 5).map((message) => ({ role: message.role, content: message.content }))
|
|
||||||
],
|
|
||||||
stream: true
|
|
||||||
})
|
|
||||||
|
|
||||||
const _message: Message = {
|
const _message: Message = {
|
||||||
id: uuid(),
|
id: uuid(),
|
||||||
role: 'assistant',
|
role: 'assistant',
|
||||||
@ -47,6 +38,16 @@ export async function fetchChatCompletion({ messages, topic, assistant, onRespon
|
|||||||
createdAt: dayjs().format('YYYY-MM-DD HH:mm:ss')
|
createdAt: dayjs().format('YYYY-MM-DD HH:mm:ss')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const stream = await openaiProvider.chat.completions.create({
|
||||||
|
model: model.id,
|
||||||
|
messages: [
|
||||||
|
{ role: 'system', content: assistant.prompt },
|
||||||
|
...takeRight(messages, 5).map((message) => ({ role: message.role, content: message.content }))
|
||||||
|
],
|
||||||
|
stream: true
|
||||||
|
})
|
||||||
|
|
||||||
let content = ''
|
let content = ''
|
||||||
|
|
||||||
for await (const chunk of stream) {
|
for await (const chunk of stream) {
|
||||||
@ -55,6 +56,9 @@ export async function fetchChatCompletion({ messages, topic, assistant, onRespon
|
|||||||
}
|
}
|
||||||
|
|
||||||
_message.content = content
|
_message.content = content
|
||||||
|
} catch (error: any) {
|
||||||
|
_message.content = `Error: ${error.message}`
|
||||||
|
}
|
||||||
|
|
||||||
EventEmitter.emit(EVENT_NAMES.AI_CHAT_COMPLETION, _message)
|
EventEmitter.emit(EVENT_NAMES.AI_CHAT_COMPLETION, _message)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user