@memberjunction/ng-ai-test-harness 5.30.1 → 5.32.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.
@@ -1,4 +1,5 @@
1
1
  import { EventEmitter, OnInit, ChangeDetectorRef, AfterViewInit } from '@angular/core';
2
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
2
3
  import { MJAIAgentEntityExtended, MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';
3
4
  import { AITestHarnessComponent } from './ai-test-harness.component';
4
5
  import * as i0 from "@angular/core";
@@ -60,7 +61,7 @@ export interface AITestHarnessDialogData {
60
61
  * });
61
62
  * ```
62
63
  */
63
- export declare class AITestHarnessDialogComponent implements OnInit, AfterViewInit {
64
+ export declare class AITestHarnessDialogComponent extends BaseAngularComponent implements OnInit, AfterViewInit {
64
65
  private cdr;
65
66
  /** Reference to the embedded test harness component */
66
67
  testHarness: AITestHarnessComponent;
@@ -1 +1 @@
1
- {"version":3,"file":"ai-test-harness-dialog.component.d.ts","sourceRoot":"","sources":["../../src/lib/ai-test-harness-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAa,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAA+B,MAAM,8BAA8B,CAAC;AAE9H,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;;AAGrE;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,yDAAyD;IACzD,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,sDAAsD;IACtD,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAyEa,4BAA6B,YAAW,MAAM,EAAE,aAAa;IAsB1D,OAAO,CAAC,GAAG;IArBvB,uDAAuD;IACV,WAAW,EAAG,sBAAsB,CAAC;IAElF,6CAA6C;IAC7C,KAAK,EAAE,uBAAuB,GAAG,IAAI,CAAQ;IAE7C,8CAA8C;IAC9C,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IAE/C,yDAAyD;IACzD,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAW;IAEnC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAqB;IAElC,wDAAwD;IAC/C,IAAI,EAAE,uBAAuB,CAAM;IAE5C,qDAAqD;IAC3C,WAAW,qBAA4B;gBAE7B,GAAG,EAAE,iBAAiB;IAE1C;;;OAGG;IACG,QAAQ;IA2Cd;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAuEtC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;YACW,iBAAiB;IAwG/B;;;OAGG;IACH,KAAK,IAAI,IAAI;yCA9QJ,4BAA4B;2CAA5B,4BAA4B;CAiRxC"}
1
+ {"version":3,"file":"ai-test-harness-dialog.component.d.ts","sourceRoot":"","sources":["../../src/lib/ai-test-harness-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAa,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAA+B,MAAM,8BAA8B,CAAC;AAE9H,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;;AAGrE;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,yDAAyD;IACzD,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,sDAAsD;IACtD,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAyEa,4BAA6B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,aAAa;IAsBvF,OAAO,CAAC,GAAG;IArBvB,uDAAuD;IACV,WAAW,EAAG,sBAAsB,CAAC;IAElF,6CAA6C;IAC7C,KAAK,EAAE,uBAAuB,GAAG,IAAI,CAAQ;IAE7C,8CAA8C;IAC9C,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IAE/C,yDAAyD;IACzD,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAW;IAEnC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAqB;IAElC,wDAAwD;IAC/C,IAAI,EAAE,uBAAuB,CAAM;IAE5C,qDAAqD;IAC3C,WAAW,qBAA4B;gBAE7B,GAAG,EAAE,iBAAiB;IAG1C;;;OAGG;IACG,QAAQ;IA2Cd;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAuEtC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;YACW,iBAAiB;IAwG/B;;;OAGG;IACH,KAAK,IAAI,IAAI;yCA/QJ,4BAA4B;2CAA5B,4BAA4B;CAkRxC"}
@@ -1,5 +1,5 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
- import { Metadata } from '@memberjunction/core';
2
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "./ai-test-harness.component";
5
5
  const _c0 = ["testHarness"];
@@ -24,8 +24,9 @@ const _c0 = ["testHarness"];
24
24
  * });
25
25
  * ```
26
26
  */
