@nomyx/assistant
Version:
A powerful assistant library and cli for your AI projects. works with Vertex AI (Claude and Gemini)
86 lines (85 loc) • 3.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PromptAction = void 0;
exports.executePromptAction = executePromptAction;
exports.testPromptRouting = testPromptRouting;
const conditionEvaluator_1 = require("../utils/conditionEvaluator");
async function executePromptAction(promptAction, params, context) {
if (promptAction.routing && promptAction.routing.length > 0) {
for (const route of promptAction.routing) {
if ((0, conditionEvaluator_1.evaluateCondition)(route.condition, { ...context.state, ...params })) {
if (typeof route.prompt === 'string') {
return context.executeAction(route.prompt);
}
else {
return executePromptAction(route.prompt, params, context);
}
}
}
// If no conditions are met, end execution
return null;
}
// Execute the current prompt if no routing or no conditions met
const messages = [
{ role: 'system', content: promptAction.content },
{ role: 'user', content: JSON.stringify(params) }
];
const options = {
...promptAction.options,
...promptAction.config
};
try {
const result = await context.aiProvider.chat(messages, options);
return result;
}
catch (error) {
context.logger.error('Error executing prompt action:', error);
throw error;
}
}
// Export a test function to verify routing
function testPromptRouting(promptAction, params, context) {
let result = 'Routing Test:\n';
if (promptAction.routing && promptAction.routing.length > 0) {
for (const route of promptAction.routing) {
const conditionMet = (0, conditionEvaluator_1.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;
}
class PromptAction {
constructor({ name, schema, systemContent, userContent, options, routing, description, priority, config }) {
this.name = name;
this.schema = schema;
this.content = `${systemContent}\n\n${userContent}. Format your response as a RAW JSON object with NO codeblocks. Use format:${JSON.stringify(schema.output)}`;
this.options = options;
this.routing = routing;
this.description = description || '';
this.priority = priority;
this.config = config;
}
async execute(params, context) {
return executePromptAction(this, params, context);
}
getPriority() {
return this.priority;
}
setPriority(priority) {
this.priority = priority;
}
getConfig() {
return this.config;
}
setConfig(config) {
this.config = config;
}
}
exports.PromptAction = PromptAction;