import gradio as gr from transformers import pipeline import pandas as pd import logging # Set up logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) class FrenchTitleGenerator: def __init__(self): try: # Load your fine-tuned model from Hugging Face # Replace with your actual model name after training self.generator = pipeline( "translation", model="sufya12/french-title-model", # Change this to your model tokenizer="sufya12/french-title-model" ) logger.info("✅ Model loaded successfully from Hugging Face") except Exception as e: logger.error(f"❌ Error loading model: {e}") self.generator = None def generate_title(self, year, city, event_description, temperature=0.8, max_length=60): if not self.generator: return "Error: Model not loaded. Please check the logs." try: # Create input prompt input_text = f"Generate French title: Year: {year} City: {city} Event: {event_description}" # Generate title result = self.generator( input_text, max_length=max_length, num_beams=3, temperature=temperature, do_sample=True, early_stopping=True ) return result[0]['translation_text'] except Exception as e: return f"Error generating title: {str(e)}" # Initialize the generator title_generator = FrenchTitleGenerator() # Gradio interface def generate_french_title(year, city, event_description, temperature, max_length): return title_generator.generate_title(year, city, event_description, temperature, max_length) # Create the interface with gr.Blocks(theme=gr.themes.Soft()) as demo: gr.Markdown("# 🇫🇷 French Event Title Generator") gr.Markdown("Generate professional French event titles using AI!") with gr.Row(): with gr.Column(): year_input = gr.Textbox( label="Year", placeholder="e.g., 2025", value="2025" ) city_input = gr.Textbox( label="City", placeholder="e.g., Paris", value="Paris" ) event_input = gr.Textbox( label="Event Description", placeholder="Describe your event in English...", lines=3 ) with gr.Row(): temperature_slider = gr.Slider( minimum=0.1, maximum=1.5, value=0.8, step=0.1, label="Creativity Level" ) max_length_slider = gr.Slider( minimum=20, maximum=100, value=60, step=5, label="Title Length" ) generate_btn = gr.Button("Generate Title 🚀", variant="primary") with gr.Column(): output_text = gr.Textbox( label="Generated French Title", lines=4, show_copy_button=True ) # Examples gr.Examples( examples=[ ["2025", "Paris", "Summer Jazz Festival in the Park"], ["2024", "Lyon", "International Food and Wine Exhibition"], ["2025", "Nice", "Beach Music Concert and Party"] ], inputs=[year_input, city_input, event_input] ) generate_btn.click( fn=generate_french_title, inputs=[year_input, city_input, event_input, temperature_slider, max_length_slider], outputs=output_text ) if __name__ == "__main__": demo.launch()