pygpt-net 2.6.66__py3-none-any.whl → 2.7.0__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 (81) hide show
  1. pygpt_net/CHANGELOG.txt +18 -0
  2. pygpt_net/__init__.py +3 -3
  3. pygpt_net/controller/assistant/assistant.py +13 -8
  4. pygpt_net/controller/assistant/batch.py +29 -15
  5. pygpt_net/controller/assistant/files.py +19 -14
  6. pygpt_net/controller/assistant/store.py +63 -41
  7. pygpt_net/controller/attachment/attachment.py +45 -35
  8. pygpt_net/controller/chat/attachment.py +50 -39
  9. pygpt_net/controller/config/field/dictionary.py +26 -14
  10. pygpt_net/controller/config/field/textarea.py +2 -2
  11. pygpt_net/controller/ctx/common.py +27 -17
  12. pygpt_net/controller/ctx/ctx.py +182 -101
  13. pygpt_net/controller/dialogs/info.py +2 -2
  14. pygpt_net/controller/files/files.py +101 -41
  15. pygpt_net/controller/idx/indexer.py +87 -31
  16. pygpt_net/controller/kernel/kernel.py +13 -2
  17. pygpt_net/controller/media/media.py +29 -1
  18. pygpt_net/controller/mode/mode.py +3 -3
  19. pygpt_net/controller/model/editor.py +141 -21
  20. pygpt_net/controller/model/importer.py +153 -54
  21. pygpt_net/controller/painter/painter.py +2 -2
  22. pygpt_net/controller/presets/experts.py +68 -15
  23. pygpt_net/controller/presets/presets.py +72 -36
  24. pygpt_net/controller/settings/editor.py +25 -1
  25. pygpt_net/controller/settings/profile.py +76 -35
  26. pygpt_net/controller/settings/workdir.py +70 -39
  27. pygpt_net/core/assistants/files.py +20 -18
  28. pygpt_net/core/filesystem/actions.py +111 -10
  29. pygpt_net/core/filesystem/filesystem.py +2 -1
  30. pygpt_net/core/idx/idx.py +12 -11
  31. pygpt_net/core/idx/worker.py +13 -1
  32. pygpt_net/core/models/models.py +4 -4
  33. pygpt_net/core/profile/profile.py +13 -3
  34. pygpt_net/core/types/image.py +10 -1
  35. pygpt_net/core/video/video.py +43 -3
  36. pygpt_net/data/config/config.json +3 -3
  37. pygpt_net/data/config/models.json +25 -14
  38. pygpt_net/data/css/style.dark.css +39 -1
  39. pygpt_net/data/css/style.light.css +39 -1
  40. pygpt_net/data/locale/locale.de.ini +4 -1
  41. pygpt_net/data/locale/locale.en.ini +4 -1
  42. pygpt_net/data/locale/locale.es.ini +4 -1
  43. pygpt_net/data/locale/locale.fr.ini +4 -1
  44. pygpt_net/data/locale/locale.it.ini +4 -1
  45. pygpt_net/data/locale/locale.pl.ini +5 -2
  46. pygpt_net/data/locale/locale.uk.ini +4 -1
  47. pygpt_net/data/locale/locale.zh.ini +4 -1
  48. pygpt_net/item/model.py +1 -1
  49. pygpt_net/provider/api/openai/__init__.py +4 -2
  50. pygpt_net/provider/api/openai/video.py +2 -2
  51. pygpt_net/provider/core/config/patch.py +9 -1
  52. pygpt_net/provider/core/model/patch.py +26 -1
  53. pygpt_net/tools/image_viewer/tool.py +17 -0
  54. pygpt_net/tools/text_editor/tool.py +9 -0
  55. pygpt_net/ui/__init__.py +2 -2
  56. pygpt_net/ui/dialog/models.py +10 -1
  57. pygpt_net/ui/layout/ctx/ctx_list.py +16 -6
  58. pygpt_net/ui/layout/toolbox/video.py +14 -6
  59. pygpt_net/ui/main.py +3 -1
  60. pygpt_net/ui/widget/calendar/select.py +3 -3
  61. pygpt_net/ui/widget/filesystem/explorer.py +1082 -142
  62. pygpt_net/ui/widget/lists/assistant.py +185 -24
  63. pygpt_net/ui/widget/lists/assistant_store.py +245 -42
  64. pygpt_net/ui/widget/lists/attachment.py +230 -47
  65. pygpt_net/ui/widget/lists/attachment_ctx.py +189 -33
  66. pygpt_net/ui/widget/lists/base_list_combo.py +2 -2
  67. pygpt_net/ui/widget/lists/context.py +1253 -70
  68. pygpt_net/ui/widget/lists/experts.py +110 -8
  69. pygpt_net/ui/widget/lists/model_editor.py +217 -14
  70. pygpt_net/ui/widget/lists/model_importer.py +125 -6
  71. pygpt_net/ui/widget/lists/preset.py +460 -71
  72. pygpt_net/ui/widget/lists/profile.py +149 -27
  73. pygpt_net/ui/widget/lists/uploaded.py +230 -38
  74. pygpt_net/ui/widget/option/combo.py +1046 -32
  75. pygpt_net/ui/widget/option/dictionary.py +35 -7
  76. pygpt_net/ui/widget/option/input.py +3 -1
  77. {pygpt_net-2.6.66.dist-info → pygpt_net-2.7.0.dist-info}/METADATA +20 -57
  78. {pygpt_net-2.6.66.dist-info → pygpt_net-2.7.0.dist-info}/RECORD +81 -81
  79. {pygpt_net-2.6.66.dist-info → pygpt_net-2.7.0.dist-info}/LICENSE +0 -0
  80. {pygpt_net-2.6.66.dist-info → pygpt_net-2.7.0.dist-info}/WHEEL +0 -0
  81. {pygpt_net-2.6.66.dist-info → pygpt_net-2.7.0.dist-info}/entry_points.txt +0 -0
