@nomyx/assistant
Version:
A powerful assistant library and cli for your AI projects. works with Vertex AI (Claude and Gemini)
76 lines (75 loc) • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AIProvider = void 0;
const provider_1 = require("../types/provider");
class AIProvider {
constructor() {
this.middleware = [];
this.plugins = [];
}
use(middleware) {
this.middleware.push(middleware);
}
registerPlugin(plugin) {
this.plugins.push(plugin);
plugin.initialize(this);
}
async applyMiddleware(messages) {
let processedMessages = messages;
for (const mw of this.middleware) {
processedMessages = await mw.preProcess(processedMessages);
}
return processedMessages;
}
async applyMiddlewareToResponse(response) {
let processedResponse = response;
for (const mw of this.middleware.slice().reverse()) {
processedResponse = await mw.postProcess(processedResponse);
}
return processedResponse;
}
async notifyPluginsBeforeChat(messages, options) {
for (const plugin of this.plugins) {
if (plugin.onBeforeChat) {
await plugin.onBeforeChat(messages, options);
}
}
}
async notifyPluginsAfterChat(response) {
for (const plugin of this.plugins) {
if (plugin.onAfterChat) {
await plugin.onAfterChat(response);
}
}
}
async notifyPluginsOnError(error) {
const aiProviderError = new provider_1.AIProviderError(error.message, 'UNKNOWN_ERROR', 'unknown', error, false);
for (const plugin of this.plugins) {
if (plugin.onError) {
await plugin.onError(aiProviderError);
}
}
}
async notifyPluginsOnStreamStart() {
for (const plugin of this.plugins) {
if (plugin.onStreamStart) {
await plugin.onStreamStart();
}
}
}
async notifyPluginsOnStreamChunk(chunk) {
for (const plugin of this.plugins) {
if (plugin.onStreamChunk) {
await plugin.onStreamChunk(chunk);
}
}
}
async notifyPluginsOnStreamEnd() {
for (const plugin of this.plugins) {
if (plugin.onStreamEnd) {
await plugin.onStreamEnd();
}
}
}
}
exports.AIProvider = AIProvider;