root39058 commited on
Commit
80944fe
·
verified ·
1 Parent(s): 7934afb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -19
app.py CHANGED
@@ -5,7 +5,6 @@ import json
5
  from pathlib import Path
6
  from datetime import datetime
7
  import requests
8
- import os
9
 
10
  # === ЗАГРУЗКА МОДЕЛИ ===
11
  print("🚀 Загрузка модели...")
@@ -21,7 +20,6 @@ HISTORY_DIR = Path("chat_history")
21
  HISTORY_DIR.mkdir(exist_ok=True)
22
 
23
  def get_history_path(username):
24
- # Очищаем имя пользователя от недопустимых символов для имени файла
25
  safe_name = "".join(c for c in username if c.isalnum() or c in ('-', '_')).lower()
26
  return HISTORY_DIR / f"{safe_name}.json"
27
 
@@ -175,6 +173,39 @@ CUSTOM_CSS = """
175
  text-align: center;
176
  font-weight: 600;
177
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  """
179
 
180
  # === ИНТЕРФЕЙС ===
@@ -191,6 +222,9 @@ with gr.Blocks(title="OpenAirAI-X Chat") as demo:
191
  </div>
192
  """)
193
 
 
 
 
194
  with gr.Row():
195
  with gr.Column(scale=1, min_width=250):
196
  user_info = gr.Textbox(label="Пользователь", value="Не авторизован", interactive=False, elem_classes="user-info")
@@ -202,13 +236,12 @@ with gr.Blocks(title="OpenAirAI-X Chat") as demo:
202
  logout_btn = gr.Button("🚪 Выйти", size="sm")
203
 
204
  with gr.Column(scale=3):
205
- # Исправлено для Gradio 6.0: убраны type и show_copy_button
206
  chatbot = gr.Chatbot(label="Диалог", height=500)
207
  with gr.Row():
208
  msg_input = gr.Textbox(placeholder="Напишите сообщение...", lines=2, scale=5, show_label=False)
209
  send_btn = gr.Button("📤 Отправить", variant="primary", scale=1)
210
 
211
- # Экран входа (без gr.LoginButton, чтобы избежать ошибок в Docker)
212
  with gr.Column(visible=True) as login_screen:
213
  gr.HTML("""
214
  <div class="main-header">
@@ -216,16 +249,19 @@ with gr.Blocks(title="OpenAirAI-X Chat") as demo:
216
  <p>Введите данные для входа</p>
217
  </div>
218
  """)
 
 
 
 
219
  gr.Markdown("""
220
  ### 🔐 Вход в систему
221
 
222
- Введите ваше имя пользователя Hugging Face. История чатов будет привязана к этому имени.
223
  """)
224
- with gr.Column(max_width=400):
225
- username_input = gr.Textbox(label="Имя пользователя (HF Username)", placeholder="Например: RootLinux21")
226
- token_input = gr.Textbox(label="HF Token (необязательно, только для проверки PRO)", type="password", placeholder="hf_...")
227
- login_btn = gr.Button("🔑 Войти", variant="primary")
228
- gr.Markdown("*Если у вас есть PRO-подписка, вставьте ваш токен (Settings -> Access Tokens), чтобы увидеть значок 👑*, токен не передаётся OpenRussianAI!")
229
 
230
  # === ОБРАБОТЧИКИ ===
231
 
@@ -254,14 +290,14 @@ with gr.Blocks(title="OpenAirAI-X Chat") as demo:
254
  display_name = f"👤 {username}"
255
 
256
  return (
257
- gr.update(visible=True), # main_interface
258
- gr.update(visible=False), # login_screen
259
- display_name, # user_info
260
- username, # username_state
261
- history_data, # history_state
262
- current_chat_id, # current_chat_id_state
263
- chat_list_choices, # chat_list
264
- gr.update(visible=is_pro, value=pro_badge_html) # pro_badge
265
  )
266
 
267
  def handle_logout():
@@ -326,5 +362,5 @@ with gr.Blocks(title="OpenAirAI-X Chat") as demo:
326
  outputs=[main_interface, login_screen, user_info, username_state, history_state, current_chat_id_state, chat_list, pro_badge]
327
  )
328
 
329
- # Запуск: css передается в launch(), как требует Gradio 6.0
330
  demo.launch(server_name="0.0.0.0", server_port=7860, css=CUSTOM_CSS)
 
5
  from pathlib import Path
6
  from datetime import datetime
7
  import requests
 
8
 
9
  # === ЗАГРУЗКА МОДЕЛИ ===
10
  print("🚀 Загрузка модели...")
 
20
  HISTORY_DIR.mkdir(exist_ok=True)
21
 
22
  def get_history_path(username):
 
23
  safe_name = "".join(c for c in username if c.isalnum() or c in ('-', '_')).lower()
24
  return HISTORY_DIR / f"{safe_name}.json"
25
 
 
173
  text-align: center;
174
  font-weight: 600;
175
  }
176
+ .privacy-banner {
177
+ background: linear-gradient(135deg, #10b981 0%, #059669 100%);
178
+ color: white;
179
+ padding: 15px 20px;
180
+ border-radius: 10px;
181
+ margin: 15px 0;
182
+ display: flex;
183
+ align-items: center;
184
+ gap: 12px;
185
+ font-size: 0.95em;
186
+ box-shadow: 0 2px 8px rgba(16, 185, 129, 0.3);
187
+ }
188
+ .privacy-banner .icon {
189
+ font-size: 1.8em;
190
+ }
191
+ .privacy-banner strong {
192
+ display: block;
193
+ font-size: 1.1em;
194
+ margin-bottom: 4px;
195
+ }
196
+ """
197
+
198
+ # === БАННЕР ПРИВАТНОСТИ (HTML) ===
199
+ PRIVACY_BANNER = """
200
+ <div class="privacy-banner">
201
+ <div class="icon">🔒</div>
202
+ <div>
203
+ <strong>Ваши данные в безопасности</strong>
204
+ Все сообщения обрабатываются локально в этом Space.
205
+ <b>Данные НЕ передаются в OpenRussianAI</b> или третьим лицам.
206
+ История чатов хранится только внутри контейнера.
207
+ </div>
208
+ </div>
209
  """
