rexprun 0.1.66__tar.gz

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 (112) hide show
  1. rexprun-0.1.66/LICENSE +22 -0
  2. rexprun-0.1.66/MANIFEST.in +10 -0
  3. rexprun-0.1.66/PKG-INFO +121 -0
  4. rexprun-0.1.66/README.md +86 -0
  5. rexprun-0.1.66/pyproject.toml +59 -0
  6. rexprun-0.1.66/rexp/__init__.py +6 -0
  7. rexprun-0.1.66/rexp/__main__.py +29 -0
  8. rexprun-0.1.66/rexp/cli/__init__.py +2 -0
  9. rexprun-0.1.66/rexp/cli/main.py +1487 -0
  10. rexprun-0.1.66/rexp/cli/templates/ascend_smoke/README.md +23 -0
  11. rexprun-0.1.66/rexp/cli/templates/ascend_smoke/configs/smoke.yaml +16 -0
  12. rexprun-0.1.66/rexp/cli/templates/ascend_smoke/experiment/experiment.py +50 -0
  13. rexprun-0.1.66/rexp/cli/templates/default/README.md +62 -0
  14. rexprun-0.1.66/rexp/cli/templates/default/analysis/analyze.py +25 -0
  15. rexprun-0.1.66/rexp/cli/templates/default/configs/full.yaml +23 -0
  16. rexprun-0.1.66/rexp/cli/templates/default/configs/smoke.yaml +23 -0
  17. rexprun-0.1.66/rexp/cli/templates/default/evaluation/summarize.py +14 -0
  18. rexprun-0.1.66/rexp/cli/templates/default/experiment/README.md +28 -0
  19. rexprun-0.1.66/rexp/cli/templates/default/experiment/experiment.py +60 -0
  20. rexprun-0.1.66/rexp/cli/templates/default/experiment/experiment_helpers.py +34 -0
  21. rexprun-0.1.66/rexp/cli/templates/default/tests/test_experiment.py +17 -0
  22. rexprun-0.1.66/rexp/cli/templates/dlm_kv_staleness/README.md +27 -0
  23. rexprun-0.1.66/rexp/cli/templates/dlm_kv_staleness/configs/full.yaml +36 -0
  24. rexprun-0.1.66/rexp/cli/templates/dlm_kv_staleness/configs/smoke.yaml +36 -0
  25. rexprun-0.1.66/rexp/cli/templates/dlm_kv_staleness/evaluation/kv_error.py +10 -0
  26. rexprun-0.1.66/rexp/cli/templates/dlm_kv_staleness/experiment/kv_staleness.py +56 -0
  27. rexprun-0.1.66/rexp/cli/templates/ray_tune/README.md +41 -0
  28. rexprun-0.1.66/rexp/cli/templates/ray_tune/configs/smoke.yaml +27 -0
  29. rexprun-0.1.66/rexp/cli/templates/ray_tune/experiment/trainable.py +25 -0
  30. rexprun-0.1.66/rexp/core/__init__.py +2 -0
  31. rexprun-0.1.66/rexp/core/accelerators.py +64 -0
  32. rexprun-0.1.66/rexp/core/conda.py +35 -0
  33. rexprun-0.1.66/rexp/core/config.py +87 -0
  34. rexprun-0.1.66/rexp/core/machine.py +60 -0
  35. rexprun-0.1.66/rexp/core/paths.py +141 -0
  36. rexprun-0.1.66/rexp/core/process.py +76 -0
  37. rexprun-0.1.66/rexp/core/provenance.py +165 -0
  38. rexprun-0.1.66/rexp/core/resources.py +24 -0
  39. rexprun-0.1.66/rexp/core/run_lock.py +38 -0
  40. rexprun-0.1.66/rexp/core/schemas.py +220 -0
  41. rexprun-0.1.66/rexp/core/state_store.py +586 -0
  42. rexprun-0.1.66/rexp/core/states.py +38 -0
  43. rexprun-0.1.66/rexp/core/storage.py +161 -0
  44. rexprun-0.1.66/rexp/core/tuning.py +89 -0
  45. rexprun-0.1.66/rexp/datasets/__init__.py +6 -0
  46. rexprun-0.1.66/rexp/datasets/base.py +45 -0
  47. rexprun-0.1.66/rexp/datasets/huggingface.py +56 -0
  48. rexprun-0.1.66/rexp/datasets/local_jsonl.py +52 -0
  49. rexprun-0.1.66/rexp/docs/schemas.md +392 -0
  50. rexprun-0.1.66/rexp/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +592 -0
  51. rexprun-0.1.66/rexp/models/__init__.py +13 -0
  52. rexprun-0.1.66/rexp/models/base.py +69 -0
  53. rexprun-0.1.66/rexp/models/dream.py +17 -0
  54. rexprun-0.1.66/rexp/models/llada.py +59 -0
  55. rexprun-0.1.66/rexp/server/__init__.py +1 -0
  56. rexprun-0.1.66/rexp/server/analysis.py +19 -0
  57. rexprun-0.1.66/rexp/server/assets.py +494 -0
  58. rexprun-0.1.66/rexp/server/dependencies.py +196 -0
  59. rexprun-0.1.66/rexp/server/envprobe.py +100 -0
  60. rexprun-0.1.66/rexp/server/evaluation.py +26 -0
  61. rexprun-0.1.66/rexp/server/mcp.py +264 -0
  62. rexprun-0.1.66/rexp/server/node.py +177 -0
  63. rexprun-0.1.66/rexp/server/run_cleanup.py +143 -0
  64. rexprun-0.1.66/rexp/server/runner.py +198 -0
  65. rexprun-0.1.66/rexp/server/scheduler.py +693 -0
  66. rexprun-0.1.66/rexp/server/script_execution.py +66 -0
  67. rexprun-0.1.66/rexp/server/script_worker.py +35 -0
  68. rexprun-0.1.66/rexp/server/services.py +757 -0
  69. rexprun-0.1.66/rexp/server/setup.py +46 -0
  70. rexprun-0.1.66/rexp/server/trial_queue.py +47 -0
  71. rexprun-0.1.66/rexp/server/tuning.py +415 -0
  72. rexprun-0.1.66/rexp/skills/experiment-authoring/SKILL.md +453 -0
  73. rexprun-0.1.66/rexp/skills/platform-operations/SKILL.md +457 -0
  74. rexprun-0.1.66/rexp/version.py +1 -0
  75. rexprun-0.1.66/rexprun.egg-info/PKG-INFO +121 -0
  76. rexprun-0.1.66/rexprun.egg-info/SOURCES.txt +110 -0
  77. rexprun-0.1.66/rexprun.egg-info/dependency_links.txt +1 -0
  78. rexprun-0.1.66/rexprun.egg-info/entry_points.txt +2 -0
  79. rexprun-0.1.66/rexprun.egg-info/requires.txt +24 -0
  80. rexprun-0.1.66/rexprun.egg-info/top_level.txt +1 -0
  81. rexprun-0.1.66/setup.cfg +4 -0
  82. rexprun-0.1.66/tests/test_adapters.py +20 -0
  83. rexprun-0.1.66/tests/test_ascend.py +205 -0
  84. rexprun-0.1.66/tests/test_assets.py +289 -0
  85. rexprun-0.1.66/tests/test_bundled_resources.py +17 -0
  86. rexprun-0.1.66/tests/test_cli.py +249 -0
  87. rexprun-0.1.66/tests/test_command_audit.py +148 -0
  88. rexprun-0.1.66/tests/test_crash_recovery.py +44 -0
  89. rexprun-0.1.66/tests/test_env_selection.py +112 -0
  90. rexprun-0.1.66/tests/test_environment_catalog.py +149 -0
  91. rexprun-0.1.66/tests/test_experiment_loading.py +106 -0
  92. rexprun-0.1.66/tests/test_initial_setup.py +80 -0
  93. rexprun-0.1.66/tests/test_lifecycle.py +73 -0
  94. rexprun-0.1.66/tests/test_network_config.py +96 -0
  95. rexprun-0.1.66/tests/test_pause_resume.py +41 -0
  96. rexprun-0.1.66/tests/test_platform_info.py +194 -0
  97. rexprun-0.1.66/tests/test_plugin_interfaces.py +206 -0
  98. rexprun-0.1.66/tests/test_process_linux.py +62 -0
  99. rexprun-0.1.66/tests/test_project_deps.py +80 -0
  100. rexprun-0.1.66/tests/test_research_catalog.py +101 -0
  101. rexprun-0.1.66/tests/test_retry.py +65 -0
  102. rexprun-0.1.66/tests/test_run_cleanup.py +174 -0
  103. rexprun-0.1.66/tests/test_run_metadata.py +54 -0
  104. rexprun-0.1.66/tests/test_runs_limit.py +75 -0
  105. rexprun-0.1.66/tests/test_scheduler_checks.py +108 -0
  106. rexprun-0.1.66/tests/test_scheduler_gpu.py +214 -0
  107. rexprun-0.1.66/tests/test_script_environment.py +60 -0
  108. rexprun-0.1.66/tests/test_skills_bundled.py +47 -0
  109. rexprun-0.1.66/tests/test_startup_resume.py +114 -0
  110. rexprun-0.1.66/tests/test_storage.py +45 -0
  111. rexprun-0.1.66/tests/test_trial_queue.py +177 -0
  112. rexprun-0.1.66/tests/test_tuning.py +334 -0
