UNPKG

convokit

Version:

A flexible TypeScript framework for ingesting, processing, and exporting chat/conversation data for LLM training and analysis.

96 lines 3.23 kB
import { ConvoKitLogging as ckl } from '../index.js'; /** * Registry for all available plugins (formatters, converters, filters). */ export class PluginRegistry { static formatters = new Map(); static converters = new Map(); static filters = new Map(); // Store info separately for quick lookup static pluginInfos = new Map(); /** * Registers a formatter plugin class. Uses PluginInfo.id as key. */ static registerFormatter(pluginCtor) { // Instantiate plugin to read its PluginInfo instance field const instance = new pluginCtor(); const info = instance.PluginInfo; if (this.formatters.has(info.id)) { throw new Error(`Formatter plugin with id "${info.id}" already registered.`); } this.formatters.set(info.id, pluginCtor); this.pluginInfos.set(info.id, info); // Store info ckl.info('PluginRegistry', `Registered formatter plugin: ${info.id}`); } /** * Retrieves a registered formatter plugin constructor by ID. */ static getFormatter(id) { return this.formatters.get(id); } /** * Lists all registered formatter plugin IDs. */ static listFormatters() { return Array.from(this.formatters.keys()); } /** * Registers a converter plugin class. */ static registerConverter(pluginCtor) { const instance = new pluginCtor(); const info = instance.PluginInfo; if (this.converters.has(info.id)) { throw new Error(`Converter plugin with id "${info.id}" already registered.`); } this.converters.set(info.id, pluginCtor); this.pluginInfos.set(info.id, info); // Store info ckl.info('PluginRegistry', `Registered converter plugin: ${info.id}`); } /** * Retrieves a registered converter plugin constructor by ID. */ static getConverter(id) { return this.converters.get(id); } /** * Lists all registered converter plugin IDs. */ static listConverters() { return Array.from(this.converters.keys()); } /** * Registers a filter plugin class. */ static registerFilter(pluginCtor) { const instance = new pluginCtor(); const info = instance.PluginInfo; if (this.filters.has(info.id)) { throw new Error(`Filter plugin with id "${info.id}" already registered.`); } this.filters.set(info.id, pluginCtor); this.pluginInfos.set(info.id, info); // Store info ckl.info('PluginRegistry', `Registered filter plugin: ${info.id}`); } /** * Retrieves a registered filter plugin constructor by ID. */ static getFilter(id) { return this.filters.get(id); } /** * Lists all registered filter plugin IDs. */ static listFilters() { return Array.from(this.filters.keys()); } /** * Retrieves the PluginInfo for a registered plugin by ID. * @param id The ID of the plugin. * @returns The PluginInfo object if found, otherwise undefined. */ static getPluginInfo(id) { return this.pluginInfos.get(id); } } //# sourceMappingURL=PluginRegistry.js.map