pygpt-net 2.4.38__py3-none-any.whl → 2.4.40__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 (105) hide show
  1. CHANGELOG.md +19 -0
  2. README.md +25 -2
  3. pygpt_net/CHANGELOG.txt +19 -0
  4. pygpt_net/__init__.py +3 -3
  5. pygpt_net/controller/__init__.py +7 -3
  6. pygpt_net/controller/audio/__init__.py +9 -1
  7. pygpt_net/controller/calendar/__init__.py +3 -1
  8. pygpt_net/controller/chat/input.py +2 -1
  9. pygpt_net/controller/chat/render.py +8 -5
  10. pygpt_net/controller/ctx/__init__.py +33 -25
  11. pygpt_net/controller/ctx/common.py +3 -2
  12. pygpt_net/controller/debug/__init__.py +13 -2
  13. pygpt_net/controller/dialogs/confirm.py +2 -2
  14. pygpt_net/controller/kernel/__init__.py +2 -1
  15. pygpt_net/controller/lang/custom.py +2 -7
  16. pygpt_net/controller/lang/mapping.py +2 -2
  17. pygpt_net/controller/layout.py +2 -2
  18. pygpt_net/controller/notepad.py +14 -10
  19. pygpt_net/controller/theme/nodes.py +2 -5
  20. pygpt_net/controller/tools/__init__.py +37 -1
  21. pygpt_net/controller/ui/__init__.py +1 -5
  22. pygpt_net/controller/ui/tabs.py +295 -60
  23. pygpt_net/core/command.py +3 -1
  24. pygpt_net/core/ctx/__init__.py +16 -2
  25. pygpt_net/core/ctx/container.py +18 -11
  26. pygpt_net/core/ctx/output.py +86 -67
  27. pygpt_net/core/debug/tabs.py +5 -2
  28. pygpt_net/core/filesystem/url.py +7 -3
  29. pygpt_net/core/render/base.py +14 -3
  30. pygpt_net/core/render/markdown/renderer.py +3 -1
  31. pygpt_net/core/render/plain/renderer.py +3 -3
  32. pygpt_net/core/render/web/body.py +10 -4
  33. pygpt_net/core/render/web/renderer.py +213 -41
  34. pygpt_net/core/tabs/__init__.py +268 -98
  35. pygpt_net/core/tabs/tab.py +16 -4
  36. pygpt_net/core/web.py +127 -1
  37. pygpt_net/data/config/config.json +12 -5
  38. pygpt_net/data/config/models.json +3 -3
  39. pygpt_net/data/config/modes.json +3 -3
  40. pygpt_net/data/css/web-blocks.css +18 -0
  41. pygpt_net/data/css/web-blocks.light.css +7 -0
  42. pygpt_net/data/css/web-chatgpt.css +8 -0
  43. pygpt_net/data/css/web-chatgpt_wide.css +8 -0
  44. pygpt_net/data/icons/split_screen.svg +1 -0
  45. pygpt_net/data/locale/locale.de.ini +3 -0
  46. pygpt_net/data/locale/locale.en.ini +6 -1
  47. pygpt_net/data/locale/locale.es.ini +3 -0
  48. pygpt_net/data/locale/locale.fr.ini +3 -0
  49. pygpt_net/data/locale/locale.it.ini +3 -0
  50. pygpt_net/data/locale/locale.pl.ini +4 -1
  51. pygpt_net/data/locale/locale.uk.ini +3 -0
  52. pygpt_net/data/locale/locale.zh.ini +3 -0
  53. pygpt_net/data/locale/plugin.cmd_web.de.ini +2 -0
  54. pygpt_net/data/locale/plugin.cmd_web.en.ini +20 -10
  55. pygpt_net/data/locale/plugin.cmd_web.es.ini +2 -0
  56. pygpt_net/data/locale/plugin.cmd_web.fr.ini +2 -0
  57. pygpt_net/data/locale/plugin.cmd_web.it.ini +2 -0
  58. pygpt_net/data/locale/plugin.cmd_web.pl.ini +2 -0
  59. pygpt_net/data/locale/plugin.cmd_web.uk.ini +2 -0
  60. pygpt_net/data/locale/plugin.cmd_web.zh.ini +2 -0
  61. pygpt_net/icons.qrc +1 -0
  62. pygpt_net/icons_rc.py +165 -136
  63. pygpt_net/item/ctx.py +46 -24
  64. pygpt_net/plugin/audio_input/simple.py +4 -2
  65. pygpt_net/plugin/audio_output/__init__.py +4 -1
  66. pygpt_net/plugin/base/plugin.py +18 -4
  67. pygpt_net/plugin/cmd_code_interpreter/__init__.py +39 -37
  68. pygpt_net/plugin/cmd_code_interpreter/runner.py +25 -12
  69. pygpt_net/plugin/cmd_web/__init__.py +46 -6
  70. pygpt_net/plugin/cmd_web/config.py +74 -48
  71. pygpt_net/plugin/cmd_web/websearch.py +61 -28
  72. pygpt_net/plugin/cmd_web/worker.py +79 -13
  73. pygpt_net/provider/core/config/patch.py +29 -1
  74. pygpt_net/provider/core/ctx/base.py +4 -1
  75. pygpt_net/provider/core/ctx/db_sqlite/__init__.py +10 -1
  76. pygpt_net/provider/core/ctx/db_sqlite/storage.py +22 -1
  77. pygpt_net/tools/__init__.py +9 -1
  78. pygpt_net/tools/base.py +15 -1
  79. pygpt_net/tools/code_interpreter/__init__.py +174 -75
  80. pygpt_net/tools/code_interpreter/ui/dialogs.py +21 -103
  81. pygpt_net/tools/code_interpreter/ui/widgets.py +284 -9
  82. pygpt_net/tools/html_canvas/__init__.py +78 -23
  83. pygpt_net/tools/html_canvas/ui/dialogs.py +46 -62
  84. pygpt_net/tools/html_canvas/ui/widgets.py +96 -3
  85. pygpt_net/ui/base/context_menu.py +2 -2
  86. pygpt_net/ui/layout/chat/input.py +10 -18
  87. pygpt_net/ui/layout/chat/output.py +26 -44
  88. pygpt_net/ui/layout/ctx/ctx_list.py +13 -4
  89. pygpt_net/ui/layout/toolbox/footer.py +18 -2
  90. pygpt_net/ui/main.py +2 -2
  91. pygpt_net/ui/menu/debug.py +11 -1
  92. pygpt_net/ui/widget/filesystem/explorer.py +2 -2
  93. pygpt_net/ui/widget/lists/context.py +26 -5
  94. pygpt_net/ui/widget/tabs/Input.py +2 -2
  95. pygpt_net/ui/widget/tabs/body.py +2 -1
  96. pygpt_net/ui/widget/tabs/layout.py +195 -0
  97. pygpt_net/ui/widget/tabs/output.py +209 -55
  98. pygpt_net/ui/widget/textarea/html.py +11 -1
  99. pygpt_net/ui/widget/textarea/output.py +10 -1
  100. pygpt_net/ui/widget/textarea/web.py +49 -9
  101. {pygpt_net-2.4.38.dist-info → pygpt_net-2.4.40.dist-info}/METADATA +26 -3
  102. {pygpt_net-2.4.38.dist-info → pygpt_net-2.4.40.dist-info}/RECORD +105 -103
  103. {pygpt_net-2.4.38.dist-info → pygpt_net-2.4.40.dist-info}/LICENSE +0 -0
  104. {pygpt_net-2.4.38.dist-info → pygpt_net-2.4.40.dist-info}/WHEEL +0 -0
  105. {pygpt_net-2.4.38.dist-info → pygpt_net-2.4.40.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: 2024.11.20 21:00:00 #
9
+ # Updated Date: 2024.12.09 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import re
@@ -42,6 +42,15 @@ class HtmlOutput(QWebEngineView):
42
42
  self.plain = ""
43
43
  self.html_content = ""
44
44
  self.meta = None
45
+ self.tab = None
46
+
47
+ def set_tab(self, tab):
48
+ """
49
+ Set tab
50
+
51
+ :param tab: Tab
52
+ """
53
+ self.tab = tab
45
54
 
46
55
  def set_meta(self, meta: CtxMeta):
47
56
  """
@@ -163,6 +172,7 @@ class HtmlOutput(QWebEngineView):
163
172
  if success:
164
173
  event = RenderEvent(RenderEvent.ON_PAGE_LOAD, {
165
174
  "meta": self.meta,
175
+ "tab": self.tab,
166
176
  })
167
177
  self.window.dispatch(event)
168
178
 
@@ -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.04.24 01:00:00 #
9
+ # Updated Date: 2024.12.09 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from PySide6.QtCore import Qt
@@ -38,6 +38,15 @@ class ChatOutput(QTextBrowser):
38
38
  self.setOpenLinks(False)
39
39
  self.anchorClicked.connect(self.open_external_link)
40
40
  self.setWordWrapMode(QTextOption.WordWrap)
41
+ self.tab = None
42
+
43
+ def set_tab(self, tab):
44
+ """
45
+ Set tab
46
+
47
+ :param tab: Tab
48
+ """
49
+ self.tab = tab
41
50
 
42
51
  def open_external_link(self, url):
43
52
  """
@@ -6,21 +6,24 @@
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 21:00:00 #
9
+ # Updated Date: 2024.12.09 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import re
13
13
 
14
- from PySide6.QtCore import Qt, QObject, Signal, Slot
14
+ from PySide6.QtCore import Qt, QObject, Signal, Slot, QEvent
15
15
  from PySide6.QtWebChannel import QWebChannel
16
16
  from PySide6.QtWebEngineCore import QWebEngineSettings, QWebEnginePage
17
17
  from PySide6.QtWebEngineWidgets import QWebEngineView
18
18
  from PySide6.QtGui import QAction, QIcon, QKeySequence
19
+ from PySide6.QtWidgets import QMenu
19
20
 
20
21
  from pygpt_net.core.events import RenderEvent
21
22
  from pygpt_net.item.ctx import CtxMeta
22
23
  from pygpt_net.core.text.web_finder import WebFinder
24
+ from pygpt_net.ui.widget.tabs.layout import FocusEventFilter
23
25
  from pygpt_net.utils import trans
26
+
24
27
  import pygpt_net.icons_rc
25
28
 
26
29
 
@@ -38,9 +41,46 @@ class ChatWebOutput(QWebEngineView):
38
41
  self.customContextMenuRequested.connect(self.on_context_menu)
39
42
  self.signals = WebEngineSignals()
40
43
  self.setContextMenuPolicy(Qt.CustomContextMenu)
44
+ self.filter = FocusEventFilter(self, self.on_focus)
45
+ self.installEventFilter(self)
41
46
  self.plain = ""
42
47
  self.html_content = ""
43
48
  self.meta = None
49
+ self.tab = None
50
+
51
+ def eventFilter(self, source, event):
52
+ """
53
+ Focus event filter
54
+
55
+ :param source: source
56
+ :param event: event
57
+ """
58
+ if (event.type() == QEvent.ChildAdded and
59
+ source is self and
60
+ event.child().isWidgetType()):
61
+ self._glwidget = event.child()
62
+ self._glwidget.installEventFilter(self)
63
+ elif (event.type() == event.Type.MouseButtonPress):
64
+ col_idx = self.tab.column_idx
65
+ self.window.controller.ui.tabs.on_column_focus(col_idx)
66
+ return super().eventFilter(source, event)
67
+
68
+ def on_focus(self, widget):
69
+ """
70
+ On widget clicked
71
+
72
+ :param widget: widget
73
+ """
74
+ self.window.controller.ui.tabs.on_column_focus(self.tab.column_idx)
75
+ self.setFocus()
76
+
77
+ def set_tab(self, tab):
78
+ """
79
+ Set tab
80
+
81
+ :param tab: Tab
82
+ """
83
+ self.tab = tab
44
84
 
45
85
  def set_meta(self, meta: CtxMeta):
46
86
  """
@@ -72,12 +112,7 @@ class ChatWebOutput(QWebEngineView):
72
112
 
73
113
  :param position: position
74
114
  """
75
- menu = self.createStandardContextMenu()
76
-
77
- # remove defaults
78
- for action in menu.actions()[::-1]:
79
- menu.removeAction(action)
80
-
115
+ menu = QMenu(self)
81
116
  selected_text = ""
82
117
  is_selection = self.page().hasSelection()
83
118
  if is_selection:
@@ -138,6 +173,10 @@ class ChatWebOutput(QWebEngineView):
138
173
  if self.window.core.config.has("zoom"):
139
174
  self.page().setZoomFactor(self.window.core.config.get("zoom"))
140
175
 
176
+ def on_focus_js(self):
177
+ """Focus JavaScript"""
178
+ self.window.controller.ui.tabs.on_column_focus(self.tab.column_idx)
179
+
141
180
  def get_zoom_value(self) -> float:
142
181
  """
143
182
  Get zoom value
@@ -165,6 +204,7 @@ class ChatWebOutput(QWebEngineView):
165
204
  if success:
166
205
  event = RenderEvent(RenderEvent.ON_PAGE_LOAD, {
167
206
  "meta": self.meta,
207
+ "tab": self.tab,
168
208
  })
169
209
  self.window.dispatch(event)
170
210
 
@@ -318,4 +358,4 @@ class WebEngineSignals(QObject):
318
358
 
319
359
 
320
360
  class WebEnginePageSignals(QObject):
321
- js_message = Signal(int, str, str) # on Javascript message
361
+ js_message = Signal(int, str, str) # on Javascript message
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pygpt-net
3
- Version: 2.4.38
3
+ Version: 2.4.40
4
4
  Summary: Desktop AI Assistant powered by models: OpenAI o1, GPT-4o, GPT-4, GPT-4 Vision, GPT-3.5, DALL-E 3, Llama 3, Mistral, Gemini, Claude, Bielik, and other models supported by Langchain, Llama Index, and Ollama. Features include chatbot, text completion, image generation, vision analysis, speech-to-text, internet access, file handling, command execution and more.
5
5
  Home-page: https://pygpt.net
6
6
  License: MIT
@@ -92,7 +92,7 @@ Description-Content-Type: text/markdown
92
92
 
93
93
  [![pygpt](https://snapcraft.io/pygpt/badge.svg)](https://snapcraft.io/pygpt)
94
94
 
95
- Release: **2.4.38** | build: **2024.12.08** | Python: **>=3.10, <3.12**
95
+ Release: **2.4.40** | build: **2024.12.13** | Python: **>=3.10, <3.12**
96
96
 
97
97
  > Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
98
98
  >
@@ -2074,6 +2074,10 @@ Per-page content chunk size (max characters per chunk). *Default:* `20000`
2074
2074
 
2075
2075
  Disables SSL verification when crawling web pages. *Default:* `False`
2076
2076
 
2077
+ - `Use raw content (without summarization)` *raw*
2078
+
2079
+ Return raw content from web search instead of summarized content. Provides more data but consumes more tokens. *Default:* `True`
2080
+
2077
2081
  - `Timeout` *timeout*
2078
2082
 
2079
2083
  Connection timeout (seconds). *Default:* `5`
@@ -2084,7 +2088,7 @@ User agent to use when making requests. *Default:* `Mozilla/5.0`.
2084
2088
 
2085
2089
  - `Max result length` *max_result_length*
2086
2090
 
2087
- Max length of summarized result (characters). *Default:* `1500`
2091
+ Max length of the summarized or raw result (characters). *Default:* `50000`
2088
2092
 
2089
2093
  - `Max summary tokens` *summary_max_tokens*
2090
2094
 
@@ -3963,6 +3967,25 @@ may consume additional tokens that are not displayed in the main window.
3963
3967
 
3964
3968
  ## Recent changes:
3965
3969
 
3970
+ **2.4.40 (2024-12-13)**
3971
+
3972
+ - Enhanced Split Screen mode, now promoted from beta to stable.
3973
+ - Python Code Interpreter tool added to the Tabs.
3974
+ - HTML/JS Canvas tool added to the Tabs.
3975
+ - Added attachment icon to the context list if context has attachments.
3976
+ - Improved audio playback.
3977
+ - Improved web search.
3978
+ - Added a thumbnail image to web search results.
3979
+ - Added a new commands to web search: "extract_images" and "extract_links".
3980
+ - Added the option "Use raw content (without summarization)" to the web search plugin, which provides a more detailed result to the main model.
3981
+ - Extended the default maximum result characters to 50,000 in the web search plugin.
3982
+
3983
+ **2.4.39 (2024-12-09)**
3984
+
3985
+ - Added "Split Screen" mode (accessible via the switch in the bottom-right corner of the screen), which allows you to work in two windows simultaneously. It is currently experimental (beta). Future updates will include Code Interpreter and Canvas running in tabs.
3986
+
3987
+ - Fixed: Language switch.
3988
+
3966
3989
  **2.4.38 (2024-12-08)**
3967
3990
 
3968
3991
  - Added the ability to select a style for chat display between: Blocks, ChatGPT-like, and ChatGPT-like Wide. New option in the menu: Config -> Theme -> Style...