diff --git a/src/lang/en.ts b/src/lang/en.ts index d10ba8f5..85b25c67 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -817,4 +817,5 @@ export const languageEnglish = { permissionDenied: "Permission Denied by Your Browser or OS", customFlags: "Custom Flags", enableCustomFlags: "Enable Custom Flags", + googleCloudTokenization: "Google Cloud Tokenization", } \ No newline at end of file diff --git a/src/lib/Setting/Pages/AdvancedSettings.svelte b/src/lib/Setting/Pages/AdvancedSettings.svelte index 0bdea6f6..3827f81d 100644 --- a/src/lib/Setting/Pages/AdvancedSettings.svelte +++ b/src/lib/Setting/Pages/AdvancedSettings.svelte @@ -112,6 +112,11 @@ +
+ + + +
{/if} {#if DBState.db.showUnrecommended}
diff --git a/src/ts/model/modellist.ts b/src/ts/model/modellist.ts index 3a8ad319..888ec6e0 100644 --- a/src/ts/model/modellist.ts +++ b/src/ts/model/modellist.ts @@ -52,6 +52,22 @@ export enum LLMFormat{ AWSBedrockClaude } +export enum LLMTokenizer{ + Unknown, + tiktokenCl100kBase, + tiktokenO200Base, + Mistral, + Llama, + NovelAI, + Claude, + NovelList, + Llama3, + Gemma, + GoogleCloud, + Cohere, + Local +} + export interface LLMModel{ id: string name: string @@ -61,7 +77,8 @@ export interface LLMModel{ provider: LLMProvider flags: LLMFlags[] format: LLMFormat - parameters: Parameter[] + parameters: Parameter[], + tokenizer: LLMTokenizer recommended?: boolean } @@ -92,6 +109,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.OpenAICompatible, flags: [LLMFlags.hasFullSystemPrompt, LLMFlags.hasStreaming], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'instructgpt35', @@ -101,6 +119,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.OpenAILegacyInstruct, flags: [LLMFlags.hasFullSystemPrompt, LLMFlags.hasStreaming], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt4_turbo', @@ -110,6 +129,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.OpenAICompatible, flags: [LLMFlags.hasFullSystemPrompt, LLMFlags.hasStreaming], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt4o', @@ -124,6 +144,7 @@ export const LLMModels: LLMModel[] = [ ], recommended: true, parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenO200Base }, { id: 'gpt4om', @@ -138,6 +159,7 @@ export const LLMModels: LLMModel[] = [ ], recommended: true, parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenO200Base }, { id: 'gpt4', @@ -150,6 +172,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt4_32k', @@ -162,6 +185,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt35_16k', @@ -174,6 +198,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt4_0314', @@ -186,6 +211,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt4_0613', @@ -198,6 +224,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt4_32k_0613', @@ -210,6 +237,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt4_1106', @@ -222,6 +250,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt35_0125', @@ -234,6 +263,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt35_1106', @@ -246,6 +276,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt35_0613', @@ -258,6 +289,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt35_16k_0613', @@ -270,6 +302,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt35_0301', @@ -282,6 +315,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt4_0125', @@ -294,6 +328,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gptvi4_1106', @@ -306,6 +341,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt4_turbo_20240409', @@ -318,6 +354,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenCl100kBase }, { id: 'gpt4o-2024-05-13', @@ -331,6 +368,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenO200Base }, { id: 'gpt4o-2024-08-06', @@ -344,6 +382,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenO200Base }, { id: 'gpt4o-2024-11-20', @@ -357,6 +396,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenO200Base }, { id: 'gpt4o-chatgpt', @@ -370,6 +410,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenO200Base }, { id: 'gpt4o1-preview', @@ -382,6 +423,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenO200Base }, { id: 'gpt4o1-mini', @@ -394,6 +436,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: OpenAIParameters, + tokenizer: LLMTokenizer.tiktokenO200Base }, { name: "Claude 3.5 Sonnet", @@ -409,6 +452,7 @@ export const LLMModels: LLMModel[] = [ ], recommended: true, parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: "Claude 3.5 Haiku", @@ -424,6 +468,7 @@ export const LLMModels: LLMModel[] = [ ], recommended: true, parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 3.5 Sonnet (20241022)', @@ -438,6 +483,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: "Claude 3.5 Haiku (20241022)", @@ -452,6 +498,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 3 Haiku (20240307)', @@ -466,6 +513,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 3.5 Sonnet (20240620)', @@ -480,6 +528,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 3 Opus (20240229)', @@ -494,6 +543,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 3 Sonnet (20240229)', @@ -508,6 +558,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasStreaming ], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 2.1', @@ -518,6 +569,7 @@ export const LLMModels: LLMModel[] = [ LLMFlags.hasPrefill, ], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 2', @@ -526,6 +578,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AnthropicLegacy, flags: [LLMFlags.hasPrefill], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 2 100k', @@ -534,6 +587,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AnthropicLegacy, flags: [LLMFlags.hasPrefill], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude v1', @@ -542,6 +596,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AnthropicLegacy, flags: [LLMFlags.hasPrefill], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude v1 100k', @@ -550,6 +605,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AnthropicLegacy, flags: [LLMFlags.hasPrefill], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude Instant v1', @@ -558,6 +614,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AnthropicLegacy, flags: [LLMFlags.hasPrefill], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude Instant v1 100k', @@ -566,6 +623,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AnthropicLegacy, flags: [LLMFlags.hasPrefill], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude v1.2', @@ -574,6 +632,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AnthropicLegacy, flags: [LLMFlags.hasPrefill], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude v1.0', @@ -582,6 +641,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AnthropicLegacy, flags: [LLMFlags.hasPrefill], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 3.5 Sonnet (20241022) v2', @@ -590,6 +650,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AWSBedrockClaude, flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 3.5 Sonnet (20240620) v1', @@ -598,6 +659,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AWSBedrockClaude, flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Claude 3 Opus (20240229) v1', @@ -606,6 +668,7 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.AWSBedrockClaude, flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], parameters: ClaudeParameters, + tokenizer: LLMTokenizer.Claude }, { name: 'Ooba', @@ -614,7 +677,8 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.Ooba, flags: [LLMFlags.hasFirstSystemPrompt], recommended: true, - parameters: [] + parameters: [], + tokenizer: LLMTokenizer.Llama }, { name: 'Mancer', @@ -622,7 +686,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.AsIs, format: LLMFormat.OobaLegacy, flags: [LLMFlags.hasFirstSystemPrompt], - parameters: [] + parameters: [], + tokenizer: LLMTokenizer.Llama }, { name: 'OpenRouter', @@ -631,7 +696,8 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.OpenAICompatible, flags: [LLMFlags.hasFullSystemPrompt, LLMFlags.hasImageInput, LLMFlags.hasStreaming], parameters: ['temperature', 'top_p', 'frequency_penalty', 'presence_penalty', 'repetition_penalty', 'min_p', 'top_a', 'top_k'], - recommended: true + recommended: true, + tokenizer: LLMTokenizer.Unknown }, { name: 'Mistral Small Latest', @@ -641,7 +707,8 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.Mistral, flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.mustStartWithUserInput, LLMFlags.requiresAlternateRole], recommended: true, - parameters: ['temperature', 'presence_penalty', 'frequency_penalty'] + parameters: ['temperature', 'presence_penalty', 'frequency_penalty'], + tokenizer: LLMTokenizer.Mistral }, { name: 'Mistral Medium Latest', @@ -651,7 +718,8 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.Mistral, flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.mustStartWithUserInput, LLMFlags.requiresAlternateRole], recommended: true, - parameters: ['temperature', 'presence_penalty', 'frequency_penalty'] + parameters: ['temperature', 'presence_penalty', 'frequency_penalty'], + tokenizer: LLMTokenizer.Mistral }, { name: 'Mistral Large 2411', @@ -660,7 +728,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.Mistral, format: LLMFormat.Mistral, flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.mustStartWithUserInput, LLMFlags.requiresAlternateRole], - parameters: ['temperature', 'presence_penalty', 'frequency_penalty'] + parameters: ['temperature', 'presence_penalty', 'frequency_penalty'], + tokenizer: LLMTokenizer.Mistral }, { name: 'Mistral Nemo', @@ -669,7 +738,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.Mistral, format: LLMFormat.Mistral, flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.mustStartWithUserInput, LLMFlags.requiresAlternateRole], - parameters: ['temperature', 'presence_penalty', 'frequency_penalty'] + parameters: ['temperature', 'presence_penalty', 'frequency_penalty'], + tokenizer: LLMTokenizer.Mistral }, { name: 'Mistral Large Latest', @@ -679,7 +749,8 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.Mistral, flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.mustStartWithUserInput, LLMFlags.requiresAlternateRole], parameters: ['temperature', 'presence_penalty', 'frequency_penalty'], - recommended: true + recommended: true, + tokenizer: LLMTokenizer.Mistral }, { name: "Gemini Pro 1.5 0827", @@ -687,7 +758,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Exp 1121", @@ -695,7 +767,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Exp 1206", @@ -704,7 +777,8 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], recommended: true, - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Pro 1.5", @@ -713,7 +787,8 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], recommended: true, - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Flash 1.5", @@ -722,7 +797,8 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], recommended: true, - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Exp 1121", @@ -731,7 +807,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.VertexAI, format: LLMFormat.VertexAIGemini, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.Gemma }, { name: "Gemini Pro 1.5", @@ -740,7 +817,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.VertexAI, format: LLMFormat.VertexAIGemini, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.Gemma }, { name: "Gemini Flash 1.5", @@ -749,7 +827,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.VertexAI, format: LLMFormat.VertexAIGemini, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.Gemma }, { name: "Gemini Exp 1114", @@ -757,7 +836,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Pro 1.5 002", @@ -765,7 +845,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Flash 1.5 002", @@ -773,7 +854,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Pro", @@ -781,7 +863,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Pro Vision", @@ -789,7 +872,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Ultra", @@ -797,7 +881,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: "Gemini Ultra Vision", @@ -805,7 +890,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.GoogleCloud, format: LLMFormat.GoogleCloud, flags: [LLMFlags.hasImageInput, LLMFlags.hasFirstSystemPrompt], - parameters: ['temperature', 'top_k', 'top_p'] + parameters: ['temperature', 'top_k', 'top_p'], + tokenizer: LLMTokenizer.GoogleCloud }, { name: 'Kobold', @@ -820,7 +906,8 @@ export const LLMModels: LLMModel[] = [ 'repetition_penalty', 'top_k', 'top_a' - ] + ], + tokenizer: LLMTokenizer.Unknown }, { name: "SuperTrin", @@ -828,7 +915,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.NovelList, format: LLMFormat.NovelList, flags: [], - parameters: [] + parameters: [], + tokenizer: LLMTokenizer.NovelList }, { name: "Damsel", @@ -836,7 +924,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.NovelList, format: LLMFormat.NovelList, flags: [], - parameters: [] + parameters: [], + tokenizer: LLMTokenizer.NovelList }, { name: "Command R", @@ -848,7 +937,8 @@ export const LLMModels: LLMModel[] = [ recommended: true, parameters: [ 'temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty' - ] + ], + tokenizer: LLMTokenizer.Cohere }, { name: "Command R Plus", @@ -860,7 +950,8 @@ export const LLMModels: LLMModel[] = [ recommended: true, parameters: [ 'temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty' - ] + ], + tokenizer: LLMTokenizer.Cohere }, { name: "Command R 08-2024", @@ -871,7 +962,8 @@ export const LLMModels: LLMModel[] = [ flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.requiresAlternateRole, LLMFlags.mustStartWithUserInput], parameters: [ 'temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty' - ] + ], + tokenizer: LLMTokenizer.Cohere }, { name: "Command R 03-2024", @@ -882,7 +974,8 @@ export const LLMModels: LLMModel[] = [ flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.requiresAlternateRole, LLMFlags.mustStartWithUserInput], parameters: [ 'temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty' - ] + ], + tokenizer: LLMTokenizer.Cohere }, { name: "Command R Plus 08-2024", @@ -893,7 +986,8 @@ export const LLMModels: LLMModel[] = [ flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.requiresAlternateRole, LLMFlags.mustStartWithUserInput], parameters: [ 'temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty' - ] + ], + tokenizer: LLMTokenizer.Cohere }, { name: "Command R Plus 04-2024", @@ -904,7 +998,8 @@ export const LLMModels: LLMModel[] = [ flags: [LLMFlags.hasFirstSystemPrompt, LLMFlags.requiresAlternateRole, LLMFlags.mustStartWithUserInput], parameters: [ 'temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty' - ] + ], + tokenizer: LLMTokenizer.Cohere }, { name: "Clio", @@ -915,7 +1010,8 @@ export const LLMModels: LLMModel[] = [ recommended: true, parameters: [ 'temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty' - ] + ], + tokenizer: LLMTokenizer.NovelAI }, { name: "Kayra", @@ -926,7 +1022,8 @@ export const LLMModels: LLMModel[] = [ recommended: true, parameters: [ 'temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty' - ] + ], + tokenizer: LLMTokenizer.NovelAI }, { id: 'ollama-hosted', @@ -934,7 +1031,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.AsIs, format: LLMFormat.Ollama, flags: [LLMFlags.hasFullSystemPrompt], - parameters: OpenAIParameters + parameters: OpenAIParameters, + tokenizer: LLMTokenizer.Unknown }, { id: 'hf:::Xenova/opt-350m', @@ -942,7 +1040,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.WebLLM, format: LLMFormat.WebLLM, flags: [LLMFlags.hasFullSystemPrompt], - parameters: OpenAIParameters + parameters: OpenAIParameters, + tokenizer: LLMTokenizer.Local }, { id: 'hf:::Xenova/tiny-random-mistral', @@ -950,7 +1049,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.WebLLM, format: LLMFormat.WebLLM, flags: [LLMFlags.hasFullSystemPrompt], - parameters: OpenAIParameters + parameters: OpenAIParameters, + tokenizer: LLMTokenizer.Local }, { id: 'hf:::Xenova/gpt2-large-conversational', @@ -958,7 +1058,8 @@ export const LLMModels: LLMModel[] = [ provider: LLMProvider.WebLLM, format: LLMFormat.WebLLM, flags: [LLMFlags.hasFullSystemPrompt], - parameters: OpenAIParameters + parameters: OpenAIParameters, + tokenizer: LLMTokenizer.Local }, { id: 'custom', @@ -967,7 +1068,8 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.Plugin, flags: [LLMFlags.hasFullSystemPrompt], recommended: true, - parameters: ['temperature', 'top_p', 'frequency_penalty', 'presence_penalty', 'repetition_penalty', 'min_p', 'top_a', 'top_k'] + parameters: ['temperature', 'top_p', 'frequency_penalty', 'presence_penalty', 'repetition_penalty', 'min_p', 'top_a', 'top_k'], + tokenizer: LLMTokenizer.Unknown }, { id: 'reverse_proxy', @@ -976,7 +1078,8 @@ export const LLMModels: LLMModel[] = [ format: LLMFormat.OpenAICompatible, flags: [LLMFlags.hasFullSystemPrompt, LLMFlags.hasStreaming], recommended: true, - parameters: ['temperature', 'top_p', 'frequency_penalty', 'presence_penalty', 'repetition_penalty', 'min_p', 'top_a', 'top_k'] + parameters: ['temperature', 'top_p', 'frequency_penalty', 'presence_penalty', 'repetition_penalty', 'min_p', 'top_a', 'top_k'], + tokenizer: LLMTokenizer.Unknown } ] @@ -1010,7 +1113,8 @@ export function getModelInfo(id: string): LLMModel{ provider: LLMProvider.WebLLM, format: LLMFormat.WebLLM, flags: [], - parameters: OpenAIParameters + parameters: OpenAIParameters, + tokenizer: LLMTokenizer.Local } } if(id.startsWith('horde:::')){ @@ -1024,7 +1128,8 @@ export function getModelInfo(id: string): LLMModel{ provider: LLMProvider.Horde, format: LLMFormat.Horde, flags: [], - parameters: OpenAIParameters + parameters: OpenAIParameters, + tokenizer: LLMTokenizer.Unknown } } @@ -1037,7 +1142,8 @@ export function getModelInfo(id: string): LLMModel{ provider: LLMProvider.AsIs, format: LLMFormat.OpenAICompatible, flags: [], - parameters: OpenAIParameters + parameters: OpenAIParameters, + tokenizer: LLMTokenizer.Unknown } } diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index 99e2229b..395b5a80 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -853,6 +853,7 @@ export interface Database{ notification: boolean customFlags: LLMFlags[] enableCustomFlags: boolean + googleClaudeTokenizing: boolean } interface SeparateParameters{ diff --git a/src/ts/tokenizer.ts b/src/ts/tokenizer.ts index ba49e19c..a3e8f4b8 100644 --- a/src/ts/tokenizer.ts +++ b/src/ts/tokenizer.ts @@ -6,7 +6,7 @@ import { supportsInlayImage } from "./process/files/image"; import { risuChatParser } from "./parser.svelte"; import { tokenizeGGUFModel } from "./process/models/local"; import { globalFetch } from "./globalApi.svelte"; -import { getModelInfo } from "./model/modellist"; +import { getModelInfo, LLMTokenizer } from "./model/modellist"; export const tokenizerList = [ @@ -45,48 +45,37 @@ export async function encode(data:string):Promise<(number[]|Uint32Array|Int32Arr return await tikJS(data, 'o200k_base') } } - if(db.aiModel.startsWith('novellist')){ + const modelInfo = getModelInfo(db.aiModel) + + if(modelInfo.tokenizer === LLMTokenizer.NovelList){ const nv= await tokenizeWebTokenizers(data, 'novellist') return nv } - if(db.aiModel.startsWith('claude')){ + if(modelInfo.tokenizer === LLMTokenizer.Claude){ return await tokenizeWebTokenizers(data, 'claude') } - if(db.aiModel.startsWith('novelai')){ + if(modelInfo.tokenizer === LLMTokenizer.NovelAI){ return await tokenizeWebTokenizers(data, 'novelai') } - if(db.aiModel.startsWith('mistral')){ + if(modelInfo.tokenizer === LLMTokenizer.Mistral){ return await tokenizeWebTokenizers(data, 'mistral') } - if(db.aiModel === 'mancer' || - db.aiModel === 'textgen_webui' || - (db.aiModel === 'reverse_proxy' && db.reverseProxyOobaMode)){ + if(modelInfo.tokenizer === LLMTokenizer.Llama){ return await tokenizeWebTokenizers(data, 'llama') } - if(db.aiModel.startsWith('local_')){ + if(modelInfo.tokenizer === LLMTokenizer.Local){ return await tokenizeGGUFModel(data) } - if(db.aiModel === 'ooba'){ - if(db.reverseProxyOobaArgs.tokenizer === 'mixtral' || db.reverseProxyOobaArgs.tokenizer === 'mistral'){ - return await tokenizeWebTokenizers(data, 'mistral') - } - else if(db.reverseProxyOobaArgs.tokenizer === 'llama'){ - return await tokenizeWebTokenizers(data, 'llama') - } - else{ - return await tokenizeWebTokenizers(data, 'llama') - } - } - if(db.aiModel.startsWith('gpt4o')){ + if(modelInfo.tokenizer === LLMTokenizer.tiktokenO200Base){ return await tikJS(data, 'o200k_base') } - if(db.aiModel.startsWith('gemini')){ - if(db.aiModel.endsWith('-vertex')){ - return await tokenizeWebTokenizers(data, 'gemma') - } + if(modelInfo.tokenizer === LLMTokenizer.GoogleCloud && db.googleClaudeTokenizing){ return await tokenizeGoogleCloud(data) } - if(db.aiModel.startsWith('cohere')){ + if(modelInfo.tokenizer === LLMTokenizer.Gemma || modelInfo.tokenizer === LLMTokenizer.GoogleCloud){ + return await tokenizeWebTokenizers(data, 'gemma') + } + if(modelInfo.tokenizer === LLMTokenizer.Cohere){ return await tokenizeWebTokenizers(data, 'cohere') }