| import os |
| import gradio as gr |
| import wikipediaapi |
| from groq import Groq |
| import torch |
| from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer |
| from deep_translator import GoogleTranslator |
| import yake |
| from datetime import datetime |
| import shutil |
| import glob |
|
|
| |
| |
| |
|
|
| |
| os.environ["GROQ_API_KEY"] = "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" |
| client = Groq(api_key=os.environ["GROQ_API_KEY"]) |
|
|
| |
| |
| |
| |
|
|
| def fetch_wikipedia_summary(topic): |
| wiki_wiki = wikipediaapi.Wikipedia( |
| user_agent="EducationalScriptApp/1.0", |
| language="en" |
| ) |
| page = wiki_wiki.page(topic) |
| return page.summary if page.exists() else "No Wikipedia summary available." |
|
|
| def generate_script(topic, duration): |
| try: |
| factual_content = fetch_wikipedia_summary(topic) |
| words_per_minute = 130 |
| target_words = duration * words_per_minute |
|
|
| response = client.chat.completions.create( |
| messages=[{"role": "user", "content": f"Format the following factual content into a well-structured educational script in English with approximately {target_words} words: \n{factual_content}"}], |
| model="llama-3.3-70b-versatile" |
| ) |
| return response.choices[0].message.content |
| except Exception as e: |
| return f"β Error in script generation: {str(e)}" |
|
|
|
|
| |
| def extract_keywords(script): |
| try: |
| kw_extractor = yake.KeywordExtractor( |
| lan="en", |
| n=3, |
| dedupLim=0.9, |
| |
| ) |
|
|
| keywords = kw_extractor.extract_keywords(script) |
| return ", ".join([kw[0] for kw in keywords]) |
| except Exception as e: |
| return f"β Error extracting keywords: {str(e)}" |
|
|
|
|
| def save_keywords_file(keywords, topic): |
| today = datetime.today().strftime('%Y_%b_%d') |
| filename = f"Keywords/{topic}_Keyword_{today}.txt" |
| os.makedirs(os.path.dirname(filename), exist_ok=True) |
| with open(filename, "w", encoding="utf-8") as f: |
| f.write(keywords) |
| return filename |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| def translate_to_urdu(english_script): |
| try: |
| |
| max_chunk_size = 4500 |
| chunks = [english_script[i:i + max_chunk_size] for i in range(0, len(english_script), max_chunk_size)] |
|
|
| translated_chunks = [] |
| for chunk in chunks: |
| translated_chunk = GoogleTranslator(source='en', target='ur').translate(chunk) |
| translated_chunks.append(translated_chunk) |
|
|
| return " ".join(translated_chunks) |
| except Exception as e: |
| return f"β Error in translation: {str(e)}" |
|
|
|
|
|
|
| def save_english_file(content, topic): |
| today = datetime.today().strftime('%Y_%b_%d') |
| filename = f"English_Scripts/{topic}_Eng_{today}.txt" |
| os.makedirs(os.path.dirname(filename), exist_ok=True) |
| with open(filename, "w", encoding="utf-8") as f: |
| f.write(content) |
| return filename |
|
|
|
|
| def save_urdu_file(content, topic): |
| today = datetime.today().strftime('%Y_%b_%d') |
| filename = f"Urdu_Scripts/{topic}_Urdu_{today}.txt" |
| os.makedirs(os.path.dirname(filename), exist_ok=True) |
| with open(filename, "w", encoding="utf-8") as f: |
| f.write(content) |
| return filename |
|
|
|
|
| def save_final_urdu_file(topic, content): |
| date_str = datetime.now().strftime("%Y_%b_%d") |
| filename = f"Urdu_Final/{topic}_Urdu_Final_{date_str}.txt" |
| os.makedirs(os.path.dirname(filename), exist_ok=True) |
| with open(filename, "w", encoding="utf-8") as f: |
| f.write(content) |
| return filename |
|
|
|
|
| def finalize_process(): |
| return "β
Script Generation Completed Successfully!" |
|
|
|
|
| def clear_old_files(): |
| |
| directories = ["English_Scripts", "Urdu_Scripts", "Urdu_Final", "Keywords"] |
|
|
| for directory in directories: |
| if os.path.exists(directory): |
| files = glob.glob(f"{directory}/*") |
| for file in files: |
| try: |
| os.remove(file) |
| except Exception as e: |
| print(f"β Error deleting {file}: {e}") |
|
|
| return "", "", "", "", "" |
|
|
|
|
|
|
|
|
| |
| with gr.Blocks() as app: |
| gr.Markdown("# π¬ AI-Powered Educational Script Generator") |
|
|
| topic_input = gr.Textbox(label="Enter Topic") |
| duration_input = gr.Slider(minimum=1, maximum=30, step=1, label="Duration (minutes)") |
|
|
|
|
| generate_button = gr.Button("Generate English Script") |
| eng_output = gr.Textbox(label="Generated English Script", interactive=False) |
| download_english_button = gr.Button("Download English Script") |
| download_english_button.click(save_english_file, inputs=[eng_output, topic_input], outputs=[gr.File()]) |
|
|
|
|
| |
| extract_keywords_btn = gr.Button("π Extract Keywords") |
| keyword_output = gr.Textbox(label="π Extracted Keywords", interactive=True) |
| download_keywords_btn = gr.Button("β¬οΈ Download Keywords") |
| download_keywords_btn.click(save_keywords_file, inputs=[keyword_output, topic_input], outputs=[gr.File()]) |
|
|
| translate_button = gr.Button("Generate Urdu Script") |
| urdu_output = gr.Textbox(label="Translated Urdu Script", interactive=False, rtl=True) |
| download_urdu_button = gr.Button("Download Urdu Script") |
| download_urdu_button.click(save_urdu_file, inputs=[urdu_output, topic_input], outputs=[gr.File()]) |
|
|
| |
| final_edited_urdu_output = gr.Textbox(label="Edited Urdu Script", interactive=True, rtl=True) |
| download_final_urdu_button = gr.Button("Download Final Urdu Script") |
| download_final_urdu_button.click(save_final_urdu_file, inputs=[topic_input, final_edited_urdu_output], outputs=[gr.File()]) |
|
|
|
|
| |
| |
| generate_button.click(generate_script, inputs=[topic_input, duration_input], outputs=[eng_output]) |
| extract_keywords_btn.click(extract_keywords, inputs=[eng_output], outputs=[keyword_output]) |
| translate_button.click(translate_to_urdu, inputs=[eng_output], outputs=[urdu_output]) |
|
|
| status_output = gr.Textbox(label="Status", interactive=False) |
| finalize_button = gr.Button("Finalize Process") |
| finalize_button.click(finalize_process, outputs=[status_output]) |
|
|
| generate_button.click( |
| lambda topic, duration: (*clear_old_files(), generate_script(topic, duration)), |
| inputs=[topic_input, duration_input], |
| outputs=[keyword_output, urdu_output, final_edited_urdu_output, status_output] ) |
|
|
| |
|
|
|
|
| app.launch() |