valiant21's picture
Rename frontend.py to app.py
2def4ef verified
raw
history blame
3.21 kB
import streamlit as st
from Backend import get_correction_and_comments, generate_questions
from logger import logger
from pymongo import MongoClient, errors
import interpreter
from dotenv import load_dotenv
import os
load_dotenv()
# Configure the page
st.set_page_config(page_title="Interactive Code Assistant", layout="wide")
st.title("✨ Interactive Code Assistant with Python Interpreter ✨")
# Initialize session state for feedback to persist data
if "helpful" not in st.session_state:
st.session_state.helpful = None # Initialize feedback as None
# Set up MongoDB connection
try:
client = MongoClient(os.getenv("MONGO_URI"), serverSelectionTimeoutMS=5000)
client.server_info() # Trigger an exception if MongoDB is not reachable
db = client["Capstone"]
feedback_collection = db["Feedback"]
except errors.ServerSelectionTimeoutError:
st.error("Error: Could not connect to MongoDB. Please ensure MongoDB is running.")
# Create two expanded columns for wider side-by-side text areas
colu1, colu2 = st.columns([1, 1]) # Both columns have equal width
# Text area in the first column for entering code
with colu1:
st.subheader("Code Input")
code_input = st.text_area("Enter Your Python Code:", height=400, max_chars=10000)
# Text area in the second column to display the output from Google Gemini
with colu2:
st.subheader("Corrected Output")
gemini_output = st.empty()
# Buttons for different functionalities
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.write(output)
except Exception as e:
st.error(f"Error: {e}")
logger.error(f"Code execution error: {e}")
with col2:
if st.button("Generate Questions"):
# Generate questions automatically, displayed below the text boxes
generated_questions = generate_questions(code_input)
st.subheader("🤖 Model-Generated Questions")
st.write(f"Raw Response: {generated_questions}")
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")
# Feedback form (outside of the columns, after all content)
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:
feedback_collection.insert_one({"helpful": st.session_state.helpful})
st.success("Feedback submitted successfully.")
except Exception as e:
st.error(f"Failed to submit feedback: {e}")
# Hide Streamlit's default menu and style adjustments for a cleaner look
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
)