import os from huggingface_hub import login login(token=os.environ["HF_TOKEN"]) import warnings warnings.filterwarnings('ignore') import transformers import gradio as gr from transformers import pipeline from transformers import AutoTokenizer, AutoModelForCausalLM import torch model_id = "meta-llama/Llama-2-7b-chat-hf" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, device_map="auto", torch_dtype="auto" ) # تحميل LLM آخر للتلخيص summarizer =pipeline("summarization", model="facebook/bart-large-cnn") def generate_response(user_input: str, context_summary: str = "") -> str: prompt = f"""[INST] <> You are a helpful assistant. <> Previous summary of conversation: {context_summary} Current user input: {user_input} [/INST] """ inputs = tokenizer(prompt, return_tensors="pt").to(model.device) output = model.generate( **inputs, max_new_tokens=256, pad_token_id=tokenizer.eos_token_id, temperature=0.7, # ← يتحكم في عشوائية الردود top_p=0.9, # ← خوارزمية nucleus sampling do_sample=True # ← فعّل العشوائية ) response = tokenizer.decode(output[0], skip_special_tokens=True) return response[len(prompt):].strip() # تعريف chat_history كمخزن داخلي chat_history = [] def reset_chat(): global chat_history chat_history.clear() return [] def gradio_chat(user_input): global chat_history # نُشير إلى المتغيّر الخارجي # استخراج الملخص السابق إن وجد context_summary = chat_history[-1]["summary"] if chat_history else "" # توليد الرد من الموديل response = generate_response(user_input, context_summary) # تلخيص الرد summary = summarizer( response, max_length=100, min_length=30, do_sample=False )[0]["summary_text"] # حفظ في الذاكرة chat_history.append({ "user_input": user_input, "response": response, "summary": summary }) # تجهيز الشكل لعرض المحادثة chat_display = [(entry["user_input"], entry["response"]) for entry in chat_history] return chat_display # واجهة Gradio with gr.Blocks() as demo: gr.Markdown("## 🤖 AI Chatbot with Memory\nKeep chatting and watch it remember!") chatbot = gr.Chatbot() msg = gr.Textbox(placeholder="Type your message and press Enter...") clear_btn = gr.Button("🔄 Reset memory") # عند الإرسال، تُنفذ الدالة وتُحدث الـchatbot msg.submit(fn=gradio_chat, inputs=msg, outputs=chatbot, scroll_to_output=True) # بعد الإرسال، يتم مسح الـTextbox تلقائيًا msg.submit(lambda: "", None, msg) # زر إعادة تعيين المحادثة clear_btn.click(fn=reset_chat, inputs=None, outputs=None) # تشغيل الواجهة demo.launch()