refactor!(llm): implement new model registration system

This commit is contained in:
2026-07-16 22:05:45 +05:30
parent 8ad94d3fc2
commit 250bb87a8d
28 changed files with 1717 additions and 1974 deletions

View File

@@ -7,7 +7,7 @@ import type { SimSnapshot } from "@/lib/simulation";
import {
ProviderManager,
ModelProviderInstance,
AVAILABLE_PROVIDERS,
getAvailableProviders as listAvailableProviders,
ModelProviderMeta,
ModelLister,
ModelInfo,
@@ -311,7 +311,7 @@ export async function setProviderMapping(
}
export async function getAvailableProviders(): Promise<ModelProviderMeta[]> {
return AVAILABLE_PROVIDERS;
return listAvailableProviders();
}
export async function regenerateEmbeddings(

View File

@@ -1,17 +1,9 @@
import {
GeminiProvider,
MockLLMProvider,
OllamaProvider,
OllamaEmbeddingProvider,
ProviderManager,
OpenRouterProvider,
AnthropicProvider,
OpenAIProvider,
OpenAIEmbeddingProvider,
GroqProvider,
DeepSeekProvider,
GeminiEmbeddingProvider,
MockEmbeddingProvider,
ProviderManager,
buildLLMProvider,
buildEmbeddingProvider,
} from "@omnia/llm";
import type {
ILLMProvider,
@@ -47,77 +39,10 @@ export interface ProviderResolverOptions {
}
// ---------------------------------------------------------------------------
// Private builders
// Resolution logic
// ---------------------------------------------------------------------------
function buildLLMProvider(inst: ModelProviderInstance): ILLMProvider {
if (inst.providerName === "google-genai") {
return new GeminiProvider(
inst.apiKey,
inst.modelName,
inst.name,
inst.maxContext,
);
} else if (inst.providerName === "openrouter") {
return new OpenRouterProvider(
inst.apiKey,
inst.modelName,
inst.name,
inst.maxContext,
);
} else if (inst.providerName === "ollama") {
return new OllamaProvider(
inst.endpointUrl,
inst.modelName,
inst.name,
inst.maxContext,
);
} else if (inst.providerName === "anthropic") {
return new AnthropicProvider(
inst.apiKey,
inst.modelName,
inst.name,
inst.maxContext,
);
} else if (inst.providerName === "openai") {
return new OpenAIProvider(
inst.apiKey,
inst.modelName,
inst.name,
inst.maxContext,
);
} else if (inst.providerName === "groq") {
return new GroqProvider(
inst.apiKey,
inst.modelName,
inst.name,
inst.maxContext,
);
} else if (inst.providerName === "deepseek") {
return new DeepSeekProvider(
inst.apiKey,
inst.modelName,
inst.name,
inst.maxContext,
);
}
return new MockLLMProvider([]);
}
function buildEmbeddingProvider(
inst: ModelProviderInstance,
): IEmbeddingProvider {
if (inst.providerName === "google-genai") {
return new GeminiEmbeddingProvider(inst.apiKey, inst.modelName);
} else if (inst.providerName === "ollama") {
return new OllamaEmbeddingProvider(inst.endpointUrl, inst.modelName);
} else if (inst.providerName === "openai") {
return new OpenAIEmbeddingProvider(inst.apiKey, inst.modelName);
}
return new MockEmbeddingProvider(inst.modelName);
}
// ---------------------------------------------------------------------------
/**
// Public API
// ---------------------------------------------------------------------------

View File

@@ -5,11 +5,7 @@ import fs from "fs";
import { SQLiteRepository } from "@omnia/core";
import { BufferRepository, LedgerRepository } from "@omnia/memory";
import { Architect, AliasDeltaGenerator } from "@omnia/architect";
import {
ProviderManager,
GeminiEmbeddingProvider,
MockEmbeddingProvider,
} from "@omnia/llm";
import { ProviderManager, buildEmbeddingProvider } from "@omnia/llm";
import type { ModelProviderInstance, IEmbeddingProvider } from "@omnia/llm";
import { ScenarioLoader } from "@omnia/scenario";
import type { SimSnapshot } from "../simulation-types";
@@ -398,14 +394,34 @@ export class SimulationManager {
inst = ProviderManager.getActive("embedding");
}
const key = inst ? inst.apiKey : process.env.GOOGLE_API_KEY || "";
const providerName = inst ? inst.providerName : "google-genai";
const modelName = inst ? inst.modelName : undefined;
if (!inst) {
const envKey = process.env.GOOGLE_API_KEY || "";
if (envKey) {
inst = {
id: "regen-env-fallback",
name: "Gemini Embed (Env)",
providerName: "google-genai",
apiKey: envKey,
isActive: true,
modelName: "gemini-embedding-001",
type: "embedding",
maxContext: 0,
};
} else {
inst = {
id: "regen-mock-fallback",
name: "Mock Embed (Fallback)",
providerName: "mock",
apiKey: "",
isActive: true,
modelName: undefined,
type: "embedding",
maxContext: 0,
};
}
}
const embeddingProvider: IEmbeddingProvider =
providerName === "google-genai"
? new GeminiEmbeddingProvider(key, modelName)
: new MockEmbeddingProvider(modelName);
const embeddingProvider: IEmbeddingProvider = buildEmbeddingProvider(inst);
for (const file of files) {
const dbPath = path.join(DATA_DIR, file);