{% extends "base.html" %} {% block title %}Ops Hub — LLMOps · MLOps · AIOps{% endblock %} {% block extra_css %} {% endblock %} {% block content %}

⚙️ Ops Hub

Unified LLMOps · MLOps · AIOps — {{ classification }}

{% set score = overview.health_score|default(0) %} {% set s_class = 'score-healthy' if score >= 80 else ('score-degraded' if score >= 50 else 'score-critical') %}
{{ score }}
Health Score
{{ overview.overall_status|default('unknown')|upper }}
{% set wf_canvas_id = "ohc" %} {% set wf_context_label = '' %} {% include 'includes/workflow_trigger_btn.html' %}
{% for domain_key, domain_data in overview.domains.items() %} {% set d_status = domain_data.get('status','unknown') if domain_data else 'unknown' %} {% set d_dot = 'dot-healthy' if d_status == 'healthy' else ('dot-degraded' if d_status == 'degraded' else ('dot-critical' if d_status == 'critical' else 'dot-unknown')) %}
{% if domain_key == 'llmops' %}
🤖

LLMOps

Gateway · Cost · Drift · Prompts · Evals

{% elif domain_key == 'mlops' %}
🧪

MLOps

Experiments · Model Registry · Data Drift

{% else %}
🚨

AIOps

SLOs · Incidents · Runbooks · Topology

{% endif %}
{{ d_status|upper }}
{% if domain_key == 'llmops' %}
Drift: {{ '⚠️ Yes' if domain_data.get('has_drift') else '✓ None' }}  |  Cost alert: {{ '⚠️ Yes' if domain_data.get('has_cost_anomaly') else '✓ None' }}
{% elif domain_key == 'mlops' %}
Experiments: {{ domain_data.get('active_experiments',0) }}  |  Running: {{ domain_data.get('running_runs',0) }}  |  In prod: {{ domain_data.get('models_in_production',0) }}
{% else %}
Open incidents: {{ domain_data.get('open_incidents',0) }}  |  SPOFs: {{ domain_data.get('spof_count',0) }}  |  Degraded SLOs: {{ domain_data.get('degraded_slos',0) }}
{% endif %}
{% endfor %}
{% if overview.top_alerts %}
Active Alerts
{% for alert in overview.top_alerts %}
{{ '🔴' if alert.severity == 'error' else '🟡' }} [{{ alert.domain|upper }}] {{ alert.message }}
{% endfor %}
{% endif %}
Adapters
{{ overview.available_adapters|length }} / {{ overview.adapters|length }} available
{% for adapter in overview.adapters %}
{{ '✓' if adapter.available else '✗' }} {{ adapter.adapter_name }}
{{ adapter.domain }}
{% if adapter.available %}
{{ adapter.latency_ms }}ms
{% elif adapter.error %}
unavailable
{% endif %}
{% endfor %}
{% include "includes/iqe_query_widget.html" %} {% endblock %}