| !pip install tensorflow |
| import gradio as gr |
| import numpy as np |
| from tensorflow.keras.models import load_model, save_model |
| from tensorflow.keras.preprocessing.sequence import pad_sequences |
| from tensorflow.keras.preprocessing.text import tokenizer_from_json |
| from tensorflow.keras.utils import to_categorical |
| import json |
|
|
| |
| model = load_model("code_language_cnn.keras") |
| with open("tokenizer.json", "r") as f: |
| tokenizer_data = f.read() |
| tokenizer = tokenizer_from_json(tokenizer_data) |
|
|
| max_sequence_length = 500 |
| languages = ["C", "C++", "JAVA", "Python"] |
|
|
| |
| try: |
| with open("feedback.json", "r") as f: |
| feedback_data = json.load(f) |
| except FileNotFoundError: |
| feedback_data = [] |
|
|
| |
| def predict_language(code_snippet): |
| seq = tokenizer.texts_to_sequences([code_snippet]) |
| padded_seq = pad_sequences(seq, maxlen=max_sequence_length, padding='post', truncating='post') |
| predictions = model.predict(padded_seq)[0] |
| confidence_scores = {languages[i]: f"{predictions[i] * 100:.2f}%" for i in range(len(languages))} |
| predicted_language = languages[np.argmax(predictions)] |
| return predicted_language, confidence_scores |
|
|
| |
| def provide_feedback(code_snippet, predicted_language, feedback, correct_language=None): |
| global feedback_data |
|
|
| feedback_entry = { |
| "code": code_snippet, |
| "predicted_language": predicted_language, |
| "feedback": feedback, |
| "correct_language": correct_language if feedback == "Incorrect" else predicted_language |
| } |
| feedback_data.append(feedback_entry) |
|
|
| |
| with open("feedback.json", "w") as f: |
| json.dump(feedback_data, f, indent=4) |
|
|
| |
| if feedback == "Incorrect": |
| retrain_model(code_snippet, correct_language) |
|
|
| return "Thank you for your feedback!" |
|
|
| |
| def retrain_model(): |
| global model |
| |
| if feedback_data.count("Incorrect") < 10: |
| return |
| feedback_texts = [entry["code"] for entry in feedback_data] |
| feedback_labels = [entry["correct_language"] for entry in feedback_data] |
|
|
| |
| seq = tokenizer.texts_to_sequences(feedback_texts) |
| padded_seq = pad_sequences(seq, maxlen=max_sequence_length, padding='post', truncating='post') |
|
|
| |
| labels = [languages.index(lang) for lang in feedback_labels] |
| labels = to_categorical(labels, num_classes=len(languages)) |
|
|
| |
| model.fit(padded_seq, labels, epochs=2, batch_size=32, verbose=1) |
| feedback_data = [] |
| |
| |
| print("Model retrained") |
|
|
| |
| def interface_func(code_snippet): |
| predicted_language, confidence_scores = predict_language(code_snippet) |
| return predicted_language, confidence_scores |
|
|
| |
| with gr.Blocks() as demo: |
| gr.Markdown("### Programming Language Detection with Feedback") |
| code_input = gr.Textbox(label="Enter Code Snippet") |
| predict_button = gr.Button("Predict") |
| predicted_label = gr.Label(label="Predicted Language") |
| confidence_output = gr.JSON(label="Confidence Scores") |
|
|
| feedback_dropdown = gr.Radio(["Correct", "Incorrect"], label="Was the prediction correct?") |
| correct_language_dropdown = gr.Dropdown(languages, label="If incorrect, select the correct language (optional)") |
| feedback_button = gr.Button("Submit Feedback") |
| feedback_message = gr.Label(label="Feedback Status") |
|
|
| |
| predict_button.click( |
| interface_func, |
| inputs=[code_input], |
| outputs=[predicted_label, confidence_output] |
| ) |
|
|
| |
| feedback_button.click( |
| provide_feedback, |
| inputs=[code_input, predicted_label, feedback_dropdown, correct_language_dropdown], |
| outputs=[feedback_message] |
| ) |
|
|
| |
| demo.launch(share=True) |
|
|