# Raw baseline (NO UI_SPEC / NO Megamind / NO refinement) — Dec 31, 2025
#
# Purpose:
# - "No pipeline at all" baseline: system prompt + task prompt → code (no planner UI_SPEC).
# - Still runs build → render → deterministic gates (axe + Lighthouse) so we can compare
# true shippable rates against the full pipeline (with refinement loop enabled).
#
# Run (5-task validation while iterating):
# .venv/bin/python -m titan_factory.cli run \
# --max-tasks 5 --run-id raw-baseline-validate-5 \
# -c config/config-raw-baseline-dec31.yaml
#
# Run (25-task baseline):
# .venv/bin/python -m titan_factory.cli run \
# --max-tasks 25 --run-id raw-baseline-25 \
# -c config/config-raw-baseline-dec31.yaml
models:
# Planner is unused in raw mode, but must be present for config schema.
planner:
provider: vertex
model: deepseek-ai/deepseek-v3.2-maas
publishable: true
max_tokens: 500
temperature: 0.0
# 2 generators × 1 variant = 2 candidates per task
ui_generators:
- provider: vertex
model: moonshotai/kimi-k2-thinking-maas
publishable: true
variants: 1
max_tokens: 65000
temperature: 0.7
- provider: vertex
model: minimaxai/minimax-m2-maas
publishable: true
variants: 1
max_tokens: 65000
temperature: 0.7
# Patcher is disabled via pipeline.max_fix_rounds=0, but must be present for config schema.
patcher:
provider: vertex
model: qwen/qwen3-coder-480b-a35b-instruct-maas
publishable: true
max_tokens: 9000
temperature: 0.2
# Vision judge is not used (skip_judge=true), but broken gate uses it if enabled.
vision_judge:
provider: gemini
model: gemini-3-flash
publishable: false
max_tokens: 800
temperature: 0.0
force_adc: true
pipeline:
# Raw mode: bypass UI_SPEC planning
raw_generation_enabled: true
# Accept-all mode: no scoring/refinement/selection by aesthetics
skip_judge: true
generate_edit_tasks: false
task_prompt_pack: mixed
# Use the same stacked system prompt as production runs.
uigen_prompt_variants:
- id: stacked_all
input_mode: page_brief
parts:
- source: file
path: prompts/titan_ui_system_long.txt
- source: inline
text: |
GLOBAL OVERRIDES (APPLY EVEN IF OTHER PROMPTS CONFLICT):
- Output must be STRICT: <think>...</think> followed by ONE valid JSON object.
- No emojis in any text. If an icon is needed, use simple inline SVG (keep icons minimal).
- Follow the provided brand accent exactly; do not default to violet/purple.
- Follow the Creative risk dial; avoid boring/generic layouts; keep UX clear and build-safe.
# Deterministic gates on
deterministic_gates_enabled: true
deterministic_gates_enforce: false
axe_gate_enabled: true
axe_fail_impacts: ["critical"]
axe_timeout_ms: 60000
lighthouse_gate_enabled: true
lighthouse_preset: desktop
lighthouse_timeout_ms: 240000
lighthouse_min_scores:
accessibility: 0.80
performance: 0.00
best_practices: 0.00
seo: 0.00
# Blank page killer (now works even when skip_judge=false, but keep enabled here too)
broken_vision_gate_enabled: true
broken_vision_gate_min_confidence: 0.85
# Disable expensive/creative loops for baseline purity
megamind_enabled: false
refinement_enabled: false
creative_director_mode: false
polish_loop_enabled: false
creativity_refinement_enabled: false
# Baseline is "no planning/judge/refinement", but we still allow a minimal
# build-fix loop so pages reliably render for evaluation/portals.
max_fix_rounds: 1
model_timeout_ms: 150000
build_timeout_ms: 240000
render_timeout_ms: 120000
budget:
task_concurrency: 2
concurrency_vertex: 10
concurrency_gemini: 1
concurrency_build: 2
concurrency_render: 2
requests_per_min_vertex: 60
max_total_tasks: null
stop_after_usd: null
export:
holdout_niches: 0
validation_split: 0.0
holdout_niche_ids: []
gcs:
bucket: null
prefix: titan-factory-outputs
upload_interval_tasks: 50
vertex:
endpoint_template: "https://{region}-aiplatform.googleapis.com/v1/projects/{project}/locations/{region}/endpoints/openapi/chat/completions"