openadapt-ml 0.2.0__py3-none-any.whl → 0.2.2__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.
- openadapt_ml/baselines/__init__.py +121 -0
- openadapt_ml/baselines/adapter.py +185 -0
- openadapt_ml/baselines/cli.py +314 -0
- openadapt_ml/baselines/config.py +448 -0
- openadapt_ml/baselines/parser.py +922 -0
- openadapt_ml/baselines/prompts.py +787 -0
- openadapt_ml/benchmarks/__init__.py +13 -115
- openadapt_ml/benchmarks/agent.py +265 -421
- openadapt_ml/benchmarks/azure.py +28 -19
- openadapt_ml/benchmarks/azure_ops_tracker.py +521 -0
- openadapt_ml/benchmarks/cli.py +1722 -4847
- openadapt_ml/benchmarks/trace_export.py +631 -0
- openadapt_ml/benchmarks/viewer.py +22 -5
- openadapt_ml/benchmarks/vm_monitor.py +530 -29
- openadapt_ml/benchmarks/waa_deploy/Dockerfile +47 -53
- openadapt_ml/benchmarks/waa_deploy/api_agent.py +21 -20
- openadapt_ml/cloud/azure_inference.py +3 -5
- openadapt_ml/cloud/lambda_labs.py +722 -307
- openadapt_ml/cloud/local.py +2038 -487
- openadapt_ml/cloud/ssh_tunnel.py +68 -26
- openadapt_ml/datasets/next_action.py +40 -30
- openadapt_ml/evals/grounding.py +8 -3
- openadapt_ml/evals/plot_eval_metrics.py +15 -13
- openadapt_ml/evals/trajectory_matching.py +41 -26
- openadapt_ml/experiments/demo_prompt/format_demo.py +16 -6
- openadapt_ml/experiments/demo_prompt/run_experiment.py +26 -16
- openadapt_ml/experiments/representation_shootout/__init__.py +70 -0
- openadapt_ml/experiments/representation_shootout/conditions.py +708 -0
- openadapt_ml/experiments/representation_shootout/config.py +390 -0
- openadapt_ml/experiments/representation_shootout/evaluator.py +659 -0
- openadapt_ml/experiments/representation_shootout/runner.py +687 -0
- openadapt_ml/experiments/waa_demo/runner.py +29 -14
- openadapt_ml/export/parquet.py +36 -24
- openadapt_ml/grounding/detector.py +18 -14
- openadapt_ml/ingest/__init__.py +8 -6
- openadapt_ml/ingest/capture.py +25 -22
- openadapt_ml/ingest/loader.py +7 -4
- openadapt_ml/ingest/synthetic.py +189 -100
- openadapt_ml/models/api_adapter.py +14 -4
- openadapt_ml/models/base_adapter.py +10 -2
- openadapt_ml/models/providers/__init__.py +288 -0
- openadapt_ml/models/providers/anthropic.py +266 -0
- openadapt_ml/models/providers/base.py +299 -0
- openadapt_ml/models/providers/google.py +376 -0
- openadapt_ml/models/providers/openai.py +342 -0
- openadapt_ml/models/qwen_vl.py +46 -19
- openadapt_ml/perception/__init__.py +35 -0
- openadapt_ml/perception/integration.py +399 -0
- openadapt_ml/retrieval/demo_retriever.py +50 -24
- openadapt_ml/retrieval/embeddings.py +9 -8
- openadapt_ml/retrieval/retriever.py +3 -1
- openadapt_ml/runtime/__init__.py +50 -0
- openadapt_ml/runtime/policy.py +18 -5
- openadapt_ml/runtime/safety_gate.py +471 -0
- openadapt_ml/schema/__init__.py +9 -0
- openadapt_ml/schema/converters.py +74 -27
- openadapt_ml/schema/episode.py +31 -18
- openadapt_ml/scripts/capture_screenshots.py +530 -0
- openadapt_ml/scripts/compare.py +85 -54
- openadapt_ml/scripts/demo_policy.py +4 -1
- openadapt_ml/scripts/eval_policy.py +15 -9
- openadapt_ml/scripts/make_gif.py +1 -1
- openadapt_ml/scripts/prepare_synthetic.py +3 -1
- openadapt_ml/scripts/train.py +21 -9
- openadapt_ml/segmentation/README.md +920 -0
- openadapt_ml/segmentation/__init__.py +97 -0
- openadapt_ml/segmentation/adapters/__init__.py +5 -0
- openadapt_ml/segmentation/adapters/capture_adapter.py +420 -0
- openadapt_ml/segmentation/annotator.py +610 -0
- openadapt_ml/segmentation/cache.py +290 -0
- openadapt_ml/segmentation/cli.py +674 -0
- openadapt_ml/segmentation/deduplicator.py +656 -0
- openadapt_ml/segmentation/frame_describer.py +788 -0
- openadapt_ml/segmentation/pipeline.py +340 -0
- openadapt_ml/segmentation/schemas.py +622 -0
- openadapt_ml/segmentation/segment_extractor.py +634 -0
- openadapt_ml/training/azure_ops_viewer.py +1097 -0
- openadapt_ml/training/benchmark_viewer.py +52 -41
- openadapt_ml/training/shared_ui.py +7 -7
- openadapt_ml/training/stub_provider.py +57 -35
- openadapt_ml/training/trainer.py +143 -86
- openadapt_ml/training/trl_trainer.py +70 -21
- openadapt_ml/training/viewer.py +323 -108
- openadapt_ml/training/viewer_components.py +180 -0
- {openadapt_ml-0.2.0.dist-info → openadapt_ml-0.2.2.dist-info}/METADATA +215 -14
- openadapt_ml-0.2.2.dist-info/RECORD +116 -0
- openadapt_ml/benchmarks/base.py +0 -366
- openadapt_ml/benchmarks/data_collection.py +0 -432
- openadapt_ml/benchmarks/live_tracker.py +0 -180
- openadapt_ml/benchmarks/runner.py +0 -418
- openadapt_ml/benchmarks/waa.py +0 -761
- openadapt_ml/benchmarks/waa_live.py +0 -619
- openadapt_ml-0.2.0.dist-info/RECORD +0 -86
- {openadapt_ml-0.2.0.dist-info → openadapt_ml-0.2.2.dist-info}/WHEEL +0 -0
- {openadapt_ml-0.2.0.dist-info → openadapt_ml-0.2.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"""Adapter module for openadapt-viewer components.
|
|
2
|
+
|
|
3
|
+
This module provides wrapper functions that adapt openadapt-viewer components
|
|
4
|
+
for openadapt-ml specific use cases, particularly for training visualization.
|
|
5
|
+
|
|
6
|
+
Migration Approach:
|
|
7
|
+
------------------
|
|
8
|
+
Phase 1 (Foundation): Create this adapter module to establish patterns
|
|
9
|
+
Phase 2 (Integration): Gradually migrate viewer.py to use these adapters
|
|
10
|
+
Phase 3 (Consolidation): Remove duplicate code from viewer.py
|
|
11
|
+
Phase 4 (Completion): Full dependency on openadapt-viewer
|
|
12
|
+
|
|
13
|
+
Design Principles:
|
|
14
|
+
-----------------
|
|
15
|
+
1. Each function wraps openadapt-viewer components with ML-specific context
|
|
16
|
+
2. Functions accept openadapt-ml data structures (TrainingState, predictions, etc.)
|
|
17
|
+
3. No breaking changes to existing viewer.py code
|
|
18
|
+
4. Can be incrementally adopted in future phases
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
from typing import Any
|
|
25
|
+
|
|
26
|
+
# Import openadapt-viewer components
|
|
27
|
+
from openadapt_viewer.components import (
|
|
28
|
+
screenshot_display as _screenshot_display,
|
|
29
|
+
playback_controls as _playback_controls,
|
|
30
|
+
metrics_grid as _metrics_grid,
|
|
31
|
+
badge as _badge,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def screenshot_with_predictions(
|
|
36
|
+
screenshot_path: str | Path,
|
|
37
|
+
human_action: dict[str, Any] | None = None,
|
|
38
|
+
predicted_action: dict[str, Any] | None = None,
|
|
39
|
+
step_number: int | None = None,
|
|
40
|
+
show_difference: bool = True,
|
|
41
|
+
) -> str:
|
|
42
|
+
"""Generate screenshot display with human and AI action overlays."""
|
|
43
|
+
overlays = []
|
|
44
|
+
|
|
45
|
+
if human_action:
|
|
46
|
+
overlays.append(
|
|
47
|
+
{
|
|
48
|
+
"type": human_action.get("type", "click"),
|
|
49
|
+
"x": human_action.get("x", 0),
|
|
50
|
+
"y": human_action.get("y", 0),
|
|
51
|
+
"label": "H",
|
|
52
|
+
"variant": "human",
|
|
53
|
+
"color": "#34d399",
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
if predicted_action:
|
|
58
|
+
overlays.append(
|
|
59
|
+
{
|
|
60
|
+
"type": predicted_action.get("type", "click"),
|
|
61
|
+
"x": predicted_action.get("x", 0),
|
|
62
|
+
"y": predicted_action.get("y", 0),
|
|
63
|
+
"label": "AI",
|
|
64
|
+
"variant": "predicted",
|
|
65
|
+
"color": "#00d4aa",
|
|
66
|
+
}
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
caption = f"Step {step_number}" if step_number is not None else None
|
|
70
|
+
|
|
71
|
+
return _screenshot_display(
|
|
72
|
+
image_path=str(screenshot_path),
|
|
73
|
+
overlays=overlays,
|
|
74
|
+
caption=caption,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def training_metrics(
|
|
79
|
+
epoch: int | None = None,
|
|
80
|
+
loss: float | None = None,
|
|
81
|
+
accuracy: float | None = None,
|
|
82
|
+
elapsed_time: float | None = None,
|
|
83
|
+
learning_rate: float | None = None,
|
|
84
|
+
**additional_metrics: Any,
|
|
85
|
+
) -> str:
|
|
86
|
+
"""Generate metrics grid for training statistics."""
|
|
87
|
+
metrics = []
|
|
88
|
+
|
|
89
|
+
if epoch is not None:
|
|
90
|
+
metrics.append({"label": "Epoch", "value": epoch})
|
|
91
|
+
|
|
92
|
+
if loss is not None:
|
|
93
|
+
color = "success" if loss < 0.1 else "warning" if loss < 0.5 else "error"
|
|
94
|
+
metrics.append({"label": "Loss", "value": f"{loss:.4f}", "color": color})
|
|
95
|
+
|
|
96
|
+
if accuracy is not None:
|
|
97
|
+
color = (
|
|
98
|
+
"success" if accuracy > 0.9 else "warning" if accuracy > 0.7 else "error"
|
|
99
|
+
)
|
|
100
|
+
metrics.append(
|
|
101
|
+
{"label": "Accuracy", "value": f"{accuracy:.2%}", "color": color}
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
if elapsed_time is not None:
|
|
105
|
+
hours = int(elapsed_time // 3600)
|
|
106
|
+
minutes = int((elapsed_time % 3600) // 60)
|
|
107
|
+
seconds = int(elapsed_time % 60)
|
|
108
|
+
time_str = f"{hours}h {minutes}m {seconds}s"
|
|
109
|
+
metrics.append({"label": "Elapsed", "value": time_str})
|
|
110
|
+
|
|
111
|
+
if learning_rate is not None:
|
|
112
|
+
metrics.append({"label": "LR", "value": f"{learning_rate:.2e}"})
|
|
113
|
+
|
|
114
|
+
for key, value in additional_metrics.items():
|
|
115
|
+
label = key.replace("_", " ").title()
|
|
116
|
+
metrics.append({"label": label, "value": str(value)})
|
|
117
|
+
|
|
118
|
+
return _metrics_grid(metrics)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def playback_controls(
|
|
122
|
+
step_count: int,
|
|
123
|
+
initial_step: int = 0,
|
|
124
|
+
) -> str:
|
|
125
|
+
"""Generate playback controls for step-by-step viewer."""
|
|
126
|
+
return _playback_controls(
|
|
127
|
+
step_count=step_count,
|
|
128
|
+
initial_step=initial_step,
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def correctness_badge(is_correct: bool, show_label: bool = True) -> str:
|
|
133
|
+
"""Generate a badge indicating prediction correctness."""
|
|
134
|
+
if is_correct:
|
|
135
|
+
text = "Correct" if show_label else "✓"
|
|
136
|
+
color = "success"
|
|
137
|
+
else:
|
|
138
|
+
text = "Incorrect" if show_label else "✗"
|
|
139
|
+
color = "error"
|
|
140
|
+
|
|
141
|
+
return _badge(text=text, color=color)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def generate_comparison_summary(
|
|
145
|
+
total_steps: int,
|
|
146
|
+
correct_steps: int,
|
|
147
|
+
model_name: str | None = None,
|
|
148
|
+
) -> str:
|
|
149
|
+
"""Generate a summary card for model comparison results."""
|
|
150
|
+
accuracy = correct_steps / total_steps if total_steps > 0 else 0
|
|
151
|
+
incorrect_steps = total_steps - correct_steps
|
|
152
|
+
|
|
153
|
+
metrics = [
|
|
154
|
+
{"label": "Total Steps", "value": total_steps},
|
|
155
|
+
{"label": "Correct", "value": correct_steps, "color": "success"},
|
|
156
|
+
{
|
|
157
|
+
"label": "Incorrect",
|
|
158
|
+
"value": incorrect_steps,
|
|
159
|
+
"color": "error" if incorrect_steps > 0 else "muted",
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"label": "Accuracy",
|
|
163
|
+
"value": f"{accuracy:.1%}",
|
|
164
|
+
"color": "success" if accuracy > 0.9 else "warning",
|
|
165
|
+
},
|
|
166
|
+
]
|
|
167
|
+
|
|
168
|
+
if model_name:
|
|
169
|
+
metrics.insert(0, {"label": "Model", "value": model_name})
|
|
170
|
+
|
|
171
|
+
return _metrics_grid(metrics)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
__all__ = [
|
|
175
|
+
"screenshot_with_predictions",
|
|
176
|
+
"training_metrics",
|
|
177
|
+
"playback_controls",
|
|
178
|
+
"correctness_badge",
|
|
179
|
+
"generate_comparison_summary",
|
|
180
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openadapt-ml
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Model-agnostic, domain-agnostic ML engine for GUI automation agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/OpenAdaptAI/openadapt-ml
|
|
6
6
|
Project-URL: Repository, https://github.com/OpenAdaptAI/openadapt-ml
|
|
@@ -13,18 +13,22 @@ Classifier: Development Status :: 3 - Alpha
|
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
14
|
Classifier: License :: OSI Approved :: MIT License
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
19
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
20
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
|
-
Requires-Python: >=3.
|
|
21
|
+
Requires-Python: >=3.10
|
|
20
22
|
Requires-Dist: azure-ai-ml>=1.30.0
|
|
21
23
|
Requires-Dist: azure-identity>=1.25.1
|
|
22
24
|
Requires-Dist: bitsandbytes>=0.41.0
|
|
25
|
+
Requires-Dist: click>=8.1.0
|
|
23
26
|
Requires-Dist: google-generativeai>=0.8.5
|
|
24
27
|
Requires-Dist: matplotlib>=3.10.7
|
|
25
28
|
Requires-Dist: openadapt-capture>=0.1.0
|
|
26
29
|
Requires-Dist: peft>=0.18.0
|
|
27
30
|
Requires-Dist: pillow>=12.0.0
|
|
31
|
+
Requires-Dist: pyautogui>=0.9.54
|
|
28
32
|
Requires-Dist: pydantic-settings>=2.0.0
|
|
29
33
|
Requires-Dist: pytest>=9.0.2
|
|
30
34
|
Requires-Dist: pyyaml>=6.0.3
|
|
@@ -38,6 +42,8 @@ Requires-Dist: pydantic-settings>=2.0.0; extra == 'api'
|
|
|
38
42
|
Provides-Extra: azure
|
|
39
43
|
Requires-Dist: azure-ai-ml>=1.0.0; extra == 'azure'
|
|
40
44
|
Requires-Dist: azure-identity>=1.0.0; extra == 'azure'
|
|
45
|
+
Provides-Extra: benchmarks
|
|
46
|
+
Requires-Dist: openadapt-evals>=0.1.1; extra == 'benchmarks'
|
|
41
47
|
Provides-Extra: dev
|
|
42
48
|
Requires-Dist: pytest>=9.0.0; extra == 'dev'
|
|
43
49
|
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
@@ -52,17 +58,19 @@ Description-Content-Type: text/markdown
|
|
|
52
58
|
|
|
53
59
|
# OpenAdapt-ML
|
|
54
60
|
|
|
55
|
-
[](https://github.com/OpenAdaptAI/openadapt-ml/actions/workflows/publish.yml)
|
|
62
|
+
[](https://pypi.org/project/openadapt-ml/)
|
|
63
|
+
[](https://pypi.org/project/openadapt-ml/)
|
|
56
64
|
[](https://opensource.org/licenses/MIT)
|
|
57
|
-
[](https://www.python.org/downloads/)
|
|
58
66
|
|
|
59
67
|
OpenAdapt-ML is a **model-agnostic, domain-agnostic ML engine** for GUI
|
|
60
68
|
automation agents. It sits above **TRL + Unsloth** (which we use directly for training performance) and provides the GUI-specific layer:
|
|
61
69
|
|
|
62
70
|
- **Episode semantics**: Step/action/observation alignment, screenshot-action coupling, termination handling
|
|
63
|
-
- **Demo-conditioned inference**: Retrieval-augmented prompting (
|
|
71
|
+
- **Demo-conditioned inference**: Retrieval-augmented prompting (in early experiments: 46.7% -> 100% first-action accuracy on a controlled macOS benchmark where all 45 tasks share the same navigation entry point - see [publication roadmap](https://github.com/OpenAdaptAI/OpenAdapt/blob/main/docs/publication-roadmap.md) for methodology and limitations)
|
|
64
72
|
- **Benchmark adapters**: WAA today, OSWorld/WebArena planned
|
|
65
|
-
- **VLM adapters**:
|
|
73
|
+
- **VLM adapters**: Supports open-source GUI-agent models (Qwen3-VL, Qwen2.5-VL)
|
|
66
74
|
- **Training pipeline**: TRL + Unsloth integration for 2x faster training with 50% less VRAM
|
|
67
75
|
|
|
68
76
|
OpenAdapt-ML is **not** a training framework, optimizer, hardware orchestrator, or experiment manager. We use TRL/Unsloth, Lambda Labs/Azure, and W&B/MLflow for those.
|
|
@@ -254,7 +262,9 @@ simple login flow.
|
|
|
254
262
|
### 5.1 Synthetic scenarios
|
|
255
263
|
|
|
256
264
|
OpenAdapt-ML includes synthetic UI generators for structured GUI automation benchmarks.
|
|
257
|
-
Currently two scenarios are supported
|
|
265
|
+
Currently two scenarios are supported.
|
|
266
|
+
|
|
267
|
+
> **Note:** These are **synthetic, controlled benchmarks** designed for rapid iteration and debugging, not real-world evaluation. The 100% accuracy results below demonstrate that fine-tuning works on simple scenarios with known ground truth - they do not represent performance on production UIs or standard benchmarks like WAA. See section 14 (Limitations) for details.
|
|
258
268
|
|
|
259
269
|
#### Login Scenario (6 steps, 3 elements)
|
|
260
270
|
|
|
@@ -437,15 +447,18 @@ It exposes step-level performance metrics, which let us visually answer the ques
|
|
|
437
447
|
| Claude Sonnet 4.5 | API | 0.121 | 0.757 | 0.000 |
|
|
438
448
|
| GPT-5.1 | API | 0.183 | 0.057 | 0.600 |
|
|
439
449
|
|
|
440
|
-
**
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
450
|
+
**Observations on synthetic login benchmark:**
|
|
451
|
+
|
|
452
|
+
> **Important:** These findings are from a synthetic benchmark with ~3 UI elements and a fixed action sequence. They demonstrate the training pipeline works, but should not be extrapolated to real-world GUI automation performance. Evaluation on standard benchmarks (WAA, WebArena) is ongoing.
|
|
453
|
+
|
|
454
|
+
1. **Fine-tuning improves synthetic task performance**: Both 2B and 8B models show 2-3x improvement in action accuracy after fine-tuning on this specific task
|
|
455
|
+
2. **On this synthetic benchmark, fine-tuned models outperform zero-shot API calls**: This is expected since the task is simple and the models are trained on it directly
|
|
456
|
+
3. **Coordinate precision is learnable**: Fine-tuned models achieve low coordinate error on training distribution
|
|
457
|
+
4. **API models struggle with custom action format**: Without fine-tuning on the specific DSL (CLICK/TYPE/DONE), API models have high format-error rates
|
|
445
458
|
|
|
446
|
-
### 6.4 Set-of-Marks (SoM) Mode: 100% Accuracy
|
|
459
|
+
### 6.4 Set-of-Marks (SoM) Mode: 100% Accuracy on Synthetic Benchmarks
|
|
447
460
|
|
|
448
|
-
With **Set-of-Marks** visual prompting, fine-tuned Qwen3-VL-2B achieves **100% accuracy** on both login (6-step) and registration (12-step) scenarios:
|
|
461
|
+
With **Set-of-Marks** visual prompting, fine-tuned Qwen3-VL-2B achieves **100% accuracy** on both login (6-step) and registration (12-step) synthetic scenarios. Note that these are controlled, toy benchmarks with a small number of UI elements:
|
|
449
462
|
|
|
450
463
|
| Scenario | Steps | Elements | Action Acc | Element Acc | Episode Success |
|
|
451
464
|
|----------|-------|----------|------------|-------------|-----------------|
|
|
@@ -826,6 +839,194 @@ uv run python -m openadapt_ml.cloud.local serve --port 8080 --open
|
|
|
826
839
|
|
|
827
840
|
*View benchmark evaluation results with task-level filtering, success/failure status, and run comparison. Shows Claude achieving 30% on mock evaluation tasks (simulated environment for testing the pipeline - real WAA evaluation requires Windows VMs).*
|
|
828
841
|
|
|
842
|
+
### 13.4 VM Monitoring Dashboard
|
|
843
|
+
|
|
844
|
+
For managing Azure VMs used in benchmark evaluations, the `vm monitor` command provides a comprehensive dashboard:
|
|
845
|
+
|
|
846
|
+
```bash
|
|
847
|
+
# Start VM monitoring dashboard (auto-opens browser)
|
|
848
|
+
uv run python -m openadapt_ml.benchmarks.cli vm monitor
|
|
849
|
+
|
|
850
|
+
# Show detailed information (evaluation history, daily/weekly costs)
|
|
851
|
+
uv run python -m openadapt_ml.benchmarks.cli vm monitor --details
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
**VM Monitor Dashboard (Full View):**
|
|
855
|
+
|
|
856
|
+

|
|
857
|
+
|
|
858
|
+
*The VM monitor dashboard shows: (1) VM status (name, IP, size, state), (2) Current activity (idle/benchmark running), (3) Cost tracking (uptime, hourly rate, total cost), (4) Recent Azure ML jobs from last 7 days, and (6) Dashboard & access URLs.*
|
|
859
|
+
|
|
860
|
+
**VM Monitor Dashboard (With --details Flag):**
|
|
861
|
+
|
|
862
|
+

|
|
863
|
+
|
|
864
|
+
*The --details flag adds: (5) Evaluation history with success rates and agent types, plus extended cost information (daily/weekly projections).*
|
|
865
|
+
|
|
866
|
+
**Features:**
|
|
867
|
+
- **Real-time VM status** - Shows VM size, power state, and IP address
|
|
868
|
+
- **Activity detection** - Identifies if VM is idle, running benchmarks, or in setup
|
|
869
|
+
- **Cost tracking** - Displays uptime hours, hourly rate, and total cost for current session
|
|
870
|
+
- **Azure ML jobs** - Lists recent jobs from last 7 days with status indicators
|
|
871
|
+
- **Evaluation history** - Shows past benchmark runs with success rates (with --details flag)
|
|
872
|
+
- **Dashboard & tunnels** - Auto-starts web dashboard and SSH/VNC tunnels for accessing Windows VM
|
|
873
|
+
|
|
874
|
+
**Mock mode for testing:**
|
|
875
|
+
```bash
|
|
876
|
+
# Generate screenshots or test dashboard without a VM running
|
|
877
|
+
uv run python -m openadapt_ml.benchmarks.cli vm monitor --mock
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
**Auto-shutdown option:**
|
|
881
|
+
```bash
|
|
882
|
+
# Automatically deallocate VM after 2 hours to prevent runaway costs
|
|
883
|
+
uv run python -m openadapt_ml.benchmarks.cli vm monitor --auto-shutdown-hours 2
|
|
884
|
+
```
|
|
885
|
+
|
|
886
|
+
### 13.5 Benchmark Execution Logs
|
|
887
|
+
|
|
888
|
+
View benchmark execution progress and logs:
|
|
889
|
+
|
|
890
|
+
```bash
|
|
891
|
+
# View WAA container status and Docker logs
|
|
892
|
+
uv run python -m openadapt_ml.benchmarks.cli logs
|
|
893
|
+
|
|
894
|
+
# View WAA benchmark execution logs (task progress, agent actions)
|
|
895
|
+
uv run python -m openadapt_ml.benchmarks.cli logs --run
|
|
896
|
+
|
|
897
|
+
# Stream execution logs live
|
|
898
|
+
uv run python -m openadapt_ml.benchmarks.cli logs --run -f
|
|
899
|
+
|
|
900
|
+
# Show last N lines of execution logs
|
|
901
|
+
uv run python -m openadapt_ml.benchmarks.cli logs --run --tail 100
|
|
902
|
+
|
|
903
|
+
# Show benchmark progress and ETA
|
|
904
|
+
uv run python -m openadapt_ml.benchmarks.cli logs --progress
|
|
905
|
+
```
|
|
906
|
+
|
|
907
|
+
**Example: Container status (`logs`)**
|
|
908
|
+
```
|
|
909
|
+
WAA Status (20.12.180.208)
|
|
910
|
+
============================================================
|
|
911
|
+
|
|
912
|
+
[Docker Images]
|
|
913
|
+
REPOSITORY TAG SIZE
|
|
914
|
+
waa-auto latest 25.4GB
|
|
915
|
+
windowsarena/winarena latest 25.8GB
|
|
916
|
+
|
|
917
|
+
[Container]
|
|
918
|
+
Status: Up 49 minutes
|
|
919
|
+
|
|
920
|
+
[Storage]
|
|
921
|
+
Total: 21G
|
|
922
|
+
Disk image: 64G
|
|
923
|
+
|
|
924
|
+
[QEMU VM]
|
|
925
|
+
Status: Running (PID 1471)
|
|
926
|
+
CPU: 176%, MEM: 51.6%, Uptime: 47:28
|
|
927
|
+
|
|
928
|
+
[WAA Server]
|
|
929
|
+
"status": "Probe successful"
|
|
930
|
+
(READY)
|
|
931
|
+
```
|
|
932
|
+
|
|
933
|
+
**Example: Benchmark execution logs (`logs --run -f`)**
|
|
934
|
+
```
|
|
935
|
+
Run log: /home/azureuser/cli_logs/run_20260128_175507.log
|
|
936
|
+
------------------------------------------------------------
|
|
937
|
+
Streaming log (Ctrl+C to stop)...
|
|
938
|
+
|
|
939
|
+
[2026-01-28 23:05:10,303 INFO agent/401-MainProcess] Thinking...
|
|
940
|
+
[2026-01-28 23:05:17,318 INFO python/62-MainProcess] Updated computer successfully
|
|
941
|
+
[2026-01-28 23:05:17,318 INFO lib_run_single/56-MainProcess] Step 9: computer.window_manager.switch_to_application("Summer Trip - File Explorer")
|
|
942
|
+
```
|
|
943
|
+
|
|
944
|
+
**Example: Benchmark progress (`logs --progress`)**
|
|
945
|
+
```
|
|
946
|
+
=== WAA Benchmark Progress ===
|
|
947
|
+
|
|
948
|
+
Log: /home/azureuser/cli_logs/run_20260128_175507.log
|
|
949
|
+
Started: 2026-01-28 22:55:14
|
|
950
|
+
Latest: 2026-01-28 23:28:37
|
|
951
|
+
|
|
952
|
+
Tasks completed: 1 / 154
|
|
953
|
+
Elapsed: 33 minutes
|
|
954
|
+
|
|
955
|
+
Avg time per task: ~33 min
|
|
956
|
+
Remaining tasks: 153
|
|
957
|
+
Estimated remaining: ~84h 9m
|
|
958
|
+
|
|
959
|
+
Progress: 0% [1/154]
|
|
960
|
+
```
|
|
961
|
+
|
|
962
|
+
**Other useful commands:**
|
|
963
|
+
```bash
|
|
964
|
+
# Check WAA server status (probe endpoint)
|
|
965
|
+
uv run python -m openadapt_ml.benchmarks.cli probe
|
|
966
|
+
|
|
967
|
+
# Check VM/Azure status
|
|
968
|
+
uv run python -m openadapt_ml.benchmarks.cli status
|
|
969
|
+
|
|
970
|
+
# Download benchmark results from VM
|
|
971
|
+
uv run python -m openadapt_ml.benchmarks.cli download
|
|
972
|
+
|
|
973
|
+
# Analyze downloaded results
|
|
974
|
+
uv run python -m openadapt_ml.benchmarks.cli analyze
|
|
975
|
+
```
|
|
976
|
+
|
|
977
|
+
**Running benchmarks:**
|
|
978
|
+
```bash
|
|
979
|
+
# Run full benchmark (154 tasks)
|
|
980
|
+
uv run python -m openadapt_ml.benchmarks.cli run --num-tasks 154
|
|
981
|
+
|
|
982
|
+
# Run specific domain
|
|
983
|
+
uv run python -m openadapt_ml.benchmarks.cli run --domain notepad --num-tasks 5
|
|
984
|
+
|
|
985
|
+
# Run single task
|
|
986
|
+
uv run python -m openadapt_ml.benchmarks.cli run --task notepad_1
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
For complete VM management commands and Azure setup instructions, see [`CLAUDE.md`](CLAUDE.md) and [`docs/azure_waa_setup.md`](docs/azure_waa_setup.md).
|
|
990
|
+
|
|
991
|
+
### 13.6 Screenshot Capture Tool
|
|
992
|
+
|
|
993
|
+
Capture screenshots of dashboards and VMs for documentation and PR purposes:
|
|
994
|
+
|
|
995
|
+
```bash
|
|
996
|
+
# Capture all available targets
|
|
997
|
+
uv run python -m openadapt_ml.benchmarks.cli screenshot
|
|
998
|
+
|
|
999
|
+
# List available targets
|
|
1000
|
+
uv run python -m openadapt_ml.benchmarks.cli screenshot --list
|
|
1001
|
+
|
|
1002
|
+
# Capture specific targets
|
|
1003
|
+
uv run python -m openadapt_ml.benchmarks.cli screenshot --target terminal
|
|
1004
|
+
uv run python -m openadapt_ml.benchmarks.cli screenshot --target azure-ops --target vnc
|
|
1005
|
+
|
|
1006
|
+
# Custom output directory
|
|
1007
|
+
uv run python -m openadapt_ml.benchmarks.cli screenshot --output /path/to/screenshots
|
|
1008
|
+
|
|
1009
|
+
# Without timestamp in filename
|
|
1010
|
+
uv run python -m openadapt_ml.benchmarks.cli screenshot --target terminal --no-timestamp
|
|
1011
|
+
```
|
|
1012
|
+
|
|
1013
|
+
**Available targets:**
|
|
1014
|
+
|
|
1015
|
+
| Target | Description |
|
|
1016
|
+
|--------|-------------|
|
|
1017
|
+
| `azure-ops` | Azure ops dashboard (localhost:8765) |
|
|
1018
|
+
| `vnc` | VNC viewer (localhost:8006) - Windows VM |
|
|
1019
|
+
| `terminal` | VM monitor terminal output (mock mode) |
|
|
1020
|
+
| `terminal-live` | VM monitor terminal output (live, requires running VM) |
|
|
1021
|
+
| `training` | Training dashboard (localhost:8080) |
|
|
1022
|
+
| `vm-screen` | Windows VM screen capture via QEMU |
|
|
1023
|
+
|
|
1024
|
+
**Notes:**
|
|
1025
|
+
- Terminal screenshots use PIL to render terminal output as PNG images
|
|
1026
|
+
- Web page screenshots work best with playwright installed (`uv add playwright && playwright install chromium`)
|
|
1027
|
+
- On macOS, interactive capture using `screencapture` is available as a fallback
|
|
1028
|
+
- Screenshots are saved to `docs/screenshots/` by default with timestamps
|
|
1029
|
+
|
|
829
1030
|
---
|
|
830
1031
|
|
|
831
1032
|
## 14. Limitations & Notes
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
openadapt_ml/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
openadapt_ml/config.py,sha256=eH5WTKRPkkidjkNb25Wn_dUAizUQTsVPMYLDq_ekPJQ,1865
|
|
3
|
+
openadapt_ml/baselines/__init__.py,sha256=psXRe8N-TTum0Io09miXQdPx4wxEFnmqjbamK6M-KaE,3137
|
|
4
|
+
openadapt_ml/baselines/adapter.py,sha256=sfJuHfrr-o2jWwFEBKyujXvhzbZ9jHeO92CcqcQIysM,5975
|
|
5
|
+
openadapt_ml/baselines/cli.py,sha256=T0LN2XcJcL-YingNxLoU3LCjDsjIoGyjFPX3xdPmfY4,7868
|
|
6
|
+
openadapt_ml/baselines/config.py,sha256=R2mf-H687l6njQK4Ugyr7QMwjlk5vfUhgvsFDtW4ljY,14085
|
|
7
|
+
openadapt_ml/baselines/parser.py,sha256=xMRFoqXdOYvO0bV92vGoUJ1Jewv_HzTcIjBg97SALb4,31191
|
|
8
|
+
openadapt_ml/baselines/prompts.py,sha256=w7N2jrfmf-FYHfuv1vGT7QtXMF1Ahuy3uAsfjPoo6Ho,24453
|
|
9
|
+
openadapt_ml/benchmarks/__init__.py,sha256=FaEGc7pRM-eLUXEEpJXcIckwkIWKhfaDkaxGM9VC4Os,877
|
|
10
|
+
openadapt_ml/benchmarks/agent.py,sha256=8UcS9skCy6l18fGYaYt0JzJmYSGNB_WxDWhApbM7QH0,26940
|
|
11
|
+
openadapt_ml/benchmarks/azure.py,sha256=dCrxi90X5NmFNMTT-2WG4AF3-IOO4zQs7yPpnqR-jLc,28238
|
|
12
|
+
openadapt_ml/benchmarks/azure_ops_tracker.py,sha256=NOW21LPagOWIThSCIotI5cBvve92dtIktRIDLuyJ2CI,19309
|
|
13
|
+
openadapt_ml/benchmarks/cli.py,sha256=t4cIGN68GdphCX0AGkWJa_M6D4oUO_M0rfJDzD_POGA,62730
|
|
14
|
+
openadapt_ml/benchmarks/trace_export.py,sha256=Zx-pryEuLe734YHY8MgJsNdj3I3TcTY61OQ9iurgGB0,21746
|
|
15
|
+
openadapt_ml/benchmarks/viewer.py,sha256=Jztt_IoDW1u0WjPqlikfR8dunYzj66xCx0bMDDzJHQ8,41586
|
|
16
|
+
openadapt_ml/benchmarks/vm_monitor.py,sha256=FzmRrzqm0sZTcydfqMtRefBLfTr4fjoyWCxdHLovUj0,35733
|
|
17
|
+
openadapt_ml/benchmarks/waa_deploy/Dockerfile,sha256=F4GzVUoAUHvGlTFj-gGIPSlncG-JIz1_JyeaHvTnLpA,10853
|
|
18
|
+
openadapt_ml/benchmarks/waa_deploy/__init__.py,sha256=KV71HrrgETytfY0i4vFSi-yM0KjoQP2hd9Bl03cZ9yc,320
|
|
19
|
+
openadapt_ml/benchmarks/waa_deploy/api_agent.py,sha256=A5ZFhtBTKz0Q1GarNV51JhkEJwAgJfm9tK4CTJ1UEnE,20040
|
|
20
|
+
openadapt_ml/benchmarks/waa_deploy/start_waa_server.bat,sha256=YxgrSWh76zLijlpxEpulWf9To2JtJ-yR42lr2WyTXiY,1496
|
|
21
|
+
openadapt_ml/cloud/__init__.py,sha256=XYrvxivJeZ8qYnuGod5kodMlm3iT2OK2GAApO3CNB0c,133
|
|
22
|
+
openadapt_ml/cloud/azure_inference.py,sha256=2EQ9fCGJA2hzH7mEcSXVK1U2mO4PwBrQHxUCsGCDJVM,15696
|
|
23
|
+
openadapt_ml/cloud/lambda_labs.py,sha256=NGjVHjpY2nO8F9dHHFi_CVjY1nAwk5kOiguOSSYZkCw,107872
|
|
24
|
+
openadapt_ml/cloud/local.py,sha256=s3grqrpTkcT73tIoDt-HJonoCRwx0zBL7M8vSNYL3nU,166047
|
|
25
|
+
openadapt_ml/cloud/ssh_tunnel.py,sha256=PTcyl9cDmbszTJbOD2MAj21AWXqoJt-2Iz26HAPdxRE,21740
|
|
26
|
+
openadapt_ml/datasets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
openadapt_ml/datasets/next_action.py,sha256=2u1fRtOQzYdWZ6N_ebmOtPqWL9LnDun5STGuLmkcxrE,21252
|
|
28
|
+
openadapt_ml/evals/__init__.py,sha256=Kx7bSvPHwmoGVI3q1wS_lC17W2S32YHj0459JRqu6Ow,573
|
|
29
|
+
openadapt_ml/evals/grounding.py,sha256=tqjNWdinbj190vt_mPdc_w452z0AwgR81FDhkmKjDvs,8542
|
|
30
|
+
openadapt_ml/evals/plot_eval_metrics.py,sha256=GO-zhYpUJijb4Hp6fI-8lBR3TgjIDpCaOC4iQ-v9VO0,5259
|
|
31
|
+
openadapt_ml/evals/trajectory_matching.py,sha256=eiWPjMZAAWFmdDwQHVM689I98Kw5ensnAJrfEo_QZZ4,20764
|
|
32
|
+
openadapt_ml/experiments/demo_prompt/__init__.py,sha256=dwS0bI53jXMzHE-DPhb_mhmPdoqSZRIcNbV79wt8KPM,454
|
|
33
|
+
openadapt_ml/experiments/demo_prompt/format_demo.py,sha256=baXgqR-oJG9_hanlDPcPYKdMFLw2KSxJ5ERvl3FAwZ8,6691
|
|
34
|
+
openadapt_ml/experiments/demo_prompt/run_experiment.py,sha256=q_8k6WJeR50vrhS_jPmx_TkbPsk1OrTkwUrRkT_PqLM,16574
|
|
35
|
+
openadapt_ml/experiments/demo_prompt/results/experiment_20251231_002125.json,sha256=08oryOF126toTQDN9xciodavvfsaWNnXuBs0aULwpfI,5326
|
|
36
|
+
openadapt_ml/experiments/demo_prompt/results/experiment_n30_20251231_165958.json,sha256=u03VgYTQia_HzilzNjxdGLpUSdbo4SzmHqI-GXlvurg,26915
|
|
37
|
+
openadapt_ml/experiments/demo_prompt/results/multistep_20251231_025051.json,sha256=FA1JgXXLor6on3lHlfJdNSuKzBca30ggH8IWSJEmmfA,11517
|
|
38
|
+
openadapt_ml/experiments/representation_shootout/__init__.py,sha256=flQ8VdNGZ-Nc5sDofSPpGh65O9Iytwk-9DsOVmTMcHE,1874
|
|
39
|
+
openadapt_ml/experiments/representation_shootout/conditions.py,sha256=77AUh2U1t1ZGTHNLoLUO0WDp_17hLp3uZMUkTb2JYow,22866
|
|
40
|
+
openadapt_ml/experiments/representation_shootout/config.py,sha256=df29SNCSPYXsUK2aYQhvRpb9DtmKtoGmCDlp1rWafZU,13043
|
|
41
|
+
openadapt_ml/experiments/representation_shootout/evaluator.py,sha256=ijza5ky-r0CVBfw-amyztX_122N5ZRZsy_rCzMWLELw,22947
|
|
42
|
+
openadapt_ml/experiments/representation_shootout/runner.py,sha256=gvZkq3Opl_6i5pjc-danV-Q7PLLBdwMmnrwVxQ5fNlI,23413
|
|
43
|
+
openadapt_ml/experiments/waa_demo/__init__.py,sha256=9M8iLxO9GWAw-FIB-0tzsqaweLcO5EVP1Sc5BoK16iU,363
|
|
44
|
+
openadapt_ml/experiments/waa_demo/demos.py,sha256=UwO0EYy8wUEggaBaI_cXuYe_jwSB1hx3ZtPf-z9bhjc,13796
|
|
45
|
+
openadapt_ml/experiments/waa_demo/runner.py,sha256=qe0iP6bvI65-FPpw6--yGZ83ASKKtTGlEL7EoO24MiM,24399
|
|
46
|
+
openadapt_ml/experiments/waa_demo/tasks.py,sha256=jw1QwbOt8xmWBW2lmBWcJzKBXssjv_e0j49MlC2rVJY,5425
|
|
47
|
+
openadapt_ml/export/__init__.py,sha256=mKehKHOio4jGcK-3r0-pb446GdKMPs0O9hAu4S0_R7s,266
|
|
48
|
+
openadapt_ml/export/__main__.py,sha256=0ObtWcdzf6p7gPwhNlCKpNm2FIhmusdYNkuk8tyt77U,149
|
|
49
|
+
openadapt_ml/export/cli.py,sha256=goTKNq9cOO9wsdNluLMH_-f9kdWShH3FPP8sCZ6KaPI,2331
|
|
50
|
+
openadapt_ml/export/parquet.py,sha256=oQfyRAhUUS-EpiOWa7S7s8HaHibhfTSoNPYfKb2HDrA,9897
|
|
51
|
+
openadapt_ml/grounding/__init__.py,sha256=uMvcALFRXmKD6PHhqLZ24Y6zhRUs46_PnWYqiqJP5cM,1412
|
|
52
|
+
openadapt_ml/grounding/base.py,sha256=mnjT25nxltZCD0VBzgIgj2kuCcB4sgXBN97MBaW5P6c,7688
|
|
53
|
+
openadapt_ml/grounding/detector.py,sha256=gu-clpHfHNsbeeVwuM54yxF23lAUPThOZStnOdq8-Es,19890
|
|
54
|
+
openadapt_ml/ingest/__init__.py,sha256=P1Z9-rEBZC8wviMlmu6Fgc-R_83Ku7scVDs5YRejMVE,1481
|
|
55
|
+
openadapt_ml/ingest/capture.py,sha256=hiUTbvGGF90KMUNof-z58azywNcHi-xJxQwHYIRb_4Q,10342
|
|
56
|
+
openadapt_ml/ingest/loader.py,sha256=T3gE4EP-SYXmpeOFCK-VCku1lvzfa6AbPJ5hMBDdAVc,9866
|
|
57
|
+
openadapt_ml/ingest/synthetic.py,sha256=ZX3eoMS08fpCFas07kYKUIMb7Bkp1zsaI9Bnuhis-I8,40482
|
|
58
|
+
openadapt_ml/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
|
+
openadapt_ml/models/api_adapter.py,sha256=G7S847hmYl6AQ8_4oTP5aMV4YhYBN_k-Sj3RVo1w9Bs,6679
|
|
60
|
+
openadapt_ml/models/base_adapter.py,sha256=vvasd-WhFxQNc2utqnXC_YMHABouXXNF4SwK9CUxpOc,2113
|
|
61
|
+
openadapt_ml/models/dummy_adapter.py,sha256=h4Zu-rjWgtG1r8jRtcsrX-FZm8iImrhrTQ7TsLfjE8A,1581
|
|
62
|
+
openadapt_ml/models/qwen_vl.py,sha256=0QcYqTraUMzT6W6No5aomeat9aUxpRqHai9aCX9-6dM,17652
|
|
63
|
+
openadapt_ml/models/providers/__init__.py,sha256=SBd4ZDSi3tYf7DBxTUOFw66Qr15idjuk45TM0bGAKOQ,8216
|
|
64
|
+
openadapt_ml/models/providers/anthropic.py,sha256=iUZceqn4yrD0s0FlMhgcENze4_AgJJ5u8du_1Ke7qy8,8348
|
|
65
|
+
openadapt_ml/models/providers/base.py,sha256=iGVEYSdzP9w3WRE7LM_vbG9ESXWKoJ5qSLx-ZB2ZcOw,8178
|
|
66
|
+
openadapt_ml/models/providers/google.py,sha256=OGXTaQwWonPy-3kLrBC8wLgIQytPtPDQiDkVqsUf70Y,12081
|
|
67
|
+
openadapt_ml/models/providers/openai.py,sha256=1LJJoWxkVNouowebs_N7iI4i8iSCHAjKvPOSAovC3p0,10487
|
|
68
|
+
openadapt_ml/perception/__init__.py,sha256=goR5qA_O7jvO8-gK5XPwib9TsqYfWIbljcmXao8mzRw,847
|
|
69
|
+
openadapt_ml/perception/integration.py,sha256=F9X4ysYn2RdFN6Wh3rXt5kl-cq0tf_6KdFViz2lAAnA,13296
|
|
70
|
+
openadapt_ml/retrieval/README.md,sha256=j4gXhTo6yH-5cuw4ER4174V-U6TQakOVT6Hj4kj7B0I,5696
|
|
71
|
+
openadapt_ml/retrieval/USAGE.md,sha256=XDIrX-94Z5nC-wvnBY5yF5gTqUYixxCC3wwUFvQx5YM,9278
|
|
72
|
+
openadapt_ml/retrieval/__init__.py,sha256=xocb84riKLUCezUioKssFRhAQsnvexh4W932o368_qg,2726
|
|
73
|
+
openadapt_ml/retrieval/demo_retriever.py,sha256=C4pLZ0HaJGkZ9H3_pQdeQcaQOOAU_YzGukx79WaFyZI,29493
|
|
74
|
+
openadapt_ml/retrieval/embeddings.py,sha256=B2tQq4VwN166H-P3s1kvOrhVlLvi4SAfXsMoxhXV8HE,19239
|
|
75
|
+
openadapt_ml/retrieval/index.py,sha256=UBFnSxp5T5eKt2txFcd0FytKCw1qxONZfxnFJVrduRQ,5710
|
|
76
|
+
openadapt_ml/retrieval/retriever.py,sha256=nDWeVLpfsHWWp2TE9dI_w56FebKI5bNXZPsh79BiQos,4609
|
|
77
|
+
openadapt_ml/runtime/__init__.py,sha256=Lpu29HgUvAVPW_dkRHRkk18BeMHlwZD-gQ3dZYNGzGo,1294
|
|
78
|
+
openadapt_ml/runtime/policy.py,sha256=RUB4AqObz-1FPpEZNQ-XUsmxro2RkgTJDAztzM2B_oE,6839
|
|
79
|
+
openadapt_ml/runtime/safety_gate.py,sha256=qODkdgx4HB2t-NL_iGPQbDZ_9hR2SZso_nTQ6KuMSfo,16729
|
|
80
|
+
openadapt_ml/schema/__init__.py,sha256=bL6Mi0z-qBV3cw-rfEaVP-sfzzZOvywO0H9IPWtSdN8,3097
|
|
81
|
+
openadapt_ml/schema/converters.py,sha256=ftXPNngd27PkALQyqukMsGpHdpB2sWBOlVz69rGyNkM,19157
|
|
82
|
+
openadapt_ml/schema/episode.py,sha256=2WFCdnIkcCRodvJiR6irmBaGhKzMB5XEQzS6iQJk2gY,15501
|
|
83
|
+
openadapt_ml/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
84
|
+
openadapt_ml/scripts/capture_screenshots.py,sha256=qVxMuIBuH8jT035tQqjfqLRm6OkLhwRvoGBooPGm09E,15283
|
|
85
|
+
openadapt_ml/scripts/compare.py,sha256=rPe_fQrHyINCbqkO9FXtjRsbQGwzlppEnmCK5YfGjgg,57316
|
|
86
|
+
openadapt_ml/scripts/demo_policy.py,sha256=luALfaJhPIh5aFHXdubSMCzPJk04dNzwfdwcCJeNhUk,2120
|
|
87
|
+
openadapt_ml/scripts/eval_policy.py,sha256=DHfQOIyO-mvrsA_zzlVEVwfsX1mLedFVsYvEpgITB5k,10397
|
|
88
|
+
openadapt_ml/scripts/make_gif.py,sha256=fg6jX2BwW4CIVLfWvq3WHjDE5H7tbRYnhZOHSIxhGWo,4433
|
|
89
|
+
openadapt_ml/scripts/prepare_synthetic.py,sha256=2luW436IejDDR2re73yUhtF5Zjf9McAqi2I0z4zs_CE,1123
|
|
90
|
+
openadapt_ml/scripts/run_qwen_login_benchmark.py,sha256=NWIhCAFSX5pYKFRCec7RkrYtzvz2LNMqhDfXcKxlagM,5655
|
|
91
|
+
openadapt_ml/scripts/train.py,sha256=1clpSt07fiMl1sMW57DO5Gco6LV8Oz2_SNGyiwRqcrQ,6759
|
|
92
|
+
openadapt_ml/segmentation/README.md,sha256=lBb3bkOh5Je2Ba_3MMuhB0QUeY44zLROA_S5JTbf7So,26055
|
|
93
|
+
openadapt_ml/segmentation/__init__.py,sha256=iodD7_Is5oLZm4oZttQd_CnLDofzRGbIhkCV1sgBjEU,2567
|
|
94
|
+
openadapt_ml/segmentation/annotator.py,sha256=d50yyxk3HTY1vP_-WXl5aLdmFk3EkdmoMiTqlkIsL78,21648
|
|
95
|
+
openadapt_ml/segmentation/cache.py,sha256=--1M4aoDdWOUYPBIfEnPdNkn9kfoECESs9JwNq5B_NQ,8696
|
|
96
|
+
openadapt_ml/segmentation/cli.py,sha256=L3YbxqTKAE797RYoZj5mxB9s50F7onAnGjbp4GbN-1M,24187
|
|
97
|
+
openadapt_ml/segmentation/deduplicator.py,sha256=aniwrp9IpcrMKfZh6Rx0Ihj_pu_4LepU_RT_eYiRGHI,22826
|
|
98
|
+
openadapt_ml/segmentation/frame_describer.py,sha256=LhgrdEsQ_tMQE7GiwECXWVY0WozEC6Z1Pr8CRTqtINI,26963
|
|
99
|
+
openadapt_ml/segmentation/pipeline.py,sha256=3ztfKt8xZ011xGL5rIIW6dmOyfJp7Af32XdgXuN-QYc,11890
|
|
100
|
+
openadapt_ml/segmentation/schemas.py,sha256=HKf5ImcXRpjM1hB6vJ825OJjUF5QDA5ITSJwcZklscM,19989
|
|
101
|
+
openadapt_ml/segmentation/segment_extractor.py,sha256=R2fI-sD5JsDE9Y3o4o9rpmldrq-TkRsmGrUJEg413vY,22213
|
|
102
|
+
openadapt_ml/segmentation/adapters/__init__.py,sha256=QOLlVvzjmZJP0fhtEZ4yXCvnJSNbWHZP8pV56Zs_5e4,171
|
|
103
|
+
openadapt_ml/segmentation/adapters/capture_adapter.py,sha256=8QDe9pyiRr3e2xuvvYowlNgBsz-NI3xepFL1ZFIAeAU,14353
|
|
104
|
+
openadapt_ml/training/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
|
+
openadapt_ml/training/azure_ops_viewer.py,sha256=B_Tlye1Z86xdTwc99nGtPqQzcJoDYOU4n7bQI0L-D0E,37679
|
|
106
|
+
openadapt_ml/training/benchmark_viewer.py,sha256=CVQa7c3rts_-a-xarwZ9EneR2i0G0n66f4RiK6wKcjg,174367
|
|
107
|
+
openadapt_ml/training/shared_ui.py,sha256=Ghjpx02k_HuZsyyOnZo6LD08ZIHD5ze7fU4centDMNY,4823
|
|
108
|
+
openadapt_ml/training/stub_provider.py,sha256=wyK4ApK88CCzgjZGl0jkNUrUfuSY-axA_XZMYzeeUpg,10932
|
|
109
|
+
openadapt_ml/training/trainer.py,sha256=yGK79alY9Z0xGRQ2r9EaiWbzGlmE5WZJQL_2TWgc8jU,91358
|
|
110
|
+
openadapt_ml/training/trl_trainer.py,sha256=AL1KFWXMub4vWE2w8eoAoQbSgm2fXO82CIqXULLYwVo,13223
|
|
111
|
+
openadapt_ml/training/viewer.py,sha256=rXpREFbDK_tsu719VUej6iXrgnB8eNP0SEuvB9NUUhA,128104
|
|
112
|
+
openadapt_ml/training/viewer_components.py,sha256=XilaX7r4YXFMT1QkooNnPWqR14SpsiTf7YbrN_g-Lq0,5478
|
|
113
|
+
openadapt_ml-0.2.2.dist-info/METADATA,sha256=XNDolFy-sWkfPPCZ36qFRUwKzMRLk9WhzLMVufPp8i8,36696
|
|
114
|
+
openadapt_ml-0.2.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
115
|
+
openadapt_ml-0.2.2.dist-info/licenses/LICENSE,sha256=2E5UY67RVLedJuNnwGudkAMtfM3LZNUcHgmaL89TAfw,1068
|
|
116
|
+
openadapt_ml-0.2.2.dist-info/RECORD,,
|