bb-inspired
Version:
Core library for BB-inspired NestJS backend
95 lines • 4.07 kB
JavaScript
;
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