From b7b7b54dc35f8a8d7e5246b57022f37ab82666e3 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Thu, 14 Dec 2023 07:33:54 +0900 Subject: [PATCH] [feat] add gemini --- src/lib/Setting/Pages/BotSettings.svelte | 2 +- src/lib/UI/ModelList.svelte | 6 + src/ts/image.ts | 2 +- src/ts/process/request.ts | 208 ++++++++++++++++++++++- 4 files changed, 213 insertions(+), 5 deletions(-) diff --git a/src/lib/Setting/Pages/BotSettings.svelte b/src/lib/Setting/Pages/BotSettings.svelte index 61aec249..7ead5cca 100644 --- a/src/lib/Setting/Pages/BotSettings.svelte +++ b/src/lib/Setting/Pages/BotSettings.svelte @@ -115,7 +115,7 @@ {/if} -{#if $DataBase.aiModel.startsWith('palm2') || $DataBase.subModel.startsWith('palm2')} +{#if $DataBase.aiModel.startsWith('palm2') || $DataBase.subModel.startsWith('palm2') || $DataBase.aiModel.startsWith('gemini') || $DataBase.subModel.startsWith('gemini')} Google Bearer Token diff --git a/src/lib/UI/ModelList.svelte b/src/lib/UI/ModelList.svelte index d7cbd4dd..6a0ad43c 100644 --- a/src/lib/UI/ModelList.svelte +++ b/src/lib/UI/ModelList.svelte @@ -75,6 +75,8 @@ return "Mistral Small" case 'mistral-medium': return "Mistral Medium" + case 'gemini-pro': + return "Gemini Pro" default: if(name.startsWith("horde:::")){ return name.replace(":::", " ") @@ -160,6 +162,10 @@ + + + + {/if} diff --git a/src/ts/image.ts b/src/ts/image.ts index f944dcb3..0db61712 100644 --- a/src/ts/image.ts +++ b/src/ts/image.ts @@ -94,7 +94,7 @@ export async function getInlayImage(id: string){ export function supportsInlayImage(){ const db = get(DataBase) - return db.aiModel.startsWith('gptv') || (db.aiModel === 'reverse_proxy' && db.proxyRequestModel?.startsWith('gptv')) + return db.aiModel.startsWith('gptv') || (db.aiModel === 'reverse_proxy' && db.proxyRequestModel?.startsWith('gptv')) || db.aiModel === 'gemini-pro-vision' } export async function reencodeImage(img:Uint8Array){ diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index f7ec831a..7ff2602b 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -306,14 +306,14 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' } } else{ - const prevChat = reformatedChat[i-1] + const prevChat = reformatedChat[reformatedChat.length-1] if(prevChat.role === chat.role){ - reformatedChat[i-1].content += '\n' + chat.content + reformatedChat[reformatedChat.length-1].content += '\n' + chat.content continue } else if(chat.role === 'system'){ if(prevChat.role === 'user'){ - reformatedChat[i-1].content += '\nSystem:' + chat.content + reformatedChat[reformatedChat.length-1].content += '\nSystem:' + chat.content } else{ reformatedChat.push({ @@ -322,6 +322,12 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' }) } } + else if(chat.role === 'function'){ + reformatedChat.push({ + role: 'user', + content: chat.content + }) + } else{ reformatedChat.push({ role: chat.role, @@ -1003,6 +1009,202 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' } } } + case 'gemini-pro': + case 'gemini-pro-vision':{ + interface GeminiPart{ + text?:string + "inlineData"?: { + "mimeType": string, + "data": string + }, + } + + interface GeminiChat { + role: "USER"|"MODEL" + parts:|GeminiPart[] + } + + + let reformatedChat:GeminiChat[] = [] + let pendingImage = '' + + for(let i=0;i