import streamlit as st from transformers import pipeline from diff_match_patch import diff_match_patch from langdetect import detect import time # Load models @st.cache_resource def load_grammar_model(): return pipeline("text2text-generation", model="vennify/t5-base-grammar-correction") @st.cache_resource def load_explainer_model(): return pipeline("text2text-generation", model="google/flan-t5-large") @st.cache_resource def load_translation_ur_to_en(): return pipeline("translation", model="Helsinki-NLP/opus-mt-ur-en") @st.cache_resource def load_translation_en_to_ur(): return pipeline("translation", model="Helsinki-NLP/opus-mt-en-ur") # Initialize models grammar_model = load_grammar_model() explainer_model = load_explainer_model() translate_ur_en = load_translation_ur_to_en() translate_en_ur = load_translation_en_to_ur() dmp = diff_match_patch() st.title("📝 AI Grammar & Writing Assistant (Multilingual)") st.markdown("Supports English & Urdu inputs. Fix grammar, punctuation, spelling, tenses — with explanations and writing tips.") # Initialize session state if "corrected_text" not in st.session_state: st.session_state.corrected_text = "" if "detected_lang" not in st.session_state: st.session_state.detected_lang = "" if "history" not in st.session_state: st.session_state.history = [] user_input = st.text_area("✍️ Enter your sentence, paragraph, or essay:", height=200) # Detect & Translate Urdu if needed def detect_and_translate_input(text): lang = detect(text) if lang == "ur": st.info("🔄 Detected Urdu input. Translating to English for grammar correction...") translated = translate_ur_en(text)[0]['translation_text'] return translated, lang return text, lang # Button: Grammar Correction if st.button("✅ Correct Grammar"): if user_input.strip(): translated_input, lang = detect_and_translate_input(user_input) st.session_state.detected_lang = lang corrected = grammar_model(f"grammar: {translated_input}", max_length=512, do_sample=False)[0]["generated_text"] st.session_state.corrected_text = corrected # Show corrected text st.subheader("✅ Corrected Text (in English)") st.success(corrected) # Highlight changes st.subheader("🔍 Changes Highlighted") diffs = dmp.diff_main(translated_input, corrected) dmp.diff_cleanupSemantic(diffs) html_diff = "" for (op, data) in diffs: if op == -1: html_diff += f'{data}' elif op == 1: html_diff += f'{data}' else: html_diff += data st.markdown(f"