pygpt-net 2.4.54__py3-none-any.whl → 2.4.56__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 (77) hide show
  1. CHANGELOG.md +10 -0
  2. README.md +11 -1
  3. pygpt_net/CHANGELOG.txt +10 -0
  4. pygpt_net/__init__.py +3 -3
  5. pygpt_net/controller/access/__init__.py +1 -3
  6. pygpt_net/controller/access/voice.py +20 -7
  7. pygpt_net/controller/{attachment.py → attachment/__init__.py} +0 -0
  8. pygpt_net/controller/{camera.py → camera/__init__.py} +1 -1
  9. pygpt_net/controller/{files.py → files/__init__.py} +0 -0
  10. pygpt_net/controller/{finder.py → finder/__init__.py} +0 -0
  11. pygpt_net/controller/lang/mapping.py +2 -1
  12. pygpt_net/controller/{launcher.py → launcher/__init__.py} +0 -0
  13. pygpt_net/controller/{layout.py → layout/__init__.py} +0 -0
  14. pygpt_net/controller/{notepad.py → notepad/__init__.py} +0 -0
  15. pygpt_net/controller/settings/editor.py +4 -0
  16. pygpt_net/core/access/shortcuts.py +48 -29
  17. pygpt_net/core/{camera.py → camera/__init__.py} +5 -4
  18. pygpt_net/core/{command.py → command/__init__.py} +4 -3
  19. pygpt_net/core/{dispatcher.py → dispatcher/__init__.py} +0 -0
  20. pygpt_net/core/{history.py → history/__init__.py} +0 -2
  21. pygpt_net/core/{image.py → image/__init__.py} +0 -0
  22. pygpt_net/core/{info.py → info/__init__.py} +0 -0
  23. pygpt_net/core/{locale.py → locale/__init__.py} +0 -0
  24. pygpt_net/core/{notepad.py → notepad/__init__.py} +0 -0
  25. pygpt_net/core/{platforms.py → platforms/__init__.py} +0 -0
  26. pygpt_net/core/{plugins.py → plugins/__init__.py} +0 -0
  27. pygpt_net/core/{settings.py → settings/__init__.py} +0 -0
  28. pygpt_net/core/tabs/__init__.py +8 -6
  29. pygpt_net/core/{tokens.py → tokens/__init__.py} +0 -0
  30. pygpt_net/data/config/config.json +11 -9
  31. pygpt_net/data/config/models.json +3 -3
  32. pygpt_net/data/config/modes.json +3 -3
  33. pygpt_net/data/config/settings.json +24 -0
  34. pygpt_net/data/locale/locale.de.ini +3 -0
  35. pygpt_net/data/locale/locale.en.ini +3 -0
  36. pygpt_net/data/locale/locale.es.ini +3 -0
  37. pygpt_net/data/locale/locale.fr.ini +3 -0
  38. pygpt_net/data/locale/locale.it.ini +3 -0
  39. pygpt_net/data/locale/locale.pl.ini +4 -1
  40. pygpt_net/data/locale/locale.uk.ini +3 -0
  41. pygpt_net/data/locale/locale.zh.ini +3 -0
  42. pygpt_net/launcher.py +3 -2
  43. pygpt_net/plugin/audio_input/simple.py +10 -7
  44. pygpt_net/plugin/audio_input/worker.py +1 -1
  45. pygpt_net/provider/core/config/patch.py +21 -1
  46. pygpt_net/tools/code_interpreter/__init__.py +2 -1
  47. pygpt_net/tools/code_interpreter/ui/dialogs.py +10 -1
  48. pygpt_net/tools/code_interpreter/ui/widgets.py +56 -1
  49. pygpt_net/tools/html_canvas/__init__.py +2 -1
  50. pygpt_net/tools/html_canvas/ui/dialogs.py +10 -1
  51. pygpt_net/tools/html_canvas/ui/widgets.py +33 -1
  52. pygpt_net/ui/__init__.py +1 -1
  53. pygpt_net/ui/layout/chat/calendar.py +5 -2
  54. pygpt_net/ui/layout/chat/explorer.py +4 -2
  55. pygpt_net/ui/layout/chat/painter.py +4 -2
  56. pygpt_net/ui/main.py +63 -2
  57. pygpt_net/ui/widget/calendar/select.py +29 -1
  58. pygpt_net/ui/widget/draw/painter.py +25 -1
  59. pygpt_net/ui/widget/filesystem/explorer.py +24 -1
  60. pygpt_net/ui/widget/tabs/body.py +54 -4
  61. pygpt_net/ui/widget/textarea/calendar_note.py +26 -2
  62. pygpt_net/ui/widget/textarea/html.py +21 -2
  63. pygpt_net/ui/widget/textarea/notepad.py +37 -3
  64. pygpt_net/ui/widget/textarea/web.py +4 -2
  65. {pygpt_net-2.4.54.dist-info → pygpt_net-2.4.56.dist-info}/METADATA +12 -2
  66. {pygpt_net-2.4.54.dist-info → pygpt_net-2.4.56.dist-info}/RECORD +77 -77
  67. /pygpt_net/controller/{command.py → command/__init__.py} +0 -0
  68. /pygpt_net/controller/{mode.py → mode/__init__.py} +0 -0
  69. /pygpt_net/core/{installer.py → installer/__init__.py} +0 -0
  70. /pygpt_net/core/{models.py → models/__init__.py} +0 -0
  71. /pygpt_net/core/{modes.py → modes/__init__.py} +0 -0
  72. /pygpt_net/core/{presets.py → presets/__init__.py} +0 -0
  73. /pygpt_net/core/{profile.py → profile/__init__.py} +0 -0
  74. /pygpt_net/core/{worker.py → worker/__init__.py} +0 -0
  75. {pygpt_net-2.4.54.dist-info → pygpt_net-2.4.56.dist-info}/LICENSE +0 -0
  76. {pygpt_net-2.4.54.dist-info → pygpt_net-2.4.56.dist-info}/WHEEL +0 -0
  77. {pygpt_net-2.4.54.dist-info → pygpt_net-2.4.56.dist-info}/entry_points.txt +0 -0
CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 2.4.56 (2025-01-19)
4
+
5
+ - Improved tab switching and focus change.
6
+ - Improved global keyboard shortcuts handling.
7
+
8
+ ## 2.4.55 (2025-01-18)
9
+
10
+ - Added a new option in settings: Audio -> Recording timeout.
11
+ - Added a new option in settings: Audio -> Enable timeout in continuous mode.
12
+
3
13
  ## 2.4.54 (2025-01-18)
4
14
 
5
15
  - Audio output switched from PyGame to PyAudio. It may be necessary to manually connect Alsa in Snap version with: "sudo snap connect pygpt:alsa".
README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![pygpt](https://snapcraft.io/pygpt/badge.svg)](https://snapcraft.io/pygpt)
4
4
 
5
- Release: **2.4.54** | build: **2025.01.18** | Python: **>=3.10, <3.13**
5
+ Release: **2.4.56** | build: **2025.01.19** | Python: **>=3.10, <3.13**
6
6
 
7
7
  > Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
8
8
  >
@@ -3960,6 +3960,16 @@ may consume additional tokens that are not displayed in the main window.
3960
3960
 
3961
3961
  ## Recent changes:
3962
3962
 
3963
+ **2.4.56 (2025-01-19)**
3964
+
3965
+ - Improved tab switching and focus change.
3966
+ - Improved global keyboard shortcuts handling.
3967
+
3968
+ **2.4.55 (2025-01-18)**
3969
+
3970
+ - Added a new option in settings: Audio -> Recording timeout.
3971
+ - Added a new option in settings: Audio -> Enable timeout in continuous mode.
3972
+
3963
3973
  **2.4.54 (2025-01-18)**
3964
3974
 
3965
3975
  - Audio output switched from PyGame to PyAudio. It may be necessary to manually connect Alsa in Snap version with: "sudo snap connect pygpt:alsa".
pygpt_net/CHANGELOG.txt CHANGED
@@ -1,3 +1,13 @@
1
+ 2.4.56 (2025-01-19)
2
+
3
+ - Improved tab switching and focus change.
4
+ - Improved global keyboard shortcuts handling.
5
+
6
+ 2.4.55 (2025-01-18)
7
+
8
+ - Added a new option in settings: Audio -> Recording timeout.
9
+ - Added a new option in settings: Audio -> Enable timeout in continuous mode.
10
+
1
11
  2.4.54 (2025-01-18)
2
12
 
3
13
  - Audio output switched from PyGame to PyAudio. It may be necessary to manually connect Alsa in Snap version with: "sudo snap connect pygpt:alsa".
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.01.18 03:00:00 #
9
+ # Updated Date: 2025.01.19 16: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.4.54"
17
- __build__ = "2025.01.18"
16
+ __version__ = "2.4.56"
17
+ __build__ = "2025.01.19"
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"
@@ -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.26 19:00:00 #
9
+ # Updated Date: 2025.01.19 02:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from pygpt_net.core.events import BaseEvent, ControlEvent, AppEvent
@@ -73,9 +73,7 @@ class Access:
73
73
  self.window.core.plugins.get("audio_input").handler_simple.stop_recording(timeout=True)
74
74
 
75
75
  # stop audio output if playing
76
- #if self.window.controller.audio.is_playing():
77
76
  self.window.controller.audio.stop_output()
78
77
 
79
78
  # stop generating if active
80
- #if self.window.controller.chat.input.generating:
81
79
  self.window.controller.kernel.stop()
@@ -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.01.16 17:00:00 #
9
+ # Updated Date: 2025.01.18 23:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from typing import Optional, List, Dict, Any
@@ -24,7 +24,6 @@ from pygpt_net.utils import trans
24
24
 
25
25
  class Voice:
26
26
 
27
- TIMEOUT_SECONDS = 120 # 2 minutes, max recording time before timeout
28
27
  MIN_FRAMES = 25 # minimum frames to start transcription
29
28
  PLAY_DELAY = 500 # ms, delay before playing audio event
30
29
 
@@ -213,6 +212,18 @@ class Voice:
213
212
 
214
213
  def start_recording(self):
215
214
  """Start recording"""
215
+ # display snap warning if not displayed yet
216
+ if (not self.window.core.config.get("audio.input.snap", False)
217
+ or not self.window.core.config.has("audio.input.snap")):
218
+ if self.window.core.platforms.is_snap():
219
+ self.window.ui.dialogs.open(
220
+ 'snap_audio_input',
221
+ width=400,
222
+ height=200
223
+ )
224
+ self.window.core.config.set("audio.input.snap", True)
225
+ self.window.core.config.save()
226
+ return
216
227
  try:
217
228
  self.is_recording = True
218
229
  self.switch_btn_stop()
@@ -227,10 +238,12 @@ class Voice:
227
238
  )
