|
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 |
|
|
|
conn = init_sqlite() |
|
|
|
|
|
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 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: {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.") |
|
corrected_code = get_correction_and_comments(code_input) |
|
gemini_output.code(corrected_code, language="python") |
|
|
|
|
|
st.subheader("Feedback") |
|
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 |
|
) |