{% extends "base.html" %} {% block title %}Models — Agent Wasp{% endblock %} {% block page_css %} {% endblock %} {% block content %} {# ── Provider brand registry ──────────────────────────────────────────────── #} {% set PROV = { "openai": {"color":"#10a37f","label":"OAI","desc":"GPT-5.4 · o3 · GPT-4o", "icon":"dark/openai"}, "anthropic": {"color":"#D4581A","label":"ANT","desc":"Claude 4 · Claude 3.5", "icon":"light/claude-color"}, "google": {"color":"#4285F4","label":"GGL","desc":"Gemini 3 · 2.5 · 2.0", "icon":"light/gemini-color"}, "xai": {"color":"#BBBBBB","label":"xAI","desc":"Grok 4 · Grok 2", "icon":"dark/grok"}, "mistral": {"color":"#FF7000","label":"MST","desc":"Mistral · Magistral · Code", "icon":"light/mistral-color"}, "deepseek": {"color":"#5B6CF6","label":"DSK","desc":"DeepSeek R1 · V3", "icon":"light/deepseek-color"}, "openrouter": {"color":"#9B59B6","label":"OR", "desc":"100+ models", "icon":"dark/openrouter"}, "perplexity": {"color":"#20B2AA","label":"PPX","desc":"Sonar Pro · Reasoning", "icon":"light/perplexity-color"}, "huggingface": {"color":"#FFD21E","label":"HF", "desc":"Open source models", "icon":"light/huggingface-color"}, "lmstudio": {"color":"#8B5CF6","label":"LMS","desc":"Local (LM Studio)", "icon":""}, "ollama": {"color":"#6EE7B7","label":"OLM","desc":"Local inference", "icon":"dark/ollama"}, "moonshot": {"color":"#6366F1","label":"KIM","desc":"Kimi K2 · Moonshot", "icon":"dark/moonshot"}, } %} {# ── Lobe icons base ──────────────────────────────────────────────────────── #} {% set ICON_BASE = "https://raw.githubusercontent.com/lobehub/lobe-icons/refs/heads/master/packages/static-png/" %} {# ── Active provider meta ─────────────────────────────────────────────────── #} {% set ap = PROV.get(status.active_provider, {"color":"#6B7280","label":"?","desc":"Unknown","icon":""}) %}

Models & Providers

{{ installed|length }} models · {{ status.providers|length }} active provider{{ 's' if status.providers|length != 1 }}

{% if ap.icon %} {{ status.active_provider }} {{ ap.label }} {% else %} {{ ap.label }} {% endif %}
{{ status.active_model or "No model active" }} {% if status.active_model == default_model %} ★ default {% endif %}
{{ status.active_provider or "—" }} · {{ ap.desc }}
{% if status.fallback_order|length > 1 %}
fallback: {% for fb in status.fallback_order %} {% set fbc = PROV.get(fb, {"color":"#6B7280","label":fb,"icon":""}) %}
{% if fbc.icon %} {{ fb }} {% endif %} {{ fb }}
{% if not loop.last %}{% endif %} {% endfor %}
{% endif %}
{{ installed|length }}
models
{{ status.providers|length }}
providers
{% if installed %}

Installed Models {{ installed|length }}

{% for m in installed %} {% set mp = PROV.get(m.provider, {"color":"#6B7280","label":(m.provider[:3].upper() if m.provider else "?"),"icon":""}) %} {% if m.provider == "ollama" %} {% else %} {% endif %} {% endfor %}
Model Size Status Active Default Uninstall
{% if mp.icon %} {{ m.provider }} {{ mp.label }} {% else %} {{ mp.label }} {% endif %}
{{ m.name }} {% if m.is_default %}{% endif %}
{% if m.size %} {{ m.size }} {% else %} cloud {% endif %} {% if m.active %} Active {% else %} Idle {% endif %}
{% endif %} {% if ollama_available %} {% set olm = PROV.get("ollama") %}

ollama OLM
Ollama — Local Models {% if ollama_healthy %} running {% else %} offline {% endif %} installed {{ ollama_installed|length if ollama_installed else 0 }}{% if ollama_total_size %} · {{ ollama_total_size }}{% endif %} available {{ catalog|length }}

{% if ollama_healthy %} {% endif %}
{% if not ollama_healthy %}

Ollama service is not running

Local models let the agent run inference on this machine without sending data to a cloud API. Disk usage: ~4–8 GB per model; RAM: ≥8 GB recommended.

To enable, run on the host:

echo 'COMPOSE_PROFILES=local-llm' >> /opt/wasp/.env && cd /opt/wasp && docker compose up -d agent-ollama

After Ollama starts, refresh this page — the "Install Models" button will appear.

{% endif %} {% if ollama_installed %}
{% for m in ollama_installed %} {% endfor %}
Model Size Status Active Uninstall
{{ m.name }} {% if m.size %} {{ m.size }} {% else %} {% endif %} {% if m.active %} Active {% else %} Idle {% endif %}
{% else %}

No models installed yet. Use the catalog below to download one.

{% endif %}
{% endif %}
All Providers
{% for p in provider_info %} {% set meta = PROV.get(p.name, {"color":"#6B7280","label":p.name[:3].upper(),"desc":"Provider","icon":""}) %}
{% if meta.icon %} {{ p.name }} {{ meta.label }} {% else %} {{ meta.label }} {% endif %}
{{ p.name }} {% if not p.configured %} not set {% elif p.healthy %} ok {% else %} unreachable {% endif %}
{% if p.configured and p.masked_key %}{{ p.masked_key }}{% else %}{{ meta.desc }}{% endif %}
{% if p.models %}
{% for m in p.models %} {{ m }} {% endfor %}
{% endif %}
{% if p.configured %} {% else %} {% endif %}
{% endfor %}
{% endblock %} {% block extra_scripts %} {% endblock %}