@memberjunction/ng-dashboards 5.4.1 → 5.5.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/agents/agent-configuration.component.js +4 -4
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +5 -4
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +3 -3
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +8 -7
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +3 -3
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +4 -4
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +3 -2
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +2 -2
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +4 -3
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +3 -3
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +3 -2
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +2 -2
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +3 -2
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +3 -2
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +2 -2
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +6 -0
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +19 -6
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -0
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +13 -4
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts +2 -0
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +13 -9
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +11 -11
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +2 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +13 -9
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +11 -11
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +4 -3
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +4 -3
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +6 -6
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +4 -1
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +9 -8
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-application.js +2 -2
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +3 -3
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts +1 -0
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +17 -14
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +1 -0
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +15 -12
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +3 -2
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +8 -7
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +22 -22
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +2 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +14 -10
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +2 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +1 -0
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +22 -18
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +1 -0
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +14 -10
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +6 -6
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +2 -2
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/package.json +38 -38
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-prompt-priority-matrix.component.js","sourceRoot":"","sources":["../../../../src/AI/components/prompts/model-prompt-priority-matrix.component.ts","../../../../src/AI/components/prompts/model-prompt-priority-matrix.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { RunView, Metadata, LogError, LogStatus } from '@memberjunction/core';\nimport { MJAIPromptModelEntity } from '@memberjunction/core-entities';\nimport { Subject, BehaviorSubject } from 'rxjs';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJAIModelEntityExtended, MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\n\ninterface PromptModelAssociation {\n promptId: string;\n promptName: string;\n modelId: string;\n modelName: string;\n priority: number;\n status: string;\n association: MJAIPromptModelEntity | null;\n isNew: boolean;\n isModified: boolean;\n}\n\ninterface MatrixCell {\n promptId: string;\n modelId: string;\n association: PromptModelAssociation | null;\n canAssign: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'app-model-prompt-priority-matrix',\n templateUrl: './model-prompt-priority-matrix.component.html',\n styleUrls: ['./model-prompt-priority-matrix.component.css']\n})\nexport class ModelPromptPriorityMatrixComponent implements OnInit, OnDestroy {\n @Input() selectedPrompts: MJAIPromptEntityExtended[] = [];\n @Input() selectedModels: MJAIModelEntityExtended[] = [];\n @Input() readonly = false;\n \n @Output() associationsChange = new EventEmitter<PromptModelAssociation[]>();\n @Output() stateChange = new EventEmitter<any>();\n @Output() promptSelected = new EventEmitter<MJAIPromptEntityExtended>();\n \n // Data\n public prompts: MJAIPromptEntityExtended[] = [];\n public models: MJAIModelEntityExtended[] = [];\n public associations: PromptModelAssociation[] = [];\n public matrix: MatrixCell[][] = [];\n \n // UI State\n public isLoading = false;\n public loadingMessage = '';\n public error: string | null = null;\n public viewMode: 'matrix' | 'list' = 'matrix';\n public sortBy: 'prompt' | 'model' | 'priority' = 'priority';\n public sortDirection: 'asc' | 'desc' = 'asc';\n public showInactiveAssociations = false;\n \n // Selection and editing\n public selectedCells: Set<string> = new Set();\n public editingCell: string | null = null;\n public bulkEditMode = false;\n public bulkEditPriority = 1;\n public bulkEditStatus = 'Active';\n \n // Filtering\n public promptFilter$ = new BehaviorSubject<string>('');\n public modelFilter$ = new BehaviorSubject<string>('');\n public statusFilter$ = new BehaviorSubject<string>('all');\n \n // Performance metrics\n public performanceData: { [key: string]: any } = {};\n public showPerformanceOverlay = false;\n \n private destroy$ = new Subject<void>();\n \n constructor(private notificationService: MJNotificationService) {}\n \n ngOnInit(): void {\n this.loadData();\n }\n \n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n \n public async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.error = null;\n this.loadingMessage = 'Loading prompts, models, and associations...';\n \n const [prompts, models, associations] = await Promise.all([\n this.loadPrompts(),\n this.loadModels(),\n this.loadAssociations()\n ]);\n \n this.prompts = this.selectedPrompts.length > 0 ? this.selectedPrompts : prompts;\n this.models = this.selectedModels.length > 0 ? this.selectedModels : models;\n \n this.buildAssociations(associations);\n this.buildMatrix();\n \n LogStatus('Model-prompt priority matrix loaded successfully');\n } catch (error) {\n this.error = 'Failed to load matrix data. Please try again.';\n LogError('Error loading matrix data', undefined, error);\n } finally {\n this.isLoading = false;\n }\n }\n \n private async loadPrompts(): Promise<MJAIPromptEntityExtended[]> {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: 'MJ: AI Prompts',\n ExtraFilter: \"Status = 'Active'\",\n OrderBy: 'Name',\n UserSearchString: '',\n IgnoreMaxRows: false,\n MaxRows: 500\n });\n \n if (result && result.Success && result.Results) {\n return result.Results as MJAIPromptEntityExtended[];\n } else {\n throw new Error('Failed to load AI prompts');\n }\n }\n \n private async loadModels(): Promise<MJAIModelEntityExtended[]> {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: 'MJ: AI Models',\n ExtraFilter: \"IsActive = 1\",\n OrderBy: 'Name',\n UserSearchString: '',\n IgnoreMaxRows: false,\n MaxRows: 200\n });\n \n if (result && result.Success && result.Results) {\n return result.Results as MJAIModelEntityExtended[];\n } else {\n throw new Error('Failed to load AI models');\n }\n }\n \n private async loadAssociations(): Promise<MJAIPromptModelEntity[]> {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: 'MJ: AI Prompt Models',\n ExtraFilter: '',\n OrderBy: 'Priority',\n UserSearchString: '',\n IgnoreMaxRows: false,\n MaxRows: 2000\n });\n \n if (result && result.Success && result.Results) {\n return result.Results as MJAIPromptModelEntity[];\n } else {\n throw new Error('Failed to load prompt-model associations');\n }\n }\n \n private buildAssociations(dbAssociations: MJAIPromptModelEntity[]): void {\n this.associations = [];\n \n // Create associations for existing database records\n dbAssociations.forEach(dbAssoc => {\n const prompt = this.prompts.find(p => p.ID === dbAssoc.PromptID);\n const model = this.models.find(m => m.ID === dbAssoc.ModelID);\n \n if (prompt && model) {\n this.associations.push({\n promptId: prompt.ID,\n promptName: prompt.Name,\n modelId: model.ID,\n modelName: model.Name,\n priority: dbAssoc.Priority || 1,\n status: dbAssoc.Status || 'Active',\n association: dbAssoc,\n isNew: false,\n isModified: false\n });\n }\n });\n }\n \n private buildMatrix(): void {\n this.matrix = [];\n \n this.prompts.forEach((prompt, promptIndex) => {\n this.matrix[promptIndex] = [];\n \n this.models.forEach((model, modelIndex) => {\n const association = this.associations.find(a => \n a.promptId === prompt.ID && a.modelId === model.ID\n );\n \n this.matrix[promptIndex][modelIndex] = {\n promptId: prompt.ID,\n modelId: model.ID,\n association: association || null,\n canAssign: this.canAssignModelToPrompt(prompt, model)\n };\n });\n });\n }\n \n private canAssignModelToPrompt(prompt: MJAIPromptEntityExtended, model: MJAIModelEntityExtended): boolean {\n // Check model type compatibility\n if (prompt.OutputType && model.AIModelTypeID) {\n // Add business logic for compatibility checking\n return true;\n }\n return true;\n }\n \n public getCellKey(promptIndex: number, modelIndex: number): string {\n return `${promptIndex}-${modelIndex}`;\n }\n \n public getCellClass(cell: MatrixCell): string {\n const classes = ['matrix-cell'];\n \n if (cell.association) {\n classes.push('has-association');\n classes.push(`priority-${Math.min(cell.association.priority, 5)}`);\n \n if (cell.association.status === 'Inactive') {\n classes.push('inactive');\n }\n \n if (cell.association.isNew) {\n classes.push('new');\n }\n \n if (cell.association.isModified) {\n classes.push('modified');\n }\n } else {\n classes.push('no-association');\n }\n \n if (!cell.canAssign) {\n classes.push('cannot-assign');\n }\n \n const cellKey = this.getCellKey(\n this.prompts.findIndex(p => p.ID === cell.promptId),\n this.models.findIndex(m => m.ID === cell.modelId)\n );\n \n if (this.selectedCells.has(cellKey)) {\n classes.push('selected');\n }\n \n if (this.editingCell === cellKey) {\n classes.push('editing');\n }\n \n return classes.join(' ');\n }\n \n public onCellClick(promptIndex: number, modelIndex: number, event: MouseEvent): void {\n if (this.readonly) return;\n \n const cellKey = this.getCellKey(promptIndex, modelIndex);\n const cell = this.matrix[promptIndex][modelIndex];\n \n if (event.ctrlKey || event.metaKey) {\n // Multi-select mode\n if (this.selectedCells.has(cellKey)) {\n this.selectedCells.delete(cellKey);\n } else {\n this.selectedCells.add(cellKey);\n }\n } else if (event.shiftKey && this.selectedCells.size > 0) {\n // Range select mode\n this.selectRange(promptIndex, modelIndex);\n } else {\n // Single select mode\n this.selectedCells.clear();\n if (cell.canAssign) {\n this.selectedCells.add(cellKey);\n }\n }\n }\n \n public onCellDoubleClick(promptIndex: number, modelIndex: number): void {\n if (this.readonly) return;\n \n const cellKey = this.getCellKey(promptIndex, modelIndex);\n const cell = this.matrix[promptIndex][modelIndex];\n \n if (cell.canAssign) {\n this.editingCell = cellKey;\n \n if (!cell.association) {\n // Create new association\n this.createAssociation(cell.promptId, cell.modelId);\n }\n }\n }\n \n private selectRange(endPromptIndex: number, endModelIndex: number): void {\n const selectedKeys = Array.from(this.selectedCells);\n if (selectedKeys.length === 0) return;\n \n const lastSelectedKey = selectedKeys[selectedKeys.length - 1];\n const [startPromptIndex, startModelIndex] = lastSelectedKey.split('-').map(Number);\n \n const minPromptIndex = Math.min(startPromptIndex, endPromptIndex);\n const maxPromptIndex = Math.max(startPromptIndex, endPromptIndex);\n const minModelIndex = Math.min(startModelIndex, endModelIndex);\n const maxModelIndex = Math.max(startModelIndex, endModelIndex);\n \n this.selectedCells.clear();\n \n for (let p = minPromptIndex; p <= maxPromptIndex; p++) {\n for (let m = minModelIndex; m <= maxModelIndex; m++) {\n const cell = this.matrix[p][m];\n if (cell && cell.canAssign) {\n this.selectedCells.add(this.getCellKey(p, m));\n }\n }\n }\n }\n \n public createAssociation(promptId: string, modelId: string, priority: number = 1): void {\n const prompt = this.prompts.find(p => p.ID === promptId);\n const model = this.models.find(m => m.ID === modelId);\n \n if (!prompt || !model) return;\n \n const newAssociation: PromptModelAssociation = {\n promptId,\n promptName: prompt.Name,\n modelId,\n modelName: model.Name,\n priority,\n status: 'Active',\n association: null,\n isNew: true,\n isModified: false\n };\n \n this.associations.push(newAssociation);\n this.buildMatrix();\n this.associationsChange.emit(this.associations);\n }\n \n public updateAssociation(promptId: string, modelId: string, updates: Partial<PromptModelAssociation>): void {\n const associationIndex = this.associations.findIndex(a => \n a.promptId === promptId && a.modelId === modelId\n );\n \n if (associationIndex >= 0) {\n const association = this.associations[associationIndex];\n Object.assign(association, updates);\n \n if (!association.isNew) {\n association.isModified = true;\n }\n \n this.buildMatrix();\n this.associationsChange.emit(this.associations);\n }\n }\n \n public removeAssociation(promptId: string, modelId: string): void {\n const associationIndex = this.associations.findIndex(a => \n a.promptId === promptId && a.modelId === modelId\n );\n \n if (associationIndex >= 0) {\n this.associations.splice(associationIndex, 1);\n this.buildMatrix();\n this.associationsChange.emit(this.associations);\n }\n }\n \n public bulkUpdateSelectedCells(): void {\n if (this.selectedCells.size === 0) return;\n \n this.selectedCells.forEach(cellKey => {\n const [promptIndex, modelIndex] = cellKey.split('-').map(Number);\n const cell = this.matrix[promptIndex][modelIndex];\n \n if (cell && cell.canAssign) {\n if (cell.association) {\n this.updateAssociation(cell.promptId, cell.modelId, {\n priority: this.bulkEditPriority,\n status: this.bulkEditStatus\n });\n } else {\n this.createAssociation(cell.promptId, cell.modelId, this.bulkEditPriority);\n }\n }\n });\n \n this.selectedCells.clear();\n this.bulkEditMode = false;\n }\n \n public bulkRemoveSelectedCells(): void {\n if (this.selectedCells.size === 0) return;\n \n this.selectedCells.forEach(cellKey => {\n const [promptIndex, modelIndex] = cellKey.split('-').map(Number);\n const cell = this.matrix[promptIndex][modelIndex];\n \n if (cell && cell.association) {\n this.removeAssociation(cell.promptId, cell.modelId);\n }\n });\n \n this.selectedCells.clear();\n }\n \n public async saveChanges(): Promise<void> {\n try {\n this.isLoading = true;\n this.loadingMessage = 'Saving associations...';\n \n const md = new Metadata();\n if (!md) throw new Error('Metadata provider not available');\n \n const savePromises: Promise<boolean>[] = [];\n \n for (const association of this.associations) {\n if (association.isNew || association.isModified) {\n let entity: MJAIPromptModelEntity;\n \n if (association.association) {\n // Update existing\n entity = await md.GetEntityObject<MJAIPromptModelEntity>('MJ: AI Prompt Models', md.CurrentUser);\n await entity.Load(association.association.ID);\n } else {\n // Create new\n entity = await md.GetEntityObject<MJAIPromptModelEntity>('MJ: AI Prompt Models', md.CurrentUser);\n }\n \n entity.PromptID = association.promptId;\n entity.ModelID = association.modelId;\n entity.Priority = association.priority;\n entity.Status = association.status as any;\n \n savePromises.push(entity.Save());\n }\n }\n \n const results = await Promise.all(savePromises);\n const failures = results.filter(r => !r).length;\n \n if (failures === 0) {\n this.notificationService.CreateSimpleNotification('All associations saved successfully', 'success', 3000);\n // Reload data to get fresh state\n await this.loadData();\n } else {\n this.notificationService.CreateSimpleNotification(`${failures} association(s) failed to save`, 'warning', 4000);\n }\n \n } catch (error) {\n this.error = 'Failed to save associations. Please try again.';\n LogError('Error saving associations', undefined, error);\n this.notificationService.CreateSimpleNotification('Failed to save associations', 'error', 4000);\n } finally {\n this.isLoading = false;\n }\n }\n \n public hasUnsavedChanges(): boolean {\n return this.associations.some(a => a.isNew || a.isModified);\n }\n \n public discardChanges(): void {\n if (!this.hasUnsavedChanges()) return;\n \n const confirm = window.confirm('Discard all unsaved changes?');\n if (confirm) {\n this.loadData();\n }\n }\n \n public getAssociationCount(): number {\n return this.associations.filter(a => a.status === 'Active').length;\n }\n \n public getModelAssociationCount(modelId: string): number {\n return this.associations.filter(a => a.modelId === modelId && a.status === 'Active').length;\n }\n \n public getPromptAssociationCount(promptId: string): number {\n return this.associations.filter(a => a.promptId === promptId && a.status === 'Active').length;\n }\n \n public getCellTooltip(association: any): string {\n if (!association) return 'No association';\n return `Priority: ${association.priority || 'Not set'}`;\n }\n\n public getAveragePriority(): number {\n const activeAssociations = this.associations.filter(a => a.status === 'Active');\n if (activeAssociations.length === 0) return 0;\n \n const sum = activeAssociations.reduce((total, a) => total + a.priority, 0);\n return Math.round((sum / activeAssociations.length) * 100) / 100;\n }\n \n public sortAssociations(): void {\n this.associations.sort((a, b) => {\n let comparison = 0;\n \n switch (this.sortBy) {\n case 'prompt':\n comparison = a.promptName.localeCompare(b.promptName);\n break;\n case 'model':\n comparison = a.modelName.localeCompare(b.modelName);\n break;\n case 'priority':\n comparison = a.priority - b.priority;\n break;\n }\n \n return this.sortDirection === 'desc' ? -comparison : comparison;\n });\n \n this.buildMatrix();\n }\n \n public toggleSortDirection(): void {\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n this.sortAssociations();\n }\n \n public onViewModeChange(mode: 'matrix' | 'list'): void {\n this.viewMode = mode;\n this.selectedCells.clear();\n this.editingCell = null;\n }\n \n public exportMatrix(): void {\n const exportData = {\n prompts: this.prompts.map(p => ({ id: p.ID, name: p.Name })),\n models: this.models.map(m => ({ id: m.ID, name: m.Name })),\n associations: this.associations.map(a => ({\n promptId: a.promptId,\n promptName: a.promptName,\n modelId: a.modelId,\n modelName: a.modelName,\n priority: a.priority,\n status: a.status\n })),\n exportDate: new Date().toISOString()\n };\n \n const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `prompt-model-matrix-${new Date().toISOString().split('T')[0]}.json`;\n a.click();\n URL.revokeObjectURL(url);\n }\n\n public selectPrompt(prompt: MJAIPromptEntityExtended): void {\n this.promptSelected.emit(prompt);\n }\n}","<div class=\"model-prompt-priority-matrix\">\n <!-- Header toolbar -->\n <div class=\"matrix-toolbar\">\n <div class=\"toolbar-section\">\n <h5 class=\"toolbar-title\">\n <i class=\"fa-solid fa-table-cells\"></i>\n Model-Prompt Priority Matrix\n </h5>\n \n <div class=\"view-mode-toggle\">\n <div class=\"btn-group\" role=\"group\">\n <input \n type=\"radio\" \n class=\"btn-check\" \n name=\"viewMode\" \n id=\"matrixView\" \n value=\"matrix\"\n [(ngModel)]=\"viewMode\"\n (ngModelChange)=\"onViewModeChange($event)\">\n <label class=\"btn btn-outline-primary btn-sm\" for=\"matrixView\">\n <i class=\"fa-solid fa-table-cells\"></i>\n Matrix\n </label>\n \n <input \n type=\"radio\" \n class=\"btn-check\" \n name=\"viewMode\" \n id=\"listView\" \n value=\"list\"\n [(ngModel)]=\"viewMode\"\n (ngModelChange)=\"onViewModeChange($event)\">\n <label class=\"btn btn-outline-primary btn-sm\" for=\"listView\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </label>\n </div>\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n <div class=\"matrix-stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-link text-primary\"></i>\n {{ getAssociationCount() }} associations\n </span>\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-star text-warning\"></i>\n {{ getAveragePriority() }} avg priority\n </span>\n @if (hasUnsavedChanges()) {\n <span class=\"stat-item text-warning\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n Unsaved changes\n </span>\n }\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n @if (selectedCells.size > 0) {\n <div class=\"bulk-actions\">\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-primary\"\n [class.active]=\"bulkEditMode\"\n (click)=\"bulkEditMode = !bulkEditMode\"\n title=\"Bulk edit selected cells\">\n <i class=\"fa-solid fa-edit\"></i>\n Edit ({{ selectedCells.size }})\n </button>\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-danger\"\n (click)=\"bulkRemoveSelectedCells()\"\n title=\"Remove selected associations\">\n <i class=\"fa-solid fa-trash\"></i>\n Remove\n </button>\n </div>\n }\n \n <div class=\"action-buttons\">\n @if (hasUnsavedChanges()) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"discardChanges()\"\n title=\"Discard changes\">\n <i class=\"fa-solid fa-undo\"></i>\n Discard\n </button>\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-success\"\n (click)=\"saveChanges()\"\n [disabled]=\"isLoading\"\n title=\"Save changes\">\n <i class=\"fa-solid fa-save\"></i>\n Save\n </button>\n }\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-info\"\n (click)=\"exportMatrix()\"\n title=\"Export matrix\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n </div>\n </div>\n </div>\n \n <!-- Bulk edit panel -->\n @if (bulkEditMode && selectedCells.size > 0) {\n <div class=\"bulk-edit-panel\">\n <div class=\"bulk-edit-controls\">\n <div class=\"form-group\">\n <label for=\"bulkPriority\" class=\"form-label\">Priority:</label>\n <input \n type=\"number\" \n id=\"bulkPriority\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"bulkEditPriority\"\n min=\"1\"\n max=\"10\">\n </div>\n \n <div class=\"form-group\">\n <label for=\"bulkStatus\" class=\"form-label\">Status:</label>\n <select \n id=\"bulkStatus\"\n class=\"form-select form-select-sm\"\n [(ngModel)]=\"bulkEditStatus\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </div>\n \n <div class=\"form-group\">\n <button \n type=\"button\" \n class=\"btn btn-sm btn-primary\"\n (click)=\"bulkUpdateSelectedCells()\"\n title=\"Apply changes to selected cells\">\n <i class=\"fa-solid fa-check\"></i>\n Apply\n </button>\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"bulkEditMode = false\"\n title=\"Cancel bulk edit\">\n <i class=\"fa-solid fa-times\"></i>\n Cancel\n </button>\n </div>\n </div>\n \n <div class=\"bulk-edit-info\">\n <small class=\"text-muted\">\n Editing {{ selectedCells.size }} selected cell(s). \n Use Ctrl+Click for multi-select, Shift+Click for range select.\n </small>\n </div>\n </div>\n }\n \n <!-- Loading state -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"loadingMessage\" size=\"large\"></mj-loading>\n </div>\n } @else {\n <!-- Matrix view -->\n @if (viewMode === 'matrix') {\n <div class=\"matrix-container\">\n <div class=\"matrix-scroll\">\n <table class=\"matrix-table\">\n <!-- Header row with model names -->\n <thead>\n <tr>\n <th class=\"prompt-header\">Prompts \\\\ Models</th>\n @for (model of models; track model.ID) {\n <th class=\"model-header\" [title]=\"model.Description || model.Name\">\n <div class=\"header-content\">\n <div class=\"header-name\">{{ model.Name }}</div>\n <div class=\"header-stats\">\n <small class=\"text-muted\">{{ getModelAssociationCount(model.ID) }}</small>\n </div>\n </div>\n </th>\n }\n </tr>\n </thead>\n \n <!-- Matrix body -->\n <tbody>\n @for (prompt of prompts; track prompt.ID; let promptIndex = $index) {\n <tr class=\"matrix-row\">\n <th class=\"prompt-header\" [title]=\"prompt.Description || prompt.Name\" (click)=\"selectPrompt(prompt)\">\n <div class=\"header-content\">\n <div class=\"header-name\">{{ prompt.Name }}</div>\n <div class=\"header-stats\">\n <small class=\"text-muted\">{{ getPromptAssociationCount(prompt.ID) }}</small>\n </div>\n </div>\n </th>\n \n @for (model of models; track model.ID; let modelIndex = $index) {\n <td \n [class]=\"getCellClass(matrix[promptIndex][modelIndex])\"\n (click)=\"onCellClick(promptIndex, modelIndex, $event)\"\n (dblclick)=\"onCellDoubleClick(promptIndex, modelIndex)\"\n [title]=\"getCellTooltip(matrix[promptIndex][modelIndex])\">\n \n @if (matrix[promptIndex][modelIndex].association; as assoc) {\n <div class=\"cell-content\">\n <div class=\"priority-badge priority-{{ assoc.priority }}\">\n {{ assoc.priority }}\n </div>\n \n @if (assoc.status === 'Inactive') {\n <div class=\"status-indicator inactive\">\n <i class=\"fa-solid fa-ban\"></i>\n </div>\n }\n \n @if (assoc.isNew) {\n <div class=\"change-indicator new\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n } @else if (assoc.isModified) {\n <div class=\"change-indicator modified\">\n <i class=\"fa-solid fa-edit\"></i>\n </div>\n }\n \n @if (showPerformanceOverlay && performanceData[assoc.promptId + '_' + assoc.modelId]) {\n <div class=\"performance-overlay\">\n <small>{{ performanceData[assoc.promptId + '_' + assoc.modelId].avgResponseTime }}ms</small>\n </div>\n }\n </div>\n } @else {\n <div class=\"cell-content empty\">\n @if (matrix[promptIndex][modelIndex].canAssign) {\n <div class=\"empty-cell-indicator\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n } @else {\n <div class=\"blocked-cell-indicator\">\n <i class=\"fa-solid fa-ban\"></i>\n </div>\n }\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n \n <!-- List view -->\n @if (viewMode === 'list') {\n <div class=\"list-container\">\n <div class=\"list-header\">\n <div class=\"list-controls\">\n <div class=\"sort-controls\">\n <label class=\"form-label\">Sort by:</label>\n <select \n class=\"form-select form-select-sm\"\n [(ngModel)]=\"sortBy\"\n (ngModelChange)=\"sortAssociations()\">\n <option value=\"prompt\">Prompt Name</option>\n <option value=\"model\">Model Name</option>\n <option value=\"priority\">Priority</option>\n </select>\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"toggleSortDirection()\"\n [title]=\"'Sort ' + (sortDirection === 'asc' ? 'descending' : 'ascending')\">\n <i class=\"fa-solid\" [class.fa-sort-up]=\"sortDirection === 'asc'\" [class.fa-sort-down]=\"sortDirection === 'desc'\"></i>\n </button>\n </div>\n \n <div class=\"filter-controls\">\n <div class=\"form-check form-switch\">\n <input \n class=\"form-check-input\" \n type=\"checkbox\" \n id=\"showInactive\"\n [(ngModel)]=\"showInactiveAssociations\">\n <label class=\"form-check-label\" for=\"showInactive\">\n Show inactive\n </label>\n </div>\n </div>\n </div>\n </div>\n \n <div class=\"associations-list\">\n @for (association of associations; track association.promptId + '_' + association.modelId) {\n @if (showInactiveAssociations || association.status === 'Active') {\n <div class=\"association-item\" \n [class.inactive]=\"association.status === 'Inactive'\"\n [class.new]=\"association.isNew\"\n [class.modified]=\"association.isModified\">\n \n <div class=\"association-header\">\n <div class=\"association-names\">\n <strong class=\"prompt-name\">{{ association.promptName }}</strong>\n <i class=\"fa-solid fa-arrow-right text-muted\"></i>\n <strong class=\"model-name\">{{ association.modelName }}</strong>\n </div>\n \n <div class=\"association-actions\">\n @if (!readonly) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-primary\"\n title=\"Edit association\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-danger\"\n (click)=\"removeAssociation(association.promptId, association.modelId)\"\n title=\"Remove association\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n \n <div class=\"association-details\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Priority:</span>\n <span class=\"priority-badge priority-{{ association.priority }}\">\n {{ association.priority }}\n </span>\n </div>\n \n <div class=\"detail-item\">\n <span class=\"detail-label\">Status:</span>\n <span class=\"status-badge\" [class.badge-success]=\"association.status === 'Active'\" [class.badge-secondary]=\"association.status === 'Inactive'\">\n {{ association.status }}\n </span>\n </div>\n \n @if (association.isNew) {\n <div class=\"detail-item\">\n <span class=\"change-badge new\">\n <i class=\"fa-solid fa-plus\"></i>\n New\n </span>\n </div>\n } @else if (association.isModified) {\n <div class=\"detail-item\">\n <span class=\"change-badge modified\">\n <i class=\"fa-solid fa-edit\"></i>\n Modified\n </span>\n </div>\n }\n </div>\n </div>\n }\n }\n \n @if (associations.length === 0) {\n <div class=\"no-associations-message\">\n <i class=\"fa-solid fa-info-circle text-muted\"></i>\n <p class=\"text-muted mb-0\">No prompt-model associations found. Click on matrix cells to create associations.</p>\n </div>\n }\n </div>\n </div>\n }\n }\n \n <!-- Error state -->\n @if (error) {\n <div class=\"error-container\">\n <div class=\"alert alert-danger\" role=\"alert\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-danger ms-2\"\n (click)=\"loadData()\">\n <i class=\"fa-solid fa-refresh\"></i>\n Retry\n </button>\n </div>\n </div>\n }\n</div>"]}
|
|
1
|
+
{"version":3,"file":"model-prompt-priority-matrix.component.js","sourceRoot":"","sources":["../../../../src/AI/components/prompts/model-prompt-priority-matrix.component.ts","../../../../src/AI/components/prompts/model-prompt-priority-matrix.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { RunView, Metadata, LogError, LogStatus } from '@memberjunction/core';\nimport { MJAIPromptModelEntity } from '@memberjunction/core-entities';\nimport { Subject, BehaviorSubject } from 'rxjs';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJAIModelEntityExtended, MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\nimport { UUIDsEqual } from '@memberjunction/global';\n\ninterface PromptModelAssociation {\n promptId: string;\n promptName: string;\n modelId: string;\n modelName: string;\n priority: number;\n status: string;\n association: MJAIPromptModelEntity | null;\n isNew: boolean;\n isModified: boolean;\n}\n\ninterface MatrixCell {\n promptId: string;\n modelId: string;\n association: PromptModelAssociation | null;\n canAssign: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'app-model-prompt-priority-matrix',\n templateUrl: './model-prompt-priority-matrix.component.html',\n styleUrls: ['./model-prompt-priority-matrix.component.css']\n})\nexport class ModelPromptPriorityMatrixComponent implements OnInit, OnDestroy {\n @Input() selectedPrompts: MJAIPromptEntityExtended[] = [];\n @Input() selectedModels: MJAIModelEntityExtended[] = [];\n @Input() readonly = false;\n \n @Output() associationsChange = new EventEmitter<PromptModelAssociation[]>();\n @Output() stateChange = new EventEmitter<any>();\n @Output() promptSelected = new EventEmitter<MJAIPromptEntityExtended>();\n \n // Data\n public prompts: MJAIPromptEntityExtended[] = [];\n public models: MJAIModelEntityExtended[] = [];\n public associations: PromptModelAssociation[] = [];\n public matrix: MatrixCell[][] = [];\n \n // UI State\n public isLoading = false;\n public loadingMessage = '';\n public error: string | null = null;\n public viewMode: 'matrix' | 'list' = 'matrix';\n public sortBy: 'prompt' | 'model' | 'priority' = 'priority';\n public sortDirection: 'asc' | 'desc' = 'asc';\n public showInactiveAssociations = false;\n \n // Selection and editing\n public selectedCells: Set<string> = new Set();\n public editingCell: string | null = null;\n public bulkEditMode = false;\n public bulkEditPriority = 1;\n public bulkEditStatus = 'Active';\n \n // Filtering\n public promptFilter$ = new BehaviorSubject<string>('');\n public modelFilter$ = new BehaviorSubject<string>('');\n public statusFilter$ = new BehaviorSubject<string>('all');\n \n // Performance metrics\n public performanceData: { [key: string]: any } = {};\n public showPerformanceOverlay = false;\n \n private destroy$ = new Subject<void>();\n \n constructor(private notificationService: MJNotificationService) {}\n \n ngOnInit(): void {\n this.loadData();\n }\n \n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n \n public async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.error = null;\n this.loadingMessage = 'Loading prompts, models, and associations...';\n \n const [prompts, models, associations] = await Promise.all([\n this.loadPrompts(),\n this.loadModels(),\n this.loadAssociations()\n ]);\n \n this.prompts = this.selectedPrompts.length > 0 ? this.selectedPrompts : prompts;\n this.models = this.selectedModels.length > 0 ? this.selectedModels : models;\n \n this.buildAssociations(associations);\n this.buildMatrix();\n \n LogStatus('Model-prompt priority matrix loaded successfully');\n } catch (error) {\n this.error = 'Failed to load matrix data. Please try again.';\n LogError('Error loading matrix data', undefined, error);\n } finally {\n this.isLoading = false;\n }\n }\n \n private async loadPrompts(): Promise<MJAIPromptEntityExtended[]> {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: 'MJ: AI Prompts',\n ExtraFilter: \"Status = 'Active'\",\n OrderBy: 'Name',\n UserSearchString: '',\n IgnoreMaxRows: false,\n MaxRows: 500\n });\n \n if (result && result.Success && result.Results) {\n return result.Results as MJAIPromptEntityExtended[];\n } else {\n throw new Error('Failed to load AI prompts');\n }\n }\n \n private async loadModels(): Promise<MJAIModelEntityExtended[]> {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: 'MJ: AI Models',\n ExtraFilter: \"IsActive = 1\",\n OrderBy: 'Name',\n UserSearchString: '',\n IgnoreMaxRows: false,\n MaxRows: 200\n });\n \n if (result && result.Success && result.Results) {\n return result.Results as MJAIModelEntityExtended[];\n } else {\n throw new Error('Failed to load AI models');\n }\n }\n \n private async loadAssociations(): Promise<MJAIPromptModelEntity[]> {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: 'MJ: AI Prompt Models',\n ExtraFilter: '',\n OrderBy: 'Priority',\n UserSearchString: '',\n IgnoreMaxRows: false,\n MaxRows: 2000\n });\n \n if (result && result.Success && result.Results) {\n return result.Results as MJAIPromptModelEntity[];\n } else {\n throw new Error('Failed to load prompt-model associations');\n }\n }\n \n private buildAssociations(dbAssociations: MJAIPromptModelEntity[]): void {\n this.associations = [];\n \n // Create associations for existing database records\n dbAssociations.forEach(dbAssoc => {\n const prompt = this.prompts.find(p => UUIDsEqual(p.ID, dbAssoc.PromptID));\n const model = this.models.find(m => UUIDsEqual(m.ID, dbAssoc.ModelID));\n \n if (prompt && model) {\n this.associations.push({\n promptId: prompt.ID,\n promptName: prompt.Name,\n modelId: model.ID,\n modelName: model.Name,\n priority: dbAssoc.Priority || 1,\n status: dbAssoc.Status || 'Active',\n association: dbAssoc,\n isNew: false,\n isModified: false\n });\n }\n });\n }\n \n private buildMatrix(): void {\n this.matrix = [];\n \n this.prompts.forEach((prompt, promptIndex) => {\n this.matrix[promptIndex] = [];\n \n this.models.forEach((model, modelIndex) => {\n const association = this.associations.find(a => \n UUIDsEqual(a.promptId, prompt.ID) && UUIDsEqual(a.modelId, model.ID)\n );\n \n this.matrix[promptIndex][modelIndex] = {\n promptId: prompt.ID,\n modelId: model.ID,\n association: association || null,\n canAssign: this.canAssignModelToPrompt(prompt, model)\n };\n });\n });\n }\n \n private canAssignModelToPrompt(prompt: MJAIPromptEntityExtended, model: MJAIModelEntityExtended): boolean {\n // Check model type compatibility\n if (prompt.OutputType && model.AIModelTypeID) {\n // Add business logic for compatibility checking\n return true;\n }\n return true;\n }\n \n public getCellKey(promptIndex: number, modelIndex: number): string {\n return `${promptIndex}-${modelIndex}`;\n }\n \n public getCellClass(cell: MatrixCell): string {\n const classes = ['matrix-cell'];\n \n if (cell.association) {\n classes.push('has-association');\n classes.push(`priority-${Math.min(cell.association.priority, 5)}`);\n \n if (cell.association.status === 'Inactive') {\n classes.push('inactive');\n }\n \n if (cell.association.isNew) {\n classes.push('new');\n }\n \n if (cell.association.isModified) {\n classes.push('modified');\n }\n } else {\n classes.push('no-association');\n }\n \n if (!cell.canAssign) {\n classes.push('cannot-assign');\n }\n \n const cellKey = this.getCellKey(\n this.prompts.findIndex(p => UUIDsEqual(p.ID, cell.promptId)),\n this.models.findIndex(m => UUIDsEqual(m.ID, cell.modelId))\n );\n \n if (this.selectedCells.has(cellKey)) {\n classes.push('selected');\n }\n \n if (this.editingCell === cellKey) {\n classes.push('editing');\n }\n \n return classes.join(' ');\n }\n \n public onCellClick(promptIndex: number, modelIndex: number, event: MouseEvent): void {\n if (this.readonly) return;\n \n const cellKey = this.getCellKey(promptIndex, modelIndex);\n const cell = this.matrix[promptIndex][modelIndex];\n \n if (event.ctrlKey || event.metaKey) {\n // Multi-select mode\n if (this.selectedCells.has(cellKey)) {\n this.selectedCells.delete(cellKey);\n } else {\n this.selectedCells.add(cellKey);\n }\n } else if (event.shiftKey && this.selectedCells.size > 0) {\n // Range select mode\n this.selectRange(promptIndex, modelIndex);\n } else {\n // Single select mode\n this.selectedCells.clear();\n if (cell.canAssign) {\n this.selectedCells.add(cellKey);\n }\n }\n }\n \n public onCellDoubleClick(promptIndex: number, modelIndex: number): void {\n if (this.readonly) return;\n \n const cellKey = this.getCellKey(promptIndex, modelIndex);\n const cell = this.matrix[promptIndex][modelIndex];\n \n if (cell.canAssign) {\n this.editingCell = cellKey;\n \n if (!cell.association) {\n // Create new association\n this.createAssociation(cell.promptId, cell.modelId);\n }\n }\n }\n \n private selectRange(endPromptIndex: number, endModelIndex: number): void {\n const selectedKeys = Array.from(this.selectedCells);\n if (selectedKeys.length === 0) return;\n \n const lastSelectedKey = selectedKeys[selectedKeys.length - 1];\n const [startPromptIndex, startModelIndex] = lastSelectedKey.split('-').map(Number);\n \n const minPromptIndex = Math.min(startPromptIndex, endPromptIndex);\n const maxPromptIndex = Math.max(startPromptIndex, endPromptIndex);\n const minModelIndex = Math.min(startModelIndex, endModelIndex);\n const maxModelIndex = Math.max(startModelIndex, endModelIndex);\n \n this.selectedCells.clear();\n \n for (let p = minPromptIndex; p <= maxPromptIndex; p++) {\n for (let m = minModelIndex; m <= maxModelIndex; m++) {\n const cell = this.matrix[p][m];\n if (cell && cell.canAssign) {\n this.selectedCells.add(this.getCellKey(p, m));\n }\n }\n }\n }\n \n public createAssociation(promptId: string, modelId: string, priority: number = 1): void {\n const prompt = this.prompts.find(p => UUIDsEqual(p.ID, promptId));\n const model = this.models.find(m => UUIDsEqual(m.ID, modelId));\n \n if (!prompt || !model) return;\n \n const newAssociation: PromptModelAssociation = {\n promptId,\n promptName: prompt.Name,\n modelId,\n modelName: model.Name,\n priority,\n status: 'Active',\n association: null,\n isNew: true,\n isModified: false\n };\n \n this.associations.push(newAssociation);\n this.buildMatrix();\n this.associationsChange.emit(this.associations);\n }\n \n public updateAssociation(promptId: string, modelId: string, updates: Partial<PromptModelAssociation>): void {\n const associationIndex = this.associations.findIndex(a => \n a.promptId === promptId && a.modelId === modelId\n );\n \n if (associationIndex >= 0) {\n const association = this.associations[associationIndex];\n Object.assign(association, updates);\n \n if (!association.isNew) {\n association.isModified = true;\n }\n \n this.buildMatrix();\n this.associationsChange.emit(this.associations);\n }\n }\n \n public removeAssociation(promptId: string, modelId: string): void {\n const associationIndex = this.associations.findIndex(a => \n a.promptId === promptId && a.modelId === modelId\n );\n \n if (associationIndex >= 0) {\n this.associations.splice(associationIndex, 1);\n this.buildMatrix();\n this.associationsChange.emit(this.associations);\n }\n }\n \n public bulkUpdateSelectedCells(): void {\n if (this.selectedCells.size === 0) return;\n \n this.selectedCells.forEach(cellKey => {\n const [promptIndex, modelIndex] = cellKey.split('-').map(Number);\n const cell = this.matrix[promptIndex][modelIndex];\n \n if (cell && cell.canAssign) {\n if (cell.association) {\n this.updateAssociation(cell.promptId, cell.modelId, {\n priority: this.bulkEditPriority,\n status: this.bulkEditStatus\n });\n } else {\n this.createAssociation(cell.promptId, cell.modelId, this.bulkEditPriority);\n }\n }\n });\n \n this.selectedCells.clear();\n this.bulkEditMode = false;\n }\n \n public bulkRemoveSelectedCells(): void {\n if (this.selectedCells.size === 0) return;\n \n this.selectedCells.forEach(cellKey => {\n const [promptIndex, modelIndex] = cellKey.split('-').map(Number);\n const cell = this.matrix[promptIndex][modelIndex];\n \n if (cell && cell.association) {\n this.removeAssociation(cell.promptId, cell.modelId);\n }\n });\n \n this.selectedCells.clear();\n }\n \n public async saveChanges(): Promise<void> {\n try {\n this.isLoading = true;\n this.loadingMessage = 'Saving associations...';\n \n const md = new Metadata();\n if (!md) throw new Error('Metadata provider not available');\n \n const savePromises: Promise<boolean>[] = [];\n \n for (const association of this.associations) {\n if (association.isNew || association.isModified) {\n let entity: MJAIPromptModelEntity;\n \n if (association.association) {\n // Update existing\n entity = await md.GetEntityObject<MJAIPromptModelEntity>('MJ: AI Prompt Models', md.CurrentUser);\n await entity.Load(association.association.ID);\n } else {\n // Create new\n entity = await md.GetEntityObject<MJAIPromptModelEntity>('MJ: AI Prompt Models', md.CurrentUser);\n }\n \n entity.PromptID = association.promptId;\n entity.ModelID = association.modelId;\n entity.Priority = association.priority;\n entity.Status = association.status as any;\n \n savePromises.push(entity.Save());\n }\n }\n \n const results = await Promise.all(savePromises);\n const failures = results.filter(r => !r).length;\n \n if (failures === 0) {\n this.notificationService.CreateSimpleNotification('All associations saved successfully', 'success', 3000);\n // Reload data to get fresh state\n await this.loadData();\n } else {\n this.notificationService.CreateSimpleNotification(`${failures} association(s) failed to save`, 'warning', 4000);\n }\n \n } catch (error) {\n this.error = 'Failed to save associations. Please try again.';\n LogError('Error saving associations', undefined, error);\n this.notificationService.CreateSimpleNotification('Failed to save associations', 'error', 4000);\n } finally {\n this.isLoading = false;\n }\n }\n \n public hasUnsavedChanges(): boolean {\n return this.associations.some(a => a.isNew || a.isModified);\n }\n \n public discardChanges(): void {\n if (!this.hasUnsavedChanges()) return;\n \n const confirm = window.confirm('Discard all unsaved changes?');\n if (confirm) {\n this.loadData();\n }\n }\n \n public getAssociationCount(): number {\n return this.associations.filter(a => a.status === 'Active').length;\n }\n \n public getModelAssociationCount(modelId: string): number {\n return this.associations.filter(a => a.modelId === modelId && a.status === 'Active').length;\n }\n \n public getPromptAssociationCount(promptId: string): number {\n return this.associations.filter(a => a.promptId === promptId && a.status === 'Active').length;\n }\n \n public getCellTooltip(association: any): string {\n if (!association) return 'No association';\n return `Priority: ${association.priority || 'Not set'}`;\n }\n\n public getAveragePriority(): number {\n const activeAssociations = this.associations.filter(a => a.status === 'Active');\n if (activeAssociations.length === 0) return 0;\n \n const sum = activeAssociations.reduce((total, a) => total + a.priority, 0);\n return Math.round((sum / activeAssociations.length) * 100) / 100;\n }\n \n public sortAssociations(): void {\n this.associations.sort((a, b) => {\n let comparison = 0;\n \n switch (this.sortBy) {\n case 'prompt':\n comparison = a.promptName.localeCompare(b.promptName);\n break;\n case 'model':\n comparison = a.modelName.localeCompare(b.modelName);\n break;\n case 'priority':\n comparison = a.priority - b.priority;\n break;\n }\n \n return this.sortDirection === 'desc' ? -comparison : comparison;\n });\n \n this.buildMatrix();\n }\n \n public toggleSortDirection(): void {\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n this.sortAssociations();\n }\n \n public onViewModeChange(mode: 'matrix' | 'list'): void {\n this.viewMode = mode;\n this.selectedCells.clear();\n this.editingCell = null;\n }\n \n public exportMatrix(): void {\n const exportData = {\n prompts: this.prompts.map(p => ({ id: p.ID, name: p.Name })),\n models: this.models.map(m => ({ id: m.ID, name: m.Name })),\n associations: this.associations.map(a => ({\n promptId: a.promptId,\n promptName: a.promptName,\n modelId: a.modelId,\n modelName: a.modelName,\n priority: a.priority,\n status: a.status\n })),\n exportDate: new Date().toISOString()\n };\n \n const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `prompt-model-matrix-${new Date().toISOString().split('T')[0]}.json`;\n a.click();\n URL.revokeObjectURL(url);\n }\n\n public selectPrompt(prompt: MJAIPromptEntityExtended): void {\n this.promptSelected.emit(prompt);\n }\n}","<div class=\"model-prompt-priority-matrix\">\n <!-- Header toolbar -->\n <div class=\"matrix-toolbar\">\n <div class=\"toolbar-section\">\n <h5 class=\"toolbar-title\">\n <i class=\"fa-solid fa-table-cells\"></i>\n Model-Prompt Priority Matrix\n </h5>\n \n <div class=\"view-mode-toggle\">\n <div class=\"btn-group\" role=\"group\">\n <input \n type=\"radio\" \n class=\"btn-check\" \n name=\"viewMode\" \n id=\"matrixView\" \n value=\"matrix\"\n [(ngModel)]=\"viewMode\"\n (ngModelChange)=\"onViewModeChange($event)\">\n <label class=\"btn btn-outline-primary btn-sm\" for=\"matrixView\">\n <i class=\"fa-solid fa-table-cells\"></i>\n Matrix\n </label>\n \n <input \n type=\"radio\" \n class=\"btn-check\" \n name=\"viewMode\" \n id=\"listView\" \n value=\"list\"\n [(ngModel)]=\"viewMode\"\n (ngModelChange)=\"onViewModeChange($event)\">\n <label class=\"btn btn-outline-primary btn-sm\" for=\"listView\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </label>\n </div>\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n <div class=\"matrix-stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-link text-primary\"></i>\n {{ getAssociationCount() }} associations\n </span>\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-star text-warning\"></i>\n {{ getAveragePriority() }} avg priority\n </span>\n @if (hasUnsavedChanges()) {\n <span class=\"stat-item text-warning\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n Unsaved changes\n </span>\n }\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n @if (selectedCells.size > 0) {\n <div class=\"bulk-actions\">\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-primary\"\n [class.active]=\"bulkEditMode\"\n (click)=\"bulkEditMode = !bulkEditMode\"\n title=\"Bulk edit selected cells\">\n <i class=\"fa-solid fa-edit\"></i>\n Edit ({{ selectedCells.size }})\n </button>\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-danger\"\n (click)=\"bulkRemoveSelectedCells()\"\n title=\"Remove selected associations\">\n <i class=\"fa-solid fa-trash\"></i>\n Remove\n </button>\n </div>\n }\n \n <div class=\"action-buttons\">\n @if (hasUnsavedChanges()) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"discardChanges()\"\n title=\"Discard changes\">\n <i class=\"fa-solid fa-undo\"></i>\n Discard\n </button>\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-success\"\n (click)=\"saveChanges()\"\n [disabled]=\"isLoading\"\n title=\"Save changes\">\n <i class=\"fa-solid fa-save\"></i>\n Save\n </button>\n }\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-info\"\n (click)=\"exportMatrix()\"\n title=\"Export matrix\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n </div>\n </div>\n </div>\n \n <!-- Bulk edit panel -->\n @if (bulkEditMode && selectedCells.size > 0) {\n <div class=\"bulk-edit-panel\">\n <div class=\"bulk-edit-controls\">\n <div class=\"form-group\">\n <label for=\"bulkPriority\" class=\"form-label\">Priority:</label>\n <input \n type=\"number\" \n id=\"bulkPriority\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"bulkEditPriority\"\n min=\"1\"\n max=\"10\">\n </div>\n \n <div class=\"form-group\">\n <label for=\"bulkStatus\" class=\"form-label\">Status:</label>\n <select \n id=\"bulkStatus\"\n class=\"form-select form-select-sm\"\n [(ngModel)]=\"bulkEditStatus\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </div>\n \n <div class=\"form-group\">\n <button \n type=\"button\" \n class=\"btn btn-sm btn-primary\"\n (click)=\"bulkUpdateSelectedCells()\"\n title=\"Apply changes to selected cells\">\n <i class=\"fa-solid fa-check\"></i>\n Apply\n </button>\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"bulkEditMode = false\"\n title=\"Cancel bulk edit\">\n <i class=\"fa-solid fa-times\"></i>\n Cancel\n </button>\n </div>\n </div>\n \n <div class=\"bulk-edit-info\">\n <small class=\"text-muted\">\n Editing {{ selectedCells.size }} selected cell(s). \n Use Ctrl+Click for multi-select, Shift+Click for range select.\n </small>\n </div>\n </div>\n }\n \n <!-- Loading state -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"loadingMessage\" size=\"large\"></mj-loading>\n </div>\n } @else {\n <!-- Matrix view -->\n @if (viewMode === 'matrix') {\n <div class=\"matrix-container\">\n <div class=\"matrix-scroll\">\n <table class=\"matrix-table\">\n <!-- Header row with model names -->\n <thead>\n <tr>\n <th class=\"prompt-header\">Prompts \\\\ Models</th>\n @for (model of models; track model.ID) {\n <th class=\"model-header\" [title]=\"model.Description || model.Name\">\n <div class=\"header-content\">\n <div class=\"header-name\">{{ model.Name }}</div>\n <div class=\"header-stats\">\n <small class=\"text-muted\">{{ getModelAssociationCount(model.ID) }}</small>\n </div>\n </div>\n </th>\n }\n </tr>\n </thead>\n \n <!-- Matrix body -->\n <tbody>\n @for (prompt of prompts; track prompt.ID; let promptIndex = $index) {\n <tr class=\"matrix-row\">\n <th class=\"prompt-header\" [title]=\"prompt.Description || prompt.Name\" (click)=\"selectPrompt(prompt)\">\n <div class=\"header-content\">\n <div class=\"header-name\">{{ prompt.Name }}</div>\n <div class=\"header-stats\">\n <small class=\"text-muted\">{{ getPromptAssociationCount(prompt.ID) }}</small>\n </div>\n </div>\n </th>\n \n @for (model of models; track model.ID; let modelIndex = $index) {\n <td \n [class]=\"getCellClass(matrix[promptIndex][modelIndex])\"\n (click)=\"onCellClick(promptIndex, modelIndex, $event)\"\n (dblclick)=\"onCellDoubleClick(promptIndex, modelIndex)\"\n [title]=\"getCellTooltip(matrix[promptIndex][modelIndex])\">\n \n @if (matrix[promptIndex][modelIndex].association; as assoc) {\n <div class=\"cell-content\">\n <div class=\"priority-badge priority-{{ assoc.priority }}\">\n {{ assoc.priority }}\n </div>\n \n @if (assoc.status === 'Inactive') {\n <div class=\"status-indicator inactive\">\n <i class=\"fa-solid fa-ban\"></i>\n </div>\n }\n \n @if (assoc.isNew) {\n <div class=\"change-indicator new\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n } @else if (assoc.isModified) {\n <div class=\"change-indicator modified\">\n <i class=\"fa-solid fa-edit\"></i>\n </div>\n }\n \n @if (showPerformanceOverlay && performanceData[assoc.promptId + '_' + assoc.modelId]) {\n <div class=\"performance-overlay\">\n <small>{{ performanceData[assoc.promptId + '_' + assoc.modelId].avgResponseTime }}ms</small>\n </div>\n }\n </div>\n } @else {\n <div class=\"cell-content empty\">\n @if (matrix[promptIndex][modelIndex].canAssign) {\n <div class=\"empty-cell-indicator\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n } @else {\n <div class=\"blocked-cell-indicator\">\n <i class=\"fa-solid fa-ban\"></i>\n </div>\n }\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n \n <!-- List view -->\n @if (viewMode === 'list') {\n <div class=\"list-container\">\n <div class=\"list-header\">\n <div class=\"list-controls\">\n <div class=\"sort-controls\">\n <label class=\"form-label\">Sort by:</label>\n <select \n class=\"form-select form-select-sm\"\n [(ngModel)]=\"sortBy\"\n (ngModelChange)=\"sortAssociations()\">\n <option value=\"prompt\">Prompt Name</option>\n <option value=\"model\">Model Name</option>\n <option value=\"priority\">Priority</option>\n </select>\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"toggleSortDirection()\"\n [title]=\"'Sort ' + (sortDirection === 'asc' ? 'descending' : 'ascending')\">\n <i class=\"fa-solid\" [class.fa-sort-up]=\"sortDirection === 'asc'\" [class.fa-sort-down]=\"sortDirection === 'desc'\"></i>\n </button>\n </div>\n \n <div class=\"filter-controls\">\n <div class=\"form-check form-switch\">\n <input \n class=\"form-check-input\" \n type=\"checkbox\" \n id=\"showInactive\"\n [(ngModel)]=\"showInactiveAssociations\">\n <label class=\"form-check-label\" for=\"showInactive\">\n Show inactive\n </label>\n </div>\n </div>\n </div>\n </div>\n \n <div class=\"associations-list\">\n @for (association of associations; track association.promptId + '_' + association.modelId) {\n @if (showInactiveAssociations || association.status === 'Active') {\n <div class=\"association-item\" \n [class.inactive]=\"association.status === 'Inactive'\"\n [class.new]=\"association.isNew\"\n [class.modified]=\"association.isModified\">\n \n <div class=\"association-header\">\n <div class=\"association-names\">\n <strong class=\"prompt-name\">{{ association.promptName }}</strong>\n <i class=\"fa-solid fa-arrow-right text-muted\"></i>\n <strong class=\"model-name\">{{ association.modelName }}</strong>\n </div>\n \n <div class=\"association-actions\">\n @if (!readonly) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-primary\"\n title=\"Edit association\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n \n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-danger\"\n (click)=\"removeAssociation(association.promptId, association.modelId)\"\n title=\"Remove association\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n \n <div class=\"association-details\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Priority:</span>\n <span class=\"priority-badge priority-{{ association.priority }}\">\n {{ association.priority }}\n </span>\n </div>\n \n <div class=\"detail-item\">\n <span class=\"detail-label\">Status:</span>\n <span class=\"status-badge\" [class.badge-success]=\"association.status === 'Active'\" [class.badge-secondary]=\"association.status === 'Inactive'\">\n {{ association.status }}\n </span>\n </div>\n \n @if (association.isNew) {\n <div class=\"detail-item\">\n <span class=\"change-badge new\">\n <i class=\"fa-solid fa-plus\"></i>\n New\n </span>\n </div>\n } @else if (association.isModified) {\n <div class=\"detail-item\">\n <span class=\"change-badge modified\">\n <i class=\"fa-solid fa-edit\"></i>\n Modified\n </span>\n </div>\n }\n </div>\n </div>\n }\n }\n \n @if (associations.length === 0) {\n <div class=\"no-associations-message\">\n <i class=\"fa-solid fa-info-circle text-muted\"></i>\n <p class=\"text-muted mb-0\">No prompt-model associations found. Click on matrix cells to create associations.</p>\n </div>\n }\n </div>\n </div>\n }\n }\n \n <!-- Error state -->\n @if (error) {\n <div class=\"error-container\">\n <div class=\"alert alert-danger\" role=\"alert\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-danger ms-2\"\n (click)=\"loadData()\">\n <i class=\"fa-solid fa-refresh\"></i>\n Retry\n </button>\n </div>\n </div>\n }\n</div>"]}
|
|
@@ -13,7 +13,7 @@ import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
|
13
13
|
import { TemplateEngineBase } from '@memberjunction/templates-base-types';
|
|
14
14
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
15
15
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
16
|
-
import { RegisterClass } from '@memberjunction/global';
|
|
16
|
+
import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
17
17
|
import * as i0 from "@angular/core";
|
|
18
18
|
import * as i1 from "@memberjunction/ng-shared";
|
|
19
19
|
import * as i2 from "@memberjunction/ng-ai-test-harness";
|
|
@@ -859,11 +859,11 @@ let PromptManagementComponent = class PromptManagementComponent extends BaseReso
|
|
|
859
859
|
return false;
|
|
860
860
|
}
|
|
861
861
|
// Category filter
|
|
862
|
-
if (this.selectedCategory !== 'all' && prompt.CategoryID
|
|
862
|
+
if (this.selectedCategory !== 'all' && !UUIDsEqual(prompt.CategoryID, this.selectedCategory)) {
|
|
863
863
|
return false;
|
|
864
864
|
}
|
|
865
865
|
// Type filter
|
|
866
|
-
if (this.selectedType !== 'all' && prompt.TypeID
|
|
866
|
+
if (this.selectedType !== 'all' && !UUIDsEqual(prompt.TypeID, this.selectedType)) {
|
|
867
867
|
return false;
|
|
868
868
|
}
|
|
869
869
|
// Status filter
|