import gradio as gr from transformers import pipeline import random # Load a GPT-like model for joke generation joke_generator = pipeline("text-generation", model="EleutherAI/gpt-neo-1.3B") # Predefined random jokes random_jokes = [ "Why don't programmers like nature? It has too many bugs.", "Why do Java developers wear glasses? Because they can't C#!", "Why was the math book sad? It had too many problems.", "What’s a computer’s favorite beat? An algo-rhythm!", ] # Multilingual jokes feature def generate_multilingual_joke(prompt, language): """ Generate a joke in the specified language. """ if language == "English": return generate_joke(prompt, "Random") elif language == "Spanish": return f"Lo siento, todavía no sé cómo contar chistes en español sobre {prompt}." elif language == "French": return f"Je suis désolé, je ne sais pas encore raconter des blagues en français sur {prompt}." else: return "Sorry, this language is not supported yet!" # Function to generate jokes def generate_joke(prompt, style): """ Generate a joke based on user prompt and selected style. """ style_prompts = { "Dad Jokes": "Tell me a funny dad joke about", "Puns": "Tell me a clever pun about", "Knock-Knock": "Give me a knock-knock joke about", "Random": "Tell me a random joke." } if style == "Random" or not prompt.strip(): return random.choice(random_jokes) full_prompt = f"{style_prompts[style]} {prompt.strip()}." response = joke_generator(full_prompt, max_length=50, do_sample=True, temperature=1.0) return response[0]["generated_text"] # Feedback collection def save_feedback(joke, feedback): """ Save user feedback to a text file. """ with open("joke_feedback.txt", "a") as f: f.write(f"Joke: {joke}\nFeedback: {feedback}\n\n") return "Thanks for your feedback!" # Gradio Interface with gr.Blocks() as interface: gr.Markdown("# Joke Chatbot 🤖") gr.Markdown("Ask for a joke about any topic, and the chatbot will try its best to make you laugh!") with gr.Row(): prompt = gr.Textbox(label="Your Prompt", placeholder="E.g., Tell me a joke about programming") style = gr.Radio(["Dad Jokes", "Puns", "Knock-Knock", "Random"], label="Choose Joke Style") language = gr.Dropdown(["English", "Spanish", "French"], label="Choose Language") joke_output = gr.Textbox(label="Generated Joke") feedback = gr.Radio(["👍 Like", "👎 Dislike"], label="Did you like the joke?") feedback_message = gr.Textbox(label="Feedback Message", interactive=False) with gr.Row(): generate_button = gr.Button("Generate Joke") feedback_button = gr.Button("Submit Feedback") generate_button.click(generate_joke, inputs=[prompt, style], outputs=joke_output) feedback_button.click(save_feedback, inputs=[joke_output, feedback], outputs=feedback_message) # Launch the interface if __name__ == "__main__": interface.launch()