rexprun-0.1.66/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 REXP contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1,10 @@
1
+ # Exclude personal/private documents from published distributions
2
+ exclude 提示词.md
3
+ exclude docs/环境问题记录.md
4
+ exclude .codex
5
+ exclude .agents
6
+
7
+ # Exclude caches and build leftovers from sdists
8
+ global-exclude __pycache__ *.py[cod]
9
+ recursive-exclude * __pycache__
10
+ exclude HANDOFF.md
@@ -0,0 +1,121 @@
1
+ Metadata-Version: 2.4
2
+ Name: rexprun
3
+ Version: 0.1.66
4
+ Summary: Research Experiment Platform: a recoverable, reproducible experiment worker with SSH MCP integration.
5
+ Author: REXP contributors
6
+ License: MIT
7
+ Keywords: research,experiment,scheduler,mcp,agent,dlm
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Operating System :: OS Independent
10
+ Requires-Python: >=3.10
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: PyYAML>=6.0
14
+ Requires-Dist: pydantic>=2.0
15
+ Requires-Dist: typer>=0.12
16
+ Requires-Dist: rich>=13.0
17
+ Requires-Dist: mcp<2,>=1.0
18
+ Requires-Dist: packaging>=24
19
+ Provides-Extra: tune
20
+ Requires-Dist: ray[tune]<3,>=2.40; extra == "tune"
21
+ Requires-Dist: optuna<5,>=4; extra == "tune"
22
+ Provides-Extra: research
23
+ Requires-Dist: numpy; extra == "research"
24
+ Requires-Dist: torch; extra == "research"
25
+ Requires-Dist: transformers; extra == "research"
26
+ Requires-Dist: accelerate; extra == "research"
27
+ Requires-Dist: datasets; extra == "research"
28
+ Requires-Dist: huggingface_hub; extra == "research"
29
+ Requires-Dist: safetensors; extra == "research"
30
+ Requires-Dist: einops; extra == "research"
31
+ Requires-Dist: tqdm; extra == "research"
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest; extra == "dev"
34
+ Dynamic: license-file
35
+
36
+ # Research Experiment Platform (REXP)
37
+
38
+ REXP 是单节点、离线优先的实验 worker,负责项目、队列、调度、运行、检查点、评测、分析和结果存储。实验数据集中放在用户明确指定的 `PLATFORM_ROOT`。实验脚本由控制端准备,通过 SSH MCP 上传。
39
+
40
+ ## 本分支:Handfree SSH MCP 控制端
41
+
42
+ Handfree SSH MCP 选择目标主机,REXP 插件通过同一条 SSH 连接调用该主机的 `rexp`,通过 SFTP 上传项目和取回结果。插件中的 `platformRoot` 是固定的数据根目录,`rexpPath` 是该主机的 `rexp` 程序位置;没有独立的 REXP 客户端包或 `rexp client` 命令。多台 SSH 主机沿用 Handfree 的 `connectionName`,各主机的路径保存在私人插件 registry 的 `connections.<SSH别名>` 中。
43
+
44
+ 详见 [SSH MCP 接入说明](docs/ssh-mcp-integration.md) 和 [Agent 接入指南](docs/agent-mcp.md)。
45
+
46
+ ## 被控端安装
47
+
48
+ ```bash
49
+ pip install rexprun
50
+ rexp init --root /绝对路径/平台根目录 --yes
51
+ rexp node env add py312 --conda-env py312
52
+ rexp doctor
53
+ rexp node env list
54
+ ```
55
+
56
+ `pip install` 会在所选 Python 环境注册 `rexp` 指令。平台运行环境无需 PyTorch;实验使用的 Python、PyTorch 和 CUDA 由 `rexp node env` 登记与检测。GPU 实验在配置里写 `environment: py312` 等已登记的环境名。
57
+
58
+ ## 运行实验
59
+
60
+ ```bash
61
+ rexp project create demo --version v1
62
+ rexp submit demo v1 --config /绝对路径/平台根目录/research/demo/v1/configs/smoke.yaml
63
+ rexp start # 前台运行调度器
64
+ rexp status
65
+ rexp queue
66
+ rexp runs
67
+ rexp run show run_001
68
+ rexp run logs run_001
69
+ rexp run eval run_001
70
+ rexp run analyze run_001
71
+ ```
72
+
73
+ 控制端通过通用 `plugin-list` / `plugin-activate` / `plugin-skill` 发现插件并获取当前版本说明,
74
+ 然后用 `plugin-run` 执行 rexp 命令(args 不含 rexp)。上传项目和取回结果使用 SSH MCP 原有
75
+ SFTP 工具;传输前先查询平台事实,确认固定根目录。
76
+
77
+ ## 服务端接口
78
+
79
+ - `rexp`:被控端本地命令,Handfree 插件通过 SSH 调用。
80
+ - `rexp mcp`:服务端本机的原生 MCP stdio 接口。
81
+
82
+ 完整命令见 [使用说明书](docs/使用说明书.md),配置与数据结构见 [架构](docs/architecture.md) 和 [Schema](docs/schemas.md)。
83
+
84
+ ## 昇腾 NPU(初步适配,待真卡验证)
85
+
86
+ 支持读取 Linux `npu-smi` 整卡拓扑、检查实验环境的 `torch_npu` 能力,并按运行时逻辑卡号分卡。
87
+ 实验配置增加 `resources.accelerator_backend: npu`;原 `gpu_count` / `min_vram_gb`
88
+ 字段在 NPU 节点代表 NPU 数量 / 每卡显存,保留名称以兼容已有配置。
89
+ 平台不自动安装驱动、CANN 或转换 CUDA 实验代码。实验自身需兼容昇腾 PyTorch。
90
+
91
+ 用 `rexp project create ascend_check --version v1 --template ascend_smoke` 创建不下载模型的
92
+ 真卡数值测试;详见生成项目的 README。当前本地测试验证探测解析与调度,不能代替真卡计算验证。
93
+
94
+ ## 可选 Ray Tune 搜索
95
+
96
+ 支持用一个平台 run 管理一轮参数搜索,父任务预留资源,内部 trial 分别运行。
97
+ `rexp project create search_demo --template ray_tune` 获取 CPU 示例,实验环境需安装 `rexprun[tune]`。
98
+ 通过普通 `rexp submit` 提交,`rexp tune list` / `rexp tune show run_XXX` 查看结果。
99
+ 支持 Random/Grid、Optuna TPE、FIFO/ASHA 与多目标 Pareto;GPU 搜索当前仅 CUDA。
100
+ 完整预算、显卡分配、暂停恢复与存储约定见 [使用说明书](docs/使用说明书.md) 的 Ray Tune 章节。
101
+
102
+ ## CLI 命名(0.1.66 起)
103
+
104
+ 全局入口统一为 `rexp`;源码目录或指定解释器也可使用 `python -m rexp`。
105
+ 按下方步骤迁移后只提供新入口,不再提供旧命令别名。发行包名为 `rexprun`,Python 导入名仍为 `rexp`。
106
+ SSH 插件使用 `rexpPath` 指向 Linux/macOS 的 `bin/rexp` 或 Windows 的 `Scripts/rexp.exe`。
107
+ 修改命令名不改变平台根目录、`~/.rexp` 配置、环境注册或实验记录。
108
+
109
+ ## 从旧测试包迁移
110
+
111
+ 正式发行包名为 `rexprun`;`rexp-server` 是旧 TestPyPI 包。两者提供同一个 `rexp` Python 模块,
112
+ 不要在同一环境中同时保留。正式包发布后,在平台所用 Python 环境先下载新版,再卸载旧包并安装:
113
+
114
+ ```bash
115
+ python -m pip download --no-deps --dest /已确认的安装包目录 'rexprun==0.1.66'
116
+ python -m pip uninstall rexp-server
117
+ python -m pip install /已确认的安装包目录/rexprun-0.1.66-py3-none-any.whl
118
+ rexp version
119
+ ```
120
+
121
+ 迁移前确认实验与调度器已停止;保留原平台根目录和实验环境,无需重新初始化。
@@ -0,0 +1,86 @@
1
+ # Research Experiment Platform (REXP)
2
+
3
+ REXP 是单节点、离线优先的实验 worker,负责项目、队列、调度、运行、检查点、评测、分析和结果存储。实验数据集中放在用户明确指定的 `PLATFORM_ROOT`。实验脚本由控制端准备,通过 SSH MCP 上传。
4
+
5
+ ## 本分支:Handfree SSH MCP 控制端
6
+
7
+ Handfree SSH MCP 选择目标主机,REXP 插件通过同一条 SSH 连接调用该主机的 `rexp`,通过 SFTP 上传项目和取回结果。插件中的 `platformRoot` 是固定的数据根目录,`rexpPath` 是该主机的 `rexp` 程序位置;没有独立的 REXP 客户端包或 `rexp client` 命令。多台 SSH 主机沿用 Handfree 的 `connectionName`,各主机的路径保存在私人插件 registry 的 `connections.<SSH别名>` 中。
8
+
9
+ 详见 [SSH MCP 接入说明](docs/ssh-mcp-integration.md) 和 [Agent 接入指南](docs/agent-mcp.md)。
10
+
11
+ ## 被控端安装
12
+
13
+ ```bash
14
+ pip install rexprun
15
+ rexp init --root /绝对路径/平台根目录 --yes
16
+ rexp node env add py312 --conda-env py312
17
+ rexp doctor
18
+ rexp node env list
19
+ ```
20
+
21
+ `pip install` 会在所选 Python 环境注册 `rexp` 指令。平台运行环境无需 PyTorch;实验使用的 Python、PyTorch 和 CUDA 由 `rexp node env` 登记与检测。GPU 实验在配置里写 `environment: py312` 等已登记的环境名。
22
+
23
+ ## 运行实验
24
+
25
+ ```bash
26
+ rexp project create demo --version v1
27
+ rexp submit demo v1 --config /绝对路径/平台根目录/research/demo/v1/configs/smoke.yaml
28
+ rexp start # 前台运行调度器
29
+ rexp status
30
+ rexp queue
31
+ rexp runs
32
+ rexp run show run_001
33
+ rexp run logs run_001
34
+ rexp run eval run_001
35
+ rexp run analyze run_001
36
+ ```
37
+
38
+ 控制端通过通用 `plugin-list` / `plugin-activate` / `plugin-skill` 发现插件并获取当前版本说明,
39
+ 然后用 `plugin-run` 执行 rexp 命令(args 不含 rexp)。上传项目和取回结果使用 SSH MCP 原有
40
+ SFTP 工具;传输前先查询平台事实,确认固定根目录。
41
+
42
+ ## 服务端接口
43
+
44
+ - `rexp`:被控端本地命令,Handfree 插件通过 SSH 调用。
45
+ - `rexp mcp`:服务端本机的原生 MCP stdio 接口。
46
+
47
+ 完整命令见 [使用说明书](docs/使用说明书.md),配置与数据结构见 [架构](docs/architecture.md) 和 [Schema](docs/schemas.md)。
48
+
49
+ ## 昇腾 NPU(初步适配,待真卡验证)
50
+
51
+ 支持读取 Linux `npu-smi` 整卡拓扑、检查实验环境的 `torch_npu` 能力,并按运行时逻辑卡号分卡。
52
+ 实验配置增加 `resources.accelerator_backend: npu`;原 `gpu_count` / `min_vram_gb`
53
+ 字段在 NPU 节点代表 NPU 数量 / 每卡显存,保留名称以兼容已有配置。
54
+ 平台不自动安装驱动、CANN 或转换 CUDA 实验代码。实验自身需兼容昇腾 PyTorch。
55
+
56
+ 用 `rexp project create ascend_check --version v1 --template ascend_smoke` 创建不下载模型的
57
+ 真卡数值测试;详见生成项目的 README。当前本地测试验证探测解析与调度,不能代替真卡计算验证。
58
+
59
+ ## 可选 Ray Tune 搜索
60
+
61
+ 支持用一个平台 run 管理一轮参数搜索,父任务预留资源,内部 trial 分别运行。
62
+ `rexp project create search_demo --template ray_tune` 获取 CPU 示例,实验环境需安装 `rexprun[tune]`。
63
+ 通过普通 `rexp submit` 提交,`rexp tune list` / `rexp tune show run_XXX` 查看结果。
64
+ 支持 Random/Grid、Optuna TPE、FIFO/ASHA 与多目标 Pareto;GPU 搜索当前仅 CUDA。
65
+ 完整预算、显卡分配、暂停恢复与存储约定见 [使用说明书](docs/使用说明书.md) 的 Ray Tune 章节。
66
+
67
+ ## CLI 命名(0.1.66 起)
68
+
69
+ 全局入口统一为 `rexp`;源码目录或指定解释器也可使用 `python -m rexp`。
70
+ 按下方步骤迁移后只提供新入口,不再提供旧命令别名。发行包名为 `rexprun`,Python 导入名仍为 `rexp`。
71
+ SSH 插件使用 `rexpPath` 指向 Linux/macOS 的 `bin/rexp` 或 Windows 的 `Scripts/rexp.exe`。
72
+ 修改命令名不改变平台根目录、`~/.rexp` 配置、环境注册或实验记录。
73
+
74
+ ## 从旧测试包迁移
75
+
76
+ 正式发行包名为 `rexprun`;`rexp-server` 是旧 TestPyPI 包。两者提供同一个 `rexp` Python 模块,
77
+ 不要在同一环境中同时保留。正式包发布后,在平台所用 Python 环境先下载新版,再卸载旧包并安装:
78
+
79
+ ```bash
80
+ python -m pip download --no-deps --dest /已确认的安装包目录 'rexprun==0.1.66'
81
+ python -m pip uninstall rexp-server
82
+ python -m pip install /已确认的安装包目录/rexprun-0.1.66-py3-none-any.whl
83
+ rexp version
84
+ ```
85
+
86
+ 迁移前确认实验与调度器已停止;保留原平台根目录和实验环境,无需重新初始化。
@@ -0,0 +1,59 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "rexprun"
7
+ version = "0.1.66"
8
+ description = "Research Experiment Platform: a recoverable, reproducible experiment worker with SSH MCP integration."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = {text = "MIT"}
12
+ authors = [{name = "REXP contributors"}]
13
+ keywords = ["research", "experiment", "scheduler", "mcp", "agent", "dlm"]
14
+ classifiers = [
15
+ "Programming Language :: Python :: 3",
16
+ "Operating System :: OS Independent",
17
+ ]
18
+ dependencies = [
19
+ "PyYAML>=6.0",
20
+ "pydantic>=2.0",
21
+ "typer>=0.12",
22
+ "rich>=13.0",
23
+ "mcp>=1.0,<2",
24
+ "packaging>=24",
25
+ ]
26
+
27
+ [project.optional-dependencies]
28
+ tune = ["ray[tune]>=2.40,<3", "optuna>=4,<5"]
29
+ research = [
30
+ "numpy",
31
+ "torch",
32
+ "transformers",
33
+ "accelerate",
34
+ "datasets",
35
+ "huggingface_hub",
36
+ "safetensors",
37
+ "einops",
38
+ "tqdm",
39
+ ]
40
+ dev = ["pytest"]
41
+
42
+ [project.scripts]
43
+ rexp = "rexp.cli.main:main"
44
+
45
+ [tool.setuptools.packages.find]
46
+ include = ["rexp*"]
47
+
48
+ [tool.setuptools.package-data]
49
+ rexp = [
50
+ "cli/templates/**/*.py",
51
+ "cli/templates/**/*.yaml",
52
+ "cli/templates/**/*.md",
53
+ "cli/templates/**/*.txt",
54
+ "skills/**/*.md",
55
+ "docs/*.md",
56
+ ]
57
+
58
+ [tool.pytest.ini_options]
59
+ testpaths = ["tests"]
@@ -0,0 +1,6 @@
1
+ """Research Experiment Platform (REXP) — a personal research experiment platform."""
2
+
3
+ from rexp.version import __version__
4
+
5
+ __all__ = ["__version__"]
6
+
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env python
2
+ """Research Experiment Platform CLI entry point.
3
+
4
+ Usage:
5
+ python -m rexp <command> [options]
6
+
7
+ The interpreter used to run rexp itself needs the platform core dependencies
8
+ (pyyaml, pydantic, typer, rich). Experiments run in whatever environment is
9
+ configured on the node (e.g. llm-platform).
10
+ """
11
+
12
+ try:
13
+ from rexp.cli.main import main
14
+ except ModuleNotFoundError as exc:
15
+ if exc.name in ("typer", "pydantic", "yaml", "rich"):
16
+ print(
17
+ "REXP platform dependencies are missing in this Python environment "
18
+ f"(missing module: {exc.name}).\n"
19
+ "Install them first:\n"
20
+ " python -m pip install pyyaml pydantic typer rich\n"
21
+ "Then run this command again."
22
+ )
23
+ raise SystemExit(1)
24
+ raise
25
+
26
+
27
+ if __name__ == "__main__":
28
+ main()
29
+
@@ -0,0 +1,2 @@
1
+ """CLI package."""
2
+