228
239
 
229
240
  # start timeout timer to prevent infinite recording
230
- if self.timer is None:
231
- self.timer = QTimer()
232
- self.timer.timeout.connect(self.stop_timeout)
233
- self.timer.start(self.TIMEOUT_SECONDS * 1000)
241
+ timeout = int(self.window.core.config.get('audio.input.timeout', 120) or 0) # get timeout
242
+ if timeout > 0:
243
+ if self.timer is None:
244
+ self.timer = QTimer()
245
+ self.timer.timeout.connect(self.stop_timeout)
246
+ self.timer.start(timeout * 1000)
234
247
 
235
248
  if not self.window.core.audio.capture.check_audio_input():
236
249
  raise Exception("Audio input not working.")
@@ -273,7 +286,7 @@ class Voice:
273
286
  # abort if timeout
274
287
  if timeout:
275
288
  self.window.dispatch(AppEvent(AppEvent.VOICE_CONTROL_STOPPED)) # app event
276
- self.window.update_status("Aborted.".format(self.TIMEOUT_SECONDS))
289
+ self.window.update_status("Aborted.".format(timeout))
277
290
  return
278
291
 
279
292
  if self.window.core.audio.capture.has_frames():
@@ -227,7 +227,7 @@ class Camera(QObject):
227
227
 
228
228
  def capture_frame_save(self) -> str:
229
229
  """
230
- Capture frame and save
230
+ Capture frame and save
231
231
 
232
232
  :return: Path to saved frame
233
233
  """
File without changes
File without changes
@@ -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.01.16 01:00:00 #
9
+ # Updated Date: 2025.01.18 16:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from typing import Dict
@@ -145,6 +145,7 @@ class Mapping:
145
145
  nodes["agent.iterations.label"] = "toolbox.agent.iterations.label"
