Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from gradio.themes.base import Base | |
| import tensorflow as tf | |
| import numpy as np | |
| import pickle | |
| import os | |
| from tensorflow.keras.preprocessing.sequence import pad_sequences | |
| # Load the trained model | |
| model = tf.keras.models.load_model("RomanUrduPoetryModel.h5") | |
| # Load tokenizer from saved file | |
| with open("UrduRomanPoetryTokenizer.pkl", "rb") as f: | |
| tokenizer = pickle.load(f) | |
| # Define max_sequence_length (Same as in Jupyter) | |
| max_sequence_length = 50 | |
| # Optimized Poetry Generation Function with Download Feature | |
| def generate_poetry(seed_text, next_words=20, temperature=0.8): | |
| token_list = tokenizer.texts_to_sequences([seed_text])[0] | |
| for _ in range(next_words): | |
| token_list = pad_sequences([token_list], maxlen=max_sequence_length - 1, padding="pre") | |
| predictions = model.predict(token_list, verbose=0)[0] # Faster prediction | |
| predictions = np.log(predictions + 1e-7) / temperature | |
| exp_preds = np.exp(predictions) | |
| probabilities = exp_preds / np.sum(exp_preds) | |
| predicted = np.random.choice(len(probabilities), p=probabilities) | |
| output_word = next((word for word, index in tokenizer.word_index.items() if index == predicted), "") | |
| if not output_word: | |
| break # Stop if no valid word is found | |
| seed_text += " " + output_word | |
| token_list = np.append(token_list, predicted) # Update token list | |
| # Save poetry to a text file for downloading | |
| file_path = "generated_poetry.txt" | |
| with open(file_path, "w", encoding="utf-8") as f: | |
| f.write(seed_text) | |
| return seed_text, file_path | |
| # Customize UI | |
| class Seafoam(Base): | |
| pass | |
| seafoam = Seafoam(font=gr.themes.GoogleFont("Plus Jakarta Sans")) | |
| style =""" | |
| .gradio-audio { | |
| border-radius: 15px !important; | |
| } | |
| .gradio-button { | |
| background: #007bff; | |
| color: white; | |
| font-weight: bold; | |
| border: none; | |
| border-radius: 20px; | |
| } | |
| .gradio-button:hover { | |
| background: #0056b3; | |
| } | |
| .gradio-dropdown { | |
| background: transparent; | |
| } | |
| .gradio-button2 { | |
| background: transparent; | |
| border:1.5px solid var(--input-border-color); | |
| font-weight: bold; | |
| border-radius: 20px; | |
| } | |
| .gradio-button2:hover { | |
| background: var(--input-border-color); | |
| } | |
| label.container.show_textbox_border.svelte-173056l textarea.svelte-173056l { | |
| background:transparent; | |
| border-radius: 20px; | |
| } | |
| div.svelte-633qhp { | |
| border-radius: 15px; | |
| overflow-y: hidden; | |
| } | |
| span.svelte-1gfkn6j { | |
| padding-left: 20px, | |
| font-size:16px; | |
| font-weight: bold; | |
| } | |
| .gradio-container.gradio-container-5-16-0 .contain span.svelte-1gfkn6j { | |
| padding-left: 12px; | |
| } | |
| .icon-button-wrapper.hide-top-corner.svelte-1jx2rq3 { | |
| border-radius: 20px; | |
| margin: 5px 6.09px 0px 0px; | |
| padding: 6px 5.5px 5px 5.5px; | |
| } | |
| """ | |
| # Gradio Interface with Better UI | |
| with gr.Blocks(theme=seafoam, css=style) as app: | |
| gr.Markdown("# Shaayer", elem_classes=["gradio-title"]) | |
| with gr.Row(): | |
| seed_input = gr.Textbox(label="Poetry Seed", placeholder="Enter your poetry seed here ...") | |
| num_words = gr.Slider(10, 50, step=5, label="Number of Words", value=20) | |
| temp = gr.Slider(0.2, 1.0, step=0.1, label="Creativity (Temperature)", value=0.5) | |
| poetry_output = gr.Textbox(label="Generated Poetry", elem_classes=["gradio-textbox"]) | |
| download_btn = gr.DownloadButton("Download Generated Poetry", value="generated_poetry.txt", visible=False, elem_classes=["gradio-button2"]) | |
| generate_button = gr.Button("Generate", variant="primary", elem_classes=["gradio-button"]) | |
| def generate_download_links(seed_input, num_words, temp): | |
| poetry_output, text_file = generate_poetry(seed_input, num_words, temp) | |
| return poetry_output, gr.update(value=text_file, visible=True) | |
| generate_button.click(generate_download_links, inputs=[seed_input, num_words, temp], outputs=[poetry_output, download_btn]) | |
| # Launch Gradio App with Better Layout | |
| app.launch(share=True, inbrowser=True) |