dataframe_background_update
#4
by
ignacioct
- opened
- app.py +26 -64
- requirements.txt +0 -1
app.py
CHANGED
@@ -1,5 +1,3 @@
|
|
1 |
-
from apscheduler.schedulers.background import BackgroundScheduler
|
2 |
-
import datetime
|
3 |
import os
|
4 |
from typing import Dict, Tuple
|
5 |
from uuid import UUID
|
@@ -216,7 +214,6 @@ def kpi_chart() -> alt.Chart:
|
|
216 |
|
217 |
return chart
|
218 |
|
219 |
-
|
220 |
def render_hub_user_link(hub_id):
|
221 |
link = f"https://huggingface.co/{hub_id}"
|
222 |
return f'<a target="_blank" href="{link}" style="color: var(--link-text-color); text-decoration: underline;text-decoration-style: dotted;">{hub_id}</a>'
|
@@ -236,42 +233,13 @@ def obtain_top_5_users(user_ids_annotations: Dict[str, int]) -> pd.DataFrame:
|
|
236 |
dataframe = pd.DataFrame(
|
237 |
user_ids_annotations.items(), columns=["Name", "Submitted Responses"]
|
238 |
)
|
239 |
-
dataframe[
|
240 |
dataframe = dataframe.sort_values(by="Submitted Responses", ascending=False)
|
241 |
return dataframe.head(50)
|
242 |
|
243 |
|
244 |
-
def fetch_data() -> None:
|
245 |
-
"""
|
246 |
-
This function fetches the data from the source and target datasets and updates the global variables.
|
247 |
-
"""
|
248 |
-
|
249 |
-
print(f"Starting to fetch data: {datetime.datetime.now()}")
|
250 |
-
|
251 |
-
global source_dataset, target_dataset, user_ids_annotations, annotated, remaining, percentage_completed, top5_dataframe
|
252 |
-
source_dataset, target_dataset = obtain_source_target_datasets()
|
253 |
-
user_ids_annotations = get_user_annotations_dictionary(target_dataset)
|
254 |
-
|
255 |
-
annotated = len(target_dataset)
|
256 |
-
remaining = int(os.getenv("TARGET_RECORDS")) - annotated
|
257 |
-
percentage_completed = round(
|
258 |
-
(annotated / int(os.getenv("TARGET_RECORDS"))) * 100, 1
|
259 |
-
)
|
260 |
-
|
261 |
-
# Print the current date and time
|
262 |
-
print(f"Data fetched: {datetime.datetime.now()}")
|
263 |
-
|
264 |
-
|
265 |
-
def get_top5() -> pd.DataFrame:
|
266 |
-
return obtain_top_5_users(user_ids_annotations)
|
267 |
-
|
268 |
-
|
269 |
def main() -> None:
|
270 |
|
271 |
-
# Set the update interval
|
272 |
-
update_interval = 300 # seconds
|
273 |
-
update_interval_charts = 30 # seconds
|
274 |
-
|
275 |
# Connect to the space with rg.init()
|
276 |
rg.init(
|
277 |
api_url=os.getenv("ARGILLA_API_URL"),
|
@@ -279,22 +247,19 @@ def main() -> None:
|
|
279 |
extra_headers={"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"},
|
280 |
)
|
281 |
|
282 |
-
|
|
|
|
|
283 |
|
284 |
-
|
285 |
-
scheduler.add_job(
|
286 |
-
func=fetch_data, trigger="interval", seconds=update_interval, max_instances=1
|
287 |
-
)
|
288 |
-
scheduler.start()
|
289 |
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
"""
|
296 |
|
297 |
-
with gr.Blocks(
|
298 |
gr.Markdown(
|
299 |
"""
|
300 |
# 🗣️ The Prompt Collective Dashboad
|
@@ -312,12 +277,11 @@ def main() -> None:
|
|
312 |
)
|
313 |
with gr.Row():
|
314 |
|
315 |
-
|
316 |
demo.load(
|
317 |
donut_chart_target,
|
318 |
inputs=[],
|
319 |
-
outputs=[
|
320 |
-
every=update_interval_charts,
|
321 |
)
|
322 |
|
323 |
gr.Markdown(
|
@@ -335,28 +299,25 @@ def main() -> None:
|
|
335 |
)
|
336 |
with gr.Row():
|
337 |
|
338 |
-
|
339 |
demo.load(
|
340 |
kpi_chart_submitted,
|
341 |
inputs=[],
|
342 |
-
outputs=[
|
343 |
-
every=update_interval_charts,
|
344 |
)
|
345 |
|
346 |
-
|
347 |
demo.load(
|
348 |
kpi_chart_remaining,
|
349 |
inputs=[],
|
350 |
-
outputs=[
|
351 |
-
every=update_interval_charts,
|
352 |
)
|
353 |
|
354 |
-
|
355 |
demo.load(
|
356 |
donut_chart_total,
|
357 |
inputs=[],
|
358 |
-
outputs=[
|
359 |
-
every=update_interval_charts,
|
360 |
)
|
361 |
|
362 |
gr.Markdown(
|
@@ -368,12 +329,15 @@ def main() -> None:
|
|
368 |
|
369 |
with gr.Row():
|
370 |
|
371 |
-
|
372 |
demo.load(
|
373 |
-
kpi_chart,
|
|
|
|
|
374 |
)
|
375 |
|
376 |
-
|
|
|
377 |
headers=["Name", "Submitted Responses"],
|
378 |
datatype=[
|
379 |
"markdown",
|
@@ -382,9 +346,7 @@ def main() -> None:
|
|
382 |
row_count=50,
|
383 |
col_count=(2, "fixed"),
|
384 |
interactive=False,
|
385 |
-
|
386 |
-
)
|
387 |
-
demo.load(get_top5, None, [top5_df_plot], every=update_interval_charts)
|
388 |
|
389 |
# Launch the Gradio interface
|
390 |
demo.launch()
|
|
|
|
|
|
|
1 |
import os
|
2 |
from typing import Dict, Tuple
|
3 |
from uuid import UUID
|
|
|
214 |
|
215 |
return chart
|
216 |
|
|
|
217 |
def render_hub_user_link(hub_id):
|
218 |
link = f"https://huggingface.co/{hub_id}"
|
219 |
return f'<a target="_blank" href="{link}" style="color: var(--link-text-color); text-decoration: underline;text-decoration-style: dotted;">{hub_id}</a>'
|
|
|
233 |
dataframe = pd.DataFrame(
|
234 |
user_ids_annotations.items(), columns=["Name", "Submitted Responses"]
|
235 |
)
|
236 |
+
dataframe['Name'] = dataframe['Name'].apply(render_hub_user_link)
|
237 |
dataframe = dataframe.sort_values(by="Submitted Responses", ascending=False)
|
238 |
return dataframe.head(50)
|
239 |
|
240 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
def main() -> None:
|
242 |
|
|
|
|
|
|
|
|
|
243 |
# Connect to the space with rg.init()
|
244 |
rg.init(
|
245 |
api_url=os.getenv("ARGILLA_API_URL"),
|
|
|
247 |
extra_headers={"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"},
|
248 |
)
|
249 |
|
250 |
+
global source_dataset, target_dataset, user_ids_annotations
|
251 |
+
source_dataset, target_dataset = obtain_source_target_datasets()
|
252 |
+
user_ids_annotations = get_user_annotations_dictionary(target_dataset)
|
253 |
|
254 |
+
top5_dataframe = obtain_top_5_users(user_ids_annotations)
|
|
|
|
|
|
|
|
|
255 |
|
256 |
+
annotated = len(target_dataset)
|
257 |
+
remaining = int(os.getenv("TARGET_RECORDS")) - annotated
|
258 |
+
percentage_completed = round(
|
259 |
+
(annotated / int(os.getenv("TARGET_RECORDS"))) * 100, 1
|
260 |
+
)
|
|
|
261 |
|
262 |
+
with gr.Blocks() as demo:
|
263 |
gr.Markdown(
|
264 |
"""
|
265 |
# 🗣️ The Prompt Collective Dashboad
|
|
|
277 |
)
|
278 |
with gr.Row():
|
279 |
|
280 |
+
plot2 = gr.Plot(label="Plot")
|
281 |
demo.load(
|
282 |
donut_chart_target,
|
283 |
inputs=[],
|
284 |
+
outputs=[plot2],
|
|
|
285 |
)
|
286 |
|
287 |
gr.Markdown(
|
|
|
299 |
)
|
300 |
with gr.Row():
|
301 |
|
302 |
+
plot = gr.Plot(label="Plot")
|
303 |
demo.load(
|
304 |
kpi_chart_submitted,
|
305 |
inputs=[],
|
306 |
+
outputs=[plot],
|
|
|
307 |
)
|
308 |
|
309 |
+
plot = gr.Plot(label="Plot")
|
310 |
demo.load(
|
311 |
kpi_chart_remaining,
|
312 |
inputs=[],
|
313 |
+
outputs=[plot],
|
|
|
314 |
)
|
315 |
|
316 |
+
plot2 = gr.Plot(label="Plot")
|
317 |
demo.load(
|
318 |
donut_chart_total,
|
319 |
inputs=[],
|
320 |
+
outputs=[plot2],
|
|
|
321 |
)
|
322 |
|
323 |
gr.Markdown(
|
|
|
329 |
|
330 |
with gr.Row():
|
331 |
|
332 |
+
plot2 = gr.Plot(label="Plot")
|
333 |
demo.load(
|
334 |
+
kpi_chart,
|
335 |
+
inputs=[],
|
336 |
+
outputs=[plot2],
|
337 |
)
|
338 |
|
339 |
+
gr.Dataframe(
|
340 |
+
value=top5_dataframe,
|
341 |
headers=["Name", "Submitted Responses"],
|
342 |
datatype=[
|
343 |
"markdown",
|
|
|
346 |
row_count=50,
|
347 |
col_count=(2, "fixed"),
|
348 |
interactive=False,
|
349 |
+
),
|
|
|
|
|
350 |
|
351 |
# Launch the Gradio interface
|
352 |
demo.launch()
|
requirements.txt
CHANGED
@@ -2,7 +2,6 @@ aiofiles==23.2.1
|
|
2 |
altair==5.2.0
|
3 |
annotated-types==0.6.0
|
4 |
anyio==4.2.0
|
5 |
-
apscheduler==3.10.4
|
6 |
argilla==1.23.0
|
7 |
attrs==23.2.0
|
8 |
backoff==2.2.1
|
|
|
2 |
altair==5.2.0
|
3 |
annotated-types==0.6.0
|
4 |
anyio==4.2.0
|
|
|
5 |
argilla==1.23.0
|
6 |
attrs==23.2.0
|
7 |
backoff==2.2.1
|