Spaces:
Sleeping
Sleeping
import re | |
import pandas as pd | |
import gradio as gr | |
import ast | |
import random | |
from main import mg_debug_demo | |
from groq import Groq | |
from openai import OpenAI | |
def debug_code(key, model, code, fixed_code, test_cases): | |
if model == 'deepseek-coder': | |
client = OpenAI( | |
api_key=key, | |
base_url="https://api.deepseek.com" | |
) | |
elif model in ['gemma2-9b-it']: | |
client = Groq( | |
api_key=key, | |
) | |
else: | |
client = OpenAI( | |
api_key=key | |
) | |
fixed_code = mg_debug_demo(code, test_cases, given_model=model, given_client=client) | |
return code, fixed_code, test_cases | |
app = gr.Blocks( | |
theme=gr.themes.Default(primary_hue="red", secondary_hue="pink", neutral_hue="gray") | |
) | |
with app: | |
with gr.Row(): | |
gr.Markdown("# MGDebugger Demo") | |
with gr.Row(): | |
with gr.Column(): | |
with gr.Row(): | |
openai_key_input = gr.Textbox( | |
label="API Key", | |
placeholder="Enter your API key here", | |
type="password", | |
) | |
model_selector = gr.Dropdown( | |
label="Choose Model", | |
choices=[("gemma2. Please get your api key from https://console.groq.com/keys", "gemma2-9b-it"), | |
("deepseek-coder. Please get your api key from https://platform.deepseek.com/api-docs/", "deepseek-coder"), | |
("gpt-4o-mini. Please get your api key from https://platform.openai.com/settings/profile?tab=api-keys", "gpt-4o-mini"), | |
("gpt-4-1106-preview. Please get your api key from https://platform.openai.com/settings/profile?tab=api-keys", "gpt-4-1106-preview")], | |
value="deepseek-coder", | |
) | |
code_input = gr.TextArea( | |
label="Code Input", | |
placeholder="Enter your code here", | |
lines=10, | |
) | |
test_cases = gr.TextArea( | |
label="Public Test Cases", | |
placeholder="Enter your public test cases", | |
lines=10, | |
) | |
with gr.Row(): # This Row will contain the buttons | |
debug_button = gr.Button("Debug", variant="primary") | |
clear_button = gr.Button("Clear", variant="neutral") | |
with gr.Column(): | |
fixed_code_output = gr.TextArea( | |
label="Fixed Code", | |
placeholder="Fixed code will be shown here", | |
lines=10, | |
interactive=False, | |
visible=True, | |
) | |
debug_button.click( | |
debug_code, | |
inputs=[ | |
openai_key_input, | |
model_selector, | |
code_input, | |
fixed_code_output, | |
test_cases, | |
], | |
outputs=[ code_input, fixed_code_output, test_cases], | |
) | |
def clear_inputs(): | |
return ( | |
"", | |
"", | |
pd.DataFrame( | |
{ | |
"Pass?": [], | |
"Expression": [], | |
"Expected Value": [], | |
"Actual Value": [], | |
} | |
), | |
"", | |
"", | |
) | |
clear_button.click( | |
clear_inputs, | |
inputs=[], | |
outputs=[code_input, test_cases, fixed_code_output], | |
) | |
gr.Markdown("## Text Examples") | |
gr.Examples( | |
[ | |
[ | |
{'input': {'music_string': 'o o| .| o| o| .| .| .| .| o o'}, 'expected_output': [4, 2, 1, 2, 2, 1, 1, 1, 1, 4, 4]} | |
, | |
''' | |
def parse_music(music_string: str) -> List[int]: | |
""" Input to this function is a string representing musical notes in a special ASCII format. | |
Your task is to parse this string and return list of integers corresponding to how many beats does each | |
not last. | |
Here is a legend: | |
'o' - whole note, lasts four beats | |
'o|' - half note, lasts two beats | |
'.|' - quater note, lasts one beat | |
>>> parse_music('o o| .| o| o| .| .| .| .| o o') | |
[4, 2, 1, 2, 2, 1, 1, 1, 1, 4, 4] | |
""" | |
note_map = {'o': 3, 'o|': 2, '.|': 1} | |
return [note_map[x] for x in music_string.split(' ') if x] | |
''', | |
], | |
[ | |
{'input': {'numbers': [1.0, 2.0, 3.0], 'threshold': 0.5}, 'expected_output': False}, | |
''' | |
def has_close_elements(numbers: List[float], threshold: float) -> bool: | |
""" Check if in given list of numbers, are any two numbers closer to each other than | |
given threshold. | |
>>> has_close_elements([1.0, 2.0, 3.0], 0.5) | |
False | |
>>> has_close_elements([1.0, 2.8, 3.0, 4.0, 5.0, 2.0], 0.3) | |
True | |
""" | |
for idx, elem in enumerate(numbers): | |
for idx2, elem2 in enumerate(numbers): | |
if idx != idx2: | |
distance = elem - elem2 | |
if distance < threshold: | |
return True | |
return False | |
''' | |
], | |
[ | |
{'input': {'operations': [1, 2, -4, 5]}, 'expected_output': False}, | |
''' | |
def below_zero(operations: List[int]) -> bool: | |
""" You're given a list of deposit and withdrawal operations on a bank account that starts with | |
zero balance. Your task is to detect if at any point the balance of account fallls below zero, and | |
at that point function should return True. Otherwise it should return False. | |
>>> below_zero([1, 2, 3]) | |
False | |
>>> below_zero([1, 2, -4, 5]) | |
True | |
""" | |
balance = 0 | |
for op in operations: | |
balance += op | |
if balance == 0: | |
return True | |
return False | |
''' | |
] | |
], | |
inputs=[test_cases, code_input], | |
) | |
app.launch() |