pygpt-net 2.6.44__py3-none-any.whl → 2.6.46__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 (82) hide show
  1. pygpt_net/CHANGELOG.txt +12 -0
  2. pygpt_net/__init__.py +3 -3
  3. pygpt_net/app.py +0 -5
  4. pygpt_net/controller/ctx/ctx.py +6 -0
  5. pygpt_net/controller/debug/debug.py +11 -9
  6. pygpt_net/controller/debug/fixtures.py +1 -1
  7. pygpt_net/controller/dialogs/debug.py +40 -29
  8. pygpt_net/core/debug/agent.py +19 -14
  9. pygpt_net/core/debug/assistants.py +22 -24
  10. pygpt_net/core/debug/attachments.py +11 -7
  11. pygpt_net/core/debug/config.py +22 -23
  12. pygpt_net/core/debug/console/console.py +2 -1
  13. pygpt_net/core/debug/context.py +63 -63
  14. pygpt_net/core/debug/db.py +1 -4
  15. pygpt_net/core/debug/debug.py +1 -1
  16. pygpt_net/core/debug/events.py +14 -11
  17. pygpt_net/core/debug/indexes.py +41 -76
  18. pygpt_net/core/debug/kernel.py +11 -8
  19. pygpt_net/core/debug/models.py +20 -15
  20. pygpt_net/core/debug/plugins.py +9 -6
  21. pygpt_net/core/debug/presets.py +16 -11
  22. pygpt_net/core/debug/tabs.py +28 -22
  23. pygpt_net/core/debug/ui.py +25 -22
  24. pygpt_net/core/fixtures/stream/generator.py +1 -2
  25. pygpt_net/core/render/web/body.py +290 -23
  26. pygpt_net/core/render/web/helpers.py +26 -0
  27. pygpt_net/core/render/web/renderer.py +459 -705
  28. pygpt_net/core/tabs/tab.py +14 -1
  29. pygpt_net/data/config/config.json +3 -3
  30. pygpt_net/data/config/models.json +3 -3
  31. pygpt_net/data/config/settings.json +15 -17
  32. pygpt_net/data/css/style.dark.css +6 -0
  33. pygpt_net/data/css/web-blocks.css +4 -0
  34. pygpt_net/data/css/web-blocks.light.css +1 -1
  35. pygpt_net/data/css/web-chatgpt.css +4 -0
  36. pygpt_net/data/css/web-chatgpt.light.css +1 -1
  37. pygpt_net/data/css/web-chatgpt_wide.css +4 -0
  38. pygpt_net/data/css/web-chatgpt_wide.light.css +1 -1
  39. pygpt_net/data/fixtures/fake_stream.txt +5733 -0
  40. pygpt_net/data/js/app.js +1921 -901
  41. pygpt_net/data/locale/locale.de.ini +1 -1
  42. pygpt_net/data/locale/locale.en.ini +5 -5
  43. pygpt_net/data/locale/locale.es.ini +1 -1
  44. pygpt_net/data/locale/locale.fr.ini +1 -1
  45. pygpt_net/data/locale/locale.it.ini +1 -1
  46. pygpt_net/data/locale/locale.pl.ini +2 -2
  47. pygpt_net/data/locale/locale.uk.ini +1 -1
  48. pygpt_net/data/locale/locale.zh.ini +1 -1
  49. pygpt_net/item/model.py +4 -1
  50. pygpt_net/js_rc.py +13076 -10198
  51. pygpt_net/provider/api/anthropic/__init__.py +3 -1
  52. pygpt_net/provider/api/anthropic/tools.py +1 -1
  53. pygpt_net/provider/api/google/__init__.py +7 -1
  54. pygpt_net/provider/api/x_ai/__init__.py +5 -1
  55. pygpt_net/provider/core/config/patch.py +14 -1
  56. pygpt_net/provider/llms/anthropic.py +37 -5
  57. pygpt_net/provider/llms/azure_openai.py +3 -1
  58. pygpt_net/provider/llms/base.py +13 -1
  59. pygpt_net/provider/llms/deepseek_api.py +13 -3
  60. pygpt_net/provider/llms/google.py +14 -1
  61. pygpt_net/provider/llms/hugging_face_api.py +105 -24
  62. pygpt_net/provider/llms/hugging_face_embedding.py +88 -0
  63. pygpt_net/provider/llms/hugging_face_router.py +28 -16
  64. pygpt_net/provider/llms/local.py +2 -0
  65. pygpt_net/provider/llms/mistral.py +60 -3
  66. pygpt_net/provider/llms/open_router.py +4 -2
  67. pygpt_net/provider/llms/openai.py +4 -1
  68. pygpt_net/provider/llms/perplexity.py +66 -5
  69. pygpt_net/provider/llms/utils.py +39 -0
  70. pygpt_net/provider/llms/voyage.py +50 -0
  71. pygpt_net/provider/llms/x_ai.py +70 -10
  72. pygpt_net/ui/layout/chat/output.py +1 -1
  73. pygpt_net/ui/widget/lists/db.py +1 -0
  74. pygpt_net/ui/widget/lists/debug.py +1 -0
  75. pygpt_net/ui/widget/tabs/body.py +12 -1
  76. pygpt_net/ui/widget/textarea/web.py +4 -4
  77. pygpt_net/utils.py +3 -2
  78. {pygpt_net-2.6.44.dist-info → pygpt_net-2.6.46.dist-info}/METADATA +73 -16
  79. {pygpt_net-2.6.44.dist-info → pygpt_net-2.6.46.dist-info}/RECORD +82 -78
  80. {pygpt_net-2.6.44.dist-info → pygpt_net-2.6.46.dist-info}/LICENSE +0 -0
  81. {pygpt_net-2.6.44.dist-info → pygpt_net-2.6.46.dist-info}/WHEEL +0 -0
  82. {pygpt_net-2.6.44.dist-info → pygpt_net-2.6.46.dist-info}/entry_points.txt +0 -0
