@hashgraphonline/conversational-agent
Version:
Hashgraph Online conversational AI agent implementing HCS-10 communication, HCS-2 registries, and content inscription on Hedera. https://hol.org
127 lines (125 loc) • 4.11 kB
TypeScript
import { AgentExecutor, AgentFinish, AgentStep } from 'langchain/agents';
import { FormSubmission } from '../forms/types';
import { ToolInterface } from '@langchain/core/tools';
import { ChainValues } from '@langchain/core/utils/types';
import { CallbackManagerForChainRun } from '@langchain/core/callbacks/manager';
import { RunnableConfig } from '@langchain/core/runnables';
interface ToolWithOriginal {
originalTool?: {
call?: (args: Record<string, unknown>) => Promise<string>;
};
}
interface PendingFormData {
toolName: string;
originalInput: unknown;
originalToolInput?: unknown;
schema: unknown;
toolRef?: ToolInterface | undefined;
originalToolRef?: ToolWithOriginal['originalTool'];
}
/**
* Parameter preprocessing callback interface
*/
export interface ParameterPreprocessingCallback {
(toolName: string, parameters: Record<string, unknown>): Promise<Record<string, unknown>>;
}
/**
* Agent executor that intercepts Zod validation errors and generates forms,
* and processes HashLink block responses for rich UI rendering
*/
export declare class FormAwareAgentExecutor extends AgentExecutor {
private formGenerator;
private formEngine;
private formLogger;
private pendingForms;
private parameterPreprocessingCallback;
/**
* Type guard to check if a Zod type is a ZodObject
*/
private isZodObject;
/**
* Type guard to check if metadata has hashLinkBlock
*/
private hasHashLinkBlock;
constructor(...args: ConstructorParameters<typeof AgentExecutor>);
/**
* Set parameter preprocessing callback
*/
setParameterPreprocessingCallback(callback: ParameterPreprocessingCallback | undefined): void;
/**
* BULLETPROOF TOOL INTERCEPTION
* Override the single-step execution to intercept tool calls BEFORE LangChain processes them
*/
_takeNextStep(nameToolMap: Record<string, ToolInterface>, inputs: ChainValues, intermediateSteps: AgentStep[], runManager?: CallbackManagerForChainRun, config?: RunnableConfig): Promise<AgentFinish | AgentStep[]>;
/**
* Helper to determine if a field is required in the schema
*/
private isFieldRequired;
/**
* Override _call to intercept Zod validation errors at the execution level
*/
_call(inputs: Record<string, unknown>): Promise<Record<string, unknown>>;
/**
* Handles Zod validation errors by generating forms
*/
private handleValidationError;
/**
* Get a copy of pending forms for preservation during executor recreation
*/
getPendingForms(): Map<string, PendingFormData>;
/**
* Restore pending forms from a previous executor instance
*/
restorePendingForms(forms: Map<string, PendingFormData>): void;
/**
* Processes form submission and continues tool execution
*/
processFormSubmission(submission: FormSubmission): Promise<Record<string, unknown>>;
/**
* Extracts tool information from the execution context
*/
private extractToolInfoFromError;
/**
* Attempts to find tool from execution context
*/
private findToolFromContext;
/**
* Additional fallback to detect tool from error context
*/
private detectToolFromErrorContext;
/**
* Checks if a schema structure matches error paths
*/
private schemaMatchesErrorPaths;
/**
* Extracts keywords from tool name for matching
*/
private extractToolKeywords;
/**
* Formats the form message for display
*/
private formatFormResponse;
/**
* Check if there are pending forms
*/
hasPendingForms(): boolean;
/**
* Get information about pending forms
*/
getPendingFormsInfo(): Array<{
formId: string;
toolName: string;
}>;
/**
* Processes HashLink block responses from tools
*/
private processHashLinkResponse;
/**
* Get FormEngine statistics for debugging
*/
getFormEngineStatistics(): {
strategies: string[];
middleware: string[];
};
}
export {};