UNPKG

@hashgraphonline/conversational-agent

Version:

Hashgraph Online conversational AI agent implementing HCS-10 communication, HCS-2 registries, and content inscription on Hedera. https://hol.org

107 lines (94 loc) 2.68 kB
import { ResolutionContext, EntityType } from '../context/resolution-context'; export interface DetectedEntity { type: EntityType; value: string; originalText: string; confidence: number; position: number; } export interface ResolvedMessage { message: string; entities: DetectedEntity[]; conversions: Array<{ original: string; converted: string }>; context: ResolutionContext; } export interface ResolutionStage<TInput = unknown, TOutput = unknown> { name: string; process(input: TInput, context: ResolutionContext): Promise<TOutput>; } /** * Multi-stage resolution pipeline that processes messages through configurable stages */ export class ResolutionPipeline { private stages: ResolutionStage<unknown, unknown>[] = []; /** * Add a stage to the pipeline */ addStage<TInput, TOutput>(stage: ResolutionStage<TInput, TOutput>): void { this.stages.push(stage as ResolutionStage<unknown, unknown>); } /** * Get all registered stages */ getStages(): ResolutionStage<unknown, unknown>[] { return [...this.stages]; } /** * Clear all stages from the pipeline */ clear(): void { this.stages = []; } /** * Process a message through all pipeline stages */ async process( message: string, context: ResolutionContext ): Promise<ResolvedMessage> { if (this.stages.length === 0) { return { message, entities: [], conversions: [], context, }; } let currentInput: unknown = message; let entities: DetectedEntity[] = []; const conversions: Array<{ original: string; converted: string }> = []; for (const stage of this.stages) { try { const result = await stage.process(currentInput, context); if (stage.name === 'entity-detection') { entities = result as DetectedEntity[]; currentInput = entities; } else if (stage.name === 'format-conversion') { const resolvedMessage = result as ResolvedMessage; return { message: resolvedMessage.message, entities: resolvedMessage.entities, conversions: resolvedMessage.conversions, context, }; } else { if (typeof result === 'string') { currentInput = result; } else { currentInput = result; } } } catch (error) { throw new Error( `Stage ${stage.name} failed: ${(error as Error).message}` ); } } return { message: typeof currentInput === 'string' ? currentInput : message, entities, conversions, context, }; } }