From f068109e95518bd38509d25b5b7c901a15db4ab2 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Sat, 6 Jul 2024 17:28:17 +0800 Subject: [PATCH] feat: fetch chat completion with history messages --- src/renderer/src/pages/home/components/Messages.tsx | 4 ++-- .../src/pages/home/components/SendMessageSetting.tsx | 3 +++ src/renderer/src/services/api.ts | 9 +++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/renderer/src/pages/home/components/Messages.tsx b/src/renderer/src/pages/home/components/Messages.tsx index 82ddfdb6..b1debe7b 100644 --- a/src/renderer/src/pages/home/components/Messages.tsx +++ b/src/renderer/src/pages/home/components/Messages.tsx @@ -57,7 +57,7 @@ const Messages: FC = ({ assistant, topic }) => { EventEmitter.on(EVENT_NAMES.SEND_MESSAGE, async (msg: Message) => { console.debug({ assistant, provider, message: msg, topic }) onSendMessage(msg) - fetchChatCompletion({ assistant, message: msg, topic, onResponse: setLastMessage }) + fetchChatCompletion({ assistant, messages: [messages, msg], topic, onResponse: setLastMessage }) }), EventEmitter.on(EVENT_NAMES.AI_CHAT_COMPLETION, async (msg: Message) => { setLastMessage(null) @@ -72,7 +72,7 @@ const Messages: FC = ({ assistant, topic }) => { }) ] return () => unsubscribes.forEach((unsub) => unsub()) - }, [assistant, autoRenameTopic, onSendMessage, provider, topic, updateTopic]) + }, [assistant, autoRenameTopic, messages, onSendMessage, provider, topic, updateTopic]) useEffect(() => { runAsyncFunction(async () => { diff --git a/src/renderer/src/pages/home/components/SendMessageSetting.tsx b/src/renderer/src/pages/home/components/SendMessageSetting.tsx index 859f9032..53033cb4 100644 --- a/src/renderer/src/pages/home/components/SendMessageSetting.tsx +++ b/src/renderer/src/pages/home/components/SendMessageSetting.tsx @@ -1,6 +1,7 @@ import { useSettings } from '@renderer/hooks/useSettings' import { Dropdown, MenuProps } from 'antd' import { FC, PropsWithChildren } from 'react' +import { ArrowUpOutlined, EnterOutlined } from '@ant-design/icons' interface Props extends PropsWithChildren {} @@ -11,11 +12,13 @@ const SendMessageSetting: FC = ({ children }) => { { label: 'Enter Send', key: 'Enter', + icon: , onClick: () => setSendMessageShortcut('Enter') }, { label: 'Shift + Enter Send', key: 'Shift+Enter', + icon: , onClick: () => setSendMessageShortcut('Shift+Enter') } ] diff --git a/src/renderer/src/services/api.ts b/src/renderer/src/services/api.ts index a6c440f4..4e25ca9e 100644 --- a/src/renderer/src/services/api.ts +++ b/src/renderer/src/services/api.ts @@ -4,9 +4,10 @@ import { EVENT_NAMES, EventEmitter } from './event' import { ChatCompletionMessageParam, ChatCompletionSystemMessageParam } from 'openai/resources' import OpenAI from 'openai' import { getAssistantProvider, getDefaultModel } from './assistant' +import { takeRight } from 'lodash' interface FetchChatCompletionParams { - message: Message + messages: Message[] topic: Topic assistant: Assistant onResponse: (message: Message) => void @@ -20,7 +21,7 @@ const getOpenAiProvider = (provider: Provider) => { }) } -export async function fetchChatCompletion({ message, topic, assistant, onResponse }: FetchChatCompletionParams) { +export async function fetchChatCompletion({ messages, topic, assistant, onResponse }: FetchChatCompletionParams) { const provider = getAssistantProvider(assistant) const openaiProvider = getOpenAiProvider(provider) const defaultModel = getDefaultModel() @@ -30,7 +31,7 @@ export async function fetchChatCompletion({ message, topic, assistant, onRespons model: model.id, messages: [ { role: 'system', content: assistant.prompt }, - { role: 'user', content: message.content } + ...takeRight(messages, 5).map((message) => ({ role: message.role, content: message.content })) ], stream: true }) @@ -69,7 +70,7 @@ export async function fetchMessagesSummary({ messages, assistant }: FetchMessage const defaultModel = getDefaultModel() const model = assistant.model || defaultModel - const userMessages: ChatCompletionMessageParam[] = messages.map((message) => ({ + const userMessages: ChatCompletionMessageParam[] = takeRight(messages, 5).map((message) => ({ role: 'user', content: message.content }))