@@ -6,12 +6,9 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.03.06 02:00:00 #
9
+ # Updated Date: 2025.09.14 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
- import datetime
13
- import os
14
-
15
12
 
16
13
  class DatabaseDebug:
17
14
  def __init__(self, window=None):
@@ -412,7 +412,7 @@ class Debug:
412
412
  qobjects = sum(1 for obj in QApplication.allWidgets() if isinstance(obj, QObject))
413
413
  stats.append(f"QObjects: {qobjects}")
414
414
 
415
- res += "\n\n".join(stats)
415
+ res += "\n" + "\n".join(stats)
416
416
  print("\n".join(stats))
417
417
  return res
418
418
 
@@ -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: 2024.12.14 19:00:00 #
9
+ # Updated Date: 2025.09.14 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from pygpt_net.core.events import (
@@ -31,16 +31,19 @@ class EventsDebug:
31
31
 
32
32
  def update(self):
33
33
  """Update debug window."""
34
- self.window.core.debug.begin(self.id)
35
- self.window.core.debug.add(self.id, 'App Events:', str(self.extract_events(AppEvent)))
36
- self.window.core.debug.add(self.id, 'Control Events:', str(self.extract_events(ControlEvent)))
37
- self.window.core.debug.add(self.id, 'Kernel Events:', str(self.extract_events(KernelEvent)))
38
- self.window.core.debug.add(self.id, 'Render Events:', str(self.extract_events(RenderEvent)))
39
- self.window.core.debug.add(self.id, 'Plugin Events:', str(self.extract_events(Event)))
40
- self.window.core.debug.add(self.id, '----', '')
41
- self.window.core.debug.add(self.id, 'Voice Cmds (all):', str(self.window.core.access.voice.commands))
42
- self.window.core.debug.add(self.id, 'Voice Cmds (allowed):', str(self.window.core.access.voice.get_commands()))
43
- self.window.core.debug.end(self.id)
34
+ debug = self.window.core.debug
35
+ access_voice = self.window.core.access.voice
36
+
37
+ debug.begin(self.id)
38
+ debug.add(self.id, 'App Events:', str(self.extract_events(AppEvent)))
39
+ debug.add(self.id, 'Control Events:', str(self.extract_events(ControlEvent)))
40
+ debug.add(self.id, 'Kernel Events:', str(self.extract_events(KernelEvent)))
41
+ debug.add(self.id, 'Render Events:', str(self.extract_events(RenderEvent)))
42
+ debug.add(self.id, 'Plugin Events:', str(self.extract_events(Event)))
43
+ debug.add(self.id, '----', '')
44
+ debug.add(self.id, 'Voice Cmds (all):', str(access_voice.commands))
45
+ debug.add(self.id, 'Voice Cmds (allowed):', str(access_voice.get_commands()))
46
+ debug.end(self.id)
44
47
 
