@memberjunction/ng-dashboards 5.26.0 → 5.27.1

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.
Files changed (98) hide show
  1. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +96 -0
  2. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -0
  3. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +710 -0
  4. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -0
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +52 -0
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -0
  7. package/dist/AI/components/analytics/ai-analytics-resource.component.js +356 -0
  8. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -0
  9. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +52 -0
  10. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -0
  11. package/dist/AI/components/analytics/analytics-filter-bar.component.js +306 -0
  12. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -0
  13. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +81 -0
  14. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -0
  15. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +744 -0
  16. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -0
  17. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +61 -0
  18. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -0
  19. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +490 -0
  20. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -0
  21. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +77 -0
  22. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -0
  23. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +673 -0
  24. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -0
  25. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +65 -0
  26. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -0
  27. package/dist/AI/components/analytics/model-performance/model-performance.component.js +537 -0
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -0
  29. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +131 -0
  30. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -0
  31. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +1030 -0
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -0
  33. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +78 -0
  34. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -0
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +569 -0
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -0
  37. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  38. package/dist/AI/components/execution-monitoring.component.js +4 -14
  39. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  40. package/dist/AI/components/overview/ai-overview-hub.component.d.ts +58 -0
  41. package/dist/AI/components/overview/ai-overview-hub.component.d.ts.map +1 -0
  42. package/dist/AI/components/overview/ai-overview-hub.component.js +315 -0
  43. package/dist/AI/components/overview/ai-overview-hub.component.js.map +1 -0
  44. package/dist/AI/components/prompts/prompt-management.component.js +1 -1
  45. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  46. package/dist/AI/index.d.ts +11 -0
  47. package/dist/AI/index.d.ts.map +1 -1
  48. package/dist/AI/index.js +13 -0
  49. package/dist/AI/index.js.map +1 -1
  50. package/dist/AI/interfaces/analytics-preferences.interface.d.ts +50 -0
  51. package/dist/AI/interfaces/analytics-preferences.interface.d.ts.map +1 -0
  52. package/dist/AI/interfaces/analytics-preferences.interface.js +9 -0
  53. package/dist/AI/interfaces/analytics-preferences.interface.js.map +1 -0
  54. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  55. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +1 -1
  56. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  57. package/dist/Home/home-dashboard.component.js +2 -2
  58. package/dist/MCP/index.d.ts +1 -0
  59. package/dist/MCP/index.d.ts.map +1 -1
  60. package/dist/MCP/index.js +2 -0
  61. package/dist/MCP/index.js.map +1 -1
  62. package/dist/MCP/mcp-dashboard.component.d.ts +1 -0
  63. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  64. package/dist/MCP/mcp-dashboard.component.js +5 -4
  65. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  66. package/dist/MCP/mcp-resource.component.d.ts +6 -5
  67. package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
  68. package/dist/MCP/mcp-resource.component.js +7 -8
  69. package/dist/MCP/mcp-resource.component.js.map +1 -1
  70. package/dist/ai-dashboards.module.d.ts +27 -17
  71. package/dist/ai-dashboards.module.d.ts.map +1 -1
  72. package/dist/ai-dashboards.module.js +66 -3
  73. package/dist/ai-dashboards.module.js.map +1 -1
  74. package/dist/public-api.d.ts +1 -1
  75. package/dist/public-api.d.ts.map +1 -1
  76. package/dist/public-api.js +1 -1
  77. package/dist/public-api.js.map +1 -1
  78. package/package.json +48 -48
  79. package/dist/__tests__/analytics-resource.test.d.ts +0 -2
  80. package/dist/__tests__/analytics-resource.test.d.ts.map +0 -1
  81. package/dist/__tests__/analytics-resource.test.js +0 -181
  82. package/dist/__tests__/analytics-resource.test.js.map +0 -1
  83. package/dist/__tests__/dashboards.test.d.ts +0 -2
  84. package/dist/__tests__/dashboards.test.d.ts.map +0 -1
  85. package/dist/__tests__/dashboards.test.js +0 -40
  86. package/dist/__tests__/dashboards.test.js.map +0 -1
  87. package/dist/__tests__/integration-data-service.test.d.ts +0 -2
  88. package/dist/__tests__/integration-data-service.test.d.ts.map +0 -1
  89. package/dist/__tests__/integration-data-service.test.js +0 -132
  90. package/dist/__tests__/integration-data-service.test.js.map +0 -1
  91. package/dist/__tests__/mapping-validation.test.d.ts +0 -2
  92. package/dist/__tests__/mapping-validation.test.d.ts.map +0 -1
  93. package/dist/__tests__/mapping-validation.test.js +0 -170
  94. package/dist/__tests__/mapping-validation.test.js.map +0 -1
  95. package/dist/__tests__/scheduling.test.d.ts +0 -2
  96. package/dist/__tests__/scheduling.test.d.ts.map +0 -1
  97. package/dist/__tests__/scheduling.test.js +0 -205
  98. package/dist/__tests__/scheduling.test.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executive-summary.component.js","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/executive-summary/executive-summary.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component, Input, Output, EventEmitter, OnInit, OnDestroy,\n ChangeDetectorRef, inject\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n AIInstrumentationService,\n DashboardKPIs,\n TrendData,\n ChartData\n} from '../../../services/ai-instrumentation.service';\nimport { GlobalFilterState } from '../../../interfaces/analytics-preferences.interface';\nimport { TimeSeriesConfig } from '../../charts/time-series-chart.component';\n\n// ─── Local Interfaces ──────────────────────────────────────────────\n\ninterface KpiDisplayCard {\n Label: string;\n Value: string;\n SparklineData: number[];\n DeltaPercent: number;\n DeltaDirection: 'up' | 'down' | 'stable';\n IsImprovement: boolean;\n BorderColor: string;\n}\n\ninterface TopConsumer {\n Rank: number;\n Type: 'agent' | 'prompt';\n Name: string;\n Cost: number;\n Proportion: number;\n}\n\ninterface ErrorHotspot {\n Source: string;\n ErrorMessage: string;\n Count: number;\n}\n\n// ─── Component ─────────────────────────────────────────────────────\n\n@Component({\n standalone: false,\n selector: 'app-analytics-executive-summary',\n template: `\n <!-- Filter Bar -->\n <app-analytics-filter-bar\n [TimeRange]=\"TimeRange\"\n [Filters]=\"Filters\"\n [ShowCompareToggle]=\"true\"\n [ShowModelFilter]=\"false\"\n [ShowAgentFilter]=\"false\"\n [ShowPromptFilter]=\"false\"\n [ShowStatusFilter]=\"false\"\n (TimeRangeChange)=\"OnTimeRangeChange($event)\"\n (FiltersChange)=\"OnFiltersChange($event)\"\n (CompareToggled)=\"OnCompareToggled($event)\"\n ></app-analytics-filter-bar>\n\n @if (IsLoading && KpiCards.length === 0) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading executive summary...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- KPI Row -->\n <div class=\"kpi-row\">\n @for (card of KpiCards; track card.Label) {\n <div class=\"kpi-card\" [style.border-left-color]=\"card.BorderColor\">\n <div class=\"kpi-label\">{{ card.Label }}</div>\n <div class=\"kpi-value\">{{ card.Value }}</div>\n <div class=\"kpi-sparkline\">\n @for (bar of card.SparklineData; track $index) {\n <div\n class=\"spark-bar\"\n [style.height.%]=\"bar\"\n [style.background]=\"card.BorderColor\"\n ></div>\n }\n </div>\n @if (ComparisonEnabled && card.DeltaDirection !== 'stable') {\n <div class=\"kpi-delta\" [class.kpi-delta--good]=\"card.IsImprovement\" [class.kpi-delta--bad]=\"!card.IsImprovement\">\n <i [class]=\"card.DeltaDirection === 'up' ? 'fa-solid fa-arrow-up' : 'fa-solid fa-arrow-down'\"></i>\n {{ card.DeltaPercent | number:'1.1-1' }}%\n <span class=\"kpi-delta__period\">vs prev {{ PeriodLabel }}</span>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Execution Trends Chart -->\n <div class=\"trends-panel\">\n <app-time-series-chart\n [data]=\"TrendsData\"\n title=\"Execution Trends\"\n [config]=\"TimeSeriesConfig\"\n ></app-time-series-chart>\n </div>\n\n <!-- Two-Column Panels -->\n <div class=\"panels-grid\">\n <!-- Top Consumers -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-header__title\">\n <i class=\"fa-solid fa-ranking-star panel-header__icon\"></i>\n Top Consumers\n </div>\n <span class=\"panel-header__subtitle\">by cost</span>\n </div>\n <div class=\"panel-body\">\n @if (TopConsumers.length === 0) {\n <div class=\"panel-empty\">No data for selected period</div>\n }\n @for (item of TopConsumers; track item.Name) {\n <div\n class=\"consumer-item\"\n (click)=\"OnConsumerClick(item)\"\n role=\"button\"\n tabindex=\"0\"\n (keydown.enter)=\"OnConsumerClick(item)\"\n >\n <div\n class=\"consumer-rank\"\n [class.consumer-rank--top]=\"item.Rank <= 3\"\n >{{ item.Rank }}</div>\n <div\n class=\"consumer-type-pill\"\n [class.consumer-type-pill--agent]=\"item.Type === 'agent'\"\n >{{ item.Type }}</div>\n <div class=\"consumer-name\" [title]=\"item.Name\">{{ item.Name }}</div>\n <div class=\"consumer-cost\">\\${{ FormatCost(item.Cost) }}</div>\n <div class=\"consumer-bar-container\">\n <div\n class=\"consumer-bar\"\n [style.width.%]=\"item.Proportion * 100\"\n ></div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Error Hotspots -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-header__title\">\n <i class=\"fa-solid fa-triangle-exclamation panel-header__icon panel-header__icon--error\"></i>\n Error Hotspots\n </div>\n <span class=\"panel-header__subtitle\">\n {{ ErrorHotspots.length }} source{{ ErrorHotspots.length !== 1 ? 's' : '' }}\n </span>\n </div>\n <div class=\"panel-body\">\n @if (ErrorHotspots.length === 0) {\n <div class=\"panel-empty\">No errors in selected period</div>\n }\n @for (item of ErrorHotspots; track item.Source) {\n <div class=\"error-item\">\n <div class=\"error-icon\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n </div>\n <div class=\"error-info\">\n <div class=\"error-source\">{{ item.Source }}</div>\n <div class=\"error-message\" [title]=\"item.ErrorMessage\">{{ item.ErrorMessage }}</div>\n </div>\n <div class=\"error-count\">{{ item.Count }}</div>\n </div>\n }\n @if (ErrorHotspots.length > 0) {\n <button class=\"view-all-link\" (click)=\"SectionNavigate.emit('error-analysis')\">\n View All Errors <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n `,\n styles: [`\n /* ─── Host ────────────────────────────────────────────────── */\n :host {\n display: flex;\n flex-direction: column;\n gap: 20px;\n padding: 4px;\n }\n\n /* ─── Loading ─────────────────────────────────────────────── */\n .loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n }\n\n /* ─── KPI Row ─────────────────────────────────────────────── */\n .kpi-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 14px;\n }\n .kpi-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-left: 4px solid var(--mj-brand-primary);\n border-radius: 12px;\n padding: 16px 18px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n transition: all 0.25s ease;\n }\n .kpi-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n }\n .kpi-label {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.6px;\n color: var(--mj-text-muted);\n }\n .kpi-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n letter-spacing: -0.02em;\n }\n\n /* ─── Sparkline ───────────────────────────────────────────── */\n .kpi-sparkline {\n display: flex;\n align-items: flex-end;\n gap: 2px;\n height: 24px;\n margin-top: 4px;\n }\n .spark-bar {\n flex: 1;\n min-width: 4px;\n max-width: 8px;\n border-radius: 1px;\n opacity: 0.35;\n transition: opacity 0.15s ease;\n }\n .kpi-card:hover .spark-bar {\n opacity: 0.55;\n }\n\n /* ─── Delta Badge ─────────────────────────────────────────── */\n .kpi-delta {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 600;\n margin-top: 2px;\n }\n .kpi-delta--good {\n color: var(--mj-status-success);\n }\n .kpi-delta--bad {\n color: var(--mj-status-error);\n }\n .kpi-delta__period {\n font-weight: 400;\n color: var(--mj-text-disabled);\n }\n\n /* ─── Trends Panel ────────────────────────────────────────── */\n .trends-panel {\n height: 320px;\n border-radius: 12px;\n overflow: hidden;\n }\n\n /* ─── Panels Grid ─────────────────────────────────────────── */\n .panels-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n }\n .panel {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n }\n .panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 18px;\n border-bottom: 1px solid var(--mj-border-subtle);\n }\n .panel-header__title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n .panel-header__icon {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n .panel-header__icon--error {\n color: var(--mj-status-warning);\n }\n .panel-header__subtitle {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n .panel-body {\n padding: 8px 0;\n }\n .panel-empty {\n padding: 24px 18px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-disabled);\n }\n\n /* ─── Consumer Item ───────────────────────────────────────── */\n .consumer-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 18px;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n .consumer-item:hover {\n background: var(--mj-bg-surface-hover);\n }\n .consumer-rank {\n width: 22px;\n height: 22px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: 700;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n flex-shrink: 0;\n }\n .consumer-rank--top {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n .consumer-type-pill {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n flex-shrink: 0;\n }\n .consumer-type-pill--agent {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .consumer-name {\n flex: 1;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .consumer-cost {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n .consumer-bar-container {\n width: 60px;\n height: 6px;\n border-radius: 3px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n flex-shrink: 0;\n }\n .consumer-bar {\n height: 100%;\n border-radius: 3px;\n background: var(--mj-brand-primary);\n transition: width 0.3s ease;\n }\n\n /* ─── Error Item ──────────────────────────────────────────── */\n .error-item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 18px;\n }\n .error-icon {\n color: var(--mj-status-error);\n font-size: 14px;\n margin-top: 2px;\n flex-shrink: 0;\n }\n .error-info {\n flex: 1;\n min-width: 0;\n }\n .error-source {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n }\n .error-message {\n font-size: 12px;\n color: var(--mj-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .error-count {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-status-error);\n flex-shrink: 0;\n min-width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n }\n .view-all-link {\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 8px 18px 10px;\n padding: 0;\n border: none;\n background: none;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n }\n .view-all-link:hover {\n color: var(--mj-brand-primary-hover);\n }\n\n /* ─── Responsive ──────────────────────────────────────────── */\n @media (max-width: 1200px) {\n .panels-grid {\n grid-template-columns: 1fr;\n }\n }\n @media (max-width: 768px) {\n .kpi-row {\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n }\n .trends-panel {\n height: 260px;\n }\n }\n `]\n})\nexport class AnalyticsExecutiveSummaryComponent implements OnInit, OnDestroy {\n // ─── Inputs / Outputs ────────────────────────────────────────────\n\n private _timeRange = '24h';\n @Input()\n set TimeRange(value: string) {\n if (value !== this._timeRange) {\n this._timeRange = value;\n if (this.isInitialized) {\n this.applyDateRange();\n }\n }\n }\n get TimeRange(): string { return this._timeRange; }\n\n @Input() Filters: GlobalFilterState = { Models: [], Agents: [], Prompts: [], Statuses: [] };\n\n @Output() TimeRangeChange = new EventEmitter<string>();\n @Output() FiltersChange = new EventEmitter<GlobalFilterState>();\n @Output() SectionNavigate = new EventEmitter<string>();\n\n // ─── DI ──────────────────────────────────────────────────────────\n\n private instrumentationService = inject(AIInstrumentationService);\n private cdr = inject(ChangeDetectorRef);\n\n // ─── Public State ────────────────────────────────────────────────\n\n KpiCards: KpiDisplayCard[] = [];\n TrendsData: TrendData[] = [];\n TopConsumers: TopConsumer[] = [];\n ErrorHotspots: ErrorHotspot[] = [];\n IsLoading = false;\n ComparisonEnabled = false;\n PeriodLabel = 'period';\n\n TimeSeriesConfig: TimeSeriesConfig = {\n showGrid: true,\n showTooltip: true,\n animationDuration: 300,\n useDualAxis: true\n };\n\n // ─── Private State ───────────────────────────────────────────────\n\n private destroy$ = new Subject<void>();\n private isInitialized = false;\n private previousKpis: DashboardKPIs | null = null;\n\n // ─── Lifecycle ───────────────────────────────────────────────────\n\n ngOnInit(): void {\n this.subscribeToStreams();\n this.applyDateRange();\n this.isInitialized = true;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ─── Event Handlers ──────────────────────────────────────────────\n\n OnTimeRangeChange(range: string): void {\n this.TimeRange = range;\n this.TimeRangeChange.emit(range);\n }\n\n OnFiltersChange(filters: GlobalFilterState): void {\n this.Filters = filters;\n this.FiltersChange.emit(filters);\n }\n\n OnCompareToggled(active: boolean): void {\n this.ComparisonEnabled = active;\n if (this.ComparisonEnabled) {\n this.loadComparisonData();\n } else {\n this.previousKpis = null;\n this.rebuildKpiCards(this.latestKpis);\n }\n }\n\n OnRefresh(): void {\n this.instrumentationService.refresh();\n if (this.ComparisonEnabled) {\n this.loadComparisonData();\n }\n }\n\n OnConsumerClick(item: TopConsumer): void {\n this.SectionNavigate.emit(item.Type === 'agent' ? 'agent-runs' : 'prompt-runs');\n }\n\n // ─── Formatting Helpers ──────────────────────────────────────────\n\n FormatCost(cost: number): string {\n if (cost >= 1000) {\n return (cost / 1000).toFixed(1) + 'K';\n }\n if (cost >= 1) {\n return cost.toFixed(2);\n }\n return cost.toFixed(4);\n }\n\n // ─── Private: Subscriptions ──────────────────────────────────────\n\n private latestKpis: DashboardKPIs | null = null;\n\n private subscribeToStreams(): void {\n this.instrumentationService.isLoading$\n .pipe(takeUntil(this.destroy$))\n .subscribe(loading => {\n this.IsLoading = loading;\n this.cdr.markForCheck();\n });\n\n this.instrumentationService.kpis$\n .pipe(takeUntil(this.destroy$))\n .subscribe(kpis => {\n this.latestKpis = kpis;\n this.rebuildKpiCards(kpis);\n this.cdr.markForCheck();\n });\n\n this.instrumentationService.trends$\n .pipe(takeUntil(this.destroy$))\n .subscribe(trends => {\n this.TrendsData = trends;\n this.cdr.markForCheck();\n });\n\n this.instrumentationService.chartData$\n .pipe(takeUntil(this.destroy$))\n .subscribe(chartData => {\n this.TopConsumers = this.buildTopConsumers(chartData);\n this.ErrorHotspots = this.buildErrorHotspots(chartData);\n this.cdr.markForCheck();\n });\n }\n\n // ─── Private: Date Range ─────────────────────────────────────────\n\n private applyDateRange(): void {\n const { start, end } = this.computeDateRange(this.TimeRange);\n this.PeriodLabel = this.getPeriodLabel(this.TimeRange);\n this.instrumentationService.setDateRange(start, end);\n // Explicitly refresh to ensure data loads on first visit\n this.instrumentationService.refresh();\n }\n\n private computeDateRange(range: string): { start: Date; end: Date } {\n const end = new Date();\n const start = new Date();\n switch (range) {\n case '1h':\n start.setHours(start.getHours() - 1);\n break;\n case '24h':\n start.setDate(start.getDate() - 1);\n break;\n case '7d':\n start.setDate(start.getDate() - 7);\n break;\n case '30d':\n start.setDate(start.getDate() - 30);\n break;\n case '90d':\n start.setDate(start.getDate() - 90);\n break;\n default:\n start.setDate(start.getDate() - 1);\n }\n return { start, end };\n }\n\n private getPeriodLabel(range: string): string {\n switch (range) {\n case '1h': return 'hour';\n case '24h': return 'day';\n case '7d': return 'week';\n case '30d': return 'month';\n case '90d': return 'quarter';\n default: return 'period';\n }\n }\n\n // ─── Private: Comparison Data ────────────────────────────────────\n\n private async loadComparisonData(): Promise<void> {\n const { start: currentStart, end: currentEnd } = this.computeDateRange(this.TimeRange);\n const durationMs = currentEnd.getTime() - currentStart.getTime();\n const prevEnd = new Date(currentStart.getTime());\n const prevStart = new Date(prevEnd.getTime() - durationMs);\n\n // Temporarily set date range to previous period, capture KPIs, then restore\n const previousService = new AIInstrumentationService();\n previousService.setDateRange(prevStart, prevEnd);\n\n // We subscribe to the previousService's kpis$ once\n const sub: Subscription = previousService.kpis$\n .pipe(takeUntil(this.destroy$))\n .subscribe(kpis => {\n this.previousKpis = kpis;\n this.rebuildKpiCards(this.latestKpis);\n this.cdr.markForCheck();\n sub.unsubscribe();\n });\n }\n\n // ─── Private: KPI Card Builder ───────────────────────────────────\n\n private rebuildKpiCards(kpis: DashboardKPIs | null): void {\n if (!kpis) {\n this.KpiCards = [];\n return;\n }\n\n const trends = this.TrendsData;\n this.KpiCards = [\n this.buildKpiCard(\n 'Total Executions', this.formatNumber(kpis.totalExecutions),\n this.extractSparkline(trends, 'executions'),\n kpis.totalExecutions, this.previousKpis?.totalExecutions ?? null,\n 'up-is-neutral', 'var(--mj-brand-primary)'\n ),\n this.buildKpiCard(\n 'Total Cost', '$' + this.FormatCost(kpis.totalCost),\n this.extractSparkline(trends, 'cost'),\n kpis.totalCost, this.previousKpis?.totalCost ?? null,\n 'down-is-good', 'var(--mj-status-warning)'\n ),\n this.buildKpiCard(\n 'Success Rate', (kpis.successRate * 100).toFixed(1) + '%',\n this.extractSparkline(trends, 'executions'),\n kpis.successRate, this.previousKpis?.successRate ?? null,\n 'up-is-good', 'var(--mj-status-success)'\n ),\n this.buildKpiCard(\n 'Avg Latency', this.formatLatency(kpis.avgExecutionTime),\n this.extractSparkline(trends, 'avgTime'),\n kpis.avgExecutionTime, this.previousKpis?.avgExecutionTime ?? null,\n 'down-is-good', 'var(--mj-status-info)'\n ),\n this.buildKpiCard(\n 'Token Usage', this.formatNumber(kpis.totalTokens),\n this.extractSparkline(trends, 'tokens'),\n kpis.totalTokens, this.previousKpis?.totalTokens ?? null,\n 'up-is-neutral', 'var(--mj-brand-accent, var(--mj-brand-primary))'\n ),\n this.buildKpiCard(\n 'Errors', this.formatNumber(Math.round(kpis.errorRate * kpis.totalExecutions)),\n this.extractSparkline(trends, 'errors'),\n kpis.errorRate, this.previousKpis?.errorRate ?? null,\n 'down-is-good', 'var(--mj-status-error)'\n )\n ];\n }\n\n private buildKpiCard(\n label: string,\n value: string,\n sparkline: number[],\n current: number,\n previous: number | null,\n goodDirection: 'up-is-good' | 'down-is-good' | 'up-is-neutral',\n borderColor: string\n ): KpiDisplayCard {\n const { percent, direction } = this.computeDelta(current, previous);\n const isImprovement = this.isDirectionGood(direction, goodDirection);\n\n return {\n Label: label,\n Value: value,\n SparklineData: sparkline,\n DeltaPercent: percent,\n DeltaDirection: direction,\n IsImprovement: isImprovement,\n BorderColor: borderColor\n };\n }\n\n private computeDelta(current: number, previous: number | null): { percent: number; direction: 'up' | 'down' | 'stable' } {\n if (previous == null || previous === 0) {\n return { percent: 0, direction: 'stable' };\n }\n const change = ((current - previous) / previous) * 100;\n if (Math.abs(change) < 0.5) {\n return { percent: 0, direction: 'stable' };\n }\n return {\n percent: Math.abs(change),\n direction: change > 0 ? 'up' : 'down'\n };\n }\n\n private isDirectionGood(direction: 'up' | 'down' | 'stable', rule: 'up-is-good' | 'down-is-good' | 'up-is-neutral'): boolean {\n if (direction === 'stable') return true;\n if (rule === 'up-is-good') return direction === 'up';\n if (rule === 'down-is-good') return direction === 'down';\n return true; // neutral\n }\n\n // ─── Private: Sparkline ──────────────────────────────────────────\n\n private extractSparkline(trends: TrendData[], metric: 'executions' | 'cost' | 'tokens' | 'avgTime' | 'errors'): number[] {\n if (!trends || trends.length === 0) {\n return [20, 40, 30, 60, 50, 70, 45]; // placeholder\n }\n\n // Sample up to 7 evenly-spaced points\n const step = Math.max(1, Math.floor(trends.length / 7));\n const sampled: number[] = [];\n for (let i = 0; i < trends.length && sampled.length < 7; i += step) {\n sampled.push(this.getMetricFromTrend(trends[i], metric));\n }\n\n // Normalize to 0-100 percentage\n const maxVal = Math.max(...sampled, 1);\n return sampled.map(v => Math.max(5, (v / maxVal) * 100));\n }\n\n private getMetricFromTrend(trend: TrendData, metric: 'executions' | 'cost' | 'tokens' | 'avgTime' | 'errors'): number {\n switch (metric) {\n case 'executions': return trend.executions;\n case 'cost': return trend.cost;\n case 'tokens': return trend.tokens;\n case 'avgTime': return trend.avgTime;\n case 'errors': return trend.errors;\n }\n }\n\n // ─── Private: Top Consumers ──────────────────────────────────────\n\n private buildTopConsumers(chartData: ChartData): TopConsumer[] {\n const consumers: TopConsumer[] = [];\n const maxCost = Math.max(\n ...chartData.costByModel.map(m => m.cost),\n ...chartData.performanceMatrix.map(p => 1), // agents don't have cost here directly\n 1\n );\n\n // Add model-based consumers (from prompt runs)\n for (const model of chartData.costByModel.slice(0, 5)) {\n consumers.push({\n Rank: 0,\n Type: 'prompt',\n Name: model.model,\n Cost: model.cost,\n Proportion: 0\n });\n }\n\n // Sort by cost descending, assign ranks\n consumers.sort((a, b) => b.Cost - a.Cost);\n const topCost = consumers.length > 0 ? consumers[0].Cost : 1;\n return consumers.slice(0, 5).map((c, i) => ({\n ...c,\n Rank: i + 1,\n Proportion: topCost > 0 ? c.Cost / topCost : 0\n }));\n }\n\n // ─── Private: Error Hotspots ─────────────────────────────────────\n // Error hotspots are computed reactively when KPIs change.\n // Since rawData$ is private on the service, we compute from the\n // kpis errorRate + totalExecutions, and rely on chartData for names.\n // For a richer implementation, the service could expose an errors$ stream.\n // For now, we derive from chartData.performanceMatrix entries with low successRate.\n\n private buildErrorHotspots(chartData: ChartData): ErrorHotspot[] {\n const hotspots: ErrorHotspot[] = [];\n\n for (const entry of chartData.performanceMatrix) {\n if (entry.successRate < 1.0) {\n const errorCount = Math.round((1 - entry.successRate) * 10); // approximate\n hotspots.push({\n Source: `${entry.agent} / ${entry.model}`,\n ErrorMessage: `${((1 - entry.successRate) * 100).toFixed(0)}% failure rate (avg ${(entry.avgTime / 1000).toFixed(1)}s)`,\n Count: errorCount\n });\n }\n }\n\n return hotspots\n .sort((a, b) => b.Count - a.Count)\n .slice(0, 4);\n }\n\n // ─── Private: Formatting ─────────────────────────────────────────\n\n private formatNumber(value: number): string {\n if (value >= 1_000_000) return (value / 1_000_000).toFixed(1) + 'M';\n if (value >= 1_000) return (value / 1_000).toFixed(1) + 'K';\n return value.toLocaleString();\n }\n\n private formatLatency(ms: number): string {\n if (ms >= 60_000) return (ms / 60_000).toFixed(1) + 'm';\n if (ms >= 1_000) return (ms / 1_000).toFixed(1) + 's';\n return Math.round(ms) + 'ms';\n }\n}\n\nexport function LoadAnalyticsExecutiveSummary() {\n // Prevents tree-shaking\n}\n"]}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @fileoverview Model Performance Leaderboard.
