@memberjunction/ai-agents 2.67.0 → 2.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +164 -0
- package/dist/PayloadManager.d.ts +4 -0
- package/dist/PayloadManager.d.ts.map +1 -1
- package/dist/PayloadManager.js +73 -0
- package/dist/PayloadManager.js.map +1 -1
- package/dist/agent-types/base-agent-type.d.ts +1 -1
- package/dist/agent-types/base-agent-type.d.ts.map +1 -1
- package/dist/agent-types/loop-agent-response-type.d.ts +1 -1
- package/dist/agent-types/loop-agent-response-type.d.ts.map +1 -1
- package/dist/agent-types/loop-agent-type.d.ts +5 -1
- package/dist/agent-types/loop-agent-type.d.ts.map +1 -1
- package/dist/agent-types/loop-agent-type.js +45 -21
- package/dist/agent-types/loop-agent-type.js.map +1 -1
- package/dist/base-agent.d.ts +29 -2
- package/dist/base-agent.d.ts.map +1 -1
- package/dist/base-agent.js +460 -7
- package/dist/base-agent.js.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-agent-type.js","sourceRoot":"","sources":["../../src/agent-types/loop-agent-type.ts"],"names":[],"mappings":";;;;;;;;;;AAYA,
|
|
1
|
+
{"version":3,"file":"loop-agent-type.js","sourceRoot":"","sources":["../../src/agent-types/loop-agent-type.ts"],"names":[],"mappings":"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"}
|
package/dist/base-agent.d.ts
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import { AIAgentEntity, AIAgentTypeEntity, AIAgentRunStepEntityExtended, TemplateParamEntity, AIAgentEntityExtended } from '@memberjunction/core-entities';
|
|
1
|
+
import { AIAgentEntity, AIAgentTypeEntity, AIAgentRunEntityExtended, AIAgentRunStepEntityExtended, TemplateParamEntity, AIAgentEntityExtended } from '@memberjunction/core-entities';
|
|
2
2
|
import { UserInfo } from '@memberjunction/core';
|
|
3
3
|
import { ChatMessage } from '@memberjunction/ai';
|
|
4
4
|
import { AIPromptParams, AIPromptRunResult, ExecuteAgentParams, AgentConfiguration, ExecuteAgentResult, AgentAction, AgentSubAgentRequest, BaseAgentNextStep } from '@memberjunction/ai-core-plus';
|
|
5
5
|
import { ActionEntityExtended, ActionResult } from '@memberjunction/actions-base';
|
|
6
6
|
export declare class BaseAgent {
|
|
7
|
+
private static readonly MAX_VALIDATION_RETRIES;
|
|
7
8
|
private _promptRunner;
|
|
8
9
|
private _metadata;
|
|
10
|
+
private _executionCounts;
|
|
11
|
+
private _generalValidationRetryCount;
|
|
9
12
|
private _agentRun;
|
|
10
13
|
private _agentHierarchy;
|
|
11
14
|
private _depth;
|
|
12
15
|
private _allProgressSteps;
|
|
13
16
|
private _subAgentRuns;
|
|
14
17
|
private _payloadManager;
|
|
18
|
+
private _validationRetryCount;
|
|
19
|
+
get ValidationRetryCount(): number;
|
|
15
20
|
protected logStatus(message: string, verboseOnly?: boolean, params?: ExecuteAgentParams): void;
|
|
16
21
|
protected logError(error: Error | string, options?: {
|
|
17
22
|
category?: string;
|
|
@@ -32,7 +37,24 @@ export declare class BaseAgent {
|
|
|
32
37
|
protected loadAgentConfiguration(agent: AIAgentEntity): Promise<AgentConfiguration>;
|
|
33
38
|
protected preparePromptParams<P>(config: AgentConfiguration, payload: P, params: ExecuteAgentParams): Promise<AIPromptParams>;
|
|
34
39
|
protected executePrompt(promptParams: AIPromptParams): Promise<AIPromptRunResult>;
|
|
35
|
-
protected
|
|
40
|
+
protected determineNextStep<P>(params: ExecuteAgentParams, agentType: AIAgentTypeEntity, promptResult: AIPromptRunResult, currentPayload: P): Promise<BaseAgentNextStep<P>>;
|
|
41
|
+
protected validateNextStep<P>(params: ExecuteAgentParams, nextStep: BaseAgentNextStep<P>, currentPayload: P, agentRun: AIAgentRunEntityExtended, currentStep: AIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
42
|
+
protected validateSubAgentNextStep<P>(params: ExecuteAgentParams, nextStep: BaseAgentNextStep<P>, currentPayload: P, agentRun: AIAgentRunEntityExtended, currentStep: AIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
43
|
+
protected validateActionsNextStep<P>(params: ExecuteAgentParams, nextStep: BaseAgentNextStep<P>, currentPayload: P, agentRun: AIAgentRunEntityExtended, currentStep: AIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
44
|
+
protected validateSuccessNextStep<P>(params: ExecuteAgentParams, nextStep: BaseAgentNextStep<P>, currentPayload: P, agentRun: AIAgentRunEntityExtended, currentStep: AIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
45
|
+
protected handleFinalPayloadValidationFailure<P>(params: ExecuteAgentParams, nextStep: BaseAgentNextStep<P>, currentPayload: P, mode: string, errorMessages: string[], agentRun: AIAgentRunEntityExtended, currentStep: AIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
46
|
+
protected validateFailedNextStep<P>(params: ExecuteAgentParams, nextStep: BaseAgentNextStep<P>, currentPayload: P, agentRun: AIAgentRunEntityExtended, currentStep: AIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
47
|
+
protected validateRetryNextStep<P>(params: ExecuteAgentParams, nextStep: BaseAgentNextStep<P>, currentPayload: P, agentRun: AIAgentRunEntityExtended, currentStep: AIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
48
|
+
protected validateChatNextStep<P>(params: ExecuteAgentParams, nextStep: BaseAgentNextStep<P>, currentPayload: P, agentRun: AIAgentRunEntityExtended, currentStep: AIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
49
|
+
protected checkExecutionGuardrails<P>(params: ExecuteAgentParams, nextStep: BaseAgentNextStep<P>, currentPayload: P, agentRun: AIAgentRunEntityExtended, currentStep: AIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
50
|
+
protected hasExceededAgentRunGuardrails(params: ExecuteAgentParams, agentRun: AIAgentRunEntityExtended): Promise<{
|
|
51
|
+
exceeded: boolean;
|
|
52
|
+
type?: 'cost' | 'tokens' | 'iterations' | 'time';
|
|
53
|
+
limit?: number;
|
|
54
|
+
current?: number;
|
|
55
|
+
reason?: string;
|
|
56
|
+
}>;
|
|
57
|
+
protected processNextStep<P>(params: ExecuteAgentParams, agentType: AIAgentTypeEntity, promptResult: AIPromptRunResult, currentPayload: P, currentStep: AIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
36
58
|
protected createActionResultMessage(actions: AgentAction[], results: ActionResult[]): ChatMessage;
|
|
37
59
|
protected createSubAgentResultMessage(subAgent: AgentSubAgentRequest, result: ExecuteAgentResult): ChatMessage;
|
|
38
60
|
private gatherPromptTemplateData;
|
|
@@ -62,5 +84,10 @@ export declare class BaseAgent {
|
|
|
62
84
|
private createCancelledResult;
|
|
63
85
|
private finalizeAgentRun;
|
|
64
86
|
private calculateTokenStats;
|
|
87
|
+
protected getActionExecutionCount(agentRunId: string, actionId: string): Promise<number>;
|
|
88
|
+
protected getSubAgentExecutionCount(agentRunId: string, subAgentId: string): Promise<number>;
|
|
89
|
+
private incrementExecutionCount;
|
|
90
|
+
private getExecutionCount;
|
|
91
|
+
protected checkMinimumExecutionRequirements(agent: AIAgentEntity, agentRun: AIAgentRunEntityExtended): Promise<string[]>;
|
|
65
92
|
}
|
|
66
93
|
//# sourceMappingURL=base-agent.d.ts.map
|
package/dist/base-agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-agent.d.ts","sourceRoot":"","sources":["../src/base-agent.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"base-agent.d.ts","sourceRoot":"","sources":["../src/base-agent.ts"],"names":[],"mappings":"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"}
|
package/dist/base-agent.js
CHANGED
|
@@ -38,12 +38,18 @@ class BaseAgent {
|
|
|
38
38
|
constructor() {
|
|
39
39
|
this._promptRunner = new ai_prompts_1.AIPromptRunner();
|
|
40
40
|
this._metadata = new core_1.Metadata();
|
|
41
|
+
this._executionCounts = new Map();
|
|
42
|
+
this._generalValidationRetryCount = 0;
|
|
41
43
|
this._agentRun = null;
|
|
42
44
|
this._agentHierarchy = [];
|
|
43
45
|
this._depth = 0;
|
|
44
46
|
this._allProgressSteps = [];
|
|
45
47
|
this._subAgentRuns = [];
|
|
46
48
|
this._payloadManager = new PayloadManager_1.PayloadManager();
|
|
49
|
+
this._validationRetryCount = 0;
|
|
50
|
+
}
|
|
51
|
+
get ValidationRetryCount() {
|
|
52
|
+
return this._validationRetryCount;
|
|
47
53
|
}
|
|
48
54
|
logStatus(message, verboseOnly = false, params) {
|
|
49
55
|
if (verboseOnly) {
|
|
@@ -128,6 +134,8 @@ class BaseAgent {
|
|
|
128
134
|
message: this.formatHierarchicalMessage(`Initializing ${params.agent.Name} agent and preparing execution environment`)
|
|
129
135
|
});
|
|
130
136
|
await this.initializeAgentRun(wrappedParams);
|
|
137
|
+
this._validationRetryCount = 0;
|
|
138
|
+
this._generalValidationRetryCount = 0;
|
|
131
139
|
await this.initializeEngines(params.contextUser);
|
|
132
140
|
if (params.cancellationToken?.aborted) {
|
|
133
141
|
return await this.createCancelledResult('Cancelled during initialization', params.contextUser);
|
|
@@ -342,14 +350,397 @@ class BaseAgent {
|
|
|
342
350
|
async executePrompt(promptParams) {
|
|
343
351
|
return await this._promptRunner.ExecutePrompt(promptParams);
|
|
344
352
|
}
|
|
345
|
-
async
|
|
353
|
+
async determineNextStep(params, agentType, promptResult, currentPayload) {
|
|
346
354
|
this.logStatus(`🤔 Processing next step for agent '${params.agent.Name}' with agent type '${agentType.Name}'`, true, params);
|
|
347
355
|
const agentTypeInstance = await base_agent_type_1.BaseAgentType.GetAgentTypeInstance(agentType);
|
|
348
356
|
this.logStatus(`🎯 Agent type '${agentType.Name}' determining next step`, true, params);
|
|
349
|
-
const nextStep = await agentTypeInstance.DetermineNextStep(promptResult);
|
|
350
|
-
|
|
357
|
+
const nextStep = await agentTypeInstance.DetermineNextStep(promptResult, currentPayload);
|
|
358
|
+
return nextStep;
|
|
359
|
+
}
|
|
360
|
+
async validateNextStep(params, nextStep, currentPayload, agentRun, currentStep) {
|
|
361
|
+
switch (nextStep.step) {
|
|
362
|
+
case 'Sub-Agent':
|
|
363
|
+
return this.validateSubAgentNextStep(params, nextStep, currentPayload, agentRun, currentStep);
|
|
364
|
+
case 'Actions':
|
|
365
|
+
return this.validateActionsNextStep(params, nextStep, currentPayload, agentRun, currentStep);
|
|
366
|
+
case 'Success':
|
|
367
|
+
return this.validateSuccessNextStep(params, nextStep, currentPayload, agentRun, currentStep);
|
|
368
|
+
case 'Chat':
|
|
369
|
+
return this.validateChatNextStep(params, nextStep, currentPayload, agentRun, currentStep);
|
|
370
|
+
case 'Retry':
|
|
371
|
+
return this.validateRetryNextStep(params, nextStep, currentPayload, agentRun, currentStep);
|
|
372
|
+
case 'Failed':
|
|
373
|
+
return this.validateFailedNextStep(params, nextStep, currentPayload, agentRun, currentStep);
|
|
374
|
+
default:
|
|
375
|
+
this.logError(`Invalid next step '${nextStep.step}' for agent '${params.agent.Name}'`, {
|
|
376
|
+
agent: params.agent,
|
|
377
|
+
category: 'NextStepValidation'
|
|
378
|
+
});
|
|
379
|
+
return {
|
|
380
|
+
step: 'Failed',
|
|
381
|
+
terminate: true,
|
|
382
|
+
errorMessage: `Invalid next step '${nextStep.step}'`
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
async validateSubAgentNextStep(params, nextStep, currentPayload, agentRun, currentStep) {
|
|
387
|
+
const name = nextStep.subAgent?.name;
|
|
388
|
+
const curAgentSubAgents = aiengine_1.AIEngine.Instance.GetSubAgents(params.agent.ID, 'Active');
|
|
389
|
+
const subAgent = curAgentSubAgents.find(a => a.Name.trim().toLowerCase() === name?.trim().toLowerCase());
|
|
390
|
+
if (!name || !subAgent) {
|
|
391
|
+
this.logError(`Sub-agent '${name}' not found or not active for agent '${params.agent.Name}'`, {
|
|
392
|
+
agent: params.agent,
|
|
393
|
+
category: 'SubAgentExecution'
|
|
394
|
+
});
|
|
395
|
+
if (nextStep.step !== 'Retry') {
|
|
396
|
+
this._generalValidationRetryCount++;
|
|
397
|
+
}
|
|
398
|
+
return {
|
|
399
|
+
step: 'Retry',
|
|
400
|
+
terminate: false,
|
|
401
|
+
errorMessage: `Sub-agent '${name}' not found or not active`
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
if (subAgent.MaxExecutionsPerRun != null) {
|
|
405
|
+
const executionCount = await this.getSubAgentExecutionCount(agentRun.ID, subAgent.ID);
|
|
406
|
+
if (executionCount >= subAgent.MaxExecutionsPerRun) {
|
|
407
|
+
this.logError(`Sub-agent '${name}' has reached its maximum execution limit of ${subAgent.MaxExecutionsPerRun}`, {
|
|
408
|
+
agent: params.agent,
|
|
409
|
+
category: 'SubAgentExecution',
|
|
410
|
+
metadata: {
|
|
411
|
+
subAgentName: name,
|
|
412
|
+
executionCount,
|
|
413
|
+
maxExecutions: subAgent.MaxExecutionsPerRun
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
if (nextStep.step !== 'Retry') {
|
|
417
|
+
this._generalValidationRetryCount++;
|
|
418
|
+
}
|
|
419
|
+
return {
|
|
420
|
+
step: 'Retry',
|
|
421
|
+
terminate: false,
|
|
422
|
+
errorMessage: `Sub-agent '${name}' has reached its maximum execution limit of ${subAgent.MaxExecutionsPerRun}`
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return nextStep;
|
|
427
|
+
}
|
|
428
|
+
async validateActionsNextStep(params, nextStep, currentPayload, agentRun, currentStep) {
|
|
429
|
+
const curAgentActions = aiengine_1.AIEngine.Instance.AgentActions.filter(aa => aa.AgentID === params.agent.ID && aa.Status === 'Active');
|
|
430
|
+
const missingActions = nextStep.actions?.filter(action => !curAgentActions.some(aa => aa.Action.trim().toLowerCase() === action.name.trim().toLowerCase()));
|
|
431
|
+
if (missingActions && missingActions.length > 0) {
|
|
432
|
+
const missingActionNames = missingActions.map(a => a.name).join(', ');
|
|
433
|
+
this.logError(`Actions '${missingActionNames}' not found or not active for agent '${params.agent.Name}'`, {
|
|
434
|
+
agent: params.agent,
|
|
435
|
+
category: 'ActionExecution'
|
|
436
|
+
});
|
|
437
|
+
if (nextStep.step !== 'Retry') {
|
|
438
|
+
this._generalValidationRetryCount++;
|
|
439
|
+
}
|
|
440
|
+
return {
|
|
441
|
+
step: 'Retry',
|
|
442
|
+
terminate: false,
|
|
443
|
+
errorMessage: `Actions '${missingActionNames}' not found or not active`
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
if (nextStep.actions) {
|
|
447
|
+
const violatedActions = [];
|
|
448
|
+
for (const action of nextStep.actions) {
|
|
449
|
+
const agentAction = curAgentActions.find(aa => aa.Action.trim().toLowerCase() === action.name.trim().toLowerCase());
|
|
450
|
+
if (agentAction && agentAction.MaxExecutionsPerRun != null) {
|
|
451
|
+
const executionCount = await this.getActionExecutionCount(agentRun.ID, agentAction.ActionID);
|
|
452
|
+
if (executionCount >= agentAction.MaxExecutionsPerRun) {
|
|
453
|
+
violatedActions.push(`${action.name} (limit: ${agentAction.MaxExecutionsPerRun}, current: ${executionCount})`);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
if (violatedActions.length > 0) {
|
|
458
|
+
const violationMessage = `Actions have reached execution limits: ${violatedActions.join(', ')}`;
|
|
459
|
+
this.logError(violationMessage, {
|
|
460
|
+
agent: params.agent,
|
|
461
|
+
category: 'ActionExecution',
|
|
462
|
+
metadata: {
|
|
463
|
+
violatedActions
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
if (nextStep.step !== 'Retry') {
|
|
467
|
+
this._generalValidationRetryCount++;
|
|
468
|
+
}
|
|
469
|
+
return {
|
|
470
|
+
step: 'Retry',
|
|
471
|
+
terminate: false,
|
|
472
|
+
errorMessage: violationMessage
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
return nextStep;
|
|
477
|
+
}
|
|
478
|
+
async validateSuccessNextStep(params, nextStep, currentPayload, agentRun, currentStep) {
|
|
479
|
+
const minViolations = await this.checkMinimumExecutionRequirements(params.agent, agentRun);
|
|
480
|
+
if (minViolations.length > 0) {
|
|
481
|
+
const violationMessage = `Minimum execution requirements not met:\n${minViolations.join('\n')}`;
|
|
482
|
+
this.logError(violationMessage, {
|
|
483
|
+
agent: params.agent,
|
|
484
|
+
category: 'MinimumExecutionValidation'
|
|
485
|
+
});
|
|
486
|
+
if (nextStep.step !== 'Retry') {
|
|
487
|
+
this._generalValidationRetryCount++;
|
|
488
|
+
}
|
|
489
|
+
return {
|
|
490
|
+
step: 'Retry',
|
|
491
|
+
terminate: false,
|
|
492
|
+
errorMessage: violationMessage
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
const agent = params.agent;
|
|
496
|
+
if (!agent.FinalPayloadValidation || !currentPayload) {
|
|
497
|
+
return nextStep;
|
|
498
|
+
}
|
|
499
|
+
try {
|
|
500
|
+
let validationSchema;
|
|
501
|
+
try {
|
|
502
|
+
validationSchema = JSON.parse(agent.FinalPayloadValidation);
|
|
503
|
+
}
|
|
504
|
+
catch (parseError) {
|
|
505
|
+
this.logError(`Invalid FinalPayloadValidation JSON for agent ${agent.Name}: ${parseError.message}`, {
|
|
506
|
+
category: 'PayloadValidation',
|
|
507
|
+
metadata: {
|
|
508
|
+
agentName: agent.Name,
|
|
509
|
+
agentId: agent.ID,
|
|
510
|
+
validationSchema: agent.FinalPayloadValidation
|
|
511
|
+
}
|
|
512
|
+
});
|
|
513
|
+
return nextStep;
|
|
514
|
+
}
|
|
515
|
+
let payloadToValidate = currentPayload;
|
|
516
|
+
if (agent.PayloadScope) {
|
|
517
|
+
payloadToValidate = this._payloadManager.applyPayloadScope(currentPayload, agent.PayloadScope);
|
|
518
|
+
if (payloadToValidate === null) {
|
|
519
|
+
const errorMessage = `PayloadScope '${agent.PayloadScope}' not found in payload`;
|
|
520
|
+
return this.handleFinalPayloadValidationFailure(params, nextStep, currentPayload, agent.FinalPayloadValidationMode || 'Retry', [errorMessage], agentRun, currentStep);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
const jsonValidator = new global_1.JSONValidator();
|
|
524
|
+
const validationResult = jsonValidator.validate(payloadToValidate, validationSchema);
|
|
525
|
+
if (!validationResult.Success) {
|
|
526
|
+
const mode = agent.FinalPayloadValidationMode || 'Retry';
|
|
527
|
+
const errorMessages = validationResult.Errors.map(e => e.Message);
|
|
528
|
+
this.logStatus(`⚠️ Final payload validation failed for agent ${agent.Name} (mode: ${mode}):`, true, params);
|
|
529
|
+
errorMessages.forEach((error, index) => {
|
|
530
|
+
this.logStatus(` ${index + 1}. ${error}`, true, params);
|
|
531
|
+
});
|
|
532
|
+
return this.handleFinalPayloadValidationFailure(params, nextStep, currentPayload, mode, errorMessages, agentRun, currentStep);
|
|
533
|
+
}
|
|
534
|
+
this.logStatus(`✅ Final payload validation passed for agent ${agent.Name}`, true, params);
|
|
535
|
+
try {
|
|
536
|
+
currentStep.FinalPayloadValidationResult = 'Pass';
|
|
537
|
+
currentStep.FinalPayloadValidationMessages = null;
|
|
538
|
+
await currentStep.Save();
|
|
539
|
+
}
|
|
540
|
+
catch (error) {
|
|
541
|
+
this.logError(`Failed to save validation success result: ${error.message}`, {
|
|
542
|
+
category: 'PayloadValidation',
|
|
543
|
+
metadata: { stepId: currentStep.ID }
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
return nextStep;
|
|
547
|
+
}
|
|
548
|
+
catch (error) {
|
|
549
|
+
this.logError(`Unexpected error during final payload validation: ${error.message}`, {
|
|
550
|
+
category: 'PayloadValidation',
|
|
551
|
+
metadata: {
|
|
552
|
+
agentName: agent.Name,
|
|
553
|
+
agentId: agent.ID,
|
|
554
|
+
error: error.message
|
|
555
|
+
}
|
|
556
|
+
});
|
|
557
|
+
return nextStep;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
async handleFinalPayloadValidationFailure(params, nextStep, currentPayload, mode, errorMessages, agentRun, currentStep) {
|
|
561
|
+
const validationFeedback = `Final payload validation failed:\n${errorMessages.map((e, i) => `${i + 1}. ${e}`).join('\n')}`;
|
|
562
|
+
try {
|
|
563
|
+
currentStep.FinalPayloadValidationMessages = errorMessages.join('; ');
|
|
564
|
+
switch (mode) {
|
|
565
|
+
case 'Retry':
|
|
566
|
+
this._validationRetryCount++;
|
|
567
|
+
const maxRetries = params.agent.FinalPayloadValidationMaxRetries || 3;
|
|
568
|
+
if (this._validationRetryCount >= maxRetries) {
|
|
569
|
+
this.logStatus(`❌ Max validation retries (${maxRetries}) exceeded, forcing failure`, false, params);
|
|
570
|
+
currentStep.FinalPayloadValidationResult = 'Fail';
|
|
571
|
+
await currentStep.Save();
|
|
572
|
+
return {
|
|
573
|
+
...nextStep,
|
|
574
|
+
step: 'Failed',
|
|
575
|
+
message: `${validationFeedback}\n\nMax validation retries (${maxRetries}) exceeded.`,
|
|
576
|
+
terminate: true
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
currentStep.FinalPayloadValidationResult = 'Retry';
|
|
580
|
+
await currentStep.Save();
|
|
581
|
+
this.logStatus(`🔄 Validation retry ${this._validationRetryCount}/${maxRetries}`, true, params);
|
|
582
|
+
return {
|
|
583
|
+
...nextStep,
|
|
584
|
+
step: 'Retry',
|
|
585
|
+
message: `${validationFeedback}\n\nRetry attempt ${this._validationRetryCount} of ${maxRetries}`,
|
|
586
|
+
terminate: false
|
|
587
|
+
};
|
|
588
|
+
case 'Fail':
|
|
589
|
+
currentStep.FinalPayloadValidationResult = 'Fail';
|
|
590
|
+
await currentStep.Save();
|
|
591
|
+
return {
|
|
592
|
+
...nextStep,
|
|
593
|
+
step: 'Failed',
|
|
594
|
+
message: validationFeedback,
|
|
595
|
+
terminate: true
|
|
596
|
+
};
|
|
597
|
+
case 'Warn':
|
|
598
|
+
this.logStatus(`⚠️ WARNING: ${validationFeedback}`, false, params);
|
|
599
|
+
currentStep.FinalPayloadValidationResult = 'Warn';
|
|
600
|
+
await currentStep.Save();
|
|
601
|
+
return nextStep;
|
|
602
|
+
default:
|
|
603
|
+
this._validationRetryCount++;
|
|
604
|
+
currentStep.FinalPayloadValidationResult = 'Retry';
|
|
605
|
+
await currentStep.Save();
|
|
606
|
+
return {
|
|
607
|
+
...nextStep,
|
|
608
|
+
step: 'Retry',
|
|
609
|
+
message: validationFeedback,
|
|
610
|
+
terminate: false
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
catch (error) {
|
|
615
|
+
this.logError(`Failed to save validation results: ${error.message}`, {
|
|
616
|
+
category: 'PayloadValidation',
|
|
617
|
+
metadata: { stepId: currentStep.ID }
|
|
618
|
+
});
|
|
619
|
+
return mode === 'Warn' ? nextStep : {
|
|
620
|
+
...nextStep,
|
|
621
|
+
step: mode === 'Fail' ? 'Failed' : 'Retry',
|
|
622
|
+
message: validationFeedback,
|
|
623
|
+
terminate: mode === 'Fail'
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
async validateFailedNextStep(params, nextStep, currentPayload, agentRun, currentStep) {
|
|
351
628
|
return nextStep;
|
|
352
629
|
}
|
|
630
|
+
async validateRetryNextStep(params, nextStep, currentPayload, agentRun, currentStep) {
|
|
631
|
+
return nextStep;
|
|
632
|
+
}
|
|
633
|
+
async validateChatNextStep(params, nextStep, currentPayload, agentRun, currentStep) {
|
|
634
|
+
return nextStep;
|
|
635
|
+
}
|
|
636
|
+
async checkExecutionGuardrails(params, nextStep, currentPayload, agentRun, currentStep) {
|
|
637
|
+
if (nextStep.step === 'Success' || nextStep.step === 'Failed' || nextStep.step === 'Chat') {
|
|
638
|
+
return nextStep;
|
|
639
|
+
}
|
|
640
|
+
const guardrailResult = await this.hasExceededAgentRunGuardrails(params, agentRun);
|
|
641
|
+
if (guardrailResult.exceeded) {
|
|
642
|
+
this.logStatus(`⛔ Execution guardrail exceeded: ${guardrailResult.reason}`, false, params);
|
|
643
|
+
try {
|
|
644
|
+
const outputData = currentStep.OutputData ? JSON.parse(currentStep.OutputData) : {};
|
|
645
|
+
currentStep.OutputData = JSON.stringify({
|
|
646
|
+
...outputData,
|
|
647
|
+
guardrailExceeded: {
|
|
648
|
+
type: guardrailResult.type,
|
|
649
|
+
limit: guardrailResult.limit,
|
|
650
|
+
current: guardrailResult.current,
|
|
651
|
+
reason: guardrailResult.reason,
|
|
652
|
+
timestamp: new Date().toISOString()
|
|
653
|
+
}
|
|
654
|
+
});
|
|
655
|
+
await currentStep.Save();
|
|
656
|
+
}
|
|
657
|
+
catch (error) {
|
|
658
|
+
this.logError(`Failed to save guardrail violation to step: ${error.message}`, {
|
|
659
|
+
category: 'Guardrails',
|
|
660
|
+
metadata: { stepId: currentStep.ID }
|
|
661
|
+
});
|
|
662
|
+
}
|
|
663
|
+
return {
|
|
664
|
+
...nextStep,
|
|
665
|
+
step: 'Failed',
|
|
666
|
+
terminate: true,
|
|
667
|
+
message: guardrailResult.reason,
|
|
668
|
+
errorMessage: guardrailResult.reason
|
|
669
|
+
};
|
|
670
|
+
}
|
|
671
|
+
return nextStep;
|
|
672
|
+
}
|
|
673
|
+
async hasExceededAgentRunGuardrails(params, agentRun) {
|
|
674
|
+
const agent = params.agent;
|
|
675
|
+
if (agent.MaxCostPerRun && agentRun.TotalCost) {
|
|
676
|
+
if (agentRun.TotalCost >= agent.MaxCostPerRun) {
|
|
677
|
+
return {
|
|
678
|
+
exceeded: true,
|
|
679
|
+
type: 'cost',
|
|
680
|
+
limit: agent.MaxCostPerRun,
|
|
681
|
+
current: agentRun.TotalCost,
|
|
682
|
+
reason: `Maximum cost limit of $${agent.MaxCostPerRun} exceeded. Current cost: $${agentRun.TotalCost.toFixed(4)}`
|
|
683
|
+
};
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
if (agent.MaxTokensPerRun && agentRun.TotalTokensUsed) {
|
|
687
|
+
if (agentRun.TotalTokensUsed >= agent.MaxTokensPerRun) {
|
|
688
|
+
return {
|
|
689
|
+
exceeded: true,
|
|
690
|
+
type: 'tokens',
|
|
691
|
+
limit: agent.MaxTokensPerRun,
|
|
692
|
+
current: agentRun.TotalTokensUsed,
|
|
693
|
+
reason: `Maximum token limit of ${agent.MaxTokensPerRun} exceeded. Current tokens: ${agentRun.TotalTokensUsed}`
|
|
694
|
+
};
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
if (agent.MaxIterationsPerRun && agentRun.TotalPromptIterations) {
|
|
698
|
+
if (agentRun.TotalPromptIterations >= agent.MaxIterationsPerRun) {
|
|
699
|
+
return {
|
|
700
|
+
exceeded: true,
|
|
701
|
+
type: 'iterations',
|
|
702
|
+
limit: agent.MaxIterationsPerRun,
|
|
703
|
+
current: agentRun.TotalPromptIterations,
|
|
704
|
+
reason: `Maximum iteration limit of ${agent.MaxIterationsPerRun} exceeded. Current iterations: ${agentRun.TotalPromptIterations}`
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
if (agent.MaxTimePerRun && agentRun.StartedAt) {
|
|
709
|
+
const elapsedSeconds = Math.floor((Date.now() - new Date(agentRun.StartedAt).getTime()) / 1000);
|
|
710
|
+
if (elapsedSeconds >= agent.MaxTimePerRun) {
|
|
711
|
+
return {
|
|
712
|
+
exceeded: true,
|
|
713
|
+
type: 'time',
|
|
714
|
+
limit: agent.MaxTimePerRun,
|
|
715
|
+
current: elapsedSeconds,
|
|
716
|
+
reason: `Maximum time limit of ${agent.MaxTimePerRun} seconds exceeded. Elapsed time: ${elapsedSeconds} seconds`
|
|
717
|
+
};
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
if (this._generalValidationRetryCount >= BaseAgent.MAX_VALIDATION_RETRIES) {
|
|
721
|
+
return {
|
|
722
|
+
exceeded: true,
|
|
723
|
+
type: 'iterations',
|
|
724
|
+
limit: BaseAgent.MAX_VALIDATION_RETRIES,
|
|
725
|
+
current: this._generalValidationRetryCount,
|
|
726
|
+
reason: `Maximum validation retries of ${BaseAgent.MAX_VALIDATION_RETRIES} exceeded. The agent is unable to produce valid output after ${this._generalValidationRetryCount} validation failures.`
|
|
727
|
+
};
|
|
728
|
+
}
|
|
729
|
+
return { exceeded: false };
|
|
730
|
+
}
|
|
731
|
+
async processNextStep(params, agentType, promptResult, currentPayload, currentStep) {
|
|
732
|
+
const nextStep = await this.determineNextStep(params, agentType, promptResult, currentPayload);
|
|
733
|
+
const validatedNextStep = await this.validateNextStep(params, nextStep, currentPayload, this._agentRun, currentStep);
|
|
734
|
+
const guardrailCheckedStep = await this.checkExecutionGuardrails(params, validatedNextStep, currentPayload, this._agentRun, currentStep);
|
|
735
|
+
this.logStatus(`📌 Next step determined: ${guardrailCheckedStep.step}${guardrailCheckedStep.terminate ? ' (terminating)' : ''}`, true, params);
|
|
736
|
+
if (guardrailCheckedStep.step === 'Retry' && (guardrailCheckedStep.message || guardrailCheckedStep.errorMessage || guardrailCheckedStep.retryInstructions)) {
|
|
737
|
+
params.conversationMessages.push({
|
|
738
|
+
role: 'user',
|
|
739
|
+
content: `Retrying due to: ${guardrailCheckedStep.retryInstructions || guardrailCheckedStep.message || guardrailCheckedStep.errorMessage}`
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
return guardrailCheckedStep;
|
|
743
|
+
}
|
|
353
744
|
createActionResultMessage(actions, results) {
|
|
354
745
|
const resultSummary = actions.map((action, index) => {
|
|
355
746
|
const result = results[index];
|
|
@@ -837,6 +1228,9 @@ class BaseAgent {
|
|
|
837
1228
|
stepEntity.TargetLogID = promptResult.promptRun.ID;
|
|
838
1229
|
stepEntity.PromptRun = promptResult.promptRun;
|
|
839
1230
|
}
|
|
1231
|
+
if (this._agentRun) {
|
|
1232
|
+
this._agentRun.TotalPromptIterations = (this._agentRun.TotalPromptIterations || 0) + 1;
|
|
1233
|
+
}
|
|
840
1234
|
if (params.cancellationToken?.aborted) {
|
|
841
1235
|
await this.finalizeStepEntity(stepEntity, false, 'Cancelled during prompt execution');
|
|
842
1236
|
const cancelledResult = await this.createCancelledResult('Cancelled during prompt execution', params.contextUser);
|
|
@@ -854,7 +1248,7 @@ class BaseAgent {
|
|
|
854
1248
|
message: this.formatHierarchicalMessage('Analyzing response and determining next steps'),
|
|
855
1249
|
displayMode: 'both'
|
|
856
1250
|
});
|
|
857
|
-
const nextStep = await this.processNextStep(params, config.agentType, promptResult);
|
|
1251
|
+
const nextStep = await this.processNextStep(params, config.agentType, promptResult, payload, stepEntity);
|
|
858
1252
|
let finalPayload = payload;
|
|
859
1253
|
let currentStepPayloadChangeResult = undefined;
|
|
860
1254
|
if (nextStep.payloadChangeRequest) {
|
|
@@ -947,6 +1341,7 @@ class BaseAgent {
|
|
|
947
1341
|
throw new Error(`Sub-agent '${subAgentRequest.name}' not found`);
|
|
948
1342
|
}
|
|
949
1343
|
const stepEntity = await this.createStepEntity('Sub-Agent', `Execute Sub-Agent: ${subAgentRequest.name}`, params.contextUser, subAgentEntity.ID, inputData);
|
|
1344
|
+
this.incrementExecutionCount(subAgentEntity.ID);
|
|
950
1345
|
try {
|
|
951
1346
|
let downstreamPaths = ['*'];
|
|
952
1347
|
let upstreamPaths = ['*'];
|
|
@@ -970,10 +1365,31 @@ class BaseAgent {
|
|
|
970
1365
|
}
|
|
971
1366
|
});
|
|
972
1367
|
}
|
|
973
|
-
|
|
1368
|
+
let downstreamPayload = this._payloadManager.extractDownstreamPayload(subAgentRequest.name, previousDecision.newPayload, downstreamPaths);
|
|
1369
|
+
let scopedPayload = downstreamPayload;
|
|
1370
|
+
if (subAgentEntity.PayloadScope) {
|
|
1371
|
+
scopedPayload = this._payloadManager.applyPayloadScope(downstreamPayload, subAgentEntity.PayloadScope);
|
|
1372
|
+
if (scopedPayload === null) {
|
|
1373
|
+
const errorMessage = `Critical: Failed to extract payload scope '${subAgentEntity.PayloadScope}' for sub-agent '${subAgentRequest.name}'. The specified path does not exist in the payload.`;
|
|
1374
|
+
this.logError(errorMessage, {
|
|
1375
|
+
category: 'SubAgentExecution',
|
|
1376
|
+
metadata: {
|
|
1377
|
+
agentName: params.agent.Name,
|
|
1378
|
+
subAgentName: subAgentRequest.name,
|
|
1379
|
+
payloadScope: subAgentEntity.PayloadScope,
|
|
1380
|
+
availableKeys: Object.keys(downstreamPayload || {})
|
|
1381
|
+
}
|
|
1382
|
+
});
|
|
1383
|
+
throw new Error(errorMessage);
|
|
1384
|
+
}
|
|
1385
|
+
}
|
|
974
1386
|
stepEntity.PayloadAtStart = JSON.stringify(previousDecision.newPayload);
|
|
975
|
-
const subAgentResult = await this.ExecuteSubAgent(params, subAgentRequest, subAgentEntity, stepEntity,
|
|
976
|
-
|
|
1387
|
+
const subAgentResult = await this.ExecuteSubAgent(params, subAgentRequest, subAgentEntity, stepEntity, scopedPayload);
|
|
1388
|
+
let resultPayloadForMerge = subAgentResult.payload;
|
|
1389
|
+
if (subAgentEntity.PayloadScope) {
|
|
1390
|
+
resultPayloadForMerge = this._payloadManager.reversePayloadScope(subAgentResult.payload, subAgentEntity.PayloadScope);
|
|
1391
|
+
}
|
|
1392
|
+
const mergedPayload = this._payloadManager.mergeUpstreamPayload(subAgentRequest.name, previousDecision.newPayload, resultPayloadForMerge, upstreamPaths);
|
|
977
1393
|
const mergeChangeRequest = {
|
|
978
1394
|
newElements: {},
|
|
979
1395
|
updateElements: {},
|
|
@@ -1140,6 +1556,7 @@ class BaseAgent {
|
|
|
1140
1556
|
}
|
|
1141
1557
|
const stepEntity = await this.createStepEntity('Actions', `Execute Action: ${aa.name}`, params.contextUser, actionEntity.ID);
|
|
1142
1558
|
stepEntity.StepNumber = baseStepNumber + numActionsProcessed++;
|
|
1559
|
+
this.incrementExecutionCount(actionEntity.ID);
|
|
1143
1560
|
let actionResult;
|
|
1144
1561
|
try {
|
|
1145
1562
|
actionResult = await this.ExecuteSingleAction(params, aa, actionEntity, params.contextUser);
|
|
@@ -1301,6 +1718,42 @@ class BaseAgent {
|
|
|
1301
1718
|
}
|
|
1302
1719
|
return { totalTokens, promptTokens, completionTokens, totalCost };
|
|
1303
1720
|
}
|
|
1721
|
+
async getActionExecutionCount(agentRunId, actionId) {
|
|
1722
|
+
return this.getExecutionCount(actionId);
|
|
1723
|
+
}
|
|
1724
|
+
async getSubAgentExecutionCount(agentRunId, subAgentId) {
|
|
1725
|
+
return this.getExecutionCount(subAgentId);
|
|
1726
|
+
}
|
|
1727
|
+
incrementExecutionCount(itemId) {
|
|
1728
|
+
const currentCount = this._executionCounts.get(itemId) || 0;
|
|
1729
|
+
this._executionCounts.set(itemId, currentCount + 1);
|
|
1730
|
+
}
|
|
1731
|
+
getExecutionCount(itemId) {
|
|
1732
|
+
return this._executionCounts.get(itemId) || 0;
|
|
1733
|
+
}
|
|
1734
|
+
async checkMinimumExecutionRequirements(agent, agentRun) {
|
|
1735
|
+
const violations = [];
|
|
1736
|
+
const agentActions = aiengine_1.AIEngine.Instance.AgentActions.filter(aa => aa.AgentID === agent.ID &&
|
|
1737
|
+
aa.Status === 'Active' &&
|
|
1738
|
+
aa.MinExecutionsPerRun != null &&
|
|
1739
|
+
aa.MinExecutionsPerRun > 0);
|
|
1740
|
+
for (const agentAction of agentActions) {
|
|
1741
|
+
const executionCount = await this.getActionExecutionCount(agentRun.ID, agentAction.ActionID);
|
|
1742
|
+
if (executionCount < agentAction.MinExecutionsPerRun) {
|
|
1743
|
+
violations.push(`Action '${agentAction.Action}' requires ${agentAction.MinExecutionsPerRun} execution(s) but was executed ${executionCount} time(s)`);
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1746
|
+
const subAgents = aiengine_1.AIEngine.Instance.GetSubAgents(agent.ID, "Active").filter(a => a.MinExecutionsPerRun != null &&
|
|
1747
|
+
a.MinExecutionsPerRun > 0);
|
|
1748
|
+
for (const subAgent of subAgents) {
|
|
1749
|
+
const executionCount = await this.getSubAgentExecutionCount(agentRun.ID, subAgent.ID);
|
|
1750
|
+
if (executionCount < subAgent.MinExecutionsPerRun) {
|
|
1751
|
+
violations.push(`Sub-agent '${subAgent.Name}' requires ${subAgent.MinExecutionsPerRun} execution(s) but was executed ${executionCount} time(s)`);
|
|
1752
|
+
}
|
|
1753
|
+
}
|
|
1754
|
+
return violations;
|
|
1755
|
+
}
|
|
1304
1756
|
}
|
|
1305
1757
|
exports.BaseAgent = BaseAgent;
|
|
1758
|
+
BaseAgent.MAX_VALIDATION_RETRIES = 10;
|
|
1306
1759
|
//# sourceMappingURL=base-agent.js.map
|