45
48
  def extract_events(self, events: BaseEvent) -> dict:
46
49
  """
@@ -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: 2024.08.25 04:00:00 #
9
+ # Updated Date: 2025.09.14 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import datetime
@@ -24,91 +24,56 @@ class IndexesDebug:
24
24
 
25
25
  def update(self):
26
26
  """Update debug window."""
27
- self.window.core.debug.begin(self.id)
28
- self.window.core.debug.add(self.id, 'Current storage:', str(self.window.core.idx.get_current_store()))
29
- self.window.core.debug.add(self.id, 'Current idx:', str(self.window.controller.idx.current_idx))
30
- self.window.core.debug.add(self.id, 'Current mode:', str(self.window.controller.idx.current_mode))
31
- self.window.core.debug.add(self.id, 'Chat mode:', str(self.window.core.config.get("llama.idx.chat.mode")))
32
- self.window.core.debug.add(self.id, 'Indexes (list):', str(list(self.window.core.config.get("llama.idx.list"))))
27
+ debug = self.window.core.debug
28
+ idx_core = self.window.core.idx
29
+ idx_controller = self.window.controller.idx
30
+ config = self.window.core.config
31
+ storage = idx_core.storage
32
+ indexing = idx_core.indexing
33
+
34
+ debug.begin(self.id)
35
+ debug.add(self.id, 'Current storage:', str(idx_core.get_current_store()))
36
+ debug.add(self.id, 'Current idx:', str(idx_controller.current_idx))
37
+ debug.add(self.id, 'Current mode:', str(idx_controller.current_mode))
38
+ debug.add(self.id, 'Chat mode:', str(config.get("llama.idx.chat.mode")))
39
+ debug.add(self.id, 'Indexes (list):', str(list(config.get("llama.idx.list"))))
33
40
 
34
41
  # count items in DB
35
- db_counter = {}
36
- db_counter["ctx"] = self.window.core.idx.get_counters("ctx")
37
- db_counter["file"] = self.window.core.idx.get_counters("file")
38
- db_counter["external"] = self.window.core.idx.get_counters("external")
42
+ db_counter = {
43
+ "ctx": idx_core.get_counters("ctx"),
44
+ "file": idx_core.get_counters("file"),
45
+ "external": idx_core.get_counters("external")
46
+ }
39
47
 
40
- for store in self.window.core.idx.items:
48
+ for store in idx_core.items:
41
49
  name = "Items (files): " + store
42
- indexes_data = {}
43
- for idx in self.window.core.idx.items[store]:
44
- indexes_data[idx] = len(self.window.core.idx.items[store][idx].items)
45
- if len(indexes_data) > 0:
46
- self.window.core.debug.add(self.id, name, str(indexes_data))
50
+ indexes_data = {idx: len(idx_core.items[store][idx].items)
51
+ for idx in idx_core.items[store]}
52
+ if indexes_data:
53
+ debug.add(self.id, name, str(indexes_data))
47
54
 
48
55
  # DB items counters
49
- self.window.core.debug.add(self.id, 'DB items (ctx):',
50
- str(db_counter["ctx"]))
51
- self.window.core.debug.add(self.id, 'DB items (external/web):',
52
- str(db_counter["external"]))
53
- self.window.core.debug.add(self.id, 'DB items (file):',
54
- str(db_counter["file"]))
56
+ debug.add(self.id, 'DB items (ctx):', str(db_counter["ctx"]))
57
+ debug.add(self.id, 'DB items (external/web):', str(db_counter["external"]))
58
+ debug.add(self.id, 'DB items (file):', str(db_counter["file"]))
55
59
 
56
- self.window.core.debug.add(self.id, 'Storage (storages):',
57
- str(list(self.window.core.idx.storage.storages.keys())))
58
- self.window.core.debug.add(self.id, 'Temp (in-memory) indices:',
59
- str(self.window.core.idx.storage.count_tmp()))
60
+ debug.add(self.id, 'Storage (storages):', str(list(storage.storages.keys())))
61
+ debug.add(self.id, 'Temp (in-memory) indices:', str(storage.count_tmp()))
60
62
 
61
63
  # loaders
62
- self.window.core.debug.add(self.id, 'Offline loaders [files]:',
63
- str(sorted(list(self.window.core.idx.indexing.loaders["file"].keys()))))
64
- self.window.core.debug.add(self.id, 'Offline loaders [web]:',
65
- str(sorted(list(self.window.core.idx.indexing.loaders["web"].keys()))))
66
- self.window.core.debug.add(self.id, 'External instructions [web]:',
67
- str(self.window.core.idx.indexing.external_instructions))
64
+ debug.add(self.id, 'Offline loaders [files]:', str(sorted(list(indexing.loaders["file"].keys()))))
65
+ debug.add(self.id, 'Offline loaders [web]:', str(sorted(list(indexing.loaders["web"].keys()))))
66
+ debug.add(self.id, 'External instructions [web]:', str(indexing.external_instructions))
68
67
 
69
- excluded = self.window.core.config.get("llama.idx.excluded.ext").replace(" ", "").split(',')
70
- self.window.core.debug.add(self.id, 'Excluded (ext):', str(excluded))
71
- self.window.core.debug.add(self.id, 'Force exclude:',
72
- str(self.window.core.config.get("llama.idx.excluded.force")))
73
- self.window.core.debug.add(self.id, 'Custom metadata:',
74
- str(self.window.core.config.get("llama.idx.custom_meta")))
68
+ excluded = config.get("llama.idx.excluded.ext").replace(" ", "").split(',')
69
+ debug.add(self.id, 'Excluded (ext):', str(excluded))
70
+ debug.add(self.id, 'Force exclude:', str(config.get("llama.idx.excluded.force")))
71
+ debug.add(self.id, 'Custom metadata:', str(config.get("llama.idx.custom_meta")))
75
72
 
76
73
  # ctx
77
- self.window.core.debug.add(self.id, 'CTX [auto]:',
78
- str(self.window.core.config.get("llama.idx.auto")))
79
- last_str = "-"
80
- last_ctx = int(self.window.core.config.get("llama.idx.db.last"))
81
- if last_ctx > 0:
82
- last_str = datetime.datetime.fromtimestamp(last_ctx).strftime('%Y-%m-%d %H:%M:%S') + " (" + str(last_ctx) + ")"
83
- self.window.core.debug.add(self.id, 'CTX [db.last]:', str(last_str))
84
-
85
- # indexes
86
- """
87
- indexes = self.window.core.idx.get_all()
88
- for key in list(indexes):
89
- path = os.path.join(self.window.core.config.get_user_dir('idx'), key)
90
- idx = indexes[key]
91
- self.window.core.debug.add(self.id, '----', '')
92
- idx_data = {
93
- 'id': idx.id,
94
- 'store': idx.store,
95
- 'path': path,
96
- 'items': len(idx.items),
97
- }
98
- self.window.core.debug.add(self.id, 'IDX: [' + str(key) + ']', str(idx_data))
99
-
100
- # files
101
- items = idx.items
102
- for item_id in items:
103
- item = items[item_id]
104
- indexed_dt = datetime.datetime.fromtimestamp(item['indexed_ts'])
105
- data = {
106
- 'id': item['id'],
107
- 'path': item['path'],
108
- 'indexed_at': str(item['indexed_ts']) + ' (' + str(indexed_dt) + ')',
109
- 'file_id': item_id,
110
- }
111
- self.window.core.debug.add(self.id, item_id, str(data))
112
- """
74
+ debug.add(self.id, 'CTX [auto]:', str(config.get("llama.idx.auto")))
75
+ last_ctx = int(config.get("llama.idx.db.last"))
76
+ last_str = "-" if last_ctx <= 0 else f"{datetime.datetime.fromtimestamp(last_ctx).strftime('%Y-%m-%d %H:%M:%S')} ({last_ctx})"
77
+ debug.add(self.id, 'CTX [db.last]:', str(last_str))
113
78
 
114
- self.window.core.debug.end(self.id)
79
+ debug.end(self.id)
@@ -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: 2024.11.20 03:00:00 #
9
+ # Updated Date: 2025.09.14 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  class KernelDebug:
@@ -21,10 +21,13 @@ class KernelDebug:
21
21
 
22
22
  def update(self):
23
23
  """Update debug window."""
24
- self.window.core.debug.begin(self.id)
25
- self.window.core.debug.add(self.id, 'Busy:', str(self.window.controller.kernel.busy))
26
- self.window.core.debug.add(self.id, 'Halt:', str(self.window.controller.kernel.halt))
27
- self.window.core.debug.add(self.id, 'Status:', str(self.window.controller.kernel.status))
28
- self.window.core.debug.add(self.id, 'State:', str(self.window.controller.kernel.state))
29
- self.window.core.debug.add(self.id, 'Stack:', str(self.window.controller.kernel.last_stack))
30
- self.window.core.debug.end(self.id)
24
+ debug = self.window.core.debug
25
+ kernel_controller = self.window.controller.kernel
26
+
27
+ debug.begin(self.id)
28
+ debug.add(self.id, 'Busy:', str(kernel_controller.busy))
29
+ debug.add(self.id, 'Halt:', str(kernel_controller.halt))
30
+ debug.add(self.id, 'Status:', str(kernel_controller.status))
31
+ debug.add(self.id, 'State:', str(kernel_controller.state))
32
+ debug.add(self.id, 'Stack:', str(kernel_controller.last_stack))
33
+ debug.end(self.id)
@@ -6,12 +6,11 @@
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.07.23 15:00:00 #
9
+ # Updated Date: 2025.09.14 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
13
13
 
14
-
15
14
  class ModelsDebug:
16
15
  def __init__(self, window=None):
17
16
  """
