Spaces:
Sleeping
Sleeping
| 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() | |