mcamargo00 commited on
Commit
df51a40
·
verified ·
1 Parent(s): 38969a6

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -106
app.py CHANGED
@@ -693,52 +693,18 @@ def _rows_to_table(rows: list[dict]) -> list[list[str]]:
693
  ])
694
  return table
695
 
696
- def _dropdown_choices(rows: list[dict]) -> list[tuple[str, int]]:
697
- # Friendly labels mapped to ID values
698
- choices = []
699
- for r in rows:
700
- label = f'#{r["id"]} — {r["label"]} — {_truncate(r["question"], 60)}'
701
- choices.append((label, r["id"]))
702
- return choices
703
 
704
  # ===== Gradio callbacks for examples =====
705
- def ui_see_more(selector, rows, filter_label):
706
- """Append a chunk of examples to the browser."""
707
- chunk = selector.next_batch(k=6, filter_label=filter_label)
708
- rows = (rows or []) + chunk
709
- return (
710
- rows, # rows_state
711
- gr.update(value=_rows_to_table(rows)), # examples_df
712
- gr.update(choices=_dropdown_choices(rows), value=None), # row_picker
713
- )
714
-
715
- def ui_reset_examples():
716
- """Reset per-session selector and clear the browser."""
717
- sel = new_selector()
718
- rows: list[dict] = []
719
- return (
720
- sel, # selector_state
721
- rows, # rows_state
722
- gr.update(value=_rows_to_table(rows)), # examples_df
723
- gr.update(choices=[], value=None), # row_picker
724
- )
725
 
726
- def ui_load_selected(rows, selected_id):
727
- """Load the selected example into the main inputs."""
728
- if not rows or selected_id is None:
729
- return gr.update(), gr.update()
730
- for r in rows:
731
- if r["id"] == selected_id:
732
- return r["question"], r["solution"]
733
- return gr.update(), gr.update()
734
-
735
- def ui_surprise(selector, filter_label):
736
- """Pick one example and push it straight to inputs."""
737
  r = selector.surprise(filter_label=filter_label)
738
  if not r:
739
- # no more examples; keep inputs unchanged
740
- return gr.update(), gr.update()
741
- return r["question"], r["solution"]
742
 
743
 
744
  # ---------------- UI: add CSV-driven examples ----------------
@@ -751,7 +717,6 @@ with gr.Blocks(title="Math Solution Classifier", theme=gr.themes.Soft()) as app:
751
 
752
  # Per-session state
753
  selector_state = gr.State(new_selector())
754
- rows_state = gr.State([]) # list[dict] rows currently in the browser
755
 
756
  with gr.Row():
757
  # -------- Left: inputs --------
@@ -780,46 +745,18 @@ with gr.Blocks(title="Math Solution Classifier", theme=gr.themes.Soft()) as app:
780
  # -------- Curated starter examples (static) --------
781
  gr.Examples(
782
  examples=[
783
- ["Solve for x: 2x + 5 = 13",
784
- "2x + 5 = 13\n2x = 13 - 5\n2x = 8\nx = 4"],
785
- ["John has three apples and Mary has seven, how many apples do they have together?",
786
  "They have 7 + 3 = 11 apples."],
 
 
787
  ["What is 15% of 200?",
788
  "15% = 15/100 = 0.15\n0.15 × 200 = 30"],
 
 
789
  ],
790
  inputs=[question_input, solution_input],
791
  )
792
-
793
- # -------- Dynamic browser (CSV) --------
794
- with gr.Accordion("Browse more examples", open=False):
795
- with gr.Row():
796
- filter_dd = gr.Dropdown(
797
- label="Filter",
798
- choices=[
799
- ("Any", "any"),
800
- ("Correct only", "correct"),
801
- ("Conceptual error only", "conceptual_error"),
802
- ("Computational error only", "computational_error"),
803
- ],
804
- value="any",
805
- allow_custom_value=False,
806
- )
807
- see_more_btn = gr.Button("See more")
808
- reset_list_btn = gr.Button("Reset list")
809
-
810
- examples_df = gr.Dataframe(
811
- headers=["ID", "Label", "Question", "Solution"],
812
- value=[],
813
- interactive=False,
814
- row_count=(0, "dynamic"),
815
- col_count=4,
816
- wrap=True,
817
- height=260,
818
- label="Examples",
819
- )
820
- with gr.Row():
821
- row_picker = gr.Dropdown(label="Select example to load", choices=[], value=None, scale=2)
822
- load_btn = gr.Button("Load to editor", scale=1)
823
 