27
- export class AITestHarnessDialogComponent {
27
+ export class AITestHarnessDialogComponent extends BaseAngularComponent {
28
28
  constructor(cdr) {
29
+ super();
29
30
  this.cdr = cdr;
30
31
  /** The loaded AI agent entity for testing */
31
32
  this.agent = null;
@@ -52,7 +53,7 @@ export class AITestHarnessDialogComponent {
52
53
  if (this.data.title) {
53
54
  this.title = this.data.title;
54
55
  }
55
- const md = new Metadata();
56
+ const md = this.ProviderToUse;
56
57
  // Load entity based on mode
57
58
  if (this.mode === 'agent' || (!this.data.promptId && !this.data.prompt)) {
58
59
  // Agent mode
@@ -175,7 +176,7 @@ export class AITestHarnessDialogComponent {
175
176
  */
176
177
  async loadFromPromptRun(promptRunId) {
177
178
  console.log('🔄 Loading from prompt run:', promptRunId);
178
- const md = new Metadata();
179
+ const md = this.ProviderToUse;
179
180
  const promptRun = await md.GetEntityObject('MJ: AI Prompt Runs');
180
181
  if (await promptRun.Load(promptRunId)) {
181
182
  console.log('✅ Prompt run loaded successfully');
@@ -278,7 +279,7 @@ export class AITestHarnessDialogComponent {
278
279
  } if (rf & 2) {
279
280
  let _t;
280
281
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.testHarness = _t.first);
281
- } }, inputs: { data: "data" }, outputs: { closeDialog: "closeDialog" }, standalone: false, decls: 9, vars: 4, consts: [["testHarness", ""], [1, "test-harness-dialog"], [1, "dialog-header"], [1, "close-button", 3, "click"], [1, "fa-solid", "fa-times"], [1, "dialog-content"], [3, "mode", "entity", "isVisible"]], template: function AITestHarnessDialogComponent_Template(rf, ctx) { if (rf & 1) {
282
+ } }, inputs: { data: "data" }, outputs: { closeDialog: "closeDialog" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 9, vars: 4, consts: [["testHarness", ""], [1, "test-harness-dialog"], [1, "dialog-header"], [1, "close-button", 3, "click"], [1, "fa-solid", "fa-times"], [1, "dialog-content"], [3, "mode", "entity", "isVisible"]], template: function AITestHarnessDialogComponent_Template(rf, ctx) { if (rf & 1) {
282
283
  const _r1 = i0.ɵɵgetCurrentView();
283
284
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "h2");
284
285
  i0.ɵɵtext(3);
@@ -325,5 +326,5 @@ export class AITestHarnessDialogComponent {
325
326
  }], closeDialog: [{
326
327
  type: Output
327
328
  }] }); })();
328
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AITestHarnessDialogComponent, { className: "AITestHarnessDialogComponent", filePath: "lib/ai-test-harness-dialog.component.ts", lineNumber: 139 }); })();
329
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AITestHarnessDialogComponent, { className: "AITestHarnessDialogComponent", filePath: "lib/ai-test-harness-dialog.component.ts", lineNumber: 140 }); })();
329
330
  //# sourceMappingURL=ai-test-harness-dialog.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-test-harness-dialog.component.js","sourceRoot":"","sources":["../../src/lib/ai-test-harness-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ChangeDetectorRef, AfterViewInit } from '@angular/core';\nimport { MJAIAgentEntityExtended, MJAIPromptEntityExtended, MJAIPromptRunEntityExtended } from '@memberjunction/ai-core-plus';\nimport { Metadata } from '@memberjunction/core';\nimport { AITestHarnessComponent } from './ai-test-harness.component';\nimport { ChatMessage } from '@memberjunction/ai';\n\n/**\n * Configuration data interface for the AI Test Harness Dialog.\n * Provides all necessary options for initializing the dialog with appropriate\n * agent/prompt data, dimensions, and initial variable configurations.\n */\nexport interface AITestHarnessDialogData {\n /** ID of the AI agent to load (alternative to providing agent entity) */\n agentId?: string;\n /** Pre-loaded AI agent entity (alternative to providing agentId) */\n agent?: MJAIAgentEntityExtended;\n /** ID of the AI prompt to load (alternative to providing prompt entity) */\n promptId?: string;\n /** Pre-loaded AI prompt entity (alternative to providing promptId) */\n prompt?: MJAIPromptEntityExtended;\n /** Custom dialog title (defaults to agent/prompt name) */\n title?: string;\n /** Dialog width in CSS units or viewport percentage */\n width?: string | number;\n /** Dialog height in CSS units or viewport percentage */\n height?: string | number;\n /** Initial data context variables for agent execution */\n initialDataContext?: Record<string, any>;\n /** Initial template data variables for prompt rendering */\n initialTemplateData?: Record<string, any>;\n /** Initial template variables for prompt execution */\n initialTemplateVariables?: Record<string, any>;\n /** Pre-selected AI model ID for prompt execution */\n selectedModelId?: string;\n /** Pre-selected AI vendor ID for prompt execution */\n selectedVendorId?: string;\n /** Pre-selected AI configuration ID for prompt execution */\n selectedConfigurationId?: string;\n /** Mode of operation - 'agent' or 'prompt' */\n mode?: 'agent' | 'prompt';\n /** ID of an existing prompt run to preload data from */\n promptRunId?: string;\n}\n\n/**\n * Dialog wrapper component for the AI Agent Test Harness.\n * Provides a modal dialog interface with proper sizing, header, and close functionality.\n * Automatically loads agent data and initializes the test harness with provided configuration.\n * \n * ## Features:\n * - **Automatic Agent Loading**: Loads agent by ID or uses provided entity\n * - **Configurable Dimensions**: Supports custom dialog sizing\n * - **Initial Data Setup**: Pre-populates data context and template variables\n * - **Clean Dialog Interface**: Professional header with close button\n * - **Responsive Layout**: Adapts to content and screen size\n * \n * ## Usage:\n * This component is typically opened through the `TestHarnessDialogService` rather than directly:\n * ```typescript\n * const dialogRef = this.testHarnessService.openAgentTestHarness({\n * agentId: 'agent-123',\n * initialDataContext: { userId: 'user-456' }\n * });\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-ai-test-harness-dialog',\n template: `\n <div class=\"test-harness-dialog\">\n <div class=\"dialog-header\">\n <h2>{{ title }}</h2>\n <button class=\"close-button\" (click)=\"close()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"dialog-content\">\n <mj-ai-test-harness \n #testHarness\n [mode]=\"mode\"\n [entity]=\"mode === 'agent' ? agent : prompt\"\n [isVisible]=\"true\">\n </mj-ai-test-harness>\n </div>\n </div>\n `,\n styles: [`\n .test-harness-dialog {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n }\n\n .dialog-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e0e0;\n background-color: #f5f5f5;\n }\n\n .dialog-header h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 500;\n }\n\n .close-button {\n position: relative;\n top: -4px;\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: background-color 0.2s;\n }\n \n .close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n .dialog-content {\n flex: 1;\n overflow: hidden;\n padding: 0;\n }\n\n :host ::ng-deep .test-harness-container {\n height: 100%;\n }\n `]\n})\nexport class AITestHarnessDialogComponent implements OnInit, AfterViewInit {\n /** Reference to the embedded test harness component */\n @ViewChild('testHarness', { static: false }) testHarness!: AITestHarnessComponent;\n \n /** The loaded AI agent entity for testing */\n agent: MJAIAgentEntityExtended | null = null;\n \n /** The loaded AI prompt entity for testing */\n prompt: MJAIPromptEntityExtended | null = null;\n \n /** The mode of operation - either 'agent' or 'prompt' */\n mode: 'agent' | 'prompt' = 'agent';\n \n /** Display title for the dialog header */\n title: string = 'AI Test Harness';\n \n /** Configuration data passed from the dialog service */\n @Input() data: AITestHarnessDialogData = {};\n \n /** Event emitted when the dialog should be closed */\n @Output() closeDialog = new EventEmitter<void>();\n \n constructor(private cdr: ChangeDetectorRef) {}\n \n /**\n * Initializes the dialog component by loading agent/prompt data and configuring\n * the embedded test harness with initial variables and settings.\n */\n async ngOnInit() {\n // Set mode from data\n if (this.data.mode) {\n this.mode = this.data.mode;\n }\n \n if (this.data.title) {\n this.title = this.data.title;\n }\n \n const md = new Metadata();\n \n // Load entity based on mode\n if (this.mode === 'agent' || (!this.data.promptId && !this.data.prompt)) {\n // Agent mode\n if (this.data.agentId && !this.data.agent) {\n this.agent = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n await this.agent.Load(this.data.agentId);\n \n if (this.agent) {\n this.title = this.title || `Test Harness: ${this.agent.Name}`;\n }\n } else if (this.data.agent) {\n this.agent = this.data.agent;\n this.title = this.title || `Test Harness: ${this.agent.Name}`;\n }\n } else {\n // Prompt mode\n this.mode = 'prompt';\n if (this.data.promptId && !this.data.prompt) {\n this.prompt = await md.GetEntityObject<MJAIPromptEntityExtended>('MJ: AI Prompts');\n await this.prompt.Load(this.data.promptId);\n \n if (this.prompt) {\n this.title = this.title || `Test Harness: ${this.prompt.Name}`;\n }\n } else if (this.data.prompt) {\n this.prompt = this.data.prompt;\n this.title = this.title || `Test Harness: ${this.prompt.Name}`;\n }\n }\n }\n \n /**\n * AfterViewInit lifecycle hook to set initial data after view is initialized\n */\n async ngAfterViewInit(): Promise<void> {\n console.log('🚀 ngAfterViewInit - testHarness available:', !!this.testHarness);\n console.log('📊 Dialog data:', this.data);\n console.log('🎯 Mode:', this.mode);\n \n if (this.testHarness) {\n // Check if we need to load from a prompt run\n if (this.data.promptRunId && this.mode === 'prompt') {\n console.log('🔄 Loading from prompt run in AfterViewInit:', this.data.promptRunId);\n await this.loadFromPromptRun(this.data.promptRunId);\n } else {\n console.log('📌 Not loading from prompt run - promptRunId:', this.data.promptRunId, 'mode:', this.mode);\n if (this.mode === 'agent') {\n // Agent mode: set agent variables\n if (this.data.initialDataContext) {\n const variables = Object.entries(this.data.initialDataContext).map(([name, value]) => ({\n name,\n value: typeof value === 'object' ? JSON.stringify(value) : String(value),\n type: this.detectVariableType(value)\n }));\n this.testHarness.agentVariables = variables;\n }\n \n if (this.data.initialTemplateData) {\n const templateVariables = Object.entries(this.data.initialTemplateData).map(([name, value]) => ({\n name,\n value: typeof value === 'object' ? JSON.stringify(value) : String(value),\n type: this.detectVariableType(value)\n }));\n this.testHarness.agentVariables = [...this.testHarness.agentVariables, ...templateVariables];\n }\n } else {\n // Prompt mode: set template variables\n if (this.data.initialTemplateVariables) {\n const variables = Object.entries(this.data.initialTemplateVariables).map(([name, value]) => ({\n name,\n value: typeof value === 'object' ? JSON.stringify(value) : String(value),\n type: this.detectVariableType(value)\n }));\n this.testHarness.templateVariables = variables;\n }\n \n // Set selected model if provided\n if (this.data.selectedModelId) {\n this.testHarness.selectedModelId = this.data.selectedModelId;\n }\n if (this.data.selectedVendorId) {\n this.testHarness.selectedVendorId = this.data.selectedVendorId;\n }\n if (this.data.selectedConfigurationId) {\n this.testHarness.selectedConfigurationId = this.data.selectedConfigurationId;\n }\n }\n }\n \n // Trigger change detection to ensure view updates\n console.log('🔄 Triggering change detection');\n this.cdr.detectChanges();\n \n // Check after change detection\n setTimeout(() => {\n console.log('⏱️ After timeout - conversationMessages:', this.testHarness?.conversationMessages);\n console.log('⏱️ Test harness component state:', {\n mode: this.testHarness?.mode,\n entity: this.testHarness?.entity?.Name,\n messagesLength: this.testHarness?.conversationMessages?.length\n });\n }, 100);\n }\n }\n \n /**\n * Determines the appropriate variable type for initial data configuration.\n * @param value - The value to analyze for type detection\n * @returns The detected variable type\n * @private\n */\n private detectVariableType(value: any): 'string' | 'number' | 'boolean' | 'object' {\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'object') return 'object';\n return 'string';\n }\n \n /**\n * Loads data from an existing prompt run to pre-populate the test harness\n * @param promptRunId - The ID of the prompt run to load\n */\n private async loadFromPromptRun(promptRunId: string): Promise<void> {\n console.log('🔄 Loading from prompt run:', promptRunId);\n const md = new Metadata();\n const promptRun = await md.GetEntityObject<MJAIPromptRunEntityExtended>('MJ: AI Prompt Runs');\n \n if (await promptRun.Load(promptRunId)) {\n console.log('✅ Prompt run loaded successfully');\n // Load the prompt if not already loaded\n if (!this.prompt && promptRun.PromptID) {\n this.prompt = await md.GetEntityObject<MJAIPromptEntityExtended>('MJ: AI Prompts');\n await this.prompt.Load(promptRun.PromptID);\n this.testHarness.entity = this.prompt;\n \n // Update title to indicate we're re-running\n this.title = `Re-Run: ${this.prompt.Name}`;\n }\n \n // Set the model/vendor/configuration\n if (promptRun.ModelID) {\n this.testHarness.selectedModelId = promptRun.ModelID;\n }\n if (promptRun.VendorID) {\n this.testHarness.selectedVendorId = promptRun.VendorID;\n }\n if (promptRun.ConfigurationID) {\n this.testHarness.selectedConfigurationId = promptRun.ConfigurationID;\n }\n \n // Note: We do NOT extract template variables because we want to use\n // the already-rendered system prompt from the previous run, not re-render it\n \n // Set advanced parameters\n if (promptRun.Temperature != null) {\n this.testHarness.advancedParams.temperature = promptRun.Temperature;\n }\n if (promptRun.TopP != null) {\n this.testHarness.advancedParams.topP = promptRun.TopP;\n }\n if (promptRun.TopK != null) {\n this.testHarness.advancedParams.topK = promptRun.TopK;\n }\n if (promptRun.MinP != null) {\n this.testHarness.advancedParams.minP = promptRun.MinP;\n }\n if (promptRun.FrequencyPenalty != null) {\n this.testHarness.advancedParams.frequencyPenalty = promptRun.FrequencyPenalty;\n }\n if (promptRun.PresencePenalty != null) {\n this.testHarness.advancedParams.presencePenalty = promptRun.PresencePenalty;\n }\n if (promptRun.Seed != null) {\n this.testHarness.advancedParams.seed = promptRun.Seed;\n }\n // Note: responseFormat is handled separately, not in advancedParams\n \n // Use the extended entity methods to get conversation messages\n console.log('📝 Raw Messages field:', promptRun.Messages);\n const parsedData = promptRun.ParseMessagesData();\n console.log('🔍 Parsed messages data:', parsedData);\n \n const chatMessages = promptRun.GetChatMessages();\n console.log('💬 Extracted chat messages:', chatMessages);\n \n if (chatMessages.length > 0) {\n // Convert messages to the format expected by the test harness\n const convertedMessages = chatMessages.map((msg, index) => ({\n id: `msg-${Date.now()}-${index}`,\n role: msg.role,\n content: typeof msg.content === 'string' ? msg.content : \n Array.isArray(msg.content) ? \n msg.content.filter(block => block.type === 'text').map(block => block.content).join('\\n') : \n '',\n timestamp: new Date()\n }));\n \n console.log('🎯 Converted messages for test harness:', convertedMessages);\n this.testHarness.conversationMessages = convertedMessages;\n console.log('✅ Test harness conversationMessages set:', this.testHarness.conversationMessages);\n } else {\n console.log('⚠️ No chat messages found in prompt run');\n }\n \n // Store the original prompt run ID for reference\n this.testHarness.originalPromptRunId = promptRunId;\n \n // Extract and store the system prompt for re-run\n const systemPrompt = promptRun.GetSystemPrompt();\n if (systemPrompt) {\n this.testHarness.systemPromptOverride = systemPrompt;\n }\n \n // Add a note indicating this is a re-run\n if (this.testHarness.conversationMessages.length > 0) {\n // Add a system message indicating this is a re-run\n this.testHarness.conversationMessages.unshift({\n id: `system-${Date.now()}`,\n role: 'system',\n content: `[Re-running from Prompt Run #${promptRunId.substring(0, 8)}]`,\n timestamp: new Date()\n });\n }\n }\n }\n \n /**\n * Closes the dialog by emitting the close event.\n * This method is called by the close button in the header.\n */\n close(): void {\n this.closeDialog.emit();\n }\n}"]}
