langpong
Version:
langcode api server version
109 lines (108 loc) • 3.56 kB
TypeScript
/**
* 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;
}[];
}