UNPKG

@nomyx/assistant

Version:

A powerful assistant library and cli for your AI projects. works with Vertex AI (Claude and Gemini)

64 lines (56 loc) 2.17 kB
import { ChatMessage, ChatOptions } from '../types/chat'; import { ExtendedActionContext } from './types'; import { PromptAction } from './PromptAction'; import { evaluateCondition } from '../utils/conditionEvaluator'; export async function executePromptAction<I, O>( promptAction: PromptAction<I, O>, params: I, context: ExtendedActionContext ): Promise<O> { if (promptAction.routing && promptAction.routing.length > 0) { for (const route of promptAction.routing) { if (evaluateCondition(route.condition, { ...context.state, ...params })) { if (typeof route.prompt === 'string') { return context.executeAction!(route.prompt) as Promise<O>; } else { return executePromptAction(route.prompt, params, context); } } } // If no conditions are met, end execution return null as unknown as O; } // Execute the current prompt if no routing or no conditions met const messages: ChatMessage[] = [ { role: 'system', content: promptAction.content }, { role: 'user', content: JSON.stringify(params) } ]; const options: ChatOptions = { ...promptAction.options, ...promptAction.config }; try { const result = await context.aiProvider.chat(messages, options); return result as O; } catch (error) { context.logger.error('Error executing prompt action:', error); throw error; } } // Export a test function to verify routing export function testPromptRouting(promptAction: PromptAction<any, any>, params: any, context: ExtendedActionContext): string { let result = 'Routing Test:\n'; if (promptAction.routing && promptAction.routing.length > 0) { for (const route of promptAction.routing) { const conditionMet = evaluateCondition(route.condition, { ...context.state, ...params }); result += `Condition "${route.condition}": ${conditionMet ? 'Met' : 'Not Met'}\n`; if (conditionMet) { result += `Routing to: ${typeof route.prompt === 'string' ? route.prompt : route.prompt.name}\n`; break; } } } else { result += 'No routing defined. Executing current prompt.\n'; } return result; }