{% extends "base.html" %} {% block title %}Analytics - AISBF Dashboard{% endblock %} {% macro format_tokens(value) %} {% if value is none or value == 0 %}0{% else %} {% set val = value | float %} {% if val >= 1000000000 %} {{ "%.2f"|format(val / 1000000000) }}B {% elif val >= 1000000 %} {{ "%.2f"|format(val / 1000000) }}M {% elif val >= 1000 %} {{ "%.2f"|format(val / 1000) }}K {% else %} {{ value }} {% endif %} {% endif %} {% endmacro %} {% block content %}

Token Usage Analytics

📊 Analytics 🧠 Prompt Analytics {% if is_config_admin %} 👣 Traffic & Visits {% endif %} 💾 Response Cache ⏱️ Rate Limits

Filter by Date Range

{% if from_date or to_date %}
Selected Range: {% if from_date %}{{ from_date }}{% else %}Beginning{% endif %} to {% if to_date %}{{ to_date }}{% else %}Now{% endif %} {% if date_range_usage %} | Total: {{ format_tokens(date_range_usage.total_tokens) }} tokens | Estimated Cost: {{ currency_symbol }}{{ "%.2f"|format(date_range_usage.estimated_cost) }} {% endif %}
{% endif %}

Filter by Provider, Model, Rotation, Autoselect, or User

{% if from_date %}{% endif %} {% if to_date %}{% endif %}
{% if is_admin %}
{% if available_users|length < 25 %} {% else %}
{% endif %}
{% endif %}
{% if selected_provider or selected_model or selected_rotation or selected_autoselect or selected_user %}
Clear Filters
{% endif %}
{% if selected_provider or selected_model or selected_rotation or selected_autoselect or selected_user %}
Active Filters: {% if selected_provider %}Provider: {{ selected_provider }}{% endif %} {% if selected_model %}{% if selected_provider %} | {% endif %}Model: {{ selected_model }}{% endif %} {% if selected_rotation %}{% if selected_provider or selected_model %} | {% endif %}Rotation: {{ selected_rotation }}{% endif %} {% if selected_autoselect %}{% if selected_provider or selected_model or selected_rotation %} | {% endif %}Autoselect: {{ selected_autoselect }}{% endif %} {% if selected_user %}{% if selected_provider or selected_model or selected_rotation or selected_autoselect %} | {% endif %}User: {% for user in available_users %}{% if user.id == selected_user %}{{ user.username }}{% endif %}{% endfor %}{% endif %}
{% endif %}

Provider Statistics

{% if provider_stats %} {% for provider in provider_stats %} {% endfor %}
Provider Model Rotation Autoselect Total Requests Success Errors Error Rate Avg Latency Input Tokens Output Tokens Total Tokens
{{ provider.provider_id }} {{ provider.model_name or '' }} {{ provider.rotation_id or '' }} {{ provider.autoselect_id or '' }} {{ provider.requests.total }} {{ provider.requests.success }} {{ provider.requests.error }} 0.1 %}style="color: #f87171;"{% endif %}>{{ "%.1f"|format(provider.error_rate * 100) }}% 5000 %}style="color: #fcd34d;"{% endif %}>{% if provider.avg_latency_ms > 1000 %}{{ "%.1f"|format(provider.avg_latency_ms / 1000) }}s{% else %}{{ "%.0f"|format(provider.avg_latency_ms) }}ms{% endif %} {{ format_tokens(provider.tokens.prompt or 0) }} {{ format_tokens(provider.tokens.completion or 0) }} {{ format_tokens(provider.tokens.total or 0) }}
Total {{ provider_stats | sum(attribute='requests.total') }} {{ provider_stats | sum(attribute='requests.success') }} {{ provider_stats | sum(attribute='requests.error') }} {% set total_requests = provider_stats | sum(attribute='requests.total') %} {% set total_errors = provider_stats | sum(attribute='requests.error') %} {% if total_requests > 0 %}{{ "%.1f"|format((total_errors / total_requests) * 100) }}%{% else %}0.0%{% endif %} {% set total_requests = provider_stats | sum(attribute='requests.total') %} {% if total_requests > 0 %} {% set weighted_sum = namespace(value=0) %} {% for provider in provider_stats %} {% set weighted_sum.value = weighted_sum.value + (provider.avg_latency_ms | float * provider.requests.total) %} {% endfor %} {% set avg_latency = weighted_sum.value / total_requests %} {% if avg_latency > 1000 %}{{ "%.1f"|format(avg_latency / 1000) }}s{% else %}{{ "%.0f"|format(avg_latency) }}ms{% endif %} {% else %} N/A {% endif %} {{ format_tokens(provider_stats | sum(attribute='tokens.prompt') or 0) }} {{ format_tokens(provider_stats | sum(attribute='tokens.completion') or 0) }} {{ format_tokens(provider_stats | sum(attribute='tokens.total') or 0) }}
{% else %}

