Spaces:
Runtime error
Runtime error
carolanderson
commited on
Merge branch 'main' into docker-hf
Browse files- .github/workflows/sync_fork.yml +19 -0
- indie_label_svelte/public/img/anderson.jpeg +0 -0
- indie_label_svelte/public/img/blili_hamelin.jpeg +0 -0
- indie_label_svelte/public/img/butters.jpeg +0 -0
- indie_label_svelte/public/img/landay.jpeg +0 -0
- indie_label_svelte/public/img/pan.jpg +0 -0
- indie_label_svelte/public/index.html +9 -0
- indie_label_svelte/src/About.svelte +116 -25
- indie_label_svelte/src/Auditing.svelte +0 -3
- indie_label_svelte/src/ClusterResults.svelte +4 -4
- indie_label_svelte/src/HypothesisPanel.svelte +9 -8
- indie_label_svelte/src/MainPanel.svelte +4 -2
- indie_label_svelte/src/ModelPerf.svelte +1 -1
- indie_label_svelte/src/OverallResults.svelte +1 -1
.github/workflows/sync_fork.yml
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Sync Fork
|
2 |
+
|
3 |
+
on:
|
4 |
+
schedule:
|
5 |
+
- cron: '0,30 * * * *'
|
6 |
+
workflow_dispatch: # on button click
|
7 |
+
|
8 |
+
|
9 |
+
jobs:
|
10 |
+
build:
|
11 |
+
runs-on: ubuntu-latest
|
12 |
+
steps:
|
13 |
+
- name: GitHub Sync to Upstream Repository
|
14 |
+
uses: rovast/[email protected]
|
15 |
+
with:
|
16 |
+
upstream_repo: https://github.com/StanfordHCI/indie-label.git
|
17 |
+
upstream_branch: main
|
18 |
+
downstream_branch: docker-hf
|
19 |
+
token: ${{ secrets.WORKFLOW_TOKEN }}
|
indie_label_svelte/public/img/anderson.jpeg
ADDED
indie_label_svelte/public/img/blili_hamelin.jpeg
ADDED
indie_label_svelte/public/img/butters.jpeg
ADDED
indie_label_svelte/public/img/landay.jpeg
CHANGED
indie_label_svelte/public/img/pan.jpg
ADDED
indie_label_svelte/public/index.html
CHANGED
@@ -19,6 +19,15 @@
|
|
19 |
|
20 |
<script defer src='/build/bundle.js'></script>
|
21 |
</head>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
<body>
|
24 |
</body>
|
|
|
19 |
|
20 |
<script defer src='/build/bundle.js'></script>
|
21 |
</head>
|
22 |
+
<!-- Google tag (gtag.js) -->
|
23 |
+
<script async src="https://www.googletagmanager.com/gtag/js?id=G-GFB1D1ZXRZ"></script>
|
24 |
+
<script>
|
25 |
+
window.dataLayer = window.dataLayer || [];
|
26 |
+
function gtag(){dataLayer.push(arguments);}
|
27 |
+
gtag('js', new Date());
|
28 |
+
|
29 |
+
gtag('config', 'G-GFB1D1ZXRZ');
|
30 |
+
</script>
|
31 |
|
32 |
<body>
|
33 |
</body>
|
indie_label_svelte/src/About.svelte
CHANGED
@@ -7,6 +7,15 @@
|
|
7 |
|
8 |
<div class="panel">
|
9 |
<div class="panel_contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
<div>
|
11 |
<h3>About IndieLabel</h3>
|
12 |
<p class="body">
|
@@ -16,45 +25,62 @@
|
|
16 |
<div class="card-container">
|
17 |
<p class="head_5">IndieLabel & the End-User Audits paper</p>
|
18 |
<p class="body">
|
19 |
-
The <a href="https://github.com/StanfordHCI/indie-label" target="_blank">IndieLabel</a> tool was initially presented as a research prototype
|
20 |
</p>
|
21 |
<p class="body">
|
22 |
-
The key question underlying the End-User Audits paper is: <i>how do we enable everyday users to lead large-scale algorithm audits</i>?
|
23 |
</p>
|
24 |
-
|
25 |
-
<p class="body">
|
26 |
-
Our paper abstract summarizes our core motivation, approach, and findings:
|
27 |
"Because algorithm audits are conducted by technical experts, audits are necessarily limited to the hypotheses that experts think to test. End users hold the promise to expand this purview, as they inhabit spaces and witness algorithmic impacts that auditors do not. In pursuit of this goal, we propose end-user audits—system-scale audits led by non-technical users—and present an approach that scaffolds end users in hypothesis generation, evidence identification, and results communication. Today, performing a system-scale audit requires substantial user effort to label thousands of system outputs, so we introduce a collaborative filtering technique that leverages the algorithmic system's own disaggregated training data to project from a small number of end user labels onto the full test set. Our end-user auditing tool, IndieLabel, employs these predicted labels so that users can rapidly explore where their opinions diverge from the algorithmic system's outputs. By highlighting topic areas where the system is under-performing for the user and surfacing sets of likely error cases, the tool guides the user in authoring an audit report. In an evaluation of end-user audits on a popular comment toxicity model with 17 non-technical participants, participants both replicated issues that formal audits had previously identified and also raised previously underreported issues such as under-flagging on veiled forms of hate that perpetuate stigma and over-flagging of slurs that have been reclaimed by marginalized communities."
|
28 |
</p>
|
|
|
29 |
|
30 |
<p class="body">
|
31 |
-
The End-User Audits work was led by Stanford PhD student
|
32 |
</p>
|
33 |
|
34 |
<div class="image-container">
|
35 |
<div>
|
36 |
<img src="./img/lam.jpg" alt="Michelle Lam">
|
37 |
-
<p
|
|
|
|
|
|
|
38 |
</div>
|
39 |
<div>
|
40 |
<img src="./img/gordon.jpeg" alt="Mitchell Gordon">
|
41 |
-
<p
|
|
|
|
|
|
|
42 |
</div>
|
43 |
<div>
|
44 |
<img src="./img/metaxa.jpg" alt="Danaë Metaxa">
|
45 |
-
<p
|
|
|
|
|
|
|
46 |
</div>
|
47 |
<div>
|
48 |
<img src="./img/hancock.png" alt="Jeffrey Hancock">
|
49 |
-
<p
|
|
|
|
|
|
|
50 |
</div>
|
51 |
<div>
|
52 |
<img src="./img/landay.jpeg" alt="James Landay">
|
53 |
-
<p
|
|
|
|
|
|
|
54 |
</div>
|
55 |
<div>
|
56 |
<img src="./img/bernstein.jpeg" alt="Michael Bernstein">
|
57 |
-
<p
|
|
|
|
|
|
|
58 |
</div>
|
59 |
</div>
|
60 |
</div>
|
@@ -62,7 +88,7 @@
|
|
62 |
<div class="card-container">
|
63 |
<p class="head_5">ARVA</p>
|
64 |
<p class="body">
|
65 |
-
|
66 |
</p>
|
67 |
</div>
|
68 |
|
@@ -72,22 +98,41 @@
|
|
72 |
The IndieLabel Hugging Face deployment was made possible by a wonderful team of volunteers who worked on adapting IndieLabel for use by a general audience, connecting its reports to AVID (AI Vulnerability Database), and deploying it on Hugging Face Spaces. The team includes:
|
73 |
</p>
|
74 |
<div>
|
75 |
-
<div class="image-container">
|
76 |
-
<div>
|
77 |
<img src="./img/lam.jpg" alt="Michelle Lam">
|
78 |
-
<p
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
</div>
|
80 |
-
<div>
|
81 |
-
<img src="./img/
|
82 |
-
<p
|
|
|
|
|
|
|
83 |
</div>
|
84 |
-
<div>
|
85 |
-
<img src="./img/
|
86 |
-
<p
|
|
|
|
|
|
|
87 |
</div>
|
88 |
-
<div>
|
89 |
-
<img src="./img/
|
90 |
-
<p
|
|
|
|
|
|
|
91 |
</div>
|
92 |
</div>
|
93 |
</div>
|
@@ -102,6 +147,14 @@
|
|
102 |
text-decoration: underline;
|
103 |
}
|
104 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
.head_5 {
|
106 |
margin: 10px 0;
|
107 |
}
|
@@ -131,4 +184,42 @@
|
|
131 |
max-width: 110px;
|
132 |
font-size: 11px;
|
133 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
</style>
|
|
|
7 |
|
8 |
<div class="panel">
|
9 |
<div class="panel_contents">
|
10 |
+
<div>
|
11 |
+
<h3>IndieLabel Tutorial</h3>
|
12 |
+
<p class="body">
|
13 |
+
Check out this 5-minute video tutorial for a quick overview of the IndieLabel tool. If you prefer a written document, you can also find a help article <a href="https://docs.google.com/document/d/1BTo8LFUriiZcSWCcQy0lel9VxGl4KZtlFnu7wAFaiu4/edit?usp=sharing" target="_blank">here</a>.
|
14 |
+
</p>
|
15 |
+
<div class="video-container">
|
16 |
+
<iframe src="https://www.youtube.com/embed/Je0DCDnJ6KQ?si=H1dVy-oe6PSP0QYM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
17 |
+
</div>
|
18 |
+
</div>
|
19 |
<div>
|
20 |
<h3>About IndieLabel</h3>
|
21 |
<p class="body">
|
|
|
25 |
<div class="card-container">
|
26 |
<p class="head_5">IndieLabel & the End-User Audits paper</p>
|
27 |
<p class="body">
|
28 |
+
The <a href="https://github.com/StanfordHCI/indie-label" target="_blank">IndieLabel</a> tool was initially presented as a research prototype in an academic publication called <b><i>End-User Audits: A System Empowering Communities to Lead Large-Scale Investigations of Harmful Algorithmic Behavior</i></b>. IndieLabel aids users in rapidly identifying where they disagree with a system's behavior with the help of a personalized recommender system model.
|
29 |
</p>
|
30 |
<p class="body">
|
31 |
+
The key question underlying the End-User Audits paper is: <i>how do we enable everyday users to lead large-scale algorithm audits</i>? The full paper was presented at CSCW 2022 and is available on the <a href="https://dl.acm.org/doi/10.1145/3555625" target="_blank">ACM Digital Library</a> or via <a href="https://hci.stanford.edu/publications/2022/Lam_EndUserAudits_CSCW22.pdf" target="_blank">Stanford HCI</a>. The End-User Audits paper abstract summarizes our core motivation, approach, and findings:
|
32 |
</p>
|
33 |
+
<p class="body blockquote">
|
|
|
|
|
34 |
"Because algorithm audits are conducted by technical experts, audits are necessarily limited to the hypotheses that experts think to test. End users hold the promise to expand this purview, as they inhabit spaces and witness algorithmic impacts that auditors do not. In pursuit of this goal, we propose end-user audits—system-scale audits led by non-technical users—and present an approach that scaffolds end users in hypothesis generation, evidence identification, and results communication. Today, performing a system-scale audit requires substantial user effort to label thousands of system outputs, so we introduce a collaborative filtering technique that leverages the algorithmic system's own disaggregated training data to project from a small number of end user labels onto the full test set. Our end-user auditing tool, IndieLabel, employs these predicted labels so that users can rapidly explore where their opinions diverge from the algorithmic system's outputs. By highlighting topic areas where the system is under-performing for the user and surfacing sets of likely error cases, the tool guides the user in authoring an audit report. In an evaluation of end-user audits on a popular comment toxicity model with 17 non-technical participants, participants both replicated issues that formal audits had previously identified and also raised previously underreported issues such as under-flagging on veiled forms of hate that perpetuate stigma and over-flagging of slurs that have been reclaimed by marginalized communities."
|
35 |
</p>
|
36 |
+
|
37 |
|
38 |
<p class="body">
|
39 |
+
The End-User Audits work was led by Stanford PhD student Michelle Lam along with co-authors Mitchell Gordon, Danaë Metaxa, Jeffrey Hancock, James Landay, and Michael Bernstein.
|
40 |
</p>
|
41 |
|
42 |
<div class="image-container">
|
43 |
<div>
|
44 |
<img src="./img/lam.jpg" alt="Michelle Lam">
|
45 |
+
<p>
|
46 |
+
<a href="http://michelle123lam.github.io" target="_blank"><b>Michelle Lam</b></a><br>
|
47 |
+
PhD Student, Stanford CS
|
48 |
+
</p>
|
49 |
</div>
|
50 |
<div>
|
51 |
<img src="./img/gordon.jpeg" alt="Mitchell Gordon">
|
52 |
+
<p>
|
53 |
+
<a href="https://mgordon.me/" target="_blank"><b>Mitchell Gordon</b></a><br/>
|
54 |
+
Incoming Asst Professor, MIT EECS
|
55 |
+
</p>
|
56 |
</div>
|
57 |
<div>
|
58 |
<img src="./img/metaxa.jpg" alt="Danaë Metaxa">
|
59 |
+
<p>
|
60 |
+
<a href="https://metaxa.net/" target="_blank"><b>Danaë Metaxa</b></a><br/>
|
61 |
+
Asst Professor, UPenn CIS
|
62 |
+
</p>
|
63 |
</div>
|
64 |
<div>
|
65 |
<img src="./img/hancock.png" alt="Jeffrey Hancock">
|
66 |
+
<p>
|
67 |
+
<a href="https://sml.stanford.edu/people/jeff-hancock" target="_blank"><b>Jeffrey Hancock</b></a><br/>
|
68 |
+
Professor, Stanford Comm
|
69 |
+
</p>
|
70 |
</div>
|
71 |
<div>
|
72 |
<img src="./img/landay.jpeg" alt="James Landay">
|
73 |
+
<p>
|
74 |
+
<a href="https://www.landay.org/" target="_blank"><b>James Landay</b></a><br/>
|
75 |
+
Professor, Stanford CS
|
76 |
+
</p>
|
77 |
</div>
|
78 |
<div>
|
79 |
<img src="./img/bernstein.jpeg" alt="Michael Bernstein">
|
80 |
+
<p>
|
81 |
+
<a href="https://hci.stanford.edu/msb/" target="_blank"><b>Michael Bernstein</b></a><br/>
|
82 |
+
Assoc Professor, Stanford CS
|
83 |
+
</p>
|
84 |
</div>
|
85 |
</div>
|
86 |
</div>
|
|
|
88 |
<div class="card-container">
|
89 |
<p class="head_5">ARVA</p>
|
90 |
<p class="body">
|
91 |
+
The <a href="https://avidml.org/arva/" target="_blank">AI Risk and Vulnerability Alliance (ARVA)</a> is a nonprofit organization focused on making AI safer for everyone. Our mission is to empower communities to recognize, diagnose, and manage vulnerabilities in AI that affects them. Our flagship project is the <a href="https://avidml.org" target="_blank">AI Vulnerability Database (AVID)</a>, is an open-source knowledge base of failure modes for AI models, datasets, and systems.
|
92 |
</p>
|
93 |
</div>
|
94 |
|
|
|
98 |
The IndieLabel Hugging Face deployment was made possible by a wonderful team of volunteers who worked on adapting IndieLabel for use by a general audience, connecting its reports to AVID (AI Vulnerability Database), and deploying it on Hugging Face Spaces. The team includes:
|
99 |
</p>
|
100 |
<div>
|
101 |
+
<div class="image-container-wide">
|
102 |
+
<div class="image-wide">
|
103 |
<img src="./img/lam.jpg" alt="Michelle Lam">
|
104 |
+
<p>
|
105 |
+
<a href="http://michelle123lam.github.io" target="_blank"><b>Michelle Lam</b></a><br>
|
106 |
+
Michelle Lam is a PhD Candidate at Stanford University in the HCI Group. Her research focuses on building systems that empower everyday users to surface their expertise to design and evaluate AI systems.
|
107 |
+
</p>
|
108 |
+
</div>
|
109 |
+
<div class="image-wide">
|
110 |
+
<img src="./img/anderson.jpeg" alt="Carol Anderson">
|
111 |
+
<p>
|
112 |
+
<a href="https://www.carol-anderson.com/" target="_blank"><b>Carol Anderson</b></a><br>
|
113 |
+
Carol Anderson is a data scientist and machine learning practitioner with expertise in natural language processing (NLP), biological data, and AI ethics. She serves as AVID’s machine learning lead.
|
114 |
+
</p>
|
115 |
</div>
|
116 |
+
<div class="image-wide">
|
117 |
+
<img src="./img/pan.jpg" alt="Christina Pan">
|
118 |
+
<p>
|
119 |
+
<a href="https://www.christinaapan.com/" target="_blank"><b>Christina Pan</b></a><br>
|
120 |
+
Christina Pan started her career building machine learning (ML) models at Google, which inspired her passion for design thinking and AI ethics.
|
121 |
+
</p>
|
122 |
</div>
|
123 |
+
<div class="image-wide">
|
124 |
+
<img src="./img/butters.jpeg" alt="Nathan Butters">
|
125 |
+
<p>
|
126 |
+
<b>Nathan Butters</b><br>
|
127 |
+
Nathan Butters is a product manager in the Office of Ethical and Humane Use at Salesforce. He is a cofounder of the AI Risk and Vulnerability Alliance (ARVA).
|
128 |
+
</p>
|
129 |
</div>
|
130 |
+
<div class="image-wide">
|
131 |
+
<img src="./img/blili_hamelin.jpeg" alt="Borhane Blili-Hamelin">
|
132 |
+
<p>
|
133 |
+
<a href="https://borhane.xyz/" target="_blank"><b>Borhane Blili-Hamelin</b></a><br>
|
134 |
+
Borhane Blili-Hamelin is an ethicist, researcher and AI risk management consultant. He is an officer at the AI Risk and Vulnerability Alliance (ARVA), an affiliate at Data & Society, and a senior consultant at BABL AI.
|
135 |
+
</p>
|
136 |
</div>
|
137 |
</div>
|
138 |
</div>
|
|
|
147 |
text-decoration: underline;
|
148 |
}
|
149 |
|
150 |
+
.panel {
|
151 |
+
margin: 0 40px;
|
152 |
+
}
|
153 |
+
|
154 |
+
.blockquote {
|
155 |
+
margin: 0 40px;
|
156 |
+
}
|
157 |
+
|
158 |
.head_5 {
|
159 |
margin: 10px 0;
|
160 |
}
|
|
|
184 |
max-width: 110px;
|
185 |
font-size: 11px;
|
186 |
}
|
187 |
+
|
188 |
+
.image-container-wide {
|
189 |
+
margin: 20px 0;
|
190 |
+
display: flex;
|
191 |
+
flex-direction: column;
|
192 |
+
justify-content: center;
|
193 |
+
gap: 20px;
|
194 |
+
}
|
195 |
+
|
196 |
+
.image-wide {
|
197 |
+
display: flex;
|
198 |
+
flex-direction: row;
|
199 |
+
align-items: center;
|
200 |
+
gap: 10px;
|
201 |
+
}
|
202 |
+
|
203 |
+
.image-container-wide img {
|
204 |
+
max-width: 110px; /* Adjust the maximum width of images */
|
205 |
+
height: 110px;
|
206 |
+
border-radius: 50%;
|
207 |
+
display: block;
|
208 |
+
}
|
209 |
+
|
210 |
+
.video-container {
|
211 |
+
position: relative;
|
212 |
+
padding-bottom: 10px;
|
213 |
+
padding-top: 10px;
|
214 |
+
height: 40vh;
|
215 |
+
overflow: hidden;
|
216 |
+
}
|
217 |
+
|
218 |
+
.video-container iframe {
|
219 |
+
position: absolute;
|
220 |
+
top: 0;
|
221 |
+
left: 0;
|
222 |
+
width: 100%;
|
223 |
+
height: 100%;
|
224 |
+
}
|
225 |
</style>
|
indie_label_svelte/src/Auditing.svelte
CHANGED
@@ -293,9 +293,6 @@
|
|
293 |
{#if audit_results}
|
294 |
<OverallResults
|
295 |
data={audit_results}
|
296 |
-
clusters={clusters}
|
297 |
-
personalized_model={personalized_model}
|
298 |
-
cluster={topic}
|
299 |
/>
|
300 |
{/if}
|
301 |
{:catch error}
|
|
|
293 |
{#if audit_results}
|
294 |
<OverallResults
|
295 |
data={audit_results}
|
|
|
|
|
|
|
296 |
/>
|
297 |
{/if}
|
298 |
{:catch error}
|
indie_label_svelte/src/ClusterResults.svelte
CHANGED
@@ -32,7 +32,7 @@
|
|
32 |
export let show_checkboxes = true;
|
33 |
export let table_width_pct = 80;
|
34 |
export let rowsPerPage = 10;
|
35 |
-
export let evidence;
|
36 |
export let table_id;
|
37 |
export let use_model = true;
|
38 |
export let show_agree_disagree = false;
|
@@ -232,7 +232,7 @@
|
|
232 |
<div class="row">
|
233 |
<div class="col s8">
|
234 |
<VegaLite
|
235 |
-
{cluster_overview_data}
|
236 |
spec={cluster_overview_spec}
|
237 |
bind:view={cluster_overview_view}
|
238 |
/>
|
@@ -302,7 +302,7 @@
|
|
302 |
<Cell>
|
303 |
System<br>decision<br>
|
304 |
{#if show_checkboxes}
|
305 |
-
<span style="font-size:
|
306 |
{/if}
|
307 |
</Cell>
|
308 |
{#if show_num_ratings}
|
@@ -314,7 +314,7 @@
|
|
314 |
<Cell>
|
315 |
Potential error<br>type<br>
|
316 |
{#if show_checkboxes}
|
317 |
-
<span style="font-size:
|
318 |
{/if}
|
319 |
</Cell>
|
320 |
|
|
|
32 |
export let show_checkboxes = true;
|
33 |
export let table_width_pct = 80;
|
34 |
export let rowsPerPage = 10;
|
35 |
+
export let evidence = null;
|
36 |
export let table_id;
|
37 |
export let use_model = true;
|
38 |
export let show_agree_disagree = false;
|
|
|
232 |
<div class="row">
|
233 |
<div class="col s8">
|
234 |
<VegaLite
|
235 |
+
data={cluster_overview_data}
|
236 |
spec={cluster_overview_spec}
|
237 |
bind:view={cluster_overview_view}
|
238 |
/>
|
|
|
302 |
<Cell>
|
303 |
System<br>decision<br>
|
304 |
{#if show_checkboxes}
|
305 |
+
<span style="font-size:9px; max-width:125px">White = Non-toxic, <br>Grey = Toxic</span>
|
306 |
{/if}
|
307 |
</Cell>
|
308 |
{#if show_num_ratings}
|
|
|
314 |
<Cell>
|
315 |
Potential error<br>type<br>
|
316 |
{#if show_checkboxes}
|
317 |
+
<span style="font-size:9px; max-width:125px">Darker red = Greater <br>potential system error</span>
|
318 |
{/if}
|
319 |
</Cell>
|
320 |
|
indie_label_svelte/src/HypothesisPanel.svelte
CHANGED
@@ -248,8 +248,8 @@
|
|
248 |
<div class="panel_header">
|
249 |
<div class="panel_header_content">
|
250 |
<div class="page_header">
|
251 |
-
<img src="/logo.png" style="height: 50px;
|
252 |
-
<Button class="user_button" color="secondary" style="margin:
|
253 |
<Label>User: {cur_user}</Label>
|
254 |
</Button>
|
255 |
</div>
|
@@ -259,7 +259,7 @@
|
|
259 |
on:click={() => (open = !open)}
|
260 |
color="primary"
|
261 |
disabled={model == null}
|
262 |
-
style="float: right; padding:
|
263 |
>
|
264 |
{#if open}
|
265 |
<Label>Close</Label>
|
@@ -584,18 +584,17 @@
|
|
584 |
|
585 |
:global(.mdc-button.user_button span) {
|
586 |
text-overflow: ellipsis;
|
587 |
-
white-space: nowrap;
|
588 |
overflow: hidden;
|
589 |
}
|
590 |
|
591 |
.page_header {
|
592 |
width: 100%;
|
593 |
background: #e3d6fd;
|
594 |
-
/* padding: 21px 0; */
|
595 |
-
/* border-bottom: 1px solid #e3d6fd; */
|
596 |
padding: 10.5px 0;
|
597 |
position: relative;
|
598 |
-
display:
|
|
|
|
|
599 |
}
|
600 |
|
601 |
.page_header:before {
|
@@ -608,9 +607,11 @@
|
|
608 |
}
|
609 |
|
610 |
.hypotheses_header {
|
611 |
-
display: inline-block;
|
612 |
width: 100%;
|
613 |
padding: 10px 0;
|
614 |
vertical-align: middle;
|
|
|
|
|
|
|
615 |
}
|
616 |
</style>
|
|
|
248 |
<div class="panel_header">
|
249 |
<div class="panel_header_content">
|
250 |
<div class="page_header">
|
251 |
+
<img src="/logo.png" style="height: 50px;" alt="IndieLabel" />
|
252 |
+
<Button class="user_button" color="secondary" style="margin: 0 5px; padding: 0 5px;" >
|
253 |
<Label>User: {cur_user}</Label>
|
254 |
</Button>
|
255 |
</div>
|
|
|
259 |
on:click={() => (open = !open)}
|
260 |
color="primary"
|
261 |
disabled={model == null}
|
262 |
+
style="float: right; padding: 0 5px; margin: 0 5px; max-width: 200px;"
|
263 |
>
|
264 |
{#if open}
|
265 |
<Label>Close</Label>
|
|
|
584 |
|
585 |
:global(.mdc-button.user_button span) {
|
586 |
text-overflow: ellipsis;
|
|
|
587 |
overflow: hidden;
|
588 |
}
|
589 |
|
590 |
.page_header {
|
591 |
width: 100%;
|
592 |
background: #e3d6fd;
|
|
|
|
|
593 |
padding: 10.5px 0;
|
594 |
position: relative;
|
595 |
+
display: flex;
|
596 |
+
align-items: center;
|
597 |
+
justify-content: space-around;
|
598 |
}
|
599 |
|
600 |
.page_header:before {
|
|
|
607 |
}
|
608 |
|
609 |
.hypotheses_header {
|
|
|
610 |
width: 100%;
|
611 |
padding: 10px 0;
|
612 |
vertical-align: middle;
|
613 |
+
display: flex;
|
614 |
+
align-items: center;
|
615 |
+
justify-content: space-around;
|
616 |
}
|
617 |
</style>
|
indie_label_svelte/src/MainPanel.svelte
CHANGED
@@ -7,18 +7,20 @@
|
|
7 |
import TabBar from "@smui/tab-bar";
|
8 |
import { Icon } from "@smui/common";
|
9 |
|
10 |
-
export let model;
|
11 |
export let error_type;
|
12 |
export let cur_user;
|
13 |
|
14 |
// Handle routing
|
15 |
-
let active = "
|
16 |
let searchParams = new URLSearchParams(window.location.search);
|
17 |
let tab = searchParams.get("tab");
|
18 |
if (tab == "auditing") {
|
19 |
active = "auditing";
|
20 |
} else if (tab == "about") {
|
21 |
active = "about";
|
|
|
|
|
22 |
}
|
23 |
|
24 |
</script>
|
|
|
7 |
import TabBar from "@smui/tab-bar";
|
8 |
import { Icon } from "@smui/common";
|
9 |
|
10 |
+
export let model = null;
|
11 |
export let error_type;
|
12 |
export let cur_user;
|
13 |
|
14 |
// Handle routing
|
15 |
+
let active = "about"; // default tab on load
|
16 |
let searchParams = new URLSearchParams(window.location.search);
|
17 |
let tab = searchParams.get("tab");
|
18 |
if (tab == "auditing") {
|
19 |
active = "auditing";
|
20 |
} else if (tab == "about") {
|
21 |
active = "about";
|
22 |
+
} else if (tab == "labeling") {
|
23 |
+
active = "labeling";
|
24 |
}
|
25 |
|
26 |
</script>
|
indie_label_svelte/src/ModelPerf.svelte
CHANGED
@@ -32,7 +32,7 @@
|
|
32 |
<div>
|
33 |
<!-- Performance visualization -->
|
34 |
<div>
|
35 |
-
<VegaLite {perf_plot_data} spec={perf_plot_spec} bind:view={perf_plot_view}/>
|
36 |
</div>
|
37 |
</div>
|
38 |
</div>
|
|
|
32 |
<div>
|
33 |
<!-- Performance visualization -->
|
34 |
<div>
|
35 |
+
<VegaLite data={perf_plot_data} spec={perf_plot_spec} bind:view={perf_plot_view}/>
|
36 |
</div>
|
37 |
</div>
|
38 |
</div>
|
indie_label_svelte/src/OverallResults.svelte
CHANGED
@@ -65,7 +65,7 @@
|
|
65 |
{/if}
|
66 |
<div class="row">
|
67 |
<div class="col s8">
|
68 |
-
<VegaLite {topic_overview_data} spec={topic_overview_spec} bind:view={topic_overview_view}/>
|
69 |
</div>
|
70 |
</div>
|
71 |
|
|
|
65 |
{/if}
|
66 |
<div class="row">
|
67 |
<div class="col s8">
|
68 |
+
<VegaLite data={topic_overview_data} spec={topic_overview_spec} bind:view={topic_overview_view}/>
|
69 |
</div>
|
70 |
</div>
|
71 |
|