Files
OllaHub/lib/model-registry.ts
2026-02-22 14:06:01 -03:00

143 lines
4.3 KiB
TypeScript

import { LocalModel } from '@/hooks/use-local-models';
// Interfaces based on the JSON structure
export interface ModelVariant {
name: string;
size: string;
context: string;
inputType: string;
}
export interface ModelDefinition {
model: string;
url: string;
description: string;
variantsCount: number;
variants: ModelVariant[];
}
// Import model definitions
// We use a static list as dynamic imports of JSONs are not trivial in client-side bundles without API routes
import aya from '@/data/models/aya.json';
import codellama from '@/data/models/codellama.json';
import commandR from '@/data/models/command-r.json';
import commandRPlus from '@/data/models/command-r-plus.json';
import deepseekCoder from '@/data/models/deepseek-coder.json';
import deepseekLLM from '@/data/models/deepseek-llm.json';
import deepseekV2 from '@/data/models/deepseek-v2.json';
import deepseekV25 from '@/data/models/deepseek-v2.5.json';
import deepseekV3 from '@/data/models/deepseek-v3.json';
import falcon from '@/data/models/falcon.json';
import gemma from '@/data/models/gemma.json';
import gemma2 from '@/data/models/gemma2.json';
import llama2 from '@/data/models/llama2.json';
import llama2Uncensored from '@/data/models/llama2-uncensored.json';
import llama3 from '@/data/models/llama3.json';
import llama31 from '@/data/models/llama3.1.json';
import llama32 from '@/data/models/llama3.2.json';
import llama32Vision from '@/data/models/llama3.2-vision.json';
import llama33 from '@/data/models/llama3.3.json';
import llava from '@/data/models/llava.json';
import mistral from '@/data/models/mistral.json';
import mistralNemo from '@/data/models/mistral-nemo.json';
import mixtral from '@/data/models/mixtral.json';
import moondream from '@/data/models/moondream.json';
import neuralChat from '@/data/models/neural-chat.json';
import openhermes from '@/data/models/openhermes.json';
import orcaMini from '@/data/models/orca-mini.json';
import phi from '@/data/models/phi.json';
import phi3 from '@/data/models/phi3.json';
import phi35 from '@/data/models/phi3.5.json';
import phi4 from '@/data/models/phi4.json';
import qwen from '@/data/models/qwen.json';
import qwen2 from '@/data/models/qwen2.json';
import qwen25 from '@/data/models/qwen2.5.json';
import qwen25Coder from '@/data/models/qwen2.5-coder.json';
import starlingLM from '@/data/models/starling-lm.json';
import tinyllama from '@/data/models/tinyllama.json';
import vicuna from '@/data/models/vicuna.json';
import wizardVicunaUncensored from '@/data/models/wizard-vicuna-uncensored.json';
import yi from '@/data/models/yi.json';
import zephyr from '@/data/models/zephyr.json';
// Aggregate into a registry
export const MODEL_REGISTRY: ModelDefinition[] = [
aya,
codellama,
commandR,
commandRPlus,
deepseekCoder,
deepseekLLM,
deepseekV2,
deepseekV25,
deepseekV3,
falcon,
gemma,
gemma2,
llama2,
llama2Uncensored,
llama3,
llama31,
llama32,
llama32Vision,
llama33,
llava,
mistral,
mistralNemo,
mixtral,
moondream,
neuralChat,
openhermes,
orcaMini,
phi,
phi3,
phi35,
phi4,
qwen,
qwen2,
qwen25,
qwen25Coder,
starlingLM,
tinyllama,
vicuna,
wizardVicunaUncensored,
yi,
zephyr,
] as ModelDefinition[];
// Helper to find a model definition by one of its variant names
export function findModelDefinition(variantName: string): ModelDefinition | undefined {
// Remove tag to match base model name roughly?
// Or search all variants
const cleanName = variantName.split(':')[0];
// First try to find by exact match in variants
const exactMatch = MODEL_REGISTRY.find(def =>
def.variants.some(v => v.name === variantName)
);
if (exactMatch) return exactMatch;
// Then try to match by model ID/name
return MODEL_REGISTRY.find(def => def.model === cleanName);
}
export function getInstalledModels(
registry: ModelDefinition[],
installed: LocalModel[]
): ModelDefinition[] {
const installedNames = new Set(installed.map(m => m.name));
return registry.filter(def =>
def.variants.some(v => installedNames.has(v.name))
);
}
export function getAvailableModels(
registry: ModelDefinition[],
installed: LocalModel[]
): ModelDefinition[] {
const installedNames = new Set(installed.map(m => m.name));
return registry.filter(def =>
!def.variants.some(v => installedNames.has(v.name))
);
}