vortex123 commited on
Commit
b63c0d3
·
verified ·
1 Parent(s): 2d90305

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +105 -51
app.py CHANGED
@@ -1,66 +1,120 @@
1
  import streamlit as st
2
  from openai import OpenAI
3
 
4
- # Инициализация клиента для DeepSeek
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  client = OpenAI(
6
- api_key="sk-a02694cf3c8640c9ae60428ee2c5a62e", # Замените ключ на свой
7
  base_url="https://api.deepseek.com"
8
  )
9
 
10
- st.set_page_config(page_title="Чат с deepseek-reasoner", layout="centered")
11
  st.title("Чат с deepseek-reasoner")
12
 
13
- # Храним историю переписки в Session State
14
  if "messages" not in st.session_state:
15
  st.session_state["messages"] = []
16
 
17
- # Многострочное поле ввода
18
- user_input = st.text_area("Ваш вопрос:", "", height=80)
19
-
20
- # Кнопка для отправки
21
- if st.button("Отправить"):
22
- # Убираем лишние пробелы/переносы
23
- content = user_input.strip()
24
- if content:
25
- # Добавляем пользовательский ввод в историю
26
- st.session_state["messages"].append({"role": "user", "content": content})
27
-
28
- try:
29
- # Отправляем всю историю в модель
30
- response = client.chat.completions.create(
31
- model="deepseek-reasoner",
32
- messages=st.session_state["messages"]
33
- )
34
- # Извлекаем ответ (важно: используем .content, а не ["content"])
35
- assistant_message = response.choices[0].message.content
36
-
37
- # Добавляем ответ модели в историю
38
- st.session_state["messages"].append(
39
- {"role": "assistant", "content": assistant_message}
40
- )
41
- except Exception as e:
42
- st.error(f"Ошибка при обращении к API: {e}")
43
-
44
- # Разделитель
45
- st.write("---")
46
-
47
- # Отображаем историю диалога в «пузырьках»
48
- for msg in st.session_state["messages"]:
49
- if msg["role"] == "user":
50
- # Синий «пузырь» справа
51
  st.markdown(
52
- f"<div style='text-align: right; background-color: #E8F2FF; "
53
- f"padding: 10px; margin: 5px; border-radius: 10px; "
54
- f"display: inline-block; max-width: 80%;'>"
55
- f"{msg['content']}</div>",
56
- unsafe_allow_html=True
57
- )
58
- else:
59
- # Серый «пузырь» слева (ответ модели)
60
- st.markdown(
61
- f"<div style='text-align: left; background-color: #F0F0F0; "
62
- f"padding: 10px; margin: 5px; border-radius: 10px; "
63
- f"display: inline-block; max-width: 80%;'>"
64
- f"{msg['content']}</div>",
65
  unsafe_allow_html=True
66
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  from openai import OpenAI
3
 
4
+ # Настройки страницы (тёмная тема, "wide" разметка)
5
+ st.set_page_config(page_title="Чат с deepseek-reasoner", layout="wide")
6
+
7
+ # Глобальная стилизация через CSS
8
+ st.markdown(
9
+ """
10
+ <style>
11
+ /* Убираем верхний хедер и хамбёргер-меню Streamlit (по желанию) */
12
+ #MainMenu, header, footer {visibility: hidden;}
13
+
14
+ /* Тёмный фон всего приложения */
15
+ body {
16
+ background-color: #181818;
17
+ color: #FFFFFF;
18
+ }
19
+
20
+ /* Контейнер для всего чата */
21
+ .chat-container {
22
+ background-color: #222222;
23
+ padding: 20px;
24
+ border-radius: 10px;
25
+ max-height: 70vh; /* Высота окна для переписки */
26
+ overflow-y: auto; /* Скролл при переполнении */
27
+ margin-bottom: 20px;
28
+ }
29
+
30
+ /* «Пузырёк» для сообщений пользователя (справа) */
31
+ .user-bubble {
32
+ background-color: #005f73;
33
+ color: #ffffff;
34
+ padding: 10px 15px;
35
+ border-radius: 10px;
36
+ margin: 10px;
37
+ max-width: 60%;
38
+ text-align: left;
39
+ margin-left: auto; /* прижимает пузырёк к правому краю */
40
+ }
41
+
42
+ /* «Пузырёк» для сообщений ассистента (слева) */
43
+ .assistant-bubble {
44
+ background-color: #333333;
45
+ color: #ffffff;
46
+ padding: 10px 15px;
47
+ border-radius: 10px;
48
+ margin: 10px;
49
+ max-width: 60%;
50
+ text-align: left;
51
+ margin-right: auto; /* прижимает пузырёк к левому краю */
52
+ }
53
+ </style>
54
+ """,
55
+ unsafe_allow_html=True
56
+ )
57
+
58
+ # Инициализация клиента для DeepSeek (замените ключ на свой)
59
  client = OpenAI(
60
+ api_key="sk-a02694cf3c8640c9ae60428ee2c5a62e",
61
  base_url="https://api.deepseek.com"
62
  )
63
 
64
+ # Заголовок
65
  st.title("Чат с deepseek-reasoner")
66
 
67
+ # Инициализируем историю сообщений в сессии
68
  if "messages" not in st.session_state:
69
  st.session_state["messages"] = []
70
 
71
+ # Функция для отрисовки всей истории чата
72
+ def render_chat():
73
+ st.markdown("<div class='chat-container'>", unsafe_allow_html=True)
74
+
75
+ # Проходим по всем сообщениям
76
+ for msg in st.session_state["messages"]:
77
+ if msg["role"] == "user":
78
+ bubble_class = "user-bubble"
79
+ else:
80
+ bubble_class = "assistant-bubble"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  st.markdown(
82
+ f"<div class='{bubble_class}'>{msg['content']}</div>",
 
 
 
 
 
 
 
 
 
 
 
 
83
  unsafe_allow_html=True
84
  )
85
+
86
+ st.markdown("</div>", unsafe_allow_html=True)
87
+
88
+ # Сразу выводим чат-окно, чтобы было сверху
89
+ render_chat()
90
+
91
+ # Внизу располагаем поле ввода (многострочное) и кнопку «Отправить»
92
+ with st.container():
93
+ user_input = st.text_area("Напишите сообщение и нажмите Enter или кнопку «Отправить»:",
94
+ value="", height=80)
95
+
96
+ if st.button("Отправить"):
97
+ content = user_input.strip()
98
+ if content:
99
+ # Добавляем реплику пользователя в историю
100
+ st.session_state["messages"].append({"role": "user", "content": content})
101
+
102
+ # Пытаемся получить ответ от модели
103
+ try:
104
+ response = client.chat.completions.create(
105
+ model="deepseek-reasoner",
106
+ messages=st.session_state["messages"]
107
+ )
108
+ # Содержимое ответа
109
+ assistant_content = response.choices[0].message.content
110
+
111
+ # Добавляем ответ ассистента в историю
112
+ st.session_state["messages"].append(
113
+ {"role": "assistant", "content": assistant_content}
114
+ )
115
+ except Exception as e:
116
+ st.error(f"Ошибка при обращении к API: {e}")
117
+
118
+ # Очищаем поле ввода после отправки (перезагрузка скрипта сделает это)
119
+ st.experimental_rerun()
120
+