mas-lab-component-controller 0.2.0__py3-none-any.whl

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 (89) hide show
  1. mas/lab/controller/__init__.py +7 -0
  2. mas/lab/controller/__main__.py +5 -0
  3. mas/lab/controller/agent_chat.py +226 -0
  4. mas/lab/controller/api.py +364 -0
  5. mas/lab/controller/artifact_discovery.py +107 -0
  6. mas/lab/controller/artifacts.py +112 -0
  7. mas/lab/controller/cli.py +493 -0
  8. mas/lab/controller/client.py +271 -0
  9. mas/lab/controller/config.py +75 -0
  10. mas/lab/controller/constants.py +30 -0
  11. mas/lab/controller/daemon.py +190 -0
  12. mas/lab/controller/deps.py +172 -0
  13. mas/lab/controller/fastapi_app.py +166 -0
  14. mas/lab/controller/http_server.py +243 -0
  15. mas/lab/controller/io_capture.py +55 -0
  16. mas/lab/controller/item_service.py +625 -0
  17. mas/lab/controller/job_store.py +209 -0
  18. mas/lab/controller/jobs.py +375 -0
  19. mas/lab/controller/kinds.py +149 -0
  20. mas/lab/controller/lab_registry.py +1076 -0
  21. mas/lab/controller/manifest_layout.py +832 -0
  22. mas/lab/controller/manifest_store.py +214 -0
  23. mas/lab/controller/manifest_validation.py +90 -0
  24. mas/lab/controller/models.py +215 -0
  25. mas/lab/controller/path_safety.py +68 -0
  26. mas/lab/controller/pipeline_validation.py +79 -0
  27. mas/lab/controller/registry.py +83 -0
  28. mas/lab/controller/routes/__init__.py +82 -0
  29. mas/lab/controller/routes/_api.py +15 -0
  30. mas/lab/controller/routes/apps.py +190 -0
  31. mas/lab/controller/routes/artifacts.py +37 -0
  32. mas/lab/controller/routes/benchmark.py +307 -0
  33. mas/lab/controller/routes/choices.py +141 -0
  34. mas/lab/controller/routes/datasets.py +91 -0
  35. mas/lab/controller/routes/design_patterns.py +121 -0
  36. mas/lab/controller/routes/eval_output.py +31 -0
  37. mas/lab/controller/routes/experiments.py +194 -0
  38. mas/lab/controller/routes/health.py +178 -0
  39. mas/lab/controller/routes/items.py +187 -0
  40. mas/lab/controller/routes/jobs.py +107 -0
  41. mas/lab/controller/routes/libraries.py +144 -0
  42. mas/lab/controller/routes/overlays.py +164 -0
  43. mas/lab/controller/routes/pipelines.py +139 -0
  44. mas/lab/controller/routes/registry.py +40 -0
  45. mas/lab/controller/routes/run.py +215 -0
  46. mas/lab/controller/routes/runs.py +392 -0
  47. mas/lab/controller/routes/scopes.py +139 -0
  48. mas/lab/controller/routes/uploads.py +24 -0
  49. mas/lab/controller/routes/validate.py +36 -0
  50. mas/lab/controller/run_bridge.py +276 -0
  51. mas/lab/controller/run_store.py +190 -0
  52. mas/lab/controller/schema_registry.py +109 -0
  53. mas/lab/controller/schemas/pipeline-step-types-post.json +764 -0
  54. mas/lab/controller/schemas/pipeline-step-types-pre.json +35 -0
  55. mas/lab/controller/scope_catalog.py +266 -0
  56. mas/lab/controller/scope_service.py +134 -0
  57. mas/lab/controller/sessions.py +63 -0
  58. mas/lab/controller/settings.py +65 -0
  59. mas/lab/controller/ui_stream/__init__.py +13 -0
  60. mas/lab/controller/ui_stream/app.py +2147 -0
  61. mas/lab/controller/ui_stream/artefact_bind.py +308 -0
  62. mas/lab/controller/ui_stream/auth.py +136 -0
  63. mas/lab/controller/ui_stream/bus.py +156 -0
  64. mas/lab/controller/ui_stream/export.py +400 -0
  65. mas/lab/controller/ui_stream/governance.py +141 -0
  66. mas/lab/controller/ui_stream/ingest.py +300 -0
  67. mas/lab/controller/ui_stream/inspect.py +55 -0
  68. mas/lab/controller/ui_stream/layouts.py +161 -0
  69. mas/lab/controller/ui_stream/metrics.py +274 -0
  70. mas/lab/controller/ui_stream/plot_folds.py +609 -0
  71. mas/lab/controller/ui_stream/plugin_registry.py +139 -0
  72. mas/lab/controller/ui_stream/refs.py +259 -0
  73. mas/lab/controller/ui_stream/replay.py +236 -0
  74. mas/lab/controller/ui_stream/replay_cli.py +707 -0
  75. mas/lab/controller/ui_stream/run_index.py +337 -0
  76. mas/lab/controller/ui_stream/spec_load.py +48 -0
  77. mas/lab/controller/ui_stream/spec_snapshot.py +313 -0
  78. mas/lab/controller/ui_stream/stream.py +95 -0
  79. mas/lab/controller/ui_stream/streams.py +42 -0
  80. mas/lab/controller/ui_stream/timeline.py +183 -0
  81. mas/lab/controller/ui_stream/ui_trace.py +258 -0
  82. mas/lab/controller/uploads.py +61 -0
  83. mas/lab/controller/worker_model.py +137 -0
  84. mas/lab/controller/workers.py +296 -0
  85. mas/lab/controller/workspace_library.py +70 -0
  86. mas_lab_component_controller-0.2.0.dist-info/METADATA +21 -0
  87. mas_lab_component_controller-0.2.0.dist-info/RECORD +89 -0
  88. mas_lab_component_controller-0.2.0.dist-info/WHEEL +4 -0
  89. mas_lab_component_controller-0.2.0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,149 @@