1
+ {"version":3,"file":"ai-test-harness-dialog.component.js","sourceRoot":"","sources":["../../src/lib/ai-test-harness-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAU,SAAS,EAAoC,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;;;AA4CrE;;;;;;;;;;;;;;;;;;;;GAoBG;AA0EH,MAAM,OAAO,4BAA6B,SAAQ,oBAAoB;IAsBlE,YAAoB,GAAsB;QAC1C,KAAK,EAAE,CAAC;QADY,QAAG,GAAH,GAAG,CAAmB;QAlB1C,6CAA6C;QAC7C,UAAK,GAAmC,IAAI,CAAC;QAE7C,8CAA8C;QAC9C,WAAM,GAAoC,IAAI,CAAC;QAE/C,yDAAyD;QACzD,SAAI,GAAuB,OAAO,CAAC;QAEnC,0CAA0C;QAC1C,UAAK,GAAW,iBAAiB,CAAC;QAElC,wDAAwD;QAC/C,SAAI,GAA4B,EAAE,CAAC;QAE5C,qDAAqD;QAC3C,gBAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;IAGzC,CAAC;IAET;;;OAGG;IACH,KAAK,CAAC,QAAQ;QACV,qBAAqB;QACrB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAE9B,4BAA4B;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtE,aAAa;YACb,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,eAAe,CAA0B,eAAe,CAAC,CAAC;gBAChF,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEzC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,iBAAiB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAClE,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,iBAAiB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAClE,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,cAAc;YACd,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;YACrB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAA2B,gBAAgB,CAAC,CAAC;gBACnF,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,iBAAiB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnE,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,iBAAiB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACnE,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACjB,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,6CAA6C;YAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACnF,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,+CAA+C,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxG,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACxB,kCAAkC;oBAClC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;4BACnF,IAAI;4BACJ,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;4BACxE,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;yBACvC,CAAC,CAAC,CAAC;wBACJ,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,SAAS,CAAC;oBAChD,CAAC;oBAED,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAChC,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;4BAC5F,IAAI;4BACJ,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;4BACxE,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;yBACvC,CAAC,CAAC,CAAC;wBACJ,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,iBAAiB,CAAC,CAAC;oBACjG,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,sCAAsC;oBACtC,IAAI,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;wBACrC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;4BACzF,IAAI;4BACJ,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;4BACxE,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;yBACvC,CAAC,CAAC,CAAC;wBACJ,IAAI,CAAC,WAAW,CAAC,iBAAiB,GAAG,SAAS,CAAC;oBACnD,CAAC;oBAED,iCAAiC;oBACjC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;wBAC5B,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;oBACjE,CAAC;oBACD,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBAC7B,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;oBACnE,CAAC;oBACD,IAAI,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;wBACpC,IAAI,CAAC,WAAW,CAAC,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;oBACjF,CAAC;gBACL,CAAC;YACL,CAAC;YAED,kDAAkD;YAClD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAEzB,+BAA+B;YAC/B,UAAU,CAAC,GAAG,EAAE;gBACZ,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;gBAChG,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE;oBAC5C,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI;oBAC5B,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI;oBACtC,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,oBAAoB,EAAE,MAAM;iBACjE,CAAC,CAAC;YACP,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,kBAAkB,CAAC,KAAU;QACjC,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/C,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QAC/C,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,eAAe,CAA8B,oBAAoB,CAAC,CAAC;QAE9F,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,wCAAwC;YACxC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAA2B,gBAAgB,CAAC,CAAC;gBACnF,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAEtC,4CAA4C;gBAC5C,IAAI,CAAC,KAAK,GAAG,WAAW,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/C,CAAC;YAED,qCAAqC;YACrC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC;YACzD,CAAC;YACD,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACrB,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC;YAC3D,CAAC;YACD,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;gBAC5B,IAAI,CAAC,WAAW,CAAC,uBAAuB,GAAG,SAAS,CAAC,eAAe,CAAC;YACzE,CAAC;YAED,oEAAoE;YACpE,6EAA6E;YAE7E,0BAA0B;YAC1B,IAAI,SAAS,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;gBAChC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;YACxE,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAC1D,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAC1D,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAC1D,CAAC;YACD,IAAI,SAAS,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;gBACrC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC;YAClF,CAAC;YACD,IAAI,SAAS,CAAC,eAAe,IAAI,IAAI,EAAE,CAAC;gBACpC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;YAChF,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAC1D,CAAC;YACD,oEAAoE;YAEpE,+DAA+D;YAC/D,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC1D,MAAM,UAAU,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAC;YAEpD,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;YAEzD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,8DAA8D;gBAC9D,MAAM,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBACxD,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE;oBAChC,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBAC/C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;4BAC5B,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;4BAC3F,EAAE;oBACX,SAAS,EAAE,IAAI,IAAI,EAAE;iBACxB,CAAC,CAAC,CAAC;gBAEJ,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,iBAAiB,CAAC,CAAC;gBAC1E,IAAI,CAAC,WAAW,CAAC,oBAAoB,GAAG,iBAAiB,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;YACnG,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YAC3D,CAAC;YAED,iDAAiD;YACjD,IAAI,CAAC,WAAW,CAAC,mBAAmB,GAAG,WAAW,CAAC;YAEnD,iDAAiD;YACjD,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;YACjD,IAAI,YAAY,EAAE,CAAC;gBACf,IAAI,CAAC,WAAW,CAAC,oBAAoB,GAAG,YAAY,CAAC;YACzD,CAAC;YAED,yCAAyC;YACzC,IAAI,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,mDAAmD;gBACnD,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,OAAO,CAAC;oBAC1C,EAAE,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;oBAC1B,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,gCAAgC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;oBACvE,SAAS,EAAE,IAAI,IAAI,EAAE;iBACxB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;6HAjRQ,4BAA4B;oEAA5B,4BAA4B;;;;;;;YAnEzB,AADJ,AADJ,8BAAiC,aACF,SACnB;YAAA,YAAW;YAAA,iBAAK;YACpB,iCAA+C;YAAlB,+IAAS,WAAO,KAAC;YAC1C,uBAAiC;YAEzC,AADI,iBAAS,EACP;YACN,8BAA4B;YACxB,2CAKqB;YAE7B,AADI,iBAAM,EACJ;;YAbM,eAAW;YAAX,+BAAW;YAQX,eAAa;YAEb,AADA,AADA,+BAAa,yDAC+B,mBAC1B;;;iFAyDzB,4BAA4B;cAzExC,SAAS;6BACI,KAAK,YACL,2BAA2B,YAC3B;;;;;;;;;;;;;;;;;KAiBT;;kBAuDA,SAAS;mBAAC,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;kBAe1C,KAAK;;kBAGL,MAAM;;kFApBE,4BAA4B","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ChangeDetectorRef, AfterViewInit } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJAIAgentEntityExtended, MJAIPromptEntityExtended, MJAIPromptRunEntityExtended } from '@memberjunction/ai-core-plus';\nimport { Metadata } from '@memberjunction/core';\nimport { AITestHarnessComponent } from './ai-test-harness.component';\nimport { ChatMessage } from '@memberjunction/ai';\n\n/**\n * Configuration data interface for the AI Test Harness Dialog.\n * Provides all necessary options for initializing the dialog with appropriate\n * agent/prompt data, dimensions, and initial variable configurations.\n */\nexport interface AITestHarnessDialogData {\n /** ID of the AI agent to load (alternative to providing agent entity) */\n agentId?: string;\n /** Pre-loaded AI agent entity (alternative to providing agentId) */\n agent?: MJAIAgentEntityExtended;\n /** ID of the AI prompt to load (alternative to providing prompt entity) */\n promptId?: string;\n /** Pre-loaded AI prompt entity (alternative to providing promptId) */\n prompt?: MJAIPromptEntityExtended;\n /** Custom dialog title (defaults to agent/prompt name) */\n title?: string;\n /** Dialog width in CSS units or viewport percentage */\n width?: string | number;\n /** Dialog height in CSS units or viewport percentage */\n height?: string | number;\n /** Initial data context variables for agent execution */\n initialDataContext?: Record<string, any>;\n /** Initial template data variables for prompt rendering */\n initialTemplateData?: Record<string, any>;\n /** Initial template variables for prompt execution */\n initialTemplateVariables?: Record<string, any>;\n /** Pre-selected AI model ID for prompt execution */\n selectedModelId?: string;\n /** Pre-selected AI vendor ID for prompt execution */\n selectedVendorId?: string;\n /** Pre-selected AI configuration ID for prompt execution */\n selectedConfigurationId?: string;\n /** Mode of operation - 'agent' or 'prompt' */\n mode?: 'agent' | 'prompt';\n /** ID of an existing prompt run to preload data from */\n promptRunId?: string;\n}\n\n/**\n * Dialog wrapper component for the AI Agent Test Harness.\n * Provides a modal dialog interface with proper sizing, header, and close functionality.\n * Automatically loads agent data and initializes the test harness with provided configuration.\n * \n * ## Features:\n * - **Automatic Agent Loading**: Loads agent by ID or uses provided entity\n * - **Configurable Dimensions**: Supports custom dialog sizing\n * - **Initial Data Setup**: Pre-populates data context and template variables\n * - **Clean Dialog Interface**: Professional header with close button\n * - **Responsive Layout**: Adapts to content and screen size\n * \n * ## Usage:\n * This component is typically opened through the `TestHarnessDialogService` rather than directly:\n * ```typescript\n * const dialogRef = this.testHarnessService.openAgentTestHarness({\n * agentId: 'agent-123',\n * initialDataContext: { userId: 'user-456' }\n * });\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-ai-test-harness-dialog',\n template: `\n <div class=\"test-harness-dialog\">\n <div class=\"dialog-header\">\n <h2>{{ title }}</h2>\n <button class=\"close-button\" (click)=\"close()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"dialog-content\">\n <mj-ai-test-harness \n #testHarness\n [mode]=\"mode\"\n [entity]=\"mode === 'agent' ? agent : prompt\"\n [isVisible]=\"true\">\n </mj-ai-test-harness>\n </div>\n </div>\n `,\n styles: [`\n .test-harness-dialog {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n }\n\n .dialog-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e0e0;\n background-color: #f5f5f5;\n }\n\n .dialog-header h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 500;\n }\n\n .close-button {\n position: relative;\n top: -4px;\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: background-color 0.2s;\n }\n \n .close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n .dialog-content {\n flex: 1;\n overflow: hidden;\n padding: 0;\n }\n\n :host ::ng-deep .test-harness-container {\n height: 100%;\n }\n `]\n})\nexport class AITestHarnessDialogComponent extends BaseAngularComponent implements OnInit, AfterViewInit {\n /** Reference to the embedded test harness component */\n @ViewChild('testHarness', { static: false }) testHarness!: AITestHarnessComponent;\n \n /** The loaded AI agent entity for testing */\n agent: MJAIAgentEntityExtended | null = null;\n \n /** The loaded AI prompt entity for testing */\n prompt: MJAIPromptEntityExtended | null = null;\n \n /** The mode of operation - either 'agent' or 'prompt' */\n mode: 'agent' | 'prompt' = 'agent';\n \n /** Display title for the dialog header */\n title: string = 'AI Test Harness';\n \n /** Configuration data passed from the dialog service */\n @Input() data: AITestHarnessDialogData = {};\n \n /** Event emitted when the dialog should be closed */\n @Output() closeDialog = new EventEmitter<void>();\n \n constructor(private cdr: ChangeDetectorRef) {\n super();}\n \n /**\n * Initializes the dialog component by loading agent/prompt data and configuring\n * the embedded test harness with initial variables and settings.\n */\n async ngOnInit() {\n // Set mode from data\n if (this.data.mode) {\n this.mode = this.data.mode;\n }\n \n if (this.data.title) {\n this.title = this.data.title;\n }\n \n const md = this.ProviderToUse;\n \n // Load entity based on mode\n if (this.mode === 'agent' || (!this.data.promptId && !this.data.prompt)) {\n // Agent mode\n if (this.data.agentId && !this.data.agent) {\n this.agent = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n await this.agent.Load(this.data.agentId);\n \n if (this.agent) {\n this.title = this.title || `Test Harness: ${this.agent.Name}`;\n }\n } else if (this.data.agent) {\n this.agent = this.data.agent;\n this.title = this.title || `Test Harness: ${this.agent.Name}`;\n }\n } else {\n // Prompt mode\n this.mode = 'prompt';\n if (this.data.promptId && !this.data.prompt) {\n this.prompt = await md.GetEntityObject<MJAIPromptEntityExtended>('MJ: AI Prompts');\n await this.prompt.Load(this.data.promptId);\n \n if (this.prompt) {\n this.title = this.title || `Test Harness: ${this.prompt.Name}`;\n }\n } else if (this.data.prompt) {\n this.prompt = this.data.prompt;\n this.title = this.title || `Test Harness: ${this.prompt.Name}`;\n }\n }\n }\n \n /**\n * AfterViewInit lifecycle hook to set initial data after view is initialized\n */\n async ngAfterViewInit(): Promise<void> {\n console.log('🚀 ngAfterViewInit - testHarness available:', !!this.testHarness);\n console.log('📊 Dialog data:', this.data);\n console.log('🎯 Mode:', this.mode);\n \n if (this.testHarness) {\n // Check if we need to load from a prompt run\n if (this.data.promptRunId && this.mode === 'prompt') {\n console.log('🔄 Loading from prompt run in AfterViewInit:', this.data.promptRunId);\n await this.loadFromPromptRun(this.data.promptRunId);\n } else {\n console.log('📌 Not loading from prompt run - promptRunId:', this.data.promptRunId, 'mode:', this.mode);\n if (this.mode === 'agent') {\n // Agent mode: set agent variables\n if (this.data.initialDataContext) {\n const variables = Object.entries(this.data.initialDataContext).map(([name, value]) => ({\n name,\n value: typeof value === 'object' ? JSON.stringify(value) : String(value),\n type: this.detectVariableType(value)\n }));\n this.testHarness.agentVariables = variables;\n }\n \n if (this.data.initialTemplateData) {\n const templateVariables = Object.entries(this.data.initialTemplateData).map(([name, value]) => ({\n name,\n value: typeof value === 'object' ? JSON.stringify(value) : String(value),\n type: this.detectVariableType(value)\n }));\n this.testHarness.agentVariables = [...this.testHarness.agentVariables, ...templateVariables];\n }\n } else {\n // Prompt mode: set template variables\n if (this.data.initialTemplateVariables) {\n const variables = Object.entries(this.data.initialTemplateVariables).map(([name, value]) => ({\n name,\n value: typeof value === 'object' ? JSON.stringify(value) : String(value),\n type: this.detectVariableType(value)\n }));\n this.testHarness.templateVariables = variables;\n }\n \n // Set selected model if provided\n if (this.data.selectedModelId) {\n this.testHarness.selectedModelId = this.data.selectedModelId;\n }\n if (this.data.selectedVendorId) {\n this.testHarness.selectedVendorId = this.data.selectedVendorId;\n }\n if (this.data.selectedConfigurationId) {\n this.testHarness.selectedConfigurationId = this.data.selectedConfigurationId;\n }\n }\n }\n \n // Trigger change detection to ensure view updates\n console.log('🔄 Triggering change detection');\n this.cdr.detectChanges();\n \n // Check after change detection\n setTimeout(() => {\n console.log('⏱️ After timeout - conversationMessages:', this.testHarness?.conversationMessages);\n console.log('⏱️ Test harness component state:', {\n mode: this.testHarness?.mode,\n entity: this.testHarness?.entity?.Name,\n messagesLength: this.testHarness?.conversationMessages?.length\n });\n }, 100);\n }\n }\n \n /**\n * Determines the appropriate variable type for initial data configuration.\n * @param value - The value to analyze for type detection\n * @returns The detected variable type\n * @private\n */\n private detectVariableType(value: any): 'string' | 'number' | 'boolean' | 'object' {\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'object') return 'object';\n return 'string';\n }\n \n /**\n * Loads data from an existing prompt run to pre-populate the test harness\n * @param promptRunId - The ID of the prompt run to load\n */\n private async loadFromPromptRun(promptRunId: string): Promise<void> {\n console.log('🔄 Loading from prompt run:', promptRunId);\n const md = this.ProviderToUse;\n const promptRun = await md.GetEntityObject<MJAIPromptRunEntityExtended>('MJ: AI Prompt Runs');\n \n if (await promptRun.Load(promptRunId)) {\n console.log('✅ Prompt run loaded successfully');\n // Load the prompt if not already loaded\n if (!this.prompt && promptRun.PromptID) {\n this.prompt = await md.GetEntityObject<MJAIPromptEntityExtended>('MJ: AI Prompts');\n await this.prompt.Load(promptRun.PromptID);\n this.testHarness.entity = this.prompt;\n \n // Update title to indicate we're re-running\n this.title = `Re-Run: ${this.prompt.Name}`;\n }\n \n // Set the model/vendor/configuration\n if (promptRun.ModelID) {\n this.testHarness.selectedModelId = promptRun.ModelID;\n }\n if (promptRun.VendorID) {\n this.testHarness.selectedVendorId = promptRun.VendorID;\n }\n if (promptRun.ConfigurationID) {\n this.testHarness.selectedConfigurationId = promptRun.ConfigurationID;\n }\n \n // Note: We do NOT extract template variables because we want to use\n // the already-rendered system prompt from the previous run, not re-render it\n \n // Set advanced parameters\n if (promptRun.Temperature != null) {\n this.testHarness.advancedParams.temperature = promptRun.Temperature;\n }\n if (promptRun.TopP != null) {\n this.testHarness.advancedParams.topP = promptRun.TopP;\n }\n if (promptRun.TopK != null) {\n this.testHarness.advancedParams.topK = promptRun.TopK;\n }\n if (promptRun.MinP != null) {\n this.testHarness.advancedParams.minP = promptRun.MinP;\n }\n if (promptRun.FrequencyPenalty != null) {\n this.testHarness.advancedParams.frequencyPenalty = promptRun.FrequencyPenalty;\n }\n if (promptRun.PresencePenalty != null) {\n this.testHarness.advancedParams.presencePenalty = promptRun.PresencePenalty;\n }\n if (promptRun.Seed != null) {\n this.testHarness.advancedParams.seed = promptRun.Seed;\n }\n // Note: responseFormat is handled separately, not in advancedParams\n \n // Use the extended entity methods to get conversation messages\n console.log('📝 Raw Messages field:', promptRun.Messages);\n const parsedData = promptRun.ParseMessagesData();\n console.log('🔍 Parsed messages data:', parsedData);\n \n const chatMessages = promptRun.GetChatMessages();\n console.log('💬 Extracted chat messages:', chatMessages);\n \n if (chatMessages.length > 0) {\n // Convert messages to the format expected by the test harness\n const convertedMessages = chatMessages.map((msg, index) => ({\n id: `msg-${Date.now()}-${index}`,\n role: msg.role,\n content: typeof msg.content === 'string' ? msg.content : \n Array.isArray(msg.content) ? \n msg.content.filter(block => block.type === 'text').map(block => block.content).join('\\n') : \n '',\n timestamp: new Date()\n }));\n \n console.log('🎯 Converted messages for test harness:', convertedMessages);\n this.testHarness.conversationMessages = convertedMessages;\n console.log('✅ Test harness conversationMessages set:', this.testHarness.conversationMessages);\n } else {\n console.log('⚠️ No chat messages found in prompt run');\n }\n \n // Store the original prompt run ID for reference\n this.testHarness.originalPromptRunId = promptRunId;\n \n // Extract and store the system prompt for re-run\n const systemPrompt = promptRun.GetSystemPrompt();\n if (systemPrompt) {\n this.testHarness.systemPromptOverride = systemPrompt;\n }\n \n // Add a note indicating this is a re-run\n if (this.testHarness.conversationMessages.length > 0) {\n // Add a system message indicating this is a re-run\n this.testHarness.conversationMessages.unshift({\n id: `system-${Date.now()}`,\n role: 'system',\n content: `[Re-running from Prompt Run #${promptRunId.substring(0, 8)}]`,\n timestamp: new Date()\n });\n }\n }\n }\n \n /**\n * Closes the dialog by emitting the close event.\n * This method is called by the close button in the header.\n */\n close(): void {\n this.closeDialog.emit();\n }\n}"]}
@@ -1,4 +1,5 @@
1
1
  import { EventEmitter, OnInit } from '@angular/core';
