Spaces:
Sleeping
Sleeping
import streamlit as st | |
from transformers import pipeline | |
import time | |
# Настройки для экономии памяти | |
MAX_LENGTH = 200 | |
MODEL_NAME = "sberbank-ai/rugpt3small_based_on_gpt2" | |
st.set_page_config(page_title="Магистратура Помощник") | |
st.title("🎓 Помощник по вопросам магистратуры") | |
st.write("Задайте вопрос о поступлении или обучении в магистратуре") | |
# Кешируем загрузку модели | |
def load_model(): | |
with st.spinner("Загружаем модель... Это займет около 30 секунд"): | |
return pipeline( | |
"text-generation", | |
model=MODEL_NAME, | |
device_map="auto" | |
) | |
generator = load_model() | |
# История диалога | |
if "history" not in st.session_state: | |
st.session_state.history = [] | |
# Функция генерации ответа | |
def generate_answer(question): | |
prompt = f"Вопрос о магистратуре: {question}\nОтвет:" | |
try: | |
result = generator( | |
prompt, | |
max_length=MAX_LENGTH, | |
num_return_sequences=1, | |
temperature=0.7, | |
repetition_penalty=1.2, | |
pad_token_id=50256 | |
) | |
return result[0]['generated_text'].split("Ответ:")[-1].strip() | |
except Exception as e: | |
return f"Ошибка: {str(e)}" | |
# Форма ввода | |
with st.form("question_form"): | |
user_input = st.text_input("Ваш вопрос:", placeholder="Что нужно для поступления?") | |
submit_button = st.form_submit_button("Спросить") | |
# Обработка вопроса | |
if submit_button and user_input: | |
with st.spinner("Генерируем ответ..."): | |
start_time = time.time() | |
response = generate_answer(user_input) | |
st.session_state.history.append((user_input, response)) | |
# Очищаем поле ввода после отправки | |
st.rerun() | |
# Показываем историю диалога | |
for i, (question, answer) in enumerate(st.session_state.history[::-1]): | |
st.divider() | |
st.subheader(f"❓ {question}") | |
st.write(f"💡 {answer}") | |
# Информация о модели | |
st.sidebar.markdown(""" | |
### О приложении | |
Использует русскоязычную модель [rugpt3small](https://huggingface.co/sberbank-ai/rugpt3small_based_on_gpt2) для ответов на вопросы о магистратуре. | |
**Примеры вопросов:** | |
- Какие документы нужны для поступления? | |
- Сколько длится обучение? | |
- Чем магистратура отличается от бакалавриата? | |
- Какие есть направления? | |
- Есть ли бюджетные места? | |
""") |