146
146
  nodes["agent.auto_stop"] = "toolbox.agent.auto_stop.label"
147
147
  nodes["agent.continue"] = "toolbox.agent.continue.label"
148
+ nodes['layout.split'] = "layout.split"
148
149
  # nodes["indexes.new"] = "idx.new"
149
150
 
150
151
  # input
File without changes
File without changes
@@ -199,6 +199,10 @@ class Editor:
199
199
  if self.config_changed('ctx.sources') or self.config_changed('ctx.audio'):
200
200
  self.window.controller.ctx.refresh()
201
201
 
202
+ # update global shortcuts
203
+ if self.config_changed('access.shortcuts'):
204
+ self.window.setup_global_shortcuts()
205
+
202
206
  self.before_config = copy.deepcopy(self.window.core.config.all())
203
207
  self.window.controller.settings.close_window(id)
204
208
 
@@ -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 08:00:00 #
9
+ # Updated Date: 2025.01.19 02:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import copy
@@ -52,11 +52,52 @@ class Shortcuts:
52
52
  """
53
53
  # SHIFT not working properly
54
54
  modifiers_names = [
55
- '---', 'Control', 'Alt', 'Meta', 'Keypad', 'GroupSwitch',
55
+ '---', 'Ctrl', 'Alt', 'Shift',
56
56
  ]
57
57
  modifiers = [{name: name} for name in modifiers_names]
58
58
  return modifiers
59
59
 
60
+ def handle_global_shortcuts(self, event: QEvent):
61
+ """
62
+ Handle global shortcuts
63
+
64
+ :param event: event
65
+ """
66
+ # esc key
67
+ if event.type() == QEvent.KeyPress and event.key() == QtCore.Qt.Key_Escape:
68
+ self.window.controller.access.on_escape()
69
+ return True
70
+
71
+ if not hasattr(self.window, 'core') or not hasattr(self.window.core, 'config'):
72
+ return False
73
+
74
+ if event.type() == QEvent.KeyPress:
75
+ # shortcuts
76
+ config = copy.deepcopy(self.window.core.config.get("access.shortcuts"))
77
+ for shortcut in config:
78
+ if shortcut['key'] == "" or shortcut['key'] is None:
79
+ continue
80
+ key_name = 'Key_' + str(shortcut['key'])
81
+ if hasattr(QtCore.Qt, key_name):
82
+ shortcut['key'] = getattr(QtCore.Qt, 'Key_' + str(shortcut['key']))
83
+ else:
84
+ continue
85
+ modifier_name = str(shortcut['key_modifier']) + 'Modifier'
86
+ if shortcut['key_modifier'] == "" or shortcut['key_modifier'] is None or shortcut[
87
+ 'key_modifier'] == "---":
88
+ shortcut['key_modifier'] = QtCore.Qt.NoModifier
89
+ elif hasattr(QtCore.Qt, modifier_name):
90
+ shortcut['key_modifier'] = getattr(QtCore.Qt, modifier_name, QtCore.Qt.NoModifier)
91
+
92
+ for shortcut in config:
93
+ if (event.key() == shortcut['key'] and
94
+ (shortcut['key_modifier'] == QtCore.Qt.NoModifier or event.modifiers() == shortcut[
95
+ 'key_modifier'])
96
+ ):
97
+ self.window.dispatch(ControlEvent(shortcut['action']))
98
+ return True
99
+ return False
100
+
60
101
 
61
102
  class GlobalShortcutFilter(QObject):
62
103
  def __init__(self, window=None):
@@ -72,33 +113,11 @@ class GlobalShortcutFilter(QObject):
72
113
  :return: True if event was handled
73
114
  """
74
115
  try:
