oiisa commited on
Commit
e07fd77
·
verified ·
1 Parent(s): 20758a0

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +45 -55
src/streamlit_app.py CHANGED
@@ -1,62 +1,52 @@
1
  import streamlit as st
2
- from transformers import pipeline
 
3
 
4
- # Настройка заголовка
5
- st.title("🎓 Ассистент по магистратуре")
6
- st.write("Задайте вопросы о поступлении, программах или требованиях")
7
-
8
- # Инициализация модели (кэшируется для ускорения)
9
- @st.cache_resource
10
- def load_model():
11
- return pipeline(
12
- "text-generation",
13
- model="IlyaGusev/saiga_llama3_8b",
14
- device_map="auto"
15
- )
16
 
17
  # Загрузка модели
18
- generator = load_model()
 
 
 
 
19
 
20
- # История диалога
21
- if "messages" not in st.session_state:
22
- st.session_state.messages = [
23
- {"role": "assistant", "content": "Привет! Я помогу с вопросами о магистратуре. Спрашивайте!"}
24
- ]
25
 
26
- # Отображение истории
27
- for msg in st.session_state.messages:
28
- st.chat_message(msg["role"]).write(msg["content"])
29
 
30
- # Обработка ввода
31
- prompt = st.chat_input("Ваш вопрос...")
32
- if prompt:
33
- # Добавляем вопрос в историю
34
- st.session_state.messages.append({"role": "user", "content": prompt})
35
- st.chat_message("user").write(prompt)
36
-
37
- # Формируем контекст диалога
38
- context = "\n".join(
39
- f"{'Ты:' if m['role']=='user' else 'Ассистент:'} {m['content']}"
40
- for m in st.session_state.messages
41
- )
42
-
43
- # Генерация ответа
44
- with st.spinner("Думаю..."):
45
- try:
46
- response = generator(
47
- context,
48
- max_new_tokens=512,
49
- temperature=0.7,
50
- top_p=0.9,
51
- do_sample=True
52
- )[0]['generated_text']
53
-
54
- # Извлекаем только последний ответ
55
- assistant_reply = response.split("Ассистент:")[-1].strip()
56
-
57
- except Exception as e:
58
- assistant_reply = f"Ошибка: {str(e)}"
59
-
60
- # Добавляем ответ в историю
61
- st.session_state.messages.append({"role": "assistant", "content": assistant_reply})
62
- st.chat_message("assistant").write(assistant_reply)
 
1
  import streamlit as st
2
+ from transformers import pipeline, AutoTokenizer, AutoModelForQuestionAnswering
3
+ import torch
4
 
5
+ # Настройки
6
+ MODEL_NAME = "AlexKay/xlm-roberta-large-qa-multilingual-finedtuned-ru"
7
+ CONTEXT = """
8
+ Абитуриенты магистратуры подают документы через личный кабинет. Требуется диплом бакалавра/специалиста.
9
+ Средний балл диплома рассчитывается как сумма всех оценок, деленная на количество дисциплин (без учета ВКР).
10
+ Доступные программы:
11
+ - Информатика и вычислительная техника (код 09.04.01).
12
+ - Управление персоналом (код 38.04.03).
13
+ - Физика (код 04.04.01).
14
+ Параллельное зачисление на две программы возможно только на платной основе.
15
+ Прием документов дистанционный через Госуслуги или чат-бот вуза.
16
+ """
17
 
18
  # Загрузка модели
19
+ @st.cache_resource
20
+ def load_qa_model():
21
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
22
+ model = AutoModelForQuestionAnswering.from_pretrained(MODEL_NAME)
23
+ return pipeline("question-answering", model=model, tokenizer=tokenizer)
24
 
25
+ qa_pipeline = load_qa_model()
 
 
 
 
26
 
27
+ # Интерфейс
28
+ st.title("🤖 Консультант для абитуриентов магистратуры")
29
+ st.info("Отвечаю только на вопросы о магистратуре! Примеры: программы, документы, средний балл.")
30
 
31
+ question = st.text_input("Задайте вопрос:")
32
+ if question:
33
+ # Фильтр тематики
34
+ forbidden_keywords = ["бакалавр", "егэ", "олимпиад", "школ", "аспирантур", "специалитет"]
35
+ if any(word in question.lower() for word in forbidden_keywords):
36
+ st.error("Извините, я консультирую только по магистратуре. Задайте вопрос о программах, документах или экзаменах.")
37
+ else:
38
+ # Поиск ответа в контексте
39
+ result = qa_pipeline(question=question, context=CONTEXT)
40
+ st.subheader("Ответ:")
41
+ st.write(result["answer"])
42
+ st.caption(f"Точность: {result['score']:.2f}")
43
+
44
+ # Показать программы, если спрашивают о них
45
+ if "программ" in question.lower():
46
+ st.divider()
47
+ st.write("**Все программы магистратуры:**")
48
+ st.markdown("""
49
+ - 🖥️ **Информатика и вычислительная техника** (09.04.01)
50
+ - 👥 **Управление персоналом** (38.04.03)
51
+ - 🔬 **Физика** (04.04.01)
52
+ """)