UNPKG

bb-inspired

Version:

Core library for BB-inspired NestJS backend

95 lines 4.07 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var AIService_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.AIService = exports.AIProvider = void 0; const common_1 = require("@nestjs/common"); const openai_service_1 = require("./providers/openai.service"); var AIProvider; (function (AIProvider) { AIProvider["OPENAI"] = "openai"; })(AIProvider || (exports.AIProvider = AIProvider = {})); let AIService = AIService_1 = class AIService { constructor(options) { this.options = options; this.logger = new common_1.Logger(AIService_1.name); this.providers = new Map(); this.defaultProvider = options.defaultProvider || AIProvider.OPENAI; } async onModuleInit() { const { providers } = this.options; if (providers[AIProvider.OPENAI]) { this.providers.set(AIProvider.OPENAI, new openai_service_1.OpenAIService(providers[AIProvider.OPENAI])); this.logger.log('OpenAI provider initialized'); } if (this.providers.size === 0) { this.logger.warn('No AI providers configured'); } else { this.logger.log(`AI service initialized with ${this.providers.size} provider(s)`); if (!this.providers.has(this.defaultProvider)) { const firstProvider = Array.from(this.providers.keys())[0]; this.defaultProvider = firstProvider; this.logger.warn(`Default provider not available, using ${firstProvider} instead`); } } } getProvider(provider) { const providerKey = provider || this.defaultProvider; const providerInstance = this.providers.get(providerKey); if (!providerInstance) { throw new Error(`AI provider ${providerKey} is not configured`); } return providerInstance; } async listModels(provider) { return this.getProvider(provider).listModels(); } async getModel(modelId, provider) { return this.getProvider(provider).getModel(modelId); } async createCompletion(prompt, options = {}, provider) { return this.getProvider(provider).createCompletion(prompt, options); } async createChatCompletion(options, provider) { return this.getProvider(provider).createChatCompletion(options); } async createEmbedding(input, options = {}, provider) { return this.getProvider(provider).createEmbedding(input, options); } createSystemMessage(content) { return { role: 'system', content }; } createUserMessage(content) { return { role: 'user', content }; } createAssistantMessage(content) { return { role: 'assistant', content }; } createConversation(systemPrompt, userPrompt) { const messages = [ this.createSystemMessage(systemPrompt), ]; if (userPrompt) { messages.push(this.createUserMessage(userPrompt)); } return messages; } estimateTokenCount(text, provider) { return this.getProvider(provider).estimateTokenCount(text); } }; exports.AIService = AIService; exports.AIService = AIService = AIService_1 = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [Object]) ], AIService); //# sourceMappingURL=ai.service.js.map