import gradio as gr import wikipedia from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_name = "Menlo/Lucy-128k" # Replace with your actual model repo ID print("Loading model and tokenizer (CPU-only)...") tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float32) model.to("cpu") model.eval() print("Model loaded.") def generate_response(prompt, max_new_tokens=200): input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to("cpu") with torch.no_grad(): output_ids = model.generate( input_ids, max_new_tokens=max_new_tokens, do_sample=True, temperature=0.7, top_p=0.9, eos_token_id=tokenizer.eos_token_id, ) generated_ids = output_ids[0][input_ids.shape[-1]:] response = tokenizer.decode(generated_ids, skip_special_tokens=True) return response.strip() def chatbot_with_wiki(user_input, wiki_search_enabled): if wiki_search_enabled: try: summary = wikipedia.summary(user_input, sentences=2) combined_prompt = f"User query: {user_input}\nWikipedia summary: {summary}\nAnswer naturally:\n" except wikipedia.exceptions.DisambiguationError as e: return f"Your query is ambiguous. Possible options are: {e.options[:5]}" except wikipedia.exceptions.PageError: combined_prompt = f"User query: {user_input}\n" except Exception as e: return f"Wikipedia search error: {e}" else: combined_prompt = f"User query: {user_input}\n" response = generate_response(combined_prompt) return response def respond(message, wiki_enabled, chat_history): if message is None or message.strip() == "": return chat_history or [] chat_history = chat_history or [] # Add user message chat_history.append({"role": "user", "content": message}) # Generate bot response bot_response = chatbot_with_wiki(message, wiki_enabled) chat_history.append({"role": "assistant", "content": bot_response}) return chat_history with gr.Blocks() as demo: gr.Markdown("# AI Chatbot with Lucy-128k and Wikipedia Search (CPU mode)") chatbot = gr.Chatbot(type="messages", label="Chatbot") user_input = gr.Textbox(placeholder="Enter your message and press Enter", show_label=False) wiki_toggle = gr.Checkbox(label="Enable Wikipedia Search", value=True) user_input.submit( respond, inputs=[user_input, wiki_toggle, chatbot], outputs=chatbot, ) clear_btn = gr.Button("Clear Chat") clear_btn.click(lambda: [], outputs=chatbot) if __name__ == "__main__": demo.launch()