Refactor model handling
This commit is contained in:
@@ -4,31 +4,52 @@ export enum LLMFlags{
|
||||
hasAudioInput,
|
||||
hasAudioOutput,
|
||||
hasPrefill,
|
||||
hasCache
|
||||
hasCache,
|
||||
hasFullSystemPrompt,
|
||||
hasFirstSystemPrompt,
|
||||
}
|
||||
|
||||
export enum LLMProvider{
|
||||
OpenAI,
|
||||
Antropic,
|
||||
Anthropic,
|
||||
GoogleCloud,
|
||||
VertexAI,
|
||||
AsIs,
|
||||
Mistral
|
||||
Mistral,
|
||||
NovelList,
|
||||
Cohere,
|
||||
NovelAI,
|
||||
WebLLM,
|
||||
Horde,
|
||||
AWS,
|
||||
}
|
||||
|
||||
export enum LLMFormat{
|
||||
OpenAICompatible,
|
||||
OpenAILegacyInstruct,
|
||||
Antropic,
|
||||
Anthropic,
|
||||
AnthropicLegacy,
|
||||
AsIs,
|
||||
Mistral
|
||||
Mistral,
|
||||
GoogleCloud,
|
||||
VertexAIGemini,
|
||||
NovelList,
|
||||
Cohere,
|
||||
NovelAI,
|
||||
WebLLM,
|
||||
OobaLegacy,
|
||||
Plugin,
|
||||
Ooba,
|
||||
Kobold,
|
||||
Ollama,
|
||||
Horde,
|
||||
AWSBedrockClaude
|
||||
}
|
||||
|
||||
export interface LLMModel{
|
||||
id: string
|
||||
name: string
|
||||
shortName?: string
|
||||
fullName?: string
|
||||
internalID?: string
|
||||
provider: LLMProvider
|
||||
flags: LLMFlags[]
|
||||
@@ -36,6 +57,21 @@ export interface LLMModel{
|
||||
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[] = [
|
||||
{
|
||||
id: 'gpt35',
|
||||
@@ -69,7 +105,8 @@ export const LLMModels: LLMModel[] = [
|
||||
format: LLMFormat.OpenAICompatible,
|
||||
flags: [
|
||||
LLMFlags.hasImageInput
|
||||
]
|
||||
],
|
||||
recommended: true
|
||||
},
|
||||
{
|
||||
id: 'gpt4om',
|
||||
@@ -79,7 +116,8 @@ export const LLMModels: LLMModel[] = [
|
||||
format: LLMFormat.OpenAICompatible,
|
||||
flags: [
|
||||
LLMFlags.hasImageInput
|
||||
]
|
||||
],
|
||||
recommended: true
|
||||
},
|
||||
{
|
||||
id: 'gpt4',
|
||||
@@ -257,116 +295,169 @@ export const LLMModels: LLMModel[] = [
|
||||
format: LLMFormat.OpenAICompatible,
|
||||
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)',
|
||||
id: 'claude-3-5-sonnet-20241022',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
shortName: "3.5 Sonnet 1022",
|
||||
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],
|
||||
},
|
||||
{
|
||||
name: 'Claude 3 Haiku (20240307)',
|
||||
id: 'claude-3-haiku-20240307',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
shortName: "3 Haiku 0307",
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.Anthropic,
|
||||
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||
},
|
||||
{
|
||||
name: 'Claude 3.5 Sonnet (20240620)',
|
||||
id: 'claude-3-5-sonnet-20240620',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
shortName: "3.5 Sonnet 0620",
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.Anthropic,
|
||||
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||
},
|
||||
{
|
||||
name: 'Claude 3 Opus (20240229)',
|
||||
id: 'claude-3-opus-20240229',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
shortName: "3 Opus 0229",
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.Anthropic,
|
||||
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||
},
|
||||
{
|
||||
name: 'Claude 3 Sonnet (20240229)',
|
||||
id: 'claude-3-sonnet-20240229',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
shortName: "3 Sonnet 0229",
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.Anthropic,
|
||||
flags: [LLMFlags.hasPrefill, LLMFlags.hasImageInput],
|
||||
},
|
||||
{
|
||||
name: 'Claude 2.1',
|
||||
id: 'claude-2.1',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.AnthropicLegacy,
|
||||
flags: [LLMFlags.hasPrefill],
|
||||
},
|
||||
{
|
||||
name: 'Claude 2',
|
||||
id: 'claude-2',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.AnthropicLegacy,
|
||||
flags: [LLMFlags.hasPrefill],
|
||||
},
|
||||
{
|
||||
name: 'Claude 2 100k',
|
||||
id: 'claude-2-100k',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.AnthropicLegacy,
|
||||
flags: [LLMFlags.hasPrefill],
|
||||
},
|
||||
{
|
||||
name: 'Claude v1',
|
||||
id: 'claude-v1',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.AnthropicLegacy,
|
||||
flags: [LLMFlags.hasPrefill],
|
||||
},
|
||||
{
|
||||
name: 'Claude v1 100k',
|
||||
id: 'claude-v1-100k',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.AnthropicLegacy,
|
||||
flags: [LLMFlags.hasPrefill],
|
||||
},
|
||||
{
|
||||
name: 'Claude Instant v1',
|
||||
id: 'claude-instant-v1',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.AnthropicLegacy,
|
||||
flags: [LLMFlags.hasPrefill],
|
||||
},
|
||||
{
|
||||
name: 'Claude Instant v1 100k',
|
||||
id: 'claude-instant-v1-100k',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.AnthropicLegacy,
|
||||
flags: [LLMFlags.hasPrefill],
|
||||
},
|
||||
{
|
||||
name: 'Claude v1.2',
|
||||
id: 'claude-1.2',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.AnthropicLegacy,
|
||||
flags: [LLMFlags.hasPrefill],
|
||||
},
|
||||
{
|
||||
name: 'Claude v1.0',
|
||||
id: 'claude-1.0',
|
||||
provider: LLMProvider.Antropic,
|
||||
format: LLMFormat.Antropic,
|
||||
provider: LLMProvider.Anthropic,
|
||||
format: LLMFormat.AnthropicLegacy,
|
||||
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',
|
||||
id: 'ooba',
|
||||
provider: LLMProvider.AsIs,
|
||||
format: LLMFormat.AsIs,
|
||||
format: LLMFormat.Ooba,
|
||||
flags: [],
|
||||
recommended: true
|
||||
},
|
||||
{
|
||||
name: 'Mancer',
|
||||
id: 'mancer',
|
||||
provider: LLMProvider.AsIs,
|
||||
format: LLMFormat.AsIs,
|
||||
format: LLMFormat.OobaLegacy,
|
||||
flags: [],
|
||||
},
|
||||
{
|
||||
@@ -375,12 +466,382 @@ export const LLMModels: LLMModel[] = [
|
||||
provider: LLMProvider.AsIs,
|
||||
format: LLMFormat.OpenAICompatible,
|
||||
flags: [],
|
||||
recommended: true
|
||||
},
|
||||
{
|
||||
name: 'mistral-small-latest',
|
||||
name: 'Mistral Small Latest',
|
||||
id: 'mistral-small-latest',
|
||||
shortName: 'Mistral S',
|
||||
provider: LLMProvider.Mistral,
|
||||
format: LLMFormat.Mistral,
|
||||
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: {
|
||||
accessToken: string
|
||||
projectId: string
|
||||
privateKey: string
|
||||
clientEmail: string
|
||||
}
|
||||
mistralKey?:string
|
||||
chainOfThought?:boolean
|
||||
|
||||
Reference in New Issue
Block a user