This commit is contained in:
Webifi 2023-08-16 15:20:57 -05:00
parent cb2b9e07f4
commit f523f8d4bc
6 changed files with 18 additions and 18 deletions

View File

@ -70,8 +70,8 @@ export const getStopSequence = (chat: Chat): string => {
return chat.settings.stopSequence || valueOf(chat.id, getChatSettingObjectByKey('stopSequence').placeholder) return chat.settings.stopSequence || valueOf(chat.id, getChatSettingObjectByKey('stopSequence').placeholder)
} }
export const getDeliminator = (chat: Chat): string => { export const getDelimiter = (chat: Chat): string => {
return chat.settings.deliminator || valueOf(chat.id, getChatSettingObjectByKey('deliminator').placeholder) return chat.settings.delimiter || valueOf(chat.id, getChatSettingObjectByKey('delimiter').placeholder)
} }
export const getLeadPrompt = (chat: Chat): string => { export const getLeadPrompt = (chat: Chat): string => {

View File

@ -108,7 +108,7 @@ const defaults:ChatSettings = {
startSequence: '', startSequence: '',
stopSequence: '', stopSequence: '',
aggressiveStop: true, aggressiveStop: true,
deliminator: '', delimiter: '',
userMessageStart: '', userMessageStart: '',
userMessageEnd: '', userMessageEnd: '',
assistantMessageStart: '', assistantMessageStart: '',
@ -543,12 +543,12 @@ const chatSettingsList: ChatSetting[] = [
hide: hideModelSetting hide: hideModelSetting
}, },
{ {
key: 'deliminator', key: 'delimiter',
name: 'Deliminator Sequence', name: 'Delimiter Sequence',
title: 'Characters used to separate messages in the message chain.', title: 'Characters used to separate messages in the message chain.',
type: 'textarea', type: 'textarea',
placeholder: (chatId) => { placeholder: (chatId) => {
const val = getModelDetail(getChatSettings(chatId).model).deliminator const val = getModelDetail(getChatSettings(chatId).model).delimiter
return val || '' return val || ''
}, },
hide: hideModelSetting hide: hideModelSetting

View File

@ -86,7 +86,7 @@ export type ChatSettings = {
startSequence: string; startSequence: string;
stopSequence: string; stopSequence: string;
aggressiveStop: boolean; aggressiveStop: boolean;
deliminator: string; delimiter: string;
userMessageStart: string; userMessageStart: string;
userMessageEnd: string; userMessageEnd: string;
assistantMessageStart: string; assistantMessageStart: string;
@ -271,7 +271,7 @@ export type ModelDetail = {
label?: string; label?: string;
start?: string; start?: string;
stop?: string[]; stop?: string[];
deliminator?: string; delimiter?: string;
userStart?: string, userStart?: string,
userEnd?: string, userEnd?: string,
assistantStart?: string, assistantStart?: string,

View File

@ -13,7 +13,7 @@ const hiddenSettings = {
startSequence: true, startSequence: true,
stopSequence: true, stopSequence: true,
aggressiveStop: true, aggressiveStop: true,
deliminator: true, delimiter: true,
userMessageStart: true, userMessageStart: true,
userMessageEnd: true, userMessageEnd: true,
assistantMessageStart: true, assistantMessageStart: true,

View File

@ -1,6 +1,6 @@
<script context="module" lang="ts"> <script context="module" lang="ts">
import { getPetalsBase, getPetalsWebsocket } from '../../ApiUtil.svelte' import { getPetalsBase, getPetalsWebsocket } from '../../ApiUtil.svelte'
import { countTokens, getDeliminator, getLeadPrompt, getRoleEnd, getRoleTag, getStartSequence } from '../../Models.svelte' import { countTokens, getDelimiter, getLeadPrompt, getRoleEnd, getRoleTag, getStartSequence } from '../../Models.svelte'
import { countMessageTokens } from '../../Stats.svelte' import { countMessageTokens } from '../../Stats.svelte'
import { globalStorage } from '../../Storage.svelte' import { globalStorage } from '../../Storage.svelte'
import type { Chat, Message, Model, ModelDetail } from '../../Types.svelte' import type { Chat, Message, Model, ModelDetail } from '../../Types.svelte'
@ -22,7 +22,7 @@ const chatModelBase = {
check: checkModel, check: checkModel,
start: '<s>', start: '<s>',
stop: ['###', '</s>'], stop: ['###', '</s>'],
deliminator: '\n###\n\n', delimiter: '\n###\n\n',
userStart: 'User:\n', userStart: 'User:\n',
userEnd: '', userEnd: '',
assistantStart: '[[CHARACTER_NAME]]:\n', assistantStart: '[[CHARACTER_NAME]]:\n',
@ -37,7 +37,7 @@ const chatModelBase = {
getTokens: (value) => llamaTokenizer.encode(value), getTokens: (value) => llamaTokenizer.encode(value),
hideSetting: (chatId, setting) => !!hideSettings[setting.key], hideSetting: (chatId, setting) => !!hideSettings[setting.key],
countMessageTokens: (message:Message, model:Model, chat: Chat):number => { countMessageTokens: (message:Message, model:Model, chat: Chat):number => {
const delim = getDeliminator(chat) const delim = getDelimiter(chat)
return countTokens(model, getRoleTag(message.role, model, chat) + ': ' + return countTokens(model, getRoleTag(message.role, model, chat) + ': ' +
message.content + getRoleEnd(message.role, model, chat) + (delim || '###')) message.content + getRoleEnd(message.role, model, chat) + (delim || '###'))
}, },
@ -68,7 +68,7 @@ export const chatModels : Record<string, ModelDetail> = {
label: 'Petals - Llama-2-70b-chat', label: 'Petals - Llama-2-70b-chat',
start: '<s>', start: '<s>',
stop: ['</s>', '[INST]', '[/INST]', '<<SYS>>', '<</SYS>>'], stop: ['</s>', '[INST]', '[/INST]', '<<SYS>>', '<</SYS>>'],
deliminator: ' </s><s>', delimiter: ' </s><s>',
userStart: '[INST][[SYSTEM_PROMPT]]', userStart: '[INST][[SYSTEM_PROMPT]]',
userEnd: ' [/INST]', userEnd: ' [/INST]',
assistantStart: '[[SYSTEM_PROMPT]][[USER_PROMPT]]', assistantStart: '[[SYSTEM_PROMPT]][[USER_PROMPT]]',

View File

@ -1,7 +1,7 @@
<script context="module" lang="ts"> <script context="module" lang="ts">
import { ChatCompletionResponse } from '../../ChatCompletionResponse.svelte' import { ChatCompletionResponse } from '../../ChatCompletionResponse.svelte'
import { ChatRequest } from '../../ChatRequest.svelte' import { ChatRequest } from '../../ChatRequest.svelte'
import { countTokens, getDeliminator, getEndpoint, getLeadPrompt, getModelDetail, getRoleEnd, getRoleTag, getStartSequence, getStopSequence } from '../../Models.svelte' import { countTokens, getDelimiter, getEndpoint, getLeadPrompt, getModelDetail, getRoleEnd, getRoleTag, getStartSequence, getStopSequence } from '../../Models.svelte'
import type { ChatCompletionOpts, Message, Request } from '../../Types.svelte' import type { ChatCompletionOpts, Message, Request } from '../../Types.svelte'
import { getModelMaxTokens } from '../../Stats.svelte' import { getModelMaxTokens } from '../../Stats.svelte'
import { updateMessages } from '../../Storage.svelte' import { updateMessages } from '../../Storage.svelte'
@ -29,9 +29,9 @@ export const chatRequest = async (
let stopSequences = [...new Set(getStopSequence(chat).split(',').filter(s => s.trim()).concat((modelDetail.stop || ['###', '</s>']).slice()))] let stopSequences = [...new Set(getStopSequence(chat).split(',').filter(s => s.trim()).concat((modelDetail.stop || ['###', '</s>']).slice()))]
const stopSequence = '</s>' const stopSequence = '</s>'
stopSequences.push(stopSequence) stopSequences.push(stopSequence)
const deliminator = getDeliminator(chat) const delimiter = getDelimiter(chat)
const leadPromptSequence = getLeadPrompt(chat) const leadPromptSequence = getLeadPrompt(chat)
if (deliminator) stopSequences.unshift(deliminator.trim()) if (delimiter) stopSequences.unshift(delimiter.trim())
stopSequences = stopSequences.sort((a, b) => b.length - a.length) stopSequences = stopSequences.sort((a, b) => b.length - a.length)
const stopSequencesC = stopSequences.filter(s => s !== stopSequence) const stopSequencesC = stopSequences.filter(s => s !== stopSequence)
const maxTokens = getModelMaxTokens(model) const maxTokens = getModelMaxTokens(model)
@ -96,8 +96,8 @@ export const chatRequest = async (
} }
return a return a
}, [] as Message[]) }, [] as Message[])
const leadPrompt = (leadPromptSequence && ((inputArray[inputArray.length - 1] || {}) as Message).role !== 'assistant') ? deliminator + leadPromptSequence : '' const leadPrompt = (leadPromptSequence && ((inputArray[inputArray.length - 1] || {}) as Message).role !== 'assistant') ? delimiter + leadPromptSequence : ''
const fullPromptInput = getStartSequence(chat) + inputArray.map(m => m.content).join(deliminator) + leadPrompt const fullPromptInput = getStartSequence(chat) + inputArray.map(m => m.content).join(delimiter) + leadPrompt
let maxLen = Math.min(opts.maxTokens || chatSettings.max_tokens || maxTokens, maxTokens) let maxLen = Math.min(opts.maxTokens || chatSettings.max_tokens || maxTokens, maxTokens)
const promptTokenCount = countTokens(model, fullPromptInput) const promptTokenCount = countTokens(model, fullPromptInput)