english / app.py
Dearsawan's picture
englishlearn
7d686cd verified
import os
import streamlit as st
from groq import Groq
# Set up Streamlit page configuration
st.set_page_config(
page_title="Writing Assistant",
page_icon="✍️",
layout="wide",
)
# Streamlit UI
st.title("✍️ Writing Assistant for IELTS, DET, and TOEFL")
# Prompt user to input the API key (Secure way)
api_key = st.text_input(
"Enter your Groq API Key:",
type="password",
help="Enter your Groq API key to access the feedback model."
)
# Verify API key
if not api_key:
st.warning("Please enter your Groq API key to proceed.")
st.stop()
# Initialize Groq client
try:
client = Groq(api_key=api_key)
except Exception as e:
st.error(f"Failed to initialize Groq client: {e}")
st.stop()
# Essay plans (30, 45, and 60 days)
plans = {
"30 Days": ["Essay Topic 1", "Essay Topic 2", "Essay Topic 3"],
"45 Days": ["Essay Topic 1", "Essay Topic 2", "Essay Topic 3", "Essay Topic 4"],
"60 Days": ["Essay Topic 1", "Essay Topic 2", "Essay Topic 3", "Essay Topic 4", "Essay Topic 5"]
}
# Select plan
selected_plan = st.selectbox("Choose your plan:", list(plans.keys()), index=0)
topics = plans[selected_plan]
# Day selector dropdown
selected_day = st.slider("Select your current day:", 1, len(topics))
current_topic = topics[selected_day - 1]
# Show the current essay topic
st.subheader(f"📝 Today's Essay Topic: {current_topic}")
# Show upcoming topics
st.markdown("#### Upcoming Topics:")
for i, topic in enumerate(topics[selected_day:], start=selected_day + 1):
st.write(f"Day {i}: {topic}")
# Essay submission
st.markdown("### Write Your Essay Below:")
essay_input = st.text_area("Your essay:", placeholder="Write your essay here...", height=300)
# Submit button
if st.button("Submit for Feedback"):
if not essay_input.strip():
st.error("Please write your essay before submitting.")
else:
# Define the system prompt for the Groq model
system_prompt = """
You are an experienced academic English instructor. You must provide feedback as an English teacher would, giving concise but effective advice to improve the student's writing.
Focus on specific, actionable feedback without lengthy explanations.
For each error or area of improvement:
1. Identify grammar or vocabulary mistakes by saying: "Replace 'X' with 'Y' (Type: Grammar/Vocabulary)".
2. For cohesion, sentence structure, or other improvements, suggest: "Rephrase 'X' as 'Y' for better flow".
3. Provide concise suggestions based on English proficiency levels (A1 to C1).
4. Do not generate vague or lengthy answers; avoid unnecessary technical jargon.
5. Limit feedback to 4-5 actionable points, focusing on the most important improvements.
Essay Analysis Areas: Grammar, cohesion, sentence structure, vocabulary, and effective use of simple, compound, and complex sentences.
"""
# Send the essay to the Groq model
try:
response = client.chat.completions.create(
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": essay_input}
],
model="llama3-8b-8192",
)
# Display feedback
feedback = response.choices[0].message.content
st.success("✅ Feedback Received!")
st.markdown("### Model Feedback:")
st.write(feedback)
except Exception as e:
st.error(f"Failed to get feedback from the model: {e}")