3
+ *
4
+ * Ranks AI models by configurable metrics (Cost Efficiency, Speed, Reliability, Usage Volume).
5
+ * Data is loaded from MJ: AI Prompt Runs and augmented with model metadata from AIEngineBase.
6
+ */
7
+ import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
8
+ import * as i0 from "@angular/core";
9
+ interface ModelLeaderboardRow {
10
+ Rank: number;
11
+ RankClass: string;
12
+ ModelName: string;
13
+ ApiId: string;
14
+ Vendor: string;
15
+ VendorID: string;
16
+ Runs: number;
17
+ AvgLatencyMs: number;
18
+ AvgLatencyColor: string;
19
+ P95LatencyMs: number;
20
+ SuccessRate: number;
21
+ CostPer1KTokens: number;
22
+ TotalCost: number;
23
+ }
24
+ type SortByOption = 'cost-efficiency' | 'speed' | 'reliability' | 'usage-volume';
25
+ export declare class AnalyticsModelPerformanceComponent implements OnInit, OnDestroy {
26
+ TimeRange: string;
27
+ TimeRangeChange: EventEmitter<string>;
28
+ private cdr;
29
+ private destroy$;
30
+ IsLoading: boolean;
31
+ SortBy: SortByOption;
32
+ SelectedVendor: string;
33
+ Rows: ModelLeaderboardRow[];
34
+ TimeRangeOptions: string[];
35
+ SortByOptions: {
36
+ value: SortByOption;
37
+ label: string;
38
+ }[];
39
+ VendorOptions: {
40
+ id: string;
41
+ name: string;
42
+ }[];
43
+ private allRuns;
44
+ ngOnInit(): void;
45
+ ngOnDestroy(): void;
46
+ OnTimeRangeSelect(range: string): void;
47
+ OnSortByChange(event: Event): void;
48
+ OnVendorChange(event: Event): void;
49
+ FormatLatency(ms: number): string;
50
+ FormatCurrency(value: number, decimals?: number): string;
51
+ private loadVendorOptions;
52
+ private LoadData;
53
+ private buildRows;
54
+ private computeModelMetrics;
55
+ private sortRows;
56
+ private computePercentile;
57
+ private getRankClass;
58
+ private getLatencyColor;
59
+ private buildDateFilter;
60
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticsModelPerformanceComponent, never>;
61
+ static ɵcmp: i0.ɵɵComponentDeclaration<AnalyticsModelPerformanceComponent, "app-analytics-model-performance", never, { "TimeRange": { "alias": "TimeRange"; "required": false; }; }, { "TimeRangeChange": "TimeRangeChange"; }, never, never, false, never>;
62
+ }
63
+ export declare function LoadAnalyticsModelPerformance(): void;
64
+ export {};
65
+ //# sourceMappingURL=model-performance.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-performance.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/model-performance/model-performance.component.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACuB,YAAY,EACtC,MAAM,EAAE,SAAS,EACpB,MAAM,eAAe,CAAC;;AAyBvB,UAAU,mBAAmB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,YAAY,GAAG,iBAAiB,GAAG,OAAO,GAAG,aAAa,GAAG,cAAc,CAAC;AAQjF,qBAgXa,kCAAmC,YAAW,MAAM,EAAE,SAAS;IAC/D,SAAS,SAAQ;IAChB,eAAe,uBAA8B;IAEvD,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAuB;IAEhC,SAAS,UAAS;IAClB,MAAM,EAAE,YAAY,CAAqB;IACzC,cAAc,SAAM;IACpB,IAAI,EAAE,mBAAmB,EAAE,CAAM;IAEjC,gBAAgB,WAAwB;IAExC,aAAa,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAK5D;IAEK,aAAa,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;IAE1D,OAAO,CAAC,OAAO,CAAyB;IAExC,QAAQ,IAAI,IAAI;IAKhB,WAAW,IAAI,IAAI;IAOZ,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMtC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMlC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMlC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAKjC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM;IAQ1D,OAAO,CAAC,iBAAiB;YAWX,QAAQ;IA4BtB,OAAO,CAAC,SAAS;IAkCjB,OAAO,CAAC,mBAAmB;IAgD3B,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,eAAe;yCApOd,kCAAkC;2CAAlC,kCAAkC;CA+O9C;AAED,wBAAgB,6BAA6B,SAAoC"}