TwoQuarks commited on
Commit
db2bbcf
·
verified ·
1 Parent(s): 20aadfb

Upload 100 files

Browse files
Files changed (3) hide show
  1. README.md +4 -11
  2. app.py +32 -14
  3. requirements.txt +2 -3
README.md CHANGED
@@ -1,23 +1,15 @@
1
  ---
2
  title: QuarksLab
3
- emoji:
4
  colorFrom: indigo
5
  colorTo: blue
6
  sdk: gradio
7
  sdk_version: 4.44.1
8
- python_version: 3.10.0
9
  app_file: app.py
10
  pinned: false
11
- license: mit
12
  ---
13
 
14
- # QuarksLab — TwoQuarks Interactive Lab
15
-
16
- Real, interactive experiments. Modify seed/episodes/params and run.
17
-
18
-
19
-
20
-
21
  # TwoQuarks — QuarksLab (Interactive)
22
 
23
  This is a Hugging Face Space intended to **run real, bounded experiments** from Three Quarks:
@@ -35,4 +27,5 @@ python app.py
35
 
36
  ## Deploy to Hugging Face Spaces
37
 
38
- Create a new Space (Gradio) and push this repository.
 
 
1
  ---
2
  title: QuarksLab
3
+ emoji: "🧪"
4
  colorFrom: indigo
5
  colorTo: blue
6
  sdk: gradio
7
  sdk_version: 4.44.1
8
+ python_version: 3.10
9
  app_file: app.py
10
  pinned: false
 
11
  ---
12
 
 
 
 
 
 
 
 
13
  # TwoQuarks — QuarksLab (Interactive)
14
 
15
  This is a Hugging Face Space intended to **run real, bounded experiments** from Three Quarks:
 
27
 
28
  ## Deploy to Hugging Face Spaces
29
 
30
+ Create a new Space (Gradio) and push this repository.
31
+
app.py CHANGED
@@ -2,6 +2,7 @@ import os
2
  import sys
3
  import time
4
  import uuid
 
5
  from pathlib import Path
6
 
7
  import gradio as gr
@@ -103,7 +104,9 @@ def run_down(episodes_per_phase: int, seed: int):
103
  'artifact_csv': str(out_csv),
104
  }
105
 
106
- return meta, table_lines, fig, str(out_csv)
 
 
107
 
108
 
109
  def run_antidown(n_episodes: int, base_seed: int):
@@ -190,7 +193,9 @@ def run_antidown(n_episodes: int, base_seed: int):
190
  'artifact_csv': str(out_csv),
191
  }
192
 
193
- return meta, table_lines, fig, str(out_csv)
 
 
194
 
195
 
196
  # =========================
@@ -238,7 +243,7 @@ def run_strange(n_episodes: int, max_steps: int, seed: int, mode: str):
238
  'artifact_csv': str(out_csv),
239
  }
240
 
241
- return metrics, fig, str(out_csv)
242
 
243
 
244
  # =========================
@@ -278,7 +283,7 @@ def run_charm(n_episodes: int, seed: int):
278
  'artifact_csv': str(out_csv),
279
  }
280
 
281
- return metrics, fig_r, fig_l, fig_rho, str(out_csv)
282
 
283
 
284
  # =========================
@@ -288,9 +293,10 @@ def run_charm(n_episodes: int, seed: int):
288
  def build_ui():
289
  with gr.Blocks(title='TwoQuarks — QuarksLab (Interactive)') as demo:
290
  gr.Markdown(
291
- """# TwoQuarks • QuarksLab (Interactive)\n\n"
292
- "Real runs, real knobs: seed/episodes/steps. Short-bounded experiments (public CPU)."
293
- """
 
294
  )
295
 
296
  with gr.Tab('DOWN / AntiDown'):
@@ -299,8 +305,12 @@ def build_ui():
299
  down_eps = gr.Slider(50, 800, value=200, step=50, label='DOWN: episodes_per_phase')
300
  down_seed = gr.Number(value=2025, precision=0, label='DOWN: seed')
301
  run_down_btn = gr.Button('Run DOWN')
302
- down_meta = gr.JSON(label='DOWN: run meta')
303
- down_table = gr.Dataframe(label='DOWN: summary (mean/std by phase+agent)', interactive=False)
 
 
 
 
304
  down_plot = gr.Plot(label='DOWN: mean reward by phase')
305
  down_file = gr.File(label='DOWN: results CSV')
306
 
@@ -315,8 +325,12 @@ def build_ui():
315
  ad_eps = gr.Slider(20, 400, value=120, step=20, label='AntiDown: episodes_per_phase')
316
  ad_seed = gr.Number(value=1234, precision=0, label='AntiDown: base seed')
317
  run_ad_btn = gr.Button('Run AntiDown')
318
- ad_meta = gr.JSON(label='AntiDown: run meta')
319
- ad_table = gr.Dataframe(label='AntiDown: summary', interactive=False)
 
 
 
 
320
  ad_plot = gr.Plot(label='AntiDown: mean total reward by phase')
321
  ad_file = gr.File(label='AntiDown: results CSV')
322
 
@@ -334,7 +348,7 @@ def build_ui():
334
  ssteps = gr.Slider(10, 120, value=50, step=5, label='Max steps per episode')
335
  sseed = gr.Number(value=0, precision=0, label='Seed')
336
  run_s_btn = gr.Button('Run')
337
- s_meta = gr.JSON(label='Run meta')
338
  s_plot = gr.Plot(label='Return per episode')
339
  s_file = gr.File(label='Results CSV')
340
  run_s_btn.click(fn=run_strange, inputs=[seps, ssteps, sseed, mode], outputs=[s_meta, s_plot, s_file])
