pygpt-net 2.6.27__py3-none-any.whl → 2.6.29__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 (44) hide show
  1. pygpt_net/CHANGELOG.txt +12 -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/common.py +2 -0
  7. pygpt_net/controller/theme/markdown.py +2 -0
  8. pygpt_net/controller/theme/theme.py +3 -0
  9. pygpt_net/controller/ui/tabs.py +5 -0
  10. pygpt_net/core/audio/backend/native.py +1 -3
  11. pygpt_net/core/command/command.py +2 -0
  12. pygpt_net/core/idx/llm.py +21 -3
  13. pygpt_net/core/render/web/helpers.py +13 -3
  14. pygpt_net/core/render/web/renderer.py +3 -3
  15. pygpt_net/data/config/config.json +3 -3
  16. pygpt_net/data/config/models.json +3 -3
  17. pygpt_net/data/config/settings.json +27 -28
  18. pygpt_net/data/css/web-blocks.darkest.css +91 -0
  19. pygpt_net/data/css/web-chatgpt.css +7 -5
  20. pygpt_net/data/css/web-chatgpt.dark.css +5 -2
  21. pygpt_net/data/css/web-chatgpt.darkest.css +91 -0
  22. pygpt_net/data/css/web-chatgpt.light.css +8 -2
  23. pygpt_net/data/css/web-chatgpt_wide.css +7 -4
  24. pygpt_net/data/css/web-chatgpt_wide.dark.css +5 -2
  25. pygpt_net/data/css/web-chatgpt_wide.darkest.css +91 -0
  26. pygpt_net/data/css/web-chatgpt_wide.light.css +9 -6
  27. pygpt_net/data/themes/dark_darkest.css +31 -0
  28. pygpt_net/data/themes/dark_darkest.xml +10 -0
  29. pygpt_net/plugin/tuya/__init__.py +12 -0
  30. pygpt_net/plugin/tuya/config.py +256 -0
  31. pygpt_net/plugin/tuya/plugin.py +117 -0
  32. pygpt_net/plugin/tuya/worker.py +588 -0
  33. pygpt_net/plugin/wikipedia/__init__.py +12 -0
  34. pygpt_net/plugin/wikipedia/config.py +228 -0
  35. pygpt_net/plugin/wikipedia/plugin.py +114 -0
  36. pygpt_net/plugin/wikipedia/worker.py +430 -0
  37. pygpt_net/provider/core/config/patch.py +11 -0
  38. pygpt_net/ui/widget/tabs/output.py +2 -0
  39. pygpt_net/ui/widget/textarea/input.py +10 -7
  40. {pygpt_net-2.6.27.dist-info → pygpt_net-2.6.29.dist-info}/METADATA +50 -6
  41. {pygpt_net-2.6.27.dist-info → pygpt_net-2.6.29.dist-info}/RECORD +44 -31
  42. {pygpt_net-2.6.27.dist-info → pygpt_net-2.6.29.dist-info}/LICENSE +0 -0
  43. {pygpt_net-2.6.27.dist-info → pygpt_net-2.6.29.dist-info}/WHEEL +0 -0
  44. {pygpt_net-2.6.27.dist-info → pygpt_net-2.6.29.dist-info}/entry_points.txt +0 -0
pygpt_net/CHANGELOG.txt CHANGED
@@ -1,3 +1,15 @@
1
+ 2.6.29 (2025-08-28)
2
+
3
+ - Verbose options have been moved to the Developer section in settings.
4
+ - Enhanced logging of embeddings usage.
5
+ - Fixed styles list.
6
+
7
+ 2.6.28 (2025-08-27)
8
+
9
+ - Added new plugins: Tuya (IoT) and Wikipedia.
10
+ - Improved formatting of JSON command output.
11
+ - Fixed CSS issues.
12
+
1
13
  2.6.27 (2025-08-26)
2
14
 
3
15
  - 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.28 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.29"
17
+ __build__ = "2025-08-28"
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)
@@ -196,6 +196,8 @@ class Common:
196
196
  continue
197
197
  for file in os.listdir(path):
198
198
  if file.startswith("web-") and file.endswith('.css'):
199
+ if file.endswith("darkest.css"):
200
+ continue
199
201
  to_replace = ['web-', '.css', '.light', '.dark']
200
202
  for item in to_replace:
201
203
  file = file.replace(item, '')
@@ -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'
@@ -114,6 +114,9 @@ class Theme:
114
114
 
115
115
  :param name: web style name
