Spaces:
Running
Running
import streamlit as st | |
from transformers import AutoTokenizer, AutoModelForCausalLM | |
import torch | |
# Load model and tokenizer | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
model = AutoModelForCausalLM.from_pretrained( | |
"universitytehran/PersianMind-v1.0", | |
torch_dtype=torch.bfloat16, | |
low_cpu_mem_usage=True, | |
device_map={"": device}, | |
) | |
tokenizer = AutoTokenizer.from_pretrained("universitytehran/PersianMind-v1.0") | |
# Conversation template | |
TEMPLATE = "{context}\nYou: {prompt}\nPersianMind: " | |
CONTEXT = "This is a conversation with PersianMind. It is an artificial intelligence model designed by a team of " \ | |
"NLP experts at the University of Tehran to help you with various tasks such as answering questions, " \ | |
"providing recommendations, and helping with decision making. You can ask it anything you want and " \ | |
"it will do its best to give you accurate and relevant information." | |
# Streamlit app | |
st.title("PersianMind Chat") | |
st.markdown("Chat with **PersianMind**, an AI model by the University of Tehran.") | |
# User input | |
prompt = st.text_input("Enter your question (in Persian):") | |
if st.button("Get Response"): | |
if prompt.strip(): | |
with st.spinner("Generating response..."): | |
model_input = TEMPLATE.format(context=CONTEXT, prompt=prompt) | |
input_tokens = tokenizer(model_input, return_tensors="pt").to(device) | |
generate_ids = model.generate(**input_tokens, max_new_tokens=512, do_sample=False, repetition_penalty=1.1) | |
model_output = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0] | |
response = model_output[len(model_input):] | |
st.text_area("PersianMind's Response:", response, height=200) | |
else: | |
st.warning("Please enter a question.") | |