{% extends "base.html" %} {% block title %}Voxint — synthdetect report {{ run.id.hex[:8] }}{% endblock %} {% block body %}

Synthetic speech detection report

← Back to run {{ run.id.hex[:8] }}

{% if synthdetect_job is none %}

No synthdetect job found for this run.

{% elif synthdetect_job.status != "succeeded" %}

Scoring {{ synthdetect_job.status }}{% if synthdetect_job.error %}: {{ synthdetect_job.error }}{% endif %}

{% else %}

Summary

{% if synthdetect_job.skipped_turns %} {% endif %} {% if synthdetect_job.mean_risk is not none %} {% endif %}
Scored turns{{ synthdetect_job.scored_turns }} of {{ synthdetect_job.total_turns }}
Skipped turns{{ synthdetect_job.skipped_turns }}
Mean risk {{ "%.1f"|format(synthdetect_job.mean_risk * 100) }}%
Max risk {{ "%.1f"|format(synthdetect_job.max_risk * 100) }}%
Calibration policy{{ synthdetect_job.calibration_policy_id }}
Inference space{{ synthdetect_job.inference_space }}
{% if skipped_count > 0 %}

Skipped turns

Skipped turns were not scored. An unscored turn is not the same as a clean turn; the model had insufficient audio to make a determination.

{% endif %} {% if high_risk_scores %}

Highest-risk turns

Turns with the highest calibrated risk scores, descending. Scores are calibrated risk values specific to this model and calibration policy, not portable probabilities.

{% for score in high_risk_scores %} {% endfor %}
Turn Speaker Start End Risk Windows
{{ loop.index }} {{ score.speaker_label or "—" }} {% if score.start_seconds is not none %}{{ "%.1f"|format(score.start_seconds) }}s{% else %}—{% endif %} {% if score.end_seconds is not none %}{{ "%.1f"|format(score.end_seconds) }}s{% else %}—{% endif %} {{ "%.1f"|format(score.calibrated_score * 100) }}% {{ score.window_count }}
{% endif %}

All scored turns

{% for score in all_scores %} {% endfor %}
Speaker Start End Risk Raw logit Windows Skip reason
{{ score.speaker_label or "—" }} {% if score.start_seconds is not none %}{{ "%.1f"|format(score.start_seconds) }}s{% else %}—{% endif %} {% if score.end_seconds is not none %}{{ "%.1f"|format(score.end_seconds) }}s{% else %}—{% endif %} {% if score.calibrated_score is not none %}{{ "%.1f"|format(score.calibrated_score * 100) }}%{% else %}—{% endif %} {% if score.raw_logit is not none %}{{ "%.3f"|format(score.raw_logit) }}{% else %}—{% endif %} {{ score.window_count }} {{ score.skip_reason or "—" }}

Known limitations

{% endif %}
{% endblock %}