116
116
  """
117
+ styles_list = self.common.get_styles_list()
118
+ if name not in styles_list:
119
+ name = "chatgpt"
117
120
  QApplication.processEvents()
118
121
  core = self.window.core
119
122
  core.config.set('theme.style', name)
@@ -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
pygpt_net/core/idx/llm.py CHANGED
@@ -10,7 +10,7 @@
10
10
  # ================================================== #
11
11
 
12
12
  import os.path
13
- from typing import Optional, Union
13
+ from typing import Optional, Union, List, Dict
14
14
 
15
15
  from llama_index.core.llms.llm import BaseLLM
16
16
  from llama_index.core.multi_modal_llms import MultiModalLLM
@@ -119,6 +119,8 @@ class Llm:
119
119
  window=self.window,
120
120
  env=env,
121
121
  )
122
+ model_name = self.extract_model_name_from_args(args)
123
+ self.window.core.idx.log(f"Embeddings: using global provider: {provider}, model_name: {model_name}")
122
124
  return self.window.core.llm.llms[provider].get_embeddings_model(
123
125
  window=self.window,
124
126
  config=args,
@@ -162,8 +164,8 @@ class Llm:
162
164
 
163
165
  # try to get custom args from config for the model provider
164
166
  is_custom_provider = False
165
- default = self.window.core.config.get("llama.idx.embeddings.default", [])
166
- for item in default:
167
+ defaults = self.window.core.config.get("llama.idx.embeddings.default", [])
168
+ for item in defaults:
167
169
  provider = item.get("provider", "")
168
170
  if provider and provider == model.provider:
169
171
  is_custom_provider = True
@@ -188,6 +190,7 @@ class Llm:
188
190
  "value": client_args.get("api_key", ""),
189
191
  }
190
192
  )
193
+ self.window.core.idx.log(f"Embeddings: trying to use {m.provider}, model_name: {model_name}")
191
194
  break
192
195
 
193
196
  if is_custom_provider:
@@ -196,5 +199,20 @@ class Llm:
196
199
  config=args,
197
200
  )
198
201
  if not embed_model:
202
+ self.window.core.idx.log(f"Embeddings: not configured for {model.provider}. Fallback: using global provider.")
199
203
  embed_model = self.get_embeddings_provider()
200
204
  return embed_model
205
+
206
+ def extract_model_name_from_args(self, args: List[Dict]) -> str:
207
+ """
208
+ Extract model name from provider args
209
+
210
+ :param args: List of args
211
+ :return: Model name if configured
212
+ """
213
+ model_name = ""
214
+ for item in args:
215
+ if item.get("name") in ["model", "model_name"]:
216
+ model_name = item.get("value")
217
+ break
218
+ return model_name
@@ -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.29",
4
+ "app.version": "2.6.29",
5
+ "updated_at": "2025-08-28T00: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.29",
4
+ "app.version": "2.6.29",
5
+ "updated_at": "2025-08-28T23:07:35"
6
6
  },
7
7
  "items": {
8
8
  "SpeakLeash/bielik-11b-v2.3-instruct:Q4_K_M": {
@@ -683,20 +683,7 @@
683
683
  "multiplier": null,
684
684
  "step": null,
685
685
  "advanced": false
686
- },
687
- "ctx.attachment.verbose": {
688
- "section": "files",
689
- "type": "bool",
690
- "slider": false,
691
- "label": "settings.ctx.attachment.verbose",
692
- "description": "settings.ctx.attachment.verbose.desc",
693
- "value": false,
694
- "min": null,
695
- "max": null,
696
- "multiplier": null,
697
- "step": null,
698
- "advanced": false
699
- },
686
+ },
700
687
  "ctx.attachment.img": {
701
688
  "section": "files",
702
689
  "type": "bool",
@@ -2047,20 +2034,7 @@
2047
2034
  "step": 1,
2048
2035
  "advanced": false,
2049
2036
  "tab": "llama"
2050
- },
2051
- "agent.llama.verbose": {
2052
- "section": "agent",
2053
- "type": "bool",
2054
- "slider": false,
2055
- "label": "settings.agent.llama.verbose",
2056
- "value": false,
2057
- "min": 0,
2058
- "max": 0,
2059
- "multiplier": 1,
2060
- "step": 1,
2061
- "advanced": false,
2062
- "tab": "general"
2063
- },
2037
+ },
2064
2038
  "agent.idx.auto_retrieve": {
2065
2039
  "section": "agent",
2066
2040
  "type": "bool",
@@ -2318,6 +2292,31 @@
2318
2292
  "step": null,
2319
2293
  "advanced": false
2320
2294
  },
2295
+ "ctx.attachment.verbose": {
2296
+ "section": "developer",
2297
+ "type": "bool",
2298
+ "slider": false,
2299
+ "label": "Log attachments usage to console",
2300
+ "value": false,
2301
+ "min": null,
2302
+ "max": null,
2303
+ "multiplier": null,
2304
+ "step": null,
2305
+ "advanced": false
2306
+ },
2307
+ "agent.llama.verbose": {
2308
+ "section": "developer",
2309
+ "type": "bool",
2310
+ "slider": false,
2311
+ "label": "Log Agents usage to console",
2312
+ "value": false,
2313
+ "min": 0,
2314
+ "max": 0,
2315
+ "multiplier": 1,
2316
+ "step": 1,
2317
+ "advanced": false,
2318
+ "tab": "general"
2319
+ },
2321
2320
  "log.llama": {
2322
2321
  "section": "developer",
2323
2322
  "type": "bool",
@@ -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 {{