No provider statistics available yet. Make API requests to see analytics.

{% endif %}

Cost Overview

{% if from_date or to_date %}Selected Period Cost{% else %}Today's Estimated Cost{% endif %}

{{ currency_symbol }}{{ "%.2f"|format(cost_overview.total_estimated_cost_today) }}

Combined Savings Estimate

{{ currency_symbol }}{{ "%.2f"|format((optimization_savings.total_cost_saved if optimization_savings else 0) or 0) }}

{% for pc in cost_overview.providers %}

{{ pc.provider_id }}

${{ "%.2f"|format(pc.estimated_cost) }}

{{ format_tokens(pc.tokens_today) }} tokens
{% endfor %}

Optimization Savings

{% if optimization_savings and optimization_savings.total_tokens_saved > 0 %}

Total Tokens Saved

{{ format_tokens(optimization_savings.total_tokens_saved) }}

Total Combined Estimate

${{ "%.2f"|format(optimization_savings.total_cost_saved) }}

Cache / Batching Savings

${{ "%.2f"|format((optimization_savings.direct_feature_savings.cost_saved if optimization_savings else 0) or 0) }}

Free-Tier Equivalent

${{ "%.2f"|format((optimization_savings.free_tier_equivalent_savings.cost_saved if optimization_savings else 0) or 0) }}

The combined estimate includes direct execution savings from response caching and batching plus free-tier/subscription-equivalent avoided cost estimates.

{% else %}

No optimization savings recorded yet. Increase usage on providers with known upstream free tiers, or enable deduplication, condensation, batching, or caching to see savings.

{% endif %}

Model Performance

{% if model_performance %} {% for model in model_performance %} {% endfor %}
Provider Model Type Context Size Condense % Condense Method Tokens/Day Error Rate Avg Latency
{{ model.provider_id }} {{ model.model_name }} {% if model.is_rotation %}Rotation: {{ model.rotation_id }}{% elif model.is_autoselect %}Autoselect: {{ model.autoselect_id }}{% else %}{{ model.provider_type|title }}{% endif %} {{ model.context_size|default('N/A') }} {{ model.condense_context|default('N/A') }}% {{ model.condense_method|default('None') }} {{ format_tokens(model.tokens_per_day) }} 0.1 %}style="color: #f87171;"{% endif %}>{{ "%.1f"|format(model.error_rate * 100) }}% 5000 %}style="color: #fcd34d;"{% endif %}>{% if model.avg_latency_ms > 1000 %}{{ "%.1f"|format(model.avg_latency_ms / 1000) }}s{% else %}{{ "%.0f"|format(model.avg_latency_ms) }}ms{% endif %}
{% else %}

No model performance data available yet.

{% endif %}

Token Usage Over Time

{% if token_over_time != '[]' %}
{% else %}

No token usage data available for the selected period.

{% endif %} {% if rotation_breakdown %}

Rotation Breakdown

{% for rot in rotation_breakdown %}

{{ rot.rotation_id }}

{% for e in rot.entries %} {% endfor %}
ProviderModelRequestsHit %TokensToken %Avg Latency
{{ e.provider_id }} {{ e.model_name or '' }} {{ e.requests }} {{ e.hit_pct }}% {{ format_tokens(e.tokens) }} {{ e.token_pct }}% {% if e.avg_latency_ms > 1000 %}{{ "%.1f"|format(e.avg_latency_ms / 1000) }}s{% else %}{{ "%.0f"|format(e.avg_latency_ms) }}ms{% endif %}
{% endfor %} {% endif %} {% if autoselect_breakdown %}

Autoselect Breakdown

{% for asel in autoselect_breakdown %}

{{ asel.autoselect_id }}

{% for e in asel.entries %} {% endfor %}
Selected Model / RotationRequestsHit %TokensToken %Selection Latency
{{ e.model_name or '(unknown)' }} {{ e.requests }} {{ e.hit_pct }}% {{ format_tokens(e.tokens) }} {{ e.token_pct }}% {% if e.avg_latency_ms > 1000 %}{{ "%.1f"|format(e.avg_latency_ms / 1000) }}s{% else %}{{ "%.0f"|format(e.avg_latency_ms) }}ms{% endif %}
{% endfor %} {% endif %} {% if is_config_admin %}

Analytics Management

These actions permanently delete analytics data from the database and cannot be undone.

{% endif %}
Back to Dashboard Provider Quota Debug {% if is_admin %} Rate Limits Response Cache {% endif %}
{% endblock %}