fix: remove filter messages

This commit is contained in:
kangfenmao 2024-09-26 14:55:09 +08:00
parent be081ccf7a
commit a973c5fb89
6 changed files with 36 additions and 16 deletions

View File

@ -1,5 +1,5 @@
export const DEFAULT_TEMPERATURE = 0.7 export const DEFAULT_TEMPERATURE = 0.7
export const DEFAULT_CONEXTCOUNT = 6 export const DEFAULT_CONEXTCOUNT = 5
export const DEFAULT_MAX_TOKENS = 4096 export const DEFAULT_MAX_TOKENS = 4096
export const FONT_FAMILY = export const FONT_FAMILY =
"Ubuntu, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif" "Ubuntu, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif"

View File

@ -9,8 +9,8 @@ import { useAssistant } from '@renderer/hooks/useAssistant'
import useAvatar from '@renderer/hooks/useAvatar' import useAvatar from '@renderer/hooks/useAvatar'
import { useModel } from '@renderer/hooks/useModel' import { useModel } from '@renderer/hooks/useModel'
import { useSettings } from '@renderer/hooks/useSettings' import { useSettings } from '@renderer/hooks/useSettings'
import { Message } from '@renderer/types' import { Message, Model } from '@renderer/types'
import { firstLetter, removeLeadingEmoji } from '@renderer/utils' import { firstLetter, getBriefInfo, removeLeadingEmoji } from '@renderer/utils'
import { Alert, Avatar, Divider } from 'antd' import { Alert, Avatar, Divider } from 'antd'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { upperFirst } from 'lodash' import { upperFirst } from 'lodash'
@ -106,7 +106,7 @@ const MessageItem: FC<Props> = ({ message, index, lastMessage, onDeleteMessage }
</AvatarWrapper> </AvatarWrapper>
</MessageHeader> </MessageHeader>
<MessageContentContainer style={{ fontFamily, fontSize }}> <MessageContentContainer style={{ fontFamily, fontSize }}>
<MessageContent message={message} /> <MessageContent message={message} model={model} />
{!lastMessage && ( {!lastMessage && (
<MessageFooter style={{ border: messageBorder, flexDirection: isLastMessage ? 'row-reverse' : undefined }}> <MessageFooter style={{ border: messageBorder, flexDirection: isLastMessage ? 'row-reverse' : undefined }}>
<MessgeTokens message={message} /> <MessgeTokens message={message} />
@ -126,7 +126,7 @@ const MessageItem: FC<Props> = ({ message, index, lastMessage, onDeleteMessage }
) )
} }
const MessageContent: React.FC<{ message: Message }> = ({ message }) => { const MessageContent: React.FC<{ message: Message; model?: Model }> = ({ message, model }) => {
const { t } = useTranslation() const { t } = useTranslation()
if (message.status === 'sending') { if (message.status === 'sending') {
@ -148,6 +148,11 @@ const MessageContent: React.FC<{ message: Message }> = ({ message }) => {
) )
} }
if (message.type === '@' && model) {
const content = `[@${model.name}](#) ${getBriefInfo(message.content)}`
return <Markdown message={{ ...message, content }} />
}
return ( return (
<> <>
<Markdown message={message} /> <Markdown message={message} />

View File

@ -7,7 +7,7 @@ import { EVENT_NAMES, EventEmitter } from '@renderer/services/event'
import { deleteMessageFiles, filterMessages, getContextCount } from '@renderer/services/messages' import { deleteMessageFiles, filterMessages, getContextCount } from '@renderer/services/messages'
import { estimateHistoryTokens, estimateMessageUsage } from '@renderer/services/tokens' import { estimateHistoryTokens, estimateMessageUsage } from '@renderer/services/tokens'
import { Assistant, Message, Model, Topic } from '@renderer/types' import { Assistant, Message, Model, Topic } from '@renderer/types'
import { captureScrollableDiv, getBriefInfo, runAsyncFunction, uuid } from '@renderer/utils' import { captureScrollableDiv, runAsyncFunction, uuid } from '@renderer/utils'
import { t } from 'i18next' import { t } from 'i18next'
import { flatten, last, reverse, take } from 'lodash' import { flatten, last, reverse, take } from 'lodash'
import { FC, useCallback, useEffect, useRef, useState } from 'react' import { FC, useCallback, useEffect, useRef, useState } from 'react'
@ -73,7 +73,14 @@ const Messages: FC<Props> = ({ assistant, topic, setActiveTopic }) => {
const unsubscribes = [ const unsubscribes = [
EventEmitter.on(EVENT_NAMES.SEND_MESSAGE, async (msg: Message) => { EventEmitter.on(EVENT_NAMES.SEND_MESSAGE, async (msg: Message) => {
await onSendMessage(msg) await onSendMessage(msg)
containerRef.current?.scrollTo({ top: containerRef.current.scrollHeight, behavior: 'auto' })
// Scroll to bottom
setTimeout(
() => containerRef.current?.scrollTo({ top: containerRef.current.scrollHeight, behavior: 'auto' }),
10
)
// Fetch completion
fetchChatCompletion({ fetchChatCompletion({
assistant, assistant,
messages: [...messages, msg], messages: [...messages, msg],
@ -89,8 +96,12 @@ const Messages: FC<Props> = ({ assistant, topic, setActiveTopic }) => {
EventEmitter.on(EVENT_NAMES.REGENERATE_MESSAGE, async (model: Model) => { EventEmitter.on(EVENT_NAMES.REGENERATE_MESSAGE, async (model: Model) => {
const lastUserMessage = last(filterMessages(messages).filter((m) => m.role === 'user')) const lastUserMessage = last(filterMessages(messages).filter((m) => m.role === 'user'))
if (lastUserMessage) { if (lastUserMessage) {
const content = `[@${model.name}](#) ${getBriefInfo(lastUserMessage.content)}` onSendMessage({
onSendMessage({ ...lastUserMessage, id: uuid(), type: '@', content }) ...lastUserMessage,
id: uuid(),
type: '@',
modelId: model.id
})
fetchChatCompletion({ fetchChatCompletion({
assistant, assistant,
topic, topic,

View File

@ -3,7 +3,7 @@ import { MessageCreateParamsNonStreaming, MessageParam } from '@anthropic-ai/sdk
import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant' import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant'
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/assistant' import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/assistant'
import { EVENT_NAMES } from '@renderer/services/event' import { EVENT_NAMES } from '@renderer/services/event'
import { filterContextMessages, filterMessages } from '@renderer/services/messages' import { filterContextMessages } from '@renderer/services/messages'
import { Assistant, FileTypes, Message, Provider, Suggestion } from '@renderer/types' import { Assistant, FileTypes, Message, Provider, Suggestion } from '@renderer/types'
import { first, flatten, sum, takeRight } from 'lodash' import { first, flatten, sum, takeRight } from 'lodash'
import OpenAI from 'openai' import OpenAI from 'openai'
@ -58,7 +58,7 @@ export default class AnthropicProvider extends BaseProvider {
const { contextCount, maxTokens, streamOutput } = getAssistantSettings(assistant) const { contextCount, maxTokens, streamOutput } = getAssistantSettings(assistant)
const userMessagesParams: MessageParam[] = [] const userMessagesParams: MessageParam[] = []
const _messages = filterMessages(filterContextMessages(takeRight(messages, contextCount + 2))) const _messages = filterContextMessages(takeRight(messages, contextCount + 2))
onFilterMessages(_messages) onFilterMessages(_messages)

View File

@ -9,10 +9,10 @@ import {
} from '@google/generative-ai' } from '@google/generative-ai'
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/assistant' import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/assistant'
import { EVENT_NAMES } from '@renderer/services/event' import { EVENT_NAMES } from '@renderer/services/event'
import { filterContextMessages, filterMessages } from '@renderer/services/messages' import { filterContextMessages } from '@renderer/services/messages'
import { Assistant, FileTypes, Message, Provider, Suggestion } from '@renderer/types' import { Assistant, FileTypes, Message, Provider, Suggestion } from '@renderer/types'
import axios from 'axios' import axios from 'axios'
import { isEmpty, takeRight } from 'lodash' import { first, isEmpty, takeRight } from 'lodash'
import OpenAI from 'openai' import OpenAI from 'openai'
import BaseProvider from './BaseProvider' import BaseProvider from './BaseProvider'
@ -59,9 +59,13 @@ export default class GeminiProvider extends BaseProvider {
const model = assistant.model || defaultModel const model = assistant.model || defaultModel
const { contextCount, maxTokens, streamOutput } = getAssistantSettings(assistant) const { contextCount, maxTokens, streamOutput } = getAssistantSettings(assistant)
const userMessages = filterMessages(filterContextMessages(takeRight(messages, contextCount + 1))) const userMessages = filterContextMessages(takeRight(messages, contextCount + 2))
onFilterMessages(userMessages) onFilterMessages(userMessages)
if (first(userMessages)?.role === 'assistant') {
userMessages.shift()
}
const userLastMessage = userMessages.pop() const userLastMessage = userMessages.pop()
const history: Content[] = [] const history: Content[] = []

View File

@ -2,7 +2,7 @@ import { isLocalAi } from '@renderer/config/env'
import { isVisionModel } from '@renderer/config/models' import { isVisionModel } from '@renderer/config/models'
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/assistant' import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/assistant'
import { EVENT_NAMES } from '@renderer/services/event' import { EVENT_NAMES } from '@renderer/services/event'
import { filterContextMessages, filterMessages } from '@renderer/services/messages' import { filterContextMessages } from '@renderer/services/messages'
import { Assistant, FileTypes, Message, Model, Provider, Suggestion } from '@renderer/types' import { Assistant, FileTypes, Message, Model, Provider, Suggestion } from '@renderer/types'
import { removeQuotes } from '@renderer/utils' import { removeQuotes } from '@renderer/utils'
import { first, takeRight } from 'lodash' import { first, takeRight } from 'lodash'
@ -117,7 +117,7 @@ export default class OpenAIProvider extends BaseProvider {
const systemMessage = assistant.prompt ? { role: 'system', content: assistant.prompt } : undefined const systemMessage = assistant.prompt ? { role: 'system', content: assistant.prompt } : undefined
const userMessages: ChatCompletionMessageParam[] = [] const userMessages: ChatCompletionMessageParam[] = []
const _messages = filterMessages(filterContextMessages(takeRight(messages, contextCount + 1))) const _messages = filterContextMessages(takeRight(messages, contextCount + 1))
onFilterMessages(_messages) onFilterMessages(_messages)
for (const message of _messages) { for (const message of _messages) {