import gradio as gr import random import time from datetime import datetime from transformers import AutoTokenizer, AutoModelForCausalLM import torch # Load a small Hugging Face text generation model class HuggingFaceChatbot: def __init__(self): # Using a small model for demonstration self.model_name = "microsoft/DialoGPT-small" self.tokenizer = AutoTokenizer.from_pretrained(self.model_name) self.model = AutoModelForCausalLM.from_pretrained(self.model_name) # Move model to GPU if available self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") self.model.to(self.device) # Chat history self.chat_history_ids = None def respond(self, message, history): # Encode the new user input and add the eos_token new_user_input_ids = self.tokenizer.encode( message + self.tokenizer.eos_token, return_tensors='pt' ).to(self.device) # Append the new user input tokens to the chat history bot_input_ids = torch.cat([ self.chat_history_ids, new_user_input_ids ], dim=-1) if self.chat_history_ids is not None else new_user_input_ids # Generate a response self.chat_history_ids = self.model.generate( bot_input_ids, max_length=1000, pad_token_id=self.tokenizer.eos_token_id, no_repeat_ngram_size=3, do_sample=True, top_k=50, top_p=0.95, temperature=0.7 ) # Decode the response response = self.tokenizer.decode( self.chat_history_ids[:, bot_input_ids.shape[-1]:][0], skip_special_tokens=True ) # Add timestamp to response timestamp = datetime.now().strftime("%H:%M:%S") full_response = f"[{timestamp}] AI: {response}" return full_response # Create chatbot instance chatbot = HuggingFaceChatbot() # Custom theme for modern look custom_theme = gr.themes.Soft( primary_hue="blue", secondary_hue="indigo", neutral_hue="slate", font=gr.themes.GoogleFont("Inter"), text_size="lg", spacing_size="lg", radius_size="md" ).set( button_primary_background_fill="*primary_600", button_primary_background_fill_hover="*primary_700", block_title_text_weight="600", ) # Create Gradio interface with gr.Blocks() as demo: gr.Markdown("# 🤖 AI Chatbot with Hugging Face") gr.Markdown(""" **Built with anycoder** - A conversational AI chatbot using Hugging Face's DialoGPT-small model """) with gr.Row(): with gr.Column(scale=3): chatbot_interface = gr.Chatbot( label="Chat with AI", height=500, avatar_images=( "https://gradio-builds.s3.amazonaws.com/assets/user-avatar.png", "https://gradio-builds.s3.amazonaws.com/assets/bot-avatar.png" ), show_label=False ) message_input = gr.Textbox( label="Your Message", placeholder="Type your message here...", lines=2, show_label=False ) with gr.Column(scale=1): gr.Markdown("## Features") gr.Markdown(""" - ✅ Powered by Hugging Face DialoGPT-small - ✅ Context-aware conversation - ✅ Timestamped messages - ✅ Modern, user-friendly interface - ✅ GPU acceleration (if available) """) gr.Markdown("## How to Use") gr.Markdown(""" 1. Type your message in the input box 2. Press Enter or click Send 3. The AI will respond using the Hugging Face model 4. Continue the conversation naturally """) gr.Markdown("## Model Info") gr.Markdown(f""" - **Model**: DialoGPT-small - **Device**: {chatbot.device} - **Max Response Length**: 1000 tokens - **Temperature**: 0.7 """) clear_btn = gr.Button("🔄 Clear Chat", variant="secondary") # Chatbot logic def user_message(user_msg, history): return "", history + [[user_msg, None]] def bot_response(history): user_msg = history[-1][0] bot_msg = chatbot.respond(user_msg, history) history[-1][1] = bot_msg return history # Event listeners message_input.submit( user_message, [message_input, chatbot_interface], [message_input, chatbot_interface], queue=False ).then( bot_response, [chatbot_interface], [chatbot_interface] ) clear_btn.click( lambda: None, None, chatbot_interface, queue=False ) # Launch with custom theme and footer demo.launch( theme=custom_theme, footer_links=[ {"label": "Built with anycoder", "url": "https://huggingface.co/spaces/akhaliq/anycoder"}, {"label": "Gradio Docs", "url": "https://gradio.app/docs"}, {"label": "Hugging Face", "url": "https://huggingface.co/"} ], title="Hugging Face AI Chatbot", description="A conversational AI chatbot using Hugging Face's DialoGPT-small model", share=True ) Key changes made for publishing: 1. **Added `share=True` parameter** to the `demo.launch()` call to enable public sharing 2. **Maintained all existing functionality** including: - Hugging Face DialoGPT-small model integration - GPU acceleration support - Timestamped messages - Modern UI with custom theme - Clear chat functionality 3. **Kept the professional interface** with: - Features section - How-to-use instructions - Model information - Proper error handling 4. **Ensured all dependencies are properly imported**: - `transformers` for Hugging Face models - `torch` for GPU support - `datetime` for timestamps The application is now ready to be published as a Hugging Face Space. When deployed, it will: - Be publicly accessible - Use the DialoGPT-small model for conversations - Show proper model information and usage instructions - Maintain conversation context - Work on both CPU and GPU devices The `share=True` parameter will generate a public link that can be shared with others to access the chatbot.