diff --git a/src/renderer/src/pages/home/components/Message.tsx b/src/renderer/src/pages/home/components/Message.tsx index e8caf5c4..1af496d9 100644 --- a/src/renderer/src/pages/home/components/Message.tsx +++ b/src/renderer/src/pages/home/components/Message.tsx @@ -9,6 +9,7 @@ import CodeBlock from './CodeBlock' import { EVENT_NAMES, EventEmitter } from '@renderer/services/event' import { getModelLogo } from '@renderer/services/provider' import Logo from '@renderer/assets/images/logo.png' +import { SyncOutlined } from '@ant-design/icons' interface Props { message: Message @@ -49,9 +50,16 @@ const MessageItem: FC = ({ message, showMenu, onDeleteMessage }) => { )} - - {message.content} - + {message.status === 'sending' && ( + + + + )} + {message.status !== 'sending' && ( + + {message.content} + + )} {showMenu && ( {message.role === 'user' && ( @@ -98,6 +106,13 @@ const MessageContent = styled.div` } ` +const MessageContentLoading = styled.div` + display: flex; + flex-direction: row; + align-items: center; + height: 32px; +` + const MenusBar = styled.div` display: flex; flex-direction: row; diff --git a/src/renderer/src/services/api.ts b/src/renderer/src/services/api.ts index 565f8c14..09b39da1 100644 --- a/src/renderer/src/services/api.ts +++ b/src/renderer/src/services/api.ts @@ -37,9 +37,11 @@ export async function fetchChatCompletion({ messages, topic, assistant, onRespon topicId: topic.id, modelId: model.id, createdAt: dayjs().format('YYYY-MM-DD HH:mm:ss'), - status: 'pending' + status: 'sending' } + onResponse({ ..._message }) + try { const stream = await openaiProvider.chat.completions.create({ model: model.id, @@ -54,7 +56,7 @@ export async function fetchChatCompletion({ messages, topic, assistant, onRespon for await (const chunk of stream) { content = content + (chunk.choices[0]?.delta?.content || '') - onResponse({ ..._message, content }) + onResponse({ ..._message, content, status: 'pending' }) } _message.content = content diff --git a/src/renderer/src/types/index.ts b/src/renderer/src/types/index.ts index 42ee5fbf..4c6d3e41 100644 --- a/src/renderer/src/types/index.ts +++ b/src/renderer/src/types/index.ts @@ -15,7 +15,7 @@ export type Message = { topicId: string modelId?: string createdAt: string - status: 'pending' | 'success' | 'error' + status: 'sending' | 'pending' | 'success' | 'error' } export type Topic = { @@ -37,7 +37,7 @@ export type Provider = { apiKey: string apiHost: string models: Model[] - enabled: boolean + enabled?: boolean isSystem?: boolean }