@things-factory/integration-mlflow 9.1.19

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 (68) hide show
  1. package/client/bootstrap.ts +41 -0
  2. package/client/index.ts +2 -0
  3. package/client/pages/mlflow-experiments-page.ts +45 -0
  4. package/client/pages/mlflow-models-page.ts +45 -0
  5. package/client/pages/mlflow-runs-page.ts +45 -0
  6. package/client/pages/mlflow-viewer-page.ts +74 -0
  7. package/client/route.ts +19 -0
  8. package/client/tsconfig.json +11 -0
  9. package/dist-client/bootstrap.d.ts +1 -0
  10. package/dist-client/bootstrap.js +40 -0
  11. package/dist-client/bootstrap.js.map +1 -0
  12. package/dist-client/index.d.ts +2 -0
  13. package/dist-client/index.js +3 -0
  14. package/dist-client/index.js.map +1 -0
  15. package/dist-client/pages/mlflow-experiments-page.d.ts +5 -0
  16. package/dist-client/pages/mlflow-experiments-page.js +48 -0
  17. package/dist-client/pages/mlflow-experiments-page.js.map +1 -0
  18. package/dist-client/pages/mlflow-models-page.d.ts +5 -0
  19. package/dist-client/pages/mlflow-models-page.js +48 -0
  20. package/dist-client/pages/mlflow-models-page.js.map +1 -0
  21. package/dist-client/pages/mlflow-runs-page.d.ts +5 -0
  22. package/dist-client/pages/mlflow-runs-page.js +48 -0
  23. package/dist-client/pages/mlflow-runs-page.js.map +1 -0
  24. package/dist-client/pages/mlflow-viewer-page.d.ts +12 -0
  25. package/dist-client/pages/mlflow-viewer-page.js +82 -0
  26. package/dist-client/pages/mlflow-viewer-page.js.map +1 -0
  27. package/dist-client/route.d.ts +1 -0
  28. package/dist-client/route.js +17 -0
  29. package/dist-client/route.js.map +1 -0
  30. package/dist-client/tsconfig.tsbuildinfo +1 -0
  31. package/dist-server/index.d.ts +4 -0
  32. package/dist-server/index.js +8 -0
  33. package/dist-server/index.js.map +1 -0
  34. package/dist-server/route.d.ts +5 -0
  35. package/dist-server/route.js +12 -0
  36. package/dist-server/route.js.map +1 -0
  37. package/dist-server/service/experiment/experiment-service.d.ts +19 -0
  38. package/dist-server/service/experiment/experiment-service.js +135 -0
  39. package/dist-server/service/experiment/experiment-service.js.map +1 -0
  40. package/dist-server/service/index.d.ts +10 -0
  41. package/dist-server/service/index.js +19 -0
  42. package/dist-server/service/index.js.map +1 -0
  43. package/dist-server/service/model-registry/model-registry-service.d.ts +31 -0
  44. package/dist-server/service/model-registry/model-registry-service.js +255 -0
  45. package/dist-server/service/model-registry/model-registry-service.js.map +1 -0
  46. package/dist-server/service/run/run-service.d.ts +27 -0
  47. package/dist-server/service/run/run-service.js +214 -0
  48. package/dist-server/service/run/run-service.js.map +1 -0
  49. package/dist-server/tsconfig.tsbuildinfo +1 -0
  50. package/dist-server/types/mlflow-types.d.ts +87 -0
  51. package/dist-server/types/mlflow-types.js +337 -0
  52. package/dist-server/types/mlflow-types.js.map +1 -0
  53. package/dist-server/utils/mlflow-api-client.d.ts +277 -0
  54. package/dist-server/utils/mlflow-api-client.js +201 -0
  55. package/dist-server/utils/mlflow-api-client.js.map +1 -0
  56. package/package.json +45 -0
  57. package/server/index.ts +5 -0
  58. package/server/route.ts +13 -0
  59. package/server/service/experiment/experiment-service.ts +117 -0
  60. package/server/service/index.ts +17 -0
  61. package/server/service/model-registry/model-registry-service.ts +232 -0
  62. package/server/service/run/run-service.ts +177 -0
  63. package/server/tsconfig.json +11 -0
  64. package/server/types/mlflow-types.ts +235 -0
  65. package/server/utils/mlflow-api-client.ts +375 -0
  66. package/things-factory.config.js +13 -0
  67. package/translations/en.json +28 -0
  68. package/translations/ko.json +28 -0
