UNPKG

@push.rocks/smartai

Version:

SmartAi is a versatile TypeScript library designed to facilitate integration and interaction with various AI models, offering functionalities for chat, audio generation, document processing, and vision tasks.

119 lines (110 loc) 3.52 kB
import { Conversation } from './classes.conversation.js'; import * as plugins from './plugins.js'; import { AnthropicProvider } from './provider.anthropic.js'; import { OllamaProvider } from './provider.ollama.js'; import { OpenAiProvider } from './provider.openai.js'; import { PerplexityProvider } from './provider.perplexity.js'; import { ExoProvider } from './provider.exo.js'; import { GroqProvider } from './provider.groq.js'; import { XAIProvider } from './provider.xai.js'; export interface ISmartAiOptions { openaiToken?: string; anthropicToken?: string; perplexityToken?: string; groqToken?: string; xaiToken?: string; exo?: { baseUrl?: string; apiKey?: string; }; ollama?: { baseUrl?: string; model?: string; visionModel?: string; }; } export type TProvider = 'openai' | 'anthropic' | 'perplexity' | 'ollama' | 'exo' | 'groq' | 'xai'; export class SmartAi { public options: ISmartAiOptions; public openaiProvider: OpenAiProvider; public anthropicProvider: AnthropicProvider; public perplexityProvider: PerplexityProvider; public ollamaProvider: OllamaProvider; public exoProvider: ExoProvider; public groqProvider: GroqProvider; public xaiProvider: XAIProvider; constructor(optionsArg: ISmartAiOptions) { this.options = optionsArg; } public async start() { if (this.options.openaiToken) { this.openaiProvider = new OpenAiProvider({ openaiToken: this.options.openaiToken, }); await this.openaiProvider.start(); } if (this.options.anthropicToken) { this.anthropicProvider = new AnthropicProvider({ anthropicToken: this.options.anthropicToken, }); await this.anthropicProvider.start(); } if (this.options.perplexityToken) { this.perplexityProvider = new PerplexityProvider({ perplexityToken: this.options.perplexityToken, }); await this.perplexityProvider.start(); } if (this.options.groqToken) { this.groqProvider = new GroqProvider({ groqToken: this.options.groqToken, }); await this.groqProvider.start(); } if (this.options.xaiToken) { this.xaiProvider = new XAIProvider({ xaiToken: this.options.xaiToken, }); await this.xaiProvider.start(); } if (this.options.ollama) { this.ollamaProvider = new OllamaProvider({ baseUrl: this.options.ollama.baseUrl, model: this.options.ollama.model, visionModel: this.options.ollama.visionModel, }); await this.ollamaProvider.start(); } if (this.options.exo) { this.exoProvider = new ExoProvider({ exoBaseUrl: this.options.exo.baseUrl, apiKey: this.options.exo.apiKey, }); await this.exoProvider.start(); } } public async stop() {} /** * create a new conversation */ createConversation(provider: TProvider) { switch (provider) { case 'exo': return Conversation.createWithExo(this); case 'openai': return Conversation.createWithOpenAi(this); case 'anthropic': return Conversation.createWithAnthropic(this); case 'perplexity': return Conversation.createWithPerplexity(this); case 'ollama': return Conversation.createWithOllama(this); case 'groq': return Conversation.createWithGroq(this); case 'xai': return Conversation.createWithXai(this); default: throw new Error('Provider not available'); } } }