# app.py # Advanced AI Humanizer Pro (Full + Light) for Hugging Face Spaces # Author: Saber (Mahmoud Saber) import os import random import re import nltk import importlib import gradio as gr # Optional heavy dependencies (lazy-loaded) nltk.download("wordnet", quiet=True) from nltk.corpus import wordnet # ========== LIGHT MODE ========== def get_synonym(word): """Return a random synonym for a word (if available).""" synonyms = set() for syn in wordnet.synsets(word): for lemma in syn.lemmas(): synonyms.add(lemma.name().replace("_", " ")) if synonyms: synonyms = list(synonyms) choice = random.choice(synonyms) if choice.lower() != word.lower(): return choice return word def humanize_light(text: str) -> str: """Quick, CPU-safe version for humanizing AI text.""" text = re.sub(r"\b(however|moreover|furthermore|thus)\b", "", text, flags=re.IGNORECASE) words = text.split() for i in range(0, len(words), 10): if random.random() < 0.3: words[i] = get_synonym(words[i]) text = " ".join(words) text = re.sub(r"\s{2,}", " ", text) return text.strip().capitalize() # ========== HEAVY MODE ========== def load_heavy_dependencies(): """Load transformers, sentence-transformers, and spaCy only when needed.""" global torch, spacy, pipeline, SentenceTransformer torch = importlib.import_module("torch") spacy = importlib.import_module("spacy") pipeline = importlib.import_module("transformers").pipeline SentenceTransformer = importlib.import_module("sentence_transformers").SentenceTransformer def humanize_heavy(text: str, intensity: str = "medium") -> str: """Transformer-based deep rewriting for high naturalness.""" load_heavy_dependencies() nlp = spacy.load("en_core_web_sm") paraphraser = pipeline("text2text-generation", model="Vamsi/T5_Paraphrase_Paws") sentences = [s.text for s in nlp(text).sents] rewritten = [] for sent in sentences: result = paraphraser( f"paraphrase: {sent}", max_length=128, num_return_sequences=1, temperature=0.8 if intensity == "heavy" else 0.5, ) rewritten.append(result[0]["generated_text"]) if intensity == "heavy" and len(rewritten) > 2: random.shuffle(rewritten) return " ".join(rewritten).strip() # ========== GRADIO UI CREATOR ========== def run_humanizer(text, mode="light", intensity="medium"): if not text.strip(): return "Please enter some text to humanize." if mode == "light": return humanize_light(text) else: try: return humanize_heavy(text, intensity) except Exception as e: return f"[Error in heavy mode: {str(e)}] Try switching to light mode." def create_enhanced_interface(): """Build the Gradio UI.""" interface = gr.Interface( fn=run_humanizer, inputs=[ gr.Textbox(label="Enter Text", lines=8, placeholder="Paste your AI text here..."), gr.Radio(["light", "heavy"], label="Mode", value="light"), gr.Radio(["light", "medium", "heavy"], label="Intensity (for heavy mode only)", value="medium"), ], outputs=gr.Textbox(label="Humanized Text", lines=8), title="🧠 Advanced AI Humanizer Pro", description=( "Rewrite AI-generated text into more natural, human-like language. " "'Light' mode runs fast on CPU. 'Heavy' mode uses transformers for deeper rewriting." ), allow_flagging="never", ) return interface # ========== ORIGINAL STARTUP BLOCK (UNCHANGED) ========== if __name__ == "__main__": print("🚀 Starting Advanced AI Humanizer Pro...") app = create_enhanced_interface() app.launch( server_name="0.0.0.0", server_port=7860, show_error=True, share=False )