@memberjunction/ng-dashboards 5.21.0 → 5.23.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.
Files changed (262) hide show
  1. package/README.md +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +364 -362
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +313 -0
  7. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -0
  8. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2792 -0
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -0
  10. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +382 -0
  11. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -0
  12. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2683 -0
  13. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -0
  14. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  15. package/dist/AI/components/execution-monitoring.component.js +191 -197
  16. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  17. package/dist/AI/components/models/model-management.component.js +9 -8
  18. package/dist/AI/components/models/model-management.component.js.map +1 -1
  19. package/dist/AI/components/prompts/prompt-management.component.js +305 -299
  20. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  21. package/dist/AI/components/system/system-configuration.component.js +319 -313
  22. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  23. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +240 -0
  24. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -0
  25. package/dist/AI/components/vectors/vector-management-resource.component.js +1767 -0
  26. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -0
  27. package/dist/AI/index.d.ts +3 -0
  28. package/dist/AI/index.d.ts.map +1 -1
  29. package/dist/AI/index.js +6 -0
  30. package/dist/AI/index.js.map +1 -1
  31. package/dist/AI/services/ai-instrumentation.service.d.ts +50 -7
  32. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  33. package/dist/AI/services/ai-instrumentation.service.js +161 -193
  34. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  35. package/dist/APIKeys/api-applications-panel.component.js +10 -12
  36. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  37. package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
  38. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  39. package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
  40. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  41. package/dist/APIKeys/api-scopes-panel.component.js +61 -68
  42. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  43. package/dist/APIKeys/api-usage-panel.component.js +10 -11
  44. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  45. package/dist/Actions/components/actions-list-view.component.js +82 -96
  46. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  47. package/dist/Actions/components/actions-overview.component.js +130 -134
  48. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  49. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  50. package/dist/Actions/components/categories-list-view.component.js +40 -46
  51. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  52. package/dist/Actions/components/code-management.component.js +2 -2
  53. package/dist/Actions/components/code-management.component.js.map +1 -1
  54. package/dist/Actions/components/entity-integration.component.js +2 -2
  55. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  56. package/dist/Actions/components/execution-monitoring.component.js +127 -132
  57. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  58. package/dist/Actions/components/executions-list-view.component.js +2 -2
  59. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  60. package/dist/Actions/components/explorer/action-card.component.js +11 -17
  61. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  62. package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
  63. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  64. package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
  65. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  66. package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
  67. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  68. package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
  69. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  70. package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
  71. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  72. package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
  73. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  74. package/dist/Actions/components/scheduled-actions.component.js +2 -2
  75. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  76. package/dist/Actions/components/security-permissions.component.js +2 -2
  77. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  78. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
  79. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  80. package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
  81. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  82. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
  83. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  84. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
  85. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  86. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
  87. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  88. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
  89. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  90. package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
  91. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  92. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
  93. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  94. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
  95. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  96. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
  97. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  98. package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
  99. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  100. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
  101. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  102. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  103. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
  104. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  105. package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
  106. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  107. package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
  108. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  109. package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
  110. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  111. package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
  112. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  113. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +11 -0
  114. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  115. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +57 -0
  116. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  117. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
  118. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  119. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +1 -1
  120. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +10 -2
  121. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  122. package/dist/DataExplorer/data-explorer-dashboard.component.js +35 -11
  123. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  124. package/dist/DataExplorer/data-explorer-resource.component.d.ts +1 -0
  125. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  126. package/dist/DataExplorer/data-explorer-resource.component.js +8 -4
  127. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  128. package/dist/Home/home-dashboard.component.d.ts +181 -1
  129. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  130. package/dist/Home/home-dashboard.component.js +1704 -182
  131. package/dist/Home/home-dashboard.component.js.map +1 -1
  132. package/dist/Integration/components/connections/connections.component.js +4 -4
  133. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  134. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +246 -259
  135. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  136. package/dist/Integration/components/widgets/integration-card.component.js +7 -9
  137. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  138. package/dist/Integration/integration.module.d.ts +6 -10
  139. package/dist/Integration/integration.module.d.ts.map +1 -1
  140. package/dist/Integration/integration.module.js +12 -20
  141. package/dist/Integration/integration.module.js.map +1 -1
  142. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +106 -0
  143. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
  144. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +607 -0
  145. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
  146. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +126 -0
  147. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -0
  148. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +1086 -0
  149. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -0
  150. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts +56 -0
  151. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts.map +1 -0
  152. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js +291 -0
  153. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js.map +1 -0
  154. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +85 -0
  155. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -0
  156. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +461 -0
  157. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -0
  158. package/dist/KnowledgeHub/index.d.ts +5 -0
  159. package/dist/KnowledgeHub/index.d.ts.map +1 -0
  160. package/dist/KnowledgeHub/index.js +6 -0
  161. package/dist/KnowledgeHub/index.js.map +1 -0
  162. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  163. package/dist/Lists/components/lists-browse-resource.component.js +9 -7
  164. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  165. package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
  166. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  167. package/dist/Lists/components/lists-operations-resource.component.js +10 -9
  168. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  169. package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
  170. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  171. package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
  172. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  173. package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
  174. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  175. package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
  176. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  177. package/dist/MCP/mcp-dashboard.component.js +2 -2
  178. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  179. package/dist/MCP/mcp.module.d.ts +6 -9
  180. package/dist/MCP/mcp.module.d.ts.map +1 -1
  181. package/dist/MCP/mcp.module.js +20 -22
  182. package/dist/MCP/mcp.module.js.map +1 -1
  183. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  184. package/dist/QueryBrowser/query-browser-resource.component.js +5 -1
  185. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  186. package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
  187. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  188. package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
  189. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  190. package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
  191. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  192. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  193. package/dist/SystemDiagnostics/system-diagnostics.component.js +1 -0
  194. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  195. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +7 -1
  196. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  197. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +63 -8
  198. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  199. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +9 -1
  200. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  201. package/dist/Testing/components/testing-dashboard-tab.component.js +109 -62
  202. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  203. package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
  204. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  205. package/dist/Testing/components/testing-explorer.component.js +241 -200
  206. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  207. package/dist/Testing/components/testing-runs-resource.component.d.ts +7 -1
  208. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  209. package/dist/Testing/components/testing-runs-resource.component.js +63 -8
  210. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  211. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  212. package/dist/Testing/components/testing-runs.component.js +7 -5
  213. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  214. package/dist/Testing/testing-dashboard.component.d.ts +9 -1
  215. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  216. package/dist/Testing/testing-dashboard.component.js +122 -54
  217. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  218. package/dist/actions-dashboards.module.d.ts +8 -13
  219. package/dist/actions-dashboards.module.d.ts.map +1 -1
  220. package/dist/actions-dashboards.module.js +6 -27
  221. package/dist/actions-dashboards.module.js.map +1 -1
  222. package/dist/ai-dashboards.module.d.ts +14 -11
  223. package/dist/ai-dashboards.module.d.ts.map +1 -1
  224. package/dist/ai-dashboards.module.js +58 -44
  225. package/dist/ai-dashboards.module.js.map +1 -1
  226. package/dist/communication-dashboards.module.d.ts +4 -8
  227. package/dist/communication-dashboards.module.d.ts.map +1 -1
  228. package/dist/communication-dashboards.module.js +0 -19
  229. package/dist/communication-dashboards.module.js.map +1 -1
  230. package/dist/component-studio-dashboards.module.d.ts +7 -11
  231. package/dist/component-studio-dashboards.module.d.ts.map +1 -1
  232. package/dist/component-studio-dashboards.module.js +22 -34
  233. package/dist/component-studio-dashboards.module.js.map +1 -1
  234. package/dist/core-dashboards.module.d.ts +13 -18
  235. package/dist/core-dashboards.module.d.ts.map +1 -1
  236. package/dist/core-dashboards.module.js +18 -31
  237. package/dist/core-dashboards.module.js.map +1 -1
  238. package/dist/credentials-dashboards.module.d.ts +5 -8
  239. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  240. package/dist/credentials-dashboards.module.js +3 -19
  241. package/dist/credentials-dashboards.module.js.map +1 -1
  242. package/dist/data-explorer-dashboards.module.d.ts +7 -13
  243. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  244. package/dist/data-explorer-dashboards.module.js +0 -27
  245. package/dist/data-explorer-dashboards.module.js.map +1 -1
  246. package/dist/lists-dashboards.module.d.ts +5 -8
  247. package/dist/lists-dashboards.module.d.ts.map +1 -1
  248. package/dist/lists-dashboards.module.js +3 -19
  249. package/dist/lists-dashboards.module.js.map +1 -1
  250. package/dist/public-api.d.ts +5 -1
  251. package/dist/public-api.d.ts.map +1 -1
  252. package/dist/public-api.js +6 -1
  253. package/dist/public-api.js.map +1 -1
  254. package/dist/scheduling-dashboards.module.d.ts +6 -10
  255. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  256. package/dist/scheduling-dashboards.module.js +3 -23
  257. package/dist/scheduling-dashboards.module.js.map +1 -1
  258. package/dist/testing-dashboards.module.d.ts +7 -12
  259. package/dist/testing-dashboards.module.d.ts.map +1 -1
  260. package/dist/testing-dashboards.module.js +4 -27
  261. package/dist/testing-dashboards.module.js.map +1 -1
  262. package/package.json +47 -53
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster-visualization-resource.component.js","sourceRoot":"","sources":["../../../../src/KnowledgeHub/components/clusters/cluster-visualization-resource.component.ts","../../../../src/KnowledgeHub/components/clusters/cluster-visualization-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Knowledge Hub Clusters Dashboard Tab\n *\n * Full-page cluster visualization with:\n * - Left sidebar: saved cluster visualizations (persisted via UserInfoEngine)\n * - Main area: SVG scatter plot (mj-cluster-scatter)\n * - Floating config panel (mj-cluster-config-panel)\n * - Top metrics bar\n *\n * Registered as BaseResourceComponent for the Knowledge Hub application.\n */\n\nimport { Component, ChangeDetectorRef, OnDestroy, AfterViewInit, inject, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CompositeKey, Metadata } from '@memberjunction/core';\nimport { ResourceData, UserInfoEngine, MJUserSettingEntity, KnowledgeHubMetadataEngine } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { GraphQLDataProvider, GraphQLAIClient } from '@memberjunction/graphql-dataprovider';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport {\n ClusterConfig,\n ClusterConfigPanelEntityOption,\n ClusterConfigPanelEntityDocOption,\n ClusterInputVector,\n ClusterVisualizationResult,\n ClusterMetrics,\n ClusterPoint,\n ClusterLabel,\n SavedClusterVisualization,\n DefaultClusterConfig,\n} from '@memberjunction/ng-clustering';\nimport { ClusteringService, ClusterScatterComponent } from '@memberjunction/ng-clustering';\n\nconst SAVED_CLUSTERS_KEY = 'KnowledgeHub_SavedClusters';\n\n@RegisterClass(BaseResourceComponent, 'ClusterVisualizationResource')\n@Component({\n standalone: false,\n selector: 'app-cluster-visualization-resource',\n templateUrl: './cluster-visualization-resource.component.html',\n styleUrls: ['./cluster-visualization-resource.component.css'],\n})\nexport class ClusterVisualizationResourceComponent extends BaseResourceComponent implements AfterViewInit, OnDestroy {\n @ViewChild('scatterPlot') scatterPlot?: ClusterScatterComponent;\n\n private cdr = inject(ChangeDetectorRef);\n private clusteringService = inject(ClusteringService);\n private navigationService = inject(NavigationService);\n private destroy$ = new Subject<void>();\n\n /** LLM-generated cluster labels for the current result */\n public ClusterLabels: ClusterLabel[] = [];\n\n // ================================================================\n // Resource overrides\n // ================================================================\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Clusters';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-circle-nodes';\n }\n\n // ================================================================\n // State\n // ================================================================\n\n /** Current visualization result */\n public Result: ClusterVisualizationResult | null = null;\n /** Whether a clustering run is in progress */\n public IsRunning = false;\n /** The active cluster config */\n public ActiveConfig: ClusterConfig = DefaultClusterConfig();\n /** Title for the top bar */\n public VisualizationTitle = 'New Cluster Analysis';\n /** Entity options for the config panel dropdown */\n public EntityOptions: ClusterConfigPanelEntityOption[] = [];\n /** Entity document options for the selected entity (shown when 2+) */\n public EntityDocOptions: ClusterConfigPanelEntityDocOption[] = [];\n\n // Saved visualizations\n public SavedVisualizations: SavedClusterVisualization[] = [];\n public ActiveSavedId: string | null = null;\n\n // User setting entity for persistence\n private userSettingEntity: MJUserSettingEntity | null = null;\n\n // ================================================================\n // Lifecycle\n // ================================================================\n\n async ngAfterViewInit(): Promise<void> {\n await this.loadEntityOptions();\n this.loadSavedVisualizations();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ================================================================\n // Getters\n // ================================================================\n\n public get Metrics(): ClusterMetrics | null {\n return this.Result?.Metrics ?? null;\n }\n\n public get HasResult(): boolean {\n return this.Result != null && this.Result.Points.length > 0;\n }\n\n public get SilhouetteScoreFormatted(): string {\n return this.Result?.Metrics?.SilhouetteScore?.toFixed(2) ?? '--';\n }\n\n public get IsSilhouetteGood(): boolean {\n return (this.Result?.Metrics?.SilhouetteScore ?? 0) >= 0.5;\n }\n\n public get ComputationTimeFormatted(): string {\n const ms = this.Result?.Metrics?.ComputationTimeMs ?? 0;\n return ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${ms}ms`;\n }\n\n // ================================================================\n // Public Methods\n // ================================================================\n\n /** Handle \"Run Clustering\" from the config panel */\n public async OnRunClustering(config: ClusterConfig): Promise<void> {\n this.IsRunning = true;\n this.ActiveConfig = config;\n this.ClusterLabels = [];\n\n // Update entity doc options if entity changed\n this.updateEntityDocOptions(config.EntityName);\n\n this.cdr.detectChanges();\n\n try {\n // Fetch vectors from the vector database\n const vectors = await this.fetchVectorsForEntity(config);\n\n // Run clustering (client-side UMAP + K-Means/DBSCAN)\n this.Result = await this.clusteringService.RunClustering(vectors, config);\n this.VisualizationTitle = `${config.EntityName} — ${config.Algorithm === 'kmeans' ? 'K-Means' : 'DBSCAN'}`;\n\n // Fire LLM cluster naming in the background (non-blocking).\n // Clusters render immediately; labels appear when LLM responds.\n this.requestClusterLabelsFromLLM().catch(err =>\n console.warn('[ClusterVisualization] Background naming failed:', err)\n );\n } catch (error) {\n console.error('[ClusterVisualization] Pipeline error:', error);\n this.Result = null;\n } finally {\n this.IsRunning = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Handle point click — log for now */\n public OnPointClicked(_point: ClusterPoint): void {\n // Detail panel is handled by the scatter component internally\n }\n\n /** Handle point hover */\n public OnPointHovered(_point: ClusterPoint | null): void {\n // Tooltip display handled by scatter component\n }\n\n /** Navigate to the entity record when \"Open Record\" is clicked in the detail panel */\n public OnOpenRecord(point: ClusterPoint): void {\n const entityName = point.Metadata?.['Entity'] as string;\n const recordID = point.Metadata?.['RecordID'] as string;\n if (!entityName || !recordID) return;\n\n const compositeKey = new CompositeKey();\n compositeKey.SimpleLoadFromURLSegment(recordID);\n this.navigationService.OpenEntityRecord(entityName, compositeKey);\n }\n\n /** Save the current visualization */\n public async OnSaveVisualization(): Promise<void> {\n if (!this.Result) return;\n\n const id = crypto.randomUUID();\n const saved: SavedClusterVisualization = {\n Id: id,\n Name: this.VisualizationTitle,\n EntityName: this.ActiveConfig.EntityName,\n Algorithm: this.ActiveConfig.Algorithm,\n Params: { ...this.ActiveConfig },\n CreatedAt: new Date().toISOString(),\n Result: this.stripVectorsFromResult(this.Result),\n Viewport: this.scatterPlot?.GetViewportTransform(),\n ClusterLabels: this.ClusterLabels.length > 0 ? [...this.ClusterLabels] : undefined,\n };\n\n this.SavedVisualizations = [saved, ...this.SavedVisualizations];\n this.ActiveSavedId = id;\n await this.persistSavedVisualizations();\n this.cdr.detectChanges();\n }\n\n /** Select a saved visualization — restore from cache if available, otherwise re-run */\n public async OnSelectSaved(saved: SavedClusterVisualization): Promise<void> {\n this.ActiveSavedId = saved.Id;\n this.VisualizationTitle = saved.Name;\n\n // Reconstruct config\n const config: ClusterConfig = {\n ...DefaultClusterConfig(),\n ...saved.Params,\n EntityName: saved.EntityName,\n Algorithm: saved.Algorithm,\n };\n this.ActiveConfig = config;\n\n // If we have cached results, restore instantly without re-running\n if (saved.Result) {\n this.Result = saved.Result;\n this.ClusterLabels = saved.ClusterLabels ?? [];\n this.applyLabelsToResult();\n this.cdr.detectChanges();\n\n // Restore viewport after a tick (scatter needs to render first)\n if (saved.Viewport) {\n setTimeout(() => {\n this.scatterPlot?.SetViewportTransform(saved.Viewport!);\n this.cdr.detectChanges();\n }, 50);\n }\n return;\n }\n\n // No cached results — re-run from scratch\n await this.OnRunClustering(config);\n }\n\n /** Delete a saved visualization */\n public async OnDeleteSaved(saved: SavedClusterVisualization, event: MouseEvent): Promise<void> {\n event.stopPropagation();\n this.SavedVisualizations = this.SavedVisualizations.filter(s => s.Id !== saved.Id);\n if (this.ActiveSavedId === saved.Id) {\n this.ActiveSavedId = null;\n }\n await this.persistSavedVisualizations();\n this.cdr.detectChanges();\n }\n\n /** Start a new analysis (clear current) */\n public OnNewAnalysis(): void {\n this.ActiveSavedId = null;\n this.Result = null;\n this.ClusterLabels = [];\n this.VisualizationTitle = 'New Cluster Analysis';\n this.ActiveConfig = DefaultClusterConfig();\n this.cdr.detectChanges();\n }\n\n public IsActiveSaved(saved: SavedClusterVisualization): boolean {\n return this.ActiveSavedId === saved.Id;\n }\n\n public TrackSavedBy(_index: number, saved: SavedClusterVisualization): string {\n return saved.Id;\n }\n\n public FormatDate(iso: string): string {\n try {\n return new Date(iso).toLocaleDateString();\n } catch {\n return iso;\n }\n }\n\n // ================================================================\n // Private Methods\n // ================================================================\n\n /** Populate the entity options for the config panel dropdown */\n private async loadEntityOptions(): Promise<void> {\n try {\n // Use KnowledgeHubMetadataEngine for cached entity document data\n const engine = KnowledgeHubMetadataEngine.Instance;\n await engine.Config(false);\n\n const entityNames = engine.GetEntitiesWithDocuments();\n if (entityNames.length > 0) {\n this.EntityOptions = entityNames.map(name => ({ Name: name }));\n }\n\n // Set default entity if config is blank\n if (this.EntityOptions.length > 0 && !this.ActiveConfig.EntityName) {\n this.ActiveConfig.EntityName = this.EntityOptions[0].Name;\n }\n\n // Populate entity doc options for the default entity\n this.updateEntityDocOptions(this.ActiveConfig.EntityName);\n } catch (error) {\n console.warn('[ClusterVisualization] Error loading entity options:', error);\n }\n this.cdr.detectChanges();\n }\n\n /** Update entity document options when the selected entity changes */\n private updateEntityDocOptions(entityName: string): void {\n if (!entityName) {\n this.EntityDocOptions = [];\n return;\n }\n\n const engine = KnowledgeHubMetadataEngine.Instance;\n const docs = engine.GetEntityDocumentsForEntity(entityName)\n .filter(d => d.Status === 'Active');\n\n this.EntityDocOptions = docs.map(d => ({ ID: d.ID, Name: d.Name }));\n\n // Auto-select the first doc (or clear if none)\n if (docs.length > 0 && !this.ActiveConfig.EntityDocumentID) {\n this.ActiveConfig.EntityDocumentID = docs[0].ID;\n } else if (docs.length === 0) {\n this.ActiveConfig.EntityDocumentID = '';\n }\n }\n\n /**\n * Fetch vectors from Entity Document Runs via RunView.\n * Entity Documents store vectorized entity data; we query for runs\n * that match the requested entity.\n */\n private async fetchVectorsForEntity(config: ClusterConfig): Promise<ClusterInputVector[]> {\n // Use the selected entity document, or fall back to first active one\n let entityDocID = config.EntityDocumentID;\n if (!entityDocID) {\n const engine = KnowledgeHubMetadataEngine.Instance;\n const entityDocs = engine.GetEntityDocumentsForEntity(config.EntityName)\n .filter(d => d.Status === 'Active');\n if (entityDocs.length === 0) {\n return [];\n }\n entityDocID = entityDocs[0].ID;\n }\n\n // Fetch vectors + metadata directly from the vector database (Pinecone)\n const provider = Metadata.Provider as GraphQLDataProvider;\n const aiClient = new GraphQLAIClient(provider);\n const result = await aiClient.FetchEntityVectors({\n entityDocumentID: entityDocID,\n maxRecords: config.MaxRecords,\n filter: config.Filter || undefined,\n });\n\n if (!result.Success || result.Results.length === 0) {\n return [];\n }\n\n // Convert vector DB results to ClusterInputVector format\n const vectors: ClusterInputVector[] = [];\n for (const item of result.Results) {\n if (!item.Values || item.Values.length === 0) continue;\n\n const metadata = this.parseVectorMetadata(item.Metadata);\n const label = this.buildLabel(metadata);\n\n vectors.push({\n Key: item.ID,\n Label: label,\n Vector: item.Values,\n Metadata: metadata,\n });\n }\n\n return vectors;\n }\n\n /** Parse the JSON metadata string from the vector DB into a record */\n private parseVectorMetadata(metadataJson: string): Record<string, string> {\n try {\n return JSON.parse(metadataJson) as Record<string, string>;\n } catch {\n return {};\n }\n }\n\n /** Build a human-readable label from vector metadata (prefers Name field, falls back to RecordID) */\n private buildLabel(metadata: Record<string, string>): string {\n // The vector sync process stores display fields directly in metadata.\n // Prefer Name, then Title, then Description, then fall back to RecordID.\n return metadata['Name']\n || metadata['Title']\n || metadata['Description']?.substring(0, 60)\n || metadata['RecordID']\n || 'Unknown';\n }\n\n // ================================================================\n // LLM Cluster Naming\n // ================================================================\n\n /**\n * After clustering completes, send sample records per cluster to an LLM for naming.\n * Updates ClusterLabels and refreshes the view.\n */\n private async requestClusterLabelsFromLLM(): Promise<void> {\n if (!this.Result || this.Result.Clusters.length === 0) return;\n\n try {\n const clusterData = this.buildClusterDataForPrompt(this.Result);\n if (!clusterData) return;\n\n // Look up the \"Cluster Naming\" prompt from AIEngineBase cached metadata\n const promptEntity = AIEngineBase.Instance.Prompts.find(p => p.Name === 'Cluster Naming');\n if (!promptEntity) {\n console.warn('[ClusterVisualization] \"Cluster Naming\" prompt not found — run metadata sync');\n return;\n }\n\n const provider = Metadata.Provider as GraphQLDataProvider;\n const aiClient = new GraphQLAIClient(provider);\n const result = await aiClient.RunAIPrompt({\n promptId: promptEntity.ID,\n data: { clusterData },\n });\n\n if (result.success && result.parsedResult) {\n const labels = result.parsedResult as Array<{ clusterId: number; label: string }>;\n this.ClusterLabels = labels.map(l => ({\n ClusterId: l.clusterId,\n Label: l.label,\n IsUserEdited: false,\n }));\n this.applyLabelsToResult();\n this.cdr.detectChanges();\n }\n } catch (error) {\n console.warn('[ClusterVisualization] LLM cluster naming failed:', error);\n }\n }\n\n /** Build a text block describing sample records per cluster for the LLM prompt */\n private buildClusterDataForPrompt(result: ClusterVisualizationResult): string | null {\n if (!result.Clusters || result.Clusters.length === 0) return null;\n\n const lines: string[] = [];\n for (const cluster of result.Clusters) {\n // Get points in this cluster, take up to 5 samples\n const clusterPoints = result.Points.filter(p => p.ClusterId === cluster.Id);\n const samples = clusterPoints.slice(0, 5);\n if (samples.length === 0) continue;\n\n lines.push(`### Cluster ${cluster.Id} (${clusterPoints.length} records)`);\n for (const point of samples) {\n const meta = point.Metadata || {};\n // Include the most informative metadata fields\n const fields = ['Name', 'Title', 'Description', 'Entity', 'Status', 'Type']\n .filter(f => meta[f])\n .map(f => `${f}: ${meta[f]}`)\n .join(', ');\n lines.push(`- ${fields || point.Label}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /** Apply cluster labels to the result's Clusters array (sets the Label property) */\n private applyLabelsToResult(): void {\n if (!this.Result || this.ClusterLabels.length === 0) return;\n\n for (const label of this.ClusterLabels) {\n const cluster = this.Result.Clusters.find(c => c.Id === label.ClusterId);\n if (cluster) {\n cluster.Label = label.Label;\n }\n }\n }\n\n /**\n * Strip full vector arrays from the result before saving (they're large and not needed for display).\n * Keeps points with 2D coordinates and metadata but removes the original high-dimensional vectors.\n */\n private stripVectorsFromResult(result: ClusterVisualizationResult): ClusterVisualizationResult {\n return {\n ...result,\n Points: result.Points.map(p => ({\n ...p,\n Vector: [], // Strip the high-dimensional vector — only 2D coords (X, Y) matter for display\n })),\n };\n }\n\n /** Load saved visualizations from UserInfoEngine settings */\n private loadSavedVisualizations(): void {\n try {\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === SAVED_CLUSTERS_KEY);\n if (setting?.Value) {\n this.userSettingEntity = setting;\n this.SavedVisualizations = JSON.parse(setting.Value) as SavedClusterVisualization[];\n }\n } catch (error) {\n console.warn('[ClusterVisualization] Error loading saved visualizations:', error);\n this.SavedVisualizations = [];\n }\n this.cdr.detectChanges();\n }\n\n /** Persist saved visualizations to UserInfoEngine settings */\n private async persistSavedVisualizations(): Promise<void> {\n try {\n const md = new Metadata();\n const userId = md.CurrentUser?.ID;\n if (!userId) return;\n\n if (!this.userSettingEntity) {\n const engine = UserInfoEngine.Instance;\n const existing = engine.UserSettings.find(s => s.Setting === SAVED_CLUSTERS_KEY);\n if (existing) {\n this.userSettingEntity = existing;\n } else {\n this.userSettingEntity = await md.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n this.userSettingEntity.UserID = userId;\n this.userSettingEntity.Setting = SAVED_CLUSTERS_KEY;\n }\n }\n\n this.userSettingEntity.Value = JSON.stringify(this.SavedVisualizations);\n await this.userSettingEntity.Save();\n } catch (error) {\n console.warn('[ClusterVisualization] Error saving visualizations:', error);\n }\n }\n}\n\n/** Tree-shaking prevention */\nexport function LoadClusterVisualizationResource(): void {\n // Prevents tree-shaking of the component\n}\n","<div class=\"cluster-viz-container\">\n <!-- Left Sidebar: Saved Visualizations -->\n <div class=\"sidebar\">\n <div class=\"sidebar-header\">\n <h2><i class=\"fa-solid fa-circle-nodes\"></i> Saved Clusters</h2>\n </div>\n <div class=\"saved-list\">\n @for (saved of SavedVisualizations; track TrackSavedBy($index, saved)) {\n <div class=\"saved-item\"\n [class.active]=\"IsActiveSaved(saved)\"\n (click)=\"OnSelectSaved(saved)\">\n <div class=\"saved-name\">{{ saved.Name }}</div>\n <div class=\"saved-meta\">\n <span>{{ saved.EntityName }}</span>\n <span>{{ FormatDate(saved.CreatedAt) }}</span>\n </div>\n <button class=\"delete-btn\"\n title=\"Delete\"\n (click)=\"OnDeleteSaved(saved, $event)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n }\n\n @if (SavedVisualizations.length === 0) {\n <div class=\"no-saved\">\n <i class=\"fa-solid fa-bookmark\"></i>\n <p>No saved visualizations yet</p>\n </div>\n }\n </div>\n <button class=\"new-btn\" (click)=\"OnNewAnalysis()\">\n <i class=\"fa-solid fa-plus\"></i> New Cluster Analysis\n </button>\n </div>\n\n <!-- Main Area -->\n <div class=\"main-area\">\n <!-- Top metrics bar -->\n <div class=\"topbar\">\n <div class=\"topbar-title\">{{ VisualizationTitle }}</div>\n @if (HasResult) {\n <div class=\"metric\">\n <i class=\"fa-solid fa-circle-dot\"></i>\n Records: <span class=\"metric-value\">{{ Result!.Metrics.RecordCount }}</span>\n </div>\n <div class=\"metric\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Clusters: <span class=\"metric-value\">{{ Result!.Metrics.ClusterCount }}</span>\n </div>\n <div class=\"metric\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Silhouette:\n <span class=\"metric-value\" [class.good]=\"IsSilhouetteGood\">\n {{ SilhouetteScoreFormatted }}\n </span>\n </div>\n <div class=\"metric\">\n <i class=\"fa-solid fa-clock\"></i>\n Computed: <span class=\"metric-value\">{{ ComputationTimeFormatted }}</span>\n </div>\n }\n </div>\n\n <!-- Scatter plot area -->\n <div class=\"scatter-area\">\n <mj-cluster-scatter\n #scatterPlot\n [Points]=\"Result?.Points ?? []\"\n [Clusters]=\"Result?.Clusters ?? []\"\n [IsLoading]=\"IsRunning\"\n [TooltipFields]=\"['Entity', 'Name', 'Description']\"\n (PointClicked)=\"OnPointClicked($event)\"\n (PointHovered)=\"OnPointHovered($event)\"\n (OpenRecordRequested)=\"OnOpenRecord($event)\">\n </mj-cluster-scatter>\n\n <!-- Floating config panel -->\n <mj-cluster-config-panel\n [IsRunning]=\"IsRunning\"\n [Metrics]=\"Metrics\"\n [EntityOptions]=\"EntityOptions\"\n [EntityDocOptions]=\"EntityDocOptions\"\n (RunClustering)=\"OnRunClustering($event)\"\n (SaveVisualization)=\"OnSaveVisualization()\">\n </mj-cluster-config-panel>\n </div>\n </div>\n</div>\n"]}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * @fileoverview Knowledge Hub Configuration Resource Component
3
+ *
4
+ * Full configuration dashboard for Knowledge Hub infrastructure:
5
+ * Vector DB provider management, vector index CRUD, embedding model selection,
6
+ * pipeline settings, full-text index config, and scoring thresholds.
7
+ */
8
+ import { OnDestroy, AfterViewInit } from '@angular/core';
9
+ import { ResourceData } from '@memberjunction/core-entities';
10
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
11
+ import * as i0 from "@angular/core";
12
+ /** Configuration section definition */
13
+ interface ConfigSection {
14
+ ID: string;
15
+ Label: string;
16
+ Icon: string;
17
+ Description: string;
18
+ }
19
+ /** Pipeline configuration settings */
20
+ interface PipelineConfig {
21
+ AutotagOnIngest: boolean;
22
+ VectorizeOnIngest: boolean;
23
+ DefaultBatchSize: number;
24
+ MaxConcurrentJobs: number;
25
+ }
26
+ /** Threshold settings */
27
+ interface ThresholdConfig {
28
+ DuplicateAbsolute: number;
29
+ DuplicatePotential: number;
30
+ SearchRelevance: number;
31
+ AutotagConfidence: number;
32
+ }
33
+ /** Vector DB provider display record */
34
+ interface VectorDBRecord {
35
+ ID: string;
36
+ Name: string;
37
+ ClassKey: string;
38
+ Description: string;
39
+ }
40
+ /** Vector index display record */
41
+ interface VectorIndexRecord {
42
+ ID: string;
43
+ Name: string;
44
+ EmbeddingModel: string;
45
+ EmbeddingModelID: string;
46
+ VectorDatabase: string;
47
+ VectorDatabaseID: string;
48
+ }
49
+ /** Embedding model display record */
50
+ interface EmbeddingModelRecord {
51
+ ID: string;
52
+ Name: string;
53
+ }
54
+ /** Full-text searchable entity */
55
+ interface FTSEntityRecord {
56
+ EntityName: string;
57
+ IndexedFields: string[];
58
+ TitleField: string;
59
+ SnippetField: string;
60
+ Enabled: boolean;
61
+ }
62
+ export declare class KnowledgeConfigResourceComponent extends BaseResourceComponent implements AfterViewInit, OnDestroy {
63
+ private cdr;
64
+ private destroy$;
65
+ GetResourceDisplayName(_data: ResourceData): Promise<string>;
66
+ GetResourceIconClass(_data: ResourceData): Promise<string>;
67
+ Sections: ConfigSection[];
68
+ ActiveSection: string;
69
+ IsLoading: boolean;
70
+ IsSaving: boolean;
71
+ HasUnsavedChanges: boolean;
72
+ PipelineSettings: PipelineConfig;
73
+ ThresholdSettings: ThresholdConfig;
74
+ VectorDBProviders: VectorDBRecord[];
75
+ get HasVectorDBProvider(): boolean;
76
+ VectorIndexes: VectorIndexRecord[];
77
+ get HasVectorIndex(): boolean;
78
+ EmbeddingModels: EmbeddingModelRecord[];
79
+ get HasEmbeddingModel(): boolean;
80
+ get EmbeddingModelName(): string;
81
+ private entityDocuments;
82
+ get SetupStepsCompleted(): number;
83
+ get VectorSetupComplete(): boolean;
84
+ FTSEntities: FTSEntityRecord[];
85
+ IsLoadingFTSEntities: boolean;
86
+ FTSFilterText: string;
87
+ get EnabledFTSCount(): number;
88
+ get FilteredFTSEntities(): FTSEntityRecord[];
89
+ ShowCreateIndexForm: boolean;
90
+ IsCreatingIndex: boolean;
91
+ NewIndexName: string;
92
+ NewIndexVectorDBID: string;
93
+ NewIndexEmbeddingModelID: string;
94
+ ngAfterViewInit(): void;
95
+ ngOnDestroy(): void;
96
+ SelectSection(sectionId: string): void;
97
+ OnSettingChanged(): void;
98
+ SaveConfiguration(): Promise<void>;
99
+ ResetConfiguration(): void;
100
+ /** Handle toggling an FTS entity */
101
+ OnFTSEntityToggled(entity: FTSEntityRecord): void;
102
+ FormatThreshold(value: number): string;
103
+ /** Open the create index inline form */
104
+ OpenCreateIndexForm(): void;
105
+ /** Cancel creating an index */
106
+ CancelCreateIndex(): void;
107
+ /** Create a new vector index */
108
+ CreateIndex(): Promise<void>;
109
+ /** Delete a vector index */
110
+ DeleteIndex(indexId: string): Promise<void>;
111
+ private loadConfiguration;
112
+ private loadFTSEntities;
113
+ private loadVectorDBProvidersFromEngine;
114
+ private loadVectorIndexesFromEngine;
115
+ /** Load entity documents and seed threshold settings from the first document's values */
116
+ private loadEntityDocumentsAndThresholds;
117
+ /** Persist threshold settings back to all active entity documents */
118
+ private persistThresholdsToEntityDocuments;
119
+ private loadEmbeddingModels;
120
+ static ɵfac: i0.ɵɵFactoryDeclaration<KnowledgeConfigResourceComponent, never>;
121
+ static ɵcmp: i0.ɵɵComponentDeclaration<KnowledgeConfigResourceComponent, "app-knowledge-config-resource", never, {}, {}, never, never, false, never>;
122
+ }
123
+ /** Tree-shaking prevention */
124
+ export declare function LoadKnowledgeConfigResource(): void;
125
+ export {};
126
+ //# sourceMappingURL=knowledge-config-resource.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-config-resource.component.d.ts","sourceRoot":"","sources":["../../../../src/KnowledgeHub/components/config/knowledge-config-resource.component.ts"],"names":[],"mappings":"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"}