fix: anthropic first message must use the user role #39

{"type":"error","error":{"type":"invalid_request_error","message":"messages: first message must use the "user" role"}}
This commit is contained in:
kangfenmao 2024-09-05 13:35:16 +08:00
parent 521670f683
commit c257e8f0fe

View File

@ -4,7 +4,7 @@ import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant'
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/assistant'
import { EVENT_NAMES } from '@renderer/services/event'
import { Assistant, Message, Provider, Suggestion } from '@renderer/types'
import { sum, takeRight } from 'lodash'
import { first, sum, takeRight } from 'lodash'
import OpenAI from 'openai'
import BaseProvider from './BaseProvider'
@ -26,13 +26,17 @@ export default class AnthropicProvider extends BaseProvider {
const model = assistant.model || defaultModel
const { contextCount, maxTokens } = getAssistantSettings(assistant)
const userMessages = takeRight(messages, contextCount + 1).map((message) => {
const userMessages = takeRight(messages, contextCount + 2).map((message) => {
return {
role: message.role,
content: message.content
}
})
if (first(userMessages)?.role === 'assistant') {
userMessages.shift()
}
return new Promise<void>((resolve, reject) => {
const stream = this.sdk.messages
.stream({
@ -93,6 +97,10 @@ export default class AnthropicProvider extends BaseProvider {
content: message.content
}))
if (first(userMessages)?.role === 'assistant') {
userMessages.shift()
}
const systemMessage = {
role: 'system',
content: '你是一名擅长会话的助理,你需要将用户的会话总结为 10 个字以内的标题,不要使用标点符号和其他特殊符号。'