Files
ARTEX/bench/entrypoint_v2.sh
T
Autumn-27 4c42c70a84 feat(bench): 起题前按 host 清旧资产防跨题污染 + 提示词补 CTF 场景/深挖引导 + v2 基准脚手架
- scheduler: create_task 前调 delete_assets_by_host,清复用 IP 上旧题残留(级联删 service/endpoint)
- planner/worker prompt: 标注 CTF 场景;planner 补否定结论时的深挖自省
- kali_tools: 补预装 python 库说明 + 无网/找命令提示
- server/goals.go: 抽 launchTask 统一 seed+种子意图+异步目标分解
- 新增 v2 基准: Dockerfile.bench.v2 / entrypoint_v2.sh / seed_v2.sh / tec_benchmark_v2.md
2026-08-13 12:24:38 -04:00

68 lines
3.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# ARTEX benchmark 容器入口 v2:起 Postgres → 起 artex → 健康检查 → seed_v2 → 起 scheduler.py 编排。
# 与 v1(entrypoint.sh) 的差异:
# - seed 用 seed_v2.sh(不建 tec_benchmark 编排 agent、保留 challenge_review)。
# - seed 完成后**后台拉起 bench/scheduler.py**(确定性算法编排),替代原来的编排 agent 触发器循环。
# 全部密钥从运行时环境变量读取,不落包内。
set -u
log() { echo "[entrypoint-v2] $*"; }
# ---------- 环境变量默认值 ----------
export ADMIN_PASSWORD="${ADMIN_PASSWORD:-artexbench}"
export LLM_MODEL="${LLM_MODEL:-deepseek-v4-flash}"
export LLM_FORMAT="${LLM_FORMAT:-openai}"
# BENCHMARK_TOKEN / BENCHMARK_BASE_URL 由平台自动注入(本地测在 bench/.env 里填)。
API="http://127.0.0.1:8787"
DATA_DIR="${ARTEX_DATA_DIR:-/app/data}"
# ---------- 1) 启动 Postgres ----------
PGVER="$(ls /etc/postgresql 2>/dev/null | sort -V | tail -1)"
if [ -z "$PGVER" ]; then log "找不到 PostgreSQL 集群"; exit 1; fi
PGHBA="/etc/postgresql/$PGVER/main/pg_hba.conf"
grep -q "127.0.0.1/32 trust" "$PGHBA" || echo "host all all 127.0.0.1/32 trust" >> "$PGHBA"
log "启动 PostgreSQL $PGVER ..."
pg_ctlcluster "$PGVER" main start || service postgresql start
for i in $(seq 1 30); do su postgres -c "pg_isready -q" && break; sleep 1; done
su postgres -c "psql -tAc \"SELECT 1 FROM pg_roles WHERE rolname='artex'\"" | grep -q 1 \
|| su postgres -c "psql -c \"CREATE ROLE artex LOGIN SUPERUSER PASSWORD 'artex'\""
su postgres -c "psql -tAc \"SELECT 1 FROM pg_database WHERE datname='artex'\"" | grep -q 1 \
|| su postgres -c "createdb -O artex artex"
export ARTEX_PG_DSN="postgres://artex:[email protected]:5432/artex?sslmode=disable"
# ---------- 2) 启动 artex(后台) ----------
log "启动 artex ..."
/app/artex -addr :8787 -proxy :8788 &
ARTEX_PID=$!
# ---------- 3) 等健康 ----------
log "等待 artex /api/health ..."
for i in $(seq 1 60); do
code=$(curl -s -o /dev/null -w '%{http_code}' "$API/api/health" || true)
[ "$code" = "200" ] && { log "artex 就绪"; break; }
if ! kill -0 "$ARTEX_PID" 2>/dev/null; then log "artex 进程退出"; exit 1; fi
sleep 1
done
# ---------- 4) seed 配置(v2) ----------
API="$API" /app/bench/seed_v2.sh || log "seed_v2 出现非致命错误(见上)"
# ---------- 5) 起 scheduler.py 确定性编排(后台) ----------
# scheduler.py 只依赖 Python 标准库;VPN 未连通时它会自行检测并退出(提示重连后重启)。
# 可选:seed_v2 已把 plan profile id 落盘,用它给硬题任务 pin 强模型。
if [ -f "$DATA_DIR/plan_profile_id" ]; then
export PLAN_PROFILE_ID="$(cat "$DATA_DIR/plan_profile_id" 2>/dev/null)"
log "scheduler 将用 PLAN_PROFILE_ID=$PLAN_PROFILE_ID 给硬题 pin 强模型"
fi
export ARTEX_API="${ARTEX_API:-$API}"
export EVENTS_CSV="${EVENTS_CSV:-$DATA_DIR/scheduler-events.csv}"
log "启动 scheduler.py 编排(事件写入 $EVENTS_CSV)..."
python3 /app/bench/scheduler.py &
SCHED_PID=$!
# ---------- 6) 保活 ----------
log "seed_v2 + scheduler 已启动,容器持续运行。artex_pid=$ARTEX_PID scheduler_pid=$SCHED_PID"
wait "$ARTEX_PID"