Team Ai
Apppublic

aabdoo234/programmingLanguagePredictorCNN

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
0likes
app.py109 linesDownload Raw Back to root
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