fix: filter empty user messages

This commit is contained in:
kangfenmao 2024-08-08 18:13:15 +08:00
parent 5a0927393d
commit 30a082b979
5 changed files with 12 additions and 13 deletions

View File

@ -56,5 +56,4 @@ electronDownload:
afterSign: scripts/notarize.js
releaseInfo:
releaseNotes: |
支持保存自定义智能体
修复话题重命名的问题
错误修复,优化体验

View File

@ -212,8 +212,7 @@ const resources = {
'keep_alive_time.description': 'The time in minutes to keep the connection alive, default is 5 minutes.'
},
error: {
'chat.response':
'Something went wrong. Please check your API key in settings > providers, or check your proxy in Settings > General > Proxy'
'chat.response': 'Something went wrong. Please check if you have set your API key in the Settings > Providers'
}
}
},
@ -427,7 +426,7 @@ const resources = {
'keep_alive_time.description': '对话后模型在内存中保持的时间默认5分钟'
},
error: {
'chat.response': '出错了,这通常是由于没有正确配置 API 密钥或代理导致的, 请前往设置 > 模型提供商中配置 API 密钥'
'chat.response': '出错了,如果没有配置 API 密钥,请前往设置 > 模型提供商中配置密钥'
}
}
}

View File

@ -2,7 +2,7 @@ import { useAssistant } from '@renderer/hooks/useAssistant'
import { useProviderByAssistant } from '@renderer/hooks/useProvider'
import { fetchChatCompletion, fetchMessagesSummary } from '@renderer/services/api'
import { EVENT_NAMES, EventEmitter } from '@renderer/services/event'
import { estimateHistoryTokenCount, filterAtMessages } from '@renderer/services/messages'
import { estimateHistoryTokenCount, filterMessages } from '@renderer/services/messages'
import LocalStorage from '@renderer/services/storage'
import { Assistant, Message, Model, Topic } from '@renderer/types'
import { getBriefInfo, runAsyncFunction, uuid } from '@renderer/utils'
@ -77,7 +77,7 @@ const Messages: FC<Props> = ({ assistant, topic }) => {
setTimeout(() => EventEmitter.emit(EVENT_NAMES.AI_AUTO_RENAME), 100)
}),
EventEmitter.on(EVENT_NAMES.REGENERATE_MESSAGE, async (model: Model) => {
const lastUserMessage = last(filterAtMessages(messages).filter((m) => m.role === 'user'))
const lastUserMessage = last(filterMessages(messages).filter((m) => m.role === 'user'))
if (lastUserMessage) {
const content = `[@${model.name}](#) ${getBriefInfo(lastUserMessage.content)}`
onSendMessage({ ...lastUserMessage, id: uuid(), type: '@', content })

View File

@ -14,7 +14,7 @@ import {
getTranslateModel
} from './assistant'
import { EVENT_NAMES, EventEmitter } from './event'
import { filterAtMessages } from './messages'
import { filterMessages } from './messages'
import ProviderSDK from './ProviderSDK'
export async function fetchChatCompletion({
@ -61,11 +61,12 @@ export async function fetchChatCompletion({
}, 1000)
try {
await providerSdk.completions(filterAtMessages(messages), assistant, ({ text, usage }) => {
await providerSdk.completions(filterMessages(messages), assistant, ({ text, usage }) => {
message.content = message.content + text || ''
message.usage = usage
onResponse({ ...message, status: 'pending' })
})
message.status = 'success'
} catch (error: any) {
message.content = `Error: ${error.message}`
message.status = 'error'

View File

@ -1,11 +1,11 @@
import { Assistant, Message } from '@renderer/types'
import { GPTTokens } from 'gpt-tokens'
import { takeRight } from 'lodash'
import { isEmpty, takeRight } from 'lodash'
import { getAssistantSettings } from './assistant'
export const filterAtMessages = (messages: Message[]) => {
return messages.filter((message) => message.type !== '@')
export const filterMessages = (messages: Message[]) => {
return messages.filter((message) => message.type !== '@').filter((message) => !isEmpty(message.content.trim()))
}
export function estimateInputTokenCount(text: string) {
@ -24,7 +24,7 @@ export function estimateHistoryTokenCount(assistant: Assistant, msgs: Message[])
model: 'gpt-4o',
messages: [
{ role: 'system', content: assistant.prompt },
...filterAtMessages(takeRight(msgs, contextCount)).map((message) => ({
...filterMessages(takeRight(msgs, contextCount)).map((message) => ({
role: message.role,
content: message.content
}))