@memberjunction/ng-dashboards 5.20.0 → 5.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +102 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +583 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +148 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +773 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +241 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.js +1782 -0
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -0
- package/dist/AI/index.d.ts +3 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +6 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +50 -7
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +161 -193
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +11 -0
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +57 -0
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +10 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +35 -11
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts +1 -0
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +8 -4
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +181 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +1704 -182
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +121 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +1058 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts +56 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js +291 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js.map +1 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +85 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +461 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/index.d.ts +4 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -0
- package/dist/KnowledgeHub/index.js +5 -0
- package/dist/KnowledgeHub/index.js.map +1 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +5 -1
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +7 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +63 -8
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +9 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +109 -62
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +241 -200
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +7 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +63 -8
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +7 -5
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +9 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +128 -59
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +26 -19
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +40 -5
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -0
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +3 -0
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +4 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +5 -1
- package/dist/public-api.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +5 -4
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +4 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +44 -42
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-management-resource.component.js","sourceRoot":"","sources":["../../../../src/AI/components/vectors/vector-management-resource.component.ts","../../../../src/AI/components/vectors/vector-management-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Vector Management Resource Component\n *\n * Dashboard resource for managing vector databases and entity vectorization.\n * Displays KPI cards (total vectors, entities synced, last sync, avg embedding time),\n * an entity sync table, and sidebar panels for DB health, embedding model info,\n * and storage usage.\n */\n\nimport { Component, ChangeDetectorRef, OnDestroy, AfterViewInit, Input, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { EntityInfo, Metadata, RunView } from '@memberjunction/core';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport {\n MJEntityDocumentEntity,\n MJVectorDatabaseEntity,\n MJVectorIndexEntity,\n MJEntityRecordDocumentEntity,\n MJAIModelEntity,\n MJTemplateEntity,\n MJTemplateContentEntity\n} from '@memberjunction/core-entities';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { KPICardData } from '../widgets/kpi-card.component';\nimport { GraphQLDataProvider, GraphQLAIClient } from '@memberjunction/graphql-dataprovider';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\n\n/** Flattened row for the entity sync table */\ninterface EntitySyncRow {\n EntityDocumentID: string;\n EntityName: string;\n DocumentName: string;\n VectorCount: number;\n LastSynced: Date | null;\n Status: 'Synced' | 'Syncing' | 'Error' | 'Pending';\n /** Percent complete during active sync (0-100) */\n PercentComplete: number;\n /** Pipeline run ID for tracking active subscription */\n PipelineRunID?: string;\n}\n\n/** Sidebar embedding model summary */\ninterface EmbeddingModelInfo {\n Name: string;\n Dimensions: number | null;\n}\n\n/** Result from AI document suggestion */\ninterface DocumentSuggestionResult {\n template: string;\n selectedFields: string[];\n selectedRelationships: { name: string; fields: string[] }[];\n potentialMatchThreshold: number;\n absoluteMatchThreshold: number;\n reasoning: string;\n}\n\n@RegisterClass(BaseResourceComponent, 'VectorManagementResource')\n@Component({\n standalone: false,\n selector: 'app-vector-management-resource',\n templateUrl: './vector-management-resource.component.html',\n styleUrls: ['./vector-management-resource.component.css']\n})\nexport class VectorManagementResourceComponent extends BaseResourceComponent implements AfterViewInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private destroy$ = new Subject<void>();\n\n /** View mode: 'index' = Option A (shared index as hero, entity docs as children),\n * 'operations' = Option C (operations monitoring with real-time sync status) */\n public ViewMode: 'index' | 'operations' = 'index';\n\n /** Whether this component is embedded inside the Knowledge Hub shell */\n @Input() EmbeddedMode = false;\n\n /** Toggle between view modes */\n public ToggleViewMode(): void {\n this.ViewMode = this.ViewMode === 'index' ? 'operations' : 'index';\n this.cdr.detectChanges();\n }\n\n // --- Loading state ---\n public IsLoading = true;\n\n // --- KPI card data ---\n public KPICards: KPICardData[] = [];\n\n // --- Entity sync table ---\n public SyncRows: EntitySyncRow[] = [];\n public SyncingIds = new Set<string>();\n\n // --- Sidebar data ---\n public VectorDBName = '';\n public VectorDBStatus: 'Healthy' | 'Degraded' | 'Offline' = 'Healthy';\n public EmbeddingModel: EmbeddingModelInfo = { Name: '', Dimensions: null };\n public StorageUsagePercent = 0;\n public TotalVectors = 0;\n\n // --- Edit Entity Document Panel ---\n public ShowEditPanel = false;\n public IsEditSaving = false;\n public IsEditDeleting = false;\n public EditDocID = '';\n public EditDocName = '';\n public EditDocEntityName = '';\n public EditDocVectorDBID = '';\n public EditDocAIModelID = '';\n public EditDocVectorIndexID = '';\n public EditDocStatus = '';\n\n /** Open the edit panel for an entity document */\n public OpenEditPanel(entityDocumentId: string): void {\n const doc = this.entityDocuments.find(d => UUIDsEqual(d.ID, entityDocumentId));\n if (!doc) return;\n this.EditDocID = doc.ID;\n this.EditDocName = doc.Name;\n this.EditDocEntityName = doc.Entity || '';\n this.EditDocVectorDBID = doc.VectorDatabaseID;\n this.EditDocAIModelID = doc.AIModelID;\n this.EditDocVectorIndexID = doc.VectorIndexID || '';\n this.EditDocStatus = doc.Status;\n this.ShowEditPanel = true;\n this.cdr.detectChanges();\n }\n\n public CloseEditPanel(): void {\n this.ShowEditPanel = false;\n this.cdr.detectChanges();\n }\n\n public async SaveEditedDocument(): Promise<void> {\n this.IsEditSaving = true;\n this.cdr.detectChanges();\n try {\n const md = new Metadata();\n const doc = await md.GetEntityObject<MJEntityDocumentEntity>('MJ: Entity Documents');\n const loaded = await doc.Load(this.EditDocID);\n if (!loaded) throw new Error('Could not load entity document');\n\n doc.Name = this.EditDocName;\n doc.VectorDatabaseID = this.EditDocVectorDBID;\n doc.AIModelID = this.EditDocAIModelID;\n doc.VectorIndexID = this.EditDocVectorIndexID || null;\n doc.Status = this.EditDocStatus as 'Active' | 'Inactive';\n\n const saved = await doc.Save();\n if (saved) {\n MJNotificationService.Instance.CreateSimpleNotification('Entity document updated', 'success', 2500);\n this.ShowEditPanel = false;\n await this.LoadData();\n } else {\n const msg = doc.LatestResult?.CompleteMessage || 'Unknown error';\n MJNotificationService.Instance.CreateSimpleNotification(`Save failed: ${msg}`, 'error', 5000);\n }\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n MJNotificationService.Instance.CreateSimpleNotification(`Error: ${msg}`, 'error', 5000);\n } finally {\n this.IsEditSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n public async DeleteEntityDocument(): Promise<void> {\n this.IsEditDeleting = true;\n this.cdr.detectChanges();\n try {\n const md = new Metadata();\n const doc = await md.GetEntityObject<MJEntityDocumentEntity>('MJ: Entity Documents');\n const loaded = await doc.Load(this.EditDocID);\n if (!loaded) throw new Error('Could not load entity document');\n\n const deleted = await doc.Delete();\n if (deleted) {\n MJNotificationService.Instance.CreateSimpleNotification('Entity document deleted', 'success', 2500);\n this.ShowEditPanel = false;\n await this.LoadData();\n } else {\n MJNotificationService.Instance.CreateSimpleNotification('Delete failed', 'error', 3000);\n }\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n MJNotificationService.Instance.CreateSimpleNotification(`Error: ${msg}`, 'error', 5000);\n } finally {\n this.IsEditDeleting = false;\n this.cdr.detectChanges();\n }\n }\n\n // --- Suggest Document Dialog ---\n public ShowSuggestDialog = false;\n public IsSuggesting = false;\n public SuggestEntityName = '';\n public SuggestUseCase = 'duplicate detection';\n public SuggestionResult: DocumentSuggestionResult | null = null;\n public SaveDocumentName = '';\n public SuggestionError = '';\n public IsSavingDocument = false;\n public EditableTemplate = '';\n\n /** Prerequisites check — are vector DB and embedding model configured? */\n public HasVectorDB = false;\n public HasEmbeddingModel = false;\n public get PrerequisitesMet(): boolean {\n return this.HasVectorDB && this.HasEmbeddingModel;\n }\n\n /** Available embedding models for selection in save form */\n public AvailableEmbeddingModels: { ID: string; Name: string }[] = [];\n /** Selected embedding model ID for the new entity document */\n public SelectedEmbeddingModelID = '';\n /** Selected vector database ID for the new entity document */\n public SelectedVectorDBID = '';\n /** Available vector indexes for selection */\n public AvailableVectorIndexes: { ID: string; Name: string; VectorDatabaseID: string; EmbeddingModelID: string }[] = [];\n /** Selected vector index ID — if user picks an existing one */\n public SelectedVectorIndexID = '';\n\n /** Indexes filtered by the currently selected vector DB (for create/edit forms) */\n public get FilteredIndexesForSelectedDB(): { ID: string; Name: string; VectorDatabaseID: string; EmbeddingModelID: string }[] {\n const dbId = this.SelectedVectorDBID || this.EditDocVectorDBID;\n if (!dbId) return this.AvailableVectorIndexes;\n return this.AvailableVectorIndexes.filter(i => i.VectorDatabaseID === dbId);\n }\n\n /** Indexes filtered by the edit panel's selected vector DB */\n public get EditFilteredIndexes(): { ID: string; Name: string; VectorDatabaseID: string; EmbeddingModelID: string }[] {\n if (!this.EditDocVectorDBID) return this.AvailableVectorIndexes;\n return this.AvailableVectorIndexes.filter(i => i.VectorDatabaseID === this.EditDocVectorDBID);\n }\n\n /** Grouped entity list for the suggestion panel — schemas as groups, entities as items */\n public EntityGroups: { SchemaName: string; Entities: { Name: string; ID: string }[] }[] = [];\n /** Filtered entity groups based on search input */\n public FilteredEntityGroups: { SchemaName: string; Entities: { Name: string; ID: string }[] }[] = [];\n /** Search text for filtering entities */\n public EntitySearchText = '';\n /** Whether the entity picker dropdown is open */\n public ShowEntityPicker = false;\n\n // --- Raw entity data (private) ---\n private entityDocuments: MJEntityDocumentEntity[] = [];\n protected vectorDatabases: MJVectorDatabaseEntity[] = [];\n private vectorIndexes: MJVectorIndexEntity[] = [];\n private recordDocuments: MJEntityRecordDocumentEntity[] = [];\n private aiModels: MJAIModelEntity[] = [];\n\n // ================================================================\n // Lifecycle\n // ================================================================\n\n async ngAfterViewInit(): Promise<void> {\n await this.LoadData();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ================================================================\n // BaseResourceComponent overrides\n // ================================================================\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Vector Management';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-database';\n }\n\n // ================================================================\n // Public Methods\n // ================================================================\n\n /** Reload all dashboard data */\n public async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n\n try {\n await this.fetchAllData();\n this.buildSyncRows();\n this.buildKPICards();\n this.buildSidebarData();\n this.checkPrerequisites();\n } catch (error) {\n console.error('[VectorManagement] Error loading data:', error);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Trigger vectorization for a specific entity document via GraphQL (fire-and-forget with progress subscription) */\n public async SyncEntity(entityDocumentId: string): Promise<void> {\n if (this.SyncingIds.has(entityDocumentId)) {\n return;\n }\n\n const doc = this.entityDocuments.find(d => UUIDsEqual(d.ID, entityDocumentId));\n if (!doc) return;\n\n const provider = Metadata.Provider as GraphQLDataProvider;\n if (!provider) return;\n\n this.addSyncingId(entityDocumentId);\n this.updateRowStatus(entityDocumentId, 'Syncing');\n this.updateRowProgress(entityDocumentId, 0);\n this.cdr.detectChanges();\n\n try {\n const aiClient = new GraphQLAIClient(provider);\n MJNotificationService.Instance.CreateSimpleNotification(\n `Starting vectorization for ${doc.Entity}...`,\n 'info', 3000\n );\n\n // Step 1: Start the mutation (fire-and-forget — returns PipelineRunID immediately)\n const result = await aiClient.VectorizeEntity({\n entityDocumentID: entityDocumentId,\n entityID: doc.EntityID,\n batchSize: 50\n });\n\n if (!result.Success || !result.PipelineRunID) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Vectorization failed: ${result.ErrorMessage || 'Unknown error'}`,\n 'error', 5000\n );\n this.removeSyncingId(entityDocumentId);\n this.updateRowStatus(entityDocumentId, 'Error');\n this.cdr.detectChanges();\n return;\n }\n\n // Store PipelineRunID on the row for tracking\n const row = this.SyncRows.find(r => r.EntityDocumentID === entityDocumentId);\n if (row) {\n row.PipelineRunID = result.PipelineRunID;\n }\n\n // Step 2: Subscribe to progress updates and also set a safety timeout\n // in case the subscription misses events (race condition, network issue, etc.)\n this.subscribeToPipelineProgress(entityDocumentId, result.PipelineRunID, doc.Entity);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n console.error(`[VectorManagement] Error starting sync for ${entityDocumentId}:`, msg);\n MJNotificationService.Instance.CreateSimpleNotification(`Sync error: ${msg}`, 'error', 5000);\n this.removeSyncingId(entityDocumentId);\n this.updateRowStatus(entityDocumentId, 'Error');\n this.cdr.detectChanges();\n }\n }\n\n /** Subscribe to PipelineProgress for a specific pipeline run */\n private subscribeToPipelineProgress(entityDocumentId: string, pipelineRunID: string, entityName: string): void {\n const provider = Metadata.Provider as GraphQLDataProvider;\n const subscriptionQuery = `\n subscription PipelineProgress($pipelineRunID: String!) {\n PipelineProgress(pipelineRunID: $pipelineRunID) {\n PipelineRunID\n Stage\n TotalItems\n ProcessedItems\n PercentComplete\n ElapsedMs\n }\n }\n `;\n\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\n\n const finishSync = (success: boolean) => {\n if (idleTimer) clearTimeout(idleTimer);\n rxSub?.unsubscribe();\n\n // Use Promise.resolve().then() to defer state changes to the next\n // microtask, avoiding ExpressionChangedAfterItHasBeenCheckedError\n Promise.resolve().then(async () => {\n this.removeSyncingId(entityDocumentId);\n\n if (success) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Vectorization complete for ${entityName}`,\n 'success', 3000\n );\n await this.refreshSyncRow(entityDocumentId);\n } else {\n this.updateRowStatus(entityDocumentId, 'Error');\n MJNotificationService.Instance.CreateSimpleNotification(\n `Vectorization failed for ${entityName}`,\n 'error', 5000\n );\n this.cdr.detectChanges();\n }\n });\n };\n\n // Reset idle timer on every event. When no events arrive for 5s,\n // assume the pipeline is done (handles missing 'complete' event).\n const resetIdleTimer = () => {\n if (idleTimer) clearTimeout(idleTimer);\n idleTimer = setTimeout(() => {\n if (this.SyncingIds.has(entityDocumentId)) {\n finishSync(true);\n }\n }, 5000);\n };\n\n // Start the idle timer immediately in case no events ever arrive\n resetIdleTimer();\n\n const sub = provider.subscribe(subscriptionQuery, { pipelineRunID });\n const rxSub = sub.pipe(takeUntil(this.destroy$)).subscribe({\n next: (data: Record<string, unknown>) => {\n const progress = (data as Record<string, Record<string, unknown>>)['PipelineProgress'];\n if (!progress) return;\n\n const stage = progress['Stage'] as string;\n const pct = progress['PercentComplete'] as number;\n\n this.updateRowProgress(entityDocumentId, pct);\n this.cdr.detectChanges();\n\n if (stage === 'complete') {\n finishSync(true);\n } else if (stage === 'error') {\n finishSync(false);\n } else {\n // Got a progress event — reset idle timer\n resetIdleTimer();\n }\n },\n error: (err: unknown) => {\n console.error(`[VectorManagement] Pipeline subscription error:`, err);\n finishSync(false);\n }\n });\n }\n\n /**\n * Add an ID to SyncingIds, creating a new Set reference so Angular\n * change detection picks up the mutation in template bindings.\n */\n private addSyncingId(id: string): void {\n this.SyncingIds = new Set([...this.SyncingIds, id]);\n }\n\n /**\n * Remove an ID from SyncingIds, creating a new Set reference so Angular\n * change detection picks up the mutation in template bindings.\n */\n private removeSyncingId(id: string): void {\n if (this.SyncingIds.has(id)) {\n const next = new Set(this.SyncingIds);\n next.delete(id);\n this.SyncingIds = next;\n }\n }\n\n /** Opens the AI suggestion dialog */\n public OpenSuggestDialog(): void {\n this.SuggestionResult = null;\n this.SuggestEntityName = '';\n this.SuggestUseCase = 'duplicate detection';\n this.EditableTemplate = '';\n this.SuggestionError = '';\n this.EntitySearchText = '';\n this.ShowEntityPicker = false;\n this.loadEntityGroups();\n this.ShowSuggestDialog = true;\n this.cdr.detectChanges();\n }\n\n /** Select an entity from the grouped picker */\n public SelectEntity(entityName: string): void {\n this.SuggestEntityName = entityName;\n this.ShowEntityPicker = false;\n this.cdr.detectChanges();\n }\n\n /** Filter entities by search text */\n public FilterEntities(): void {\n const query = this.EntitySearchText.toLowerCase().trim();\n if (!query) {\n this.FilteredEntityGroups = this.EntityGroups;\n } else {\n this.FilteredEntityGroups = this.EntityGroups\n .map(group => ({\n SchemaName: group.SchemaName,\n Entities: group.Entities.filter(e => e.Name.toLowerCase().includes(query))\n }))\n .filter(group => group.Entities.length > 0);\n }\n this.cdr.detectChanges();\n }\n\n /** Toggle entity picker visibility */\n public ToggleEntityPicker(): void {\n this.ShowEntityPicker = !this.ShowEntityPicker;\n if (this.ShowEntityPicker) {\n this.FilteredEntityGroups = this.EntityGroups;\n this.EntitySearchText = '';\n }\n this.cdr.detectChanges();\n }\n\n /** Handle template edits from code editor */\n public OnTemplateChange(newValue: string): void {\n this.EditableTemplate = newValue;\n if (this.SuggestionResult) {\n this.SuggestionResult.template = newValue;\n }\n }\n\n /** Closes the suggestion dialog */\n public CloseSuggestDialog(): void {\n this.ShowSuggestDialog = false;\n this.SuggestionResult = null;\n this.cdr.detectChanges();\n }\n\n /** Clears the current suggestion to try again */\n public ClearSuggestion(): void {\n this.SuggestionResult = null;\n this.cdr.detectChanges();\n }\n\n /**\n * Runs the AI suggestion by calling the server-side \"Entity Document Suggestion\"\n * AI prompt via GraphQL. The LLM analyzes the entity schema and generates\n * natural language Nunjucks templates optimized for embedding quality.\n */\n public async RunSuggestion(): Promise<void> {\n if (!this.SuggestEntityName || this.IsSuggesting) {\n return;\n }\n\n this.IsSuggesting = true;\n this.SuggestionError = '';\n this.cdr.detectChanges();\n\n try {\n const result = await this.callSuggestionPrompt(this.SuggestEntityName, this.SuggestUseCase);\n if (result) {\n this.SuggestionResult = result;\n this.EditableTemplate = result.template;\n this.SaveDocumentName = `${this.SuggestEntityName} - ${this.SuggestUseCase}`;\n }\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n console.error('[VectorManagement] Error generating suggestion:', msg);\n this.SuggestionError = `Failed to generate suggestion: ${msg}`;\n } finally {\n this.IsSuggesting = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Saves the current suggestion as an Entity Document record */\n public async SaveAsEntityDocument(): Promise<void> {\n if (this.IsSavingDocument || !this.SuggestionResult) {\n return;\n }\n\n this.IsSavingDocument = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const entityDoc = await md.GetEntityObject<MJEntityDocumentEntity>('MJ: Entity Documents');\n entityDoc.NewRecord();\n entityDoc.Name = this.SaveDocumentName;\n\n const matchingEntity = md.Entities.find(e => e.Name === this.SuggestEntityName);\n if (matchingEntity) {\n entityDoc.EntityID = matchingEntity.ID;\n }\n\n entityDoc.Status = 'Active';\n\n // Populate required FK fields from existing data\n await this.populateEntityDocumentFKs(entityDoc);\n\n const saved = await entityDoc.Save();\n if (saved) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Entity Document \"${this.SaveDocumentName}\" created successfully`,\n 'success',\n 3000\n );\n await this.LoadData();\n setTimeout(() => {\n this.CloseSuggestDialog();\n this.cdr.detectChanges();\n }, 1500);\n } else {\n const errorMsg = entityDoc.LatestResult?.CompleteMessage || 'Unknown error saving entity document';\n console.error('[VectorManagement] Failed to save entity document:', errorMsg);\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save: ${errorMsg}`,\n 'error',\n 5000\n );\n }\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n console.error('[VectorManagement] Error saving entity document:', msg);\n MJNotificationService.Instance.CreateSimpleNotification(\n `Error: ${msg}`,\n 'error',\n 5000\n );\n } finally {\n this.IsSavingDocument = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Returns the CSS class for a given sync status badge */\n public GetStatusClass(status: string): string {\n switch (status) {\n case 'Synced': return 'status-synced';\n case 'Syncing': return 'status-syncing';\n case 'Error': return 'status-error';\n case 'Pending': return 'status-pending';\n default: return '';\n }\n }\n\n /** Returns the icon class for a given sync status */\n public GetStatusIcon(status: string): string {\n switch (status) {\n case 'Synced': return 'fa-solid fa-circle-check';\n case 'Syncing': return 'fa-solid fa-spinner fa-spin';\n case 'Error': return 'fa-solid fa-circle-exclamation';\n case 'Pending': return 'fa-solid fa-clock';\n default: return 'fa-solid fa-question';\n }\n }\n\n /** Format a Date value for display */\n public FormatDate(date: Date | null): string {\n if (!date) return 'Never';\n const d = new Date(date);\n return d.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n /** Format the storage gauge label */\n public get StorageLabel(): string {\n return `${this.StorageUsagePercent}%`;\n }\n\n /** CSS class for the DB health indicator dot */\n public get DBHealthClass(): string {\n switch (this.VectorDBStatus) {\n case 'Healthy': return 'health-healthy';\n case 'Degraded': return 'health-degraded';\n case 'Offline': return 'health-offline';\n default: return '';\n }\n }\n\n // ================================================================\n // Private helpers\n // ================================================================\n\n private async fetchAllData(): Promise<void> {\n const rv = new RunView();\n const [docsResult, vdbResult, viResult, erdResult, modelsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Entity Documents',\n ExtraFilter: '',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Vector Databases',\n ExtraFilter: '',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Vector Indexes',\n ExtraFilter: '',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Entity Record Documents',\n ExtraFilter: '',\n Fields: ['ID', 'EntityDocumentID', 'VectorID', 'EntityDocument', 'Entity', '__mj_UpdatedAt'],\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Models',\n ExtraFilter: '',\n ResultType: 'entity_object'\n }\n ]);\n\n if (docsResult.Success) {\n this.entityDocuments = docsResult.Results as MJEntityDocumentEntity[];\n }\n if (vdbResult.Success) {\n this.vectorDatabases = vdbResult.Results as MJVectorDatabaseEntity[];\n }\n if (viResult.Success) {\n this.vectorIndexes = viResult.Results as MJVectorIndexEntity[];\n }\n if (erdResult.Success) {\n this.recordDocuments = erdResult.Results as MJEntityRecordDocumentEntity[];\n }\n if (modelsResult.Success) {\n this.aiModels = modelsResult.Results as MJAIModelEntity[];\n }\n }\n\n private buildSyncRows(): void {\n this.SyncRows = this.entityDocuments.map(doc => {\n const docsForEntity = this.recordDocuments.filter(\n rd => UUIDsEqual(rd.EntityDocumentID, doc.ID)\n );\n const vectorCount = docsForEntity.filter(rd => rd.VectorID != null).length;\n const lastSynced = this.computeLastSynced(docsForEntity);\n const status = this.computeSyncStatus(doc, vectorCount, docsForEntity.length);\n\n // Preserve progress info from any active sync\n const existingRow = this.SyncRows.find(r => UUIDsEqual(r.EntityDocumentID, doc.ID));\n return {\n EntityDocumentID: doc.ID,\n EntityName: doc.Entity || '',\n DocumentName: doc.Name,\n VectorCount: vectorCount,\n LastSynced: lastSynced,\n Status: status,\n PercentComplete: existingRow?.PercentComplete ?? 0,\n PipelineRunID: existingRow?.PipelineRunID,\n };\n });\n }\n\n private computeLastSynced(records: MJEntityRecordDocumentEntity[]): Date | null {\n if (records.length === 0) return null;\n const dates = records\n .map(r => new Date(r.__mj_UpdatedAt))\n .filter(d => !isNaN(d.getTime()));\n if (dates.length === 0) return null;\n return new Date(Math.max(...dates.map(d => d.getTime())));\n }\n\n private computeSyncStatus(\n doc: MJEntityDocumentEntity,\n vectorCount: number,\n totalRecords: number\n ): 'Synced' | 'Syncing' | 'Error' | 'Pending' {\n if (this.SyncingIds.has(doc.ID)) {\n return 'Syncing';\n }\n if (doc.Status === 'Inactive') {\n return 'Pending';\n }\n if (totalRecords === 0) {\n return 'Pending';\n }\n // If there are any vectors, consider it synced — partial syncs\n // still represent a successful state since the pipeline ran\n if (vectorCount > 0) {\n return 'Synced';\n }\n return 'Synced';\n }\n\n private buildKPICards(): void {\n this.TotalVectors = this.recordDocuments.filter(rd => rd.VectorID != null).length;\n const entitiesSynced = new Set(\n this.entityDocuments\n .filter(d => d.Status === 'Active')\n .map(d => d.EntityID)\n ).size;\n\n const allDates = this.recordDocuments\n .map(r => new Date(r.__mj_UpdatedAt))\n .filter(d => !isNaN(d.getTime()));\n const lastSyncDate = allDates.length > 0\n ? new Date(Math.max(...allDates.map(d => d.getTime())))\n : null;\n\n this.KPICards = [\n {\n title: 'Total Vectors',\n value: this.TotalVectors,\n subtitle: `across ${this.entityDocuments.length} documents`,\n icon: 'fa-cubes',\n color: 'primary',\n loading: false\n },\n {\n title: 'Entities Synced',\n value: entitiesSynced,\n subtitle: `of ${this.entityDocuments.length} configured`,\n icon: 'fa-layer-group',\n color: 'success',\n loading: false\n },\n {\n title: 'Last Sync',\n value: lastSyncDate ? this.FormatDate(lastSyncDate) : 'Never',\n icon: 'fa-clock',\n color: 'info',\n loading: false\n },\n {\n title: 'Vector Indexes',\n value: this.vectorIndexes.length,\n subtitle: `in ${this.vectorDatabases.length} database(s)`,\n icon: 'fa-diagram-project',\n color: 'warning',\n loading: false\n }\n ];\n }\n\n private buildSidebarData(): void {\n this.buildVectorDBHealth();\n this.buildEmbeddingModelInfo();\n this.buildStorageUsage();\n }\n\n private buildVectorDBHealth(): void {\n if (this.vectorDatabases.length > 0) {\n const db = this.vectorDatabases[0];\n this.VectorDBName = db.Name;\n // Determine health based on whether we have records with vectors\n const hasVectors = this.recordDocuments.some(rd => rd.VectorID != null);\n this.VectorDBStatus = hasVectors ? 'Healthy' : 'Degraded';\n } else {\n this.VectorDBName = 'Not configured';\n this.VectorDBStatus = 'Offline';\n }\n }\n\n private buildEmbeddingModelInfo(): void {\n if (this.vectorIndexes.length > 0) {\n const index = this.vectorIndexes[0];\n const model = this.aiModels.find(m => UUIDsEqual(m.ID, index.EmbeddingModelID));\n this.EmbeddingModel = {\n Name: model?.Name ?? index.EmbeddingModel ?? 'Unknown',\n Dimensions: null\n };\n } else {\n this.EmbeddingModel = { Name: 'Not configured', Dimensions: null };\n }\n }\n\n private buildStorageUsage(): void {\n // Estimate storage as a ratio of vectorized records vs total record documents\n const total = this.recordDocuments.length;\n const vectorized = this.recordDocuments.filter(rd => rd.VectorID != null).length;\n this.StorageUsagePercent = total > 0 ? Math.round((vectorized / total) * 100) : 0;\n }\n\n /** Check if vector DB and embedding model are configured, populate selection lists */\n private checkPrerequisites(): void {\n this.HasVectorDB = this.vectorDatabases.length > 0;\n const allEmbeddings = this.aiModels.filter(m =>\n m.AIModelType?.toLowerCase().includes('embedding') || m.Name?.toLowerCase().includes('embedding')\n );\n this.HasEmbeddingModel = allEmbeddings.length > 0;\n this.AvailableEmbeddingModels = allEmbeddings.map(m => ({ ID: m.ID, Name: m.Name }));\n\n // Default selections — first available, no hardcoded preference\n if (this.HasVectorDB && !this.SelectedVectorDBID) {\n this.SelectedVectorDBID = this.vectorDatabases[0].ID;\n }\n if (this.HasEmbeddingModel && !this.SelectedEmbeddingModelID) {\n this.SelectedEmbeddingModelID = allEmbeddings[0].ID;\n }\n\n // Build vector index list\n this.AvailableVectorIndexes = this.vectorIndexes.map(vi => ({\n ID: vi.ID,\n Name: vi.Name,\n VectorDatabaseID: vi.VectorDatabaseID,\n EmbeddingModelID: vi.EmbeddingModelID\n }));\n // Pre-select first index if available\n if (this.AvailableVectorIndexes.length > 0 && !this.SelectedVectorIndexID) {\n this.SelectedVectorIndexID = this.AvailableVectorIndexes[0].ID;\n }\n }\n\n /** Find the best embedding model from loaded AI models */\n private findEmbeddingModel(): MJAIModelEntity | undefined {\n return this.aiModels.find(m =>\n m.AIModelType?.toLowerCase().includes('embedding') || m.Name?.toLowerCase().includes('embedding')\n );\n }\n\n /**\n * Populate required foreign key fields on an Entity Document before saving.\n * Throws if prerequisites are not met.\n */\n private async populateEntityDocumentFKs(entityDoc: MJEntityDocumentEntity): Promise<void> {\n if (!this.PrerequisitesMet) {\n const missing: string[] = [];\n if (!this.HasVectorDB) missing.push('Vector Database');\n if (!this.HasEmbeddingModel) missing.push('Embedding Model');\n throw new Error(`Prerequisites not configured: ${missing.join(', ')}. Go to the Configuration tab to set these up.`);\n }\n\n // TypeID — look up 'Record Duplicate' entity document type\n const rv = new RunView();\n const typeResult = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: Entity Document Types',\n ExtraFilter: \"Name = 'Record Duplicate'\",\n ResultType: 'simple',\n Fields: ['ID']\n });\n if (typeResult.Success && typeResult.Results.length > 0) {\n entityDoc.TypeID = typeResult.Results[0].ID;\n } else {\n throw new Error('Entity Document Type \"Record Duplicate\" not found in database');\n }\n\n // If a vector index is selected, use its DB + model so the syncer finds it\n // instead of auto-creating a new one\n if (this.SelectedVectorIndexID) {\n const idx = this.AvailableVectorIndexes.find(i => UUIDsEqual(i.ID, this.SelectedVectorIndexID));\n if (idx) {\n entityDoc.VectorDatabaseID = idx.VectorDatabaseID;\n entityDoc.AIModelID = idx.EmbeddingModelID;\n entityDoc.VectorIndexID = idx.ID;\n } else {\n entityDoc.VectorDatabaseID = this.SelectedVectorDBID || this.vectorDatabases[0].ID;\n entityDoc.AIModelID = this.SelectedEmbeddingModelID || this.findEmbeddingModel()!.ID;\n }\n } else {\n entityDoc.VectorDatabaseID = this.SelectedVectorDBID || this.vectorDatabases[0].ID;\n entityDoc.AIModelID = this.SelectedEmbeddingModelID || this.findEmbeddingModel()!.ID;\n }\n\n // TemplateID — create a Template record with the generated template content\n await this.createTemplateForDocument(entityDoc);\n }\n\n /** Create a Template + TemplateContent record for the entity document */\n private async createTemplateForDocument(entityDoc: MJEntityDocumentEntity): Promise<void> {\n const md = new Metadata();\n const templateText = this.EditableTemplate || this.SuggestionResult?.template || '';\n if (!templateText) {\n throw new Error('No template content to save');\n }\n\n // Create Template record\n const template = await md.GetEntityObject<MJTemplateEntity>('MJ: Templates');\n template.NewRecord();\n template.Name = `Template for ${this.SaveDocumentName}`;\n template.Description = `Auto-generated template for entity document: ${this.SaveDocumentName}`;\n template.UserID = md.CurrentUser.ID;\n template.IsActive = true;\n const templateSaved = await template.Save();\n if (!templateSaved) {\n throw new Error(`Failed to create template: ${template.LatestResult?.CompleteMessage || 'unknown error'}`);\n }\n\n entityDoc.TemplateID = template.ID;\n\n // Find 'Text' content type\n const contentTypeResult = await new RunView().RunView<{ ID: string }>({\n EntityName: 'MJ: Template Content Types',\n ExtraFilter: \"Name = 'Text'\",\n ResultType: 'simple',\n Fields: ['ID']\n });\n if (!contentTypeResult.Success || contentTypeResult.Results.length === 0) {\n throw new Error('Template Content Type \"Text\" not found');\n }\n\n // Create TemplateContent record with the template text\n // Server-side MJTemplateContentEntityServer hook auto-creates Scalar params\n // for each {{FieldName}} — GetTemplateData() handles them via the flat convention.\n const content = await md.GetEntityObject<MJTemplateContentEntity>('MJ: Template Contents');\n content.NewRecord();\n content.TemplateID = template.ID;\n content.TypeID = contentTypeResult.Results[0].ID;\n content.TemplateText = templateText;\n content.Priority = 1;\n content.IsActive = true;\n const contentSaved = await content.Save();\n if (!contentSaved) {\n throw new Error(`Failed to create template content: ${content.LatestResult?.CompleteMessage || 'unknown error'}`);\n }\n }\n\n /** Build grouped entity list from metadata, grouped by SchemaName */\n private loadEntityGroups(): void {\n const md = new Metadata();\n const groupMap = new Map<string, { Name: string; ID: string }[]>();\n\n for (const entity of md.Entities) {\n const schema = entity.SchemaName || '__default';\n const existing = groupMap.get(schema);\n if (existing) {\n existing.push({ Name: entity.Name, ID: entity.ID });\n } else {\n groupMap.set(schema, [{ Name: entity.Name, ID: entity.ID }]);\n }\n }\n\n this.EntityGroups = Array.from(groupMap.entries())\n .map(([schemaName, entities]) => ({\n SchemaName: schemaName,\n Entities: entities.sort((a, b) => a.Name.localeCompare(b.Name))\n }))\n .sort((a, b) => a.SchemaName.localeCompare(b.SchemaName));\n\n this.FilteredEntityGroups = this.EntityGroups;\n }\n\n private updateRowStatus(entityDocumentId: string, status: EntitySyncRow['Status']): void {\n const row = this.SyncRows.find(r => r.EntityDocumentID === entityDocumentId);\n if (row) {\n row.Status = status;\n }\n }\n\n private updateRowProgress(entityDocumentId: string, percentComplete: number): void {\n const row = this.SyncRows.find(r => r.EntityDocumentID === entityDocumentId);\n if (row) {\n row.PercentComplete = percentComplete;\n }\n }\n\n /** Refresh a single sync row's vector count and status from the DB */\n private async refreshSyncRow(entityDocumentId: string): Promise<void> {\n const row = this.SyncRows.find(r => r.EntityDocumentID === entityDocumentId);\n if (!row) return;\n\n const rv = new RunView();\n const result = await rv.RunView<MJEntityRecordDocumentEntity>({\n EntityName: 'MJ: Entity Record Documents',\n ExtraFilter: `EntityDocumentID='${entityDocumentId}'`,\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n const docs = result.Results;\n row.VectorCount = docs.filter(d => d.VectorID != null).length;\n row.LastSynced = this.computeLastSynced(docs);\n row.Status = row.VectorCount > 0 ? 'Synced' : 'Pending';\n row.PercentComplete = 100;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Calls the \"Entity Document Suggestion\" AI prompt via GraphQL to generate\n * a natural language template optimized for vector embeddings.\n */\n private async callSuggestionPrompt(entityName: string, useCase: string): Promise<DocumentSuggestionResult | null> {\n const md = new Metadata();\n const entity = md.Entities.find(e => e.Name === entityName);\n if (!entity) {\n throw new Error(`Entity \"${entityName}\" not found in metadata`);\n }\n\n const prompt = this.findSuggestionPrompt();\n const provider = Metadata.Provider as GraphQLDataProvider;\n if (!provider) {\n throw new Error('GraphQL provider not available');\n }\n\n const aiClient = new GraphQLAIClient(provider);\n const data = this.buildPromptData(entity, useCase);\n\n const result = await aiClient.RunAIPrompt({\n promptId: prompt.ID,\n data,\n });\n\n if (!result.success) {\n throw new Error(result.error || 'AI prompt execution failed');\n }\n\n const parsed = result.parsedResult as DocumentSuggestionResult;\n if (!parsed?.template) {\n throw new Error('AI returned no template in response');\n }\n\n return parsed;\n }\n\n /** Find the Entity Document Suggestion prompt from AIEngineBase */\n private findSuggestionPrompt(): MJAIPromptEntityExtended {\n const prompt = AIEngineBase.Instance.Prompts.find(\n (p: MJAIPromptEntityExtended) => p.Name === 'Entity Document Suggestion'\n );\n if (!prompt) {\n throw new Error(\n 'AI Prompt \"Entity Document Suggestion\" not found. ' +\n 'Run \"npx mj sync push --dir=metadata --include=prompts\" to install it.'\n );\n }\n return prompt;\n }\n\n /** Build the data payload for the suggestion prompt */\n private buildPromptData(entity: EntityInfo, useCase: string): Record<string, unknown> {\n const fields = entity.Fields.map(f => ({\n Name: f.Name,\n Type: f.Type,\n IsPrimaryKey: f.IsPrimaryKey,\n IsUnique: f.IsUnique,\n MaxLength: f.MaxLength,\n AllowsNull: f.AllowsNull,\n Description: f.Description || '',\n }));\n\n const md = new Metadata();\n const relationships = entity.RelatedEntities\n .filter(r => r.Type === 'One to Many' || r.Type === 'Many to One')\n .slice(0, 20)\n .map(r => {\n const relatedEntity = md.Entities.find(e => e.Name === r.RelatedEntity);\n const relFields = relatedEntity\n ? relatedEntity.Fields\n .filter(f => !f.IsPrimaryKey && f.Type !== 'datetimeoffset')\n .map(f => f.Name)\n : [];\n return {\n Name: r.RelatedEntityJoinField || r.RelatedEntity,\n RelatedEntity: r.RelatedEntity,\n Fields: relFields,\n ForeignKeyField: r.RelatedEntityJoinField || '',\n };\n });\n\n return {\n EntityName: entity.Name,\n FieldsJSON: JSON.stringify(fields, null, 2),\n RelationshipsJSON: JSON.stringify(relationships, null, 2),\n UseCase: useCase,\n };\n }\n}\n\nexport function LoadVectorManagementResource(): void {\n // Prevents tree-shaking\n}\n","@if (IsLoading) {\n <div class=\"vector-loading\">\n <mj-loading text=\"Loading vector management data...\"></mj-loading>\n </div>\n} @else {\n <div class=\"vector-dashboard\">\n <!-- View Mode Toggle -->\n @if (!EmbeddedMode) {\n <div class=\"view-mode-toggle\">\n <button class=\"view-mode-btn\" [class.view-mode-btn-active]=\"ViewMode === 'index'\" (click)=\"ViewMode = 'index'\">\n <i class=\"fa-solid fa-cubes\"></i> Index View\n </button>\n <button class=\"view-mode-btn\" [class.view-mode-btn-active]=\"ViewMode === 'operations'\" (click)=\"ViewMode = 'operations'\">\n <i class=\"fa-solid fa-gauge-high\"></i> Operations\n </button>\n </div>\n }\n\n <!-- KPI Cards Row -->\n <div class=\"kpi-row\">\n @for (card of KPICards; track card.title) {\n <app-kpi-card [data]=\"card\"></app-kpi-card>\n }\n </div>\n\n <!-- Main Content Area: Table + Sidebar -->\n <div class=\"content-area\">\n <!-- Entity Sync Table -->\n <div class=\"sync-table-panel\">\n <div class=\"panel-header\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-table-list\"></i>\n Entity Sync Status\n </h3>\n <div class=\"panel-actions\">\n <button class=\"suggest-btn\" (click)=\"OpenSuggestDialog()\" title=\"Use AI to suggest an Entity Document template\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span class=\"suggest-btn-text\">Suggest Document</span>\n </button>\n <button class=\"refresh-btn\" (click)=\"LoadData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Refresh\n </button>\n </div>\n </div>\n\n @if (SyncRows.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>No entity documents configured for vectorization.</p>\n </div>\n } @else {\n <div class=\"table-wrapper\">\n <table class=\"sync-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th>Document</th>\n <th class=\"text-right\">Vectors</th>\n <th>Last Synced</th>\n <th>Status</th>\n <th class=\"text-center\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (row of SyncRows; track row.EntityDocumentID) {\n <tr>\n <td class=\"entity-name\">{{ row.EntityName }}</td>\n <td class=\"document-name\">{{ row.DocumentName }}</td>\n <td class=\"text-right vector-count\">{{ row.VectorCount | number }}</td>\n <td class=\"last-synced\">{{ FormatDate(row.LastSynced) }}</td>\n <td>\n <span class=\"status-badge\" [class]=\"GetStatusClass(row.Status)\">\n <i [class]=\"GetStatusIcon(row.Status)\"></i>\n @if (row.Status === 'Syncing' && row.PercentComplete > 0) {\n {{ row.PercentComplete }}%\n } @else {\n {{ row.Status }}\n }\n </span>\n </td>\n <td class=\"text-center actions-cell\">\n <button\n class=\"sync-btn\"\n [disabled]=\"SyncingIds.has(row.EntityDocumentID)\"\n (click)=\"SyncEntity(row.EntityDocumentID)\"\n title=\"Sync now\">\n @if (SyncingIds.has(row.EntityDocumentID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n {{ row.PercentComplete > 0 ? row.PercentComplete + '%' : 'Sync' }}\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Sync\n }\n </button>\n <button\n class=\"edit-btn\"\n (click)=\"OpenEditPanel(row.EntityDocumentID)\"\n title=\"Edit entity document\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n\n <!-- Sidebar Panels -->\n <div class=\"sidebar\">\n <!-- Vector DB Health -->\n <div class=\"sidebar-card\">\n <h4 class=\"sidebar-title\">\n <i class=\"fa-solid fa-heart-pulse\"></i>\n Vector DB Health\n </h4>\n <div class=\"health-row\">\n <span class=\"health-dot\" [class]=\"DBHealthClass\"></span>\n <span class=\"health-label\">{{ VectorDBName }}</span>\n </div>\n <div class=\"health-status\">{{ VectorDBStatus }}</div>\n </div>\n\n <!-- Embedding Model Info -->\n <div class=\"sidebar-card\">\n <h4 class=\"sidebar-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Embedding Model\n </h4>\n <div class=\"model-info\">\n <div class=\"info-row\">\n <span class=\"info-label\">Model</span>\n <span class=\"info-value\">{{ EmbeddingModel.Name }}</span>\n </div>\n @if (EmbeddingModel.Dimensions != null) {\n <div class=\"info-row\">\n <span class=\"info-label\">Dimensions</span>\n <span class=\"info-value\">{{ EmbeddingModel.Dimensions | number }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Storage Usage -->\n <div class=\"sidebar-card\">\n <h4 class=\"sidebar-title\">\n <i class=\"fa-solid fa-hard-drive\"></i>\n Vectorization Coverage\n </h4>\n <div class=\"gauge-container\">\n <div class=\"gauge-bar\">\n <div class=\"gauge-fill\" [style.width.%]=\"StorageUsagePercent\"></div>\n </div>\n <div class=\"gauge-label\">{{ StorageLabel }} of records vectorized</div>\n </div>\n <div class=\"storage-detail\">\n {{ TotalVectors | number }} vectors stored\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Edit Entity Document Slide-in Panel -->\n @if (ShowEditPanel) {\n <div class=\"slide-panel-overlay\" (click)=\"CloseEditPanel()\">\n <div class=\"slide-panel open\" (click)=\"$event.stopPropagation()\">\n <div class=\"suggest-dialog-header\">\n <h3 class=\"suggest-dialog-title\">\n <i class=\"fa-solid fa-pen\"></i>\n Edit Entity Document\n </h3>\n <button class=\"suggest-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"suggest-dialog-body\">\n <div class=\"suggest-form\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Entity</label>\n <span class=\"edit-readonly-value\">{{ EditDocEntityName }}</span>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Document Name</label>\n <input class=\"suggest-input\" type=\"text\" [(ngModel)]=\"EditDocName\" />\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Embedding Model</label>\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocAIModelID\">\n @for (model of AvailableEmbeddingModels; track model.ID) {\n <option [value]=\"model.ID\">{{ model.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Vector Database</label>\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocVectorDBID\">\n @for (db of vectorDatabases; track db.ID) {\n <option [value]=\"db.ID\">{{ db.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Vector Index</label>\n @if (EditFilteredIndexes.length > 0) {\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocVectorIndexID\">\n <option value=\"\">Auto (create/find matching index)</option>\n @for (idx of EditFilteredIndexes; track idx.ID) {\n <option [value]=\"idx.ID\">{{ idx.Name }}</option>\n }\n </select>\n } @else {\n <span class=\"edit-readonly-value\" style=\"font-size: 13px; color: var(--mj-text-muted);\">\n No indexes for this database — one will be created automatically on sync\n </span>\n }\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Status</label>\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocStatus\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </div>\n <div class=\"result-actions\" style=\"margin-top: 1rem\">\n @if (IsEditSaving || IsEditDeleting) {\n <mj-loading text=\"Saving...\" size=\"small\"></mj-loading>\n } @else {\n <button class=\"suggest-submit-btn\" (click)=\"SaveEditedDocument()\">\n <i class=\"fa-solid fa-save\"></i> Save Changes\n </button>\n <button class=\"edit-delete-btn\" (click)=\"DeleteEntityDocument()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete\n </button>\n <button class=\"suggest-close-action\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Suggest Document Slide-in Panel -->\n @if (ShowSuggestDialog) {\n <div class=\"slide-panel-overlay\" (click)=\"CloseSuggestDialog()\">\n <div class=\"slide-panel\" [class.open]=\"ShowSuggestDialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"suggest-dialog-header\">\n <h3 class=\"suggest-dialog-title\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n AI Document Suggestion\n </h3>\n <button class=\"suggest-close-btn\" (click)=\"CloseSuggestDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"suggest-dialog-body\">\n @if (!SuggestionResult) {\n <div class=\"suggest-form\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Entity</label>\n <div class=\"entity-picker\">\n <button class=\"entity-picker-trigger\" (click)=\"ToggleEntityPicker()\">\n @if (SuggestEntityName) {\n <i class=\"fa-solid fa-table\"></i>\n <span class=\"entity-picker-value\">{{ SuggestEntityName }}</span>\n } @else {\n <i class=\"fa-solid fa-search\"></i>\n <span class=\"entity-picker-placeholder\">Search and select an entity...</span>\n }\n <i class=\"fa-solid fa-chevron-down entity-picker-arrow\"></i>\n </button>\n @if (ShowEntityPicker) {\n <div class=\"entity-picker-dropdown\">\n <div class=\"entity-picker-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n class=\"entity-picker-search-input\"\n placeholder=\"Filter entities...\"\n [(ngModel)]=\"EntitySearchText\"\n (input)=\"FilterEntities()\"\n autofocus />\n </div>\n <div class=\"entity-picker-list\">\n @for (group of FilteredEntityGroups; track group.SchemaName) {\n <div class=\"entity-picker-group\">\n <div class=\"entity-picker-group-header\">\n <i class=\"fa-solid fa-database\"></i>\n {{ group.SchemaName }}\n </div>\n @for (entity of group.Entities; track entity.ID) {\n <button class=\"entity-picker-item\"\n [class.entity-picker-item-selected]=\"entity.Name === SuggestEntityName\"\n (click)=\"SelectEntity(entity.Name)\">\n <i class=\"fa-solid fa-table\"></i>\n {{ entity.Name }}\n </button>\n }\n </div>\n }\n @if (FilteredEntityGroups.length === 0) {\n <div class=\"entity-picker-empty\">\n No entities matching \"{{ EntitySearchText }}\"\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Use Case</label>\n <div class=\"use-case-options\">\n <button class=\"use-case-btn\"\n [class.use-case-btn-active]=\"SuggestUseCase === 'duplicate detection'\"\n (click)=\"SuggestUseCase = 'duplicate detection'\">\n <i class=\"fa-solid fa-clone\"></i>\n Duplicate Detection\n </button>\n <button class=\"use-case-btn\"\n [class.use-case-btn-active]=\"SuggestUseCase === 'search'\"\n (click)=\"SuggestUseCase = 'search'\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Search\n </button>\n <button class=\"use-case-btn\"\n [class.use-case-btn-active]=\"SuggestUseCase === 'classification'\"\n (click)=\"SuggestUseCase = 'classification'\">\n <i class=\"fa-solid fa-tags\"></i>\n Classification\n </button>\n </div>\n </div>\n <button class=\"suggest-submit-btn\"\n [disabled]=\"IsSuggesting || !SuggestEntityName\"\n (click)=\"RunSuggestion()\">\n @if (IsSuggesting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating with AI...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Generate Template\n }\n </button>\n @if (SuggestionError) {\n <div class=\"suggestion-error\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ SuggestionError }}\n </div>\n }\n </div>\n } @else {\n <div class=\"suggest-result\">\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Suggested Template</h4>\n <div class=\"template-editor-wrapper\">\n <mj-code-editor\n [value]=\"EditableTemplate\"\n language=\"markdown\"\n [readonly]=\"false\"\n [lineWrapping]=\"true\"\n (change)=\"OnTemplateChange($event)\">\n </mj-code-editor>\n </div>\n </div>\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Selected Fields</h4>\n <div class=\"result-tags\">\n @for (field of SuggestionResult.selectedFields; track field) {\n <span class=\"result-tag\">{{ field }}</span>\n }\n </div>\n </div>\n @if (SuggestionResult.selectedRelationships.length > 0) {\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Related Entities</h4>\n @for (rel of SuggestionResult.selectedRelationships; track rel.name) {\n <div class=\"result-relationship\">\n <span class=\"rel-name\">{{ rel.name }}</span>\n <span class=\"rel-fields\">{{ rel.fields.join(', ') }}</span>\n </div>\n }\n </div>\n }\n <div class=\"result-section result-thresholds\">\n <div class=\"threshold-item\">\n <span class=\"threshold-label\">Potential Match</span>\n <span class=\"threshold-value\">{{ (SuggestionResult.potentialMatchThreshold * 100).toFixed(0) }}%</span>\n </div>\n <div class=\"threshold-item\">\n <span class=\"threshold-label\">Absolute Match</span>\n <span class=\"threshold-value\">{{ (SuggestionResult.absoluteMatchThreshold * 100).toFixed(0) }}%</span>\n </div>\n </div>\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Reasoning</h4>\n <p class=\"result-reasoning\">{{ SuggestionResult.reasoning }}</p>\n </div>\n <div class=\"result-section\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Document Name</label>\n <input class=\"suggest-input\" type=\"text\" [(ngModel)]=\"SaveDocumentName\" />\n </div>\n <div class=\"suggest-field\" style=\"margin-top: 0.75rem\">\n <label class=\"suggest-label\">Embedding Model</label>\n <select class=\"suggest-select\" [(ngModel)]=\"SelectedEmbeddingModelID\">\n @for (model of AvailableEmbeddingModels; track model.ID) {\n <option [value]=\"model.ID\">{{ model.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\" style=\"margin-top: 0.75rem\">\n <label class=\"suggest-label\">Vector Database</label>\n <select class=\"suggest-select\" [(ngModel)]=\"SelectedVectorDBID\">\n @for (db of vectorDatabases; track db.ID) {\n <option [value]=\"db.ID\">{{ db.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\" style=\"margin-top: 0.75rem\">\n <label class=\"suggest-label\">Vector Index</label>\n @if (FilteredIndexesForSelectedDB.length > 0) {\n <select class=\"suggest-select\" [(ngModel)]=\"SelectedVectorIndexID\">\n <option value=\"\">Auto (create/find matching index)</option>\n @for (idx of FilteredIndexesForSelectedDB; track idx.ID) {\n <option [value]=\"idx.ID\">{{ idx.Name }}</option>\n }\n </select>\n } @else {\n <span class=\"edit-readonly-value\" style=\"font-size: 13px; color: var(--mj-text-muted);\">\n No indexes yet — create one in Configuration > Vector Database, or one will be created on sync\n </span>\n }\n </div>\n </div>\n <div class=\"result-actions\">\n @if (IsSavingDocument) {\n <div class=\"save-spinner\">\n <mj-loading text=\"Saving...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <button class=\"suggest-submit-btn\" (click)=\"SaveAsEntityDocument()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save as Entity Document\n </button>\n <button class=\"suggest-submit-btn suggest-try-again-btn\" (click)=\"ClearSuggestion()\">\n <i class=\"fa-solid fa-rotate\"></i> Try Again\n </button>\n <button class=\"suggest-close-action\" (click)=\"CloseSuggestDialog()\">\n Close\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n}\n"]}
|
package/dist/AI/index.d.ts
CHANGED
|
@@ -9,4 +9,7 @@ export * from './components/widgets/live-execution-widget.component';
|
|
|
9
9
|
export * from './components/charts/time-series-chart.component';
|
|
10
10
|
export * from './components/charts/performance-heatmap.component';
|
|
11
11
|
export * from './components/requests/agent-requests-resource.component';
|
|
12
|
+
export * from './components/autotagging/autotagging-pipeline-resource.component';
|
|
13
|
+
export * from './components/vectors/vector-management-resource.component';
|
|
14
|
+
export * from './components/duplicates/duplicate-detection-resource.component';
|
|
12
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/AI/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AI/index.ts"],"names":[],"mappings":"AACA,cAAc,uCAAuC,CAAC;AAGtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AAGnE,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAGlE,cAAc,yDAAyD,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AI/index.ts"],"names":[],"mappings":"AACA,cAAc,uCAAuC,CAAC;AAGtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AAGnE,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAGlE,cAAc,yDAAyD,CAAC;AAGxE,cAAc,kEAAkE,CAAC;AAGjF,cAAc,2DAA2D,CAAC;AAG1E,cAAc,gEAAgE,CAAC"}
|
package/dist/AI/index.js
CHANGED
|
@@ -13,4 +13,10 @@ export * from './components/charts/time-series-chart.component';
|
|
|
13
13
|
export * from './components/charts/performance-heatmap.component';
|
|
14
14
|
// Agent Requests
|
|
15
15
|
export * from './components/requests/agent-requests-resource.component';
|
|
16
|
+
// Autotagging Pipeline
|
|
17
|
+
export * from './components/autotagging/autotagging-pipeline-resource.component';
|
|
18
|
+
// Vector Management
|
|
19
|
+
export * from './components/vectors/vector-management-resource.component';
|
|
20
|
+
// Duplicate Detection
|
|
21
|
+
export * from './components/duplicates/duplicate-detection-resource.component';
|
|
16
22
|
//# sourceMappingURL=index.js.map
|
package/dist/AI/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/AI/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,uCAAuC,CAAC;AAEtD,kBAAkB;AAClB,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AAEnE,oBAAoB;AACpB,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAElE,iBAAiB;AACjB,cAAc,yDAAyD,CAAC","sourcesContent":["// Services\nexport * from './services/ai-instrumentation.service';\n\n// Main Components\nexport * from './components/execution-monitoring.component';\nexport * from './components/prompts/prompt-management.component';\nexport * from './components/agents/agent-configuration.component';\nexport * from './components/models/model-management.component';\nexport * from './components/system/system-configuration.component';\n\n// Widget Components\nexport * from './components/widgets/kpi-card.component';\nexport * from './components/widgets/live-execution-widget.component';\nexport * from './components/charts/time-series-chart.component';\nexport * from './components/charts/performance-heatmap.component';\n\n// Agent Requests\nexport * from './components/requests/agent-requests-resource.component';"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/AI/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,uCAAuC,CAAC;AAEtD,kBAAkB;AAClB,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AAEnE,oBAAoB;AACpB,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAElE,iBAAiB;AACjB,cAAc,yDAAyD,CAAC;AAExE,uBAAuB;AACvB,cAAc,kEAAkE,CAAC;AAEjF,oBAAoB;AACpB,cAAc,2DAA2D,CAAC;AAE1E,sBAAsB;AACtB,cAAc,gEAAgE,CAAC","sourcesContent":["// Services\nexport * from './services/ai-instrumentation.service';\n\n// Main Components\nexport * from './components/execution-monitoring.component';\nexport * from './components/prompts/prompt-management.component';\nexport * from './components/agents/agent-configuration.component';\nexport * from './components/models/model-management.component';\nexport * from './components/system/system-configuration.component';\n\n// Widget Components\nexport * from './components/widgets/kpi-card.component';\nexport * from './components/widgets/live-execution-widget.component';\nexport * from './components/charts/time-series-chart.component';\nexport * from './components/charts/performance-heatmap.component';\n\n// Agent Requests\nexport * from './components/requests/agent-requests-resource.component';\n\n// Autotagging Pipeline\nexport * from './components/autotagging/autotagging-pipeline-resource.component';\n\n// Vector Management\nexport * from './components/vectors/vector-management-resource.component';\n\n// Duplicate Detection\nexport * from './components/duplicates/duplicate-detection-resource.component';"]}
|
|
@@ -1,4 +1,39 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight record types for dashboard aggregation.
|
|
4
|
+
* We use ResultType: 'simple' with explicit Fields to avoid pulling
|
|
5
|
+
* large text columns (InputData, OutputData, etc.) that can blow up
|
|
6
|
+
* the GraphQL response beyond V8's string limit.
|
|
7
|
+
*/
|
|
8
|
+
export interface PromptRunRecord {
|
|
9
|
+
ID: string;
|
|
10
|
+
RunAt: string;
|
|
11
|
+
CompletedAt: string | null;
|
|
12
|
+
Success: boolean;
|
|
13
|
+
Cost: number | null;
|
|
14
|
+
TokensUsed: number | null;
|
|
15
|
+
TokensPrompt: number | null;
|
|
16
|
+
TokensCompletion: number | null;
|
|
17
|
+
ExecutionTimeMS: number | null;
|
|
18
|
+
ModelID: string | null;
|
|
19
|
+
Model: string | null;
|
|
20
|
+
AgentID: string | null;
|
|
21
|
+
Agent: string | null;
|
|
22
|
+
Prompt: string | null;
|
|
23
|
+
ErrorMessage: string | null;
|
|
24
|
+
}
|
|
25
|
+
export interface AgentRunRecord {
|
|
26
|
+
ID: string;
|
|
27
|
+
StartedAt: string;
|
|
28
|
+
CompletedAt: string | null;
|
|
29
|
+
Status: string;
|
|
30
|
+
Success: boolean;
|
|
31
|
+
TotalCost: number | null;
|
|
32
|
+
TotalTokensUsed: number | null;
|
|
33
|
+
AgentID: string | null;
|
|
34
|
+
Agent: string | null;
|
|
35
|
+
ErrorMessage: string | null;
|
|
36
|
+
}
|
|
2
37
|
export interface DashboardKPIs {
|
|
3
38
|
totalExecutions: number;
|
|
4
39
|
activeExecutions: number;
|
|
@@ -72,21 +107,28 @@ export declare class AIInstrumentationService {
|
|
|
72
107
|
private readonly _dateRange$;
|
|
73
108
|
private readonly _refreshTrigger$;
|
|
74
109
|
private readonly _isLoading$;
|
|
75
|
-
private readonly metadata;
|
|
76
110
|
readonly isLoading$: import("rxjs").Observable<boolean>;
|
|
77
111
|
constructor();
|
|
112
|
+
/**
|
|
113
|
+
* Single data load: fetches prompt runs and agent runs ONCE per refresh/date-range change.
|
|
114
|
+
* All downstream streams derive from this shared dataset.
|
|
115
|
+
*/
|
|
116
|
+
private readonly rawData$;
|
|
78
117
|
readonly kpis$: import("rxjs").Observable<DashboardKPIs>;
|
|
79
118
|
readonly trends$: import("rxjs").Observable<TrendData[]>;
|
|
80
119
|
readonly liveExecutions$: import("rxjs").Observable<LiveExecution[]>;
|
|
81
120
|
readonly chartData$: import("rxjs").Observable<ChartData>;
|
|
82
|
-
private loadingCount;
|
|
83
|
-
private checkLoadingComplete;
|
|
84
121
|
setDateRange(start: Date, end: Date): void;
|
|
85
122
|
refresh(): void;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
123
|
+
/**
|
|
124
|
+
* Single batch query that loads all data needed by every dashboard widget.
|
|
125
|
+
* Uses ResultType: 'simple' with explicit Fields to minimize payload size.
|
|
126
|
+
*/
|
|
127
|
+
private loadAllData;
|
|
128
|
+
private computeKPIs;
|
|
129
|
+
private computeTrends;
|
|
130
|
+
private computeLiveExecutions;
|
|
131
|
+
private computeChartData;
|
|
90
132
|
private countActiveExecutions;
|
|
91
133
|
private sumCosts;
|
|
92
134
|
private sumTokens;
|
|
@@ -94,6 +136,7 @@ export declare class AIInstrumentationService {
|
|
|
94
136
|
private calculateSuccessRate;
|
|
95
137
|
private countErrors;
|
|
96
138
|
private calculateDailyCostBurn;
|
|
139
|
+
private getBucketSizeMs;
|
|
97
140
|
private createHourlyBuckets;
|
|
98
141
|
private getTopModel;
|
|
99
142
|
private getTopAgent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-instrumentation.service.d.ts","sourceRoot":"","sources":["../../../src/AI/services/ai-instrumentation.service.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"ai-instrumentation.service.d.ts","sourceRoot":"","sources":["../../../src/AI/services/ai-instrumentation.service.ts"],"names":[],"mappings":"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"}
|