UT-AI-Chat / app.py
Turkiii0's picture
Update app.py
5aba3aa verified
import torch
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
# =========================
# 1) الإعدادات
# =========================
BASE_MODEL = "meta-llama/Llama-3.2-1B-Instruct"
ADAPTER_REPO = "Turkiii0/UT-AI-1B" # ← اسم مودلك على HF
DEVICE = "cpu" # CPU مضمون لجميع Spaces المجانية
# =========================
# 2) تحميل التوكنايزر
# =========================
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, use_fast=True)
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
# =========================
# 3) تحميل Base Model + LoRA
# =========================
base_model = AutoModelForCausalLM.from_pretrained(
BASE_MODEL,
device_map=None, # CPU فقط
torch_dtype=torch.float32
)
model = PeftModel.from_pretrained(
base_model,
ADAPTER_REPO
)
model.eval()
model.to(DEVICE)
print("✅ Model loaded and ready!")
# =========================
# 4) نظام المساعد
# =========================
SYSTEM_PROMPT = (
"أنت مرشد أكاديمي متخصص في جامعة تبوك. "
"أجب باختصار شديد ودقة عالية حسب الأنظمة الأكاديمية فقط. "
"لا تضيف أي شرح زائد أو معلومات خارج البيانات."
)
# =========================
# 5) توليد الإجابة
# =========================
def generate_answer(user_question: str):
if not user_question.strip():
return "اكتب سؤالك أولاً."
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_question}
]
prompt = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=False
)
inputs = tokenizer(
prompt,
return_tensors="pt",
padding=True,
truncation=True,
max_length=512
).to(DEVICE)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=120,
do_sample=False,
repetition_penalty=1.1,
eos_token_id=tokenizer.eos_token_id,
pad_token_id=tokenizer.pad_token_id
)
gen_ids = outputs[0][inputs["input_ids"].shape[-1]:]
answer = tokenizer.decode(gen_ids, skip_special_tokens=True).strip()
return " ".join(answer.split())
# =========================
# 6) واجهة Gradio
# =========================
def chat_fn(message, history):
return generate_answer(message)
chat_ui = gr.ChatInterface(
fn=chat_fn,
title="🎓 مرشد جامعة تبوك الأكاديمي",
description="اسأل عن اسم المقرر، متطلبات المقررات، أو عدد الساعات.",
examples=[
"CIT 1302",
"متطلبات CIT1302",
"كم عدد ساعات CS 322",
"اسم مقرر CIT 1401"
]
)
if __name__ == "__main__":
chat_ui.launch()