@@ -0,0 +1,41 @@
1
+ import { store } from '@operato/shell'
2
+
3
+ export default function bootstrap() {
4
+ /**
5
+ * MLflow Integration Bootstrap
6
+ *
7
+ * Initialize module-specific settings, event listeners, etc.
8
+ */
9
+
10
+ // Example: Register menu items
11
+ store.dispatch({
12
+ type: 'ADD_MENU',
13
+ menu: {
14
+ category: 'mlflow',
15
+ name: 'mlflow',
16
+ icon: 'science',
17
+ childrens: [
18
+ {
19
+ name: 'experiments',
20
+ path: 'mlflow-experiments',
21
+ icon: 'lab_research'
22
+ },
23
+ {
24
+ name: 'runs',
25
+ path: 'mlflow-runs',
26
+ icon: 'play_circle'
27
+ },
28
+ {
29
+ name: 'models',
30
+ path: 'mlflow-models',
31
+ icon: 'model_training'
32
+ },
33
+ {
34
+ name: 'mlflow-ui',
35
+ path: 'mlflow-viewer',
36
+ icon: 'dashboard'
37
+ }
38
+ ]
39
+ }
40
+ })
41
+ }
@@ -0,0 +1,2 @@
1
+ export { default as route } from './route'
2
+ export { default as bootstrap } from './bootstrap'
@@ -0,0 +1,45 @@
1
+ import { css, html, LitElement } from 'lit'
2
+ import { customElement } from 'lit/decorators.js'
3
+
4
+ @customElement('mlflow-experiments-page')
5
+ export class MLflowExperimentsPage extends LitElement {
6
+ static styles = [
7
+ css`
8
+ :host {
9
+ display: flex;
10
+ flex-direction: column;
11
+ height: 100%;
12
+ padding: 20px;
13
+ }
14
+
15
+ h2 {
16
+ margin: 0 0 20px 0;
17
+ }
18
+
19
+ .placeholder {
20
+ text-align: center;
21
+ padding: 40px;
22
+ color: #666;
23
+ }
24
+ `
25
+ ]
26
+
27
+ render() {
28
+ return html`
29
+ <h2>MLflow Experiments</h2>
30
+
31
+ <div class="placeholder">
32
+ <p>MLflow experiments will be displayed here</p>
33
+ <p>
34
+ This page will show:
35
+ <ul style="text-align: left; display: inline-block;">
36
+ <li>List of experiments</li>
37
+ <li>Experiment metadata</li>
38
+ <li>Associated runs</li>
39
+ <li>Actions: Create, View, Delete</li>
40
+ </ul>
41
+ </p>
42
+ </div>
43
+ `
44
+ }
45
+ }
@@ -0,0 +1,45 @@
1
+ import { css, html, LitElement } from 'lit'
2
+ import { customElement } from 'lit/decorators.js'
3
+
4
+ @customElement('mlflow-models-page')
5
+ export class MLflowModelsPage extends LitElement {
6
+ static styles = [
7
+ css`
8
+ :host {
9
+ display: flex;
10
+ flex-direction: column;
11
+ height: 100%;
12
+ padding: 20px;
13
+ }
14
+
15
+ h2 {
16
+ margin: 0 0 20px 0;
17
+ }
18
+
19
+ .placeholder {
20
+ text-align: center;
21
+ padding: 40px;
22
+ color: #666;
23
+ }
24
+ `
25
+ ]
26
+
27
+ render() {
28
+ return html`
29
+ <h2>MLflow Model Registry</h2>
30
+
31
+ <div class="placeholder">
32
+ <p>Registered models will be displayed here</p>
33
+ <p>
34
+ This page will show:
35
+ <ul style="text-align: left; display: inline-block;">
36
+ <li>Registered models</li>
37
+ <li>Model versions</li>
38
+ <li>Current stages (None, Staging, Production)</li>
39
+ <li>Actions: Register, Transition Stage, Delete</li>
40
+ </ul>
41
+ </p>
42
+ </div>
43
+ `
44
+ }
45
+ }
@@ -0,0 +1,45 @@
1
+ import { css, html, LitElement } from 'lit'
2
+ import { customElement } from 'lit/decorators.js'
3
+
4
+ @customElement('mlflow-runs-page')
5
+ export class MLflowRunsPage extends LitElement {
6
+ static styles = [
7
+ css`
8
+ :host {
9
+ display: flex;
10
+ flex-direction: column;
11
+ height: 100%;
12
+ padding: 20px;
13
+ }
14
+
15
+ h2 {
16
+ margin: 0 0 20px 0;
17
+ }
18
+
19
+ .placeholder {
20
+ text-align: center;
21
+ padding: 40px;
22
+ color: #666;
23
+ }
24
+ `
25
+ ]
26
+
27
+ render() {
28
+ return html`
29
+ <h2>MLflow Runs</h2>
30
+
31
+ <div class="placeholder">
32
+ <p>MLflow runs will be displayed here</p>
33
+ <p>
34
+ This page will show:
35
+ <ul style="text-align: left; display: inline-block;">
36
+ <li>List of experiment runs</li>
37
+ <li>Run metrics and parameters</li>
38
+ <li>Run status and duration</li>
39
+ <li>Artifacts</li>
40
+ </ul>
41
+ </p>
42
+ </div>
43
+ `
44
+ }
45
+ }
@@ -0,0 +1,74 @@
1
+ import { css, html, LitElement } from 'lit'
2
+ import { customElement, property } from 'lit/decorators.js'
3
+
4
+ /**
5
+ * MLflow UI Viewer
6
+ *
7
+ * Embeds MLflow UI in iframe (similar to Label Studio viewer)
8
+ */
9
+ @customElement('mlflow-viewer-page')
10
+ export class MLflowViewerPage extends LitElement {
11
+ @property({ type: String }) mlflowUrl: string = process.env.MLFLOW_TRACKING_URI || 'http://localhost:5000'
12
+
13
+ static styles = [
14
+ css`
15
+ :host {
16
+ display: flex;
17
+ flex-direction: column;
18
+ height: 100%;
19
+ }
20
+
21
+ iframe {
22
+ width: 100%;
23
+ height: 100%;
24
+ border: none;
25
+ }
26
+
27
+ .toolbar {
28
+ display: flex;
29
+ align-items: center;
30
+ padding: 10px 20px;
31
+ background: #f5f5f5;
32
+ border-bottom: 1px solid #ddd;
33
+ }
34
+
35
+ .toolbar button {
36
+ margin-left: 10px;
37
+ padding: 8px 16px;
38
+ background: #1976d2;
39
+ color: white;
40
+ border: none;
41
+ border-radius: 4px;
42
+ cursor: pointer;
43
+ }
44
+
45
+ .toolbar button:hover {
46
+ background: #1565c0;
47
+ }
48
+
49
+ .url-display {
50
+ flex: 1;
51
+ font-family: monospace;
52
+ color: #666;
53
+ }
54
+ `
55
+ ]
56
+
57
+ private refreshIframe() {
58
+ const iframe = this.shadowRoot?.querySelector('iframe')
59
+ if (iframe) {
60
+ iframe.src = iframe.src
61
+ }
62
+ }
63
+
64
+ render() {
65
+ return html`
66
+ <div class="toolbar">
67
+ <div class="url-display">${this.mlflowUrl}</div>
68
+ <button @click=${this.refreshIframe}>Refresh</button>
69
+ </div>
70
+
71
+ <iframe src="${this.mlflowUrl}" title="MLflow UI"></iframe>
72
+ `
73
+ }
74
+ }
@@ -0,0 +1,19 @@
1
+ export default function route(page: string) {
2
+ switch (page) {
3
+ case 'mlflow-experiments':
4
+ import('./pages/mlflow-experiments-page')
5
+ return page
6
+
7
+ case 'mlflow-runs':
8
+ import('./pages/mlflow-runs-page')
9
+ return page
10
+
11
+ case 'mlflow-models':
12
+ import('./pages/mlflow-models-page')
13
+ return page
14
+
15
+ case 'mlflow-viewer':
16
+ import('./pages/mlflow-viewer-page')
17
+ return page
18
+ }
19
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "../../tsconfig-base.json",
3
+ "compilerOptions": {
4
+ "strict": true,
5
+ "declaration": true,
6
+ "module": "esnext",
7
+ "outDir": "../dist-client",
8
+ "baseUrl": "./"
9
+ },
10
+ "include": ["./**/*"]
11
+ }
@@ -0,0 +1 @@
1
+ export default function bootstrap(): void;
@@ -0,0 +1,40 @@
1
+ import { store } from '@operato/shell';
2
+ export default function bootstrap() {
3
+ /**
4
+ * MLflow Integration Bootstrap
5
+ *
6
+ * Initialize module-specific settings, event listeners, etc.
7
+ */
8
+ // Example: Register menu items
9
+ store.dispatch({
10
+ type: 'ADD_MENU',
11
+ menu: {
12
+ category: 'mlflow',
13
+ name: 'mlflow',
14
+ icon: 'science',
15
+ childrens: [
16
+ {
17
+ name: 'experiments',
18
+ path: 'mlflow-experiments',
19
+ icon: 'lab_research'
20
+ },
21
+ {
22
+ name: 'runs',
23
+ path: 'mlflow-runs',
24
+ icon: 'play_circle'
25
+ },
26
+ {
27
+ name: 'models',
28
+ path: 'mlflow-models',
29
+ icon: 'model_training'
30
+ },
31
+ {
32
+ name: 'mlflow-ui',
33
+ path: 'mlflow-viewer',
34
+ icon: 'dashboard'
35
+ }
36
+ ]
37
+ }
38
+ });
39
+ }
40
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../client/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEtC,MAAM,CAAC,OAAO,UAAU,SAAS;IAC/B;;;;OAIG;IAEH,+BAA+B;IAC/B,KAAK,CAAC,QAAQ,CAAC;QACb,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE;YACJ,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,oBAAoB;oBAC1B,IAAI,EAAE,cAAc;iBACrB;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,aAAa;iBACpB;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,gBAAgB;iBACvB;gBACD;oBACE,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,WAAW;iBAClB;aACF;SACF;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { store } from '@operato/shell'\n\nexport default function bootstrap() {\n /**\n * MLflow Integration Bootstrap\n *\n * Initialize module-specific settings, event listeners, etc.\n */\n\n // Example: Register menu items\n store.dispatch({\n type: 'ADD_MENU',\n menu: {\n category: 'mlflow',\n name: 'mlflow',\n icon: 'science',\n childrens: [\n {\n name: 'experiments',\n path: 'mlflow-experiments',\n icon: 'lab_research'\n },\n {\n name: 'runs',\n path: 'mlflow-runs',\n icon: 'play_circle'\n },\n {\n name: 'models',\n path: 'mlflow-models',\n icon: 'model_training'\n },\n {\n name: 'mlflow-ui',\n path: 'mlflow-viewer',\n icon: 'dashboard'\n }\n ]\n }\n })\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { default as route } from './route';
2
+ export { default as bootstrap } from './bootstrap';
@@ -0,0 +1,3 @@
1
+ export { default as route } from './route';
2
+ export { default as bootstrap } from './bootstrap';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA","sourcesContent":["export { default as route } from './route'\nexport { default as bootstrap } from './bootstrap'\n"]}
@@ -0,0 +1,5 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class MLflowExperimentsPage extends LitElement {
3
+ static styles: import("lit").CSSResult[];
4
+ render(): import("lit-html").TemplateResult<1>;
5
+ }
@@ -0,0 +1,48 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement } from 'lit/decorators.js';
4
+ let MLflowExperimentsPage = class MLflowExperimentsPage extends LitElement {
5
+ static { this.styles = [
6
+ css `
7
+ :host {
8
+ display: flex;
9
+ flex-direction: column;
10
+ height: 100%;
11
+ padding: 20px;
12
+ }
13
+
14
+ h2 {
15
+ margin: 0 0 20px 0;
16
+ }
17
+
18
+ .placeholder {
19
+ text-align: center;
20
+ padding: 40px;
21
+ color: #666;
22
+ }
23
+ `
24
+ ]; }
25
+ render() {
26
+ return html `
27
+ <h2>MLflow Experiments</h2>
28
+
29
+ <div class="placeholder">
30
+ <p>MLflow experiments will be displayed here</p>
31
+ <p>
32
+ This page will show:
33
+ <ul style="text-align: left; display: inline-block;">
34
+ <li>List of experiments</li>
35
+ <li>Experiment metadata</li>
36
+ <li>Associated runs</li>
37
+ <li>Actions: Create, View, Delete</li>
38
+ </ul>
39
+ </p>
40
+ </div>
41
+ `;
42
+ }
43
+ };
44
+ MLflowExperimentsPage = __decorate([
45
+ customElement('mlflow-experiments-page')
46
+ ], MLflowExperimentsPage);
47
+ export { MLflowExperimentsPage };
48
+ //# sourceMappingURL=mlflow-experiments-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mlflow-experiments-page.js","sourceRoot":"","sources":["../../client/pages/mlflow-experiments-page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAG1C,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,UAAU;aAC5C,WAAM,GAAG;QACd,GAAG,CAAA;;;;;;;;;;;;;;;;;KAiBF;KACF,AAnBY,CAmBZ;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;KAeV,CAAA;IACH,CAAC;;AAvCU,qBAAqB;IADjC,aAAa,CAAC,yBAAyB,CAAC;GAC5B,qBAAqB,CAwCjC","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('mlflow-experiments-page')\nexport class MLflowExperimentsPage extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 20px;\n }\n\n h2 {\n margin: 0 0 20px 0;\n }\n\n .placeholder {\n text-align: center;\n padding: 40px;\n color: #666;\n }\n `\n ]\n\n render() {\n return html`\n <h2>MLflow Experiments</h2>\n\n <div class=\"placeholder\">\n <p>MLflow experiments will be displayed here</p>\n <p>\n This page will show:\n <ul style=\"text-align: left; display: inline-block;\">\n <li>List of experiments</li>\n <li>Experiment metadata</li>\n <li>Associated runs</li>\n <li>Actions: Create, View, Delete</li>\n </ul>\n </p>\n </div>\n `\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class MLflowModelsPage extends LitElement {
3
+ static styles: import("lit").CSSResult[];
4
+ render(): import("lit-html").TemplateResult<1>;
5
+ }
@@ -0,0 +1,48 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement } from 'lit/decorators.js';
4
+ let MLflowModelsPage = class MLflowModelsPage extends LitElement {
5
+ static { this.styles = [
6
+ css `
7
+ :host {
8
+ display: flex;
9
+ flex-direction: column;
10
+ height: 100%;
11
+ padding: 20px;
12
+ }
13
+
14
+ h2 {
15
+ margin: 0 0 20px 0;
16
+ }
17
+
18
+ .placeholder {
19
+ text-align: center;
20
+ padding: 40px;
21
+ color: #666;
22
+ }
23
+ `
24
+ ]; }
25
+ render() {
26
+ return html `
27
+ <h2>MLflow Model Registry</h2>
28
+
29
+ <div class="placeholder">
30
+ <p>Registered models will be displayed here</p>
31
+ <p>
32
+ This page will show:
33
+ <ul style="text-align: left; display: inline-block;">
34
+ <li>Registered models</li>
35
+ <li>Model versions</li>
36
+ <li>Current stages (None, Staging, Production)</li>
37
+ <li>Actions: Register, Transition Stage, Delete</li>
38
+ </ul>
39
+ </p>
40
+ </div>
41
+ `;
42
+ }
43
+ };
44
+ MLflowModelsPage = __decorate([
45
+ customElement('mlflow-models-page')
46
+ ], MLflowModelsPage);
47
+ export { MLflowModelsPage };
48
+ //# sourceMappingURL=mlflow-models-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mlflow-models-page.js","sourceRoot":"","sources":["../../client/pages/mlflow-models-page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAG1C,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,UAAU;aACvC,WAAM,GAAG;QACd,GAAG,CAAA;;;;;;;;;;;;;;;;;KAiBF;KACF,AAnBY,CAmBZ;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;KAeV,CAAA;IACH,CAAC;;AAvCU,gBAAgB;IAD5B,aAAa,CAAC,oBAAoB,CAAC;GACvB,gBAAgB,CAwC5B","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('mlflow-models-page')\nexport class MLflowModelsPage extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 20px;\n }\n\n h2 {\n margin: 0 0 20px 0;\n }\n\n .placeholder {\n text-align: center;\n padding: 40px;\n color: #666;\n }\n `\n ]\n\n render() {\n return html`\n <h2>MLflow Model Registry</h2>\n\n <div class=\"placeholder\">\n <p>Registered models will be displayed here</p>\n <p>\n This page will show:\n <ul style=\"text-align: left; display: inline-block;\">\n <li>Registered models</li>\n <li>Model versions</li>\n <li>Current stages (None, Staging, Production)</li>\n <li>Actions: Register, Transition Stage, Delete</li>\n </ul>\n </p>\n </div>\n `\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class MLflowRunsPage extends LitElement {
3
+ static styles: import("lit").CSSResult[];
4
+ render(): import("lit-html").TemplateResult<1>;
5
+ }
@@ -0,0 +1,48 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement } from 'lit/decorators.js';
4
+ let MLflowRunsPage = class MLflowRunsPage extends LitElement {
5
+ static { this.styles = [
6
+ css `
7
+ :host {
8
+ display: flex;
9
+ flex-direction: column;
10
+ height: 100%;
11
+ padding: 20px;
12
+ }
13
+
14
+ h2 {
15
+ margin: 0 0 20px 0;
16
+ }
17
+
18
+ .placeholder {
19
+ text-align: center;
20
+ padding: 40px;
21
+ color: #666;
22
+ }
23
+ `
24
+ ]; }
25
+ render() {
26
+ return html `
27
+ <h2>MLflow Runs</h2>
28
+
29
+ <div class="placeholder">
30
+ <p>MLflow runs will be displayed here</p>
31
+ <p>
32
+ This page will show:
33
+ <ul style="text-align: left; display: inline-block;">
34
+ <li>List of experiment runs</li>
35
+ <li>Run metrics and parameters</li>
36
+ <li>Run status and duration</li>
37
+ <li>Artifacts</li>
38
+ </ul>
39
+ </p>
40
+ </div>
41
+ `;
42
+ }
43
+ };
44
+ MLflowRunsPage = __decorate([
45
+ customElement('mlflow-runs-page')
46
+ ], MLflowRunsPage);
47
+ export { MLflowRunsPage };
48
+ //# sourceMappingURL=mlflow-runs-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mlflow-runs-page.js","sourceRoot":"","sources":["../../client/pages/mlflow-runs-page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAG1C,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,UAAU;aACrC,WAAM,GAAG;QACd,GAAG,CAAA;;;;;;;;;;;;;;;;;KAiBF;KACF,AAnBY,CAmBZ;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;KAeV,CAAA;IACH,CAAC;;AAvCU,cAAc;IAD1B,aAAa,CAAC,kBAAkB,CAAC;GACrB,cAAc,CAwC1B","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('mlflow-runs-page')\nexport class MLflowRunsPage extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 20px;\n }\n\n h2 {\n margin: 0 0 20px 0;\n }\n\n .placeholder {\n text-align: center;\n padding: 40px;\n color: #666;\n }\n `\n ]\n\n render() {\n return html`\n <h2>MLflow Runs</h2>\n\n <div class=\"placeholder\">\n <p>MLflow runs will be displayed here</p>\n <p>\n This page will show:\n <ul style=\"text-align: left; display: inline-block;\">\n <li>List of experiment runs</li>\n <li>Run metrics and parameters</li>\n <li>Run status and duration</li>\n <li>Artifacts</li>\n </ul>\n </p>\n </div>\n `\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * MLflow UI Viewer
4
+ *
5
+ * Embeds MLflow UI in iframe (similar to Label Studio viewer)
6
+ */
7
+ export declare class MLflowViewerPage extends LitElement {
8
+ mlflowUrl: string;
9
+ static styles: import("lit").CSSResult[];
10
+ private refreshIframe;
11
+ render(): import("lit-html").TemplateResult<1>;
12
+ }
@@ -0,0 +1,82 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ /**
5
+ * MLflow UI Viewer
6
+ *
7
+ * Embeds MLflow UI in iframe (similar to Label Studio viewer)
8
+ */
9
+ let MLflowViewerPage = class MLflowViewerPage extends LitElement {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.mlflowUrl = process.env.MLFLOW_TRACKING_URI || 'http://localhost:5000';
13
+ }
14
+ static { this.styles = [
15
+ css `
16
+ :host {
17
+ display: flex;
18
+ flex-direction: column;
19
+ height: 100%;
20
+ }
21
+
22
+ iframe {
23
+ width: 100%;
24
+ height: 100%;
25
+ border: none;
26
+ }
27
+
28
+ .toolbar {
29
+ display: flex;
30
+ align-items: center;
31
+ padding: 10px 20px;
32
+ background: #f5f5f5;
33
+ border-bottom: 1px solid #ddd;
34
+ }
35
+
36
+ .toolbar button {
37
+ margin-left: 10px;
38
+ padding: 8px 16px;
39
+ background: #1976d2;
40
+ color: white;
41
+ border: none;
42
+ border-radius: 4px;
43
+ cursor: pointer;
44
+ }
45
+
46
+ .toolbar button:hover {
47
+ background: #1565c0;
48
+ }
49
+
50
+ .url-display {
51
+ flex: 1;
52
+ font-family: monospace;
53
+ color: #666;
54
+ }
55
+ `
56
+ ]; }
57
+ refreshIframe() {
58
+ const iframe = this.shadowRoot?.querySelector('iframe');
59
+ if (iframe) {
60
+ iframe.src = iframe.src;
61
+ }
62
+ }
63
+ render() {
64
+ return html `
65
+ <div class="toolbar">
66
+ <div class="url-display">${this.mlflowUrl}</div>
67
+ <button @click=${this.refreshIframe}>Refresh</button>
68
+ </div>
69
+
70
+ <iframe src="${this.mlflowUrl}" title="MLflow UI"></iframe>
71
+ `;
72
+ }
73
+ };
74
+ __decorate([
75
+ property({ type: String }),
76
+ __metadata("design:type", String)
77
+ ], MLflowViewerPage.prototype, "mlflowUrl", void 0);
78
+ MLflowViewerPage = __decorate([
79
+ customElement('mlflow-viewer-page')
80
+ ], MLflowViewerPage);
81
+ export { MLflowViewerPage };
82
+ //# sourceMappingURL=mlflow-viewer-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mlflow-viewer-page.js","sourceRoot":"","sources":["../../client/pages/mlflow-viewer-page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3D;;;;GAIG;AAEI,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAAzC;;QACuB,cAAS,GAAW,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,uBAAuB,CAAA;IA+D5G,CAAC;aA7DQ,WAAM,GAAG;QACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwCF;KACF,AA1CY,CA0CZ;IAEO,aAAa;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;QACvD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;QACzB,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;mCAEoB,IAAI,CAAC,SAAS;yBACxB,IAAI,CAAC,aAAa;;;qBAGtB,IAAI,CAAC,SAAS;KAC9B,CAAA;IACH,CAAC;;AA9D2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mDAA+E;AAD/F,gBAAgB;IAD5B,aAAa,CAAC,oBAAoB,CAAC;GACvB,gBAAgB,CAgE5B","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * MLflow UI Viewer\n *\n * Embeds MLflow UI in iframe (similar to Label Studio viewer)\n */\n@customElement('mlflow-viewer-page')\nexport class MLflowViewerPage extends LitElement {\n @property({ type: String }) mlflowUrl: string = process.env.MLFLOW_TRACKING_URI || 'http://localhost:5000'\n\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n iframe {\n width: 100%;\n height: 100%;\n border: none;\n }\n\n .toolbar {\n display: flex;\n align-items: center;\n padding: 10px 20px;\n background: #f5f5f5;\n border-bottom: 1px solid #ddd;\n }\n\n .toolbar button {\n margin-left: 10px;\n padding: 8px 16px;\n background: #1976d2;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n }\n\n .toolbar button:hover {\n background: #1565c0;\n }\n\n .url-display {\n flex: 1;\n font-family: monospace;\n color: #666;\n }\n `\n ]\n\n private refreshIframe() {\n const iframe = this.shadowRoot?.querySelector('iframe')\n if (iframe) {\n iframe.src = iframe.src\n }\n }\n\n render() {\n return html`\n <div class=\"toolbar\">\n <div class=\"url-display\">${this.mlflowUrl}</div>\n <button @click=${this.refreshIframe}>Refresh</button>\n </div>\n\n <iframe src=\"${this.mlflowUrl}\" title=\"MLflow UI\"></iframe>\n `\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export default function route(page: string): "mlflow-experiments" | "mlflow-runs" | "mlflow-models" | "mlflow-viewer" | undefined;
@@ -0,0 +1,17 @@
1
+ export default function route(page) {
2
+ switch (page) {
3
+ case 'mlflow-experiments':
4
+ import('./pages/mlflow-experiments-page');
5
+ return page;
6
+ case 'mlflow-runs':
7
+ import('./pages/mlflow-runs-page');
8
+ return page;
9
+ case 'mlflow-models':
10
+ import('./pages/mlflow-models-page');
11
+ return page;
12
+ case 'mlflow-viewer':
13
+ import('./pages/mlflow-viewer-page');
14
+ return page;
15
+ }
16
+ }
17
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../client/route.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAY;IACxC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,oBAAoB;YACvB,MAAM,CAAC,iCAAiC,CAAC,CAAA;YACzC,OAAO,IAAI,CAAA;QAEb,KAAK,aAAa;YAChB,MAAM,CAAC,0BAA0B,CAAC,CAAA;YAClC,OAAO,IAAI,CAAA;QAEb,KAAK,eAAe;YAClB,MAAM,CAAC,4BAA4B,CAAC,CAAA;YACpC,OAAO,IAAI,CAAA;QAEb,KAAK,eAAe;YAClB,MAAM,CAAC,4BAA4B,CAAC,CAAA;YACpC,OAAO,IAAI,CAAA;IACf,CAAC;AACH,CAAC","sourcesContent":["export default function route(page: string) {\n switch (page) {\n case 'mlflow-experiments':\n import('./pages/mlflow-experiments-page')\n return page\n\n case 'mlflow-runs':\n import('./pages/mlflow-runs-page')\n return page\n\n case 'mlflow-models':\n import('./pages/mlflow-models-page')\n return page\n\n case 'mlflow-viewer':\n import('./pages/mlflow-viewer-page')\n return page\n }\n}\n"]}