AnatoliiG commited on
Commit
50a6dda
·
1 Parent(s): afbbaeb

add system status

Browse files
Files changed (2) hide show
  1. requirements.txt +1 -0
  2. ui.py +47 -4
requirements.txt CHANGED
@@ -4,3 +4,4 @@ scipy
4
  huggingface_hub>=0.27.0
5
  gradio>=5.9.0
6
  python-multipart
 
 
4
  huggingface_hub>=0.27.0
5
  gradio>=5.9.0
6
  python-multipart
7
+ psutil
ui.py CHANGED
@@ -1,20 +1,51 @@
 
 
1
  import gradio as gr
 
2
 
3
  import config
4
  from chat_logic import bot_response, set_interactive, user_input
5
  from styles import CSS
6
 
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  def create_ui():
9
  theme = gr.themes.Soft(primary_hue="blue", text_size="lg")
10
 
11
- # Убрали fill_height=True, полагаемся на наш CSS
12
  with gr.Blocks(theme=theme, css=CSS, title="Code LLM") as demo:
13
- # Добавили elem_id="main-row"
14
  with gr.Row(equal_height=True, variant="default", elem_id="main-row"):
15
  # --- ЛЕВАЯ КОЛОНКА ---
16
  with gr.Sidebar(elem_classes=["sidebar"]):
17
  gr.Markdown("### ⚙️ Settings")
 
 
 
 
 
 
 
 
18
  system_prompt = gr.Textbox(
19
  label="System Prompt",
20
  value="Вы опытный программист. Пишите чистый и эффективный код.",
@@ -30,16 +61,15 @@ def create_ui():
30
 
31
  # --- ПРАВАЯ КОЛОНКА ---
32
  with gr.Column(scale=1, elem_id="col-chat-main"):
33
- # Чатбот
34
  chatbot = gr.Chatbot(
35
  elem_id="chatbot",
36
  label="Code Assistant",
37
  avatar_images=(None, "https://api.iconify.design/noto:robot.svg"),
 
38
  layout="bubble",
39
  render_markdown=True,
40
  )
41
 
42
- # Поле ввода
43
  with gr.Row(elem_id="input-area"):
44
  msg = gr.Textbox(
45
  show_label=False,
@@ -55,16 +85,29 @@ def create_ui():
55
  )
56
 
57
  # --- СОБЫТИЯ ---
 
 
 
 
 
58
  msg.submit(user_input, [msg, chatbot], [msg, chatbot], queue=False).then(
59
  lambda: set_interactive(False), None, [msg, submit_btn], queue=False
60
  ).then(
61
  bot_response, [chatbot, system_prompt, temperature, max_tokens], chatbot
 
 
 
 
62
  ).then(lambda: set_interactive(True), None, [msg, submit_btn], queue=False)
63
 
64
  submit_btn.click(user_input, [msg, chatbot], [msg, chatbot], queue=False).then(
65
  lambda: set_interactive(False), None, [msg, submit_btn], queue=False
66
  ).then(
67
  bot_response, [chatbot, system_prompt, temperature, max_tokens], chatbot
 
 
 
 
68
  ).then(lambda: set_interactive(True), None, [msg, submit_btn], queue=False)
69
 
70
  clear_btn.click(lambda: [], None, chatbot, queue=False)
 
1
+ import os
2
+
3
  import gradio as gr
4
+ import psutil
5
 
6
  import config
7
  from chat_logic import bot_response, set_interactive, user_input
8
  from styles import CSS
9
 
10
 
11
+ def get_system_status():
12
+ """Возвращает текущую загрузку системы"""
13
+ # CPU
14
+ cpu_usage = psutil.cpu_percent(interval=None)
15
+
16
+ # RAM
17
+ process = psutil.Process(os.getpid())
18
+ memory_info = process.memory_info()
19
+ ram_usage_mb = memory_info.rss / 1024 / 1024
20
+
21
+ # Общая память системы
22
+ virtual_mem = psutil.virtual_memory()
23
+ ram_percent = virtual_mem.percent
24
+
25
+ return f"""
26
+ ### 🖥️ System Health
27
+ **CPU:** {cpu_usage}%
28
+ **RAM (App):** {ram_usage_mb:.1f} MB
29
+ **RAM (Total):** {ram_percent}%
30
+ """
31
+
32
+
33
  def create_ui():
34
  theme = gr.themes.Soft(primary_hue="blue", text_size="lg")
35
 
 
36
  with gr.Blocks(theme=theme, css=CSS, title="Code LLM") as demo:
 
37
  with gr.Row(equal_height=True, variant="default", elem_id="main-row"):
38
  # --- ЛЕВАЯ КОЛОНКА ---
39
  with gr.Sidebar(elem_classes=["sidebar"]):
40
  gr.Markdown("### ⚙️ Settings")
41
+
42
+ # --- МОНИТОРИНГ ---
43
+ system_status = gr.Markdown(value=get_system_status())
44
+ refresh_btn = gr.Button(
45
+ "🔄 Refresh Status", size="sm", variant="secondary"
46
+ )
47
+ # ------------------
48
+
49
  system_prompt = gr.Textbox(
50
  label="System Prompt",
51
  value="Вы опытный программист. Пишите чистый и эффективный код.",
 
61
 
62
  # --- ПРАВАЯ КОЛОНКА ---
63
  with gr.Column(scale=1, elem_id="col-chat-main"):
 
64
  chatbot = gr.Chatbot(
65
  elem_id="chatbot",
66
  label="Code Assistant",
67
  avatar_images=(None, "https://api.iconify.design/noto:robot.svg"),
68
+ type="messages",
69
  layout="bubble",
70
  render_markdown=True,
71
  )
72
 
 
73
  with gr.Row(elem_id="input-area"):
74
  msg = gr.Textbox(
75
  show_label=False,
 
85
  )
86
 
87
  # --- СОБЫТИЯ ---
88
+
89
+ # Обновление статуса по клику
90
+ refresh_btn.click(get_system_status, None, system_status)
91
+
92
+ # Обновление статуса автоматически при генерации ответа (чтобы видеть пиковую нагрузку)
93
  msg.submit(user_input, [msg, chatbot], [msg, chatbot], queue=False).then(
94
  lambda: set_interactive(False), None, [msg, submit_btn], queue=False
95
  ).then(
96
  bot_response, [chatbot, system_prompt, temperature, max_tokens], chatbot
97
+ ).then(
98
+ get_system_status,
99
+ None,
100
+ system_status, # <-- Обновляем статус после ответа
101
  ).then(lambda: set_interactive(True), None, [msg, submit_btn], queue=False)
102
 
103
  submit_btn.click(user_input, [msg, chatbot], [msg, chatbot], queue=False).then(
104
  lambda: set_interactive(False), None, [msg, submit_btn], queue=False
105
  ).then(
106
  bot_response, [chatbot, system_prompt, temperature, max_tokens], chatbot
107
+ ).then(
108
+ get_system_status,
109
+ None,
110
+ system_status, # <-- Обновляем статус после ответа
111
  ).then(lambda: set_interactive(True), None, [msg, submit_btn], queue=False)
112
 
113
  clear_btn.click(lambda: [], None, chatbot, queue=False)