Add shared Jupyter defaults for model training lite
This commit is contained in:
@@ -50,13 +50,21 @@ Jupyter 授权环境
|
||||
|
||||
通常用户只需要显式给 `Jupyter 地址` 和 `数据版本`。当前项目的默认训练配方可从本仓库继承,不必每次追问。
|
||||
|
||||
本地默认 Jupyter 配置路径:
|
||||
组内默认 Jupyter 配置路径:
|
||||
|
||||
```text
|
||||
skills/model-training-lite/jupyter_defaults.json
|
||||
```
|
||||
|
||||
这个文件随 skill 提交,组内默认可直接使用。脚本输出只显示认证是否已配置,不回显密码。
|
||||
|
||||
个人覆盖配置路径:
|
||||
|
||||
```text
|
||||
skills/model-training-lite/.local/jupyter_defaults.json
|
||||
```
|
||||
|
||||
`.local/` 已加入 gitignore。真实密码只能放在本地配置或环境变量里,不要写入 `SKILL.md`、README、提交记录或最终回复。
|
||||
`.local/` 已加入 gitignore。需要临时覆盖组内默认配置时,使用 `.local/` 或环境变量,不要改共享配置。
|
||||
|
||||
配置格式可参考:
|
||||
|
||||
@@ -74,6 +82,12 @@ MODEL_TRAINING_LITE_JUPYTER_COOKIE
|
||||
MODEL_TRAINING_LITE_JUPYTER_AUTH_TYPE
|
||||
```
|
||||
|
||||
配置优先级:
|
||||
|
||||
```text
|
||||
脚本输入 > 环境变量 > .local/jupyter_defaults.json > jupyter_defaults.json
|
||||
```
|
||||
|
||||
可选但推荐确认:
|
||||
|
||||
- `owner`:远端输出目录使用的用户前缀,例如 `wuyang6`。
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"jupyter_url": "https://3051226-d-20260511105959-fpmh4-jupyter.ak-cloudml-prod-cloudml.mioffice.cn/lab?",
|
||||
"auth_type": "password",
|
||||
"password": "Wsh04361993315&"
|
||||
}
|
||||
@@ -60,16 +60,22 @@ ai-planning/data/train_set/*/*.jsonl
|
||||
|
||||
## 默认 Jupyter 配置
|
||||
|
||||
本地默认配置文件:
|
||||
组内共享默认配置文件:
|
||||
|
||||
```text
|
||||
skills/model-training-lite/jupyter_defaults.json
|
||||
```
|
||||
|
||||
个人覆盖配置文件:
|
||||
|
||||
```text
|
||||
skills/model-training-lite/.local/jupyter_defaults.json
|
||||
```
|
||||
|
||||
`.local/` 不提交。配置优先级:
|
||||
配置优先级:
|
||||
|
||||
```text
|
||||
脚本输入 > 环境变量 > .local/jupyter_defaults.json
|
||||
脚本输入 > 环境变量 > .local/jupyter_defaults.json > jupyter_defaults.json
|
||||
```
|
||||
|
||||
脚本输出只显示认证是否已配置,不回显密码、token 或 cookie。
|
||||
|
||||
@@ -138,6 +138,17 @@ def clean(value: Any) -> str:
|
||||
|
||||
def load_local_defaults() -> dict[str, Any]:
|
||||
defaults: dict[str, Any] = {}
|
||||
skill_dir = Path(__file__).resolve().parents[1]
|
||||
shared_config_path = skill_dir / "jupyter_defaults.json"
|
||||
if shared_config_path.exists():
|
||||
try:
|
||||
shared_defaults = json.loads(shared_config_path.read_text(encoding="utf-8"))
|
||||
if isinstance(shared_defaults, dict):
|
||||
defaults.update({key: value for key, value in shared_defaults.items() if value})
|
||||
if any(clean(shared_defaults.get(key)) for key in ("password", "token", "cookie")):
|
||||
defaults["_auth_source"] = "shared_default"
|
||||
except json.JSONDecodeError as exc:
|
||||
raise SystemExit(f"invalid shared defaults JSON: {shared_config_path}: {exc}") from exc
|
||||
env_defaults = {
|
||||
"jupyter_url": os.environ.get("MODEL_TRAINING_LITE_JUPYTER_URL"),
|
||||
"password": os.environ.get("MODEL_TRAINING_LITE_JUPYTER_PASSWORD"),
|
||||
@@ -146,12 +157,16 @@ def load_local_defaults() -> dict[str, Any]:
|
||||
"auth_type": os.environ.get("MODEL_TRAINING_LITE_JUPYTER_AUTH_TYPE"),
|
||||
}
|
||||
defaults.update({key: value for key, value in env_defaults.items() if value})
|
||||
config_path = Path(__file__).resolve().parents[1] / ".local" / "jupyter_defaults.json"
|
||||
if any(clean(env_defaults.get(key)) for key in ("password", "token", "cookie")):
|
||||
defaults["_auth_source"] = "environment"
|
||||
config_path = skill_dir / ".local" / "jupyter_defaults.json"
|
||||
if config_path.exists():
|
||||
try:
|
||||
file_defaults = json.loads(config_path.read_text(encoding="utf-8"))
|
||||
if isinstance(file_defaults, dict):
|
||||
defaults.update({key: value for key, value in file_defaults.items() if value})
|
||||
if any(clean(file_defaults.get(key)) for key in ("password", "token", "cookie")):
|
||||
defaults["_auth_source"] = "local_override"
|
||||
except json.JSONDecodeError as exc:
|
||||
raise SystemExit(f"invalid local defaults JSON: {config_path}: {exc}") from exc
|
||||
return defaults
|
||||
@@ -161,7 +176,7 @@ def auth_source(payload: dict[str, Any], defaults: dict[str, Any]) -> str:
|
||||
if any(clean(payload.get(key)) for key in ("jupyter_password", "password", "jupyter_token", "token", "jupyter_cookie")):
|
||||
return "input"
|
||||
if any(clean(defaults.get(key)) for key in ("password", "token", "cookie")):
|
||||
return "local_default"
|
||||
return clean(defaults.get("_auth_source")) or "default"
|
||||
return ""
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user