Spaces:
Build error
Build error
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 | |
) | |