import streamlit as st from openai_client import ( get_code_review_response, refactor_code, code_feedback, suggest_best_practices, remove_code_errors, ) def main(): st.title("CodeMentor - (AI-Enhanced Code Collaboration Tool)") st.subheader("Collaborate, Refactor, and Optimize with AI.") st.write( "A smart tool for distributed teams to automate code reviews, refactor efficiently, and get real-time AI-driven feedback." ) # Instructions st.write( "Upload a file or paste your code below to get an AI-generated code review." ) # Input Methods: File Upload or Text Area uploaded_file = st.file_uploader( "Upload a code file (Max 500 lines)", type=["py", "js", "txt"] ) code_input = st.text_area("Or paste your code here (Max 1000 words)", height=300) # Limit input size for code if uploaded_file: code = uploaded_file.read().decode("utf-8") if len(code.splitlines()) > 500: st.error( "File is too large! Please upload a file with a maximum of 500 lines." ) code = None # Reset code if it's too large else: st.success(f"File uploaded: {uploaded_file.name}") elif code_input: code = code_input if len(code.split()) > 1000: st.error("Code exceeds 1000 words! Please shorten your code.") code = None # Reset code if it's too large else: code = None # Button to trigger code review if st.button("Get Code Review") and code: with st.spinner("Processing..."): # Call the OpenAI API to get code review review = get_code_review_response(code) st.subheader("Code Review Results:") st.write(review) # Provide download option st.download_button( label="Download Code Review", data=review, file_name="code_review.txt", mime="text/plain", ) st.success("You can download the code review as code_review.txt") # Button to trigger code refactoring if st.button("Refactor Code") and code: with st.spinner("Refactoring your code..."): refactored_code = refactor_code(code) st.subheader("Refactored Code:") st.write(refactored_code) # Provide download option for refactored code st.download_button( label="Download Refactored Code", data=refactored_code, file_name="refactored_code.txt", mime="text/plain", ) st.success("You can download the refactored code as refactored_code.txt") # Button to trigger code feedback if st.button("Get Code Feedback") and code: with st.spinner("Getting feedback on your code..."): feedback = code_feedback(code) st.subheader("Code Feedback:") st.write(feedback) # Ensure feedback is a string for download feedback_text = feedback if isinstance(feedback, str) else str(feedback) # Provide download option for code feedback st.download_button( label="Download Code Feedback", data=feedback_text, # Use the extracted string here file_name="code_feedback.txt", mime="text/plain", ) st.success("You can download the code feedback as code_feedback.txt") # Add button to suggest best practices if st.button("Suggest Best Practices") and code: with st.spinner("Getting best practices..."): best_practices = suggest_best_practices(code) st.subheader("Best Practices Suggestions:") st.write(best_practices) # Provide download option for best practices suggestions best_practices_text = ( best_practices if isinstance(best_practices, str) else str(best_practices) ) st.download_button( label="Download Best Practices Suggestions", data=best_practices_text, file_name="best_practices.txt", mime="text/plain", ) st.success( "You can download the best practices suggestions as best_practices.txt" ) # Button to trigger error removal if st.button("Remove Code Errors") and code: with st.spinner("Removing errors from your code..."): error_removal_suggestions = remove_code_errors(code) st.subheader("Error Removal Suggestions:") st.write(error_removal_suggestions) # Provide download option for error removal suggestions error_removal_text = ( error_removal_suggestions if isinstance(error_removal_suggestions, str) else str(error_removal_suggestions) ) st.download_button( label="Download Error Removal Suggestions", data=error_removal_text, file_name="error_removal_suggestions.txt", mime="text/plain", ) st.success( "You can download the error removal suggestions as error_removal_suggestions.txt" ) if __name__ == "__main__": main()