210
 
211
  # === ИНТЕРФЕЙС ===
 
222
  </div>
223
  """)
224
 
225
+ # Баннер приватности в главном интерфейсе
226
+ gr.HTML(PRIVACY_BANNER)
227
+
228
  with gr.Row():
229
  with gr.Column(scale=1, min_width=250):
230
  user_info = gr.Textbox(label="Пользователь", value="Не авторизован", interactive=False, elem_classes="user-info")
 
236
  logout_btn = gr.Button("🚪 Выйти", size="sm")
237
 
238
  with gr.Column(scale=3):
 
239
  chatbot = gr.Chatbot(label="Диалог", height=500)
240
  with gr.Row():
241
  msg_input = gr.Textbox(placeholder="Напишите сообщение...", lines=2, scale=5, show_label=False)
242
  send_btn = gr.Button("📤 Отправить", variant="primary", scale=1)
243
 
244
+ # Экран входа
245
  with gr.Column(visible=True) as login_screen:
246
  gr.HTML("""
247
  <div class="main-header">
 
249
  <p>Введите данные для входа</p>
250
  </div>
251
  """)
252
+
253
+ # Баннер приватности на экране входа
254
+ gr.HTML(PRIVACY_BANNER)
255
+
256
  gr.Markdown("""
257
  ### 🔐 Вход в систему
258
 
259
+ Введите ваше имя пользователя. История чатов будет привязана к этому имени и сохранена **только внутри этого Space**.
260
  """)
261
+ username_input = gr.Textbox(label="Имя пользователя (HF Username)", placeholder="Например: RootLinux21")
262
+ token_input = gr.Textbox(label="HF Token (необязательно, только для проверки PRO)", placeholder="hf_...")
263
+ login_btn = gr.Button("🔑 Войти", variant="primary")
264
+ gr.Markdown("*Если у вас есть PRO-подписка, вставьте ваш токен (Settings -> Access Tokens), чтобы увидеть значок 👑*")
 
265
 
266
  # === ОБРАБОТЧИКИ ===
267
 
 
290
  display_name = f"👤 {username}"
291
 
292
  return (
293
+ gr.update(visible=True),
294
+ gr.update(visible=False),
295
+ display_name,
296
+ username,
297
+ history_data,
298
+ current_chat_id,
299
+ chat_list_choices,
300
+ gr.update(visible=is_pro, value=pro_badge_html)
301
  )
302
 
303
  def handle_logout():
 
362
  outputs=[main_interface, login_screen, user_info, username_state, history_state, current_chat_id_state, chat_list, pro_badge]
363
  )
364
 
365
+ # Запуск с CSS в launch() (как требует Gradio 6.0)
366
  demo.launch(server_name="0.0.0.0", server_port=7860, css=CUSTOM_CSS)