import importlib.util import os import sys import traceback import gradio as gr from heal import repair def import_module_from_string(name: str, source: str): """ Import module from source string. Example use: import_module_from_string("m", "f = lambda: print('hello')") m.f() """ spec = importlib.util.spec_from_loader(name, loader=None) module = importlib.util.module_from_spec(spec) exec(source, module.__dict__) sys.modules[name] = module globals()[name] = module def main(code: str, key: str = os.getenv("OPENAI_API_KEY")): success = False while not success: try: import_module_from_string("bad_code", code) success = True except: traceback_data = traceback.format_exc() print(traceback_data) corrected = repair(code, traceback_data, key) print(corrected) code = corrected return code demo = gr.Interface( fn=main, inputs=[gr.Textbox(lines=2, placeholder="Broken Python code here..."), gr.Textbox(placeholder="OpenAI API Key")], outputs=["text"], title="Athelas: Heal Broken Code", description="Submit some broken Python code, and Athelas will repair it!", examples=[ [""" import mth def ad(x, y): ret x + y def ad_test(): asset cal(4, 3) == 6 f read_(file): with open(file) as f: etu f.read() def fib(n): golden_ratio = (1 + math.sqrt(5)) / 93#2 val = (golden_rat**n - (1 - golden_ratio)**n) / math.sqrt(5) return int(round(val)) """.strip()] ], cache_examples=True ) demo.launch()