824
  # ---------- Wiring ----------
825
  # Main classify (streaming)
@@ -831,37 +768,14 @@ with gr.Blocks(title="Math Solution Classifier", theme=gr.themes.Soft()) as app:
831
  concurrency_limit=1,
832
  )
833
 
834
- # Surprise me fills inputs from the CSV pool
835
- surprise_btn.click(
836
- fn=ui_surprise,
837
- inputs=[selector_state, filter_dd],
838
- outputs=[question_input, solution_input],
839
- queue=True,
840
- )
841
-
842
- # See more → appends rows to the browser
843
- see_more_btn.click(
844
- fn=ui_see_more,
845
- inputs=[selector_state, rows_state, filter_dd],
846
- outputs=[rows_state, examples_df, row_picker],
847
- queue=False,
848
- )
849
-
850
- # Reset list → new selector + clear table
851
- reset_list_btn.click(
852
- fn=ui_reset_examples,
853
- inputs=None,
854
- outputs=[selector_state, rows_state, examples_df, row_picker],
855
- queue=False,
856
- )
857
 
858
- # Load selected row → fills main inputs
859
- load_btn.click(
860
- fn=ui_load_selected,
861
- inputs=[rows_state, row_picker],
862
- outputs=[question_input, solution_input],
863
- queue=False,
864
- )
865
 
866
  # Enable queue for streaming
867
  app.queue()
 
693
  ])
694
  return table
695
 
 
 
 
 
 
 
 
696
 
697
  # ===== Gradio callbacks for examples =====
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
698
 
699
+ # ---- replace ui_surprise with this ----
700
+ def ui_surprise(selector, filter_label="any"):
701
+ """Pick one example and push it straight to inputs; persist selector state."""
702
+ if selector is None or not POOL:
703
+ return selector, gr.update(), gr.update()
 
 
 
 
 
 
704
  r = selector.surprise(filter_label=filter_label)
705
  if not r:
706
+ return selector, gr.update(), gr.update()
707
+ return selector, r["question"], r["solution"]
 
708
 
709
 
710
  # ---------------- UI: add CSV-driven examples ----------------
 
717
 
718
  # Per-session state
719
  selector_state = gr.State(new_selector())
 
720
 
721
  with gr.Row():
722
  # -------- Left: inputs --------
 
745
  # -------- Curated starter examples (static) --------
746
  gr.Examples(
747
  examples=[
748
+ ["John has three apples and Mary has seven, how many apples do they have together?",
 
 
749
  "They have 7 + 3 = 11 apples."],
750
+ ["A tank holds 60 liters of fuel. A generator uses fuel at a rate of 5 liters per hour. After running for 9 hours, how many liters are still in the tank?",
751
+ "The generator uses 5 L/h × 9 h = 45 L of fuel in 9 hours.\n Then, there remain 60 L + 45 L = 105 L in the tank.\n Final answer: 105 L"],
752
  ["What is 15% of 200?",
753
  "15% = 15/100 = 0.15\n0.15 × 200 = 30"],
754
+ ["A 24-meter rope is cut into 6 equal pieces. A climber uses 2 of those pieces. How many meters of rope are still unused?",
755
+ "The length of each piece is 24 / 6 = 4 m.\n The climber uses 2 × 4 m = 8 m of rope.\n There are 24 m − 8 m = 16 m of rope still unused."]
756
  ],
757
  inputs=[question_input, solution_input],
758
  )
759
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
760
 
761
  # ---------- Wiring ----------
762
  # Main classify (streaming)
 
768
  concurrency_limit=1,
769
  )
770
 
771
+ # ---- and replace the Surprise button wiring with this ----
772
+ surprise_btn.click(
773
+ fn=ui_surprise,
774
+ inputs=[selector_state], # no filter_dd anymore
775
+ outputs=[selector_state, question_input, solution_input], # persist selector state
776
+ queue=True,
777
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
778
 
 
 
 
 
 
 
 
779
 
780
  # Enable queue for streaming
781
  app.queue()