2
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
2
3
  import { MJAIAgentEntityExtended, MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';
3
4
  import * as i0 from "@angular/core";
4
5
  export interface AITestHarnessWindowData {
@@ -16,7 +17,7 @@ export interface AITestHarnessWindowData {
16
17
  selectedModelId?: string;
17
18
  mode?: 'agent' | 'prompt';
18
19
  }
19
- export declare class AITestHarnessWindowComponent implements OnInit {
20
+ export declare class AITestHarnessWindowComponent extends BaseAngularComponent implements OnInit {
20
21
  data: AITestHarnessWindowData;
21
22
  closeWindow: EventEmitter<void>;
22
23
  windowTitle: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ai-test-harness-window.component.d.ts","sourceRoot":"","sources":["../../src/lib/ai-test-harness-window.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;;AAGjG,MAAM,WAAW,uBAAuB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC7B;AAED,qBA+Da,4BAA6B,YAAW,MAAM;IAC9C,IAAI,EAAE,uBAAuB,CAAM;IAClC,WAAW,qBAA4B;IAEjD,WAAW,SAAqB;IAChC,KAAK,EAAE,MAAM,CAAQ;IACrB,MAAM,EAAE,MAAM,CAAO;IACrB,OAAO,UAAQ;IACf,KAAK,SAAM;IAEX,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAW;IAEnC,OAAO,CAAC,QAAQ,CAAkB;IAElC,QAAQ;IAeF,UAAU;IA2ChB,OAAO;IAIP,mBAAmB;IAMnB,OAAO,CAAC,eAAe;yCApFd,4BAA4B;2CAA5B,4BAA4B;CA2GxC"}
1
+ {"version":3,"file":"ai-test-harness-window.component.d.ts","sourceRoot":"","sources":["../../src/lib/ai-test-harness-window.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;;AAGjG,MAAM,WAAW,uBAAuB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC7B;AAED,qBA+Da,4BAA6B,SAAQ,oBAAqB,YAAW,MAAM;IAC3E,IAAI,EAAE,uBAAuB,CAAM;IAClC,WAAW,qBAA4B;IAEjD,WAAW,SAAqB;IAChC,KAAK,EAAE,MAAM,CAAQ;IACrB,MAAM,EAAE,MAAM,CAAO;IACrB,OAAO,UAAQ;IACf,KAAK,SAAM;IAEX,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAW;IAEnC,OAAO,CAAC,QAAQ,CAAsB;IAEtC,QAAQ;IAeF,UAAU;IA2ChB,OAAO;IAIP,mBAAmB;IAMnB,OAAO,CAAC,eAAe;yCApFd,4BAA4B;2CAA5B,4BAA4B;CA2GxC"}
@@ -1,5 +1,5 @@
1
1
  import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { Metadata } from '@memberjunction/core';
2
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@memberjunction/ng-shared-generic";
5
5
  import * as i2 from "./ai-test-harness.component";
@@ -32,8 +32,9 @@ function AITestHarnessWindowComponent_Conditional_3_Template(rf, ctx) { if (rf &
32
32
  const ctx_r0 = i0.ɵɵnextContext();
33
33
  i0.ɵɵproperty("entity", ctx_r0.agent || ctx_r0.prompt || null)("mode", ctx_r0.mode)("isVisible", true)("originalPromptRunId", ctx_r0.data.promptRunId || null);
34
34
  } }
35
- export class AITestHarnessWindowComponent {
35
+ export class AITestHarnessWindowComponent extends BaseAngularComponent {
36
36
  constructor() {
37
+ super(...arguments);
37
38
  this.data = {};
38
39
  this.closeWindow = new EventEmitter();
39
40
  this.windowTitle = 'AI Test Harness';
@@ -42,7 +43,7 @@ export class AITestHarnessWindowComponent {
42
43
  this.loading = true;
43
44
  this.error = '';
44
45
  this.mode = 'agent';
45
- this.metadata = new Metadata();
46
+ this.metadata = this.ProviderToUse;
46
47
  }
47
48
  ngOnInit() {
48
49
  console.log('🪟 AITestHarnessWindowComponent.ngOnInit - data:', this.data);
@@ -135,8 +136,8 @@ export class AITestHarnessWindowComponent {
135
136
  const parsed = parseFloat(value);
136
137
  return isNaN(parsed) ? undefined : parsed;
137
138
  }
138
- static { this.ɵfac = function AITestHarnessWindowComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AITestHarnessWindowComponent)(); }; }
139
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AITestHarnessWindowComponent, selectors: [["mj-ai-test-harness-window"]], inputs: { data: "data" }, outputs: { closeWindow: "closeWindow" }, standalone: false, decls: 4, vars: 1, consts: [[1, "window-content"], [1, "loading-container"], [1, "error-container"], [3, "entity", "mode", "isVisible", "originalPromptRunId"], ["size", "large", 3, "text"], [1, "fa-solid", "fa-exclamation-triangle"], [3, "minimizeRequested", "entity", "mode", "isVisible", "originalPromptRunId"]], template: function AITestHarnessWindowComponent_Template(rf, ctx) { if (rf & 1) {
139
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵAITestHarnessWindowComponent_BaseFactory; return function AITestHarnessWindowComponent_Factory(__ngFactoryType__) { return (ɵAITestHarnessWindowComponent_BaseFactory || (ɵAITestHarnessWindowComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AITestHarnessWindowComponent)))(__ngFactoryType__ || AITestHarnessWindowComponent); }; })(); }
140
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AITestHarnessWindowComponent, selectors: [["mj-ai-test-harness-window"]], inputs: { data: "data" }, outputs: { closeWindow: "closeWindow" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 1, consts: [[1, "window-content"], [1, "loading-container"], [1, "error-container"], [3, "entity", "mode", "isVisible", "originalPromptRunId"], ["size", "large", 3, "text"], [1, "fa-solid", "fa-exclamation-triangle"], [3, "minimizeRequested", "entity", "mode", "isVisible", "originalPromptRunId"]], template: function AITestHarnessWindowComponent_Template(rf, ctx) { if (rf & 1) {
140
141
  i0.ɵɵelementStart(0, "div", 0);
141
142
  i0.ɵɵconditionalCreate(1, AITestHarnessWindowComponent_Conditional_1_Template, 2, 1, "div", 1)(2, AITestHarnessWindowComponent_Conditional_2_Template, 4, 1, "div", 2)(3, AITestHarnessWindowComponent_Conditional_3_Template, 1, 4, "mj-ai-test-harness", 3);
142
143
  i0.ɵɵelementEnd();
@@ -176,5 +177,5 @@ export class AITestHarnessWindowComponent {
176
177
  }], closeWindow: [{
177
178
  type: Output
178
179
  }] }); })();
179
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AITestHarnessWindowComponent, { className: "AITestHarnessWindowComponent", filePath: "lib/ai-test-harness-window.component.ts", lineNumber: 84 }); })();
180
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AITestHarnessWindowComponent, { className: "AITestHarnessWindowComponent", filePath: "lib/ai-test-harness-window.component.ts", lineNumber: 85 }); })();
180
181
  //# sourceMappingURL=ai-test-harness-window.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-test-harness-window.component.js","sourceRoot":"","sources":["../../src/lib/ai-test-harness-window.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewChild, OnInit } from '@angular/core';\nimport { MJAIAgentEntityExtended, MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\nimport { Metadata } from '@memberjunction/core';\n\nexport interface AITestHarnessWindowData {\n agentId?: string;\n agent?: MJAIAgentEntityExtended;\n promptId?: string;\n prompt?: MJAIPromptEntityExtended;\n promptRunId?: string;\n title?: string;\n width?: string | number;\n height?: string | number;\n initialDataContext?: Record<string, any>;\n initialTemplateData?: Record<string, any>;\n initialTemplateVariables?: Record<string, any>;\n selectedModelId?: string;\n mode?: 'agent' | 'prompt';\n}\n\n@Component({\n standalone: false,\n selector: 'mj-ai-test-harness-window',\n template: `\n <div class=\"window-content\">\n @if (loading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"'Loading ' + (mode === 'agent' ? 'AI Agent' : 'AI Prompt') + '...'\" size=\"large\"></mj-loading>\n </div>\n }\n @else if (error) {\n <div class=\"error-container\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <p>{{ error }}</p>\n </div>\n }\n @else {\n <mj-ai-test-harness\n [entity]=\"(agent || prompt) || null\"\n [mode]=\"mode\"\n [isVisible]=\"true\"\n [originalPromptRunId]=\"data.promptRunId || null\"\n (minimizeRequested)=\"onMinimizeRequested()\">\n </mj-ai-test-harness>\n }\n </div>\n `,\n styles: [`\n :host {\n display: block;\n height: 100%;\n }\n \n .window-content {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n .loading-container,\n .error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 1rem;\n }\n \n .error-container {\n color: #dc3545;\n \n i {\n font-size: 3rem;\n }\n }\n \n mj-ai-test-harness {\n flex: 1;\n overflow: hidden;\n }\n `]\n})\nexport class AITestHarnessWindowComponent implements OnInit {\n @Input() data: AITestHarnessWindowData = {};\n @Output() closeWindow = new EventEmitter<void>();\n \n windowTitle = 'AI Test Harness';\n width: number = 1200;\n height: number = 800;\n loading = true;\n error = '';\n \n agent?: MJAIAgentEntityExtended;\n prompt?: MJAIPromptEntityExtended;\n mode: 'agent' | 'prompt' = 'agent';\n \n private metadata = new Metadata();\n \n ngOnInit() {\n console.log('🪟 AITestHarnessWindowComponent.ngOnInit - data:', this.data);\n console.log('📌 promptRunId:', this.data.promptRunId);\n \n // Set window dimensions\n this.width = this.convertToNumber(this.data.width) || 1200;\n this.height = this.convertToNumber(this.data.height) || 800;\n \n // Determine mode\n this.mode = this.data.mode || (this.data.promptId || this.data.prompt ? 'prompt' : 'agent');\n \n // Load entity\n this.loadEntity();\n }\n \n async loadEntity() {\n try {\n if (this.mode === 'agent') {\n if (this.data.agent) {\n this.agent = this.data.agent;\n this.windowTitle = this.data.title || `Test Agent: ${this.agent.Name}`;\n } else if (this.data.agentId) {\n const agentEntity = await this.metadata.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n await agentEntity.Load(this.data.agentId);\n if (agentEntity.IsSaved) {\n this.agent = agentEntity;\n this.windowTitle = this.data.title || `Test Agent: ${this.agent.Name}`;\n } else {\n throw new Error('Agent not found');\n }\n } else {\n throw new Error('No agent provided');\n }\n } else {\n if (this.data.prompt) {\n this.prompt = this.data.prompt;\n this.windowTitle = this.data.title || `Test Prompt: ${this.prompt.Name}`;\n } else if (this.data.promptId) {\n const promptEntity = await this.metadata.GetEntityObject<MJAIPromptEntityExtended>('MJ: AI Prompts');\n await promptEntity.Load(this.data.promptId);\n if (promptEntity.IsSaved) {\n this.prompt = promptEntity;\n this.windowTitle = this.data.title || `Test Prompt: ${this.prompt.Name}`;\n } else {\n throw new Error('Prompt not found');\n }\n } else {\n throw new Error('No prompt provided');\n }\n }\n \n this.loading = false;\n } catch (err: any) {\n this.error = err.message || 'Failed to load entity';\n this.loading = false;\n }\n }\n \n onClose() {\n this.closeWindow.emit();\n }\n \n onMinimizeRequested() {\n // Since Kendo Window doesn't support minimize functionality,\n // we'll close the window when navigating to view the agent run\n this.closeWindow.emit();\n }\n \n private convertToNumber(value: string | number | undefined): number | undefined {\n if (!value) return undefined;\n if (typeof value === 'number') return value;\n \n // Handle percentage values\n if (value.endsWith('vw') || value.endsWith('vh')) {\n const percentage = parseFloat(value) / 100;\n if (value.endsWith('vw')) {\n return window.innerWidth * percentage;\n } else {\n return window.innerHeight * percentage;\n }\n }\n \n // Handle pixel values\n if (value.endsWith('px')) {\n return parseFloat(value);\n }\n \n // Try to parse as number\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n }\n}"]}