@@ -24,30 +23,36 @@ class ModelsDebug:
24
23
 
25
24
  def update(self):
26
25
  """Update debug window."""
27
- self.window.core.debug.begin(self.id)
26
+ debug = self.window.core.debug
27
+ models_controller = self.window.controller.models
28
+ models_core = self.window.core.models
29
+ command_core = self.window.core.command
30
+ config_core = self.window.core.config
31
+
32
+ debug.begin(self.id)
28
33
 
29
- path = os.path.join(self.window.core.config.path, '', 'models.json')
30
- self.window.core.debug.add(self.id, 'Models File', str(path))
31
- self.window.core.debug.add(self.id, 'editor.selected[]', str(self.window.controller.models.editor.selected))
32
- self.window.core.debug.add(self.id, '[func] is_native_enabled()', str(self.window.core.command.is_native_enabled()))
34
+ path = os.path.join(config_core.path, '', 'models.json')
35
+ debug.add(self.id, 'Models File', str(path))
36
+ debug.add(self.id, 'editor.selected[]', str(models_controller.editor.selected))
37
+ debug.add(self.id, '[func] is_native_enabled()', str(command_core.is_native_enabled()))
33
38
 
34
- self.window.core.debug.add(
39
+ debug.add(
35
40
  self.id, 'Options',
36
- str(self.window.controller.model.editor.get_options())
41
+ str(models_controller.model.editor.get_options())
37
42
  )
38
43
 
39
44
  # models
40
- for key in self.window.core.models.items:
45
+ for key in models_core.items:
41
46
  if key == '__meta__':
42
- self.window.core.debug.add(self.id, '__meta__', str(self.window.core.models.items[key]))
47
+ debug.add(self.id, '__meta__', str(models_core.items[key]))
43
48
  continue
44
- model = self.window.core.models.items[key]
49
+
50
+ model = models_core.items[key]
45
51
  data = {
46
52
  'id': model.id,
47
53
  'name': model.name,
48
54
  'provider': model.provider,
49
55
  'mode': model.mode,
50
- # 'multimodal': model.multimodal,
51
56
  'input': model.input,
52
57
  'output': model.output,
53
58
  'langchain': model.langchain,
@@ -58,6 +63,6 @@ class ModelsDebug:
58
63
  'default': model.default,
59
64
  'imported': model.imported,
60
65
  }
61
- self.window.core.debug.add(self.id, str(key), str(data))
66
+ debug.add(self.id, str(key), str(data))
62
67
 
63
- self.window.core.debug.end(self.id)
68
+ debug.end(self.id)
@@ -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: 2024.02.25 22:00:00 #
9
+ # Updated Date: 2025.09.14 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
 
@@ -22,17 +22,20 @@ class PluginsDebug:
22
22
 
23
23
  def update(self):
24
24
  """Update debug window."""
25
- self.window.core.debug.begin(self.id)
25
+ debug = self.window.core.debug
26
+ plugins_dict = self.window.core.plugins.plugins
26
27
 
27
- plugins = list(self.window.core.plugins.plugins.keys())
28
+ debug.begin(self.id)
29
+
30
+ plugins = list(plugins_dict.keys())
28
31
  for key in plugins:
29
- plugin = self.window.core.plugins.plugins[key]
32
+ plugin = plugins_dict[key]
30
33
  data = {
31
34
  'id': plugin.id,
32
35
  'name': plugin.name,
33
36
  'description': plugin.description,
34
37
  'options': plugin.options
35
38
  }
36
- self.window.core.debug.add(self.id, str(key), str(data))
39
+ debug.add(self.id, str(key), str(data))
37
40
 
38
- self.window.core.debug.end(self.id)
41
+ debug.end(self.id)
@@ -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.28 09:00:00 #
9
+ # Updated Date: 2025.09.14 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
@@ -39,19 +39,24 @@ class PresetsDebug:
39
39
 
40
40
  def update(self):
41
41
  """Update debug window."""
42
- self.window.core.debug.begin(self.id)
42
+ debug = self.window.core.debug
43
+ presets_controller = self.window.controller.presets
44
+ presets_core = self.window.core.presets
45
+ config_path = self.window.core.config.path
43
46
 
44
- self.window.core.debug.add(
47
+ debug.begin(self.id)
48
+
49
+ debug.add(
45
50
  self.id, 'Options',
46
- str(self.window.controller.presets.editor.get_options())
51
+ str(presets_controller.editor.get_options())
47
52
  )
48
53
 
49
- self.window.core.debug.add(self.id, 'selected[]', str(self.window.controller.presets.selected))
54
+ debug.add(self.id, 'selected[]', str(presets_controller.selected))
50
55
 
51
- # presets
52
- for key in list(dict(self.window.core.presets.items)):
53
- preset = self.window.core.presets.items[key]
54
- path = os.path.join(self.window.core.config.path, 'presets', key + '.json')
56
+ # Presets
57
+ for key in list(dict(presets_core.items)):
58
+ preset = presets_core.items[key]
59
+ path = os.path.join(config_path, 'presets', f"{key}.json")
55
60
  data = {
56
61
  'id': key,
57
62
  'file': path,
@@ -75,6 +80,6 @@ class PresetsDebug:
75
80
  'temperature': preset.temperature,
76
81
  'version': preset.version,
77
82
  }
78
- self.window.core.debug.add(self.id, str(key), str(data))
83
+ debug.add(self.id, str(key), str(data))
79
84
 
80
- self.window.core.debug.end(self.id)
85
+ debug.end(self.id)
@@ -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: 2024.12.14 17:00:00 #
9
+ # Updated Date: 2025.09.14 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  class TabsDebug:
@@ -21,29 +21,35 @@ class TabsDebug:
21
21
 
22
22
  def update(self):
23
23
  """Update debug window."""
24
- self.window.core.debug.begin(self.id)
25
- self.window.core.debug.add(self.id, 'current Col', str(self.window.controller.ui.tabs.get_current_column_idx()))
26
- self.window.core.debug.add(self.id, 'current IDX', str(self.window.controller.ui.tabs.get_current_idx()))
27
- self.window.core.debug.add(self.id, 'current Tab', str(self.window.controller.ui.tabs.get_current_tab()))
28
- self.window.core.debug.add(self.id, 'current PID', str(self.window.controller.ui.tabs.get_current_pid()))
29
- self.window.core.debug.add(self.id, 'current Type', str(self.window.controller.ui.tabs.get_current_type()))
30
- self.window.core.debug.add(self.id, '----', '')
31
- self.window.core.debug.add(self.id, 'last_pid', str(self.window.core.tabs.last_pid))
32
- self.window.core.debug.add(self.id, 'locked', str(self.window.controller.ui.tabs.locked))
33
- self.window.core.debug.add(self.id, 'col', str(self.window.controller.ui.tabs.col))
34
- self.window.core.debug.add(self.id, 'count(pids)', str(len(self.window.core.tabs.pids)))
35
- self.window.core.debug.add(self.id, 'count(ctx bags)', str(len(self.window.core.ctx.container.bags)))
36
- self.window.core.debug.add(self.id, '----', '')
24
+ debug = self.window.core.debug
25
+ tabs_controller = self.window.controller.ui.tabs
26
+ tabs_core = self.window.core.tabs
27
+ ctx_output = self.window.core.ctx.output
28
+ ctx_container = self.window.core.ctx.container
29
+
30
+ debug.begin(self.id)
31
+ debug.add(self.id, 'current Col', str(tabs_controller.get_current_column_idx()))
32
+ debug.add(self.id, 'current IDX', str(tabs_controller.get_current_idx()))
33
+ debug.add(self.id, 'current Tab', str(tabs_controller.get_current_tab()))
34
+ debug.add(self.id, 'current PID', str(tabs_controller.get_current_pid()))
35
+ debug.add(self.id, 'current Type', str(tabs_controller.get_current_type()))
36
+ debug.add(self.id, '----', '')
37
+ debug.add(self.id, 'last_pid', str(tabs_core.last_pid))
38
+ debug.add(self.id, 'locked', str(tabs_controller.locked))
39
+ debug.add(self.id, 'col', str(tabs_controller.col))
40
+ debug.add(self.id, 'count(pids)', str(len(tabs_core.pids)))
41
+ debug.add(self.id, 'count(ctx bags)', str(len(ctx_container.bags)))
42
+ debug.add(self.id, '----', '')
37
43
 
38
44
  # PIDs
39
- for pid in list(self.window.core.tabs.pids):
40
- tab = self.window.core.tabs.pids[pid]
45
+ for pid in list(tabs_core.pids):
46
+ tab = tabs_core.pids[pid]
41
47
  data = tab.to_dict()
42
- self.window.core.debug.add(self.id, "PID ["+str(pid)+"]", str(data))
48
+ debug.add(self.id, f"PID [{pid}]", str(data))
43
49
 
44
50
  # mapping PID => meta.id
45
- self.window.core.debug.add(self.id, '----', '')
46
- self.window.core.debug.add(self.id, 'PID => meta.id', str(self.window.core.ctx.output.mapping))
47
- self.window.core.debug.add(self.id, '(last) meta.id => PID', str(self.window.core.ctx.output.last_pids))
48
- self.window.core.debug.add(self.id, '(last) PID', str(self.window.core.ctx.output.last_pid))
49
- self.window.core.debug.end(self.id)
51
+ debug.add(self.id, '----', '')
52
+ debug.add(self.id, 'PID => meta.id', str(ctx_output.mapping))
53
+ debug.add(self.id, '(last) meta.id => PID', str(ctx_output.last_pids))
54
+ debug.add(self.id, '(last) PID', str(ctx_output.last_pid))
55
+ debug.end(self.id)
@@ -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: 2024.02.25 22:00:00 #
9
+ # Updated Date: 2025.09.14 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
 
@@ -45,30 +45,33 @@ class UIDebug:
45
45
  :param items: items
46
46
  :param name: name
47
47
  """
48
- self.window.core.debug.add(self.id, 'ui.' + name, str(self.map_structure(items)))
48
+ self.window.core.debug.add(self.id, f"ui.{name}", str(self.map_structure(items)))
49
49
 
50
50
  def update(self):
51
51
  """Update debug window"""
52
- self.window.core.debug.begin(self.id)
52
+ # Local references
53
+ debug = self.window.core.debug
54
+ lang_mapping = self.window.controller.lang.mapping.get_mapping()
55
+ ui = self.window.ui
53
56
 
54
- self.window.core.debug.add(
55
- self.id, '*lang_mapping',
56
- str(self.map_structure(self.window.controller.lang.mapping.get_mapping(), True))
57
- )
57
+ debug.begin(self.id)
58
58
 
59
- self.update_section(self.window.ui.config, 'config')
60
- self.update_section(self.window.ui.debug, 'debug')
61
- self.update_section(self.window.ui.dialog, 'dialog')
62
- self.update_section(self.window.ui.editor, 'editor')
63
- self.update_section(self.window.ui.groups, 'groups')
64
- self.update_section(self.window.ui.hooks, 'hooks')
65
- self.update_section(self.window.ui.menu, 'menu')
66
- self.update_section(self.window.ui.models, 'models')
67
- self.update_section(self.window.ui.nodes, 'nodes')
68
- self.update_section(self.window.ui.notepad, 'notepad')
69
- self.update_section(self.window.ui.paths, 'paths')
70
- self.update_section(self.window.ui.plugin_addon, 'plugin_addon')
71
- self.update_section(self.window.ui.splitters, 'splitters')
72
- self.update_section(self.window.ui.tabs, 'tabs')
59
+ debug.add(self.id, '*lang_mapping', str(self.map_structure(lang_mapping, True)))
73
60
 
74
- self.window.core.debug.end(self.id)
61
+ # Update sections using local 'ui' reference
62
+ self.update_section(ui.config, 'config')
63
+ self.update_section(ui.debug, 'debug')
64
+ self.update_section(ui.dialog, 'dialog')
65
+ self.update_section(ui.editor, 'editor')
66
+ self.update_section(ui.groups, 'groups')
67
+ self.update_section(ui.hooks, 'hooks')
68
+ self.update_section(ui.menu, 'menu')
69
+ self.update_section(ui.models, 'models')
70
+ self.update_section(ui.nodes, 'nodes')
71
+ self.update_section(ui.notepad, 'notepad')
72
+ self.update_section(ui.paths, 'paths')
73
+ self.update_section(ui.plugin_addon, 'plugin_addon')
74
+ self.update_section(ui.splitters, 'splitters')
75
+ self.update_section(ui.tabs, 'tabs')
76
+
77
+ debug.end(self.id)
@@ -140,9 +140,8 @@ class FakeOpenAIStream:
140
140
  # Chat: often the first delta with a role
141
141
  if api == "chat" and cfg.include_chat_role:
142
142
  prefix_payloads.append(self._wrap_chat_delta({"role": "assistant", "content": ""}))
143
- # Code: we start with ```python\n
144
143
  if chunk == "code":
145
- prefix_payloads.append(self._wrap_payload(cfg, "```javascript\n"))
144
+ prefix_payloads.append(self._wrap_payload(cfg, ""))
146
145
 
147
146
  self._code_mode = (chunk == "code")
148
147
  return prefix_payloads, sleep_dt