aabdoo234/programmingLanguagePredictorCNN
0
1import gradio as gr2import numpy as np3from tensorflow.keras.models import load_model, save_model4from tensorflow.keras.preprocessing.sequence import pad_sequences5from tensorflow.keras.preprocessing.text import tokenizer_from_json6from tensorflow.keras.utils import to_categorical7import json8 9# Load the pre-trained model and tokenizer10model = load_model("code_language_cnn.keras") 11with open("tokenizer.json", "r") as f:12 tokenizer_data = f.read() 13tokenizer = tokenizer_from_json(tokenizer_data)14 15max_sequence_length = 500 16languages = ["C", "C++", "JAVA", "Python"]17 18# try:19# with open("feedback.json", "r") as f:20# feedback_data = json.load(f)21# except FileNotFoundError:22# feedback_data = []23 24def predict_language(code_snippet):25 seq = tokenizer.texts_to_sequences([code_snippet])26 padded_seq = pad_sequences(seq, maxlen=max_sequence_length, padding='post', truncating='post')27 predictions = model.predict(padded_seq)[0]28 confidence_scores = {languages[i]: f"{predictions[i] * 100:.2f}%" for i in range(len(languages))}29 predicted_language = languages[np.argmax(predictions)]30 return predicted_language, confidence_scores31 32# def provide_feedback(code_snippet, predicted_language, feedback, correct_language=None):33# global feedback_data34 35# feedback_entry = {36# "code": code_snippet,37# "predicted_language": predicted_language,38# "feedback": feedback,39# "correct_language": correct_language if feedback == "Incorrect" else predicted_language40# }41# feedback_data.append(feedback_entry)42 43# # Save feedback to file44# with open("feedback.json", "w") as f:45# json.dump(feedback_data, f, indent=4)46 47# if feedback == "Incorrect":48# retrain_model()49 50# return "Thank you for your feedback!"51 52# def retrain_model():53# global model54# # Prepare the feedback data (new training data)55# if feedback_data.count("Incorrect") < 10: # Minimum 10 incorrect feedbacks required to retrain56# return57# feedback_texts = [entry["code"] for entry in feedback_data]58# feedback_labels = [entry["correct_language"] for entry in feedback_data]59 60# # Tokenize and pad the new data61# seq = tokenizer.texts_to_sequences(feedback_texts)62# padded_seq = pad_sequences(seq, maxlen=max_sequence_length, padding='post', truncating='post')63 64# # Convert labels to categorical (one-hot encoding)65# labels = [languages.index(lang) for lang in feedback_labels]66# labels = to_categorical(labels, num_classes=len(languages))67 68# # Retrain the model69# model.fit(padded_seq, labels, epochs=2, batch_size=32, verbose=1)70# feedback_data = [] # Clear the feedback data after retraining71# # Save the retrained model72# # model.save("code_language_cnn_retrained.keras")73# print("Model retrained")74 75# Define Gradio components76def interface_func(code_snippet):77 predicted_language, confidence_scores = predict_language(code_snippet)78 return predicted_language, confidence_scores79 80# Build Gradio interface81with gr.Blocks() as demo:82 gr.Markdown("### Programming Language Detection with Feedback")83 code_input = gr.Textbox(label="Enter Code Snippet")84 predict_button = gr.Button("Predict")85 predicted_label = gr.Label(label="Predicted Language")86 confidence_output = gr.JSON(label="Confidence Scores")87 88 # feedback_dropdown = gr.Radio(["Correct", "Incorrect"], label="Was the prediction correct?")89 # correct_language_dropdown = gr.Dropdown(languages, label="If incorrect, select the correct language (optional)")90 # feedback_button = gr.Button("Submit Feedback")91 # feedback_message = gr.Label(label="Feedback Status")92 93 # Prediction workflow94 predict_button.click(95 interface_func,96 inputs=[code_input],97 outputs=[predicted_label, confidence_output]98 )99 100 # Feedback workflow101 # feedback_button.click(102 # provide_feedback,103 # inputs=[code_input, predicted_label, feedback_dropdown, correct_language_dropdown],104 # outputs=[feedback_message]105 # )106 107# Launch the interface108demo.launch()109 