{% extends "base.html" %} {% block title %}understudy - {{ run_id }}{% endblock %} {% block content %}

{{ metadata.scene_id }} {% if metadata.passed %} PASS {% else %} FAIL {% endif %}

{{ metadata.turn_count }}
Turns
{{ metadata.tools_called|length }}
Tool Calls
{{ metadata.agents_invoked|length }}
Agents
{{ metadata.terminal_state or "none" }}
Terminal State
{% if trace.metrics and trace.metrics.turns %}
Performance Metrics
{{ trace.metrics.total_tokens }}
Total Tokens
{{ "%.1f"|format(trace.metrics.agent_time_ms / 1000) }}s
Total Agent Time
{{ "%.0f"|format(trace.metrics.avg_turn_latency_ms) }}ms
Avg Turn Latency
{{ trace.metrics.total_input_tokens }} / {{ trace.metrics.total_output_tokens }}
Input / Output Tokens
{% for turn_metric in trace.metrics.turns %} {% endfor %}
Turn Role Input Tokens Output Tokens Thinking Tokens Latency
{{ loop.index }} {{ trace.turns[loop.index0].role if loop.index0 < trace.turns|length else '-' }} {{ turn_metric.input_tokens }} {{ turn_metric.output_tokens }} {{ turn_metric.thinking_tokens or 0 }} {{ turn_metric.latency_ms }}ms
{% endif %} {% if metadata.tags %}
Tags: {% for key, value in metadata.tags.items() %} {{ key }}={{ value }} {% endfor %}
{% endif %} {% if scene %}
Scene

Description: {{ scene.description }}

Starting Prompt: {{ scene.starting_prompt }}

Persona: {{ scene.persona.description }}

Conversation Plan
{{ scene.conversation_plan }}
{% endif %} {% if check %}
Expectations {% if check.passed %} All Passed {% else %} {{ check.checks|selectattr('passed', 'false')|list|length }} Failed {% endif %}
{% endif %} {% if judges %}
Judge Results
{% for name, result in judges.items() %} {% endfor %}
Rubric Score Agreement Reasoning
{{ name }} {% if result.score == 1 %} PASS {% else %} FAIL {% endif %} {{ "%.0f"|format((result.agreement_rate or 0) * 100) }}% {{ result.reasoning or "-" }}
{% endif %} {% if trace.agent_transfers %}
Agent Transfers
{% for transfer in trace.agent_transfers %}
{{ transfer.from_agent }}{{ transfer.to_agent }} {% if transfer.timestamp %} {{ transfer.timestamp }} {% endif %}
{% endfor %}
{% endif %}
Conversation Timeline
{% for turn in trace.turns %}
{% if turn.agent_name %}{{ turn.agent_name }}{% else %}{{ turn.role }}{% endif %} {% if turn.timestamp %} {{ turn.timestamp.strftime('%H:%M:%S') if turn.timestamp.strftime else turn.timestamp }} {% endif %}
{{ turn.content }}
{% for call in turn.tool_calls %}
▶ {{ call.tool_name }} {% if call.agent_name %}({{ call.agent_name }}){% endif %}
Arguments: {{ call.arguments | tojson(indent=2) }}
{% if call.result %}
Result: {{ call.result | tojson(indent=2) if call.result is mapping else call.result }}
{% endif %} {% if call.error %}
Error: {{ call.error }}
{% endif %}
{% endfor %}
{% endfor %}
{% if scene.context %}
Context (World State)
{{ scene.context | tojson(indent=2) }}
{% endif %}

← Back to Runs

{% endblock %}