Spaces:
Sleeping
Sleeping
| import gradio | |
| import os | |
| import sys | |
| sys.path.insert(0, os.path.abspath("./")) | |
| from source.api_calls.initiate_pipeline_call import initiate_pipeline_call | |
| from utils.process_steps import process_steps | |
| pipeline_steps = 21 | |
| class FrontPage: | |
| def __init__(self): | |
| with gradio.Blocks(css=self.custom_css()) as self.page: | |
| gradio.Markdown("# Code Repair with LLMs") | |
| gradio.Markdown("Upload a Python, Java, C, or C++ file for processing") | |
| with gradio.Row(): | |
| file_input = gradio.File(label="Upload Code File", file_types=[".py", ".java", ".c", ".cpp"]) | |
| language_input = gradio.Dropdown(choices=["Python", "Java", "C", "C++"], label="Language") | |
| file_content = gradio.Code(label="File Contents", language="python", interactive=False, elem_classes=["fixed-height"]) | |
| process_button = gradio.Button("Process") | |
| with gradio.Row(): | |
| stage1 = gradio.Textbox(label="Fault Localization", value="Pending", interactive=False, elem_classes=["stage-box"]) | |
| stage2 = gradio.Textbox(label="Pattern Matching", value="Pending", interactive=False, elem_classes=["stage-box"]) | |
| stage3 = gradio.Textbox(label="Patch Generation", value="Pending", interactive=False, elem_classes=["stage-box"]) | |
| stage4 = gradio.Textbox(label="Patch Validation", value="Pending", interactive=False, elem_classes=["stage-box"]) | |
| output = gradio.Code(label="Processed Output", language="python", elem_classes=["fixed-height"]) | |
| pipeline_steps_input = gradio.Number(value=pipeline_steps, label="Pipeline Steps") | |
| file_input.change(fn=self.display_file_content, inputs=[file_input], outputs=[file_content]) | |
| process_button.click(fn=self.initiate_pipeline, | |
| inputs=[file_input, language_input, pipeline_steps_input], outputs=[]) | |
| def custom_css(self): | |
| return """ | |
| .fixed-height { | |
| height: 300px !important; | |
| overflow-y: auto !important; | |
| } | |
| .stage-box { | |
| text-align: center !important; | |
| font-weight: bold !important; | |
| } | |
| """ | |
| def display_file_content(self, file): | |
| if file is None: | |
| return "No file uploaded yet." | |
| try: | |
| if isinstance(file, str): | |
| with open(file, 'r') as f: | |
| return f.read() | |
| elif hasattr(file, 'name'): | |
| return file.name | |
| elif hasattr(file, 'read'): | |
| return file.read().decode('utf-8') | |
| else: | |
| return str(file) | |
| except Exception as e: | |
| return f"An error occurred while reading the file: {str(e)}" | |
| def initiate_pipeline(self, file_input, language_input, pipeline_steps): | |
| if file_input is None or (isinstance(file_input, list) and len(file_input) == 0): | |
| return "No file uploaded." | |
| self.process_file(file_input, language_input) | |
| # If file_input is a list, take the first file | |
| if isinstance(file_input, list): | |
| file_input = file_input[0] | |
| print(f"Processing file: {file_input}") | |
| return initiate_pipeline_call(file_input, pipeline_steps) | |
| def process_file(self, file, language): | |
| if file is None: | |
| return "Skipped", "Skipped", "Skipped", "Skipped", "Please upload a file." | |
| try: | |
| content = self.display_file_content(file) | |
| stage1_result = "Complete" | |
| stage2_result = "Complete" | |
| stage3_result = "Complete" | |
| stage4_result = "Complete" | |
| processed_content = self.process_content(content, language) | |
| return stage1_result, stage2_result, stage3_result, stage4_result, processed_content | |
| except Exception as e: | |
| return "Error", "Error", "Error", "Error", f"An error occurred: {str(e)}" | |
| def process_content(self, content, language): | |
| # This is where you would implement your actual processing logic | |
| # For now, we'll just return the file content with a message | |
| return f"Processing {language} code:\n\n{content}\n\nProcessing complete." | |