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) для ответов на вопросы о магистратуре. | |
| **Примеры вопросов:** | |
| - Какие документы нужны для поступления? | |
| - Сколько длится обучение? | |
| - Чем магистратура отличается от бакалавриата? | |
| - Какие есть направления? | |
| - Есть ли бюджетные места? | |
| """) |