ux: onboarding flow prototype

reuse /banners for composer missing-key status

polish onboarding ui; add chat composer API key banner

drop dedicated status backend endpoint
This commit is contained in:
Alessandro 2026-03-27 14:57:08 +01:00
parent 69e177487f
commit 1304195d4c
7 changed files with 680 additions and 41 deletions

View file

@ -7,58 +7,30 @@ class MissingApiKeyCheck(Extension):
"""Check if API keys are configured for selected model providers."""
LOCAL_PROVIDERS = {"ollama", "lm_studio"}
LOCAL_EMBEDDING = {"huggingface"}
CONFIGURE_MODEL_SETTINGS_LINK = (
"""<a href="#" onclick="(async()=>{"""
"""const { store: s } = await import('/components/plugins/plugin-settings-store.js');"""
"""if(s&&s.openConfig){await s.openConfig('_model_config');}"""
"""})();return false;">"""
"""Configure model settings</a>"""
"""<div class="onboarding-banner-btn-container" style="margin-top: 12px;">"""
"""<button class="btn btn-ok" onclick="window.openModal('/plugins/_onboarding/webui/onboarding.html');return false;">"""
"""Start Onboarding</button>"""
"""</div>"""
)
async def execute(self, banners: list = [], frontend_context: dict = {}, **kwargs):
cfg = plugins.get_plugin_config("_model_config") or {}
missing_providers = []
checks = [
("Chat Model", cfg.get("chat_model", {})),
("Utility Model", cfg.get("utility_model", {})),
("Embedding Model", cfg.get("embedding_model", {})),
]
missing_providers = model_config.get_missing_api_key_providers()
for label, model_cfg in checks:
provider = model_cfg.get("provider", "")
if not provider:
continue
provider_lower = provider.lower()
if provider_lower in self.LOCAL_PROVIDERS:
continue
if label == "Embedding Model" and provider_lower in self.LOCAL_EMBEDDING:
continue
if not model_config.has_provider_api_key(
provider_lower,
model_cfg.get("api_key", ""),
):
missing_providers.append({
"model_type": label,
"provider": provider,
})
if missing_providers:
model_list = ", ".join(
f"{p['model_type']} ({p['provider']})" for p in missing_providers
)
banners.append({
"id": "missing-api-key",
"type": "error",
"priority": 100,
"title": "Missing LLM API Key for current settings",
"html": f"""No API key configured for: {model_list}.<br>
Agent Zero will not be able to function properly unless you provide an API key or change your settings.<br>
"title": "Welcome to Agent Zero!",
"html": f"""You're almost ready to chat. Please configure your models to continue.<br>
Insert your API key in the onboarding wizard.
{self.CONFIGURE_MODEL_SETTINGS_LINK}""",
"dismissible": False,
"source": "backend"
"source": "backend",
# For programmatic clients (e.g. chat composer) reusing this banner pipeline
"missing_providers": missing_providers,
})
# Check preset providers for missing API keys (warning level)