@@ -6,13 +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.24 23:00:00 #
9
+ # Updated Date: 2025.12.27 21:00:00 #
10
10
  # ================================================== #
11
11
 
12
+ from typing import List
13
+
12
14
  from PySide6.QtCore import Qt, QAbstractItemModel, QModelIndex, QSize
13
15
  from PySide6.QtGui import QIcon
14
16
  from PySide6.QtWidgets import QWidget, QVBoxLayout, QPushButton, QTreeView, QMenu, QStyledItemDelegate, QComboBox, \
15
- QCheckBox, QHeaderView, QHBoxLayout
17
+ QCheckBox, QHeaderView, QHBoxLayout, QAbstractItemView
16
18
 
17
19
  from pygpt_net.utils import trans
18
20
 
@@ -133,6 +135,15 @@ class OptionDict(QWidget):
133
135
  idx = index.row()
134
136
  self.window.controller.config.dictionary.delete_item(self, idx)
135
137
 
138
+ def delete_items(self, idxs: List[int]):
139
+ """
140
+ Delete multiple items (show confirm once)
141
+
142
+ :param idxs: list of row indices to delete
143
+ """
144
+ # delegate batch deletion and confirmation to controller
145
+ self.window.controller.config.dictionary.delete_item(self, list(idxs))
146
+
136
147
  def delete_item_execute(self, idx):
137
148
  """
138
149
  Delete item (execute)
@@ -187,6 +198,10 @@ class OptionDictItems(QTreeView):
187
198
  self.setIndentation(0)
188
199
  self.setHeaderHidden(False)
189
200
 
201
+ # enable row-based multi selection (Ctrl/Shift)
202
+ self.setSelectionBehavior(QAbstractItemView.SelectRows)
203
+ self.setSelectionMode(QAbstractItemView.ExtendedSelection)
204
+
190
205
  header = self.header()
191
206
  header.setStretchLastSection(True)
192
207
  header.setSectionResizeMode(QHeaderView.Stretch)
@@ -222,14 +237,27 @@ class OptionDictItems(QTreeView):
222
237
  :param event: context menu event
223
238
  """
