import gradio as gr
import spaces
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
MODEL_ID = "ddfws/Rezaeian-StatsAI"
print("Loading tokenizer...")
tokenizer = AutoTokenizer.from_pretrained(
MODEL_ID
)
print("Loading model...")
model = AutoModelForCausalLM.from_pretrained(
MODEL_ID,
device_map="auto",
dtype=torch.float16
)
model.eval()
print("MODEL READY")
def format_answer(text):
# مرتب سازی خروجی فارسی
text = text.replace("\n", "
")
# فرمول های LaTeX
text = text.replace("\\[", "
")
text = text.replace("\\]", "
")
text = text.replace("$$", "")
return text
@spaces.GPU
def generate(message, history):
prompt = ""
for user, assistant in history:
prompt += f"User: {user}\nAssistant: {assistant}\n"
prompt += f"User: {message}\nAssistant:"
inputs = tokenizer(
prompt,
return_tensors="pt"
)
inputs = {
k: v.to(model.device)
for k, v in inputs.items()
}
with torch.no_grad():
output = model.generate(
**inputs,
max_new_tokens=512,
temperature=0.7,
top_p=0.9,
do_sample=True
)
result = tokenizer.decode(
output[0],
skip_special_tokens=True
)
answer = result.split("Assistant:")[-1]
return format_answer(answer)
demo = gr.ChatInterface(
fn=generate,
title="Rezaeian StatsAI",
description="دستیار هوشمند آمار و احتمال مهندسی"
)
demo.launch(
server_name="0.0.0.0",
css="""
.gradio-container {
direction: rtl;
max-width: 1200px !important;
}
.message {
direction: rtl !important;
text-align: right !important;
font-family: Tahoma, Arial, sans-serif !important;
font-size:18px !important;
line-height:2;
}
textarea {
direction: rtl !important;
text-align:right !important;
font-size:18px !important;
}
.formula {
direction:ltr !important;
text-align:center !important;
font-family: Cambria Math, Times New Roman, serif !important;
font-size:20px !important;
padding:12px;
margin:12px;
}
footer {
display:none !important;
}
"""
)