UNPKG

langpong

Version:
109 lines (108 loc) 3.56 kB
/** * ManagerStore.ts */ import { EventEmitter } from "events"; import { Langcode, PluginConfigs, PluginDescriptions, plugins } from "langcode"; import { Chain, ChainConfig, ManagerEntry, ManagerStoreOptions } from "../types"; /** * Gelişmiş ManagerStore: * - Manager bazında run queue * - INITIALIZING durumunda gelen run'ları da kuyrukluyor. * - JWT tabanlı "session ownership" kontrolü örneği * - Faiss index i manager'a dahil etme */ export declare class ManagerStore extends EventEmitter { private static instance; private managers; private currentGlobalRuns; private logger; private options; private nextCleanupTimeout; static getInstance(opts?: ManagerStoreOptions): ManagerStore; private constructor(); /** * Basit JWT doğrulama örneği: * - request'ten token al * - decode et * - userId'yi döndür * Gerçekte try/catch ile de verify yapmalısınız. */ decodeJWT(token: string): { userId: string; }; /** * Session'ın sahibi, bu userId mi? */ private checkSessionOwnership; /** * createManagerAsync: FAISS index vb. gibi ağır init senaryolarını taklit ediyor */ createManagerAsync(pluginConfigs: PluginConfigs[]): Promise<string>; /** * getManager */ getManager(sessionId: string): Langcode | undefined; /** * ManagerEntry'ye doğrudan erişmek istersen */ getManagerEntry(sessionId: string): ManagerEntry | undefined; /** * removeManager */ removeManager(sessionId: string): boolean; getPlugin(pluginName: plugins): Promise<PluginDescriptions | null>; getPlugins(): Promise<PluginDescriptions[]>; /** * Plugin run talebi -> Kuyruğa eklenir veya hemen işlenir */ runPlugin(sessionId: string, pluginName: plugins, pluginParams: any): Promise<any>; /** * Chain run */ runChain(sessionId: string, chainId: string, input: any): Promise<any>; /** * CHAIN oluşturma */ createChain(sessionId: string, chainId: string, config: ChainConfig): Chain; getChainOutput(sessionId: string, chainId: string): any; putSharedData(sessionId: string, key: string, data: any): void; getSharedData(sessionId: string, key: string): any; /** * Kuyruktaki işleri işlemeye çalışır. * - Manager "READY" mi? * - Concurrency limitleri uygun mu? * Uygunsa 1 task çekip çalıştırır, bitince "runComplete" event'ine yol açar. * Tek seferde birden çok task'ı da (kullanımdaki concurrency limitine bağlı olarak) ilerletebilirsin. */ private processQueue; /** * Bütün managerların kuyruğunu işleyebilir. * Bir run bittiğinde global concurrency düşer => başka managerlardaki kuyruklar da ilerleyebilir. */ private processQueueAll; /** * Tekil bir task'ı hayata geçirir. */ private executeTask; /** * Reaktif temizlik (benzer mantık): * Her runComplete ve managerReady sonrasında scheduleNextCleanup. */ private scheduleNextCleanup; private cleanupExpiredManagers; shutdownAllManagers(): void; /** * Debug: aktif manager listesi */ listActiveManagers(): { sessionId: string; status: import("../types").ManagerStatus; createdAt: number; lastUsedAt: number; activeRunsCount: number; queueLength: number; chainCount: number; sharedMemoryKeys: number; faissLoaded: boolean; }[]; }