Backened's picture
Update app.py
1bde38a verified
import os
import datetime
import gradio as gr
from groq import Groq
import torch
from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
# βœ… Set API Key
os.environ["GROQ_API_KEY"] = "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" # Replace with your API key
client = Groq(api_key=os.environ["GROQ_API_KEY"])
# βœ… Load M2M-100 Model
model_name = "facebook/m2m100_418M"
tokenizer = M2M100Tokenizer.from_pretrained(model_name)
model = M2M100ForConditionalGeneration.from_pretrained(model_name)
# βœ… Function to Generate English Script
def generate_script(topic, duration):
try:
words_per_minute = 130
target_words = duration * words_per_minute
response = client.chat.completions.create(
messages=[{"role": "user", "content": f"Generate a plain, well-structured educational script about {topic} in English with approximately {target_words} words."}],
model="llama-3.3-70b-versatile"
)
return response.choices[0].message.content
except Exception as e:
print(f"❌ Error in script generation: {str(e)}")
return ""
# βœ… Function to Translate to Urdu
def translate_to_urdu(english_script):
try:
tokenizer.src_lang = "en"
max_length = 500
input_chunks = [english_script[i:i+max_length] for i in range(0, len(english_script), max_length)]
translated_chunks = []
for chunk in input_chunks:
inputs = tokenizer(chunk, return_tensors="pt", truncation=True, max_length=1024).to(model.device)
translated_tokens = model.generate(
**inputs,
max_length=1024,
no_repeat_ngram_size=2,
forced_bos_token_id=tokenizer.get_lang_id("ur"),
num_beams=2
)
translated_chunks.append(tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0])
return " ".join(translated_chunks)
except Exception as e:
return f"❌ Error in translation: {str(e)}"
# βœ… Save Edited Urdu Script
def save_edited_urdu(edited_urdu_script, topic):
timestamp = datetime.datetime.now().strftime("%Y_%m_%d")
filename = f"{topic}_Urdu_Final_{timestamp}.txt"
filepath = os.path.join(os.getcwd(), filename)
with open(filepath, "w", encoding="utf-8") as file:
file.write(edited_urdu_script)
return filepath
# βœ… Save File Utility
def save_file(content, filename):
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{filename}_{timestamp}.txt"
filepath = os.path.join(os.getcwd(), filename)
with open(filepath, "w", encoding="utf-8") as file:
file.write(content)
return filepath
# βœ… Process Request
def process_request(topic, duration):
eng_script = generate_script(topic, duration)
return eng_script, "", "" # Clears Urdu & Edited Urdu textboxes
def process_translation(eng_script):
return translate_to_urdu(eng_script)
# βœ… Download Functions
def download_english(eng_script, topic):
return save_file(eng_script, f"{topic}_Eng")
def download_urdu(urdu_script, topic):
return save_file(urdu_script, f"{topic}_Urdu")
def download_final_urdu(edited_urdu_script, topic):
return save_file(edited_urdu_script, f"{topic}_Urdu_Final")
# βœ… Gradio UI
with gr.Blocks() as app:
gr.Markdown("# 🎬 AI-Powered 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)
urdu_output = gr.Textbox(label="Translated Urdu Script", interactive=True)
editable_urdu = gr.Textbox(label="Edited Urdu Script", interactive=True)
generate_button.click(
process_request,
inputs=[topic_input, duration_input],
outputs=[eng_output, urdu_output, editable_urdu] # Clears Urdu & Edited Urdu textboxes
)
translate_button = gr.Button("Generate Urdu Script")
translate_button.click(process_translation, inputs=[eng_output], outputs=[urdu_output])
# βœ… Update editable Urdu box after translation
translate_button.click(lambda x: x, inputs=[urdu_output], outputs=[editable_urdu])
save_button = gr.Button("Save Edited Urdu Script")
download_eng_button = gr.Button("πŸ“₯ Download English Script")
download_eng_file = gr.File()
download_urdu_button = gr.Button("πŸ“₯ Download Translated Urdu Script")
download_urdu_file = gr.File()
download_final_urdu_button = gr.Button("πŸ“₯ Download Edited Urdu Script")
download_final_urdu_file = gr.File()
save_button.click(save_edited_urdu, inputs=[editable_urdu, topic_input], outputs=[download_final_urdu_file])
download_eng_button.click(download_english, inputs=[eng_output, topic_input], outputs=[download_eng_file])
download_urdu_button.click(download_urdu, inputs=[urdu_output, topic_input], outputs=[download_urdu_file])
download_final_urdu_button.click(download_final_urdu, inputs=[editable_urdu, topic_input], outputs=[download_final_urdu_file])
app.launch()