Bedrock Model Usage Statistics

Model: {{ model_id }}

Region: {{ region }}

Generated: {{ timestamp }}

{% if quotas.tpm or quotas.rpm or quotas.tpd or quotas.concurrent %}

Quota Limits

{% if quotas.tpm %}

TPM (Tokens Per Minute): {{ "{:,.0f}".format(quotas.tpm.value) }}
[{{ quotas.tpm.code }}] {{ quotas.tpm.name }}

{% endif %} {% if quotas.rpm %}

RPM (Requests Per Minute): {{ "{:,.0f}".format(quotas.rpm.value) }}
[{{ quotas.rpm.code }}] {{ quotas.rpm.name }}

{% endif %} {% if quotas.tpd %}

TPD (Tokens Per Day): {{ "{:,.0f}".format(quotas.tpd.value) }}
[{{ quotas.tpd.code }}] {{ quotas.tpd.name }}

{% endif %} {% if quotas.concurrent %}

Concurrent Requests: {{ "{:,.0f}".format(quotas.concurrent.value) }}
[{{ quotas.concurrent.code }}] {{ quotas.concurrent.name }}

{% endif %}

IMPORTANT: These quotas (and those on the charts) were intelligently mapped with large language model. It is always good to crosscheck with AWS service quotas

{% endif %}

⚠️ Important: Understanding Token-Based Throttling

Low TPM/TPD values in this report do not rule out token-based throttling. Bedrock reserves input_tokens + max_tokens from your quota at request start, but CloudWatch only records actual tokens used after completion. If max_tokens is set high (e.g., 64K) but actual output is low, you may hit throttling limits that are invisible in these metrics. To diagnose, check your max_tokens settings and enable model invocation logging. See How tokens are counted in Amazon Bedrock for details.

Statistics Summary

Note: Numbers are rounded to the nearest integer

