pygpt-net 2.6.27__py3-none-any.whl → 2.6.28__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. pygpt_net/CHANGELOG.txt +6 -0
  2. pygpt_net/__init__.py +3 -3
  3. pygpt_net/app.py +5 -1
  4. pygpt_net/controller/kernel/kernel.py +2 -0
  5. pygpt_net/controller/notepad/notepad.py +10 -1
  6. pygpt_net/controller/theme/markdown.py +2 -0
  7. pygpt_net/controller/ui/tabs.py +5 -0
  8. pygpt_net/core/audio/backend/native.py +1 -3
  9. pygpt_net/core/command/command.py +2 -0
  10. pygpt_net/core/render/web/helpers.py +13 -3
  11. pygpt_net/core/render/web/renderer.py +3 -3
  12. pygpt_net/data/config/config.json +3 -3
  13. pygpt_net/data/config/models.json +3 -3
  14. pygpt_net/data/css/web-blocks.darkest.css +91 -0
  15. pygpt_net/data/css/web-chatgpt.css +7 -5
  16. pygpt_net/data/css/web-chatgpt.dark.css +5 -2
  17. pygpt_net/data/css/web-chatgpt.darkest.css +91 -0
  18. pygpt_net/data/css/web-chatgpt.light.css +8 -2
  19. pygpt_net/data/css/web-chatgpt_wide.css +7 -4
  20. pygpt_net/data/css/web-chatgpt_wide.dark.css +5 -2
  21. pygpt_net/data/css/web-chatgpt_wide.darkest.css +91 -0
  22. pygpt_net/data/css/web-chatgpt_wide.light.css +9 -6
  23. pygpt_net/data/themes/dark_darkest.css +31 -0
  24. pygpt_net/data/themes/dark_darkest.xml +10 -0
  25. pygpt_net/plugin/tuya/__init__.py +12 -0
  26. pygpt_net/plugin/tuya/config.py +256 -0
  27. pygpt_net/plugin/tuya/plugin.py +117 -0
  28. pygpt_net/plugin/tuya/worker.py +588 -0
  29. pygpt_net/plugin/wikipedia/__init__.py +12 -0
  30. pygpt_net/plugin/wikipedia/config.py +228 -0
  31. pygpt_net/plugin/wikipedia/plugin.py +114 -0
  32. pygpt_net/plugin/wikipedia/worker.py +430 -0
  33. pygpt_net/provider/core/config/patch.py +11 -0
  34. pygpt_net/ui/widget/tabs/output.py +2 -0
  35. pygpt_net/ui/widget/textarea/input.py +10 -7
  36. {pygpt_net-2.6.27.dist-info → pygpt_net-2.6.28.dist-info}/METADATA +40 -2
  37. {pygpt_net-2.6.27.dist-info → pygpt_net-2.6.28.dist-info}/RECORD +40 -27
  38. {pygpt_net-2.6.27.dist-info → pygpt_net-2.6.28.dist-info}/LICENSE +0 -0
  39. {pygpt_net-2.6.27.dist-info → pygpt_net-2.6.28.dist-info}/WHEEL +0 -0
  40. {pygpt_net-2.6.27.dist-info → pygpt_net-2.6.28.dist-info}/entry_points.txt +0 -0
pygpt_net/CHANGELOG.txt CHANGED
@@ -1,3 +1,9 @@
1
+ 2.6.28 (2025-08-27)
2
+
3
+ - Added new plugins: Tuya (IoT) and Wikipedia.
4
+ - Improved formatting of JSON command output.
5
+ - Fixed CSS issues.
6
+
1
7
  2.6.27 (2025-08-26)
2
8
 
3
9
  - Simplified audio input: A microphone icon has been added to the input field.
pygpt_net/__init__.py CHANGED
@@ -6,15 +6,15 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.08.26 00:00:00 #
9
+ # Updated Date: 2025.08.27 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  __author__ = "Marcin Szczygliński"
13
13
  __copyright__ = "Copyright 2025, Marcin Szczygliński"
14
14
  __credits__ = ["Marcin Szczygliński"]
15
15
  __license__ = "MIT"
16
- __version__ = "2.6.27"
17
- __build__ = "2025-08-26"
16
+ __version__ = "2.6.28"
17
+ __build__ = "2025-08-27"
18
18
  __maintainer__ = "Marcin Szczygliński"
19
19
  __github__ = "https://github.com/szczyglis-dev/py-gpt"