224
239
  item = self.indexAt(event.pos())
225
- if not item.isValid():
240
+ sel_model = self.selectionModel()
241
+ selected_rows = sel_model.selectedRows() if sel_model is not None else []
242
+ multi = len(selected_rows) > 1
243
+
244
+ # allow context menu on empty area only when multi-selection exists
245
+ if not item.isValid() and not multi:
226
246
  return
227
247
 
228
248
  menu = QMenu(self)
229
- edit_action = menu.addAction(self._icon_edit, self._act_edit_text)
230
- delete_action = menu.addAction(self._icon_delete, self._act_delete_text)
231
- edit_action.triggered.connect(lambda: self.parent.edit_item(event))
232
- delete_action.triggered.connect(lambda: self.parent.delete_item(event))
249
+ if multi:
250
+ # only Delete is available for multi-select
251
+ delete_action = menu.addAction(self._icon_delete, self._act_delete_text)
252
+ # collect row indices from current selection
253
+ idxs = [ix.row() for ix in selected_rows]
254
+ delete_action.triggered.connect(lambda: self.parent.delete_items(idxs))
255
+ else:
256
+ # single row actions
257
+ edit_action = menu.addAction(self._icon_edit, self._act_edit_text)
258
+ delete_action = menu.addAction(self._icon_delete, self._act_delete_text)
259
+ edit_action.triggered.connect(lambda: self.parent.edit_item(event))
260
+ delete_action.triggered.connect(lambda: self.parent.delete_item(event))
233
261
  menu.exec_(event.globalPos())
234
262
 
235
263
 
@@ -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.24 23:00:00 #
9
+ # Updated Date: 2025.12.26 12:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from PySide6.QtGui import QAction, QIcon
@@ -104,6 +104,8 @@ class OptionInput(QLineEdit):
104
104
  self.real_time = self.option["real_time"]
105
105
  if "read_only" in self.option and self.option["read_only"]:
106
106
  self.setReadOnly(True)
107
+ if "placeholder" in self.option and self.option["placeholder"]:
108
+ self.setPlaceholderText(self.option["placeholder"])
107
109
 
108
110
  # on update hook
