rootacess's picture
Update app.py
1904c80
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
# User Interface Part
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()