1
+ # Copyright (c) 2026 Cisco Systems, Inc. and its affiliates
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ """Kind metadata the UI uses instead of hardcoded folder / model lists."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Any
8
+
9
+ NAME_PATTERN = r"^[A-Za-z0-9][A-Za-z0-9._-]*$"
10
+ VERSION_PATTERN = r"^v[0-9]+([.][0-9]+)*$"
11
+
12
+ # Kinds a lab scope reports (no applications — a lab is not a library).
13
+ LAB_KINDS = (
14
+ "experiment",
15
+ "pipeline",
16
+ "overlay",
17
+ "dataset",
18
+ "scenario",
19
+ )
20
+
21
+ # Kinds a library always offers. Experiments/pipelines appear when present.
22
+ LIBRARY_BASE_KINDS = (
23
+ "application",
24
+ "agent",
25
+ "overlay",
26
+ "dataset",
27
+ "tool",
28
+ "skill",
29
+ )
30
+
31
+ KIND_CATALOG: dict[str, dict[str, Any]] = {
32
+ "application": {
33
+ "id": "application",
34
+ "plural": "applications",
35
+ "schema_id": "mas",
36
+ "creatable": True,
37
+ "versioned": True,
38
+ "runnable": True,
39
+ "children": ["agent"],
40
+ "name_pattern": NAME_PATTERN,
41
+ "template_ids": ["blank"],
42
+ "display_fields": ["title", "summary", "ref", "latest"],
43
+ },
44
+ "agent": {
45
+ "id": "agent",
46
+ "plural": "agents",
47
+ "schema_id": "agent",
48
+ "creatable": True,
49
+ "versioned": False,
50
+ "children": [],
51
+ "name_pattern": NAME_PATTERN,
52
+ "template_ids": ["blank"],
53
+ "display_fields": ["title", "summary", "ref"],
54
+ },
55
+ "overlay": {
56
+ "id": "overlay",
57
+ "plural": "overlays",
58
+ "schema_id": "overlay",
59
+ "creatable": True,
60
+ "versioned": False,
61
+ "children": [],
62
+ "name_pattern": NAME_PATTERN,
63
+ "template_ids": ["blank"],
64
+ "display_fields": ["title", "summary", "ref"],
65
+ },
66
+ "pipeline": {
67
+ "id": "pipeline",
68
+ "plural": "pipelines",
69
+ "schema_id": "pipeline",
70
+ "creatable": True,
71
+ "versioned": False,
72
+ "runnable": True,
73
+ "children": [],
74
+ "name_pattern": NAME_PATTERN,
75
+ "template_ids": ["blank"],
76
+ "display_fields": ["title", "summary", "ref"],
77
+ },
78
+ "experiment": {
79
+ "id": "experiment",
80
+ "plural": "experiments",
81
+ "schema_id": "experiment",
82
+ "creatable": True,
83
+ "versioned": False,
84
+ "runnable": True,
85
+ "children": [],
86
+ "name_pattern": NAME_PATTERN,
87
+ "template_ids": ["blank"],
88
+ "display_fields": ["title", "summary", "ref"],
89
+ },
90
+ "dataset": {
91
+ "id": "dataset",
92
+ "plural": "datasets",
93
+ "schema_id": "dataset",
94
+ "creatable": True,
95
+ "versioned": False,
96
+ "children": [],
97
+ "name_pattern": NAME_PATTERN,
98
+ "template_ids": ["blank"],
99
+ "display_fields": ["title", "summary", "ref"],
100
+ },
101
+ "tool": {
102
+ "id": "tool",
103
+ "plural": "tools",
104
+ "schema_id": "tool",
105
+ "creatable": False,
106
+ "versioned": False,
107
+ "children": [],
108
+ "name_pattern": NAME_PATTERN,
109
+ "template_ids": [],
110
+ "display_fields": ["title", "summary", "ref"],
111
+ },
112
+ "skill": {
113
+ "id": "skill",
114
+ "plural": "skills",
115
+ "schema_id": "skill",
116
+ "creatable": False,
117
+ "versioned": False,
118
+ "children": [],
119
+ "name_pattern": NAME_PATTERN,
120
+ "template_ids": [],
121
+ "display_fields": ["title", "summary", "ref"],
122
+ },
123
+ "scenario": {
124
+ "id": "scenario",
125
+ "plural": "scenarios",
126
+ "schema_id": "scenario",
127
+ "creatable": False,
128
+ "versioned": False,
129
+ "children": [],
130
+ "name_pattern": NAME_PATTERN,
131
+ "template_ids": [],
132
+ "display_fields": ["title", "summary", "ref"],
133
+ },
134
+ }
135
+
136
+
137
+ def kind_info(kind: str) -> dict[str, Any]:
138
+ info = KIND_CATALOG.get(kind)
139
+ if info is None:
140
+ raise KeyError(kind)
141
+ return dict(info)
142
+
143
+
144
+ def list_kinds() -> list[dict[str, Any]]:
145
+ return [dict(KIND_CATALOG[k]) for k in KIND_CATALOG]
146
+
147
+
148
+ def path_for_kind(kind: str) -> str:
149
+ return str(KIND_CATALOG.get(kind, {}).get("plural") or f"{kind}s")