system prompt support for gemini 1.5

This commit is contained in:
based
2024-04-11 16:38:20 +10:00
parent afeaca0fe0
commit 34bca69950
5 changed files with 50 additions and 8 deletions

View File

@ -252,17 +252,25 @@ async function sendMakerSuiteRequest(request, response) {
};
function getGeminiBody() {
return {
contents: convertGooglePrompt(request.body.messages, model),
let should_use_system_prompt = model === 'gemini-1.5-pro-latest' && request.body.use_makersuite_sysprompt;
let prompt = convertGooglePrompt(request.body.messages, model, should_use_system_prompt);
let body = {
contents: prompt.contents,
safetySettings: GEMINI_SAFETY,
generationConfig: generationConfig,
};
}
if (should_use_system_prompt) {
body.system_instruction = prompt.system_instruction;
}
return body;
}
function getBisonBody() {
const prompt = isText
? ({ text: convertTextCompletionPrompt(request.body.messages) })
: ({ messages: convertGooglePrompt(request.body.messages, model) });
: ({ messages: convertGooglePrompt(request.body.messages, model).contents });
/** @type {any} Shut the lint up */
const bisonBody = {

View File

@ -398,7 +398,7 @@ router.post('/google/count', jsonParser, async function (req, res) {
accept: 'application/json',
'content-type': 'application/json',
},
body: JSON.stringify({ contents: convertGooglePrompt(req.body, String(req.query.model)) }),
body: JSON.stringify({ contents: convertGooglePrompt(req.body, String(req.query.model)).contents }),
};
try {
const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${req.query.model}:countTokens?key=${readSecret(SECRET_KEYS.MAKERSUITE)}`, options);

View File

@ -252,9 +252,10 @@ function convertCohereMessages(messages, charName = '', userName = '') {
* Convert a prompt from the ChatML objects to the format used by Google MakerSuite models.
* @param {object[]} messages Array of messages
* @param {string} model Model name
* @returns {object[]} Prompt for Google MakerSuite models
* @param {boolean} useSysPrompt Use system prompt
* @returns {{contents: *[], system_instruction: {parts: {text: string}}}} Prompt for Google MakerSuite models
*/
function convertGooglePrompt(messages, model) {
function convertGooglePrompt(messages, model, useSysPrompt = false) {
// This is a 1x1 transparent PNG
const PNG_PIXEL = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';
@ -267,6 +268,16 @@ function convertGooglePrompt(messages, model) {
const isMultimodal = visionSupportedModels.includes(model);
let hasImage = false;
let sys_prompt = '';
if (useSysPrompt) {
while (messages.length > 1 && messages[0].role === 'system') {
sys_prompt += `${messages[0].content}\n\n`;
messages.shift();
}
}
const system_instruction = { parts: { text: sys_prompt }};
const contents = [];
messages.forEach((message, index) => {
// fix the roles
@ -327,7 +338,7 @@ function convertGooglePrompt(messages, model) {
});
}
return contents;
return { contents: contents, system_instruction: system_instruction };
}
/**