| import streamlit as st |
| import sqlite3 |
| from Backend import get_correction_and_comments, generate_questions |
| from logger import logger |
| import interpreter |
| from dotenv import load_dotenv |
| import os |
|
|
| load_dotenv() |
|
|
| |
| st.set_page_config(page_title="Interactive Code Assistant", layout="wide") |
| st.title("✨ Interactive Code Assistant with Python Interpreter ✨") |
|
|
| |
| if "helpful" not in st.session_state: |
| st.session_state.helpful = None |
|
|
| |
| def init_sqlite(): |
| conn = sqlite3.connect("feedback.db") |
| cursor = conn.cursor() |
| |
| cursor.execute(""" |
| CREATE TABLE IF NOT EXISTS Feedback ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| helpful TEXT NOT NULL, |
| question_type TEXT NOT NULL |
| ) |
| """) |
| conn.commit() |
| return conn |
|
|
| |
| colu1, colu2 = st.columns([1, 1]) |
|
|
| |
| with colu1: |
| st.subheader("Code Input") |
| code_input = st.text_area("Enter Your Python Code:", height=400, max_chars=10000) |
|
|
| |
| with colu2: |
| st.subheader("Corrected Output") |
| gemini_output = st.empty() |
|
|
| |
| st.subheader("Select Question Type") |
| question_type = st.selectbox( |
| "Choose the type of questions to generate:", |
| ["Logical Questions", "Interview-Based Questions", "Code Analysis Questions"] |
| ) |
|
|
| |
| col1, col2, col3 = st.columns([0.3, 0.3, 0.3]) |
|
|
| |
| with init_sqlite() as conn: |
| with col1: |
| if st.button("Run Code"): |
| try: |
| output = interpreter.run_code(code_input) |
| st.subheader("✨ Code Output ✨") |
| st.text_area("Execution Output", output, height=600, max_chars=None) |
| except Exception as e: |
| st.error(f"Error executing code: {e}") |
| logger.error(f"Code execution error: {e}") |
|
|
| with col2: |
| if st.button("Generate Questions"): |
| logger.info(f"Generating {question_type.lower()}.") |
| try: |
| |
| generated_questions = generate_questions(code_input, question_type) |
| st.subheader(f"🤖 Model-Generated {question_type}") |
| st.write(generated_questions) |
| except Exception as e: |
| st.error(f"Error: Could not generate questions: {e}") |
| logger.error(f"Question generation error: {e}") |
|
|
| with col3: |
| if st.button("Corrected Code"): |
| logger.info("User requested code correction.") |
| try: |
| corrected_code = get_correction_and_comments(code_input) |
| gemini_output.code(corrected_code, language="python") |
| except Exception as e: |
| st.error(f"Error: Could not generate corrected code: {e}") |
| logger.error(f"Code correction error: {e}") |
|
|
| |
| st.subheader("Feedback") |
| if st.session_state.helpful is None: |
| st.session_state.helpful = "No" |
|
|
| st.session_state.helpful = st.radio("Were the questions helpful?", ("Yes", "No")) |
|
|
| if st.button("Submit Feedback"): |
| if st.session_state.helpful is not None: |
| try: |
| cursor = conn.cursor() |
| cursor.execute("INSERT INTO Feedback (helpful, question_type) VALUES (?, ?)", |
| (st.session_state.helpful, question_type)) |
| conn.commit() |
| st.success("Feedback submitted successfully.") |
| except Exception as e: |
| st.error(f"Failed to submit feedback: {e}") |
|
|
| |
| st.markdown( |
| """ |
| <style> |
| .reportview-container .main .block-container { |
| padding-top: 1rem; |
| padding-bottom: 1rem; |
| max-width: 1200px; |
| } |
| .stTextArea { |
| font-size: 14px; |
| } |
| </style> |
| """, |
| unsafe_allow_html=True |
| ) |
|
|