|
import gradio as gr |
|
from pal import solve_pal |
|
from mathprompter import solve_mp |
|
from TA import solve_ta |
|
from utils import run_code |
|
|
|
|
|
def run(question, method): |
|
if method == "PAL": |
|
code_op, generated_code = solve_pal(question) |
|
if code_op is not None: |
|
return code_op, gr.Code.update(value=generated_code, interactive=True), gr.Button.update(visible=True) |
|
else: |
|
return ( |
|
"Code execution failed, please review it from below and re-run it or try-asking again with more details", |
|
gr.Code.update(value=generated_code, interactive=True), gr.Button.update(visible=True)) |
|
|
|
elif method == "TA": |
|
code_op, generated_code = solve_ta(question) |
|
if code_op is not None: |
|
return code_op, gr.Code.update(value=generated_code, interactive=True), gr.Button.update(visible=True) |
|
else: |
|
return ( |
|
"Code execution failed, please review it from below and re-run it or try-asking again with more details", |
|
gr.Code.update(value=generated_code, interactive=True), gr.Button.update(visible=True)) |
|
|
|
elif method == "MathPrompter": |
|
exp_op, code_op, generated_code, generated_exp = solve_mp(question) |
|
display_value = generated_exp + "\n\n" + generated_code |
|
if code_op is not None: |
|
ans = f"Answer from Expression execution: {exp_op} \nAnswer from Code execution: {code_op} " |
|
return ans, gr.Code.update(value=display_value, interactive=True), gr.Button.update(visible=True) |
|
else: |
|
return ( |
|
"Code execution failed, please review it from below and re-run it or try-asking again with more details", |
|
gr.Code.update(value=display_value, interactive=True), gr.Button.update(visible=True)) |
|
|
|
else: |
|
raise gr.Error("Please select the evaluating strategy from dropdown") |
|
|
|
|
|
def run_edits(code): |
|
if "input(" in code: |
|
return "Code execution failed, Please remove any input statement or bugs", code |
|
try: |
|
code_op = run_code(code) |
|
return code_op, code |
|
except: |
|
return "Code execution failed, please review it from below and re-run it or try-asking again with more details", code |
|
|
|
|
|
|
|
theme = gr.themes.Monochrome( |
|
primary_hue="indigo", |
|
secondary_hue="blue", |
|
neutral_hue="slate", |
|
radius_size=gr.themes.sizes.radius_sm, |
|
font=[gr.themes.GoogleFont("Open Sans"), "ui-sans-serif", "system-ui", "sans-serif"], |
|
) |
|
|
|
|
|
demo = gr.Blocks(title="Reasoning with StarCoder π«", theme=theme) |
|
|
|
|
|
def render_instruction(mtd): |
|
if mtd == "PAL": |
|
return gr.Textbox.update( |
|
value=''' |
|
π« Query can be an instruction or a direct question starting with What, Find, etc. |
|
π« Use numbers wherever possible, i.e use 2 instead of two |
|
π« Example: What is the value of sin(30)? |
|
''', |
|
visible=True |
|
) |
|
if mtd == "TA": |
|
return gr.Textbox.update( |
|
value=''' |
|
π« Query should be a direct instruction or a question, try to provide much context as possible |
|
π« Use numbers wherever possible, i.e use 2 instead of two |
|
π« Example: Write the code to find 7th Fibonacci number. |
|
''', |
|
visible=True |
|
) |
|
if mtd == "MathPrompter": |
|
return gr.Textbox.update( |
|
value=''' |
|
π« Query should be a direct question, can start by giving a context and then asking the intended segment. |
|
π« Use numbers wherever possible, i.e use 2 instead of two |
|
π« Example: The dimensions of the input image are 80x80, if the filter of 3x3 size is convoluted on the image, what are the dimensions of output image? |
|
''', |
|
visible=True |
|
) |
|
|
|
description = ''' |
|
<h1 style="text-align: center; font-size: 40px;"><strong>Reasoning with <span style='color: #ff75b3;'> StarCoder π«</span></strong></h1> |
|
<br /> |
|
<span style='font-size: 18px;'>This space is a playground for allowing users to interact with <a href="https://huggingface.co/bigcode/large-model" style="color: #ff75b3;">StarCoder</a> and assessing its reasoning capabilities. |
|
User can select any of the evaluating strategies from the available ones <u>PAL</u>, <u>TA</u> and <u>MathPrompter</u> following with asking the query in English. The model generated code with respect to the selected strategy will be executed in the server and result is displayed. |
|
In addition, the space enables users to edit the generated code and re-run it, providing a high degree of flexibility and customization in the solution process.</span> |
|
''' |
|
|
|
|
|
with demo: |
|
gr.Markdown(description, interactive=False) |
|
with gr.Row(): |
|
methods = gr.Dropdown(choices=['PAL', 'TA', 'MathPrompter'], value="PAL",interactive=True, label="Evaluation Strategies") |
|
question_input = gr.Textbox(label="Question", lines=1, placeholder="Enter your question here...") |
|
|
|
instruction = gr.Textbox(label="Instructions", visible=True, interactive=False, value=render_instruction("PAL")['value']) |
|
methods.change(fn=render_instruction, inputs=methods, outputs=instruction) |
|
|
|
question_output = gr.Textbox(label="Answer", interactive=True) |
|
code = gr.Code(language="python", interactive=True, label="Generated Code (Editable)") |
|
submit_btn = gr.Button("Submit") |
|
edit_btn = gr.Button("Run the edited code", visible=False) |
|
|
|
submit_btn.click(run, inputs=[question_input, methods], outputs=[question_output, code, edit_btn]) |
|
edit_btn.click(run_edits, inputs=code, outputs=[question_output, code]) |
|
gr.Examples( |
|
examples=[ |
|
[ |
|
"The dimensions of the input image are 80x80, if the filter of 3x3 size is convoluted on the image, what are the dimensions of output image?", |
|
"PAL"], |
|
[ |
|
"The dimensions of the input image are 80x80, if the filter of 3x3 size is convoluted on the image, what are the dimensions of output image?", |
|
"MathPrompter"], |
|
["What is the value of sin(30)?", "PAL"], |
|
["How many subarrays can be made from array of length 5?", "TA"], |
|
["Write the code to find 7th Fibonacci number.", "TA"], |
|
["Write a program to filter all the odd numbers from a python list", "PAL"], |
|
], |
|
inputs=[question_input, methods], |
|
outputs=[question_output, code, edit_btn], |
|
fn=run, |
|
cache_examples=False, |
|
label="Sample Questions", |
|
) |
|
|
|
demo.launch() |
|
|