Refactor model handling
This commit is contained in:
@@ -9,15 +9,15 @@
|
|||||||
import { HideIconStore, ReloadGUIPointer, selIdState } from "../../ts/stores.svelte";
|
import { HideIconStore, ReloadGUIPointer, selIdState } from "../../ts/stores.svelte";
|
||||||
import { translateHTML } from "../../ts/translator/translator";
|
import { translateHTML } from "../../ts/translator/translator";
|
||||||
import { risuChatParser } from "src/ts/process/scripts";
|
import { risuChatParser } from "src/ts/process/scripts";
|
||||||
import { get, type Unsubscriber } from "svelte/store";
|
import { type Unsubscriber } from "svelte/store";
|
||||||
import { isEqual } from "lodash";
|
import { isEqual } from "lodash";
|
||||||
import { sayTTS } from "src/ts/process/tts";
|
import { sayTTS } from "src/ts/process/tts";
|
||||||
import { getModelShortName } from "src/ts/model/names";
|
|
||||||
import { capitalize } from "src/ts/util";
|
import { capitalize } from "src/ts/util";
|
||||||
import { longpress } from "src/ts/gui/longtouch";
|
import { longpress } from "src/ts/gui/longtouch";
|
||||||
import { ColorSchemeTypeStore } from "src/ts/gui/colorscheme";
|
import { ColorSchemeTypeStore } from "src/ts/gui/colorscheme";
|
||||||
import { ConnectionOpenStore } from "src/ts/sync/multiuser";
|
import { ConnectionOpenStore } from "src/ts/sync/multiuser";
|
||||||
import { onDestroy, onMount } from "svelte";
|
import { onDestroy, onMount } from "svelte";
|
||||||
|
import { getModelInfo } from "src/ts/model/modellist";
|
||||||
let translating = $state(false)
|
let translating = $state(false)
|
||||||
let editMode = $state(false)
|
let editMode = $state(false)
|
||||||
let statusMessage:string = $state('')
|
let statusMessage:string = $state('')
|
||||||
@@ -232,7 +232,7 @@
|
|||||||
>
|
>
|
||||||
<BotIcon size={20} />
|
<BotIcon size={20} />
|
||||||
<span class="ml-1">
|
<span class="ml-1">
|
||||||
{capitalize(getModelShortName(messageGenerationInfo.model))}
|
{capitalize(getModelInfo(messageGenerationInfo.model).shortName)}
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,11 +4,8 @@
|
|||||||
import { getHordeModels } from "src/ts/horde/getModels";
|
import { getHordeModels } from "src/ts/horde/getModels";
|
||||||
import Arcodion from "./Arcodion.svelte";
|
import Arcodion from "./Arcodion.svelte";
|
||||||
import { language } from "src/lang";
|
import { language } from "src/lang";
|
||||||
import Help from "../Others/Help.svelte";
|
|
||||||
import CheckInput from "./GUI/CheckInput.svelte";
|
import CheckInput from "./GUI/CheckInput.svelte";
|
||||||
import { isTauri } from "src/ts/globalApi.svelte";
|
import { getModelInfo, getModelList } from 'src/ts/model/modellist';
|
||||||
import {open} from '@tauri-apps/plugin-dialog'
|
|
||||||
import { getModelName } from "src/ts/model/names";
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
value?: string;
|
value?: string;
|
||||||
@@ -26,8 +23,11 @@
|
|||||||
openOptions = false
|
openOptions = false
|
||||||
onChange(name)
|
onChange(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
let showUnrec = $state(false)
|
let showUnrec = $state(false)
|
||||||
|
let providers = $derived(getModelList({
|
||||||
|
recommendedOnly: !showUnrec,
|
||||||
|
groupedByProvider: true
|
||||||
|
}))
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if openOptions}
|
{#if openOptions}
|
||||||
@@ -42,123 +42,20 @@
|
|||||||
<h1 class="font-bold text-xl">{language.model}
|
<h1 class="font-bold text-xl">{language.model}
|
||||||
</h1>
|
</h1>
|
||||||
<div class="border-t-1 border-y-selected mt-1 mb-1"></div>
|
<div class="border-t-1 border-y-selected mt-1 mb-1"></div>
|
||||||
<Arcodion name="OpenAI GPT">
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt35')}}>GPT-3.5 Turbo</button>
|
{#each providers as provider}
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('instructgpt35')}}>GPT-3.5 Instruct</button>
|
{#if provider.providerName === '@as-is'}
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4_turbo')}}>GPT-4 Turbo</button>
|
{#each provider.models as model}
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4o')}}>GPT-4o</button>
|
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel(model.id)}}>{model.name}</button>
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4om')}}>GPT-4o Mini</button>
|
{/each}
|
||||||
{#if showUnrec}
|
{:else}
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4')}}>GPT-4 (Old)</button>
|
<Arcodion name={provider.providerName}>
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4_32k')}}>GPT-4 32K (Old)</button>
|
{#each provider.models as model}
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt35_16k')}}>GPT-3.5 Turbo 16K</button>
|
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel(model.id)}}>{model.name}</button>
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4_0314')}}>GPT-4 0314</button>
|
{/each}
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4_0613')}}>GPT-4 0613</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4_32k_0613')}}>GPT-4 32K 0613</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4_1106')}}>GPT-4 Turbo 1106</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt35_0125')}}>GPT-3.5 Turbo 0125</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt35_1106')}}>GPT-3.5 Turbo 1106</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt35_0613')}}>GPT-3.5 Turbo 0613</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt35_16k_0613')}}>GPT-3.5 Turbo 16K 0613</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt35_0301')}}>GPT-3.5 Turbo 0301</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4_0125')}}>GPT-4 Turbo 0125</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gptvi4_1106')}}>GPT-4 Turbo 1106 Vision</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4_turbo_20240409')}}>GPT-4 Turbo 20240409</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4o-2024-05-13')}}>GPT-4o 20240513</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4o-2024-08-06')}}>GPT-4o 20240806</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4o-2024-11-20')}}>GPT-4o 20241120</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4o-chatgpt')}}>GPT-4o ChatGPT</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4o1-preview')}}>o1 Preview</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('gpt4o1-mini')}}>o1 Mini</button>
|
|
||||||
{/if}
|
|
||||||
</Arcodion>
|
|
||||||
<Arcodion name="Anthropic Claude">
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-3-5-sonnet-20241022')}}>Claude 3.5 Sonnet (20241022)</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-3-haiku-20240307')}}>Claude 3 Haiku (20240307)</button>
|
|
||||||
{#if showUnrec}
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-3-5-sonnet-20240620')}}>Claude 3.5 Sonnet (20240620)</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-3-opus-20240229')}}>Claude 3 Opus (20240229)</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-3-sonnet-20240229')}}>Claude 3 Sonnet (20240229)</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-2.1')}}>claude-2.1</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-2')}}>claude-2</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-2-100k')}}>claude-2-100k</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-v1')}}>claude-v1</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-v1-100k')}}>claude-v1-100k</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-instant-v1')}}>claude-instant-v1</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-instant-v1-100k')}}>claude-instant-v1-100k</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-1.2')}}>claude-v1.2</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('claude-1.0')}}>claude-v1.0</button>
|
|
||||||
{/if}
|
|
||||||
</Arcodion>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('reverse_proxy')}}>Custom (OpenAI-compatible)</button>
|
|
||||||
{#if DBState.db.tpo && isTauri}
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={async () => {
|
|
||||||
const selected = await open({
|
|
||||||
filters: [{
|
|
||||||
name: 'Model File',
|
|
||||||
extensions: ['gguf']
|
|
||||||
}]
|
|
||||||
});
|
|
||||||
if(selected){
|
|
||||||
changeModel('local_' + selected)
|
|
||||||
}
|
|
||||||
}}>Local GGUF Model <Help key="experimental"/> </button>
|
|
||||||
{/if}
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('ooba')}}>Oobabooga</button>
|
|
||||||
{#if showUnrec}
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('textgen_webui')}}>Oobabooga Legacy</button>
|
|
||||||
{/if}
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('mancer')}}>Mancer</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('openrouter')}}>OpenRouter</button>
|
|
||||||
<Arcodion name="Mistral API">
|
|
||||||
{#if showUnrec}
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('mistral-small-latest')}}>Mistral Small</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('mistral-medium-latest')}}>Mistral Medium</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('mistral-large-2411')}}>Mistral Large 2411</button>
|
|
||||||
{/if}
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('open-mistral-nemo')}}>Mistral Nemo</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('mistral-large-latest')}}>Mistral Large</button>
|
|
||||||
</Arcodion>
|
|
||||||
<Arcodion name="Google Gemini">
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-1.5-pro-exp-0827')}}>Gemini Pro 1.5 0827</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-exp-1121')}}>Gemini Exp 1121</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-exp-1114')}}>Gemini Exp 1114</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-1.5-pro-002')}}>Gemini Pro 1.5 002</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-1.5-flash-002')}}>Gemini Flash 1.5 002</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-1.5-pro-latest')}}>Gemini Pro 1.5</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-1.5-flash')}}>Gemini Flash 1.5</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-pro')}}>Gemini Pro</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-pro-vision')}}>Gemini Pro Vision</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-ultra')}}>Gemini Ultra</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('gemini-ultra-vision')}}>Gemini Ultra Vision</button>
|
|
||||||
</Arcodion>
|
|
||||||
{#if showUnrec}
|
|
||||||
<Arcodion name="Google Palm2">
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('palm2')}}>Bison</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('palm2_unicorn')}}>Unicorn</button>
|
|
||||||
</Arcodion>
|
</Arcodion>
|
||||||
{/if}
|
{/if}
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('kobold')}}>Kobold</button>
|
{/each}
|
||||||
<Arcodion name="Novellist">
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('novellist')}}>SuperTrin</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('novellist_damsel')}}>Damsel</button>
|
|
||||||
</Arcodion>
|
|
||||||
<Arcodion name="Cohere">
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('cohere-command-r')}}>Command R</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('cohere-command-r-plus')}}>Command R Plus</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('cohere-command-r-08-2024')}}>Command R 08-2024</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('cohere-command-r-03-2024')}}>Command R 03-2024</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('cohere-command-r-plus-08-2024')}}>Command R Plus 08-2024</button>
|
|
||||||
<button class="p-2 hover:text-green-500" onclick={() => {changeModel('cohere-command-r-plus-04-2024')}}>Command R Plus 04-2024</button>
|
|
||||||
</Arcodion>
|
|
||||||
<Arcodion name="NovelAI">
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('novelai')}}>NovelAI Clio</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('novelai_kayra')}}>NovelAI Kayra</button>
|
|
||||||
</Arcodion>
|
|
||||||
<Arcodion name="AI21">
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('jamba-1.5-large')}}>Jamba 1.5 Large</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('jamba-1.5-medium')}}>Jamba 1.5 Medium</button>
|
|
||||||
</Arcodion>
|
|
||||||
<Arcodion name="Horde">
|
<Arcodion name="Horde">
|
||||||
{#await getHordeModels()}
|
{#await getHordeModels()}
|
||||||
<button class="p-2">Loading...</button>
|
<button class="p-2">Loading...</button>
|
||||||
@@ -175,15 +72,6 @@
|
|||||||
{/each}
|
{/each}
|
||||||
{/await}
|
{/await}
|
||||||
</Arcodion>
|
</Arcodion>
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('ollama-hosted')}}>OLlama</button>
|
|
||||||
{#if showUnrec}
|
|
||||||
<Arcodion name="WebLLM Local">
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('hf:::Xenova/opt-350m')}}>opt-350m</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('hf:::Xenova/tiny-random-mistral')}}>tiny-random-mistral</button>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('hf:::Xenova/gpt2-large-conversational')}}>gpt2-large-conversational</button>
|
|
||||||
</Arcodion>
|
|
||||||
<button class="hover:bg-selected px-6 py-2 text-lg" onclick={() => {changeModel('risullm-proto')}}>RisuAI LLM (Prototype)</button>
|
|
||||||
{/if}
|
|
||||||
{#if DBState.db.plugins.length > 0}
|
{#if DBState.db.plugins.length > 0}
|
||||||
<button onclick={() => {changeModel('custom')}} class="hover:bg-selected px-6 py-2 text-lg" >Plugin</button>
|
<button onclick={() => {changeModel('custom')}} class="hover:bg-selected px-6 py-2 text-lg" >Plugin</button>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -197,6 +85,6 @@
|
|||||||
|
|
||||||
<button onclick={() => {openOptions = true}}
|
<button onclick={() => {openOptions = true}}
|
||||||
class="mt-4 drop-shadow-lg p-3 flex justify-center items-center ml-2 mr-2 rounded-lg bg-darkbutton mb-4 border-darkborderc border">
|
class="mt-4 drop-shadow-lg p-3 flex justify-center items-center ml-2 mr-2 rounded-lg bg-darkbutton mb-4 border-darkborderc border">
|
||||||
{getModelName(value)}
|
{getModelInfo(value).fullName}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
|||||||
@@ -4,31 +4,52 @@ export enum LLMFlags{
|
|||||||
hasAudioInput,
|
hasAudioInput,
|
||||||
hasAudioOutput,
|
hasAudioOutput,
|
||||||
hasPrefill,
|
hasPrefill,
|
||||||
hasCache
|
hasCache,
|
||||||
|
hasFullSystemPrompt,
|
||||||
|
hasFirstSystemPrompt,
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum LLMProvider{
|
export enum LLMProvider{
|
||||||
OpenAI,
|
OpenAI,
|
||||||
Antropic,
|
Anthropic,
|
||||||
GoogleCloud,
|
GoogleCloud,
|
||||||
VertexAI,
|
VertexAI,
|
||||||
AsIs,
|
AsIs,
|
||||||
Mistral
|
Mistral,
|
||||||
|
NovelList,
|
||||||
|
Cohere,
|
||||||
|
NovelAI,
|
||||||
|
WebLLM,
|
||||||
|
Horde,
|
||||||
|
AWS,
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum LLMFormat{
|
export enum LLMFormat{
|
||||||
OpenAICompatible,
|
OpenAICompatible,
|
||||||
OpenAILegacyInstruct,
|
OpenAILegacyInstruct,
|
||||||
Antropic,
|
Anthropic,
|
||||||
AnthropicLegacy,
|
AnthropicLegacy,
|
||||||
AsIs,
|
Mistral,
|
||||||
Mistral
|
GoogleCloud,
|
||||||
|
VertexAIGemini,
|
||||||
|
NovelList,
|
||||||
|
Cohere,
|
||||||
|
NovelAI,
|
||||||
|
WebLLM,
|
||||||
|
OobaLegacy,
|
||||||
|
Plugin,
|
||||||
|
Ooba,
|
||||||
|
Kobold,
|
||||||
|
Ollama,
|
||||||
|
Horde,
|
||||||
|
AWSBedrockClaude
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LLMModel{
|
export interface LLMModel{
|
||||||
id: string
|
id: string
|
||||||
name: string
|
name: string
|
||||||
shortName?: string
|
shortName?: string
|
||||||
|
fullName?: string
|
||||||
internalID?: string
|
internalID?: string
|
||||||
provider: LLMProvider
|
provider: LLMProvider
|
||||||
flags: LLMFlags[]
|
flags: LLMFlags[]
|
||||||
@@ -36,6 +57,21 @@ export interface LLMModel{
|
|||||||
recommended?: boolean
|
recommended?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ProviderNames = new Map<LLMProvider, string>([
|
||||||
|
[LLMProvider.OpenAI, 'OpenAI'],
|
||||||
|
[LLMProvider.Anthropic, 'Anthropic'],
|
||||||
|
[LLMProvider.GoogleCloud, 'Google Cloud'],
|
||||||
|
[LLMProvider.VertexAI, 'Vertex AI'],
|
||||||
|
[LLMProvider.AsIs, 'As Is'],
|
||||||
|
[LLMProvider.Mistral, 'MistralAI'],
|
||||||
|
[LLMProvider.NovelList, 'NovelList'],
|
||||||
|
[LLMProvider.Cohere, 'Cohere'],
|
||||||
|
[LLMProvider.NovelAI, 'NovelAI'],
|
||||||
|
[LLMProvider.WebLLM, 'WebLLM'],
|
||||||
|
[LLMProvider.Horde, 'Horde'],
|
||||||
|
[LLMProvider.AWS, 'AWS'],
|
||||||
|
])
|
||||||
|
|
||||||
export const LLMModels: LLMModel[] = [
|
export const LLMModels: LLMModel[] = [
|
||||||
{
|
{
|
||||||
id: 'gpt35',
|
id: 'gpt35',
|
||||||
@@ -69,7 +105,8 @@ export const LLMModels: LLMModel[] = [
|
|||||||
format: LLMFormat.OpenAICompatible,
|
format: LLMFormat.OpenAICompatible,
|
||||||
flags: [
|
flags: [
|
||||||
LLMFlags.hasImageInput
|
LLMFlags.hasImageInput
|
||||||
]
|
],
|
||||||
|
recommended: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'gpt4om',
|
id: 'gpt4om',
|
||||||
@@ -79,7 +116,8 @@ export const LLMModels: LLMModel[] = [
|
|||||||
format: LLMFormat.OpenAICompatible,
|
format: LLMFormat.OpenAICompatible,
|
||||||
flags: [
|
flags: [
|
||||||
LLMFlags.hasImageInput
|
LLMFlags.hasImageInput
|
||||||
]
|
],
|
||||||
|
recommended: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'gpt4',
|
id: 'gpt4',
|
||||||
@@ -257,116 +295,169 @@ export const LLMModels: LLMModel[] = [
|
|||||||
format: LLMFormat.OpenAICompatible,
|
format: LLMFormat.OpenAICompatible,
|
||||||
flags: [],
|
flags: [],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Claude 3.5 Sonnet",
|
||||||
|
id: 'claude-3-5-sonnet-latest',
|
||||||
|
shortName: "3.5 Sonnet",
|
||||||
|
provider: LLMProvider.Anthropic,
|
||||||
|
format: LLMFormat.Anthropic,
|
||||||
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Claude 3.5 Haiku",
|
||||||
|
id: 'claude-3-5-haiku-latest',
|
||||||
|
shortName: "3.5 Haiku",
|
||||||
|
provider: LLMProvider.Anthropic,
|
||||||
|
format: LLMFormat.Anthropic,
|
||||||
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude 3.5 Sonnet (20241022)',
|
name: 'Claude 3.5 Sonnet (20241022)',
|
||||||
id: 'claude-3-5-sonnet-20241022',
|
id: 'claude-3-5-sonnet-20241022',
|
||||||
provider: LLMProvider.Antropic,
|
shortName: "3.5 Sonnet 1022",
|
||||||
format: LLMFormat.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
|
format: LLMFormat.Anthropic,
|
||||||
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Claude 3.5 Haiku (20241022)",
|
||||||
|
id: 'claude-3-5-haiku-20241022',
|
||||||
|
shortName: "3.5 Haiku 1022",
|
||||||
|
provider: LLMProvider.Anthropic,
|
||||||
|
format: LLMFormat.Anthropic,
|
||||||
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude 3 Haiku (20240307)',
|
name: 'Claude 3 Haiku (20240307)',
|
||||||
id: 'claude-3-haiku-20240307',
|
id: 'claude-3-haiku-20240307',
|
||||||
provider: LLMProvider.Antropic,
|
shortName: "3 Haiku 0307",
|
||||||
format: LLMFormat.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
|
format: LLMFormat.Anthropic,
|
||||||
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude 3.5 Sonnet (20240620)',
|
name: 'Claude 3.5 Sonnet (20240620)',
|
||||||
id: 'claude-3-5-sonnet-20240620',
|
id: 'claude-3-5-sonnet-20240620',
|
||||||
provider: LLMProvider.Antropic,
|
shortName: "3.5 Sonnet 0620",
|
||||||
format: LLMFormat.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
|
format: LLMFormat.Anthropic,
|
||||||
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude 3 Opus (20240229)',
|
name: 'Claude 3 Opus (20240229)',
|
||||||
id: 'claude-3-opus-20240229',
|
id: 'claude-3-opus-20240229',
|
||||||
provider: LLMProvider.Antropic,
|
shortName: "3 Opus 0229",
|
||||||
format: LLMFormat.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
|
format: LLMFormat.Anthropic,
|
||||||
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude 3 Sonnet (20240229)',
|
name: 'Claude 3 Sonnet (20240229)',
|
||||||
id: 'claude-3-sonnet-20240229',
|
id: 'claude-3-sonnet-20240229',
|
||||||
provider: LLMProvider.Antropic,
|
shortName: "3 Sonnet 0229",
|
||||||
format: LLMFormat.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
|
format: LLMFormat.Anthropic,
|
||||||
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude 2.1',
|
name: 'Claude 2.1',
|
||||||
id: 'claude-2.1',
|
id: 'claude-2.1',
|
||||||
provider: LLMProvider.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
format: LLMFormat.Antropic,
|
format: LLMFormat.AnthropicLegacy,
|
||||||
flags: [LLMFlags.hasPrefill],
|
flags: [LLMFlags.hasPrefill],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude 2',
|
name: 'Claude 2',
|
||||||
id: 'claude-2',
|
id: 'claude-2',
|
||||||
provider: LLMProvider.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
format: LLMFormat.Antropic,
|
format: LLMFormat.AnthropicLegacy,
|
||||||
flags: [LLMFlags.hasPrefill],
|
flags: [LLMFlags.hasPrefill],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude 2 100k',
|
name: 'Claude 2 100k',
|
||||||
id: 'claude-2-100k',
|
id: 'claude-2-100k',
|
||||||
provider: LLMProvider.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
format: LLMFormat.Antropic,
|
format: LLMFormat.AnthropicLegacy,
|
||||||
flags: [LLMFlags.hasPrefill],
|
flags: [LLMFlags.hasPrefill],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude v1',
|
name: 'Claude v1',
|
||||||
id: 'claude-v1',
|
id: 'claude-v1',
|
||||||
provider: LLMProvider.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
format: LLMFormat.Antropic,
|
format: LLMFormat.AnthropicLegacy,
|
||||||
flags: [LLMFlags.hasPrefill],
|
flags: [LLMFlags.hasPrefill],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude v1 100k',
|
name: 'Claude v1 100k',
|
||||||
id: 'claude-v1-100k',
|
id: 'claude-v1-100k',
|
||||||
provider: LLMProvider.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
format: LLMFormat.Antropic,
|
format: LLMFormat.AnthropicLegacy,
|
||||||
flags: [LLMFlags.hasPrefill],
|
flags: [LLMFlags.hasPrefill],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude Instant v1',
|
name: 'Claude Instant v1',
|
||||||
id: 'claude-instant-v1',
|
id: 'claude-instant-v1',
|
||||||
provider: LLMProvider.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
format: LLMFormat.Antropic,
|
format: LLMFormat.AnthropicLegacy,
|
||||||
flags: [LLMFlags.hasPrefill],
|
flags: [LLMFlags.hasPrefill],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude Instant v1 100k',
|
name: 'Claude Instant v1 100k',
|
||||||
id: 'claude-instant-v1-100k',
|
id: 'claude-instant-v1-100k',
|
||||||
provider: LLMProvider.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
format: LLMFormat.Antropic,
|
format: LLMFormat.AnthropicLegacy,
|
||||||
flags: [LLMFlags.hasPrefill],
|
flags: [LLMFlags.hasPrefill],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude v1.2',
|
name: 'Claude v1.2',
|
||||||
id: 'claude-1.2',
|
id: 'claude-1.2',
|
||||||
provider: LLMProvider.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
format: LLMFormat.Antropic,
|
format: LLMFormat.AnthropicLegacy,
|
||||||
flags: [LLMFlags.hasPrefill],
|
flags: [LLMFlags.hasPrefill],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Claude v1.0',
|
name: 'Claude v1.0',
|
||||||
id: 'claude-1.0',
|
id: 'claude-1.0',
|
||||||
provider: LLMProvider.Antropic,
|
provider: LLMProvider.Anthropic,
|
||||||
format: LLMFormat.Antropic,
|
format: LLMFormat.AnthropicLegacy,
|
||||||
flags: [LLMFlags.hasPrefill],
|
flags: [LLMFlags.hasPrefill],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'Claude 3.5 Sonnet (20241022) v2',
|
||||||
|
id: 'anthropic.claude-3-5-sonnet-20241022-v2:0',
|
||||||
|
provider: LLMProvider.AWS,
|
||||||
|
format: LLMFormat.AWSBedrockClaude,
|
||||||
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Claude 3.5 Sonnet (20240620) v1',
|
||||||
|
id: 'anthropic.claude-3-5-sonnet-20240620-v1:0',
|
||||||
|
provider: LLMProvider.AWS,
|
||||||
|
format: LLMFormat.AWSBedrockClaude,
|
||||||
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Claude 3 Opus (20240229) v1',
|
||||||
|
id: 'anthropic.claude-3-opus-20240229-v1:0',
|
||||||
|
provider: LLMProvider.AWS,
|
||||||
|
format: LLMFormat.AWSBedrockClaude,
|
||||||
|
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'Ooba',
|
name: 'Ooba',
|
||||||
id: 'ooba',
|
id: 'ooba',
|
||||||
provider: LLMProvider.AsIs,
|
provider: LLMProvider.AsIs,
|
||||||
format: LLMFormat.AsIs,
|
format: LLMFormat.Ooba,
|
||||||
flags: [],
|
flags: [],
|
||||||
|
recommended: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Mancer',
|
name: 'Mancer',
|
||||||
id: 'mancer',
|
id: 'mancer',
|
||||||
provider: LLMProvider.AsIs,
|
provider: LLMProvider.AsIs,
|
||||||
format: LLMFormat.AsIs,
|
format: LLMFormat.OobaLegacy,
|
||||||
flags: [],
|
flags: [],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -375,12 +466,382 @@ export const LLMModels: LLMModel[] = [
|
|||||||
provider: LLMProvider.AsIs,
|
provider: LLMProvider.AsIs,
|
||||||
format: LLMFormat.OpenAICompatible,
|
format: LLMFormat.OpenAICompatible,
|
||||||
flags: [],
|
flags: [],
|
||||||
|
recommended: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'mistral-small-latest',
|
name: 'Mistral Small Latest',
|
||||||
id: 'mistral-small-latest',
|
id: 'mistral-small-latest',
|
||||||
|
shortName: 'Mistral S',
|
||||||
provider: LLMProvider.Mistral,
|
provider: LLMProvider.Mistral,
|
||||||
format: LLMFormat.Mistral,
|
format: LLMFormat.Mistral,
|
||||||
flags: [],
|
flags: [],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Mistral Medium Latest',
|
||||||
|
id: 'mistral-medium-latest',
|
||||||
|
shortName: 'Mistral M',
|
||||||
|
provider: LLMProvider.Mistral,
|
||||||
|
format: LLMFormat.Mistral,
|
||||||
|
flags: [],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Mistral Large 2411',
|
||||||
|
id: 'mistral-large-2411',
|
||||||
|
shortName: 'Mistral L 2411',
|
||||||
|
provider: LLMProvider.Mistral,
|
||||||
|
format: LLMFormat.Mistral,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Mistral Nemo',
|
||||||
|
id: 'open-mistral-nemo',
|
||||||
|
shortName: 'Mistral Nemo',
|
||||||
|
provider: LLMProvider.Mistral,
|
||||||
|
format: LLMFormat.Mistral,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Mistral Large Latest',
|
||||||
|
id: 'mistral-large-latest',
|
||||||
|
shortName: 'Mistral L',
|
||||||
|
provider: LLMProvider.Mistral,
|
||||||
|
format: LLMFormat.Mistral,
|
||||||
|
flags: [],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Pro 1.5 0827",
|
||||||
|
id: 'gemini-1.5-pro-exp-0827',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Exp 1121",
|
||||||
|
id: 'gemini-exp-1121',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Pro 1.5",
|
||||||
|
id: 'gemini-1.5-pro-latest',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Flash 1.5",
|
||||||
|
id: 'gemini-1.5-flash',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Exp 1121",
|
||||||
|
id: 'gemini-exp-1121-vertex',
|
||||||
|
internalID: 'gemini-exp-1121',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.VertexAIGemini,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Pro 1.5",
|
||||||
|
id: 'gemini-1.5-pro-latest-vertex',
|
||||||
|
internalID: 'gemini-1.5-pro-latest',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.VertexAIGemini,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Flash 1.5",
|
||||||
|
id: 'gemini-1.5-flash-vertex',
|
||||||
|
internalID: 'gemini-1.5-flash',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.VertexAIGemini,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Exp 1114",
|
||||||
|
id: 'gemini-exp-1114',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Pro 1.5 002",
|
||||||
|
id: 'gemini-1.5-pro-002',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Flash 1.5 002",
|
||||||
|
id: 'gemini-1.5-flash-002',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Pro",
|
||||||
|
id: 'gemini-pro',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Pro Vision",
|
||||||
|
id: 'gemini-pro-vision',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Ultra",
|
||||||
|
id: 'gemini-ultra',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gemini Ultra Vision",
|
||||||
|
id: 'gemini-ultra-vision',
|
||||||
|
provider: LLMProvider.GoogleCloud,
|
||||||
|
format: LLMFormat.GoogleCloud,
|
||||||
|
flags: [LLMFlags.hasImageInput],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Kobold',
|
||||||
|
id: 'kobold',
|
||||||
|
provider: LLMProvider.AsIs,
|
||||||
|
format: LLMFormat.Kobold,
|
||||||
|
flags: [],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "SuperTrin",
|
||||||
|
id: 'novellist',
|
||||||
|
provider: LLMProvider.NovelList,
|
||||||
|
format: LLMFormat.NovelList,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Damsel",
|
||||||
|
id: 'novellist_damsel',
|
||||||
|
provider: LLMProvider.NovelList,
|
||||||
|
format: LLMFormat.NovelList,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Command R",
|
||||||
|
id: 'cohere-command-r',
|
||||||
|
internalID: 'command-r',
|
||||||
|
provider: LLMProvider.Cohere,
|
||||||
|
format: LLMFormat.Cohere,
|
||||||
|
flags: [],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Command R Plus",
|
||||||
|
id: 'cohere-command-r-plus',
|
||||||
|
internalID: 'command-r-plus',
|
||||||
|
provider: LLMProvider.Cohere,
|
||||||
|
format: LLMFormat.Cohere,
|
||||||
|
flags: [],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Command R 08-2024",
|
||||||
|
id: 'cohere-command-r-08-2024',
|
||||||
|
internalID: 'command-r-08-2024',
|
||||||
|
provider: LLMProvider.Cohere,
|
||||||
|
format: LLMFormat.Cohere,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Command R 03-2024",
|
||||||
|
id: 'cohere-command-r-03-2024',
|
||||||
|
internalID: 'command-r-03-2024',
|
||||||
|
provider: LLMProvider.Cohere,
|
||||||
|
format: LLMFormat.Cohere,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Command R Plus 08-2024",
|
||||||
|
id: 'cohere-command-r-plus-08-2024',
|
||||||
|
internalID: 'command-r-plus-08-2024',
|
||||||
|
provider: LLMProvider.Cohere,
|
||||||
|
format: LLMFormat.Cohere,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Command R Plus 04-2024",
|
||||||
|
id: 'cohere-command-r-plus-04-2024',
|
||||||
|
internalID: 'command-r-plus-04-2024',
|
||||||
|
provider: LLMProvider.Cohere,
|
||||||
|
format: LLMFormat.Cohere,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Clio",
|
||||||
|
id: 'novelai',
|
||||||
|
provider: LLMProvider.NovelAI,
|
||||||
|
format: LLMFormat.NovelAI,
|
||||||
|
flags: [],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Kayra",
|
||||||
|
id: 'novelai_kayra',
|
||||||
|
provider: LLMProvider.NovelAI,
|
||||||
|
format: LLMFormat.NovelAI,
|
||||||
|
flags: [],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'ollama-hosted',
|
||||||
|
name: 'Ollama',
|
||||||
|
provider: LLMProvider.AsIs,
|
||||||
|
format: LLMFormat.Ollama,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'hf:::Xenova/opt-350m',
|
||||||
|
name: 'opt-350m',
|
||||||
|
provider: LLMProvider.WebLLM,
|
||||||
|
format: LLMFormat.WebLLM,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'hf:::Xenova/tiny-random-mistral',
|
||||||
|
name: 'tiny-random-mistral',
|
||||||
|
provider: LLMProvider.WebLLM,
|
||||||
|
format: LLMFormat.WebLLM,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'hf:::Xenova/gpt2-large-conversational',
|
||||||
|
name: 'gpt2-large-conversational',
|
||||||
|
provider: LLMProvider.WebLLM,
|
||||||
|
format: LLMFormat.WebLLM,
|
||||||
|
flags: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'custom',
|
||||||
|
name: "Plugin",
|
||||||
|
provider: LLMProvider.AsIs,
|
||||||
|
format: LLMFormat.Plugin,
|
||||||
|
flags: [],
|
||||||
|
recommended: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'reverse_proxy',
|
||||||
|
name: "Custom API",
|
||||||
|
provider: LLMProvider.AsIs,
|
||||||
|
format: LLMFormat.OpenAICompatible,
|
||||||
|
flags: [],
|
||||||
|
recommended: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
for(let model of LLMModels){
|
||||||
|
model.shortName ??= model.name
|
||||||
|
model.internalID ??= model.id
|
||||||
|
model.fullName ??= model.provider !== LLMProvider.AsIs ? `${ProviderNames.get(model.provider) ?? ''} ${model.name}`.trim() : model.name
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getModelInfo(id: string): LLMModel{
|
||||||
|
|
||||||
|
const found = LLMModels.find(model => model.id === id) ?? {
|
||||||
|
id,
|
||||||
|
name: id,
|
||||||
|
provider: LLMProvider.AsIs,
|
||||||
|
format: LLMFormat.OpenAICompatible,
|
||||||
|
flags: [],
|
||||||
|
}
|
||||||
|
|
||||||
|
if(found) return found
|
||||||
|
|
||||||
|
if(id.startsWith('hf:::')){
|
||||||
|
const withoutPrefix = id.replace('hf:::', '')
|
||||||
|
return {
|
||||||
|
id,
|
||||||
|
name: withoutPrefix,
|
||||||
|
shortName: withoutPrefix,
|
||||||
|
fullName: withoutPrefix,
|
||||||
|
internalID: withoutPrefix,
|
||||||
|
provider: LLMProvider.WebLLM,
|
||||||
|
format: LLMFormat.WebLLM,
|
||||||
|
flags: [],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(id.startsWith('horde:::')){
|
||||||
|
const withoutPrefix = id.replace('horde:::', '')
|
||||||
|
return {
|
||||||
|
id,
|
||||||
|
name: withoutPrefix,
|
||||||
|
shortName: withoutPrefix,
|
||||||
|
fullName: withoutPrefix,
|
||||||
|
internalID: withoutPrefix,
|
||||||
|
provider: LLMProvider.Horde,
|
||||||
|
format: LLMFormat.Horde,
|
||||||
|
flags: [],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
id,
|
||||||
|
name: id,
|
||||||
|
shortName: id,
|
||||||
|
fullName: id,
|
||||||
|
internalID: id,
|
||||||
|
provider: LLMProvider.AsIs,
|
||||||
|
format: LLMFormat.OpenAICompatible,
|
||||||
|
flags: [],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface GetModelListGroup {
|
||||||
|
providerName: string
|
||||||
|
models: LLMModel[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getModelList<T extends boolean>(arg:{
|
||||||
|
recommendedOnly?:boolean,
|
||||||
|
groupedByProvider?:T
|
||||||
|
} = {}): T extends true ? GetModelListGroup[] : LLMModel[]{
|
||||||
|
let models = LLMModels
|
||||||
|
if(arg.recommendedOnly){
|
||||||
|
models = models.filter(model => model.recommended)
|
||||||
|
}
|
||||||
|
if(arg.groupedByProvider){
|
||||||
|
let group: GetModelListGroup[] = []
|
||||||
|
for(let model of models){
|
||||||
|
if(model.provider === LLMProvider.AsIs){
|
||||||
|
group.push({
|
||||||
|
providerName: '@as-is',
|
||||||
|
models: [model]
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
let providerName = ProviderNames.get(model.provider) || 'Unknown'
|
||||||
|
let groupIndex = group.findIndex(g => g.providerName === providerName)
|
||||||
|
if(groupIndex === -1){
|
||||||
|
group.push({
|
||||||
|
providerName,
|
||||||
|
models: [model]
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
group[groupIndex].models.push(model)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return group as any
|
||||||
|
}
|
||||||
|
return models as any
|
||||||
|
}
|
||||||
@@ -1,204 +0,0 @@
|
|||||||
|
|
||||||
export function getModelName(name:string){
|
|
||||||
switch(name){
|
|
||||||
case "gpt35":
|
|
||||||
return "GPT-3.5 Turbo"
|
|
||||||
case "gpt35_0613":
|
|
||||||
return "GPT-3.5 Turbo 0613"
|
|
||||||
case "gpt35_0301":
|
|
||||||
return "GPT-3.5 Turbo 0301"
|
|
||||||
case "gpt35_16k":
|
|
||||||
return "GPT-3.5 Turbo 16k"
|
|
||||||
case "gpt35_16k_0613":
|
|
||||||
return "GPT-3.5 Turbo 16k 0613"
|
|
||||||
case 'instructgpt35':
|
|
||||||
return 'GPT-3.5 Turbo Instruct'
|
|
||||||
case "gpt4":
|
|
||||||
return "GPT-4"
|
|
||||||
case "gpt4_0301":
|
|
||||||
return "GPT-4 0301"
|
|
||||||
case "gpt4_32k":
|
|
||||||
return "GPT-4 32k"
|
|
||||||
case "gpt4_0613":
|
|
||||||
return "GPT-4 0613"
|
|
||||||
case "gpt4_32k_0613":
|
|
||||||
return "GPT-4 32k 0613"
|
|
||||||
case "gpt4_1106":
|
|
||||||
return "GPT-4 Turbo 1106"
|
|
||||||
case 'gpt45':
|
|
||||||
return 'GPT-4.5'
|
|
||||||
case "gpt35_1106":
|
|
||||||
return "GPT-3.5 Turbo 1106"
|
|
||||||
case 'local_gptq':
|
|
||||||
return 'Local Model GPTQ'
|
|
||||||
case "palm2":
|
|
||||||
return "PaLM2 Bison"
|
|
||||||
case "textgen_webui":
|
|
||||||
return "Oobabooga Legacy"
|
|
||||||
case 'ooba':
|
|
||||||
return 'Oobabooga'
|
|
||||||
case "mancer":
|
|
||||||
return "Mancer"
|
|
||||||
case "kobold":
|
|
||||||
return "Kobold"
|
|
||||||
case "custom":
|
|
||||||
return "Plugin"
|
|
||||||
case "novelai":
|
|
||||||
return "NovelAI Clio"
|
|
||||||
case "novelai_kayra":
|
|
||||||
return "NovelAI Kayra"
|
|
||||||
case "novellist":
|
|
||||||
return "NovelList SuperTrin"
|
|
||||||
case "novellist damsel":
|
|
||||||
return "NovelList Damsel"
|
|
||||||
case 'reverse_proxy':
|
|
||||||
return "Custom (OpenAI-compatible)"
|
|
||||||
case 'openrouter':
|
|
||||||
return "OpenRouter"
|
|
||||||
case 'gptvi4_1106':
|
|
||||||
return "GPT-4 Turbo 1106 Vision"
|
|
||||||
case 'palm2_unicorn':
|
|
||||||
return "PaLM2 Unicorn"
|
|
||||||
case 'mistral-tiny':
|
|
||||||
return "Mistral Tiny"
|
|
||||||
case 'mistral-small':
|
|
||||||
return "Mistral Small"
|
|
||||||
case 'mistral-medium':
|
|
||||||
return "Mistral Medium"
|
|
||||||
case 'gemini-pro':
|
|
||||||
return "Gemini Pro"
|
|
||||||
case 'horde:::auto':
|
|
||||||
return 'Horde Auto Model'
|
|
||||||
case 'gpt4_0125':
|
|
||||||
return 'GPT-4 Turbo 0125'
|
|
||||||
case 'gpt35_0125':
|
|
||||||
return 'GPT-3.5 Turbo 0125'
|
|
||||||
case 'gemini-ultra':
|
|
||||||
return 'Gemini Ultra'
|
|
||||||
case 'gemini-ultra-vision':
|
|
||||||
return 'Gemini Ultra Vision'
|
|
||||||
case 'claude-3-opus-20240229':
|
|
||||||
return 'Claude 3 Opus (20240229)'
|
|
||||||
case 'claude-3-5-sonnet-20240620':
|
|
||||||
return 'Claude 3.5 Sonnet (20240620)'
|
|
||||||
case 'claude-3-5-sonnet-20241022':
|
|
||||||
return 'Claude 3.5 Sonnet (20241022)'
|
|
||||||
case 'claude-3-sonnet-20240229':
|
|
||||||
return 'Claude 3 Sonnet (20240229)'
|
|
||||||
case 'mistral-large-latest':
|
|
||||||
return 'Mistral Large'
|
|
||||||
case 'mistral-small-latest':
|
|
||||||
return 'Mistral Small'
|
|
||||||
case 'mistral-medium-latest':
|
|
||||||
return 'Mistral Medium'
|
|
||||||
case 'claude-3-haiku-20240307':
|
|
||||||
return 'Claude 3 Haiku (20240307)'
|
|
||||||
case 'gpt4_turbo':
|
|
||||||
return 'GPT-4 Turbo'
|
|
||||||
case 'gpt4_turbo_20240409':
|
|
||||||
return 'GPT-4 Turbo (20240409)'
|
|
||||||
case 'gpt4o':
|
|
||||||
return 'GPT-4o'
|
|
||||||
case 'gpt4o-2024-05-13':
|
|
||||||
return 'GPT-4o (2024-05-13)'
|
|
||||||
case 'gpt4o-2024-08-06':
|
|
||||||
return 'GPT-4o (2024-08-06)'
|
|
||||||
case 'gpt4o-2024-11-20':
|
|
||||||
return 'GPT-4o (2024-11-20)'
|
|
||||||
case 'gpt4o-chatgpt':
|
|
||||||
return 'GPT-4o ChatGPT'
|
|
||||||
case 'gpt4om':
|
|
||||||
return 'GPT-4o Mini'
|
|
||||||
case 'gpt4o1-preview':
|
|
||||||
return 'o1 Preview'
|
|
||||||
case 'gpt4o1-mini':
|
|
||||||
return 'o1 Mini'
|
|
||||||
case 'gpt4om-2024-07-18':
|
|
||||||
return 'GPT-4o Mini (2024-07-18)'
|
|
||||||
case 'gemini-1.5-pro-latest':
|
|
||||||
return 'Gemini 1.5 Pro'
|
|
||||||
case 'gemini-1.5-pro-exp-0801':
|
|
||||||
return 'Gemini 1.5 Pro Exp (0801)'
|
|
||||||
case 'gemini-1.5-pro-exp-0827':
|
|
||||||
return 'Gemini 1.5 Pro Exp (0827)'
|
|
||||||
case 'gemini-1.5-flash':
|
|
||||||
return 'Gemini 1.5 Flash'
|
|
||||||
case 'ollama-hosted':
|
|
||||||
return 'Ollama'
|
|
||||||
case 'cohere-command-r':
|
|
||||||
return 'Cohere Command-R'
|
|
||||||
case 'cohere-command-r-plus':
|
|
||||||
return 'Cohere Command-R Plus'
|
|
||||||
default:
|
|
||||||
if(name.startsWith("horde:::")){
|
|
||||||
const split = name.split(":::")
|
|
||||||
return `Horde ${split[1]}`
|
|
||||||
}
|
|
||||||
if(name.startsWith('tf:::')){
|
|
||||||
const split = name.split(":::")
|
|
||||||
return `${split[1]}`
|
|
||||||
}
|
|
||||||
if(name.startsWith('local_')){
|
|
||||||
const realName = name.replace('local_', '').split(/(\\|\/)/g).at(-1)
|
|
||||||
return `GGUF ${realName}`
|
|
||||||
}
|
|
||||||
return name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getModelShortName(model:string){
|
|
||||||
if(model.startsWith("gpt35")){
|
|
||||||
return "GPT-3.5"
|
|
||||||
}
|
|
||||||
if(model.startsWith("cohere-")){
|
|
||||||
return model.replace("cohere-", "")
|
|
||||||
}
|
|
||||||
if(model.startsWith('gpt4om')){
|
|
||||||
return "GPT-4o Mini"
|
|
||||||
}
|
|
||||||
if(model.startsWith("gpt4o")){
|
|
||||||
return "GPT-4o"
|
|
||||||
}
|
|
||||||
if(model.startsWith("gpt4")){
|
|
||||||
return "GPT-4"
|
|
||||||
}
|
|
||||||
if(model.startsWith("gptvi4")){
|
|
||||||
return "GPT-4V"
|
|
||||||
}
|
|
||||||
if(model.startsWith("mistral")){
|
|
||||||
return getModelName(model).split(" ").at(-1)
|
|
||||||
}
|
|
||||||
if(model.startsWith("mancer")){
|
|
||||||
return "Mancer"
|
|
||||||
}
|
|
||||||
if(model.startsWith('tf:::')){
|
|
||||||
const split = model.split(":::")
|
|
||||||
return split[1]
|
|
||||||
}
|
|
||||||
if(model.startsWith('local_')){
|
|
||||||
const realName = model.replace('local_', '').split(/(\\|\/)/g).at(-1)
|
|
||||||
return realName
|
|
||||||
}
|
|
||||||
if(model.startsWith('horde:::')){
|
|
||||||
const split = model.split(":::")
|
|
||||||
return split[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
if(model.startsWith('claude-3')){
|
|
||||||
const split = model.split("-")
|
|
||||||
if(!isNaN(parseInt(split[split.length-1]))){
|
|
||||||
return split[split.length-2]
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
return split[split.length-1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(model.startsWith('reverse_proxy')){
|
|
||||||
return 'Custom'
|
|
||||||
}
|
|
||||||
if(model.startsWith('oaicomp')){
|
|
||||||
return 'Custom'
|
|
||||||
}
|
|
||||||
return getModelName(model)
|
|
||||||
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -721,6 +721,8 @@ export interface Database{
|
|||||||
google: {
|
google: {
|
||||||
accessToken: string
|
accessToken: string
|
||||||
projectId: string
|
projectId: string
|
||||||
|
privateKey: string
|
||||||
|
clientEmail: string
|
||||||
}
|
}
|
||||||
mistralKey?:string
|
mistralKey?:string
|
||||||
chainOfThought?:boolean
|
chainOfThought?:boolean
|
||||||
|
|||||||
Reference in New Issue
Block a user