75
- # esc key
76
- if event.type() == QEvent.KeyPress and event.key() == QtCore.Qt.Key_Escape:
77
- self.window.controller.access.on_escape()
78
-
79
- if event.type() == QEvent.KeyPress:
80
- # shortcuts
81
- config = copy.deepcopy(self.window.core.config.get("access.shortcuts"))
82
- for shortcut in config:
83
- if shortcut['key'] == "" or shortcut['key'] is None:
84
- continue
85
- key_name = 'Key_' + str(shortcut['key'])
86
- if hasattr(QtCore.Qt, key_name):
87
- shortcut['key'] = getattr(QtCore.Qt, 'Key_' + str(shortcut['key']))
88
- else:
89
- continue
90
- modifier_name = str(shortcut['key_modifier']) + 'Modifier'
91
- if shortcut['key_modifier'] == "" or shortcut['key_modifier'] is None or shortcut['key_modifier'] == "---":
92
- shortcut['key_modifier'] = QtCore.Qt.NoModifier
93
- elif hasattr(QtCore.Qt, modifier_name):
94
- shortcut['key_modifier'] = getattr(QtCore.Qt, modifier_name, QtCore.Qt.NoModifier)
95
-
96
- for shortcut in config:
97
- if (event.key() == shortcut['key'] and
98
- (shortcut['key_modifier'] == QtCore.Qt.NoModifier or event.modifiers() == shortcut['key_modifier'])
99
- ):
100
- self.window.dispatch(ControlEvent(shortcut['action']))
101
- return True
116
+ if event.type() != QEvent.KeyPress:
117
+ return False
118
+ if not self.window or not hasattr(self.window, 'controller'):
119
+ return False
120
+ return self.window.core.access.shortcuts.handle_global_shortcuts(event)
102
121
  except Exception as e:
103
122
  print(e)
104
123
  return False
@@ -68,9 +68,10 @@ class CaptureWorker(QRunnable):
68
68
  self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, self.window.core.config.get('vision.capture.width'))
69
69
  self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT, self.window.core.config.get('vision.capture.height'))
70
70
  except Exception as e:
71
- self.signals.error.emit(e)
72
- print("Camera thread setup exception", e)
73
- self.signals.finished.emit(e)
71
+ self.window.core.debug.log(e)
72
+ if self.signals is not None:
73
+ self.signals.error.emit(e)
74
+ self.signals.finished.emit(e)
74
75
 
75
76
  @Slot()
76
77
  def run(self):
@@ -99,9 +100,9 @@ class CaptureWorker(QRunnable):
99
100
  self.signals.capture.emit(frame)
100
101
  last_frame_time = now
101
102
  except Exception as e:
103
+ self.window.core.debug.log(e)
102
104
  if self.signals is not None:
103
105
  self.signals.error.emit(e)
104
- print("Camera thread capture exception", e)
105
106
 
106
107
  # release camera
107
108
  self.release()
@@ -104,7 +104,8 @@ class Command:
104
104
 
105
105
  # remove description and move to help
106
106
  if "description" in data[cmd_name]["params"][key]:
107
- data[cmd_name]["params"][key]["help"] = data[cmd_name]["params"][key]["description"]
107
+ data[cmd_name]["params"][key]["help"] = data[cmd_name]["params"][key][
108
+ "description"]
108
109
  del data[cmd_name]["params"][key]["description"]
109
110
 
110
111
  except Exception as e:
@@ -397,7 +398,7 @@ class Command:
397
398
  ) -> List[Dict[str, Any]]:
398
399
  """
399
400
  Convert internal functions to native API format
400
-
401
+
401
402
  :param: all True to include all
402
403
  :param: parent_id: parent context ID
403
404
  :return: native functions list
@@ -406,7 +407,7 @@ class Command:
406
407
  # Native API format (example):
407
408
  # https://platform.openai.com/docs/guides/function-calling
408
409
  # At this moment it must be converted to format:
409
-
410
+
410
411
  functions = [
411
412
  {
412
413
  "name": "get_delivery_date",
File without changes
@@ -92,5 +92,3 @@ class History:
92
92
  f.write(content.strip() + "\n")
93
93
  except Exception as e:
94
94
  print(e)
95
-
96
-
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -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 08:00:00 #
9
+ # Updated Date: 2025.01.19 02:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import uuid
@@ -448,7 +448,7 @@ class Tabs:
448
448
  column = self.window.ui.layout.get_column_by_idx(tab.column_idx)
449
449
  tabs = column.get_tabs()
450
450
  tab.parent = column
451
- tab.child = self.window.core.ctx.container.get(tab)
451
+ tab.child = self.window.core.ctx.container.get(tab) # tab is already appended here
452
452
  if tab.new_idx is not None:
453
453
  tab.idx = tabs.insertTab(tab.new_idx, tab.child, tab.title)
454
454
  else:
@@ -508,6 +508,7 @@ class Tabs:
508
508
  tabs = column.get_tabs()
509
509
  tab.parent = column
510
510
  tab.child = self.window.ui.chat.output.painter.setup()
511
+ tab.child.append(self.window.ui.painter)
511
512
  tab.idx = tabs.addTab(tab.child, tab.title)
512
513
  tab.child.setOwner(tab)
513
514
  tabs.setTabIcon(tab.idx, QIcon(tab.icon))
@@ -805,9 +806,10 @@ class Tabs:
805
806
  layout = QVBoxLayout()
806
807
  layout.addWidget(widget)
807
808
  layout.setContentsMargins(0, 0, 0, 0)
808
- widget = TabBody()
809
- widget.setLayout(layout)
810
- return widget
809
+ tab_widget = TabBody(self.window)
810
+ tab_widget.append(widget)
811
+ tab_widget.setLayout(layout)
812
+ return tab_widget
811
813
 
812
814
  def from_layout(self, layout: QLayout) -> TabBody:
813
815
  """
@@ -817,6 +819,6 @@ class Tabs:
817
819
  :return: TabBody
