#!/bin/bash # resolve_run_ids.sh —— SFT/EVAL runDic 单一可信来源 # # 规则(与 program.md §756 对齐): # SFT_RUNDIC = workflow5/ 下「已落盘」(含 metric_diff/lark_template.json)的最大 runDic # = 当轮 eval 自身的 workflow id(因为 resolve 在 eval 落盘后调用) # augment 落盘、SFT yaml、modified_samples 归档全用这个值 # EVAL_RUNDIC = SFT_RUNDIC + 1 # 仅下一轮 cml workflow run 提交时使用 # # 用法: # eval "$(./scripts/resolve_run_ids.sh)" # echo "$SFT_RUNDIC $EVAL_RUNDIC" # # 失败行为:找不到任何已落盘 workflow 时打 ERR 到 stderr 并 exit 1,调用方 set -e 时直接终止。 set -euo pipefail WF_ROOT=${WF_ROOT:-/mnt/xiaoai-zk-model-train-tj5/workflow5} if [ ! -d "$WF_ROOT" ]; then echo "ERR: WF_ROOT=$WF_ROOT 不存在或不可读" >&2 exit 1 fi # 只挑「已落盘」的 workflow:必须存在 metric_diff/lark_template.json # 这样可以避免 CML 创建了空目录就被算成最大值 MAX=$( for d in "$WF_ROOT"/workflow*; do [ -d "$d" ] || continue [ -f "$d/metric_diff/lark_template.json" ] || continue name=$(basename "$d") echo "${name#workflow}" done | sort -n | tail -1 ) if [ -z "$MAX" ]; then echo "ERR: $WF_ROOT 下没有任何已落盘的 workflow(含 metric_diff/lark_template.json)" >&2 exit 1 fi echo "SFT_RUNDIC=$MAX" echo "EVAL_RUNDIC=$((MAX+1))"