diff --git a/src/renderer/src/config/antd.ts b/src/renderer/src/config/antd.ts index dfb57ee5..1f640c97 100644 --- a/src/renderer/src/config/antd.ts +++ b/src/renderer/src/config/antd.ts @@ -1,8 +1,10 @@ import { theme, ThemeConfig } from 'antd' +export const colorPrimary = '#00b96b' + export const AntdThemeConfig: ThemeConfig = { token: { - colorPrimary: '#00b96b', + colorPrimary, borderRadius: 5 }, algorithm: [theme.darkAlgorithm] diff --git a/src/renderer/src/pages/apps/AppsPage.tsx b/src/renderer/src/pages/apps/AppsPage.tsx index a75164e7..0b5703af 100644 --- a/src/renderer/src/pages/apps/AppsPage.tsx +++ b/src/renderer/src/pages/apps/AppsPage.tsx @@ -8,6 +8,7 @@ import { CheckOutlined, PlusOutlined } from '@ant-design/icons' import { SystemAssistant } from '@renderer/types' import { getDefaultAssistant } from '@renderer/services/assistant' import { useAssistants } from '@renderer/hooks/useAssistant' +import { colorPrimary } from '@renderer/config/antd' const { Title } = Typography @@ -45,7 +46,7 @@ const AppsPage: FC = () => { - + <Title level={5} style={{ marginBottom: 0, color: colorPrimary }}> {assistant.name} {added && ( diff --git a/src/renderer/src/pages/home/components/Messages.tsx b/src/renderer/src/pages/home/components/Messages.tsx index 604aabe5..4f373a80 100644 --- a/src/renderer/src/pages/home/components/Messages.tsx +++ b/src/renderer/src/pages/home/components/Messages.tsx @@ -94,11 +94,11 @@ const Messages: FC = ({ assistant, topic }) => { useEffect(() => hljs.highlightAll(), [messages, lastMessage]) useEffect(() => { - messagesRef.current?.scrollIntoView({ behavior: 'smooth' }) + messagesRef.current?.scrollTo({ top: 100000, behavior: 'auto' }) }, [messages]) return ( - + {lastMessage && } {reverse([...messages]).map((message) => ( diff --git a/src/renderer/src/pages/home/components/Navigation.tsx b/src/renderer/src/pages/home/components/Navigation.tsx index e30756d4..d743f188 100644 --- a/src/renderer/src/pages/home/components/Navigation.tsx +++ b/src/renderer/src/pages/home/components/Navigation.tsx @@ -1,4 +1,5 @@ import { NavbarCenter } from '@renderer/components/app/Navbar' +import { colorPrimary } from '@renderer/config/antd' import { useAssistant } from '@renderer/hooks/useAssistant' import { useProviders } from '@renderer/hooks/useProvider' import { Assistant } from '@renderer/types' @@ -23,7 +24,7 @@ const Navigation: FC = ({ activeAssistant }) => { children: p.models.map((m) => ({ key: m.id, label: m.name, - style: m.id === model?.id ? { color: '#00b96b' } : undefined, + style: m.id === model?.id ? { color: colorPrimary } : undefined, onClick: () => setModel(m) })) })) diff --git a/src/renderer/src/services/api.ts b/src/renderer/src/services/api.ts index 98d6c233..b7f95bd8 100644 --- a/src/renderer/src/services/api.ts +++ b/src/renderer/src/services/api.ts @@ -28,15 +28,6 @@ export async function fetchChatCompletion({ messages, topic, assistant, onRespon const defaultModel = getDefaultModel() 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 = { id: uuid(), role: 'assistant', @@ -47,15 +38,28 @@ export async function fetchChatCompletion({ messages, topic, assistant, onRespon createdAt: dayjs().format('YYYY-MM-DD HH:mm:ss') } - let content = '' + 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 + }) - for await (const chunk of stream) { - content = content + (chunk.choices[0]?.delta?.content || '') - onResponse({ ..._message, content }) + let content = '' + + for await (const chunk of stream) { + content = content + (chunk.choices[0]?.delta?.content || '') + onResponse({ ..._message, content }) + } + + _message.content = content + } catch (error: any) { + _message.content = `Error: ${error.message}` } - _message.content = content - EventEmitter.emit(EVENT_NAMES.AI_CHAT_COMPLETION, _message) return _message