818
820
  """
819
821
  layout.setContentsMargins(0, 0, 0, 0)
820
- widget = TabBody()
822
+ widget = TabBody(self.window)
821
823
  widget.setLayout(layout)
822
824
  return widget
File without changes
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.4.54",
4
- "app.version": "2.4.54",
5
- "updated_at": "2025-01-18T00:00:00"
3
+ "version": "2.4.56",
4
+ "app.version": "2.4.56",
5
+ "updated_at": "2025-01-19T00:00:00"
6
6
  },
7
7
  "access.audio.event.speech": false,
8
8
  "access.audio.event.speech.disabled": [],
@@ -13,32 +13,32 @@
13
13
  {
14
14
  "action": "voice_cmd.toggle",
15
15
  "key": "Space",
16
- "key_modifier": "Control"
16
+ "key_modifier": "Ctrl"
17
17
  },
18
18
  {
19
19
  "action": "tab.chat",
20
20
  "key": "1",
21
- "key_modifier": "Control"
21
+ "key_modifier": "Ctrl"
22
22
  },
23
23
  {
24
24
  "action": "tab.files",
25
25
  "key": "2",
26
- "key_modifier": "Control"
26
+ "key_modifier": "Ctrl"
27
27
  },
28
28
  {
29
29
  "action": "tab.calendar",
30
30
  "key": "3",
31
- "key_modifier": "Control"
31
+ "key_modifier": "Ctrl"
32
32
  },
33
33
  {
34
34
  "action": "tab.draw",
35
35
  "key": "4",
36
- "key_modifier": "Control"
36
+ "key_modifier": "Ctrl"
37
37
  },
38
38
  {
39
39
  "action": "tab.notepad",
40
40
  "key": "5",
41
- "key_modifier": "Control"
41
+ "key_modifier": "Ctrl"
42
42
  }
43
43
  ],
44
44
  "access.voice_control": false,
@@ -78,6 +78,8 @@
78
78
  "audio.input.device": "0",
79
79
  "audio.input.rate": 44100,
80
80
  "audio.input.stop_interval": 10,
81
+ "audio.input.timeout": 120,
82
+ "audio.input.timeout.continuous": false,
81
83
  "audio.transcribe.convert_video": true,
82
84
  "context_threshold": 200,
83
85
  "cmd": false,
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.4.54",
4
- "app.version": "2.4.54",
5
- "updated_at": "2025-01-18T00:00:00"
3
+ "version": "2.4.56",
4
+ "app.version": "2.4.56",
5
+ "updated_at": "2025-01-19T00:00:00"
6
6
  },
7
7
  "items": {
8
8
  "claude-3-5-sonnet-20240620": {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.4.54",
4
- "app.version": "2.4.54",
5
- "updated_at": "2025-01-18T00:00:00"
3
+ "version": "2.4.56",
4
+ "app.version": "2.4.56",
5
+ "updated_at": "2025-01-19T00:00:00"
6
6
  },
7
7
  "items": {
8
8
  "chat": {
@@ -1136,6 +1136,30 @@
1136
1136
  "step": 1,
1137
1137
  "advanced": false
1138
1138
  },
1139
+ "audio.input.timeout": {
1140
+ "section": "audio",
1141
+ "type": "int",
1142
+ "slider": false,
1143
+ "label": "settings.audio.input.timeout",
1144
+ "description": "settings.audio.input.timeout.desc",
1145
+ "value": 120,
1146
+ "min": 0,
1147
+ "multiplier": 1,
1148
+ "step": 1,
1149
+ "advanced": false
1150
+ },
1151
+ "audio.input.timeout.continuous": {
1152
+ "section": "audio",
1153
+ "type": "bool",
1154
+ "slider": false,
1155
+ "label": "settings.audio.input.timeout.continuous",
1156
+ "value": false,
1157
+ "min": null,
1158
+ "max": null,
1159
+ "multiplier": null,
1160
+ "step": null,
1161
+ "advanced": false
1162
+ },
1139
1163
  "llama.idx.list": {
1140
1164
  "section": "llama-index",
1141
1165
  "type": "dict",
@@ -777,6 +777,9 @@ settings.audio.input.rate = Abtastrate
777
777
  settings.audio.input.rate.desc = Abtastrate, Standard: 44100
778
778
  settings.audio.input.stop_interval = Intervall für kontinuierliche automatische Transkription
779
779
  settings.audio.input.stop_interval.desc = Intervall in Sekunden für automatisches Transkribieren eines Audioabschnitts, Standard: 10
780
+ settings.audio.input.timeout = Aufnahme-Zeitüberschreitung
781
+ settings.audio.input.timeout.desc = Zeitüberschreitung (Sekunden) für automatische Stop-Aufzeichnung, 0 zum Deaktivieren, Standard: 120
782
+ settings.audio.input.timeout.continuous = Zeitüberschreitung im Dauerbetrieb aktivieren
780
783
  settings.check_updates = Beim Start nach Updates suchen
781
784
  settings.check_updates.bg = Im Hintergrund nach Updates suchen
782
785
  settings.cmd.field.desc = Aktivieren Sie das `{cmd}`-Werkzeug.
@@ -948,6 +948,9 @@ settings.audio.input.rate = Sampling Rate
948
948
  settings.audio.input.rate.desc = Sampling rate, default: 44100
949
949
  settings.audio.input.stop_interval = Continuous recording auto-transcribe interval
950
950
  settings.audio.input.stop_interval.desc = Interval in seconds for auto-transcribe audio chunk, default: 10
951
+ settings.audio.input.timeout = Recording timeout
952
+ settings.audio.input.timeout.desc = Timeout (seconds) for auto-stop recording, 0 to disable, default: 120
953
+ settings.audio.input.timeout.continuous = Enable timeout in continuous mode
951
954
  settings.check_updates = Check for Updates on start
952
955
  settings.check_updates.bg = Check for Updates in the background
953
956
  settings.cmd.config.collapse = JSON params
@@ -776,6 +776,9 @@ settings.audio.input.rate = Taux d'échantillonnage
776
776
  settings.audio.input.rate.desc = Taux d'échantillonnage, par défaut : 44100
777
777
  settings.audio.input.stop_interval = Intervalo de transcripción automática continua
778
778
  settings.audio.input.stop_interval.desc = Intervalo en segundos para transcribir automáticamente el fragmento de audio, predeterminado: 10
779
+ settings.audio.input.timeout = Tiempo de espera de grabación
780
+ settings.audio.input.timeout.desc = Tiempo de espera (segundos) para detener la grabación automáticamente, 0 para deshabilitar, por defecto: 120
781
+ settings.audio.input.timeout.continuous = Habilitar tiempo de espera en modo continuo
779
782
  settings.check_updates = Buscar actualizaciones al iniciar
780
783
  settings.check_updates.bg = Buscar actualizaciones en segundo plano
781
784
  settings.cmd.field.desc = Habilitar la herramienta `{cmd}`.
@@ -776,6 +776,9 @@ settings.audio.input.rate = Taux d'échantillonnage
776
776
  settings.audio.input.rate.desc = Taux d'échantillonnage, par défaut : 44100
777
777
  settings.audio.input.stop_interval = Intervalle d'auto-transcription enregistrement continu
778
778
  settings.audio.input.stop_interval.desc = Intervalle en secondes pour la transcription automatique d'un morceau audio, par défaut : 10
779
+ settings.audio.input.timeout = Délai d'enregistrement
780
+ settings.audio.input.timeout.desc = Délai (secondes) pour l'arrêt automatique de l'enregistrement, 0 pour désactiver, par défaut : 120
781
+ settings.audio.input.timeout.continuous = Activer le délai en mode continu
779
782
  settings.check_updates = Vérifier les mises à jour au démarrage
780
783
  settings.check_updates.bg = Vérifier les mises à jour en arrière-plan
781
784
  settings.cmd.field.desc = Activer l'outil `{cmd}`.
@@ -777,6 +777,9 @@ settings.audio.input.rate = Frequenza di campionamento
777
777
  settings.audio.input.rate.desc = Frequenza di campionamento, predefinito: 44100
778
778
  settings.audio.input.stop_interval = Intervallo di trascrizione automatica continua
779
779
  settings.audio.input.stop_interval.desc = Intervallo in secondi per la trascrizione automatica del segmento audio, predefinito: 10
780
+ settings.audio.input.timeout = Timeout di registrazione
781
+ settings.audio.input.timeout.desc = Timeout (secondi) per l'arresto automatico della registrazione, 0 per disabilitare, predefinito: 120
782
+ settings.audio.input.timeout.continuous = Abilita timeout in modalità continua
780
783
  settings.check_updates = Controlla aggiornamenti all'avvio
781
784
  settings.check_updates.bg = Controlla gli aggiornamenti in background
782
785
  settings.cmd.field.desc = Abilita lo strumento `{cmd}`.
@@ -776,7 +776,10 @@ settings.audio.input.device.desc = Wybierz urządzenie audio dla wejścia mikrof
776
776
  settings.audio.input.rate = Częstotliwość próbkowania
777
777
  settings.audio.input.rate.desc = Częstotliwość próbkowania, domyślnie: 44100
778
778
  settings.audio.input.stop_interval = Interwał automatycznego transkrybowania nagrania ciągłego
779
- settings.audio.input.stop_interval.desc = Interwał w sekundach dla automatycznego transkrybowania fragmentu audio, domyślnie: 10
779
+ settings.audio.input.stop_interval.desc = Interwał w sekundach dla automatycznego transkrybowania fragmentu audio, domyślnie: 10
780
+ settings.audio.input.timeout = Limit czasu nagrywania
781
+ settings.audio.input.timeout.desc = Limit czasu (w sekundach) dla automatycznego zatrzymania nagrywania, 0 aby wyłączyć, domyślnie: 120
782
+ settings.audio.input.timeout.continuous = Włącz limit czasu w trybie ciągłym
780
783
  settings.check_updates = Sprawdź aktualizacje przy starcie
781
784
  settings.check_updates.bg = Sprawdź aktualizacje w tle
782
785
  settings.cmd.field.desc = Włącz narzędzie `{cmd}`.
@@ -776,6 +776,9 @@ settings.audio.input.rate = Частота дискретизації
776
776
  settings.audio.input.rate.desc = Частота дискретизації, за замовчуванням: 44100
777
777
  settings.audio.input.stop_interval = Інтервал автоматичного транскрибування безперервного запису
778
778
  settings.audio.input.stop_interval.desc = Інтервал у секундах для автоматичного транскрибування фрагмента аудіо, за замовчуванням: 10
779
+ settings.audio.input.timeout = Тайм-аут запису
780
+ settings.audio.input.timeout.desc = Тайм-аут (в секундах) для автоматичної зупинки запису, 0 для відключення, за замовчуванням: 120
781
+ settings.audio.input.timeout.continuous = Увімкнути тайм-аут у безперервному режимі
779
782
  settings.check_updates = Перевіряти оновлення при запуску
780
783
  settings.check_updates.bg = Перевіряти оновлення у фоновому режимі
781
784
  settings.cmd.field.desc = Увімкнути інструмент `{cmd}`.