109
111
  self.textChanged.connect(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pygpt-net
3
- Version: 2.6.66
3
+ Version: 2.7.0
4
4
  Summary: Desktop AI Assistant powered by: OpenAI GPT-5, GPT-4, o1, o3, Gemini, Claude, Grok, DeepSeek, and other models supported by Llama Index, and Ollama. Chatbot, agents, completion, image generation, vision analysis, speech-to-text, plugins, MCP, internet access, file handling, command execution and more.
5
5
  License: MIT
6
6
  Keywords: ai,api,api key,app,assistant,bielik,chat,chatbot,chatgpt,claude,dall-e,deepseek,desktop,gemini,gpt,gpt-3.5,gpt-4,gpt-4-vision,gpt-4o,gpt-5,gpt-oss,gpt3.5,gpt4,grok,langchain,llama-index,llama3,mistral,o1,o3,ollama,openai,presets,py-gpt,py_gpt,pygpt,pyside,qt,text completion,tts,ui,vision,whisper
@@ -119,7 +119,7 @@ Description-Content-Type: text/markdown
119
119
 
120
120
  [![pygpt](https://snapcraft.io/pygpt/badge.svg)](https://snapcraft.io/pygpt)
121
121
 
122
- Release: **2.6.66** | build: **2025-12-25** | Python: **>=3.10, <3.14**
122
+ Release: **2.7.0** | build: **2025-12-28** | Python: **>=3.10, <3.14**
123
123
 
124
124
  > Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
125
125
  >
@@ -3753,6 +3753,24 @@ may consume additional tokens that are not displayed in the main window.
3753
3753
 
3754
3754
  ## Recent changes:
3755
3755
 
3756
+ **2.7.0 (2025-12-28)**
3757
+
3758
+ - Added multi-select functionality using CTRL or SHIFT and batch actions to the context list, preset list, attachments list, and other list-based widgets.
3759
+ - Added a search field to comboboxes, such as the model selector.
3760
+ - Added a Duplicate option to the models editor.
3761
+ - Added drag-and-drop to context list.
3762
+ - Added multi-select, drag-and-drop, Cut, Copy, and Paste features to the File Explorer.
3763
+ - Fix: scroll restoration after actions in the context list.
3764
+ - Fix: 'Use as image' option in the File Explorer.
3765
+ - Fix: current preset system prompt disappearing on profile change.
3766
+ - Other UI fixes/improvements.
3767
+
3768
+ **2.6.67 (2025-12-26)**
3769
+
3770
+ - Added a provider filter to the models editor.
3771
+ - Added video options (resolution, duration) to the toolbox.
3772
+ - Updated the models configuration.
3773
+
3756
3774
  **2.6.66 (2025-12-25)**
3757
3775
 
3758
3776
  - Added Sora 2 support - #155.
@@ -3764,61 +3782,6 @@ may consume additional tokens that are not displayed in the main window.
3764
3782
  - Fix: charset-normalizer 3.2.0 circular import - #152.
3765
3783
  - Fix: Google client closed state.
3766
3784
 
3767
- **2.6.65 (2025-09-28)**
3768
-
3769
- - Added drag and drop functionality for files and directories from the filesystem in attachments and file explorer.
3770
- - Added automatic thumbnail generation when uploading avatars.
3771
- - Added a last status timer.
3772
- - Added a fade effect to collapsed user messages.
3773
- - Added a scroll area to the agent options in the presets editor.
3774
- - Added a hover effect to lists.
3775
- - Improved UI/UX.
3776
-
3777
- **2.6.64 (2025-09-27)**
3778
-
3779
- - Added translations to agent headers.
3780
- - Improved presets tabs.
3781
- - Added support for music (Lyria) in both image and video modes (beta).
3782
-
3783
- **2.6.63 (2025-09-27)**
3784
-
3785
- - Improved agents' workflows.
3786
- - Enhanced the display of agents' steps in the UI.
3787
-
3788
- **2.6.62 (2025-09-26)**
3789
-
3790
- - Enhanced agent workflow execution.
3791
- - Improved preset list handling by adding a drop field indicator and fixing auto-scroll.
3792
- - Added middle-mouse button panning to Painter.
3793
- - Added an input character counter.
3794
-
3795
- **2.6.61 (2025-09-26)**
3796
-
3797
- - Enhanced the agents node editor, custom agent flow, and instruction following.
3798
- - Added drag-and-drop and reordering functionality to the presets list.
3799
- - Added statistics for response tokens, including time elapsed and tokens per second.
3800
- - Improved UI/UX.
3801
-
3802
- **2.6.60 (2025-09-25)**
3803
-
3804
- - Added a new tool: Agents Builder - allowing visual design of agent workflows using nodes - available in Tools -> Agents Builder (beta).
3805
-
3806
- **2.6.59 (2025-09-23)**
3807
-
3808
- - LlamaIndex has been upgraded to v0.13.6.
3809
- - The Responses API is disabled by default in Agents (LlamaIndex) for compatibility.
3810
- - Added WinAPI support to the System (OS) plugin.
3811
-
3812
- **2.6.58 (2025-09-22)**
3813
-
3814
- - Added: internal Web Browser tool.
3815
-
3816
- **2.6.57 (2025-09-22)**
3817
-
3818
- - Changed: The web search icon has been moved to the input area.
3819
- - Improved: The local web search plugin has been enhanced to retrieve multiple URLs at once.
3820
- - Added: Use proxy switch in Settings.
3821
-
3822
3785
  # Credits and links
3823
3786
 
3824
3787
  **Official website:** <https://pygpt.net>