{% extends "base.html" %} {% block title %}{{ t(request, 'wizard.title') }} — MoE Admin{% endblock %} {% block content %}
{# ── Progress bar ── #} {% set total_steps = 4 %} {% set current_step = step | int %} {% set pct = (current_step / total_steps * 100) | int %}

{{ t(request, 'wizard.title') }}

Step {{ current_step }} of {{ total_steps }}

{# ────────────────────────────────────────────────────────────── #} {# STEP 1 — Welcome #} {# ────────────────────────────────────────────────────────────── #} {% if current_step == 1 %}
{{ t(request, 'wizard.step1.title') }}

{{ t(request, 'wizard.step1.body') }}

What you will need:
  • At least one inference server — Ollama, OpenAI, LiteLLM, vLLM, or any OpenAI-compatible API
  • A Judge model (the merger/synthesizer — can be the same as experts)
  • Optionally, a separate Planner model (for routing decisions)
Ollama (local)
http://host:11434/v1
OpenAI / LiteLLM
https://api.openai.com/v1
vLLM / Custom
Any OpenAI-compatible
{# ────────────────────────────────────────────────────────────── #} {# STEP 2 — Inference Servers #} {# ────────────────────────────────────────────────────────────── #} {% elif current_step == 2 %}
{{ t(request, 'wizard.step2.title') }}

{{ t(request, 'wizard.step2.hint') }}

{% for srv in inference_servers %} {% endfor %} {% if not inference_servers %} {% endif %}
Name URL GPUs API Type API Key / Token
Back
{# ────────────────────────────────────────────────────────────── #} {# STEP 3 — Core Models #} {# ────────────────────────────────────────────────────────────── #} {% elif current_step == 3 %} {% set servers = inference_servers %} {% set judge_model = config.get('JUDGE_MODEL', '') %} {% set judge_endpoint = config.get('JUDGE_ENDPOINT', '') %} {% set planner_model = config.get('PLANNER_MODEL', '') %} {% set planner_endpoint = config.get('PLANNER_ENDPOINT', '') %}
{{ t(request, 'wizard.step3.title') }}

{{ t(request, 'wizard.step3.hint') }}

{% if not servers %}
No inference servers configured yet. Go back and add a server first.
{% endif %}
Judge / Merger Model
The Judge synthesizes all expert results into the final response. Choose your most capable model.
Planner Model optional

The Planner routes requests to the right experts. Leave blank to use the Judge model for planning too.

Back
{{ t(request, 'wizard.btn.skip') }}
{# ────────────────────────────────────────────────────────────── #} {# STEP 4 — Public URLs #} {# ────────────────────────────────────────────────────────────── #} {% elif current_step == 4 %}
{{ t(request, 'wizard.step4.title') }}

{{ t(request, 'wizard.step4.hint') }}

Used in API response links and CORS config.
Back
{{ t(request, 'wizard.btn.skip') }}
{% endif %}
{% endblock %} {% block scripts %} {% endblock %}