pygpt-net 2.6.32__py3-none-any.whl → 2.6.34__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.
- pygpt_net/CHANGELOG.txt +12 -0
- pygpt_net/__init__.py +3 -3
- pygpt_net/controller/assistant/batch.py +14 -4
- pygpt_net/controller/assistant/files.py +1 -0
- pygpt_net/controller/assistant/store.py +195 -1
- pygpt_net/controller/camera/camera.py +1 -1
- pygpt_net/controller/chat/attachment.py +2 -0
- pygpt_net/controller/chat/common.py +50 -46
- pygpt_net/controller/config/placeholder.py +95 -75
- pygpt_net/controller/dialogs/confirm.py +3 -1
- pygpt_net/controller/media/media.py +11 -3
- pygpt_net/controller/painter/common.py +227 -10
- pygpt_net/controller/painter/painter.py +4 -12
- pygpt_net/core/assistants/files.py +18 -0
- pygpt_net/core/camera/camera.py +38 -93
- pygpt_net/core/camera/worker.py +430 -0
- pygpt_net/core/filesystem/url.py +3 -0
- pygpt_net/core/render/web/body.py +65 -9
- pygpt_net/core/text/utils.py +3 -0
- pygpt_net/data/config/config.json +234 -221
- pygpt_net/data/config/models.json +179 -180
- pygpt_net/data/config/settings.json +10 -5
- pygpt_net/data/locale/locale.de.ini +8 -6
- pygpt_net/data/locale/locale.en.ini +9 -5
- pygpt_net/data/locale/locale.es.ini +8 -6
- pygpt_net/data/locale/locale.fr.ini +8 -6
- pygpt_net/data/locale/locale.it.ini +8 -6
- pygpt_net/data/locale/locale.pl.ini +8 -6
- pygpt_net/data/locale/locale.uk.ini +8 -6
- pygpt_net/data/locale/locale.zh.ini +8 -6
- pygpt_net/item/assistant.py +13 -1
- pygpt_net/provider/api/google/__init__.py +32 -23
- pygpt_net/provider/api/openai/store.py +45 -1
- pygpt_net/provider/llms/google.py +4 -0
- pygpt_net/ui/dialog/assistant_store.py +213 -203
- pygpt_net/ui/layout/chat/input.py +3 -3
- pygpt_net/ui/widget/draw/painter.py +458 -75
- pygpt_net/ui/widget/option/combo.py +5 -1
- pygpt_net/ui/widget/textarea/input.py +273 -3
- {pygpt_net-2.6.32.dist-info → pygpt_net-2.6.34.dist-info}/METADATA +14 -2
- {pygpt_net-2.6.32.dist-info → pygpt_net-2.6.34.dist-info}/RECORD +44 -43
- {pygpt_net-2.6.32.dist-info → pygpt_net-2.6.34.dist-info}/LICENSE +0 -0
- {pygpt_net-2.6.32.dist-info → pygpt_net-2.6.34.dist-info}/WHEEL +0 -0
- {pygpt_net-2.6.32.dist-info → pygpt_net-2.6.34.dist-info}/entry_points.txt +0 -0
|
@@ -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.
|
|
9
|
+
# Updated Date: 2025.09.02 16:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from PySide6.QtCore import Qt
|
|
@@ -109,6 +109,8 @@ class OptionCombo(QWidget):
|
|
|
109
109
|
for item in self.keys:
|
|
110
110
|
if type(item) is dict:
|
|
111
111
|
for key, value in item.items():
|
|
112
|
+
if not isinstance(key, str):
|
|
113
|
+
key = str(key)
|
|
112
114
|
if key.startswith("separator::"):
|
|
113
115
|
self.combo.addSeparator(value)
|
|
114
116
|
else:
|
|
@@ -117,6 +119,8 @@ class OptionCombo(QWidget):
|
|
|
117
119
|
self.combo.addItem(item, item)
|
|
118
120
|
elif type(self.keys) is dict:
|
|
119
121
|
for key, value in self.keys.items():
|
|
122
|
+
if not isinstance(key, str):
|
|
123
|
+
key = str(key)
|
|
120
124
|
if key.startswith("separator::"):
|
|
121
125
|
self.combo.addSeparator(value)
|
|
122
126
|
else:
|
|
@@ -6,12 +6,13 @@
|
|
|
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.
|
|
9
|
+
# Updated Date: 2025.09.03 00:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from typing import Optional
|
|
13
|
+
import math
|
|
13
14
|
|
|
14
|
-
from PySide6.QtCore import Qt, QSize
|
|
15
|
+
from PySide6.QtCore import Qt, QSize, QTimer, QEvent
|
|
15
16
|
from PySide6.QtGui import QAction, QIcon, QImage
|
|
16
17
|
from PySide6.QtWidgets import (
|
|
17
18
|
QTextEdit,
|
|
@@ -90,6 +91,24 @@ class ChatInput(QTextEdit):
|
|
|
90
91
|
# Apply initial margins (top padding + left space for icons)
|
|
91
92
|
self._apply_margins()
|
|
92
93
|
|
|
94
|
+
# ---- Auto-resize config (input in splitter) ----
|
|
95
|
+
self._auto_max_lines = 10 # max lines for auto-expansion
|
|
96
|
+
self._auto_max_ratio = 0.25 # max fraction of main window height
|
|
97
|
+
self._auto_debounce_ms = 0 # coalesce updates in next event loop turn
|
|
98
|
+
self._auto_updating = False # reentrancy guard
|
|
99
|
+
self._splitter_resize_in_progress = False
|
|
100
|
+
self._splitter_connected = False
|
|
101
|
+
self._user_adjusting_splitter = False
|
|
102
|
+
self._auto_pause_ms_after_user_drag = 350
|
|
103
|
+
self._last_target_container_h = None
|
|
104
|
+
|
|
105
|
+
self._auto_timer = QTimer(self)
|
|
106
|
+
self._auto_timer.setSingleShot(True)
|
|
107
|
+
self._auto_timer.timeout.connect(self._auto_resize_tick)
|
|
108
|
+
|
|
109
|
+
# Trigger auto-resize on text changes (tokens update stays intact)
|
|
110
|
+
self.textChanged.connect(self._schedule_auto_resize)
|
|
111
|
+
|
|
93
112
|
def _apply_text_top_padding(self):
|
|
94
113
|
"""Apply extra top padding inside the text area by using viewport margins."""
|
|
95
114
|
# Left margin is computed in _apply_margins()
|
|
@@ -213,6 +232,9 @@ class ChatInput(QTextEdit):
|
|
|
213
232
|
self.window.controller.chat.input.send_input()
|
|
214
233
|
handled = True
|
|
215
234
|
self.setFocus()
|
|
235
|
+
# Collapse to minimum after sending
|
|
236
|
+
if handled:
|
|
237
|
+
QTimer.singleShot(0, self.collapse_to_min)
|
|
216
238
|
elif key == Qt.Key_Escape and self.window.controller.ctx.extra.is_editing():
|
|
217
239
|
self.window.controller.ctx.extra.edit_cancel()
|
|
218
240
|
handled = True
|
|
@@ -240,10 +262,17 @@ class ChatInput(QTextEdit):
|
|
|
240
262
|
self.window.core.config.data['font_size.input'] = self.value
|
|
241
263
|
self.window.core.config.save()
|
|
242
264
|
self.window.controller.ui.update_font_size()
|
|
265
|
+
# Reflow may change number of lines; adjust auto-height next tick
|
|
266
|
+
QTimer.singleShot(0, self._schedule_auto_resize)
|
|
243
267
|
event.accept()
|
|
244
268
|
return
|
|
245
269
|
super().wheelEvent(event)
|
|
246
270
|
|
|
271
|
+
def changeEvent(self, event):
|
|
272
|
+
super().changeEvent(event)
|
|
273
|
+
if event.type() == QEvent.FontChange:
|
|
274
|
+
self._schedule_auto_resize()
|
|
275
|
+
|
|
247
276
|
def action_add_attachment(self):
|
|
248
277
|
"""Add attachment (button click)."""
|
|
249
278
|
self.window.controller.attachment.open_add()
|
|
@@ -672,4 +701,245 @@ class ChatInput(QTextEdit):
|
|
|
672
701
|
try:
|
|
673
702
|
self._reposition_icon_bar()
|
|
674
703
|
except Exception:
|
|
675
|
-
pass
|
|
704
|
+
pass
|
|
705
|
+
# Recompute on width changes (word wrap may change line count)
|
|
706
|
+
if not self._splitter_resize_in_progress:
|
|
707
|
+
if self.hasFocus():
|
|
708
|
+
self._schedule_auto_resize()
|
|
709
|
+
else:
|
|
710
|
+
# Allow shrinking to minimum when content is single line
|
|
711
|
+
self._schedule_auto_resize(enforce_minimize_if_single=True)
|
|
712
|
+
|
|
713
|
+
# ================== Auto-resize inside QSplitter ==================
|
|
714
|
+
|
|
715
|
+
def _ensure_splitter_hook(self):
|
|
716
|
+
"""Lazy-connect to main splitter to detect manual drags."""
|
|
717
|
+
if self._splitter_connected:
|
|
718
|
+
return
|
|
719
|
+
splitter = self._get_main_splitter()
|
|
720
|
+
if splitter is not None:
|
|
721
|
+
try:
|
|
722
|
+
splitter.splitterMoved.connect(self._on_splitter_moved_by_user)
|
|
723
|
+
self._splitter_connected = True
|
|
724
|
+
except Exception:
|
|
725
|
+
pass
|
|
726
|
+
|
|
727
|
+
def _on_splitter_moved_by_user(self, pos, index):
|
|
728
|
+
"""Pause auto-resize briefly while the user drags the splitter."""
|
|
729
|
+
self._user_adjusting_splitter = True
|
|
730
|
+
QTimer.singleShot(self._auto_pause_ms_after_user_drag, self._reset_user_adjusting_flag)
|
|
731
|
+
|
|
732
|
+
def _reset_user_adjusting_flag(self):
|
|
733
|
+
self._user_adjusting_splitter = False
|
|
734
|
+
|
|
735
|
+
def _get_main_splitter(self):
|
|
736
|
+
"""Get main vertical splitter from window registry."""
|
|
737
|
+
try:
|
|
738
|
+
return self.window.ui.splitters.get('main.output')
|
|
739
|
+
except Exception:
|
|
740
|
+
return None
|
|
741
|
+
|
|
742
|
+
def _find_container_in_splitter(self, splitter):
|
|
743
|
+
"""Find the direct child of splitter that contains this ChatInput."""
|
|
744
|
+
if splitter is None:
|
|
745
|
+
return None, -1
|
|
746
|
+
for i in range(splitter.count()):
|
|
747
|
+
w = splitter.widget(i)
|
|
748
|
+
if w and w.isAncestorOf(self):
|
|
749
|
+
return w, i
|
|
750
|
+
return None, -1
|
|
751
|
+
|
|
752
|
+
def _schedule_auto_resize(self, force: bool = False, enforce_minimize_if_single: bool = False):
|
|
753
|
+
"""Schedule auto-resize; multiple calls are coalesced."""
|
|
754
|
+
# Store flags for the next tick
|
|
755
|
+
self._pending_force = getattr(self, "_pending_force", False) or bool(force)
|
|
756
|
+
self._pending_minimize_if_single = getattr(self, "_pending_minimize_if_single", False) or bool(
|
|
757
|
+
enforce_minimize_if_single)
|
|
758
|
+
# Avoid scheduling when splitter drag in progress
|
|
759
|
+
if self._user_adjusting_splitter or self._splitter_resize_in_progress:
|
|
760
|
+
return
|
|
761
|
+
self._ensure_splitter_hook()
|
|
762
|
+
# Debounce to next event loop to ensure document layout is up to date
|
|
763
|
+
if not self._auto_timer.isActive():
|
|
764
|
+
self._auto_timer.start(self._auto_debounce_ms)
|
|
765
|
+
|
|
766
|
+
def _auto_resize_tick(self):
|
|
767
|
+
"""Execute auto-resize once after debounce."""
|
|
768
|
+
force = getattr(self, "_pending_force", False)
|
|
769
|
+
minimize_if_single = getattr(self, "_pending_minimize_if_single", False)
|
|
770
|
+
self._pending_force = False
|
|
771
|
+
self._pending_minimize_if_single = False
|
|
772
|
+
try:
|
|
773
|
+
self._update_auto_height(force=force, minimize_if_single=minimize_if_single)
|
|
774
|
+
except Exception:
|
|
775
|
+
# Never break input pipeline on errors
|
|
776
|
+
pass
|
|
777
|
+
|
|
778
|
+
def _document_content_height(self) -> int:
|
|
779
|
+
"""Return QTextDocument layout height in pixels."""
|
|
780
|
+
doc = self.document()
|
|
781
|
+
layout = doc.documentLayout()
|
|
782
|
+
if layout is not None:
|
|
783
|
+
h = layout.documentSize().height()
|
|
784
|
+
else:
|
|
785
|
+
h = doc.size().height()
|
|
786
|
+
return int(math.ceil(h))
|
|
787
|
+
|
|
788
|
+
def _line_spacing(self) -> int:
|
|
789
|
+
"""Return current line spacing for font."""
|
|
790
|
+
return int(math.ceil(self.fontMetrics().lineSpacing()))
|
|
791
|
+
|
|
792
|
+
def _effective_lines(self, doc_h: int, line_h: int, doc_margin: float) -> float:
|
|
793
|
+
"""Rough estimate of visible line count from document height."""
|
|
794
|
+
base = max(0.0, doc_h - 2.0 * float(doc_margin))
|
|
795
|
+
if line_h <= 0:
|
|
796
|
+
return 1.0
|
|
797
|
+
return max(1.0, base / float(line_h))
|
|
798
|
+
|
|
799
|
+
def _min_input_widget_height(self, non_viewport_h: int) -> int:
|
|
800
|
+
"""Height of QTextEdit widget required to fit a single line without scrollbars."""
|
|
801
|
+
line_h = self._line_spacing()
|
|
802
|
+
doc_margin = float(self.document().documentMargin())
|
|
803
|
+
min_viewport_h = int(math.ceil(2.0 * doc_margin + line_h))
|
|
804
|
+
# Respect current minimum size hint to avoid jitter on some styles
|
|
805
|
+
min_hint = max(self.minimumSizeHint().height(), 0)
|
|
806
|
+
return max(min_hint, min_viewport_h + non_viewport_h)
|
|
807
|
+
|
|
808
|
+
def _max_input_widget_height_by_lines(self, non_viewport_h: int) -> int:
|
|
809
|
+
"""Max widget height allowed by line count cap."""
|
|
810
|
+
line_h = self._line_spacing()
|
|
811
|
+
doc_margin = float(self.document().documentMargin())
|
|
812
|
+
max_viewport_h = int(math.ceil(2.0 * doc_margin + self._auto_max_lines * line_h))
|
|
813
|
+
return max_viewport_h + non_viewport_h
|
|
814
|
+
|
|
815
|
+
def _should_shrink_to_min(self, doc_h: int) -> bool:
|
|
816
|
+
"""Decide if we should collapse to minimum (single line or empty)."""
|
|
817
|
+
line_h = self._line_spacing()
|
|
818
|
+
doc_margin = float(self.document().documentMargin())
|
|
819
|
+
threshold = 2.0 * doc_margin + 1.25 * line_h # small slack for layout rounding
|
|
820
|
+
return doc_h <= threshold
|
|
821
|
+
|
|
822
|
+
def _update_auto_height(self, force: bool = False, minimize_if_single: bool = False):
|
|
823
|
+
"""
|
|
824
|
+
Core auto-resize routine:
|
|
825
|
+
- expand only when the input has focus (unless force=True),
|
|
826
|
+
- cap by max lines and 1/4 of main window height,
|
|
827
|
+
- shrink back to minimal only after send or when text is effectively one line.
|
|
828
|
+
"""
|
|
829
|
+
if self._auto_updating or self._splitter_resize_in_progress:
|
|
830
|
+
return
|
|
831
|
+
|
|
832
|
+
splitter = self._get_main_splitter()
|
|
833
|
+
container, idx = self._find_container_in_splitter(splitter)
|
|
834
|
+
if splitter is None or container is None or idx < 0:
|
|
835
|
+
return # Not yet attached to the splitter
|
|
836
|
+
|
|
837
|
+
# Expansion only with focus unless forced
|
|
838
|
+
has_focus = self.hasFocus()
|
|
839
|
+
can_expand = force or has_focus
|
|
840
|
+
if self._user_adjusting_splitter and not force:
|
|
841
|
+
return
|
|
842
|
+
|
|
843
|
+
# Measure current layout and targets
|
|
844
|
+
doc_h = self._document_content_height()
|
|
845
|
+
non_viewport_h = self.height() - self.viewport().height()
|
|
846
|
+
needed_input_h = int(math.ceil(doc_h + non_viewport_h))
|
|
847
|
+
min_input_h = self._min_input_widget_height(non_viewport_h)
|
|
848
|
+
max_input_by_lines = self._max_input_widget_height_by_lines(non_viewport_h)
|
|
849
|
+
|
|
850
|
+
# Container overhead above the inner QTextEdit
|
|
851
|
+
container_overhead = max(0, container.height() - self.height())
|
|
852
|
+
needed_container_h = needed_input_h + container_overhead
|
|
853
|
+
min_container_h = min_input_h + container_overhead
|
|
854
|
+
|
|
855
|
+
# Max cap by window fraction
|
|
856
|
+
try:
|
|
857
|
+
max_container_by_ratio = int(self.window.height() * self._auto_max_ratio)
|
|
858
|
+
except Exception:
|
|
859
|
+
max_container_by_ratio = 0 # fallback disables ratio cap if window unavailable
|
|
860
|
+
|
|
861
|
+
max_container_by_lines = max_input_by_lines + container_overhead
|
|
862
|
+
cap_container_max = max_container_by_lines
|
|
863
|
+
if max_container_by_ratio > 0:
|
|
864
|
+
cap_container_max = min(cap_container_max, max_container_by_ratio)
|
|
865
|
+
|
|
866
|
+
current_sizes = splitter.sizes()
|
|
867
|
+
if idx >= len(current_sizes):
|
|
868
|
+
return
|
|
869
|
+
current_container_h = current_sizes[idx]
|
|
870
|
+
|
|
871
|
+
# Decide on action
|
|
872
|
+
target_container_h = None
|
|
873
|
+
|
|
874
|
+
# Shrink only when requested or effectively single line
|
|
875
|
+
if minimize_if_single or self._should_shrink_to_min(doc_h):
|
|
876
|
+
if current_container_h > min_container_h + 1:
|
|
877
|
+
target_container_h = min_container_h
|
|
878
|
+
|
|
879
|
+
# Expand if focused (or forced), but only up to caps
|
|
880
|
+
elif can_expand:
|
|
881
|
+
desired = min(needed_container_h, cap_container_max)
|
|
882
|
+
if desired > current_container_h + 1:
|
|
883
|
+
target_container_h = desired
|
|
884
|
+
|
|
885
|
+
# Apply if needed
|
|
886
|
+
if target_container_h is None:
|
|
887
|
+
return
|
|
888
|
+
|
|
889
|
+
total = sum(current_sizes)
|
|
890
|
+
# Clamp to splitter total height
|
|
891
|
+
target_container_h = max(0, min(target_container_h, total))
|
|
892
|
+
|
|
893
|
+
if abs(target_container_h - current_container_h) <= 1:
|
|
894
|
+
return
|
|
895
|
+
|
|
896
|
+
# Prepare new sizes (2 widgets expected: output at 0, input at 1)
|
|
897
|
+
new_sizes = list(current_sizes)
|
|
898
|
+
# Distribute delta to other panes; here we have exactly 2
|
|
899
|
+
other_total = total - current_container_h
|
|
900
|
+
new_other_total = total - target_container_h
|
|
901
|
+
if other_total <= 0:
|
|
902
|
+
# degenerate case; just set directly
|
|
903
|
+
pass
|
|
904
|
+
else:
|
|
905
|
+
# Scale other widgets proportionally
|
|
906
|
+
scale = new_other_total / float(other_total) if other_total > 0 else 1.0
|
|
907
|
+
for i in range(len(new_sizes)):
|
|
908
|
+
if i != idx:
|
|
909
|
+
new_sizes[i] = int(round(new_sizes[i] * scale))
|
|
910
|
+
new_sizes[idx] = int(target_container_h)
|
|
911
|
+
|
|
912
|
+
# Final clamp to preserve sum
|
|
913
|
+
diff = total - sum(new_sizes)
|
|
914
|
+
if diff != 0 and len(new_sizes) > 0:
|
|
915
|
+
# Adjust the first non-target pane to fix rounding
|
|
916
|
+
for i in range(len(new_sizes)):
|
|
917
|
+
if i != idx:
|
|
918
|
+
new_sizes[i] += diff
|
|
919
|
+
break
|
|
920
|
+
|
|
921
|
+
self._splitter_resize_in_progress = True
|
|
922
|
+
try:
|
|
923
|
+
old_block = splitter.blockSignals(True)
|
|
924
|
+
splitter.setSizes(new_sizes)
|
|
925
|
+
splitter.blockSignals(old_block)
|
|
926
|
+
finally:
|
|
927
|
+
self._splitter_resize_in_progress = False
|
|
928
|
+
|
|
929
|
+
# Keep stored sizes in sync with app expectations (mirrors ChatMain.on_splitter_moved)
|
|
930
|
+
try:
|
|
931
|
+
tabs = self.window.ui.tabs
|
|
932
|
+
if "input" in tabs:
|
|
933
|
+
t_idx = tabs['input'].currentIndex()
|
|
934
|
+
if t_idx != 0:
|
|
935
|
+
self.window.controller.ui.splitter_output_size_files = new_sizes
|
|
936
|
+
else:
|
|
937
|
+
self.window.controller.ui.splitter_output_size_input = new_sizes
|
|
938
|
+
except Exception:
|
|
939
|
+
pass
|
|
940
|
+
|
|
941
|
+
self._last_target_container_h = target_container_h
|
|
942
|
+
|
|
943
|
+
def collapse_to_min(self):
|
|
944
|
+
"""Public helper to collapse input area to minimal height."""
|
|
945
|
+
self._schedule_auto_resize(force=True, enforce_minimize_if_single=True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pygpt-net
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.34
|
|
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, 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
|
|
@@ -118,7 +118,7 @@ Description-Content-Type: text/markdown
|
|
|
118
118
|
|
|
119
119
|
[](https://snapcraft.io/pygpt)
|
|
120
120
|
|
|
121
|
-
Release: **2.6.
|
|
121
|
+
Release: **2.6.34** | build: **2025-09-03** | Python: **>=3.10, <3.14**
|
|
122
122
|
|
|
123
123
|
> Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
|
|
124
124
|
>
|
|
@@ -3565,6 +3565,18 @@ may consume additional tokens that are not displayed in the main window.
|
|
|
3565
3565
|
|
|
3566
3566
|
## Recent changes:
|
|
3567
3567
|
|
|
3568
|
+
**2.6.34 (2025-09-03)**
|
|
3569
|
+
|
|
3570
|
+
- Added auto-resizing for input.
|
|
3571
|
+
- Added file management to the OpenAI Vector Stores tool.
|
|
3572
|
+
- Implemented removal of script tags when exporting HTML.
|
|
3573
|
+
- Enabled maintaining custom resolution in Painter.
|
|
3574
|
+
|
|
3575
|
+
**2.6.33 (2025-09-02)**
|
|
3576
|
+
|
|
3577
|
+
- Added a "crop" option, auto-resize canvas, and layer support to Painter.
|
|
3578
|
+
- Improved video capture from the camera.
|
|
3579
|
+
|
|
3568
3580
|
**2.6.32 (2025-09-02)**
|
|
3569
3581
|
|
|
3570
3582
|
- Added video generation and support for Google Veo 3 models.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
pygpt_net/CHANGELOG.txt,sha256=
|
|
1
|
+
pygpt_net/CHANGELOG.txt,sha256=1wuPhOstkPgPaVN5t05LrBbHsOqOVSsFJseiATBGR8I,104136
|
|
2
2
|
pygpt_net/LICENSE,sha256=dz9sfFgYahvu2NZbx4C1xCsVn9GVer2wXcMkFRBvqzY,1146
|
|
3
|
-
pygpt_net/__init__.py,sha256=
|
|
3
|
+
pygpt_net/__init__.py,sha256=Et-nRWbU0RxmMqIaYmt7uqCkIUBmBV2NUW1sN5tX_eM,1373
|
|
4
4
|
pygpt_net/app.py,sha256=26N6af9L88rTeYmYIgP9amoPJB-o3Sc5_MFHLNckbWk,21817
|
|
5
5
|
pygpt_net/app_core.py,sha256=y7mHzH_sdUg2yoG_BKvMdJA6v5jCBSHhwcXqIZfxXs4,4169
|
|
6
6
|
pygpt_net/config.py,sha256=SCps_FfwdrynVAgpn37Ci1qTN8BFC05IGl9sYIi9e0w,16720
|
|
@@ -17,10 +17,10 @@ pygpt_net/controller/agent/legacy.py,sha256=iOr1SD-A83Jgr6olZQMjhMr7UiQ7iWum0YND
|
|
|
17
17
|
pygpt_net/controller/agent/llama.py,sha256=_sF4cAzCnBwGqY7VGqj-rbkNu-c1ye3w02d0mdXW6LQ,6115
|
|
18
18
|
pygpt_net/controller/assistant/__init__.py,sha256=y5uoiH6oZki5Q3N1vt8szAJmxXRK_98RfSSXqVbDmQ0,513
|
|
19
19
|
pygpt_net/controller/assistant/assistant.py,sha256=89ailohb1O84MiPKHAvwP5lYx5tKa8qlhPsmz_7Vqj0,11516
|
|
20
|
-
pygpt_net/controller/assistant/batch.py,sha256=
|
|
20
|
+
pygpt_net/controller/assistant/batch.py,sha256=7bqlaTlRo00Op6_rHSD6gVhTLIpfnIr1zps3JWzr2UE,20973
|
|
21
21
|
pygpt_net/controller/assistant/editor.py,sha256=3hqxZqtHAKil9YehBbxw8AQrkaaB6I1l11DamGdPeoQ,15473
|
|
22
|
-
pygpt_net/controller/assistant/files.py,sha256=
|
|
23
|
-
pygpt_net/controller/assistant/store.py,sha256=
|
|
22
|
+
pygpt_net/controller/assistant/files.py,sha256=skLSxtLltAKAZdE87GmrUHOxyCwIQEDbuceU_rB7v0Y,14833
|
|
23
|
+
pygpt_net/controller/assistant/store.py,sha256=3-FL_47pVVaIdjpldODQHXQXawkMFOPna-2Dvgpz4YM,22647
|
|
24
24
|
pygpt_net/controller/assistant/threads.py,sha256=323xGbyfYio32_yGLml34i2e9l2_jU8m_4vib5nxqbc,22803
|
|
25
25
|
pygpt_net/controller/attachment/__init__.py,sha256=-5owOyszPze-YLQuTtFLQnSwEj_ftTxFwAP_3jPNpss,514
|
|
26
26
|
pygpt_net/controller/attachment/attachment.py,sha256=sxtJiMSZBMXkewrIp2mbltILWUObkBMWiy5-pCiP8pE,20867
|
|
@@ -31,13 +31,13 @@ pygpt_net/controller/calendar/__init__.py,sha256=AyzoNqYgxV35CMEzoi_SCSsQh4ehg_W
|
|
|
31
31
|
pygpt_net/controller/calendar/calendar.py,sha256=s55RkCFQPFzdDoQ2zp3kohlNdpiWxdSxQtsaROeiigw,4424
|
|
32
32
|
pygpt_net/controller/calendar/note.py,sha256=AkOQ0FslaDkQbNwXBg95XhtPi3KzhKiFd374L8kTKBA,10169
|
|
33
33
|
pygpt_net/controller/camera/__init__.py,sha256=dwmea8rz2QwdwKT160NYaaOoWucCWeyuecWkEXIcvio,510
|
|
34
|
-
pygpt_net/controller/camera/camera.py,sha256=
|
|
34
|
+
pygpt_net/controller/camera/camera.py,sha256=R9iQdt4k-V7sK4kuLSVoD-QtrSWZbECmXsBpHsILnwo,16526
|
|
35
35
|
pygpt_net/controller/chat/__init__.py,sha256=lx8FfN-Uoet5Y91xFxrA95N65vt_v99HcZd3K-YlYlc,508
|
|
36
|
-
pygpt_net/controller/chat/attachment.py,sha256=
|
|
36
|
+
pygpt_net/controller/chat/attachment.py,sha256=GfZaRluyIAiMThtc7xedAl3X8ZOkEuAUrH9LaKptGVs,21034
|
|
37
37
|
pygpt_net/controller/chat/audio.py,sha256=NiUecZDVzLYyNDBfidI4uGczI457WkCU0T9P8UEGvDA,2889
|
|
38
38
|
pygpt_net/controller/chat/chat.py,sha256=3cOxTeub6X7ui3TxoP9rAi4GPuwUeOEcLd-TG5ogbc4,3003
|
|
39
39
|
pygpt_net/controller/chat/command.py,sha256=eKFQzP0tehZ3S_G7RoZVMTebQFSjPIpix3t7vDB7MWc,5291
|
|
40
|
-
pygpt_net/controller/chat/common.py,sha256=
|
|
40
|
+
pygpt_net/controller/chat/common.py,sha256=pnnPve8XAXJ951ArAy5Z3-cjfNX8MAqYFIcHWvOvl64,15847
|
|
41
41
|
pygpt_net/controller/chat/files.py,sha256=QZAi1Io57EU7htKt9M5I9OoGAFX51OH2V5-NsJktOto,2838
|
|
42
42
|
pygpt_net/controller/chat/handler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
43
|
pygpt_net/controller/chat/handler/stream_worker.py,sha256=2zn8tGYXLLTvml3Rd7kk2SR0RlIiZCYUOePpAuUUuSI,42215
|
|
@@ -62,7 +62,7 @@ pygpt_net/controller/config/field/dictionary.py,sha256=m3nSL8xAp0NRnr_rVmTZA5uTQ
|
|
|
62
62
|
pygpt_net/controller/config/field/input.py,sha256=Dx04ivrwM1KqA41uHYNGzwq1c7O-zPnU_NI-3I45hPY,3992
|
|
63
63
|
pygpt_net/controller/config/field/slider.py,sha256=dYbICd3ID-aLlc2a-bvFgWS4jceVz2UliTQKYy7Pl1Q,4560
|
|
64
64
|
pygpt_net/controller/config/field/textarea.py,sha256=Ln545IHzXBeFIjnfMIpmlUr-V3wNYjw4qGiz4NYRw34,2796
|
|
65
|
-
pygpt_net/controller/config/placeholder.py,sha256
|
|
65
|
+
pygpt_net/controller/config/placeholder.py,sha256=-PWPNILPVkxMsY64aYnKTWvgUIvx7KA2Nwfd2LW_K30,16711
|
|
66
66
|
pygpt_net/controller/ctx/__init__.py,sha256=0wH7ziC75WscBW8cxpeGBwEz5tolo_kCxGPoz2udI_E,507
|
|
67
67
|
pygpt_net/controller/ctx/common.py,sha256=1jjRfEK1S4IqnzEGg1CIF-QqSN_83NLpaVtfB610NcM,6592
|
|
68
68
|
pygpt_net/controller/ctx/ctx.py,sha256=1Vdkqv0WGgs9ufE3UK6YAh5_7yG62u6uUKP1Su3bkU0,39216
|
|
@@ -71,7 +71,7 @@ pygpt_net/controller/ctx/summarizer.py,sha256=UNsq-JTARblGNT97uSMpZEVzdUuDJ8YA2j
|
|
|
71
71
|
pygpt_net/controller/debug/__init__.py,sha256=dOJGTICjvTtrPIEDOsxCzcOHsfu8AFPLpSKbdN0q0KI,509
|
|
72
72
|
pygpt_net/controller/debug/debug.py,sha256=FHAz2sd75ucDtU3UN9FtZsW9YpC_ohkvrAj1N9cQet8,8879
|
|
73
73
|
pygpt_net/controller/dialogs/__init__.py,sha256=jI2WisG3lzbeyf__1Y7g7wWrxlr1QnYBDDt4t_3eeYk,513
|
|
74
|
-
pygpt_net/controller/dialogs/confirm.py,sha256=
|
|
74
|
+
pygpt_net/controller/dialogs/confirm.py,sha256=PgVOJS31quY24Fs9XhFplcMnKweKbAxGWDKSjlBgLJU,16860
|
|
75
75
|
pygpt_net/controller/dialogs/debug.py,sha256=v6E85vyCwfaDG9XZysxhBjRwlrDkbYC-NxUnDamNRpk,5980
|
|
76
76
|
pygpt_net/controller/dialogs/dialogs.py,sha256=sJHyZxkAn9QKTegUqx_xETesN2ecMBkrtf-VsCubr2w,1008
|
|
77
77
|
pygpt_net/controller/dialogs/info.py,sha256=mjQdj6cbTB09aIul5FChsnJsQoeqsRUQpKc3rP7lFeM,3757
|
|
@@ -99,7 +99,7 @@ pygpt_net/controller/launcher/launcher.py,sha256=zY2yIrSd7y5dhVtMJExKxHI4JhD1--P
|
|
|
99
99
|
pygpt_net/controller/layout/__init__.py,sha256=0pxxzjAUa1hS27d80Q0SgDV1Uzs7A9mZrUxb1cs-oHs,510
|
|
100
100
|
pygpt_net/controller/layout/layout.py,sha256=HlbfGK-_HXQrifSh5tWpPtu5JzWN2fktVmh8ofBDMfQ,13058
|
|
101
101
|
pygpt_net/controller/media/__init__.py,sha256=N1UnDuteomgsBxRmVUd1Hm6UeGbHESYY9SowOhJj-YI,513
|
|
102
|
-
pygpt_net/controller/media/media.py,sha256=
|
|
102
|
+
pygpt_net/controller/media/media.py,sha256=Fox4li3HRGL0wI9yJ6WyaiFSBm5znuumET7roDnaJtc,4062
|
|
103
103
|
pygpt_net/controller/mode/__init__.py,sha256=1Kcz0xHc2IW_if9S9eQozBUvIu69eLAe7T-Re2lJxhk,508
|
|
104
104
|
pygpt_net/controller/mode/mode.py,sha256=WdaNA7-n6mTkkRkKIMUltxBC_vRAwWzkUEt9rOpIRBM,7840
|
|
105
105
|
pygpt_net/controller/model/__init__.py,sha256=mQXq9u269D8TD3u_44J6DFFyHKkaZplk-tRFCssBGbE,509
|
|
@@ -110,8 +110,8 @@ pygpt_net/controller/notepad/__init__.py,sha256=ZbMh4D6nsGuI4AwYMdegfij5ubmUznEE
|
|
|
110
110
|
pygpt_net/controller/notepad/notepad.py,sha256=Mn3XOrNq8_7EHq3Jf9fMyJ6YzHRawczRXfoZbn2f7L4,11155
|
|
111
111
|
pygpt_net/controller/painter/__init__.py,sha256=ZNZE6YcKprDPqLK5kiwtcJVvcW3H-YkerFW0PwbeQ1Y,511
|
|
112
112
|
pygpt_net/controller/painter/capture.py,sha256=X3TqnNypxT_wngkQ4ovfS9glQwoGHyM-peR5aLJQGvk,6666
|
|
113
|
-
pygpt_net/controller/painter/common.py,sha256=
|
|
114
|
-
pygpt_net/controller/painter/painter.py,sha256=
|
|
113
|
+
pygpt_net/controller/painter/common.py,sha256=jOWrgvNCrF7Jm6uVIVRmuMAY5WINVV0XSqu6c3Sf1nw,15451
|
|
114
|
+
pygpt_net/controller/painter/painter.py,sha256=t81axkIUpaOqDjKHxrFJdjKOW-cpyPphYanQHwnLkww,2370
|
|
115
115
|
pygpt_net/controller/plugins/__init__.py,sha256=iocY37De1H2Nh7HkC7ZYvUus2xzcckslgr5a4PwtQII,511
|
|
116
116
|
pygpt_net/controller/plugins/plugins.py,sha256=DysPDatuIi8t1k-nnUfy8tLBFBberTAuL8YKNVXXZd0,14917
|
|
117
117
|
pygpt_net/controller/plugins/presets.py,sha256=8EsEwpU2MjWMQu1kcY4JTcyqqN8pjBrcxA2uW2tFU_A,11674
|
|
@@ -169,7 +169,7 @@ pygpt_net/core/agents/runners/openai_workflow.py,sha256=9jajowBjD_LKmd417e5kkl9h
|
|
|
169
169
|
pygpt_net/core/agents/tools.py,sha256=UW5-3q-cPpmx_FlDyuF2qymbgIJRmkklNmng3IokEUM,22116
|
|
170
170
|
pygpt_net/core/assistants/__init__.py,sha256=FujLn0ia5S3-7nX-Td_0S5Zqiw6Yublh58c4Di7rRgY,514
|
|
171
171
|
pygpt_net/core/assistants/assistants.py,sha256=JVseBSjDJh9vJYjxoZVwU93EFTBJk_rUtRh_Ml550H0,4391
|
|
172
|
-
pygpt_net/core/assistants/files.py,sha256=
|
|
172
|
+
pygpt_net/core/assistants/files.py,sha256=A20fO1q-PJwSuh3NrEWeOila88QzRc6ECvqIU6AFKj8,10708
|
|
173
173
|
pygpt_net/core/assistants/store.py,sha256=6019iiPdPehf-Klpft0Vyw4ieYQyZzin-l684UA9Fqo,8239
|
|
174
174
|
pygpt_net/core/attachments/__init__.py,sha256=3bka_IoE6AoExlhFqDxcTaD6Uf1wM6VZzy_YX8Ry4f0,515
|
|
175
175
|
pygpt_net/core/attachments/attachments.py,sha256=bUqvfPqlpdXiGf3GvS1kTE45A0Q1Eo3kpUKypnRwDpk,12919
|
|
@@ -204,7 +204,8 @@ pygpt_net/core/bridge/worker.py,sha256=9PsUeuGyM_RY6v6MNroFLEVyC4mt-KABzwAmJ6cAJ
|
|
|
204
204
|
pygpt_net/core/calendar/__init__.py,sha256=AyzoNqYgxV35CMEzoi_SCSsQh4ehg_Wu_2nsK3xsbyg,512
|
|
205
205
|
pygpt_net/core/calendar/calendar.py,sha256=ao9kQk6Xjse95m1TbL1Mlbo1k1Q8D9eGc10L-71G9TY,7227
|
|
206
206
|
pygpt_net/core/camera/__init__.py,sha256=cny2EajFmwkFdo_pUkErJY4BhpyHp1kJVDcTCOOvkjY,510
|
|
207
|
-
pygpt_net/core/camera/camera.py,sha256=
|
|
207
|
+
pygpt_net/core/camera/camera.py,sha256=8-PZN3UEnhMQfT2whI4QvN_Qd8AYnkMWk4oo6cKtDEc,2263
|
|
208
|
+
pygpt_net/core/camera/worker.py,sha256=z2qXyslWh4-0gixJZI6qcmIFutZcLD55P2dTzAYbNaU,14063
|
|
208
209
|
pygpt_net/core/chain/__init__.py,sha256=S-VLEzPrcT0l9YeiC2cYZkPBSnX4ZFHZeFqIbB43Gz8,509
|
|
209
210
|
pygpt_net/core/chain/chain.py,sha256=C7Xm88bRblcyM4e0wZMFG-6SQCdw_frXN9kqnWzce60,3541
|
|
210
211
|
pygpt_net/core/chain/chat.py,sha256=5LxPWHkocjrIAAwrdDH1ss6knAnh4_owfbHPsOQYSws,5238
|
|
@@ -263,7 +264,7 @@ pygpt_net/core/filesystem/opener.py,sha256=8EkieR_FwSz0HBykLcmV8TEw8Bn0e7WHqqiPT
|
|
|
263
264
|
pygpt_net/core/filesystem/packer.py,sha256=9CmQgq-lja2QGtc0JFqh197mLLViJ7TDPc8fVWTok1w,2568
|
|
264
265
|
pygpt_net/core/filesystem/parser.py,sha256=NqFwNbF8QJai34Oz9WFtAWZa6uPx6AfuUgM2ZdAOgbI,2960
|
|
265
266
|
pygpt_net/core/filesystem/types.py,sha256=1HFubxAHYup_SLQ7SlR5EvZb3KgVyd8K8vBRUkTcqaA,3458
|
|
266
|
-
pygpt_net/core/filesystem/url.py,sha256=
|
|
267
|
+
pygpt_net/core/filesystem/url.py,sha256=PAhO73dlw_jBu7HN5RKHSVbbtrXTR4FoU_S1tD7dGvU,3528
|
|
267
268
|
pygpt_net/core/history/__init__.py,sha256=OVtJM8Cf-9WV9-WmB6x__qB3QK4ZGaYzjpl4Fk8RdWM,511
|
|
268
269
|
pygpt_net/core/history/history.py,sha256=PDE5Ut03mEgY9YPLZjqrimKQAyxoE7itViuqFV-VQf0,3123
|
|
269
270
|
pygpt_net/core/idx/__init__.py,sha256=8-HStPMODmgzC3dBaJB6MDqGJHCHnKxNdt30Vzyu3cM,507
|
|
@@ -337,7 +338,7 @@ pygpt_net/core/render/plain/helpers.py,sha256=tWbdJZBfjnuHLAUDVYLTfv3Vt-h7XN1tg6
|
|
|
337
338
|
pygpt_net/core/render/plain/pid.py,sha256=Pz3v1tnLj-XI_9vcaVkCf9SZ2EgVs4LYV4qzelBMoOg,1119
|
|
338
339
|
pygpt_net/core/render/plain/renderer.py,sha256=mb1d6UBbuOs_fotG9fZPdBk95i8n0UMCJNnF4an8E0o,15357
|
|
339
340
|
pygpt_net/core/render/web/__init__.py,sha256=istp5dsn6EkLEP7lOBeDb8RjodUcWZqjcEvTroaTT-w,489
|
|
340
|
-
pygpt_net/core/render/web/body.py,sha256=
|
|
341
|
+
pygpt_net/core/render/web/body.py,sha256=NM3ha_HWK-rC7lBl4OtxRzYyKetVB2iGUUSOPyqKiRs,59762
|
|
341
342
|
pygpt_net/core/render/web/helpers.py,sha256=KAmUNUuIk8gArCMkyWcK_Ak0uxJOuIULt5eOA-jnjJM,5757
|
|
342
343
|
pygpt_net/core/render/web/parser.py,sha256=pDFc9Tf8P-jvrDilXyT1fukcQHbixHRJ9Dn9hF10Gko,12892
|
|
343
344
|
pygpt_net/core/render/web/pid.py,sha256=pXBdPb8hw_aZS2Rtz3pLBpuybpXrzoqwYAFWBal9bLE,3685
|
|
@@ -351,7 +352,7 @@ pygpt_net/core/tabs/tabs.py,sha256=qppWQsyBDZTpi-D6SbPZaFOuEKzjrGn_dPLfilGvKFE,3
|
|
|
351
352
|
pygpt_net/core/text/__init__.py,sha256=6aEjrckL5kWVfyxpi5mVpSPB6XWV83e_30g_V5meL1M,19
|
|
352
353
|
pygpt_net/core/text/finder.py,sha256=NBzYUE_Av3oZH8RlCrSe6EeLcHpfz79WJV_vSK0P1jI,6656
|
|
353
354
|
pygpt_net/core/text/text.py,sha256=WyQdXx4TpBGgr3XU6AhPILvhaipB57S2XtIs8FYif84,3217
|
|
354
|
-
pygpt_net/core/text/utils.py,sha256=
|
|
355
|
+
pygpt_net/core/text/utils.py,sha256=YjcGwnWsp7vmx0wcagO2aZkDwP8HMWLrewp93fjl75U,4637
|
|
355
356
|
pygpt_net/core/text/web_finder.py,sha256=8Yex-Kmnz8KyStF0-koNC-0392SkUIsy0nRYLExlyHM,6600
|
|
356
357
|
pygpt_net/core/tokens/__init__.py,sha256=rSSdzmBL-LmMUv14hodHi5b1HYcm9UU8DEbD7owk4BI,510
|
|
357
358
|
pygpt_net/core/tokens/tokens.py,sha256=M-97eNqXqnlgoDdFYTydifF4VhStCbO5dSt9PoBCTpI,12354
|
|
@@ -382,8 +383,8 @@ pygpt_net/css_rc.py,sha256=i13kX7irhbYCWZ5yJbcMmnkFp_UfS4PYnvRFSPF7XXo,11349
|
|
|
382
383
|
pygpt_net/data/audio/click_off.mp3,sha256=aNiRDP1pt-Jy7ija4YKCNFBwvGWbzU460F4pZWZDS90,65201
|
|
383
384
|
pygpt_net/data/audio/click_on.mp3,sha256=qfdsSnthAEHVXzeyN4LlC0OvXuyW8p7stb7VXtlvZ1k,65201
|
|
384
385
|
pygpt_net/data/audio/ok.mp3,sha256=LTiV32pEBkpUGBkKkcOdOFB7Eyt_QoP2Nv6c5AaXftk,32256
|
|
385
|
-
pygpt_net/data/config/config.json,sha256=
|
|
386
|
-
pygpt_net/data/config/models.json,sha256=
|
|
386
|
+
pygpt_net/data/config/config.json,sha256=Jnz6iQ17hJ134uZV9jmW8_0aa-4as1Hc7SlkCuJzJDE,30217
|
|
387
|
+
pygpt_net/data/config/models.json,sha256=hKMXwMI0P4svzGm1qLucvIf0HET2LIJ343BsZrBXfgw,115730
|
|
387
388
|
pygpt_net/data/config/modes.json,sha256=IpjLOm428_vs6Ma9U-YQTNKJNtZw-qyM1lwhh73xl1w,2111
|
|
388
389
|
pygpt_net/data/config/presets/agent_code_act.json,sha256=GYHqhxtKFLUCvRI3IJAJ7Qe1k8yD9wGGNwManldWzlI,754
|
|
389
390
|
pygpt_net/data/config/presets/agent_openai.json,sha256=bpDJgLRey_effQkzFRoOEGd4aHUrmzeODSDdNzrf62I,730
|
|
@@ -418,7 +419,7 @@ pygpt_net/data/config/presets/current.vision.json,sha256=x1ll5B3ROSKYQA6l27PRGXU
|
|
|
418
419
|
pygpt_net/data/config/presets/dalle_white_cat.json,sha256=esqUb43cqY8dAo7B5u99tRC0MBV5lmlrVLnJhTSkL8w,552
|
|
419
420
|
pygpt_net/data/config/presets/joke_agent.json,sha256=R6n9P7KRb0s-vZWZE7kHdlOfXAx1yYrPmUw8uLyw8OE,474
|
|
420
421
|
pygpt_net/data/config/presets/joke_expert.json,sha256=jjcoIYEOaEp8kLoIbecxQROiq4J3Zess5w8_HmngPOY,671
|
|
421
|
-
pygpt_net/data/config/settings.json,sha256=
|
|
422
|
+
pygpt_net/data/config/settings.json,sha256=uD3K0gQqc38SQy5ecYLdZMoEyTrmiviwwzGyNuH1DTU,78126
|
|
422
423
|
pygpt_net/data/config/settings_section.json,sha256=pcfOFk0_eIRaa4nKRxhSVzDXe531YxWJgVx5rLV0J9U,1150
|
|
423
424
|
pygpt_net/data/css/fix_windows.css,sha256=Mks14Vg25ncbMqZJfAMStrhvZmgHF6kU75ohTWRZeI8,664
|
|
424
425
|
pygpt_net/data/css/fix_windows.dark.css,sha256=7hGbT_qI5tphYC_WlFpJRDAcmjBb0AQ2Yc-y-_Zzf2M,161
|
|
@@ -1645,14 +1646,14 @@ pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff2,sha256=cdUX1ngneHz6
|
|
|
1645
1646
|
pygpt_net/data/js/katex/katex.min.css,sha256=lVaKnUaQNG4pI71WHffQZVALLQF4LMZEk4nOia8U9ow,23532
|
|
1646
1647
|
pygpt_net/data/js/katex/katex.min.js,sha256=KLASOtKS2x8pUxWVzCDmlWJ4jhuLb0vtrgakbD6gDDo,276757
|
|
1647
1648
|
pygpt_net/data/languages.csv,sha256=fvtER6vnTXFHQslCh-e0xCfZDQ-ijgW4GYpOJG4U7LY,8289
|
|
1648
|
-
pygpt_net/data/locale/locale.de.ini,sha256=
|
|
1649
|
-
pygpt_net/data/locale/locale.en.ini,sha256=
|
|
1650
|
-
pygpt_net/data/locale/locale.es.ini,sha256=
|
|
1651
|
-
pygpt_net/data/locale/locale.fr.ini,sha256=
|
|
1652
|
-
pygpt_net/data/locale/locale.it.ini,sha256=
|
|
1653
|
-
pygpt_net/data/locale/locale.pl.ini,sha256=
|
|
1654
|
-
pygpt_net/data/locale/locale.uk.ini,sha256=
|
|
1655
|
-
pygpt_net/data/locale/locale.zh.ini,sha256=
|
|
1649
|
+
pygpt_net/data/locale/locale.de.ini,sha256=hjiIUlCbLk3LiLESJHTLuzThW2sVry4Uhg4vNqopt8U,105027
|
|
1650
|
+
pygpt_net/data/locale/locale.en.ini,sha256=TDZXEbmy4N9TgMWw_1pGASIlDEzu7GPACiUjFf0RAAA,97439
|
|
1651
|
+
pygpt_net/data/locale/locale.es.ini,sha256=V7ozh8vhtXdOz6Y5PW_Lt6jZfv_uyCmorv2qfnorKrg,105676
|
|
1652
|
+
pygpt_net/data/locale/locale.fr.ini,sha256=rmL9d98ByODCcvM5yUwqGHmPQ8yYzclkrqENTTIdWUk,108446
|
|
1653
|
+
pygpt_net/data/locale/locale.it.ini,sha256=7HmsSIOxYcQK0SCZDiuVnHu0ExGhyfYdSHWZFtEE66k,103422
|
|
1654
|
+
pygpt_net/data/locale/locale.pl.ini,sha256=U55ZIFKDFRm8-T0hNJiGSP-WkKLLjoJtvCCubPKQD6o,103027
|
|
1655
|
+
pygpt_net/data/locale/locale.uk.ini,sha256=sWeXl5DfRj3sBHp-CyJkNEJHX_VzHaKUAVmP6uhPjmM,143885
|
|
1656
|
+
pygpt_net/data/locale/locale.zh.ini,sha256=zeIVaIhDSLvjPJn0DsuoHo74bjAXv75iyWzk9kqNO_k,92109
|
|
1656
1657
|
pygpt_net/data/locale/plugin.agent.de.ini,sha256=BY28KpfFvgfVYJzcw2o5ScWnR4uuErIYGyc3NVHlmTw,1714
|
|
1657
1658
|
pygpt_net/data/locale/plugin.agent.en.ini,sha256=HwOWCI7e8uzlIgyRWRVyr1x6Xzs8Xjv5pfEc7jfLOo4,1728
|
|
1658
1659
|
pygpt_net/data/locale/plugin.agent.es.ini,sha256=bqaJQne8HPKFVtZ8Ukzo1TSqVW41yhYbGUqW3j2x1p8,1680
|
|
@@ -1839,7 +1840,7 @@ pygpt_net/fonts_rc.py,sha256=EVwgIVDq-Sudy9DYpHbzuhQ_jd9pUuQ8e3-nycPzj3A,3238283
|
|
|
1839
1840
|
pygpt_net/icons.qrc,sha256=7etxjwGtJm61IfTFIloyO7yonX06Jc1ZoSniGUFTho4,14981
|
|
1840
1841
|
pygpt_net/icons_rc.py,sha256=FWRllE_kudX-jI4lOto-Pvf5NDCFDrpAxuQgXgldg6k,92180
|
|
1841
1842
|
pygpt_net/item/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
1842
|
-
pygpt_net/item/assistant.py,sha256=
|
|
1843
|
+
pygpt_net/item/assistant.py,sha256=zQcTIXyivZ5PWjEf8rKZIQqKPOGqwMsspU_g4RWxlRg,9986
|
|
1843
1844
|
pygpt_net/item/attachment.py,sha256=Wo-36L_R-P--JjDEpnpbaYo3vuIqr1s82m5rman9h28,2818
|
|
1844
1845
|
pygpt_net/item/calendar_note.py,sha256=EBhAAS09E5tIO3XhW_iA_wofSUywLWlYtiiMJJzVc3g,2114
|
|
1845
1846
|
pygpt_net/item/ctx.py,sha256=wvK7hipdqUht7HZ8o0XBzB3CE4Ef3KOcypA6L49bcVI,21055
|
|
@@ -2044,7 +2045,7 @@ pygpt_net/provider/agents/openai/evolve.py,sha256=hBsYIokVCWLWB0syHoLQqWgEiEfR9J
|
|
|
2044
2045
|
pygpt_net/provider/agents/openai/supervisor.py,sha256=cUsVns-ZZ7kK78SNcHRt3UgfePjB6NWCOrauSfn_BnI,13229
|
|
2045
2046
|
pygpt_net/provider/api/__init__.py,sha256=L8086E7nrFP_rLRRTpQfR46cHUxsoR5giHjVBAX1xps,879
|
|
2046
2047
|
pygpt_net/provider/api/anthropic/__init__.py,sha256=YHUOyuaPp74t3MWgDVdcpEutsGta3Iasw940-S4uwkk,1975
|
|
2047
|
-
pygpt_net/provider/api/google/__init__.py,sha256=
|
|
2048
|
+
pygpt_net/provider/api/google/__init__.py,sha256=u9ZZwqODrA9PRXr3CJ8yeYvN2jkdpaYyFCFJ45fB440,12144
|
|
2048
2049
|
pygpt_net/provider/api/google/audio.py,sha256=Ymq_Q3WofC-8TfYOGu5NmNuRW_omvl8UCS3Q0WEBxnA,4149
|
|
2049
2050
|
pygpt_net/provider/api/google/chat.py,sha256=eLDh0k1DtDHZ7V1cfg0m75uICQffAKBH6IReHmuxy_Y,23057
|
|
2050
2051
|
pygpt_net/provider/api/google/image.py,sha256=OSu4y5q36bVVirnw0Uh5k9PqmWHiXDuS8Api_MKSwt0,16794
|
|
@@ -2074,7 +2075,7 @@ pygpt_net/provider/api/openai/realtime/client.py,sha256=4_Evnlb0vobuNbJwNEej1oL9
|
|
|
2074
2075
|
pygpt_net/provider/api/openai/realtime/realtime.py,sha256=tStZJwBHhzyp3yejLsr58LtNwATqpCgyCtvDM5ZqTSA,7424
|
|
2075
2076
|
pygpt_net/provider/api/openai/remote_tools.py,sha256=WUoN5XrafwyLz8s58pslOE1YD9EViGPhQOzN24_n1gM,5677
|
|
2076
2077
|
pygpt_net/provider/api/openai/responses.py,sha256=tfDbcnsG5rhdr8Wxlv9jjJjDptaiy46nhfg2lpHfqI4,29678
|
|
2077
|
-
pygpt_net/provider/api/openai/store.py,sha256=
|
|
2078
|
+
pygpt_net/provider/api/openai/store.py,sha256=8H2SQH9wU9Yoeai6gqajbJ1N33CSv26IA5trqfWkJtQ,18692
|
|
2078
2079
|
pygpt_net/provider/api/openai/summarizer.py,sha256=vuJz6mj9F9Psiat0d-fn1zNGgXc-WkXJyi0jrvijO6E,2978
|
|
2079
2080
|
pygpt_net/provider/api/openai/tools.py,sha256=Oh9mnGIXfnwoRTx6f-9ZItD-v3loyr4OtcvhmgroyrY,3146
|
|
2080
2081
|
pygpt_net/provider/api/openai/utils.py,sha256=O0H0EPb4lXUMfE1bFdWB56yuWLv7M5owVIGWRyDDv-E,855
|
|
@@ -2181,7 +2182,7 @@ pygpt_net/provider/llms/anthropic.py,sha256=rK0Gy5E_wzigc9GdkESMLCVyOACzp5YjVEfN
|
|
|
2181
2182
|
pygpt_net/provider/llms/azure_openai.py,sha256=QxgK3KeqEEa38B-ezro6AJyd4D4bR9d8E3fW0a6Mc0Q,3812
|
|
2182
2183
|
pygpt_net/provider/llms/base.py,sha256=D6GKahfZNUzihkCo7gQYGzkHG6XH8d_P5Y5iAnLboXM,6359
|
|
2183
2184
|
pygpt_net/provider/llms/deepseek_api.py,sha256=Jljj6Ce123q3eCrIizfFPQIsf47OzRaBK4jIbNZdLzg,3267
|
|
2184
|
-
pygpt_net/provider/llms/google.py,sha256=
|
|
2185
|
+
pygpt_net/provider/llms/google.py,sha256=NOjoZbnmvhDkuR0cRW4__u0OS6ME81ExLm-yp0eFyKo,3574
|
|
2185
2186
|
pygpt_net/provider/llms/hugging_face.py,sha256=qWyGVqosDw9WVsKbZc5IG7j4jjfVPeCKr6gPAn8Tyus,1800
|
|
2186
2187
|
pygpt_net/provider/llms/hugging_face_api.py,sha256=oY5dE-9rFv8Cd6Hv8ZriHvL46ZrT3KyvJFuLokNaNRY,3402
|
|
2187
2188
|
pygpt_net/provider/llms/hugging_face_router.py,sha256=db_P5DktU0SNObKqumaFfzEcyR1Wn7f9FwoLVlN4u2U,4477
|
|
@@ -2332,7 +2333,7 @@ pygpt_net/ui/dialog/__init__.py,sha256=1SGZ5i2G1UnKQpyj_HYkN0t-HLepD6jU_ICw1waax
|
|
|
2332
2333
|
pygpt_net/ui/dialog/about.py,sha256=6OCjEWJD10Fwz4ajx6qLh7D4oR0TsgDroczhneyGKEw,7072
|
|
2333
2334
|
pygpt_net/ui/dialog/applog.py,sha256=jOevcc3-DMasNyWEtNB7MrXZ8TEcxcPEUCzgGqT1VaA,5140
|
|
2334
2335
|
pygpt_net/ui/dialog/assistant.py,sha256=WJJvv9vSTd8sJNiWW5sVQb5YqpIvWgQH1eMTHvHfGAU,7614
|
|
2335
|
-
pygpt_net/ui/dialog/assistant_store.py,sha256=
|
|
2336
|
+
pygpt_net/ui/dialog/assistant_store.py,sha256=Tr9NWcJZQSK8mqTMKLz-EEX_NyFNaBFt9SKu9JaCvFY,23032
|
|
2336
2337
|
pygpt_net/ui/dialog/changelog.py,sha256=2ioUGq2gC1ANN5M6SFsnfIGMVbUt90IQ9aw9n7GqtMQ,1765
|
|
2337
2338
|
pygpt_net/ui/dialog/create.py,sha256=YEsroy-uimsP29RPcewkOV5vytNEZoUFa21G3WreIHM,973
|
|
2338
2339
|
pygpt_net/ui/dialog/db.py,sha256=N3Fn1ppeqrdLGGVgKbtLEUWfrY1IwvdtlVA5owMiNdU,18493
|
|
@@ -2365,7 +2366,7 @@ pygpt_net/ui/layout/chat/attachments_uploaded.py,sha256=MZA0aFOm9iKbYc6NrM7Ivg2i
|
|
|
2365
2366
|
pygpt_net/ui/layout/chat/calendar.py,sha256=hE9Gl0h5kPXe0OUkimRfys2aFti0Y4wzKxhh1gyGnjs,6578
|
|
2366
2367
|
pygpt_net/ui/layout/chat/chat.py,sha256=qB4RwT9N0eCtrbyasgO0Cxvcm2nXACck6MflGAoQqK0,2221
|
|
2367
2368
|
pygpt_net/ui/layout/chat/explorer.py,sha256=Jg6aK5qTCTNgb4EXr-zeZXSexARQSzn4W8unqV1MGe8,1358
|
|
2368
|
-
pygpt_net/ui/layout/chat/input.py,sha256=
|
|
2369
|
+
pygpt_net/ui/layout/chat/input.py,sha256=Wnb29-1MQPD4AUU4CZN4vz6tba_L6tgIyJX-Xr4cgxY,9969
|
|
2369
2370
|
pygpt_net/ui/layout/chat/markdown.py,sha256=hjYY8Da1z0IZZD086_csMcDY1wwagpuQTDZ-XfgeNgs,18656
|
|
2370
2371
|
pygpt_net/ui/layout/chat/output.py,sha256=b1qY1C2Fs_k3fOA47JnkHXfvRDdptHbEZpMF6aiwA8g,7280
|
|
2371
2372
|
pygpt_net/ui/layout/chat/painter.py,sha256=fOoGvVHnKpkpilK-3ZgZh6kCh9uxINNtsCT8NUtOarQ,5761
|
|
@@ -2446,7 +2447,7 @@ pygpt_net/ui/widget/dialog/update.py,sha256=YGUouxuEqvO8rkjI52F7wG4R8OgqcpJKB1FV
|
|
|
2446
2447
|
pygpt_net/ui/widget/dialog/url.py,sha256=7I17Pp9P2c3G1pODEY5dum_AF0nFnu2BMfbWTgEES-M,8765
|
|
2447
2448
|
pygpt_net/ui/widget/dialog/workdir.py,sha256=D-C3YIt-wCoI-Eh7z--Z4R6P1UvtpkxeiaVcI-ycFck,1523
|
|
2448
2449
|
pygpt_net/ui/widget/draw/__init__.py,sha256=oSYKtNEGNL0vDjn3wCgdnBAbxUqNGIEIf-75I2DIn7Q,488
|
|
2449
|
-
pygpt_net/ui/widget/draw/painter.py,sha256=
|
|
2450
|
+
pygpt_net/ui/widget/draw/painter.py,sha256=v3GUfhAY9pwHsVkb8-eEefRtY3XeGxvEsCOSZhf5Df8,27125
|
|
2450
2451
|
pygpt_net/ui/widget/element/__init__.py,sha256=8HT4tQFqQogEEpGYTv2RplKBthlsFKcl5egnv4lzzEw,488
|
|
2451
2452
|
pygpt_net/ui/widget/element/button.py,sha256=rhy8_RVHRV8xl0pegul31z9fNBjjIAi5Nd0hHGF6cF8,4393
|
|
2452
2453
|
pygpt_net/ui/widget/element/checkbox.py,sha256=qyX6T31c3a8Wb8B4JZwhuejD9SUAFSesdIjZdj4tv8I,2948
|
|
@@ -2487,7 +2488,7 @@ pygpt_net/ui/widget/option/__init__.py,sha256=8HT4tQFqQogEEpGYTv2RplKBthlsFKcl5e
|
|
|
2487
2488
|
pygpt_net/ui/widget/option/checkbox.py,sha256=duzgGPOVbHFnWILVEu5gDUa6sHeDOvQaaj9IsY-HbU8,3954
|
|
2488
2489
|
pygpt_net/ui/widget/option/checkbox_list.py,sha256=j3lks2qPaZZdfZEV9EbN5kH8gEquVZFUDF_rq7uxjn0,5770
|
|
2489
2490
|
pygpt_net/ui/widget/option/cmd.py,sha256=Ii_i9hR4oRmG4-TPZ-FHuTv3I1vL96YLcDP2QSKmAbI,5800
|
|
2490
|
-
pygpt_net/ui/widget/option/combo.py,sha256=
|
|
2491
|
+
pygpt_net/ui/widget/option/combo.py,sha256=2hmiUcfDYLiP0WFlCSbLTIIQUq9HB2u17cIzXfeUk1I,5582
|
|
2491
2492
|
pygpt_net/ui/widget/option/dictionary.py,sha256=67F-BGOMuH-MCEvdvE-cVqkyE8xR8euHH5zSkhRqUco,13517
|
|
2492
2493
|
pygpt_net/ui/widget/option/input.py,sha256=xeTbKOO6JFRb1seZCJQTtvehW1uSJx-l8mYMf-HqA4E,9574
|
|
2493
2494
|
pygpt_net/ui/widget/option/prompt.py,sha256=SgRd0acp13_c19tWjYYChcGgAwik9tsZKKsX1Ciqgp4,2818
|
|
@@ -2507,7 +2508,7 @@ pygpt_net/ui/widget/textarea/create.py,sha256=f4SrAW-2hjkKYIPrwVliSYH-LkgsQP8G13
|
|
|
2507
2508
|
pygpt_net/ui/widget/textarea/editor.py,sha256=qCMFJk8T7f4u3TFYKi02r2kOFSzzwrasWm_zSMsisPE,5153
|
|
2508
2509
|
pygpt_net/ui/widget/textarea/find.py,sha256=fQu6t-_LTZGFRNCkezywtMVsL-DocIkGBR_HbRFq61g,1534
|
|
2509
2510
|
pygpt_net/ui/widget/textarea/html.py,sha256=4DOnUYtHBhN-6X5w13GK-ceAAvTPd8M4mH_N-c3L_h0,12344
|
|
2510
|
-
pygpt_net/ui/widget/textarea/input.py,sha256
|
|
2511
|
+
pygpt_net/ui/widget/textarea/input.py,sha256=TNJxS5y2-ih8uzoKR1IZjftByrSGbI0JCFSEH6URO0g,35392
|
|
2511
2512
|
pygpt_net/ui/widget/textarea/name.py,sha256=vcyAY_pJWJoS_IJqdJjhIeDSniTL9rfpt8aaobWNFVY,1132
|
|
2512
2513
|
pygpt_net/ui/widget/textarea/notepad.py,sha256=Yl2fvJyRzADxvZe0B44QG8E15LdZtPjwGcdM2iIcgu4,9858
|
|
2513
2514
|
pygpt_net/ui/widget/textarea/output.py,sha256=krWta3GHwdlPOqcxLln150bo7iUOtbFL_yJzMucGOFU,6246
|
|
@@ -2518,8 +2519,8 @@ pygpt_net/ui/widget/textarea/web.py,sha256=cqs5i67bD19_BNgcYL7NXlwYBei4UYSL_IYPZ
|
|
|
2518
2519
|
pygpt_net/ui/widget/vision/__init__.py,sha256=8HT4tQFqQogEEpGYTv2RplKBthlsFKcl5egnv4lzzEw,488
|
|
2519
2520
|
pygpt_net/ui/widget/vision/camera.py,sha256=v1qEncaZr5pXocO5Cpk_lsgfCMvfFigdJmzsYfzvCl0,1877
|
|
2520
2521
|
pygpt_net/utils.py,sha256=o3V8NLcTQm8XkP6n_M88jVbI7OjnryRmsvnvf7K136A,9100
|
|
2521
|
-
pygpt_net-2.6.
|
|
2522
|
-
pygpt_net-2.6.
|
|
2523
|
-
pygpt_net-2.6.
|
|
2524
|
-
pygpt_net-2.6.
|
|
2525
|
-
pygpt_net-2.6.
|
|
2522
|
+
pygpt_net-2.6.34.dist-info/LICENSE,sha256=rbPqNB_xxANH8hKayJyIcTwD4bj4Y2G-Mcm85r1OImM,1126
|
|
2523
|
+
pygpt_net-2.6.34.dist-info/METADATA,sha256=uCPhqefcBYO17_u8Os96gRv15SiO-1ne5eFVS_q8TY8,162445
|
|
2524
|
+
pygpt_net-2.6.34.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
2525
|
+
pygpt_net-2.6.34.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
|
|
2526
|
+
pygpt_net-2.6.34.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|