{# Table 1: Original Metrics #} {% for period in ['1hour', '1day', '7days', '14days', '30days'] %} {% endfor %} {% set metrics = ['InputTokenCount', 'OutputTokenCount', 'Invocations', 'InvocationThrottles', 'InvocationClientErrors', 'InvocationServerErrors', 'InvocationLatency'] %} {% set stats = ['P50', 'P90', 'Average', 'Total', 'Data Points'] %} {% set metrics_with_total = ['InputTokenCount', 'OutputTokenCount', 'Invocations', 'InvocationThrottles', 'InvocationClientErrors', 'InvocationServerErrors'] %} {% for metric in metrics %} {% set row_class = metric.lower().replace('_', '') + '-row' %} {% for stat in stats %} {% if not (stat == 'Total' and metric not in metrics_with_total) %} {% if loop.first %} {% endif %} {% for period in ['1hour', '1day', '7days', '14days', '30days'] %} {% set metric_data = time_periods[period]['__AGGREGATED__'].get(metric, {}) %} {% if stat == 'P50' %} {% elif stat == 'P90' %} {% elif stat == 'Average' %} {% elif stat == 'Total' %} {% elif stat == 'Data Points' %} {% endif %} {% endfor %} {% endif %} {% endfor %} {% endfor %}
Metric Statistic {{ period.upper() }}
{% set granularity_seconds = granularity_config.get(period, 300) %} {% if granularity_seconds == 60 %}1-min data {% elif granularity_seconds == 300 %}5-min data {% elif granularity_seconds == 3600 %}1-hour data {% else %}{{ granularity_seconds }}s data{% endif %}
{{ metric }}
{% if metric == 'InvocationLatency' %} aggregated with AVERAGE (milliseconds) {% else %} aggregated with SUM {% endif %}
{{ stat }}{{ "{:,}".format(metric_data.p50|round|int) if metric_data.p50 is defined else "0" }}{{ "{:,}".format(metric_data.p90|round|int) if metric_data.p90 is defined else "0" }}{{ "{:,}".format(metric_data.avg|round|int) if metric_data.avg is defined else "0" }}{{ "{:,}".format(metric_data.sum|round|int) if metric_data.sum is defined else "0" }}{{ metric_data.count if metric_data.count is defined else 0 }}
{# Table 2: Rate Metrics (TPM, RPM, TPD) - Always 1-min data #} {% for period in ['1hour', '1day', '7days', '14days', '30days'] %} {% endfor %} {% set rate_metrics = ['TPM_1min', 'RPM_1min', 'TPD'] %} {% set rate_metric_labels = {'TPM_1min': 'TPM', 'RPM_1min': 'RPM', 'TPD': 'TPD'} %} {% set stats = ['P50', 'P90', 'Average', 'Data Points'] %} {% for metric in rate_metrics %} {% if metric != 'TPD' or period != '1hour' %} {% set row_class = metric.lower().replace('_', '') + '-row' %} {% for stat in stats %} {% if loop.first %} {% endif %} {% for period in ['1hour', '1day', '7days', '14days', '30days'] %} {% if metric == 'TPD' and period == '1hour' %} {% else %} {% set metric_data = time_periods[period]['__AGGREGATED__'].get(metric, {}) %} {% if stat == 'P50' %} {% elif stat == 'P90' %} {% elif stat == 'Average' %} {% elif stat == 'Data Points' %} {% endif %} {% endif %} {% endfor %} {% endfor %} {% endif %} {% endfor %}
Metric Statistic {{ period.upper() }}
1-min data
{{ rate_metric_labels[metric] }}
{% if metric in ['TPM_1min', 'TPD'] %} derived from token counts {% elif metric == 'RPM_1min' %} derived from invocations {% endif %}
{{ stat }}N/A{{ "{:,}".format(metric_data.p50|round|int) if metric_data.p50 is defined else "0" }}{{ "{:,}".format(metric_data.p90|round|int) if metric_data.p90 is defined else "0" }}{{ "{:,}".format(metric_data.avg|round|int) if metric_data.avg is defined else "0" }}{{ metric_data.count if metric_data.count is defined else 0 }}

Time Series Graphs

{# Row 1: 1hour and 1day side by side #}
TPM (Tokens Per Minute)
{% if contributions.get('1hour') %}
{% for contrib in contributions['1hour'] %} {% endfor %}
Profile Name ID Tags P50 P90 Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.tpm_p50) }} {{ "{:,.0f}".format(contrib.tpm_p90) }} {{ "{:,.0f}".format(contrib.tpm_avg) }}
{% endif %}
RPM (Requests Per Minute)
{% if contributions.get('1hour') %}
{% for contrib in contributions['1hour'] %} {% endfor %}
Profile Name ID Tags P50 P90 Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.rpm_p50) }} {{ "{:,.0f}".format(contrib.rpm_p90) }} {{ "{:,.0f}".format(contrib.rpm_avg) }}
{% endif %}
Invocation Throttles
{% if contributions.get('1hour') %}
{% for contrib in contributions['1hour'] %} {% endfor %}
Profile Name ID Tags Total
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.throttles) }}
{% endif %}
TPM (Tokens Per Minute)
{% if contributions.get('1day') %}
{% for contrib in contributions['1day'] %} {% endfor %}
Profile Name ID Tags P50 P90 Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.tpm_p50) }} {{ "{:,.0f}".format(contrib.tpm_p90) }} {{ "{:,.0f}".format(contrib.tpm_avg) }}
{% endif %}
RPM (Requests Per Minute)
{% if contributions.get('1day') %}
{% for contrib in contributions['1day'] %} {% endfor %}
Profile Name ID Tags P50 P90 Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.rpm_p50) }} {{ "{:,.0f}".format(contrib.rpm_p90) }} {{ "{:,.0f}".format(contrib.rpm_avg) }}
{% endif %}
TPD (Tokens Per Day)
{% if contributions.get('1day') %}
{% for contrib in contributions['1day'] %} {% endfor %}
Profile Name ID Tags P50 P90 Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.tpd_p50) }} {{ "{:,.0f}".format(contrib.tpd_p90) }} {{ "{:,.0f}".format(contrib.tpd_avg) }}
{% endif %}
Invocation Throttles
{% if contributions.get('1day') %}
{% for contrib in contributions['1day'] %} {% endfor %}
Profile Name ID Tags Total
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.throttles) }}
{% endif %}
TPM (Tokens Per Minute)
{% if contributions.get('7days') %}
{% for contrib in contributions['7days'] %} {% endfor %}
Profile NameIDTagsP50P90Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.tpm_p50) }} {{ "{:,.0f}".format(contrib.tpm_p90) }} {{ "{:,.0f}".format(contrib.tpm_avg) }}
{% endif %}
RPM (Requests Per Minute)
{% if contributions.get('7days') %}
{% for contrib in contributions['7days'] %} {% endfor %}
Profile NameIDTagsP50P90Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.rpm_p50) }} {{ "{:,.0f}".format(contrib.rpm_p90) }} {{ "{:,.0f}".format(contrib.rpm_avg) }}
{% endif %}
TPD (Tokens Per Day)
{% if contributions.get('7days') %}
{% for contrib in contributions['7days'] %} {% endfor %}
Profile NameIDTagsP50P90Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.tpd_p50) }} {{ "{:,.0f}".format(contrib.tpd_p90) }} {{ "{:,.0f}".format(contrib.tpd_avg) }}
{% endif %}
Invocation Throttles
{% if contributions.get('7days') %}
{% for contrib in contributions['7days'] %} {% endfor %}
Profile NameIDTagsTotal
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.throttles) }}
{% endif %}
TPM (Tokens Per Minute)
{% if contributions.get('14days') %}
{% for contrib in contributions['14days'] %} {% endfor %}
Profile NameIDTagsP50P90Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.tpm_p50) }} {{ "{:,.0f}".format(contrib.tpm_p90) }} {{ "{:,.0f}".format(contrib.tpm_avg) }}
{% endif %}
RPM (Requests Per Minute)
{% if contributions.get('14days') %}
{% for contrib in contributions['14days'] %} {% endfor %}
Profile NameIDTagsP50P90Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.rpm_p50) }} {{ "{:,.0f}".format(contrib.rpm_p90) }} {{ "{:,.0f}".format(contrib.rpm_avg) }}
{% endif %}
TPD (Tokens Per Day)
{% if contributions.get('14days') %}
{% for contrib in contributions['14days'] %} {% endfor %}
Profile NameIDTagsP50P90Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.tpd_p50) }} {{ "{:,.0f}".format(contrib.tpd_p90) }} {{ "{:,.0f}".format(contrib.tpd_avg) }}
{% endif %}
Invocation Throttles
{% if contributions.get('14days') %}
{% for contrib in contributions['14days'] %} {% endfor %}
Profile NameIDTagsTotal
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.throttles) }}
{% endif %}
TPM (Tokens Per Minute)
{% if contributions.get('30days') %}
{% for contrib in contributions['30days'] %} {% endfor %}
Profile NameIDTagsP50P90Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.tpm_p50) }} {{ "{:,.0f}".format(contrib.tpm_p90) }} {{ "{:,.0f}".format(contrib.tpm_avg) }}
{% endif %}
RPM (Requests Per Minute)
{% if contributions.get('30days') %}
{% for contrib in contributions['30days'] %} {% endfor %}
Profile NameIDTagsP50P90Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.rpm_p50) }} {{ "{:,.0f}".format(contrib.rpm_p90) }} {{ "{:,.0f}".format(contrib.rpm_avg) }}
{% endif %}
TPD (Tokens Per Day)
{% if contributions.get('30days') %}
{% for contrib in contributions['30days'] %} {% endfor %}
Profile NameIDTagsP50P90Average
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.tpd_p50) }} {{ "{:,.0f}".format(contrib.tpd_p90) }} {{ "{:,.0f}".format(contrib.tpd_avg) }}
{% endif %}
Invocation Throttles
{% if contributions.get('30days') %}
{% for contrib in contributions['30days'] %} {% endfor %}
Profile NameIDTagsTotal
{{ contrib.profile_name }} {{ contrib.profile_arn_id }} {% if contrib.profile_tags %}{% for key, value in contrib.profile_tags.items() %}{{ key }}={{ value }}
{% endfor %}{% else %}N/A{% endif %}
{{ "{:,.0f}".format(contrib.throttles) }}
{% endif %}