@softvisio/core
Version:
Softisio core
89 lines (72 loc) • 2.13 kB
JavaScript
import GeminiApi from "./ai/gemini.js";
import OllamaApi from "./ai/ollama.js";
import OpenAiApi from "./ai/open-ai.js";
const PROVIDERS = {
"ollama": OllamaApi,
"gemini": GeminiApi,
"openAi": OpenAiApi,
},
MODELS = {};
for ( const provider in PROVIDERS ) {
for ( const model in PROVIDERS[ provider ].models ) {
MODELS[ model ] = {
...PROVIDERS[ provider ].models[ model ],
"id": model,
provider,
};
}
}
export default class AiApi {
#models = {};
#providers = {
"ollama": null,
"gemini": null,
"openAi": null,
};
constructor ( { ollama, gemini, openAi } = {} ) {
if ( ollama ) this.#providers.ollama = new OllamaApi( ...ollama );
if ( gemini ) this.#providers.gemini = new GeminiApi( ...gemini );
if ( openAi ) this.#providers.openAi = new OpenAiApi( ...openAi );
for ( const model in MODELS ) {
if ( this[ MODELS[ model ].provider ] ) {
this.#models[ model ] = MODELS[ model ];
}
}
}
// static
static get models () {
return MODELS;
}
// properties
get models () {
return this.#models;
}
get hasOllama () {
return Boolean( this.#providers.ollama );
}
get hasGemini () {
return Boolean( this.#providers.gemini );
}
get hasOpenAi () {
return Boolean( this.#providers.openAi );
}
get ollama () {
return this.#providers.ollama;
}
get gemini () {
return this.#providers.gemini;
}
get openAi () {
return this.#providers.openAi;
}
// public
getApi ( model ) {
return this.#providers[ this.#models[ model ].provider ];
}
async getEmbedding ( model, input, options = {} ) {
return this.getApi( model ).getEmbedding( model, input, { ...options, "simple": true } );
}
async getCompletion ( model, prompt, options = {} ) {
return this.getApi( model ).getCompletion( model, prompt, { ...options, "simple": true } );
}
}