@hashgraphonline/conversational-agent
Version:
Hashgraph Online conversational AI agent implementing HCS-10 communication, HCS-2 registries, and content inscription on Hedera
104 lines (102 loc) • 3.51 kB
TypeScript
import { BaseMessage } from '@langchain/core/messages';
import { StructuredTool } from '@langchain/core/tools';
import { TransactionReceipt } from '@hashgraph/sdk';
import { HederaAgentKit, ServerSigner, TokenUsageCallbackHandler, TokenUsage, BasePlugin, CostCalculation } from 'hedera-agent-kit';
import { AIProvider, VercelAIProvider, BAMLProvider } from './providers';
import { Logger } from '@hashgraphonline/standards-sdk';
import { MCPServerConfig, MCPConnectionStatus } from './mcp/types';
export interface ToolFilterConfig {
namespaceWhitelist?: string[];
toolBlacklist?: string[];
toolPredicate?: (tool: StructuredTool) => boolean;
}
export type ExecutionMode = 'direct' | 'bytes';
export type OperationalMode = 'autonomous' | 'returnBytes';
export interface HederaAgentConfiguration {
signer: ServerSigner;
execution?: {
mode?: ExecutionMode;
operationalMode?: OperationalMode;
userAccountId?: string;
scheduleUserTransactions?: boolean;
scheduleUserTransactionsInBytesMode?: boolean;
};
ai?: {
provider?: AIProvider;
llm?: unknown;
apiKey?: string;
modelName?: string;
temperature?: number;
};
filtering?: ToolFilterConfig;
messaging?: {
systemPreamble?: string;
systemPostamble?: string;
conciseMode?: boolean;
};
extensions?: {
plugins?: BasePlugin[];
mirrorConfig?: Record<string, unknown>;
modelCapability?: string;
};
mcp?: {
servers?: MCPServerConfig[];
autoConnect?: boolean;
};
debug?: {
verbose?: boolean;
silent?: boolean;
};
}
export interface ConversationContext {
messages: BaseMessage[];
metadata?: Record<string, unknown>;
}
export interface ChatResponse {
output: string;
message?: string;
transactionBytes?: string;
receipt?: TransactionReceipt | object;
scheduleId?: string;
transactionId?: string;
notes?: string[];
error?: string;
intermediateSteps?: unknown;
rawToolOutput?: unknown;
tokenUsage?: TokenUsage;
cost?: CostCalculation;
metadata?: Record<string, unknown>;
tool_calls?: Array<{
id: string;
name: string;
args: Record<string, unknown>;
output?: string;
}>;
[key: string]: unknown;
}
export interface UsageStats extends TokenUsage {
cost: CostCalculation;
}
export declare abstract class BaseAgent {
protected config: HederaAgentConfiguration;
protected logger: Logger;
protected agentKit: HederaAgentKit | undefined;
protected tools: StructuredTool[];
protected initialized: boolean;
protected tokenTracker: TokenUsageCallbackHandler | undefined;
constructor(config: HederaAgentConfiguration);
abstract boot(): Promise<void>;
abstract chat(message: string, context?: ConversationContext): Promise<ChatResponse>;
abstract shutdown(): Promise<void>;
abstract switchMode(mode: OperationalMode): void;
abstract getUsageStats(): UsageStats;
abstract getUsageLog(): UsageStats[];
abstract clearUsageStats(): void;
abstract connectMCPServers(): Promise<void>;
abstract getMCPConnectionStatus(): Map<string, MCPConnectionStatus>;
getCore(): HederaAgentKit | undefined;
protected filterTools(tools: StructuredTool[]): StructuredTool[];
protected buildSystemPrompt(): string;
isReady(): boolean;
}
export type { AIProvider, VercelAIProvider, BAMLProvider };