File size: 5,076 Bytes
5325fcc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
{% extends "base.html" %}
{% block content %}
<h1>Survey #{{signature}}</h1>
{% if success %}
<p class="success"> Your ratings have been saved!
You have been moved to the next random seed, if you want
to keep rating more samples. </p>
{% endif %}
{% if already_filled %}
<p class="warning"> You already rated those samples in the past,
    filling this form will override your previous ratings.
</p>
{% endif %}
<p>Welcome <span class='special'>{{session['user']}}</span> to the survey <span class='special'>#{{signature}}</span>.
Go to <a href="{{url_for('results', signature=signature)}}">the result page</a> to check the results. Go to <a href="{{url_for('index')}}">the home page</a> to start a new survey.
</p>

{% for error in errors %}
<p class="error">{{error}}</p>
{% endfor %}

{% if not blind %}
<p>Base config is: <span class="xp_name">{{ref_name}}</span></p>
<p>The following experiments are compared:</p>
<ul>
    {% for experiment in experiments %}
    <li><span class='special'>{{experiment.xp.sig}}</span> ({{experiment.epoch}} epochs): <span class="xp_name">{{experiment.name}}</span></li>
    {% endfor %}
</ul>
{% else %}
<p>This is a blind experiment, the order of all XPs is shuffled with every sample.</p>
{% endif %}
<p>The current random seed is {{seed}}. You can change it with the following form, and also update blind/non blind.
</p>
<form method="get" action="" class="simple_form">
    <input type="number" name="seed" value="{{seed}}">
    <label>Blind?
    <input type="checkbox" name="blind" {% if blind %} checked {% endif %}> </label>
    <label>Exclude unprompted?
    <input type="checkbox" name="exclude_unprompted" {% if exclude_unprompted %} checked {% endif %}> </label>
    <label>Exclude prompted?
    <input type="checkbox" name="exclude_prompted" {% if exclude_prompted %} checked {% endif %}> </label>
    <label>Max epoch?
    <input type="text" name="max_epoch" value="{{max_epoch}}"> </label>
    <input type="submit" value="Update">
</form>

<h2>Samples</h2>
<div class="survey">
<form method="post" action="{{url_for('survey', signature=signature, blind='true' if blind else 'false', exclude_prompted='true' if exclude_prompted else 'false', exclude_unprompted='true' if exclude_unprompted else 'false', seed=seed, max_epoch=max_epoch)}}" class="simple_form">
{% for id in model_ids %}
    <div class="track">
    <h4>{{id}}</h4>
    {% for model in models_by_id[id] %}
        {% if loop.index == 1 and model.is_prompted %}
            <section class="prompt">
            <p>Prompt is </p>
                <audio controls>
                    <source src="{{url_for('audio', path=model.sample.prompt.path)}}" type="audio/mp3">
                </audio>
            <p>Ground truth is </p>
                <audio controls>
                    <source src="{{url_for('audio', path=model.sample.prompt.ground_truth_path)}}" type="audio/mp3">
                </audio>
            </section>
        {% endif %}
        {% for err in model['errors'] %}
            <p class="error">{{err}}</p>
        {% endfor %}
        <section class="model">
        {% if not blind %}
            <p class="special">{{model.xp.sig}}:</p>
        {% endif %}
        <audio controls>
                <source src="{{url_for('audio', path=model.sample.path)}}" type="audio/mp3">
            Your browser does not support the audio element.
        </audio>
        <p>Rating:</p>
        <section class="ratings" id="ratings-{{model.model_id}}">
            {% for rating in ratings %}
            <span class="rating rating_{{rating}} {% if rating == model.rating %}rating_selected{% endif %}"
                    data-target="{{model.model_id}}" data-rating="{{rating}}" onclick="updateNote(this)">{{rating}}</span>
            {% endfor %}
            <input type="hidden" name="{{model.model_id}}" id="{{model.model_id}}" value="{{model.rating}}">
        </section>
        </p>
        </section>
    {% endfor %}
        </div>
        <hr>
{% endfor %}
    <button type="submit" class="submit-big">
        Submit evaluations
    </button>
<form>
</div>
<script>
function updateNote(node) {
    var target = node.getAttribute('data-target');
    var rating = node.getAttribute('data-rating');
    var field = document.getElementById(target);
    field.value = rating;
    node.classList.add('rating_selected');

    var parent = document.getElementById('ratings-' + target);
    for (const other of parent.childNodes) {
        if (other.tagName === 'SPAN' && other.classList.contains('rating_selected') && other !== node) {
            other.classList.remove('rating_selected');
        }
    }
}

function setupCallback(elem, elems) {
  elem.addEventListener("play", function () {
    for (var other of elems) {
      if (other !== elem) {
        other.pause();
        // other.currentTime = 0.;
      }
    }
  });
}

document.addEventListener('DOMContentLoaded', function () {
  var elems = document.body.getElementsByTagName("audio");
  for (var elem of elems) {
    setupCallback(elem, elems);
  }
});
</script>
{% endblock %}