20
20
  __report__ = "https://github.com/szczyglis-dev/py-gpt/issues"
pygpt_net/app.py CHANGED
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.08.26 23:00:00 #
9
+ # Updated Date: 2025.08.27 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
@@ -89,6 +89,8 @@ from pygpt_net.plugin.slack import Plugin as SlackPlugin
89
89
  from pygpt_net.plugin.github import Plugin as GithubPlugin
90
90
  from pygpt_net.plugin.bitbucket import Plugin as BitbucketPlugin
91
91
  from pygpt_net.plugin.server import Plugin as ServerPlugin
92
+ from pygpt_net.plugin.tuya import Plugin as TuyaPlugin
93
+ from pygpt_net.plugin.wikipedia import Plugin as WikipediaPlugin
92
94
 
93
95
  # agents (Llama-index)
94
96
  # from pygpt_net.provider.agents.llama_index.legacy.openai import OpenAIAgent
@@ -410,6 +412,8 @@ def run(**kwargs):
410
412
  launcher.add_plugin(GithubPlugin())
411
413
  launcher.add_plugin(BitbucketPlugin())
412
414
  launcher.add_plugin(ServerPlugin())
415
+ launcher.add_plugin(TuyaPlugin())
416
+ launcher.add_plugin(WikipediaPlugin())
413
417
 
414
418
  # register custom plugins
415
419
  plugins = kwargs.get('plugins', None)
@@ -13,6 +13,7 @@ import threading
13
13
  from typing import Any, Dict, Optional, Union, List
14
14
 
15
15
  from PySide6.QtCore import QObject, Slot
16
+ from PySide6.QtWidgets import QApplication
16
17
 
17
18
  from pygpt_net.core.types import (
18
19
  MODE_AGENT,
@@ -337,6 +338,7 @@ class Kernel:
337
338
  """
338
339
  self.status = status
339
340
  self.window.ui.status(status)
341
+ QApplication.processEvents() # process events to update UI
340
342
 
341
343
  def resume(self):
342
344
  """
@@ -350,4 +350,13 @@ class Notepad:
350
350
  if not widget.opened:
351
351
  widget.opened = True
352
352
  if idx not in self.opened_idx:
353
- self.opened_idx.add(idx)
353
+ self.opened_idx.add(idx)
354
+
355
+ def focus_opened(self, tab = None):
356
+ """Focus opened notepad"""
357
+ if tab is None:
358
+ tab = self.window.controller.ui.tabs.get_current_tab()
359
+ if tab is not None and tab.type == Tab.TAB_NOTEPAD:
360
+ widget = self.window.ui.notepad.get(tab.data_id)
361
+ if widget is not None:
362
+ QTimer.singleShot(100, widget.textarea.setFocus)
@@ -101,6 +101,8 @@ class Markdown:
101
101
  color = '.light'
102
102
  else:
103
103
  color = '.dark'
104
+ if base_name == 'web' and theme.endswith('darkest'):
105
+ color = '.darkest'
104
106
 
105
107
  # load CSS, app + user
106
108
  file_base = name + suffix + '.css'
@@ -170,6 +170,7 @@ class Tabs:
170
170
  w = self.window
171
171
  core = w.core
172
172
  tabs_core = core.tabs
173
+ appended = self.appended
173
174
 
174
175
  tab = tabs_core.get_tab_by_index(idx, column_idx)
175
176
  if tab is None:
@@ -185,6 +186,8 @@ class Tabs:
185
186
  if meta is not None:
186
187
  w.controller.ctx.load(meta.id)
187
188
  self.create_new_on_tab = True
189
+ else:
190
+ self.current = idx
188
191
 
189
192
  prev_tab = self.current
190
193
  prev_column = self.column_idx
@@ -197,6 +200,8 @@ class Tabs:
197
200
  if tab.type == Tab.TAB_NOTEPAD:
198
201
  w.controller.notepad.opened_once = True
199
202
  w.controller.notepad.on_open(idx, column_idx)
203
+ if appended:
204
+ w.controller.notepad.focus_opened(tab)
200
205
  elif tab.type == Tab.TAB_CHAT:
201
206
  meta_id = tab.data_id
202
207
  if meta_id is None:
@@ -507,9 +507,6 @@ class NativeBackend(QObject):
507
507
  :param signals: Signals to emit on playback
508
508
  :return: True if started
509
509
  """
510
- if signals is not None:
511
- signals.playback.emit(event_name)
512
-
513
510
  self.audio_output = QAudioOutput()
514
511
  self.audio_output.setVolume(1.0)
515
512
 
@@ -561,6 +558,7 @@ class NativeBackend(QObject):
561
558
  self.playback_timer.start()
562
559
  self.volume_timer.start()
563
560
  signals.volume_changed.emit(0)
561
+ signals.playback.emit(event_name)
564
562
 
565
563
  def stop_timers(self):
566
564
  """
@@ -525,6 +525,8 @@ class Command:
525
525
  "bool": "boolean",
526
526
  "dict": "object",
527
527
  "list": "array",
528
+ "float": "number",
529
+ "any": "string",
528
530
  }
