1
0
Fork 0

Compare commits

..

No commits in common. "f228f7891548c1fe35700c9983dbfe387d722c5a" and "f25621daef6ec99c06880e425edb9d19338782df" have entirely different histories.

3 changed files with 33 additions and 60 deletions

View File

@ -161,12 +161,6 @@ export namespace Connection {
if (extraSettings.max_length && extraSettings.max_length < maxLength) { if (extraSettings.max_length && extraSettings.max_length < maxLength) {
maxLength = extraSettings.max_length; maxLength = extraSettings.max_length;
} }
const baseTemperature = extraSettings.temperature ?? DEFAULT_GENERATION_SETTINGS.temperature;
let currentTemperature = baseTemperature;
const MAX_TEMPERATURE = 2.0;
const TEMP_INCREMENT = 0.15;
const RECOVERY_LENGTH = 16;
const requestData = { const requestData = {
prompt, prompt,
params: { params: {
@ -176,13 +170,11 @@ export namespace Connection {
max_context_length: model.maxContext, max_context_length: model.maxContext,
max_length: maxLength, max_length: maxLength,
rep_pen_range: Math.min(model.maxContext, 4096), rep_pen_range: Math.min(model.maxContext, 4096),
temperature: currentTemperature,
}, },
models: model.hordeNames, models: model.hordeNames,
workers: model.workers, workers: model.workers,
}; };
const bannedTokens = requestData.params.banned_tokens ?? []; const bannedTokens = requestData.params.banned_tokens ?? [];
let recoveryMode = false;
const { signal } = abortController; const { signal } = abortController;
@ -229,54 +221,34 @@ export namespace Connection {
if (response?.text) { if (response?.text) {
text = response.text; text = response.text;
let minStopIdx = text.length;
for (const sequence of requestData.params.stop_sequence) { for (const sequence of requestData.params.stop_sequence) {
const stopIdx = text.indexOf(sequence); const stopIdx = text.indexOf(sequence);
if (stopIdx >= 0 && stopIdx < minStopIdx) { if (stopIdx >= 0) {
minStopIdx = stopIdx; text = text.slice(0, stopIdx);
} }
} }
if (minStopIdx < text.length) {
text = text.slice(0, minStopIdx);
}
const locaseText = text.toLowerCase(); const locaseText = text.toLowerCase();
let unsloppedText = text; let unsloppedText = text;
let slopDetected = false;
let minSlopIdx = text.length;
let detectedBan = '';
for (const ban of bannedTokens) { for (const ban of bannedTokens) {
const slopIdx = locaseText.indexOf(ban.toLowerCase()); const slopIdx = locaseText.indexOf(ban.toLowerCase());
if (slopIdx >= 0 && slopIdx < minSlopIdx) { if (slopIdx >= 0) {
minSlopIdx = slopIdx; console.log(`[horde] slop '${ban}' detected at ${slopIdx}`);
detectedBan = ban; unsloppedText = unsloppedText.slice(0, slopIdx).trimEnd();
slopDetected = true;
} }
} }
if (slopDetected) {
console.log(`[horde] slop '${detectedBan}' detected at ${minSlopIdx}`);
unsloppedText = unsloppedText.slice(0, minSlopIdx).trimEnd();
}
yield { text: unsloppedText, cost: response.cost }; yield { text: unsloppedText, cost: response.cost };
requestData.prompt += unsloppedText; requestData.prompt += unsloppedText;
if (slopDetected) { if (unsloppedText === text) {
recoveryMode = true;
requestData.params.max_length = RECOVERY_LENGTH;
currentTemperature = Math.min(MAX_TEMPERATURE, currentTemperature + TEMP_INCREMENT);
requestData.params.temperature = currentTemperature;
requestData.params.top_p = Math.min(0.98, 0.92 + (currentTemperature - baseTemperature) * 0.02);
} else if (recoveryMode) {
recoveryMode = false;
requestData.params.max_length = maxLength;
requestData.params.temperature = baseTemperature;
requestData.params.top_p = 0.92;
currentTemperature = baseTemperature;
} else {
return; // we are finished return; // we are finished
} }
if (unsloppedText.length === 0) {
requestData.params.temperature += 0.05;
}
} }
} catch (e) { } catch (e) {
if (!signal.aborted) { if (!signal.aborted) {

View File

@ -423,7 +423,6 @@ export namespace Huggingface {
applyTemplate(templateString, { applyTemplate(templateString, {
messages, messages,
add_generation_prompt: true, add_generation_prompt: true,
enable_thinking: false,
tools: functions?.map(convertFunctionToTool), tools: functions?.map(convertFunctionToTool),
}) })
); );

View File

@ -25,48 +25,50 @@ export namespace MessageTools {
} }
export const format = (message: string): string => { export const format = (message: string): string => {
const replaceRegex = /(\*\*?|")/ig; const replaceRegex = /([*"]\*?)/ig;
const splitToken = '___SPLIT_AWOORWA___'; const splitToken = '___SPLIT_AWOORWA___';
const preparedMessage = message.replace(replaceRegex, `${splitToken}$1${splitToken}`); const preparedMessage = message.replace(replaceRegex, `${splitToken}$1${splitToken}`);
const parts = preparedMessage.split(splitToken); const parts = preparedMessage.split(splitToken);
const stack: string[] = []; let isText = true;
let keepPart = true;
let resultHTML = ''; let resultHTML = '';
for (const part of parts) { for (const part of parts) {
const isClose = stack.at(-1) === part;
if (isClose) { if (isText) {
stack.pop();
if (part === '*' || part === '**') {
resultHTML += `</span>`;
} else if (part === '"') {
resultHTML += `"</span>`;
}
} else {
if (part === '*') { if (part === '*') {
stack.push(part); isText = false;
keepPart = false;
resultHTML += `<span class="italic">`; resultHTML += `<span class="italic">`;
} else if (part === '**') { } else if (part === '**') {
stack.push(part); isText = false;
keepPart = false;
resultHTML += `<span class="bold">`; resultHTML += `<span class="bold">`;
} else if (part === '"') { } else if (part === '"') {
stack.push(part); isText = false;
keepPart = true;
resultHTML += `<span class="quote">"`; resultHTML += `<span class="quote">"`;
} else { } else {
resultHTML += part; resultHTML += part;
} }
} else {
if (part === '*' || part === '**') {
resultHTML += `</span>`;
isText = true;
} else if (part === '"') {
resultHTML += `"</span>`;
isText = true;
} else {
resultHTML += part;
}
} }
} }
while (stack.length) { if (!isText) {
const part = stack.pop();
if (part === '*' || part === '**') {
resultHTML += `</span>`; resultHTML += `</span>`;
} else if (part === '"') {
resultHTML += `"</span>`;
}
} }
return resultHTML; return resultHTML;