1
+ {"version":3,"file":"ai-test-harness-window.component.js","sourceRoot":"","sources":["../../src/lib/ai-test-harness-window.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewChild, OnInit } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJAIAgentEntityExtended, MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\nimport { Metadata } from '@memberjunction/core';\n\nexport interface AITestHarnessWindowData {\n agentId?: string;\n agent?: MJAIAgentEntityExtended;\n promptId?: string;\n prompt?: MJAIPromptEntityExtended;\n promptRunId?: string;\n title?: string;\n width?: string | number;\n height?: string | number;\n initialDataContext?: Record<string, any>;\n initialTemplateData?: Record<string, any>;\n initialTemplateVariables?: Record<string, any>;\n selectedModelId?: string;\n mode?: 'agent' | 'prompt';\n}\n\n@Component({\n standalone: false,\n selector: 'mj-ai-test-harness-window',\n template: `\n <div class=\"window-content\">\n @if (loading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"'Loading ' + (mode === 'agent' ? 'AI Agent' : 'AI Prompt') + '...'\" size=\"large\"></mj-loading>\n </div>\n }\n @else if (error) {\n <div class=\"error-container\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <p>{{ error }}</p>\n </div>\n }\n @else {\n <mj-ai-test-harness\n [entity]=\"(agent || prompt) || null\"\n [mode]=\"mode\"\n [isVisible]=\"true\"\n [originalPromptRunId]=\"data.promptRunId || null\"\n (minimizeRequested)=\"onMinimizeRequested()\">\n </mj-ai-test-harness>\n }\n </div>\n `,\n styles: [`\n :host {\n display: block;\n height: 100%;\n }\n \n .window-content {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n .loading-container,\n .error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 1rem;\n }\n \n .error-container {\n color: #dc3545;\n \n i {\n font-size: 3rem;\n }\n }\n \n mj-ai-test-harness {\n flex: 1;\n overflow: hidden;\n }\n `]\n})\nexport class AITestHarnessWindowComponent extends BaseAngularComponent implements OnInit {\n @Input() data: AITestHarnessWindowData = {};\n @Output() closeWindow = new EventEmitter<void>();\n \n windowTitle = 'AI Test Harness';\n width: number = 1200;\n height: number = 800;\n loading = true;\n error = '';\n \n agent?: MJAIAgentEntityExtended;\n prompt?: MJAIPromptEntityExtended;\n mode: 'agent' | 'prompt' = 'agent';\n \n private metadata = this.ProviderToUse;\n \n ngOnInit() {\n console.log('🪟 AITestHarnessWindowComponent.ngOnInit - data:', this.data);\n console.log('📌 promptRunId:', this.data.promptRunId);\n \n // Set window dimensions\n this.width = this.convertToNumber(this.data.width) || 1200;\n this.height = this.convertToNumber(this.data.height) || 800;\n \n // Determine mode\n this.mode = this.data.mode || (this.data.promptId || this.data.prompt ? 'prompt' : 'agent');\n \n // Load entity\n this.loadEntity();\n }\n \n async loadEntity() {\n try {\n if (this.mode === 'agent') {\n if (this.data.agent) {\n this.agent = this.data.agent;\n this.windowTitle = this.data.title || `Test Agent: ${this.agent.Name}`;\n } else if (this.data.agentId) {\n const agentEntity = await this.metadata.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n await agentEntity.Load(this.data.agentId);\n if (agentEntity.IsSaved) {\n this.agent = agentEntity;\n this.windowTitle = this.data.title || `Test Agent: ${this.agent.Name}`;\n } else {\n throw new Error('Agent not found');\n }\n } else {\n throw new Error('No agent provided');\n }\n } else {\n if (this.data.prompt) {\n this.prompt = this.data.prompt;\n this.windowTitle = this.data.title || `Test Prompt: ${this.prompt.Name}`;\n } else if (this.data.promptId) {\n const promptEntity = await this.metadata.GetEntityObject<MJAIPromptEntityExtended>('MJ: AI Prompts');\n await promptEntity.Load(this.data.promptId);\n if (promptEntity.IsSaved) {\n this.prompt = promptEntity;\n this.windowTitle = this.data.title || `Test Prompt: ${this.prompt.Name}`;\n } else {\n throw new Error('Prompt not found');\n }\n } else {\n throw new Error('No prompt provided');\n }\n }\n \n this.loading = false;\n } catch (err: any) {\n this.error = err.message || 'Failed to load entity';\n this.loading = false;\n }\n }\n \n onClose() {\n this.closeWindow.emit();\n }\n \n onMinimizeRequested() {\n // Since Kendo Window doesn't support minimize functionality,\n // we'll close the window when navigating to view the agent run\n this.closeWindow.emit();\n }\n \n private convertToNumber(value: string | number | undefined): number | undefined {\n if (!value) return undefined;\n if (typeof value === 'number') return value;\n \n // Handle percentage values\n if (value.endsWith('vw') || value.endsWith('vh')) {\n const percentage = parseFloat(value) / 100;\n if (value.endsWith('vw')) {\n return window.innerWidth * percentage;\n } else {\n return window.innerHeight * percentage;\n }\n }\n \n // Handle pixel values\n if (value.endsWith('px')) {\n return parseFloat(value);\n }\n \n // Try to parse as number\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n }\n}"]}
@@ -1,4 +1,5 @@
1
1
  import { EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges, AfterViewChecked, ChangeDetectorRef } from '@angular/core';