@@ -345,7 +359,7 @@ def build_ui():
345
  ceps = gr.Slider(50, 600, value=300, step=50, label='Episodes')
346
  cseed = gr.Number(value=0, precision=0, label='Seed')
347
  run_c_btn = gr.Button('Run CHARM')
348
- c_meta = gr.JSON(label='Run meta')
349
  c_plot_r = gr.Plot(label='Reward')
350
  c_plot_l = gr.Plot(label='Lambda')
351
  c_plot_rho = gr.Plot(label='Rho_mean')
@@ -365,4 +379,8 @@ def build_ui():
365
  demo = build_ui()
366
 
367
  if __name__ == '__main__':
368
- demo.launch()
 
 
 
 
 
2
  import sys
3
  import time
4
  import uuid
5
+ import json
6
  from pathlib import Path
7
 
8
  import gradio as gr
 
104
  'artifact_csv': str(out_csv),
105
  }
106
 
107
+ headers = ['agent', 'phase', 'mean_total_reward', 'std_total_reward', 'mean_valley_visits', 'n']
108
+ rows = [[row.get(h) for h in headers] for row in table_lines]
109
+ return json.dumps(meta, indent=2), rows, fig, str(out_csv)
110
 
111
 
112
  def run_antidown(n_episodes: int, base_seed: int):
 
193
  'artifact_csv': str(out_csv),
194
  }
195
 
196
+ headers = ['agent', 'phase', 'mean_reward', 'std_reward', 'n']
197
+ rows = [[row.get(h) for h in headers] for row in table_lines]
198
+ return json.dumps(meta, indent=2), rows, fig, str(out_csv)
199
 
200
 
201
  # =========================
 
243
  'artifact_csv': str(out_csv),
244
  }
245
 
246
+ return json.dumps(metrics, indent=2), fig, str(out_csv)
247
 
248
 
249
  # =========================
 
283
  'artifact_csv': str(out_csv),
284
  }
285
 
286
+ return json.dumps(metrics, indent=2), fig_r, fig_l, fig_rho, str(out_csv)
287
 
288
 
289
  # =========================
 
293
  def build_ui():
294
  with gr.Blocks(title='TwoQuarks — QuarksLab (Interactive)') as demo:
295
  gr.Markdown(
296
+ """# TwoQuarks • QuarksLab (Interactive)
297
+
298
+ Real runs, real knobs: seed/episodes/steps. Short-bounded experiments (public CPU).
299
+ """
300
  )
301
 
302
  with gr.Tab('DOWN / AntiDown'):
 
305
  down_eps = gr.Slider(50, 800, value=200, step=50, label='DOWN: episodes_per_phase')
306
  down_seed = gr.Number(value=2025, precision=0, label='DOWN: seed')
307
  run_down_btn = gr.Button('Run DOWN')
308
+ down_meta = gr.Code(label='DOWN: run meta (JSON)', language='json')
309
+ down_table = gr.Dataframe(
310
+ headers=['agent', 'phase', 'mean_reward', 'std_reward', 'n'],
311
+ label='DOWN: summary (mean/std by phase+agent)',
312
+ interactive=False,
313
+ )
314
  down_plot = gr.Plot(label='DOWN: mean reward by phase')
315
  down_file = gr.File(label='DOWN: results CSV')
316
 
 
325
  ad_eps = gr.Slider(20, 400, value=120, step=20, label='AntiDown: episodes_per_phase')
326
  ad_seed = gr.Number(value=1234, precision=0, label='AntiDown: base seed')
327
  run_ad_btn = gr.Button('Run AntiDown')
328
+ ad_meta = gr.Code(label='AntiDown: run meta (JSON)', language='json')
329
+ ad_table = gr.Dataframe(
330
+ headers=['agent', 'phase', 'mean_total_reward', 'std_total_reward', 'mean_valley_visits', 'n'],
331
+ label='AntiDown: summary',
332
+ interactive=False,
333
+ )
334
  ad_plot = gr.Plot(label='AntiDown: mean total reward by phase')
335
  ad_file = gr.File(label='AntiDown: results CSV')
336
 
 
348
  ssteps = gr.Slider(10, 120, value=50, step=5, label='Max steps per episode')
349
  sseed = gr.Number(value=0, precision=0, label='Seed')
350
  run_s_btn = gr.Button('Run')
351
+ s_meta = gr.Code(label='Run meta (JSON)', language='json')
352
  s_plot = gr.Plot(label='Return per episode')
353
  s_file = gr.File(label='Results CSV')
354
  run_s_btn.click(fn=run_strange, inputs=[seps, ssteps, sseed, mode], outputs=[s_meta, s_plot, s_file])
 
359
  ceps = gr.Slider(50, 600, value=300, step=50, label='Episodes')
360
  cseed = gr.Number(value=0, precision=0, label='Seed')
361
  run_c_btn = gr.Button('Run CHARM')
362
+ c_meta = gr.Code(label='Run meta (JSON)', language='json')
363
  c_plot_r = gr.Plot(label='Reward')
364
  c_plot_l = gr.Plot(label='Lambda')
365
  c_plot_rho = gr.Plot(label='Rho_mean')
 
379
  demo = build_ui()
380
 
381
  if __name__ == '__main__':
382
+ demo.launch(
383
+ server_name='0.0.0.0',
384
+ server_port=int(os.getenv('PORT', '7860')),
385
+ show_api=False,
386
+ )
requirements.txt CHANGED
@@ -1,4 +1,3 @@
1
- gradio==4.44.1
2
- huggingface_hub==0.24.7
3
  numpy
4
- matplotlib
 
 
 
 
1
  numpy
2
+ matplotlib
3
+ huggingface_hub<1.0