#!/bin/bash # 可选:通过 JSON / 环境变量覆盖 `utils.config` 中的配置 # 示例 1:指定 JSON 配置文件(优先级最高) # export S1_DR_CONFIG_JSON="utils/config/config.example.json" # # 示例 2:直接用环境变量覆盖 # export CLIENT_TIMEOUT=7200 # export USE_NLP_FORMAT_RETURN=true # export MY_NEW_FLAG="demo_value" # system prompt 参数 SYSTEM_PROMPT="" # 标准的 9 个工具 system prompt LLM_CLIENT_URLS="http://url:port/v1/chat/completions http://url:port/v1/chat/completions" LLM_CLIENT_MODELS="model_name1 model_name1" TEST_DATA_FILE="test.jsonl" OUTPUT_FILE="test_results.jsonl" # OUTPUT_DIR 仅在 Pass@K(多次 rollout)场景下生效。 # 当 ROLLOUT_NUM=1 时,忽略 OUTPUT_DIR;单次推理结果写入 OUTPUT_FILE 所指定的 jsonl 路径。 # 当 ROLLOUT_NUM≠1 时,忽略 OUTPUT_FILE;在 OUTPUT_DIR 下按 xxx_01.jsonl、xxx_02.jsonl、… 命名保存各次 rollout 结果。 OUTPUT_DIR="" # 启动所有的 9 个工具 AVAILABLE_TOOLS="wide_search scholar_search file_wide_parse execute_code wide_visit ask_question_about_image ask_question_about_video image_search bash" ROLLOUT_NUM=1 RESUME_FROM_FILE="" # LOGGING_ROOT:日志根路径;在其下创建 `logs` 子目录。例如设为 "/app" 时,日志目录为 "/app/logs"。 LOGGING_ROOT="" # LOG_LABEL:日志标签;运行日志写入 `logs/YYYY_MM_DD_/` 子目录(与 LOGGING_ROOT 组合使用时,位于上述 logs 路径之下)。 LOG_LABEL="test" LOG_FILE="run_logs/run.log" # 仅在与附件相关的任务中需调整 TASK_TYPE;其余推理任务可沿用默认值,无需修改该参数。 TASK_TYPE="input_only" MAX_ROUNDS=100 CONCURRENCY_WORKERS=16 SAVE_BATCH_SIZE=10 TEMPERATURE=0.7 TOP_P=0.95 # 额外的 payload 参数(JSON 字符串),透传给模型 API,可按需增减字段 # 不需要额外参数时设为空 JSON:EXTRA_PAYLOAD='{}' EXTRA_PAYLOAD='{"presence_penalty": 0.0}' TIMEOUT_FOR_ONE_QUERY=3600 LLM_API_RETRY_TIMES=2 # discard-all:此处为 false,表示不启用该模式 DISCARD_ALL_MODE="false" MODEL_MAX_CONTEXT_TOKENS=128000 DISCARD_RATIO=0.8 TOKENIZER_PATH="models/tokenizer" PARAM_INFO=$( cat < "$LOG_FILE" # 使用 nohup 在后台启动 Python:标准输出与标准错误追加写入 LOG_FILE;随后将进程 PID 输出至终端,并同步追加至 LOG_FILE。 # 当 TASK_TYPE 为 input_only 时,须在命令行中加入 --clean_files_copy_dir。 if [ "$TASK_TYPE" = "input_only" ]; then nohup python inference/run_batch_inference.py \ --llm_client_urls $LLM_CLIENT_URLS \ --llm_client_models $LLM_CLIENT_MODELS \ --test_data_file "$TEST_DATA_FILE" \ --output_file "$OUTPUT_FILE" \ --output_dir "$OUTPUT_DIR" \ --available_tools $AVAILABLE_TOOLS \ --concurrency_workers $CONCURRENCY_WORKERS \ --save_batch_size $SAVE_BATCH_SIZE \ --rollout_num $ROLLOUT_NUM \ --max_rounds $MAX_ROUNDS \ --temperature $TEMPERATURE \ --top_p $TOP_P \ --extra_payload "$EXTRA_PAYLOAD" \ --timeout_for_one_query $TIMEOUT_FOR_ONE_QUERY \ --llm_api_retry_times $LLM_API_RETRY_TIMES \ --discard_all_mode "$DISCARD_ALL_MODE" \ --model_max_context_tokens $MODEL_MAX_CONTEXT_TOKENS \ --discard_ratio $DISCARD_RATIO \ --tokenizer_path "$TOKENIZER_PATH" \ --resume_from_file "$RESUME_FROM_FILE" \ --log_label "$LOG_LABEL" \ --logging_root "$LOGGING_ROOT" \ --system_prompt "$SYSTEM_PROMPT" \ --verbose \ --clean_files_copy_dir \ >> "$LOG_FILE" 2>&1 & else nohup python inference/run_batch_inference.py \ --llm_client_urls $LLM_CLIENT_URLS \ --llm_client_models $LLM_CLIENT_MODELS \ --test_data_file "$TEST_DATA_FILE" \ --output_file "$OUTPUT_FILE" \ --output_dir "$OUTPUT_DIR" \ --available_tools $AVAILABLE_TOOLS \ --concurrency_workers $CONCURRENCY_WORKERS \ --save_batch_size $SAVE_BATCH_SIZE \ --rollout_num $ROLLOUT_NUM \ --max_rounds $MAX_ROUNDS \ --temperature $TEMPERATURE \ --top_p $TOP_P \ --extra_payload "$EXTRA_PAYLOAD" \ --timeout_for_one_query $TIMEOUT_FOR_ONE_QUERY \ --llm_api_retry_times $LLM_API_RETRY_TIMES \ --discard_all_mode "$DISCARD_ALL_MODE" \ --model_max_context_tokens $MODEL_MAX_CONTEXT_TOKENS \ --discard_ratio $DISCARD_RATIO \ --tokenizer_path "$TOKENIZER_PATH" \ --resume_from_file "$RESUME_FROM_FILE" \ --log_label "$LOG_LABEL" \ --logging_root "$LOGGING_ROOT" \ --system_prompt "$SYSTEM_PROMPT" \ --verbose \ >> "$LOG_FILE" 2>&1 & fi PY_PID=$! echo "Python running as PID: $PY_PID" echo "Python running as PID: $PY_PID" >> "$LOG_FILE"