File size: 6,086 Bytes
9b4edaf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
076bdf6
 
9b4edaf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
076bdf6
9b4edaf
 
076bdf6
9b4edaf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
076bdf6
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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(token, question, method):
    if len(token) == 0:
        raise gr.Error("Please provide a valid Hugging Face access token")
    if method == "PAL":
        code_op, generated_code = solve_pal(question, token)
        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, token)
        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 = solve_mp(question, token)

        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=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))

    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

TITLE = "Reasoning with StarCoder πŸ’«"
demo = gr.Blocks(title=TITLE, theme=gr.themes.Default())


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 starting with *write the code* and the main question.
            πŸ’« 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
        )


with demo:
    gr.HTML(f"<center><h1>{TITLE}<h1></center>")

    access_token = gr.Textbox(type="password", label="Hugging Face Access Token")
    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=False)
    code = gr.Code(language="python", interactive=False, label="Generated Code (Editable)")
    submit_btn = gr.Button("Submit")
    edit_btn = gr.Button("Run the edited code", visible=False)

    submit_btn.click(run, inputs=[access_token, 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"],
            ["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()

'''
Carol was playing a trivia game. In the first round she scored 17 points and in the second round she scored 6 points. In the last round she lost 16 points. How many points did she have at the end of the game?
While on vacation, Debby took 24 pictures at the zoo and 12 at the museum. If she later deleted 14 of the pictures, how many pictures from her vacation did she still have?
I had 5 apples, I gave 3 to my brother and 4 to my uncle. How many apples I am left with? 
'''