server: host: 0.0.0.0 port: 8001 workers: 1 rate_limit: 60 llm: providers: bailian-coding: type: openai base_url: https://coding.dashscope.aliyuncs.com/v1 api_key: "${DASHSCOPE_API_KEY}" models: qwen3.7-plus: {alias: default} qwen3-coder-plus: {alias: coding} qwen3-max-2026-01-23: {alias: powerful} qwen-turbo: {alias: fast} deepseek: type: openai base_url: https://api.deepseek.com/v1 api_key: "${DEEPSEEK_API_KEY}" models: deepseek-chat: {alias: chat} deepseek-reasoner: {alias: reasoning} model_aliases: default: bailian-coding/qwen3.7-plus fast: bailian-coding/qwen-turbo powerful: bailian-coding/qwen3-max-2026-01-23 coding: bailian-coding/qwen3-coder-plus chat: deepseek/deepseek-chat reasoning: deepseek/deepseek-reasoner # G4/U1: Auxiliary model for cost-sensitive tasks (summarization). # When set, ContextCompressor tries this alias first, falling back to # the main model on failure or empty content. Commented to preserve # default behavior — uncomment to enable. # auxiliary_model: fast # G9/U4: Rollback configuration. Drives RollbackExecutor subprocess timeout # for PlanPhase.validation_command / PlanPhase.rollback_command. Per-phase # opt-in (KTD6) — when PlanPhase.rollback_command is unset, no rollback runs. # Canonical rollback pattern: `git checkout ` (file-scoped, # not `git checkout .` which would wipe unrelated changes). rollback: default_timeout: 30.0 # G7/U3: Three-tier fallback chain at chat REST send_message. # main → Recovery (ReflexionEngine retry) → Emergency (rule-based classifier). # Wired only at chat REST path (KTD5); CLI / ReWOO / Reflexion internal # ReAct calls bypass the chain (no recursive loop). fallback_chain: enabled: true recovery: enabled: true max_retries: 1 # ReflexionEngine max_reflections override emergency: enabled: true session: {backend: memory} bus: {backend: memory} task_store: {backend: memory} skills: {auto_discover: true, paths: ["./configs/skills"]} experts: {paths: ["./configs/experts"]} board: {max_rounds: 5, default_template: private_board, parallel_speech: true, history_compression_threshold: 20} logging: {level: INFO, format: text} router: {classifier: heuristic, auction_enabled: false}