529
531
 
530
532
  limit = self.DESC_LIMIT
@@ -8,7 +8,7 @@
8
8
  # Created By : Marcin Szczygliński #
9
9
  # Updated Date: 2025.08.24 02:00:00 #
10
10
  # ================================================== #
11
-
11
+ import json
12
12
  import re
13
13
  import html
14
14
 
@@ -155,14 +155,24 @@ class Helpers:
155
155
  s = f'<div class="cmd">&gt; {s}</div>'
156
156
  return s
157
157
 
158
- def format_cmd_text(self, text: str) -> str:
158
+ def format_cmd_text(self, text: str, indent: bool = False) -> str:
159
159
  """
160
160
  Post-format cmd text
161
161
 
162
162
  :param text: text to format
163
+ :param indent: whether to indent text
163
164
  :return: formatted text
164
165
  """
165
- return html.escape(text)
166
+ if not text:
167
+ return ""
168
+ if not indent:
169
+ return html.escape(text)
170
+ else:
171
+ try:
172
+ return html.escape(json.dumps(json.loads(text), indent=2))
173
+ except Exception:
174
+ return html.escape(text)
175
+
166
176
 
167
177
  def format_chunk(self, text: str) -> str:
168
178
  """
@@ -1317,15 +1317,15 @@ class Renderer(BaseRenderer):
1317
1317
  if is_cmd:
1318
1318
  if ctx.results is not None and len(ctx.results) > 0 \
1319
1319
  and isinstance(ctx.extra, dict) and "agent_step" in ctx.extra:
1320
- tool_output = self.helpers.format_cmd_text(str(ctx.input))
1320
+ tool_output = self.helpers.format_cmd_text(str(ctx.input), indent=True)
1321
1321
  output_class = ""
1322
1322
  else:
1323
- tool_output = self.helpers.format_cmd_text(str(next_ctx.input))
1323
+ tool_output = self.helpers.format_cmd_text(str(next_ctx.input), indent=True)
1324
1324
  output_class = ""
1325
1325
 
1326
1326
  elif ctx.results is not None and len(ctx.results) > 0 \
1327
1327
  and isinstance(ctx.extra, dict) and "agent_step" in ctx.extra:
1328
- tool_output = self.helpers.format_cmd_text(str(ctx.input))
1328
+ tool_output = self.helpers.format_cmd_text(str(ctx.input), indent=True)
1329
1329
  else:
1330
1330
  out = (getattr(ctx, "output", "") or "")
1331
1331
  cmds = getattr(ctx, "cmds", ())
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.6.27",
4
- "app.version": "2.6.27",
5
- "updated_at": "2025-08-26T00:00:00"
3
+ "version": "2.6.28",
4
+ "app.version": "2.6.28",
5
+ "updated_at": "2025-08-27T00:00:00"
6
6
  },
7
7
  "access.audio.event.speech": false,
8
8
  "access.audio.event.speech.disabled": [],
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.6.27",
4
- "app.version": "2.6.27",
5
- "updated_at": "2025-08-26T23:07:35"
3
+ "version": "2.6.28",
4
+ "app.version": "2.6.28",
5
+ "updated_at": "2025-08-27T23:07:35"
6
6
  },
7
7
  "items": {
8
8
  "SpeakLeash/bielik-11b-v2.3-instruct:Q4_K_M": {
@@ -0,0 +1,91 @@
1
+ body {{
2
+ color: #fff;
3
+ background-color: #202020;
4
+ }}
5
+ ::-webkit-scrollbar {{
6
+ background: #1c1c1c;
7
+ }}
8
+ ::-webkit-scrollbar-thumb {{
9
+ background: #282828;
10
+ }}
11
+ ::-webkit-scrollbar-thumb:hover {{
12
+ background: #333333;
13
+ }}
14
+ ::-webkit-scrollbar-corner {{
15
+ background: #232629;
16
+ }}
17
+ a {{
18
+ color: #a1b5c4 !important;
19
+ }}
20
+ a:hover {{
21
+ color: #b8cad7 !important;
22
+ }}
23
+ .msg-user {{
24
+ color: #cbcbcb;
25
+ }}
26
+ .msg-user p {{
27
+ color: #cbcbcb;
28
+ }}
29
+ .msg-bot {{
30
+ color: #fff;
31
+ }}
32
+ .msg-bot p {{
33
+ color: #fff;
34
+ }}
35
+ .msg-highlight {{
36
+ border: 1px solid #323436;
37
+ background-color: #272a2d;
38
+ }}
39
+ .cmd {{
40
+ color: #4d4d4d;
41
+ }}
42
+ .ts {{
43
+ color: #4d4d4d;
44
+ }}
45
+ .list {{
46
+ }}
47
+ code {{
48
+ color: {QTMATERIAL_PRIMARYLIGHTCOLOR};
49
+ }}
50
+ .code-wrapper {{
51
+ border: 1px solid #1d1f21;
52
+ }}
53
+ .code-header-wrapper {{
54
+ background-color: #1d1f21;
55
+ }}
56
+ .code-header-copy {{
57
+ color: #a0a0a0;
58
+ }}
59
+ .code-header-copy:hover {{
60
+ color: #fff;
61
+ }}
62
+ .code-header-lang {{
63
+ color: #686868;
64
+ }}
65
+ .action-icons a:hover {{
66
+ filter: brightness(130%);
67
+ }}
68
+ .display-blocks {{
69
+ background-color: #31363b;
70
+ }}
71
+ .display-blocks .msg-box {{
72
+ background-color: #232629;
73
+ border: 1px solid gray;
74
+ }}
75
+ .display-blocks .name-bot::before {{
76
+ background-color: {QTMATERIAL_PRIMARYLIGHTCOLOR};
77
+ }}
78
+ .display-blocks .name-user::before {{
79
+ background-color: silver;
80
+ }}
81
+ /* loader */
82
+ .lds-ring {{
83
+ color: #fff;
84
+ }}
85
+
86
+ .tips p {{
87
+ color: #5e5e5e;
88
+ }}
89
+ .msg-box .name-header.name-bot {{
90
+ color: #cfcfcf;
91
+ }}
@@ -55,10 +55,11 @@ p {{
55
55
 
56
56
  /* cmd */
57
57
  .cmd {{
58
- font-family: 'Lato';
58
+ font-family: 'Monaspace Neon';
59
59
  text-decoration: none;
60
+ padding-top: 5px;
60
61
  padding-bottom: 0px;
61
- font-size: 0.8rem;
62
+ font-size: 0.75rem;
62
63
  }}
63
64
 
64
65
  /* lists, code */
@@ -249,13 +250,14 @@ code {{
249
250
  color: gray;
250
251
  }}
251
252
  .tool-output .content {{
253
+ font-family: 'Monaspace Neon';
252
254
  padding: 10px;
253
255
  color: #4d4d4d !important;
254
- font-size: 0.8rem;
256
+ font-size: 0.75rem;
255
257
  }}
256
258
  .tool-output .toggle-cmd-output {{
257
259
  cursor: pointer;
258
- padding-top: 10px;
260
+ padding-top: 0px;
259
261
  display: block;
260
262
  color: gray;
261
263
  }}
@@ -308,7 +310,7 @@ code {{
308
310
  height: 150px;
309
311
  margin: 0;
310
312
  margin-bottom: 0px !important;
311
- border-radius: 5px;
313
+ border-radius: 0;
312
314
  width: auto;
313
315
  }}
314
316
  .extra-src-img-box .img-wrapper:hover {{
@@ -18,7 +18,7 @@ p {{
18
18
  color: #fff;
19
19
  }}
20
20
  a {{
21
- color: #a1b5c4 !important;
21
+ color: #b5c3cd !important;
22
22
  }}
23
23
  a:hover {{
24
24
  color: #b8cad7 !important;
@@ -37,7 +37,7 @@ a:hover {{
37
37
  color: #fff;
38
38
  }}
39
39
  .cmd {{
40
- color: #4d4d4d;
40
+ color: #4d4d4d !important;
41
41
  }}
42
42
  .ts {{
43
43
  color: #4d4d4d;
@@ -71,6 +71,9 @@ code {{
71
71
  .name-user::before {{
72
72
  background-color: silver;
73
73
  }}
74
+ .tool-output .content {{
75
+ color: #4d4d4d !important;
76
+ }}
74
77
 
75
78
  /* loader */
76
79
  .lds-ring {{
@@ -0,0 +1,91 @@
1
+ body {{
2
+ color: #fff;
3
+ background-color: #202020;
4
+ }}
5
+ ::-webkit-scrollbar {{
6
+ background: #1c1c1c;
7
+ }}
8
+ ::-webkit-scrollbar-thumb {{
9
+ background: #282828;
10
+ }}
11
+ ::-webkit-scrollbar-thumb:hover {{
12
+ background: #333333;
13
+ }}
14
+ ::-webkit-scrollbar-corner {{
15
+ background: #232629;
16
+ }}
17
+ p {{
18
+ color: #fff;
19
+ }}
20
+ a {{
21
+ color: #b5c3cd !important;
22
+ }}
23
+ a:hover {{
24
+ color: #b8cad7 !important;
25
+ }}
26
+ .msg-user {{
27
+ background: #303030;
28
+ color: #fff;
29
+ }}
30
+ .msg-user p {{
31
+ color: #fff;
32
+ }}
33
+ .msg-bot {{
34
+ color: #fff;
35
+ }}
36
+ .msg-bot p {{
37
+ color: #fff;
38
+ }}
39
+ .cmd {{
40
+ color: #4d4d4d !important;
41
+ }}
42
+ .ts {{
43
+ color: #4d4d4d;
44
+ }}
45
+ .list {{
46
+ }}
47
+ code {{
48
+ color: {QTMATERIAL_PRIMARYLIGHTCOLOR};
49
+ }}
50
+ .code-header-wrapper {{
51
+ background-color: #303030;
52
+ }}
53
+ .code-header-action {{
54
+ color: silver !important;
55
+ }}
56
+ .code-header-action:hover {{
57
+ color: #fff;
58
+ }}
59
+ .code-header-action:hover img {{
60
+ filter: brightness(130%);
61
+ }}
62
+ .code-header-lang {{
63
+ color: #686868;
64
+ }}
65
+ .action-icons a:hover {{
66
+ filter: brightness(130%);
67
+ }}
68
+ .name-bot::before {{
69
+ background-color: {QTMATERIAL_PRIMARYLIGHTCOLOR};
70
+ }}
71
+ .name-user::before {{
72
+ background-color: silver;
73
+ }}
74
+ .tool-output .content {{
75
+ color: #4d4d4d !important;
76
+ }}
77
+
78
+ /* loader */
79
+ .lds-ring {{
80
+ color: #fff;
81
+ }}
82
+ .append_live {{
83
+ color: gray;
84
+ }}
85
+
86
+ .tips p {{
87
+ color: #5e5e5e;
88
+ }}
89
+ .msg-box .name-header.name-bot {{
90
+ color: #cfcfcf;
91
+ }}
@@ -18,7 +18,10 @@ p {{
18
18
  color: #000;
19
19
  }}
20
20
  a {{
21
- color: #3b7097 !important;
21
+ color: #2b4e67 !important;
22
+ }}
23
+ a:hover {{
24
+ color: #426f90 !important;
22
25
  }}
23
26
  .msg-user {{
24
27
  color: #000;
@@ -33,7 +36,7 @@ a {{
33
36
  color: #000;
34
37
  }}
35
38
  .cmd {{
36
- color: #4d4d4d;
39
+ color: #888787 !important;
37
40
  text-decoration: none;
38
41
  }}
39
42
  .ts {{
@@ -76,6 +79,9 @@ code {{
76
79
  .action-icons a:hover {{
77
80
  filter: brightness(60%);
78
81
  }}
82
+ .tool-output .content {{
83
+ color: #888787 !important;
84
+ }}
79
85
 
80
86
  /* loader */
81
87
  .lds-ring {{
@@ -55,10 +55,11 @@ p {{
55
55
 
56
56
  /* cmd */
57
57
  .cmd {{
58
- font-family: 'Lato';
58
+ font-family: 'Monaspace Neon';
59
59
  text-decoration: none;
60
+ padding-top: 5px;
60
61
  padding-bottom: 0px;
61
- font-size: 0.8rem;
62
+ font-size: 0.75rem;
62
63
  }}
63
64
 
64
65
  /* lists, code */
@@ -245,12 +246,14 @@ code {{
245
246
  color: gray;
246
247
  }}
247
248
  .tool-output .content {{
249
+ font-family: 'Monaspace Neon';
248
250
  padding: 10px;
249
251
  color: gray !important;
252
+ font-size: 0.75rem;
250
253
  }}
251
254
  .tool-output .toggle-cmd-output {{
252
255
  cursor: pointer;
253
- padding-top: 10px;
256
+ padding-top: 0px;
254
257
  display: block;
255
258
  color: gray;
256
259
  }}
@@ -303,7 +306,7 @@ code {{
303
306
  height: 150px;
304
307
  margin: 0;
305
308
  margin-bottom: 0px !important;
306
- border-radius: 5px;
309
+ border-radius: 0;
307
310
  width: auto;
308
311
  }}
309
312
  .extra-src-img-box .img-wrapper:hover {{
@@ -18,7 +18,7 @@ p {{
18
18
  color: #fff;
19
19
  }}
20
20
  a {{
21
- color: #a1b5c4 !important;
21
+ color: #b5c3cd !important;
22
22
  }}
23
23
  a:hover {{
24
24
  color: #b8cad7 !important;
@@ -37,7 +37,7 @@ a:hover {{
37
37
  color: #fff;
38
38
  }}
39
39
  .cmd {{
40
- color: #4d4d4d;
40
+ color: #4d4d4d !important;
41
41
  }}
42
42
  .ts {{
43
43
  color: #4d4d4d;
@@ -71,6 +71,9 @@ code {{
71
71
  .name-user::before {{
72
72
  background-color: silver;
73
73
  }}
74
+ .tool-output .content {{
75
+ color: #4d4d4d !important;
76
+ }}
74
77
 
75
78
  /* loader */
76
79
  .lds-ring {{
@@ -0,0 +1,91 @@
1
+ body {{
2
+ color: #fff;
3
+ background-color: #202020;
4
+ }}
5
+ ::-webkit-scrollbar {{
6
+ background: #1c1c1c;
7
+ }}
8
+ ::-webkit-scrollbar-thumb {{
9
+ background: #282828;
10
+ }}
11
+ ::-webkit-scrollbar-thumb:hover {{
12
+ background: #333333;
13
+ }}
14
+ ::-webkit-scrollbar-corner {{
15
+ background: #232629;
16
+ }}
17
+ p {{
18
+ color: #fff;
19
+ }}
20
+ a {{
21
+ color: #b5c3cd !important;
22
+ }}
23
+ a:hover {{
24
+ color: #b8cad7 !important;
25
+ }}
26
+ .msg-user {{
27
+ background: #303030;
28
+ color: #fff;
29
+ }}
30
+ .msg-user p {{
31
+ color: #fff;
32
+ }}
33
+ .msg-bot {{
34
+ color: #fff;
35
+ }}
36
+ .msg-bot p {{
37
+ color: #fff;
38
+ }}
39
+ .cmd {{
40
+ color: #4d4d4d !important;
41
+ }}
42
+ .ts {{
43
+ color: #4d4d4d;
44
+ }}
45
+ .list {{
46
+ }}
47
+ code {{
48
+ color: {QTMATERIAL_PRIMARYLIGHTCOLOR};
49
+ }}
50
+ .code-header-wrapper {{
51
+ background-color: #303030;
52
+ }}
53
+ .code-header-action {{
54
+ color: silver !important;
55
+ }}
56
+ .code-header-action:hover {{
57
+ color: #fff;
58
+ }}
59
+ .code-header-action:hover img {{
60
+ filter: brightness(130%);
61
+ }}
62
+ .code-header-lang {{
63
+ color: #686868;
64
+ }}
65
+ .action-icons a:hover {{
66
+ filter: brightness(130%);
67
+ }}
68
+ .name-bot::before {{
69
+ background-color: {QTMATERIAL_PRIMARYLIGHTCOLOR};
70
+ }}
71
+ .name-user::before {{
72
+ background-color: silver;
73
+ }}
74
+ .tool-output .content {{
75
+ color: #4d4d4d !important;
76
+ }}
77
+
78
+ /* loader */
79
+ .lds-ring {{
80
+ color: #fff;
81
+ }}
82
+ .append_live {{
83
+ color: gray;
84
+ }}
85
+
86
+ .tips p {{
87
+ color: #5e5e5e;
88
+ }}
89
+ .msg-box .name-header.name-bot {{
90
+ color: #cfcfcf;
91
+ }}