From 9d3d786b108f483de163fb55c7c95ffb3db24e93 Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Sat, 24 May 2025 19:17:11 +0900 Subject: [PATCH] Add from modellist --- src/ts/model/modellist.ts | 55 ++++++++++++++++++++++++++++++++++++++- src/ts/process/request.ts | 33 ++++++++++++++++++----- 2 files changed, 81 insertions(+), 7 deletions(-) diff --git a/src/ts/model/modellist.ts b/src/ts/model/modellist.ts index 00ff6ff3..60cfe6c7 100644 --- a/src/ts/model/modellist.ts +++ b/src/ts/model/modellist.ts @@ -598,7 +598,6 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasFirstSystemPrompt, LLMFlags.hasStreaming ], - recommended: true, parameters: ClaudeParameters, tokenizer: LLMTokenizer.Claude }, @@ -619,6 +618,40 @@ export const LLMModels: LLMModel[] = [ parameters: [...ClaudeParameters, 'thinking_tokens'], tokenizer: LLMTokenizer.Claude }, + { + name: "Claude 4 Sonnet (20250514)", + id: 'claude-sonnet-4-20250514', + shortName: "4 Sonnet", + provider: LLMProvider.Anthropic, + format: LLMFormat.Anthropic, + flags: [ + LLMFlags.hasPrefill, + LLMFlags.hasImageInput, + LLMFlags.hasFirstSystemPrompt, + LLMFlags.hasStreaming, + LLMFlags.claudeThinking + ], + recommended: true, + parameters: [...ClaudeParameters, 'thinking_tokens'], + tokenizer: LLMTokenizer.Claude + }, + { + name: "Claude 4 Opus (20250514)", + id: 'claude-opus-4-20250514', + shortName: "4 Opus", + provider: LLMProvider.Anthropic, + format: LLMFormat.Anthropic, + flags: [ + LLMFlags.hasPrefill, + LLMFlags.hasImageInput, + LLMFlags.hasFirstSystemPrompt, + LLMFlags.hasStreaming, + LLMFlags.claudeThinking + ], + recommended: true, + parameters: [...ClaudeParameters, 'thinking_tokens'], + tokenizer: LLMTokenizer.Claude + }, { name: "Claude 3.5 Haiku", id: 'claude-3-5-haiku-latest', @@ -1057,6 +1090,26 @@ export const LLMModels: LLMModel[] = [ parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'], tokenizer: LLMTokenizer.GoogleCloud, }, + { + name: "Gemini Flash 2.5 Preview (05/20)", + id: 'gemini-2.5-flash-preview-05-20', + provider: LLMProvider.GoogleCloud, + format: LLMFormat.GoogleCloud, + flags: [LLMFlags.geminiBlockOff,LLMFlags.hasImageInput, LLMFlags.poolSupported, LLMFlags.hasAudioInput, LLMFlags.hasVideoInput, LLMFlags.hasStreaming, LLMFlags.requiresAlternateRole, LLMFlags.geminiThinking], + parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'], + tokenizer: LLMTokenizer.GoogleCloud, + recommended: true + }, + // { + // name: "Gemini Flash 2.5 PRO TTS", + // id: 'gemini-2.5-pro-tts', + // provider: LLMProvider.GoogleCloud, + // format: LLMFormat.GoogleCloud, + // flags: [LLMFlags.geminiBlockOff,LLMFlags.hasImageInput, LLMFlags.poolSupported, LLMFlags.hasAudioInput, LLMFlags.hasVideoInput, LLMFlags.hasStreaming, LLMFlags.requiresAlternateRole, LLMFlags.geminiThinking, LLMFlags.hasAudioOutput], + // parameters: ['temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'], + // tokenizer: LLMTokenizer.GoogleCloud, + // recommended: true + // }, { name: "Gemini Flash 2.0 Thinking 1219", id: 'gemini-2.0-flash-thinking-exp-1219', diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index b82202c1..0599d666 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -11,7 +11,7 @@ import { risuChatParser } from "../parser.svelte"; import { SignatureV4 } from "@smithy/signature-v4"; import { HttpRequest } from "@smithy/protocol-http"; import { Sha256 } from "@aws-crypto/sha256-js"; -import { supportsInlayImage, writeInlayImage } from "./files/inlays"; +import { setInlayAsset, supportsInlayImage, writeInlayImage } from "./files/inlays"; import { Capacitor } from "@capacitor/core"; import { getFreeOpenRouterModel } from "../model/openrouter"; import { runTransformers } from "./transformers"; @@ -2167,6 +2167,12 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise delete body.systemInstruction } + if(arg.modelInfo.flags.includes(LLMFlags.hasAudioOutput)){ + body.generation_config.responseModalities = [ + 'TEXT', 'AUDIO' + ] + arg.useStreaming = false + } if(arg.imageResponse){ body.generation_config.responseModalities = [ 'TEXT', 'IMAGE' @@ -2515,11 +2521,26 @@ async function requestGoogleCloudVertex(arg:RequestDataArgumentExtended):Promise if(part.inlineData){ const imgHTML = new Image() const id = crypto.randomUUID() - imgHTML.src = `data:${part.inlineData.mimeType};base64,${part.inlineData.data}` - await writeInlayImage(imgHTML, { - id: id - }) - rDatas[rDatas.length-1] += (`\n{{inlayeddata::${id}}}\n`) + + if(part.inlineData.mimeType.startsWith('image/')){ + + imgHTML.src = `data:${part.inlineData.mimeType};base64,${part.inlineData.data}` + await writeInlayImage(imgHTML, { + id: id + }) + rDatas[rDatas.length-1] += (`\n{{inlayeddata::${id}}}\n`) + } + else{ + const id = v4() + await setInlayAsset(id, { + name: 'gemini-audio', + type: 'audio', + data: `data:${part.inlineData.mimeType};base64,${part.inlineData.data}`, + height: 0, + width: 0, + ext: part.inlineData.mimeType.split('/')[1], + }) + } } } }