UNPKG

@xynehq/jaf

Version:

Juspay Agent Framework - A purely functional agent framework with immutable state and composable tools

250 lines • 9.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const index_js_1 = require("../index.js"); const agents_js_1 = require("./agents.js"); const mock_provider_js_1 = require("./mock-provider.js"); async function demoBasicMath() { console.log('\n🧮 Demo 1: Basic Math Calculation'); console.log('================================'); const context = { userId: 'user123', permissions: ['user'], workspace: '/tmp/demo' }; const agentRegistry = new Map([ ['TriageAgent', agents_js_1.triageAgent], ['MathTutor', agents_js_1.mathTutor], ['FileManager', agents_js_1.fileManager], ['WebResearcher', agents_js_1.webResearcher], ]); const modelProvider = new mock_provider_js_1.MockModelProvider(); const traceCollector = new index_js_1.ConsoleTraceCollector(); const config = { agentRegistry, modelProvider, maxTurns: 10, onEvent: traceCollector.collect.bind(traceCollector), }; const initialState = { runId: (0, index_js_1.generateRunId)(), traceId: (0, index_js_1.generateTraceId)(), messages: [ { role: 'user', content: 'What is 25 * 4 + 10?' } ], currentAgentName: 'TriageAgent', context, turnCount: 0, }; const result = await (0, index_js_1.run)(initialState, config); if (result.outcome.status === 'completed') { console.log('āœ… Final Answer:', result.outcome.output); } else { console.error('āŒ Run Failed:', result.outcome.error); } } async function demoFileOperations() { console.log('\nšŸ“ Demo 2: File Operations (Permission Denied)'); console.log('==============================================='); const context = { userId: 'user456', permissions: ['user'], // No admin permission workspace: '/tmp/demo' }; const agentRegistry = new Map([ ['TriageAgent', agents_js_1.triageAgent], ['MathTutor', agents_js_1.mathTutor], ['FileManager', agents_js_1.fileManager], ['WebResearcher', agents_js_1.webResearcher], ]); const modelProvider = new mock_provider_js_1.MockModelProvider(); const traceCollector = new index_js_1.ConsoleTraceCollector(); const config = { agentRegistry, modelProvider, maxTurns: 10, onEvent: traceCollector.collect.bind(traceCollector), }; const initialState = { runId: (0, index_js_1.generateRunId)(), traceId: (0, index_js_1.generateTraceId)(), messages: [ { role: 'user', content: 'Please read the file /shared/example.txt' } ], currentAgentName: 'TriageAgent', context, turnCount: 0, }; const result = await (0, index_js_1.run)(initialState, config); if (result.outcome.status === 'completed') { console.log('āœ… Final Answer:', result.outcome.output); } else { console.error('āŒ Run Failed:', result.outcome.error); } } async function demoWebSearch() { console.log('\nšŸ” Demo 3: Web Search with Guardrails'); console.log('===================================='); const context = { userId: 'user789', permissions: ['user', 'researcher'], workspace: '/tmp/demo' }; const agentRegistry = new Map([ ['TriageAgent', agents_js_1.triageAgent], ['MathTutor', agents_js_1.mathTutor], ['FileManager', agents_js_1.fileManager], ['WebResearcher', agents_js_1.webResearcher], ]); const modelProvider = new mock_provider_js_1.MockModelProvider(); const traceCollector = new index_js_1.ConsoleTraceCollector(); const contentFilter = (0, index_js_1.createContentFilter)(); const rateLimiter = (0, index_js_1.createRateLimiter)(3, // max 3 calls 60000, // per minute (input) => 'global' // simple global rate limit ); const config = { agentRegistry, modelProvider, maxTurns: 10, initialInputGuardrails: [contentFilter, rateLimiter], finalOutputGuardrails: [contentFilter], onEvent: traceCollector.collect.bind(traceCollector), }; const initialState = { runId: (0, index_js_1.generateRunId)(), traceId: (0, index_js_1.generateTraceId)(), messages: [ { role: 'user', content: 'Search for information about artificial intelligence' } ], currentAgentName: 'TriageAgent', context, turnCount: 0, }; const result = await (0, index_js_1.run)(initialState, config); if (result.outcome.status === 'completed') { console.log('āœ… Final Answer:', result.outcome.output); } else { console.error('āŒ Run Failed:', result.outcome.error); } } async function demoHandoffChain() { console.log('\nšŸ”„ Demo 4: Complex Multi-Agent Handoff Chain'); console.log('==========================================='); const context = { userId: 'poweruser', permissions: ['user', 'admin', 'researcher'], workspace: '/tmp/demo' }; const agentRegistry = new Map([ ['TriageAgent', agents_js_1.triageAgent], ['MathTutor', agents_js_1.mathTutor], ['FileManager', agents_js_1.fileManager], ['WebResearcher', agents_js_1.webResearcher], ]); const modelProvider = new mock_provider_js_1.MockModelProvider(); const traceCollector = new index_js_1.ConsoleTraceCollector(); const config = { agentRegistry, modelProvider, maxTurns: 15, onEvent: traceCollector.collect.bind(traceCollector), }; const initialState = { runId: (0, index_js_1.generateRunId)(), traceId: (0, index_js_1.generateTraceId)(), messages: [ { role: 'user', content: 'I need to calculate 15 * 8, then search for information about the number 120, and finally save that information to a file called results.txt' } ], currentAgentName: 'TriageAgent', context, turnCount: 0, }; const result = await (0, index_js_1.run)(initialState, config); if (result.outcome.status === 'completed') { console.log('āœ… Final Answer:', result.outcome.output); } else { console.error('āŒ Run Failed:', result.outcome.error); } } async function demoGuardrailTrigger() { console.log('\nšŸ›”ļø Demo 5: Guardrail Trigger (Sensitive Content)'); console.log('==============================================='); const context = { userId: 'user999', permissions: ['user'], workspace: '/tmp/demo' }; const agentRegistry = new Map([ ['TriageAgent', agents_js_1.triageAgent], ['MathTutor', agents_js_1.mathTutor], ['FileManager', agents_js_1.fileManager], ['WebResearcher', agents_js_1.webResearcher], ]); const modelProvider = new mock_provider_js_1.MockModelProvider(); const traceCollector = new index_js_1.ConsoleTraceCollector(); const contentFilter = (0, index_js_1.createContentFilter)(); const config = { agentRegistry, modelProvider, maxTurns: 10, initialInputGuardrails: [contentFilter], onEvent: traceCollector.collect.bind(traceCollector), }; const initialState = { runId: (0, index_js_1.generateRunId)(), traceId: (0, index_js_1.generateTraceId)(), messages: [ { role: 'user', content: 'Can you help me with my password and api_key management?' } ], currentAgentName: 'TriageAgent', context, turnCount: 0, }; const result = await (0, index_js_1.run)(initialState, config); if (result.outcome.status === 'completed') { console.log('āœ… Final Answer:', result.outcome.output); } else { console.error('āŒ Run Failed:', result.outcome.error); } } async function runAllDemos() { console.log('šŸš€ FAF v2.0 Demo Application'); console.log('==========================='); console.log('Showcasing the Functional Agent Framework capabilities\n'); try { await demoBasicMath(); await new Promise(resolve => setTimeout(resolve, 1000)); await demoFileOperations(); await new Promise(resolve => setTimeout(resolve, 1000)); await demoWebSearch(); await new Promise(resolve => setTimeout(resolve, 1000)); await demoHandoffChain(); await new Promise(resolve => setTimeout(resolve, 1000)); await demoGuardrailTrigger(); console.log('\nšŸŽ‰ All demos completed!'); console.log('\nKey features demonstrated:'); console.log('- āœ… Pure functional architecture with immutable state'); console.log('- āœ… Type-safe agent and tool definitions'); console.log('- āœ… Composable validation policies'); console.log('- āœ… Multi-agent handoff coordination'); console.log('- āœ… Comprehensive error handling'); console.log('- āœ… Real-time tracing and observability'); console.log('- āœ… Guardrail enforcement for security'); console.log('- āœ… Permission-based access control'); } catch (error) { console.error('Demo failed:', error); } } if (require.main === module) { runAllDemos(); } //# sourceMappingURL=index.js.map