From c257e8f0feada68f6e44f4e9a858c31e88340900 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Thu, 5 Sep 2024 13:35:16 +0800 Subject: [PATCH] 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"}} --- src/renderer/src/providers/AnthropicProvider.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/renderer/src/providers/AnthropicProvider.ts b/src/renderer/src/providers/AnthropicProvider.ts index 8af370d892..ba2b6c087a 100644 --- a/src/renderer/src/providers/AnthropicProvider.ts +++ b/src/renderer/src/providers/AnthropicProvider.ts @@ -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((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 个字以内的标题,不要使用标点符号和其他特殊符号。'