Spaces:
Sleeping
Sleeping
Download app.py from supp03/Quick-Response: direct link, hf CLI and curl.
- Browser
- Download file 4.22 kB
-
https://huggingface.co/spaces/supp03/Quick-Response/resolve/main/app.py
- Command line
-
hf download hf://spaces/supp03/Quick-Response/app.py
-
curl -L -o app.py https://huggingface.co/spaces/supp03/Quick-Response/resolve/main/app.py
4.22 kB
| import torch | |
| import time | |
| import re | |
| from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline | |
| import gradio as gr | |
| # Load tokenizer and model | |
| model_path = "supp03/E3L-AI-CHATBOT" | |
| tokenizer = AutoTokenizer.from_pretrained(model_path) | |
| model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16, device_map="auto") | |
| pipe = pipeline( | |
| "text-generation", | |
| model=model, | |
| tokenizer=tokenizer, | |
| pad_token_id=tokenizer.eos_token_id | |
| ) | |
| # Simple context memory | |
| context_memory = { | |
| "last_question": None, | |
| "last_answer": None | |
| } | |
| def generate_response(user_input): | |
| try: | |
| if not user_input.strip(): | |
| return "Please enter a question." | |
| if user_input.strip().lower() == "exit": | |
| context_memory["last_question"] = None | |
| context_memory["last_answer"] = None | |
| return "Session reset. You can ask a new question now." | |
| refer_prev = any(phrase in user_input.lower() for phrase in [ | |
| "previous question", "previous answer", "elaborate", "detail", "more info", "explain more", "expand on that" | |
| ]) | |
| context = "" | |
| if refer_prev and context_memory["last_question"] and context_memory["last_answer"]: | |
| context = ( | |
| f"Previous Question: {context_memory['last_question']}\n" | |
| f"Previous Answer: {context_memory['last_answer']}\n\n" | |
| "Please elaborate on the previous answer with more details, examples, and explanations.\n\n" | |
| ) | |
| if "steps" in user_input.lower() or "step by step" in user_input.lower(): | |
| style_instruction = "Organize your response into a clearly numbered step-by-step list (1., 2., 3., ...)." | |
| elif "how" in user_input.lower() or "ways" in user_input.lower(): | |
| style_instruction = "Organize your response into practical bullet points." | |
| else: | |
| style_instruction = "Write in a natural, conversational paragraph form." | |
| generated_prompt = ( | |
| "You are a warm, thoughtful, and emotionally intelligent mentor. " | |
| "Your job is to provide deeply personalized, practical, and supportive guidance. " | |
| "Avoid sounding robotic or generic. Respond with empathy, clarity, and human warmth.\n\n" | |
| f"{style_instruction}\n\n" | |
| f"{context}" | |
| f"Question: {user_input.strip()}\n\nAnswer:" | |
| ) | |
| start_time = time.time() | |
| with torch.no_grad(): | |
| generated = pipe( | |
| generated_prompt, | |
| max_new_tokens=300, | |
| do_sample=True, | |
| top_p=0.9, | |
| temperature=0.7 | |
| ) | |
| elapsed_time = time.time() - start_time | |
| output_text = generated[0]["generated_text"] | |
| match = re.search(r"Answer:\s*(.*)", output_text, re.DOTALL) | |
| model_answer = match.group(1).strip() if match else output_text.strip() | |
| for kw in ["your students", "may also want", "in order to"]: | |
| if kw in model_answer: | |
| model_answer = model_answer.split(kw)[0].strip() | |
| break | |
| context_memory["last_question"] = user_input | |
| context_memory["last_answer"] = model_answer | |
| minutes = int(elapsed_time // 60) | |
| seconds = round(elapsed_time % 60, 1) | |
| time_display = f"{minutes}m {seconds}s" if minutes > 0 else f"{seconds}s" | |
| return f"[Generated in {time_display}]\n\n{model_answer}" | |
| except Exception as e: | |
| return f"An error occurred:\n\n{e}" | |
| # Gradio UI | |
| interface = gr.Interface( | |
| fn=generate_response, | |
| inputs=gr.Textbox(lines=5, placeholder="Ask your question here...", label="Ask your question"), | |
| outputs=gr.Textbox(lines=1, label="Response"), | |
| title="Gemma Mentor Chatbot", | |
| description="Ask questions and get warm, supportive, emotionally intelligent responses. Type 'exit' to reset.", | |
| flagging_mode="never", # ✅ updated from deprecated allow_flagging | |
| theme="default", | |
| live=False, | |
| api_name="/predict" | |
| ) | |
| # Correct launch block for Gradio 4+ / 5+ | |
| if __name__ == "__main__": | |
| interface.queue() # ✅ enable queuing system | |
| interface.launch(share=False) | |