Spaces:
Sleeping
Sleeping
import gradio as gr | |
import google.generativeai as genai | |
from functools import lru_cache | |
import time | |
# Initialize Gemini API (replace with your actual API key) | |
genai.configure(api_key="AIzaSyBPQF0g5EfEPzEiGRzA3iNzJZK4jDukMvE") | |
# Initialize the model | |
model = genai.GenerativeModel('gemini-pro') | |
def get_coding_exercise(topic, difficulty): | |
"""Generate a coding exercise based on the given topic and difficulty.""" | |
prompt = f"""Create a {difficulty} Python coding exercise about {topic}. | |
Provide ONLY the problem statement and expected output , sample input and sample output. | |
Do NOT include any code or solution. | |
Keep it under 100 words and make it clear and concise.""" | |
try: | |
response = model.generate_content(prompt) | |
return response.text | |
except Exception as e: | |
return f"Error generating exercise: {str(e)}" | |
def evaluate_code(exercise, user_code): | |
"""Evaluate the user's code submission.""" | |
prompt = f""" | |
Exercise: {exercise} | |
User's code: | |
{user_code} | |
Perform a concise code review addressing the following points: | |
1. Correctness: Does the code solve the given problem? If not, what's missing? | |
2. Efficiency: Is the solution efficient? Suggest any optimizations if applicable. | |
3. Style and Best Practices: Comment on code style, readability, and adherence to Python best practices. | |
4. Potential Improvements: Offer 1-2 specific suggestions for improving the code. | |
Format your response as follows: | |
Correctness: [Your evaluation] | |
Efficiency: [Your evaluation] | |
Style: [Your evaluation] | |
Improvements: [Your suggestions] | |
Keep the entire response under 200 words and be specific in your feedback. | |
""" | |
try: | |
response = model.generate_content(prompt) | |
return response.text | |
except Exception as e: | |
return f"Error evaluating code: {str(e)}" | |
def tutor_interface(topic, difficulty): | |
with gr.Row(): | |
gr.Markdown("Generating exercise...") | |
time.sleep(0.1) # Small delay to ensure loading message is shown | |
exercise = get_coding_exercise(topic, difficulty) | |
return exercise | |
def submit_solution(exercise, user_code): | |
with gr.Row(): | |
gr.Markdown("Evaluating solution...") | |
time.sleep(0.1) # Small delay to ensure loading message is shown | |
feedback = evaluate_code(exercise, user_code) | |
return feedback | |
# Create the Gradio interface | |
with gr.Blocks() as demo: | |
gr.Markdown("# Intelligent Code Tutor") | |
with gr.Row(): | |
topic_input = gr.Textbox(label="Topic (e.g., 'loops', 'lists', 'functions')") | |
difficulty_input = gr.Dropdown(["easy", "medium", "hard"], label="Difficulty") | |
generate_btn = gr.Button("Generate Exercise") | |
exercise_output = gr.Textbox(label="Coding Exercise", lines=10) | |
generate_btn.click(tutor_interface, inputs=[topic_input, difficulty_input], outputs=exercise_output) | |
code_input = gr.Code(language="python", label="Your Solution") | |
submit_btn = gr.Button("Submit Solution") | |
feedback_output = gr.Textbox(label="Feedback", lines=10) | |
submit_btn.click(submit_solution, inputs=[exercise_output, code_input], outputs=feedback_output) | |
if __name__ == "__main__": | |
demo.launch() |