mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Merge branch 'staging' into vision-cleanup
This commit is contained in:
@ -3,6 +3,15 @@ import { getConfigValue, tryParse } from './util.js';
|
||||
|
||||
const PROMPT_PLACEHOLDER = getConfigValue('promptPlaceholder', 'Let\'s get started.');
|
||||
|
||||
const REASONING_EFFORT = {
|
||||
auto: 'auto',
|
||||
low: 'low',
|
||||
medium: 'medium',
|
||||
high: 'high',
|
||||
min: 'min',
|
||||
max: 'max',
|
||||
};
|
||||
|
||||
/**
|
||||
* @typedef {object} PromptNames
|
||||
* @property {string} charName Character name
|
||||
@ -356,7 +365,7 @@ export function convertCohereMessages(messages, names) {
|
||||
* @param {string} model Model name
|
||||
* @param {boolean} useSysPrompt Use system prompt
|
||||
* @param {PromptNames} names Prompt names
|
||||
* @returns {{contents: *[], system_instruction: {parts: {text: string}}}} Prompt for Google MakerSuite models
|
||||
* @returns {{contents: *[], system_instruction: {parts: {text: string}[]}}} Prompt for Google MakerSuite models
|
||||
*/
|
||||
export function convertGooglePrompt(messages, model, useSysPrompt, names) {
|
||||
const visionSupportedModelPrefix = [
|
||||
@ -369,8 +378,8 @@ export function convertGooglePrompt(messages, model, useSysPrompt, names) {
|
||||
];
|
||||
|
||||
const isMultimodal = visionSupportedModelPrefix.some(prefix => model.startsWith(prefix));
|
||||
const sysPrompt = [];
|
||||
|
||||
let sys_prompt = '';
|
||||
if (useSysPrompt) {
|
||||
while (messages.length > 1 && messages[0].role === 'system') {
|
||||
// Append example names if not already done by the frontend (e.g. for group chats).
|
||||
@ -384,12 +393,12 @@ export function convertGooglePrompt(messages, model, useSysPrompt, names) {
|
||||
messages[0].content = `${names.charName}: ${messages[0].content}`;
|
||||
}
|
||||
}
|
||||
sys_prompt += `${messages[0].content}\n\n`;
|
||||
sysPrompt.push(messages[0].content);
|
||||
messages.shift();
|
||||
}
|
||||
}
|
||||
|
||||
const system_instruction = { parts: [{ text: sys_prompt.trim() }] };
|
||||
const system_instruction = { parts: sysPrompt.map(text => ({ text })) };
|
||||
const toolNameMap = {};
|
||||
|
||||
const contents = [];
|
||||
@ -919,25 +928,32 @@ export function cachingAtDepthForOpenRouterClaude(messages, cachingAtDepth) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the budget tokens for a given reasoning effort.
|
||||
* Calculate the Claude budget tokens for a given reasoning effort.
|
||||
* @param {number} maxTokens Maximum tokens
|
||||
* @param {string} reasoningEffort Reasoning effort
|
||||
* @param {boolean} stream If streaming is enabled
|
||||
* @returns {number} Budget tokens
|
||||
*/
|
||||
export function calculateBudgetTokens(maxTokens, reasoningEffort, stream) {
|
||||
export function calculateClaudeBudgetTokens(maxTokens, reasoningEffort, stream) {
|
||||
let budgetTokens = 0;
|
||||
|
||||
switch (reasoningEffort) {
|
||||
case 'low':
|
||||
case REASONING_EFFORT.min:
|
||||
budgetTokens = 1024;
|
||||
break;
|
||||
case REASONING_EFFORT.low:
|
||||
budgetTokens = Math.floor(maxTokens * 0.1);
|
||||
break;
|
||||
case 'medium':
|
||||
case REASONING_EFFORT.auto:
|
||||
case REASONING_EFFORT.medium:
|
||||
budgetTokens = Math.floor(maxTokens * 0.25);
|
||||
break;
|
||||
case 'high':
|
||||
case REASONING_EFFORT.high:
|
||||
budgetTokens = Math.floor(maxTokens * 0.5);
|
||||
break;
|
||||
case REASONING_EFFORT.max:
|
||||
budgetTokens = Math.floor(maxTokens * 0.95);
|
||||
break;
|
||||
}
|
||||
|
||||
budgetTokens = Math.max(budgetTokens, 1024);
|
||||
@ -948,3 +964,37 @@ export function calculateBudgetTokens(maxTokens, reasoningEffort, stream) {
|
||||
|
||||
return budgetTokens;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the Google budget tokens for a given reasoning effort.
|
||||
* @param {number} maxTokens Maximum tokens
|
||||
* @param {string} reasoningEffort Reasoning effort
|
||||
* @returns {number?} Budget tokens
|
||||
*/
|
||||
export function calculateGoogleBudgetTokens(maxTokens, reasoningEffort) {
|
||||
let budgetTokens = 0;
|
||||
|
||||
switch (reasoningEffort) {
|
||||
case REASONING_EFFORT.auto:
|
||||
return null;
|
||||
case REASONING_EFFORT.min:
|
||||
budgetTokens = 0;
|
||||
break;
|
||||
case REASONING_EFFORT.low:
|
||||
budgetTokens = Math.floor(maxTokens * 0.1);
|
||||
break;
|
||||
case REASONING_EFFORT.medium:
|
||||
budgetTokens = Math.floor(maxTokens * 0.25);
|
||||
break;
|
||||
case REASONING_EFFORT.high:
|
||||
budgetTokens = Math.floor(maxTokens * 0.5);
|
||||
break;
|
||||
case REASONING_EFFORT.max:
|
||||
budgetTokens = maxTokens;
|
||||
break;
|
||||
}
|
||||
|
||||
budgetTokens = Math.min(budgetTokens, 24576);
|
||||
|
||||
return budgetTokens;
|
||||
}
|
||||
|
Reference in New Issue
Block a user