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.") | |