| const { CohereConstants } = require('librechat-data-provider'); |
| const { titleInstruction } = require('../prompts/titlePrompts'); |
|
|
| |
| const roleMap = { |
| user: CohereConstants.ROLE_USER, |
| assistant: CohereConstants.ROLE_CHATBOT, |
| system: CohereConstants.ROLE_SYSTEM, |
| }; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| function createCoherePayload({ modelOptions }) { |
| |
| let preamble; |
| let latestUserMessageContent = ''; |
| const { |
| stream, |
| stop, |
| top_p, |
| temperature, |
| frequency_penalty, |
| presence_penalty, |
| max_tokens, |
| messages, |
| model, |
| ...rest |
| } = modelOptions; |
|
|
| |
| let chatHistory = messages.reduce((acc, message, index, arr) => { |
| const isLastUserMessage = index === arr.length - 1 && message.role === 'user'; |
|
|
| const messageContent = |
| typeof message.content === 'string' |
| ? message.content |
| : message.content.map((part) => (part.type === 'text' ? part.text : '')).join(' '); |
|
|
| if (isLastUserMessage) { |
| latestUserMessageContent = messageContent; |
| } else { |
| acc.push({ |
| role: roleMap[message.role] || CohereConstants.ROLE_USER, |
| message: messageContent, |
| }); |
| } |
|
|
| return acc; |
| }, []); |
|
|
| if ( |
| chatHistory.length === 1 && |
| chatHistory[0].role === CohereConstants.ROLE_SYSTEM && |
| !latestUserMessageContent.length |
| ) { |
| const message = chatHistory[0].message; |
| latestUserMessageContent = message.includes(titleInstruction) |
| ? CohereConstants.TITLE_MESSAGE |
| : '.'; |
| preamble = message; |
| } |
|
|
| return { |
| message: latestUserMessageContent, |
| model: model, |
| chatHistory, |
| stream: stream ?? false, |
| temperature: temperature, |
| frequencyPenalty: frequency_penalty, |
| presencePenalty: presence_penalty, |
| maxTokens: max_tokens, |
| stopSequences: stop, |
| preamble, |
| p: top_p, |
| ...rest, |
| }; |
| } |
|
|
| module.exports = createCoherePayload; |
|
|