2
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
2
3
  import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
3
4
  import { MJAIAgentEntityExtended, MJAIPromptEntityExtended, MJAIAgentRunEntityExtended, MJAIAgentRunStepEntityExtended } from "@memberjunction/ai-core-plus";
4
5
  import { MJAIConfigurationEntity } from '@memberjunction/core-entities';
@@ -132,7 +133,7 @@ export interface SavedConversation {
132
133
  * this.testHarness.isVisible = true;
133
134
  * ```
134
135
  */
135
- export declare class AITestHarnessComponent implements OnInit, OnDestroy, OnChanges, AfterViewChecked {
136
+ export declare class AITestHarnessComponent extends BaseAngularComponent implements OnInit, OnDestroy, OnChanges, AfterViewChecked {
136
137
  private sanitizer;
137
138
  private cdr;
138
139
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ai-test-harness.component.d.ts","sourceRoot":"","sources":["../../src/lib/ai-test-harness.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-test-harness.component.d.ts","sourceRoot":"","sources":["../../src/lib/ai-test-harness.component.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewChild, SecurityContext } from '@angular/core';
2
- import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
2
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
+ import { RunView, CompositeKey } from '@memberjunction/core';
3
4
  import { MJNotificationService } from '@memberjunction/ng-notifications';
4
5
  import { SharedService } from '@memberjunction/ng-shared';
5
6
  import { Subject } from 'rxjs';
@@ -1222,13 +1223,14 @@ function AITestHarnessComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1222
1223
  * this.testHarness.isVisible = true;
1223
1224
  * ```
1224
1225
  */
1225
- export class AITestHarnessComponent {
1226
+ export class AITestHarnessComponent extends BaseAngularComponent {
1226
1227
  /**
1227
1228
  * Creates a new AI Test Harness component instance.
1228
1229
  * @param sanitizer - Angular DomSanitizer for safe HTML rendering of formatted content
1229
1230
  * @param cdr - Angular ChangeDetectorRef for managing change detection
1230
1231
  */
1231
1232
  constructor(sanitizer, cdr) {
1233
+ super();
1232
1234
  this.sanitizer = sanitizer;
1233
1235
  this.cdr = cdr;
1234
1236
  /** The mode of operation - either 'agent' or 'prompt' */
@@ -1364,7 +1366,7 @@ export class AITestHarnessComponent {
1364
1366
  /** Flag indicating that auto-scroll is needed on next view check */
1365
1367
  this.scrollNeeded = false;
1366
1368
  /** MemberJunction metadata instance for entity operations */
1367
- this._metadata = new Metadata();
1369
+ this._metadata = this.ProviderToUse;
1368
1370
  /** Track if input has been focused to prevent repeated focusing */
1369
1371
  this._hasFocused = false;
1370
1372
  /** Default model object for the prompt (cached for vendor lookup) */
@@ -1486,7 +1488,7 @@ export class AITestHarnessComponent {
1486
1488
  }
1487
1489
  subscribeToEvents() {
1488
1490
  // Set up direct GraphQL subscription for agent execution stream
1489
- const dataProvider = Metadata.Provider;
1491
+ const dataProvider = this.ProviderToUse;
1490
1492
  const _providerPushStatusSub = dataProvider.PushStatusUpdates().subscribe(async (status) => {
1491
1493
  const message = JSON.parse(status.message || '{}');
1492
1494
  if (message?.resolver === 'RunAIAgentResolver') {
@@ -1512,7 +1514,7 @@ export class AITestHarnessComponent {
1512
1514
  // Update or create the agent run entity from the serialized data
1513
1515
  if (!this.currentAgentRun) {
1514
1516
  // First time - create the entity
1515
- const md = new Metadata();
1517
+ const md = this.ProviderToUse;
1516
1518
  this.currentAgentRun = await md.GetEntityObject('MJ: AI Agent Runs');
1517
1519
  }
1518
1520
  // Load the serialized data into our entity
@@ -1713,7 +1715,7 @@ export class AITestHarnessComponent {
1713
1715
  */
1714
1716
  async loadAvailableConfigurations() {
1715
1717
  try {
1716
- const rv = new RunView();
1718
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1717
1719
  const result = await rv.RunView({
1718
1720
  EntityName: 'MJ: AI Configurations',
1719
1721
  ExtraFilter: `Status IN ('Active', 'Preview')`,
@@ -1839,7 +1841,7 @@ export class AITestHarnessComponent {
1839
1841
  return; // No template to load parameters from
1840
1842
  }
1841
1843
  try {
1842
- const rv = new RunView();
1844
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1843
1845
  const result = await rv.RunView({
1844
1846
  EntityName: 'MJ: Template Params',
1845
1847
  ExtraFilter: `TemplateID='${prompt.TemplateID}'`,
@@ -2093,13 +2095,13 @@ export class AITestHarnessComponent {
2093
2095
  * @param runId - The ID of the agent run to load
2094
2096
  */
2095
2097
  async loadAgentRun(runId) {
2096
- const md = new Metadata();
2098
+ const md = this.ProviderToUse;
2097
2099
  const agentRunEntity = await md.GetEntityObject('MJ: AI Agent Runs');
2098
2100
  await agentRunEntity.Load(runId);
2099
2101
  await this.internalLoadAgenRun(agentRunEntity);
2100
2102
  }
2101
2103
  async loadAgentRunFromData(agentRunData) {
2102
- const md = new Metadata();
2104
+ const md = this.ProviderToUse;
2103
2105
  const agentRunEntity = await md.GetEntityObject('MJ: AI Agent Runs');
2104
2106
  await agentRunEntity.LoadFromData(agentRunData);
2105
2107
  await this.internalLoadAgenRun(agentRunEntity);
@@ -2204,7 +2206,7 @@ export class AITestHarnessComponent {
2204
2206
  this.isExecuting = true;
2205
2207
  // Clear previous execution data when starting a new run
2206
2208
  // Create a proper agent run entity for live tracking
2207
- const md = new Metadata();
2209
+ const md = this.ProviderToUse;
2208
2210
  this.currentAgentRun = await md.GetEntityObject('MJ: AI Agent Runs');
2209
2211
  this.currentAgentRun.ID = `temp-${Date.now()}`;
2210
2212
  this.currentAgentRun.Status = 'Running';
@@ -2231,7 +2233,7 @@ export class AITestHarnessComponent {
2231
2233
  // Initialize execution monitor for live mode - already created above
2232
2234
  try {
2233
2235
  // Get GraphQL data provider
2234
- const dataProvider = Metadata.Provider;
2236
+ const dataProvider = this.ProviderToUse;
2235
2237
  // Build data context - include conversation state if available
2236
2238
  const dataContext = this.buildDataContext();
2237
2239
  const templateData = this.buildTemplateData();
@@ -2408,7 +2410,7 @@ export class AITestHarnessComponent {
2408
2410
  this.startElapsedTimeCounter(assistantMessage);
2409
2411
  try {
2410
2412
  // Get GraphQL data provider
2411
- const dataProvider = Metadata.Provider;
2413
+ const dataProvider = this.ProviderToUse;
2412
2414
  // Build template variables from user input
2413
2415
  const templateVariables = this.buildTemplateVariables();
2414
2416
  // Prepare data context (template variables + user message)
@@ -3754,7 +3756,7 @@ export class AITestHarnessComponent {
3754
3756
  */
3755
3757
  async loadFromPromptRun(promptRunId) {
3756
3758
  console.log('🔄 Loading from prompt run:', promptRunId);
3757
- const md = new Metadata();
3759
+ const md = this.ProviderToUse;
3758
3760
  const promptRun = await md.GetEntityObject('MJ: AI Prompt Runs');
3759
3761
  if (await promptRun.Load(promptRunId)) {
3760
3762
  console.log('✅ Prompt run loaded successfully');
@@ -3849,7 +3851,7 @@ export class AITestHarnessComponent {
3849
3851
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fileInput = _t.first);
3850
3852
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.messageInput = _t.first);
3851
3853
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.saveDialogInput = _t.first);
3852
- } }, inputs: { mode: "mode", entity: "entity", originalPromptRunId: "originalPromptRunId", systemPromptOverride: "systemPromptOverride", aiAgent: "aiAgent", isVisible: "isVisible" }, outputs: { visibilityChange: "visibilityChange", runOpened: "runOpened", minimizeRequested: "minimizeRequested" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 4, vars: 4, consts: [["fileInput", ""], ["messagesContainer", ""], ["messageInput", ""], ["saveDialogInput", ""], [1, "harness-container"], [1, "save-dialog", 3, "Visible", "Width"], [1, "confirm-dialog", 3, "Visible", "Width"], ["Title", "Raw JSON Response", 3, "Visible", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable"], [1, "harness-header"], [1, "agent-info"], [1, "harness-body"], ["direction", "horizontal", 2, "height", "100%", "width", "100%"], [1, "chat-area"], [1, "agent-details"], [1, "entity-logo", 3, "src", "alt"], [3, "class"], [1, "header-actions"], ["title", "Clear conversation", 1, "custom-button", 3, "click", "disabled"], [1, "fa-solid", "fa-broom"], ["title", "Save conversation", 1, "custom-button", 3, "click", "disabled"], [1, "fa-solid", "fa-save"], ["title", "Export conversation", 1, "custom-button", 3, "click", "disabled"], [1, "fa-solid", "fa-download"], ["title", "Import conversation", 1, "custom-button", 3, "click"], [1, "fa-solid", "fa-upload"], ["type", "file", "accept", ".json", 2, "display", "none", 3, "change"], ["title", "Toggle sidebar", 1, "custom-button", "icon-only", 3, "click"], [1, "fa-solid"], [3, "size"], [1, "messages-container"], [1, "empty-state"], [3, "ngClass"], [1, "input-area"], [1, "rerun-mode-container"], [1, "input-container"], [1, "sidebar"], [1, "sidebar-tabs"], [1, "tab-button", 3, "click", "disabled"], [1, "fa-solid", "fa-history"], [1, "badge"], [1, "sidebar-content"], [1, "tab-content"], [1, "tab-content", 2, "padding", "0", "height", "100%"], [1, "tab-content", 2, "overflow-y", "auto"], [1, "fa-solid", "fa-comments"], [1, "message-header"], [1, "message-role"], [1, "message-time"], [1, "execution-time", "streaming"], [1, "execution-time", 3, "title"], ["title", "View raw JSON response", 1, "raw-toggle"], [1, "message-content"], ["title", "Copy message", 1, "copy-button-in-bubble", 3, "click"], [1, "fa-solid", "fa-copy"], [1, "streaming-wrapper"], [3, "innerHTML"], [1, "error-details"], [1, "payload-section", 3, "collapsed"], [1, "fa-solid", "fa-user"], [1, "message-role-logo", 3, "src", "alt"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["title", "View raw JSON response", 1, "raw-toggle", 3, "click"], [1, "fa-solid", "fa-code"], [1, "streaming-content", 3, "innerHTML"], [1, "cursor"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "payload-section"], [1, "payload-header", 3, "click"], [1, "payload-label"], ["type", "button", 1, "payload-toggle"], [1, "payload-content"], [2, "height", "300px", "width", "100%", 3, "ngModel", "language", "readonly"], [1, "rerun-message"], [1, "fa-solid", "fa-rotate-right"], [1, "rerun-buttons"], ["title", "Re-run with loaded messages", 1, "send-button", "rerun-button", 3, "disabled"], ["title", "Reset conversation messages to the original state from the prompt run. Model settings and parameters will be preserved.", 1, "send-button", "reset-button", 3, "disabled"], ["title", "Re-run with loaded messages", 1, "send-button", "rerun-button", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["title", "Reset conversation messages to the original state from the prompt run. Model settings and parameters will be preserved.", 1, "send-button", "reset-button", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate-left"], ["placeholder", "Type your message here... (Press Enter to send, Shift+Enter for new line)", 1, "mj-textarea", "message-input", 3, "ngModelChange", "keypress", "ngModel", "rows", "disabled"], ["title", "Send message", 1, "send-button", 3, "click", "disabled"], [1, "fa-solid", "fa-paper-plane"], [1, "tab-button", 3, "click"], [1, "fa-solid", "fa-diagram-project"], [1, "fa-solid", "fa-sliders"], [1, "tab-header"], [1, "variables-list"], [1, "empty-variables"], [1, "variable-item"], [1, "add-button", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], ["type", "text", "placeholder", "Variable name", 1, "mj-input", "variable-name", 3, "ngModelChange", "ngModel", "disabled"], ["TextField", "text", "ValueField", "value", 1, "variable-type", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Disabled"], ["type", "text", 1, "mj-input", "variable-value", 3, "ngModelChange", "ngModel", "placeholder", "disabled"], ["title", "Remove variable", 1, "remove-button", 3, "click", "disabled"], [1, "fa-solid", "fa-times"], [3, "viewRunClick", "mode", "agentRun", "liveSteps", "autoExpand", "runId", "runType"], [1, "model-settings"], [1, "setting-group"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a configuration...", 1, "configuration-selector", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [1, "setting-help"], [1, "add-button", 3, "click"], ["title", "Remove variable", 1, "remove-button", 3, "click"], ["title", "Reset to Prompt Settings", 1, "custom-button", "icon-only", 3, "click"], [1, "fa-solid", "fa-undo"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 1, "model-selector", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a vendor...", 1, "vendor-selector", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Disabled"], ["TextField", "text", "ValueField", "value", "Placeholder", "Select format...", 1, "format-selector", 3, "ngModelChange", "ngModel", "Data"], ["Placeholder", "Max tokens...", 1, "max-tokens-input", 3, "ngModelChange", "ngModel", "Min", "Max", "Step"], [1, "checkbox-label"], ["type", "checkbox", 1, "skip-validation-checkbox", 3, "ngModelChange", "ngModel"], [1, "advanced-params-panel", 3, "Title", "Expanded"], [1, "advanced-settings"], ["title", "Controls randomness: 0 = more focused and deterministic, 2 = more random and creative"], ["Placeholder", "None", 1, "advanced-param-input", 3, "ngModelChange", "ngModel", "Min", "Max", "Step", "Format"], ["title", "Nucleus sampling: only consider tokens with cumulative probability up to this value. 1 = consider all tokens"], ["title", "Only sample from the top K tokens. Lower values reduce randomness"], ["title", "Minimum probability for token selection. Filters out low-probability tokens"], ["title", "Penalizes tokens based on their frequency in the text. Positive values reduce repetition"], ["title", "Penalizes tokens that have appeared in the text. Positive values increase topic diversity"], ["title", "Random seed for deterministic generation. Same seed produces same output"], ["Placeholder", "None", 1, "advanced-param-input", 3, "ngModelChange", "ngModel", "Format"], ["title", "Sequences that will stop generation when encountered. Enter comma-separated values"], ["placeholder", "Enter comma-separated sequences", 1, "mj-textarea", "advanced-param-input", 3, "ngModelChange", "ngModel", "rows"], ["title", "Include log probabilities of the output tokens in the response"], [1, "advanced-param-switch", 3, "ngModelChange", "ngModel"], ["title", "Number of top log probabilities to include for each token"], ["Placeholder", "2", 1, "advanced-param-input", 3, "ngModelChange", "ngModel", "Min", "Max", "Step", "Format"], ["title", "Start a new conversation", 1, "custom-button", "small", "primary"], [1, "saved-list"], [1, "empty-saved"], [1, "saved-item", 3, "current"], ["title", "Start a new conversation", 1, "custom-button", "small", "primary", 3, "click"], [1, "fa-solid", "fa-folder-open"], [1, "saved-item", 3, "click"], [1, "saved-info"], [1, "saved-date"], ["title", "Delete conversation", 1, "delete-button", 3, "click"], [1, "fa-solid", "fa-trash"], ["title", "View execution details", 1, "execution-history-toggle"], ["title", "View full run details", 1, "execution-history-toggle"], [1, "fa-solid", "fa-robot"], ["title", "View execution details", 1, "execution-history-toggle", 3, "click"], ["title", "View full run details", 1, "execution-history-toggle", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "streaming-content"], [1, "save-dialog", 3, "Close", "Visible", "Width"], [1, "dialog-content"], ["type", "text", "placeholder", "Conversation name", 1, "mj-input", "full-width", 3, "keyup"], ["mjButton", "", 3, "click"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "confirm-dialog", 3, "Close", "Visible", "Width"], ["mjButton", "", "variant", "primary", 3, "click"], ["Title", "Raw JSON Response", 3, "Close", "Visible", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable"], [3, "jsonContent"]], template: function AITestHarnessComponent_Template(rf, ctx) { if (rf & 1) {
3854
+ } }, inputs: { mode: "mode", entity: "entity", originalPromptRunId: "originalPromptRunId", systemPromptOverride: "systemPromptOverride", aiAgent: "aiAgent", isVisible: "isVisible" }, outputs: { visibilityChange: "visibilityChange", runOpened: "runOpened", minimizeRequested: "minimizeRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 4, vars: 4, consts: [["fileInput", ""], ["messagesContainer", ""], ["messageInput", ""], ["saveDialogInput", ""], [1, "harness-container"], [1, "save-dialog", 3, "Visible", "Width"], [1, "confirm-dialog", 3, "Visible", "Width"], ["Title", "Raw JSON Response", 3, "Visible", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable"], [1, "harness-header"], [1, "agent-info"], [1, "harness-body"], ["direction", "horizontal", 2, "height", "100%", "width", "100%"], [1, "chat-area"], [1, "agent-details"], [1, "entity-logo", 3, "src", "alt"], [3, "class"], [1, "header-actions"], ["title", "Clear conversation", 1, "custom-button", 3, "click", "disabled"], [1, "fa-solid", "fa-broom"], ["title", "Save conversation", 1, "custom-button", 3, "click", "disabled"], [1, "fa-solid", "fa-save"], ["title", "Export conversation", 1, "custom-button", 3, "click", "disabled"], [1, "fa-solid", "fa-download"], ["title", "Import conversation", 1, "custom-button", 3, "click"], [1, "fa-solid", "fa-upload"], ["type", "file", "accept", ".json", 2, "display", "none", 3, "change"], ["title", "Toggle sidebar", 1, "custom-button", "icon-only", 3, "click"], [1, "fa-solid"], [3, "size"], [1, "messages-container"], [1, "empty-state"], [3, "ngClass"], [1, "input-area"], [1, "rerun-mode-container"], [1, "input-container"], [1, "sidebar"], [1, "sidebar-tabs"], [1, "tab-button", 3, "click", "disabled"], [1, "fa-solid", "fa-history"], [1, "badge"], [1, "sidebar-content"], [1, "tab-content"], [1, "tab-content", 2, "padding", "0", "height", "100%"], [1, "tab-content", 2, "overflow-y", "auto"], [1, "fa-solid", "fa-comments"], [1, "message-header"], [1, "message-role"], [1, "message-time"], [1, "execution-time", "streaming"], [1, "execution-time", 3, "title"], ["title", "View raw JSON response", 1, "raw-toggle"], [1, "message-content"], ["title", "Copy message", 1, "copy-button-in-bubble", 3, "click"], [1, "fa-solid", "fa-copy"], [1, "streaming-wrapper"], [3, "innerHTML"], [1, "error-details"], [1, "payload-section", 3, "collapsed"], [1, "fa-solid", "fa-user"], [1, "message-role-logo", 3, "src", "alt"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["title", "View raw JSON response", 1, "raw-toggle", 3, "click"], [1, "fa-solid", "fa-code"], [1, "streaming-content", 3, "innerHTML"], [1, "cursor"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "payload-section"], [1, "payload-header", 3, "click"], [1, "payload-label"], ["type", "button", 1, "payload-toggle"], [1, "payload-content"], [2, "height", "300px", "width", "100%", 3, "ngModel", "language", "readonly"], [1, "rerun-message"], [1, "fa-solid", "fa-rotate-right"], [1, "rerun-buttons"], ["title", "Re-run with loaded messages", 1, "send-button", "rerun-button", 3, "disabled"], ["title", "Reset conversation messages to the original state from the prompt run. Model settings and parameters will be preserved.", 1, "send-button", "reset-button", 3, "disabled"], ["title", "Re-run with loaded messages", 1, "send-button", "rerun-button", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["title", "Reset conversation messages to the original state from the prompt run. Model settings and parameters will be preserved.", 1, "send-button", "reset-button", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate-left"], ["placeholder", "Type your message here... (Press Enter to send, Shift+Enter for new line)", 1, "mj-textarea", "message-input", 3, "ngModelChange", "keypress", "ngModel", "rows", "disabled"], ["title", "Send message", 1, "send-button", 3, "click", "disabled"], [1, "fa-solid", "fa-paper-plane"], [1, "tab-button", 3, "click"], [1, "fa-solid", "fa-diagram-project"], [1, "fa-solid", "fa-sliders"], [1, "tab-header"], [1, "variables-list"], [1, "empty-variables"], [1, "variable-item"], [1, "add-button", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], ["type", "text", "placeholder", "Variable name", 1, "mj-input", "variable-name", 3, "ngModelChange", "ngModel", "disabled"], ["TextField", "text", "ValueField", "value", 1, "variable-type", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Disabled"], ["type", "text", 1, "mj-input", "variable-value", 3, "ngModelChange", "ngModel", "placeholder", "disabled"], ["title", "Remove variable", 1, "remove-button", 3, "click", "disabled"], [1, "fa-solid", "fa-times"], [3, "viewRunClick", "mode", "agentRun", "liveSteps", "autoExpand", "runId", "runType"], [1, "model-settings"], [1, "setting-group"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a configuration...", 1, "configuration-selector", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [1, "setting-help"], [1, "add-button", 3, "click"], ["title", "Remove variable", 1, "remove-button", 3, "click"], ["title", "Reset to Prompt Settings", 1, "custom-button", "icon-only", 3, "click"], [1, "fa-solid", "fa-undo"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 1, "model-selector", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a vendor...", 1, "vendor-selector", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Disabled"], ["TextField", "text", "ValueField", "value", "Placeholder", "Select format...", 1, "format-selector", 3, "ngModelChange", "ngModel", "Data"], ["Placeholder", "Max tokens...", 1, "max-tokens-input", 3, "ngModelChange", "ngModel", "Min", "Max", "Step"], [1, "checkbox-label"], ["type", "checkbox", 1, "skip-validation-checkbox", 3, "ngModelChange", "ngModel"], [1, "advanced-params-panel", 3, "Title", "Expanded"], [1, "advanced-settings"], ["title", "Controls randomness: 0 = more focused and deterministic, 2 = more random and creative"], ["Placeholder", "None", 1, "advanced-param-input", 3, "ngModelChange", "ngModel", "Min", "Max", "Step", "Format"], ["title", "Nucleus sampling: only consider tokens with cumulative probability up to this value. 1 = consider all tokens"], ["title", "Only sample from the top K tokens. Lower values reduce randomness"], ["title", "Minimum probability for token selection. Filters out low-probability tokens"], ["title", "Penalizes tokens based on their frequency in the text. Positive values reduce repetition"], ["title", "Penalizes tokens that have appeared in the text. Positive values increase topic diversity"], ["title", "Random seed for deterministic generation. Same seed produces same output"], ["Placeholder", "None", 1, "advanced-param-input", 3, "ngModelChange", "ngModel", "Format"], ["title", "Sequences that will stop generation when encountered. Enter comma-separated values"], ["placeholder", "Enter comma-separated sequences", 1, "mj-textarea", "advanced-param-input", 3, "ngModelChange", "ngModel", "rows"], ["title", "Include log probabilities of the output tokens in the response"], [1, "advanced-param-switch", 3, "ngModelChange", "ngModel"], ["title", "Number of top log probabilities to include for each token"], ["Placeholder", "2", 1, "advanced-param-input", 3, "ngModelChange", "ngModel", "Min", "Max", "Step", "Format"], ["title", "Start a new conversation", 1, "custom-button", "small", "primary"], [1, "saved-list"], [1, "empty-saved"], [1, "saved-item", 3, "current"], ["title", "Start a new conversation", 1, "custom-button", "small", "primary", 3, "click"], [1, "fa-solid", "fa-folder-open"], [1, "saved-item", 3, "click"], [1, "saved-info"], [1, "saved-date"], ["title", "Delete conversation", 1, "delete-button", 3, "click"], [1, "fa-solid", "fa-trash"], ["title", "View execution details", 1, "execution-history-toggle"], ["title", "View full run details", 1, "execution-history-toggle"], [1, "fa-solid", "fa-robot"], ["title", "View execution details", 1, "execution-history-toggle", 3, "click"], ["title", "View full run details", 1, "execution-history-toggle", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "streaming-content"], [1, "save-dialog", 3, "Close", "Visible", "Width"], [1, "dialog-content"], ["type", "text", "placeholder", "Conversation name", 1, "mj-input", "full-width", 3, "keyup"], ["mjButton", "", 3, "click"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "confirm-dialog", 3, "Close", "Visible", "Width"], ["mjButton", "", "variant", "primary", 3, "click"], ["Title", "Raw JSON Response", 3, "Close", "Visible", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable"], [3, "jsonContent"]], template: function AITestHarnessComponent_Template(rf, ctx) { if (rf & 1) {
3853
3855
  i0.ɵɵconditionalCreate(0, AITestHarnessComponent_Conditional_0_Template, 6, 2, "div", 4);
3854
3856
  i0.ɵɵconditionalCreate(1, AITestHarnessComponent_Conditional_1_Template, 13, 3, "mj-dialog", 5);
3855
3857
  i0.ɵɵconditionalCreate(2, AITestHarnessComponent_Conditional_2_Template, 13, 2, "mj-dialog", 6);
@@ -3898,5 +3900,5 @@ export class AITestHarnessComponent {
3898
3900
  type: ViewChild,
3899
3901
  args: ['saveDialogInput']
3900
3902
  }] }); })();
3901
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AITestHarnessComponent, { className: "AITestHarnessComponent", filePath: "lib/ai-test-harness.component.ts", lineNumber: 153 }); })();
3903
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AITestHarnessComponent, { className: "AITestHarnessComponent", filePath: "lib/ai-test-harness.component.ts", lineNumber: 154 }); })();
3902
3904
  //# sourceMappingURL=ai-test-harness.component.js.map