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.08 17:00:00 #
9
+ # Updated Date: 2024.12.09 23:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from datetime import datetime
@@ -21,6 +21,7 @@ class Tab:
21
21
  TAB_FILES = 2
22
22
  TAB_TOOL_PAINTER = 3
23
23
  TAB_TOOL_CALENDAR = 4
24
+ TAB_TOOL = 100
24
25
 
25
26
  def __init__(self):
26
27
  """
@@ -34,15 +35,23 @@ class Tab:
34
35
  self.icon = None
35
36
  self.tooltip = None
36
37
  self.data_id = None
37
- self.reference = None
38
38
  self.new_idx = None
39
39
  self.custom_name = False
40
+ self.child = None
41
+ self.parent = None
42
+ self.column_idx = 0
43
+ self.tool_id = None
40
44
 
41
45
  dt = datetime.now()
42
46
  self.created_at = dt
43
47
  self.updated_at = dt
44
48
 
45
- def to_dict(self):
49
+ def to_dict(self) -> dict:
50
+ """
51
+ Convert to dict
52
+
53
+ :return: dict
54
+ """
46
55
  return {
47
56
  "uuid": str(self.uuid),
48
57
  "pid": self.pid,
@@ -52,9 +61,12 @@ class Tab:
52
61
  "icon": self.icon,
53
62
  "tooltip": self.tooltip,
54
63
  "data_id": self.data_id,
55
- "reference": str(self.reference),
64
+ "child": str(self.child), # child widget
65
+ "parent": str(self.parent), # parent column
56
66
  "custom_name": self.custom_name,
57
67
  "custom_idx": self.new_idx,
58
68
  "created_at": str(self.created_at),
59
69
  "updated_at": str(self.updated_at),
70
+ "column_idx": self.column_idx,
71
+ "tool_id": self.tool_id,
60
72
  }
pygpt_net/core/web.py CHANGED
@@ -6,8 +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: 2024.02.24 00:00:00 #
9
+ # Updated Date: 2024.12.13 00:00:00 #
10
10
  # ================================================== #
11
+ import os
12
+ import uuid
13
+
14
+ import requests
15
+
16
+ from bs4 import BeautifulSoup
17
+ from urllib.parse import urljoin
11
18
 
12
19
  from pygpt_net.provider.web.base import BaseProvider
13
20
 
@@ -81,3 +88,122 @@ class Web:
81
88
  for t in type:
82
89
  if t in self.providers:
83
90
  self.providers[t][id] = provider
91
+
92
+ def get_main_image(self, url: str) -> str or None:
93
+ """
94
+ Get main image from URL
95
+
96
+ :param url: URL to get image from
97
+ :return: image URL
98
+ """
99
+ response = requests.get(url)
100
+ soup = BeautifulSoup(response.content, 'html.parser')
101
+
102
+ og_image = soup.find('meta', property='og:image')
103
+ if og_image and og_image.get('content'):
104
+ return og_image['content']
105
+
106
+ twitter_image = soup.find('meta', attrs={'name': 'twitter:image'})
107
+ if twitter_image and twitter_image.get('content'):
108
+ return twitter_image['content']
109
+
110
+ link_image = soup.find('link', rel='image_src')
111
+ if link_image and link_image.get('href'):
112
+ return link_image['href']
113
+
114
+ images = soup.find_all('img')
115
+ if images:
116
+ images = [img for img in images if 'logo' not in (img.get('src') or '').lower()]
117
+ largest_image = None
118
+ max_area = 0
119
+ for img in images:
120
+ src = img.get('src')
121
+ if not src:
122
+ continue
123
+ src = requests.compat.urljoin(url, src)
124
+ try:
125
+ img_response = requests.get(src, stream=True, timeout=5)
126
+ img_response.raw.decode_content = True
127
+
128
+ from PIL import Image
129
+ image = Image.open(img_response.raw)
130
+ width, height = image.size
131
+ area = width * height
132
+ if area > max_area:
133
+ max_area = area
134
+ largest_image = src
135
+ except:
136
+ continue
137
+ if largest_image:
138
+ return largest_image
139
+ return None
140
+
141
+ def get_links(self, url: str) -> list:
142
+ """
143
+ Get links from URL
144
+
145
+ :param url: URL to get links from
146
+ :return: links list
147
+ """
148
+ response = requests.get(url)
149
+ soup = BeautifulSoup(response.content, 'html.parser')
150
+ links = []
151
+ urls = []
152
+ for link in soup.find_all('a'):
153
+ try:
154
+ name = link.get_text(strip=True)
155
+ address = link.get('href')
156
+ if address:
157
+ address = urljoin(url, address)
158
+ if not name:
159
+ title = link.get('title')
160
+ if title:
161
+ name = title
162
+ else:
163
+ name = address
164
+ if address not in urls:
165
+ urls.append(address)
166
+ links.append({name: address})
167
+ except:
168
+ continue
169
+ return links
170
+
171
+
172
+ def get_images(self, url: str) -> list:
173
+ """
174
+ Get images from URL
175
+
176
+ :param url: URL to get images from
177
+ :return: images list
178
+ """
179
+ response = requests.get(url)
180
+ soup = BeautifulSoup(response.content, 'html.parser')
181
+ images = []
182
+ for img in soup.find_all('img'):
183
+ try:
184
+ address = img.get('src')
185
+ if address:
186
+ address = urljoin(url, address)
187
+ if address not in images:
188
+ images.append(address)
189
+ except:
190
+ continue
191
+ return images
192
+
193
+ def download_image(self, img: str) -> str:
194
+ """
195
+ Download image from URL
196
+
197
+ :param img: URL to download image from
198
+ :return: local path to image
199
+ """
200
+ dir = self.window.core.config.get_user_dir("img")
201
+ response = requests.get(img, stream=True)
202
+ name = img.replace("http://", "").replace("https://", "").replace("/", "_")
203
+ path = os.path.join(dir, name)
204
+ if os.path.exists(path):
205
+ name = name + uuid.uuid4().hex[:6].upper()
206
+ download_path = os.path.join(dir, name)
207
+ with open(download_path, 'wb', ) as f:
208
+ f.write(response.content)
209
+ return self.window.core.filesystem.make_local(download_path)
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.4.38",
4
- "app.version": "2.4.38",
5
- "updated_at": "2024-12-08T00:00:00"
3
+ "version": "2.4.40",
4
+ "app.version": "2.4.40",
5
+ "updated_at": "2024-12-12T00:00:00"
6
6
  },
7
7
  "access.audio.event.speech": false,
8
8
  "access.audio.event.speech.disabled": [],
@@ -134,6 +134,7 @@
134
134
  "expert": ""
135
135
  },
136
136
  "debug": false,
137
+ "debug.render": false,
137
138
  "download.dir": "download",
138
139
  "experts.mode": "chat",
139
140
  "font_size": 12,
@@ -161,7 +162,13 @@
161
162
  "layout.dpi.scaling": true,
162
163
  "layout.dpi.factor": 1.0,
163
164
  "layout.groups": {},
164
- "layout.splitters": {},
165
+ "layout.splitters": {
166
+ "columns": [
167
+ 1,
168
+ 0
169
+ ]
170
+ },
171
+ "layout.split": false,
165
172
  "layout.tabs": {},
166
173
  "layout.tooltips": true,
167
174
  "layout.tray": true,
@@ -338,7 +345,7 @@
338
345
  "temperature": 1.0,
339
346
  "theme": "dark_cyan",
340
347
  "theme.markdown": true,
341
- "theme.style": "chatgpt",
348
+ "theme.style": "blocks",
342
349
  "top_p": 1.0,
343
350
  "upload.store": true,
344
351
  "upload.data_dir": false,
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.4.38",
4
- "app.version": "2.4.38",
5
- "updated_at": "2024-12-08T00:00:00"
3
+ "version": "2.4.40",
4
+ "app.version": "2.4.40",
5
+ "updated_at": "2024-12-12T00: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.38",
4
- "app.version": "2.4.38",
5
- "updated_at": "2024-12-08T00:00:00"
3
+ "version": "2.4.40",
4
+ "app.version": "2.4.40",
5
+ "updated_at": "2024-12-12T00:00:00"
6
6
  },
7
7
  "items": {
8
8
  "chat": {
@@ -54,6 +54,7 @@ p {{
54
54
  font-family: 'Lato';
55
55
  text-decoration: none;
56
56
  padding-bottom: 0px;
57
+ font-size: 0.9rem;
57
58
  }}
58
59
 
59
60
  /* lists, code */
@@ -89,6 +90,7 @@ code {{
89
90
  .code-header-lang {{
90
91
  float: left;
91
92
  padding-left: .25rem;
93
+ padding-top: 4px;
92
94
  }}
93
95
  .code-header-copy {{
94
96
  text-align: right;
@@ -102,6 +104,13 @@ code {{
102
104
  vertical-align: middle;
103
105
  padding-right: 5px;
104
106
  }}
107
+ .code-header-copy:hover {{
108
+ text-decoration: none;
109
+ cursor: pointer;
110
+ }}
111
+ .code-header-copy:hover img {{
112
+ filter: brightness(130%);
113
+ }}
105
114
  .code-wrapper {{
106
115
  padding: 0px;
107
116
  margin: 0px;
@@ -209,6 +218,7 @@ code {{
209
218
  .tool-output .content {{
210
219
  padding: 10px;
211
220
  color: gray !important;
221
+ font-size: 0.9rem;
212
222
  }}
213
223
  .tool-output .toggle-cmd-output {{
214
224
  cursor: pointer;
@@ -318,4 +328,12 @@ code {{
318
328
  to {{
319
329
  transform: rotate(360deg);
320
330
  }}
331
+ }}
332
+
333
+ /* debug */
334
+ .debug {{
335
+ color: orange !important;
336
+ background: #0d1117;
337
+ padding: 10px;
338
+ font-size: 0.9rem;
321
339
  }}
@@ -72,4 +72,11 @@ code {{
72
72
  }}
73
73
  .display-blocks .name-user::before {{
74
74
  background-color: silver;
75
+ }}
76
+ .msg-extra a {{
77
+ color: #4d4d4d !important;
78
+ }}
79
+ .msg-extra a:hover {{
80
+ text-decoration: none;
81
+ color: #000 !important;
75
82
  }}
@@ -339,4 +339,12 @@ code {{
339
339
  to {{
340
340
  transform: rotate(360deg);
341
341
  }}
342
+ }}
343
+
344
+ /* debug */
345
+ .debug {{
346
+ color: orange !important;
347
+ background: #0d1117;
348
+ padding: 10px;
349
+ font-size: 0.9rem;
342
350
  }}
@@ -339,4 +339,12 @@ code {{
339
339
  to {{
340
340
  transform: rotate(360deg);
341
341
  }}
342
+ }}
343
+
344
+ /* debug */
345
+ .debug {{
346
+ color: orange !important;
347
+ background: #0d1117;
348
+ padding: 10px;
349
+ font-size: 0.9rem;
342
350
  }}
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#686868"><path d="M520-320h200v-320H520v320Zm-280 0h200v-320H240v320Zm-80 160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm640-560H160v480h640v-480Zm-640 0v480-480Z"/></svg>
@@ -49,6 +49,8 @@ action.tab.add.notepad = Neuen Notizblock hinzufügen
49
49
  action.tab.close = Schließen
50
50
  action.tab.close_all.chat = Alle Chats schließen
51
51
  action.tab.close_all.notepad = Alle Notizblöcke schließen
52
+ action.tab.move.left = In die linke Spalte verschieben
53
+ action.tab.move.right = In die rechte Spalte verschieben
52
54
  action.touch = Datei erstellen...
53
55
  action.truncate = Alles löschen
54
56
  action.undo = Rückgängig
@@ -548,6 +550,7 @@ ipython.docker.build.finish = Erfolg! Das Docker-Image für IPython wurde erstel
548
550
  ipython.docker.build.start = Docker-Image wird erstellt... bitte warten...
549
551
  ipython.docker.install = Für die Ausführung von IPython muss Docker installiert sein. Docker wurde auf diesem System nicht erkannt. Bitte installieren Sie zuerst Docker; die Anweisungen finden Sie hier: https://docs.docker.com/engine/install/. Die Ausführung des aktuellen Befehls wurde pausiert.
550
552
  ipython.image.build = Das Docker-Image für IPython wurde noch nicht erstellt. Dies wird jetzt geschehen und es kann eine Weile dauern (aber es ist ein einmaliger Vorgang). Die Ausführung des Befehls wurde pausiert. Sobald das Image erstellt ist, führen Sie den Befehl bitte erneut aus.
553
+ layout.split = Bildschirm teilen
551
554
  menu.audio = Audio / Stimme
552
555
  menu.audio.cache.clear = Audio-Cache löschen...
553
556
  menu.audio.control.global = Sprachsteuerung (global)
@@ -51,9 +51,12 @@ action.save_selection_as = Save selection as...
51
51
  action.select_all = Select all
52
52
  action.tab.add.chat = Add a new chat
53
53
  action.tab.add.notepad = Add a new notepad
54
+ action.tab.add.tool = Add a new tool
54
55
  action.tab.close = Close
55
56
  action.tab.close_all.chat = Close all chats
56
57
  action.tab.close_all.notepad = Close all notepads
58
+ action.tab.move.left = Move to left column
59
+ action.tab.move.right = Move to right column
57
60
  action.touch = Create file...
58
61
  action.truncate = Truncate
59
62
  action.undo = Undo
@@ -661,7 +664,7 @@ interpreter.clear.confirm = Clear the current window?
661
664
  interpreter.edit = Edit mode
662
665
  interpreter.edit_label.edit = Code (history)
663
666
  interpreter.edit_label.output = Output
664
- interpreter.input.placeholder = Python code to execute...
667
+ interpreter.input.placeholder = Python code to execute...\n\n/restart - restart kernel\n/clear - clear output
665
668
  interpreter.menu.file = File
666
669
  interpreter.menu.file.clear_all = Clear all
667
670
  interpreter.menu.file.clear_history = Clear history
@@ -673,6 +676,7 @@ ipython.docker.build.start = Building Docker image... please wait...
673
676
  ipython.docker.install = Running IPython requires Docker to be installed. Docker was not detected on this system. Please install Docker first; you can find the instructions here: https://docs.docker.com/engine/install/. The execution of the current command has been paused.
674
677
  ipython.docker.install.snap = \n\nSNAP VERSION: \nYou are not connected to built-in Docker daemon. Please connect the slots with:\n\nsudo snap connect pygpt:docker-executables docker:docker-executables\n\nsudo snap connect pygpt:docker docker:docker-daemon\n\n...and restart the application.
675
678
  ipython.image.build = The Docker image for IPython has not been built yet. This will happen now, and it may take a while (but it's a one-time procedure). The execution of the command has been paused. Once the image is built, please execute the command again.
679
+ layout.split = Split screen
676
680
  menu.audio = Audio / Voice
677
681
  menu.audio.cache.clear = Clear audio cache...
678
682
  menu.audio.control.global = Voice control (global)
@@ -709,6 +713,7 @@ menu.debug.logger = Open Logger
709
713
  menu.debug.models = Models...
710
714
  menu.debug.plugins = Plugins...
711
715
  menu.debug.presets = Presets...
716
+ menu.debug.render = Render...
712
717
  menu.debug.tabs = Tabs...
713
718
  menu.debug.ui = UI...
714
719
  menu.file = File
@@ -49,6 +49,8 @@ action.tab.add.notepad = Agregar un nuevo bloc de notas
49
49
  action.tab.close = Cerrar
50
50
  action.tab.close_all.chat = Cerrar todos los chats
51
51
  action.tab.close_all.notepad = Cerrar todos los blocs de notas
52
+ action.tab.move.left = Mover a la columna izquierda
53
+ action.tab.move.right = Mover a la columna derecha
52
54
  action.touch = Crear archivo...
53
55
  action.truncate = Borrar todo
54
56
  action.undo = Deshacer
@@ -547,6 +549,7 @@ ipython.docker.build.finish = ¡Éxito! La imagen de Docker para IPython ha sido
547
549
  ipython.docker.build.start = Construyendo imagen de Docker... por favor espera...
548
550
  ipython.docker.install = Ejecutar IPython requiere que Docker esté instalado. Docker no fue detectado en este sistema. Por favor, instale Docker primero; puede encontrar las instrucciones aquí: https://docs.docker.com/engine/install/. La ejecución del comando actual ha sido pausada.
549
551
  ipython.image.build = La imagen de Docker para IPython aún no ha sido construida. Esto sucederá ahora, y puede tardar un tiempo (pero es un procedimiento único). La ejecución del comando ha sido pausada. Una vez que la imagen esté construida, por favor ejecute el comando nuevamente.
552
+ layout.split = Pantalla dividida
550
553
  menu.audio = Audio / Voz
551
554
  menu.audio.cache.clear = Limpiar caché de audio...
552
555
  menu.audio.control.global = Control de voz (global)
@@ -49,6 +49,8 @@ action.tab.add.notepad = Ajouter un nouveau bloc-notes
49
49
  action.tab.close = Fermer
50
50
  action.tab.close_all.chat = Fermer tous les chats
51
51
  action.tab.close_all.notepad = Fermer tous les blocs-notes
52
+ action.tab.move.left = Déplacer vers la colonne de gauche
53
+ action.tab.move.right = Déplacer vers la colonne de droite
52
54
  action.touch = Créer un fichier...
53
55
  action.truncate = Tout effacer
54
56
  action.undo = Annuler
@@ -548,6 +550,7 @@ ipython.docker.build.finish = Succès! L'image Docker pour IPython a été const
548
550
  ipython.docker.build.start = Construction de l'image Docker... veuillez patienter...
549
551
  ipython.docker.install = L'exécution d'IPython nécessite l'installation de Docker. Docker n'a pas été détecté sur ce système. Veuillez d'abord installer Docker ; vous pouvez trouver les instructions ici : https://docs.docker.com/engine/install/. L'exécution de la commande actuelle a été mise en pause.
550
552
  ipython.image.build = L'image Docker pour IPython n'a pas encore été construite. Cela va se produire maintenant, et cela peut prendre un certain temps (mais c'est une procédure unique). L'exécution de la commande a été mise en pause. Une fois l'image construite, veuillez exécuter à nouveau la commande.
553
+ layout.split = Écran scindé
551
554
  menu.audio = Audio / Voix
552
555
  menu.audio.cache.clear = Effacer le cache audio...
553
556
  menu.audio.control.global = Contrôle vocal (global)
@@ -49,6 +49,8 @@ action.tab.add.notepad = Aggiungi un nuovo blocco note
49
49
  action.tab.close = Chiudi
50
50
  action.tab.close_all.chat = Chiudi tutte le chat
51
51
  action.tab.close_all.notepad = Chiudi tutti i blocchi note
52
+ action.tab.move.left = Sposta nella colonna di sinistra
53
+ action.tab.move.right = Sposta nella colonna di destra
52
54
  action.touch = Crea file...
53
55
  action.truncate = Cancellare tutto
54
56
  action.undo = Annulla
@@ -548,6 +550,7 @@ ipython.docker.build.finish = Successo! L'immagine Docker per IPython è stata c
548
550
  ipython.docker.build.start = Creazione dell'immagine Docker... per favore aspetta...
549
551
  ipython.docker.install = L'esecuzione di IPython richiede l'installazione di Docker. Docker non è stato rilevato su questo sistema. Si prega di installare prima Docker; puoi trovare le istruzioni qui: https://docs.docker.com/engine/install/. L'esecuzione del comando corrente è stata messa in pausa.
550
552
  ipython.image.build = L'immagine Docker per IPython non è stata ancora costruita. Questo avverrà ora e potrebbe richiedere del tempo (ma è una procedura una tantum). L'esecuzione del comando è stata messa in pausa. Una volta costruita l'immagine, esegui nuovamente il comando.
553
+ layout.split = Schermo diviso
551
554
  menu.audio = Audio / Voce
552
555
  menu.audio.cache.clear = Cancella cache audio...
553
556
  menu.audio.control.global = Controllo vocale (globale)
@@ -49,6 +49,8 @@ action.tab.add.notepad = Dodaj nowy notatnik
49
49
  action.tab.close = Zamknij
50
50
  action.tab.close_all.chat = Zamknij wszystkie czaty
51
51
  action.tab.close_all.notepad = Zamknij wszystkie notatniki
52
+ action.tab.move.left = Przenieś do lewej kolumny
53
+ action.tab.move.right = Przenieś do prawej kolumny
52
54
  action.touch = Utwórz plik...
53
55
  action.truncate = Wyczyść wszystko
54
56
  action.undo = Cofnij
@@ -548,6 +550,7 @@ ipython.docker.build.finish = Sukces! Obraz Docker dla IPython został zbudowany
548
550
  ipython.docker.build.start = Budowanie obrazu Dockera... proszę czekać...
549
551
  ipython.docker.install = Uruchomienie IPython wymaga zainstalowania Dockera. Docker nie został wykryty na tym systemie. Proszę najpierw zainstalować Dockera; instrukcje można znaleźć tutaj: https://docs.docker.com/engine/install/. Wykonywanie bieżącego polecenia zostało wstrzymane.
550
552
  ipython.image.build = Obraz Dockera dla IPython nie został jeszcze zbudowany. Nastąpi to teraz i może to potrwać chwilę (ale to jednorazowa procedura). Wykonywanie polecenia zostało wstrzymane. Po zbudowaniu obrazu możesz ponownie poprosić o wykonanie polecenia.
553
+ layout.split = Podziel ekran
551
554
  menu.audio = Audio / Mowa
552
555
  menu.audio.cache.clear = Wyczyść pamięć podręczną audio...
553
556
  menu.audio.control.global = Kontrola głosowa (globalna)
@@ -759,7 +762,7 @@ settings.audio.input.channels.desc = Kanały wejściowe, domyślnie: 1
759
762
  settings.audio.input.device = Urządzenie Wejściowe Audio
760
763
  settings.audio.input.device.desc = Wybierz urządzenie audio dla wejścia mikrofonu.
761
764
  settings.audio.input.rate = Częstotliwość próbkowania
762
- settings.audio.input.rate.desc = Częstotliwość próbkowania, domyślnie: 44100
765
+ settings.audio.input.rate.desc = Częstotliwość próbkowania, domyślnie: 44100
763
766
  settings.check_updates = Sprawdź aktualizacje przy starcie
764
767
  settings.check_updates.bg = Sprawdź aktualizacje w tle
765
768
  settings.cmd.field.desc = Włącz narzędzie `{cmd}`.
@@ -49,6 +49,8 @@ action.tab.add.notepad = Додати новий блокнот
49
49
  action.tab.close = Закрити
50
50
  action.tab.close_all.chat = Закрити всі чати
51
51
  action.tab.close_all.notepad = Закрити всі блокноти
52
+ action.tab.move.left = Перемістити в ліву колонку
53
+ action.tab.move.right = Перемістити в праву колонку
52
54
  action.touch = Створити файл...
53
55
  action.truncate = Очистити все
54
56
  action.undo = Скасувати
@@ -547,6 +549,7 @@ ipython.docker.build.finish = Успіх! Образ Docker для IPython ст
547
549
  ipython.docker.build.start = Створення образу Docker... будь ласка, зачекайте...
548
550
  ipython.docker.install = Для запуску IPython необхідно встановити Docker. Docker не було виявлено на цій системі. Будь ласка, спочатку встановіть Docker; інструкції можна знайти тут: https://docs.docker.com/engine/install/. Виконання поточної команди було призупинено.
549
551
  ipython.image.build = Docker-образ для IPython ще не був створений. Це відбудеться зараз, і це може зайняти деякий час (але це одноразова процедура). Виконання команди було призупинено. Після створення образу, будь ласка, виконайте команду знову.
552
+ layout.split = Розділити екран
550
553
  menu.audio = Аудіо / Голос
551
554
  menu.audio.cache.clear = Очистити кеш аудіо...
552
555
  menu.audio.control.global = Контроль голосу (глобальний)
@@ -50,6 +50,8 @@ action.tab.add.notepad = 添加新记事本
50
50
  action.tab.close = 关闭
51
51
  action.tab.close_all.chat = 关闭所有聊天
52
52
  action.tab.close_all.notepad = 关闭所有记事本
53
+ action.tab.move.left = 移到左列
54
+ action.tab.move.right = 移到右列
53
55
  action.touch = 創建文件...
54
56
  action.truncate = 截斷
55
57
  action.undo = 撤銷
@@ -621,6 +623,7 @@ ipython.docker.build.finish = 成功!IPython 的 Docker 镜像已构建完成
621
623
  ipython.docker.build.start = 正在构建 Docker 镜像... 请稍候...
622
624
  ipython.docker.install = 运行 IPython 需要安装 Docker。系统上未检测到 Docker。请先安装 Docker;您可以在此处找到说明:https://docs.docker.com/engine/install/。当前命令的执行已暂停。
623
625
  ipython.image.build = IPython 的 Docker 镜像尚未构建。这将立即发生,可能需要一段时间(但这是一次性过程)。命令的执行已暂停。镜像构建完成后,请再次执行命令。
626
+ layout.split = 分屏
624
627
  menu.audio = 音頻/語音
625
628
  menu.audio.cache.clear = 清除音频缓存...
626
629
  menu.audio.control.global = 语音控制(全局)
@@ -50,6 +50,8 @@ prompt_summarize_url.description = Prompt, der für die Zusammenfassung einer be
50
50
  prompt_summarize_url.label = Zusammenfassungs-Prompt (URL öffnen)
51
51
  provider.description = Wählen Sie den Suchmaschinenanbieter, standardmäßig: Google.
52
52
  provider.label = Anbieter
53
+ raw.label = Verwenden Sie Rohinhalte (ohne Zusammenfassung)
54
+ raw.description = Ungefilterte Inhalte aus der Websuche zurückgeben, anstatt zusammengefasste Inhalte
53
55
  summary_max_tokens.description = Maximale Tokenanzahl in der Ausgabe beim Generieren einer Zusammenfassung.
54
56
  summary_max_tokens.label = Max. Zusammenfassungs-Tokens
55
57
  summary_model.description = Modell, das für die Zusammenfassung von Webseiten verwendet wird, standardmäßig: gpt-3.5-turbo-1106.
@@ -7,22 +7,26 @@ bing_endpoint.description = API endpoint for the Bing Search API, default: https
7
7
  bing_endpoint.label = Bing Search API endpoint
8
8
  chunk_size.description = Per-page content chunk size (maximum characters per chunk).
9
9
  chunk_size.label = Per-page content chunk size
10
+ cmd.web_extract_links.label = Enable: extract_links from webpage
11
+ cmd.web_extract_links.description = If enabled, model will be able to open URL and get list of all links from it.
12
+ cmd.web_extract_images.label = Enable: extract_images from webpage
13
+ cmd.web_extract_images.description = If enabled, model will be able to open URL and get list of all images from it.
10
14
  cmd.web_index.description = Enable `web_index` command execution.\nIf enabled, the model will be able to index pages and external content using LlamaIndex (persistent index).
11
15
  cmd.web_index.label = Enable: indexing web and external content
12
16
  cmd.web_index_query.description = Enable `web_index_query` command execution.\nIf enabled, the model will be able to quickly index and query web content using LlamaIndex (in-memory index).
13
- cmd.web_index_query.label = Enable: quick query the web and external content
14
- cmd.web_index_query.tooltip = Example prompt: Query the website http://example.com about (question).
15
- cmd.web_index.tooltip = Example prompt: Index the website http://example.com.
16
- cmd.web_search.description = Enable `web_search` command execution.\nIf enabled, the model will be able to search the web.
17
- cmd.web_search.label = Enable: search the web
18
- cmd.web_search.tooltip = Example prompt: Search the web for (question).
17
+ cmd.web_index_query.label = Enable: quick query the Web and external content
18
+ cmd.web_index_query.tooltip = Example prompt: Query the Website http://example.com about (question).
19
+ cmd.web_index.tooltip = Example prompt: Index the Website http://example.com.
20
+ cmd.web_search.description = Enable `web_search` command execution.\nIf enabled, the model will be able to search the Web.
21
+ cmd.web_search.label = Enable: search the Web
22
+ cmd.web_search.tooltip = Example prompt: Search the Web for (question).
19
23
  cmd.web_url_open.description = Enable `web_url_open` command execution.\nIf enabled, the model will be able to open a specified URL and summarize the content.
20
24
  cmd.web_url_open.label = Enable: opening URLs
21
- cmd.web_url_open.tooltip = Example prompt: Read the website http://example.com.
25
+ cmd.web_url_open.tooltip = Example prompt: Read the Website http://example.com.
22
26
  cmd.web_url_raw.description = Enable `web_url_raw` command execution.\nIf enabled, the model will be able to open a specified URL and get the raw content.
23
27
  cmd.web_url_raw.label = Enable: reading the raw content from URLs
24
28
  cmd.web_url_raw.tooltip = Example prompt: Give me the raw content of http://example.com.
25
- cmd.web_urls.description = Enable `web_urls` command execution.\nIf enabled, the model will be able to search the web and get a list of found URLs.
29
+ cmd.web_urls.description = Enable `web_urls` command execution.\nIf enabled, the model will be able to search the Web and get a list of found URLs.
26
30
  cmd.web_urls.label = Enable: getting a list of URLs from search results
27
31
  cmd.web_urls.tooltip = Example prompt: Give me the list of URLs for query (question).
28
32
  disable_ssl.description = Disables SSL verification when crawling web pages.
@@ -33,16 +37,20 @@ google_api_key.description = You can obtain your own API key at https://develope
33
37
  google_api_key.label = Google Custom Search API KEY
34
38
  idx.description = ID of the index to use for web page indexing (persistent index).
35
39
  idx.label = Index to use
40
+ img_thumbnail.description = Enable fetching thumbnails from opened websites.
41
+ img_thumbnail.label = Show thumbnail images
42
+ max_open_urls.label = Number of max URLs to open at once
43
+ max_open_urls.description = Number of max URLs to open at once
36
44
  max_page_content_length.description = Maximum characters of page content to retrieve (0 = unlimited).
37
45
  max_page_content_length.label = Max content characters
38
- max_result_length.description = Maximum length of the summarized result (characters).
46
+ max_result_length.description = Maximum length of the summarized or raw result (characters). (0 = unlimited).
39
47
  max_result_length.label = Max result length
40
48
  model_tmp_query.description = Model used to query the temporary index for the `web_index_query` command (in-memory index).
41
49
  model_tmp_query.label = Model for querying in-memory index
42
50
  model_tmp_query.tooltip = Model used to query the temporary index for the `web_index_query` command (in-memory index)
43
51
  num_pages.description = Maximum number of pages to search per query.
44
52
  num_pages.label = Number of pages to search
45
- plugin.description = Provides the ability to connect to the web, search web pages for current data, and index external content using LlamaIndex data loaders.
53
+ plugin.description = Provides the ability to connect to the Web, search web pages for current data, and index external content using LlamaIndex data loaders.
46
54
  plugin.name = Web Search
47
55
  prompt_summarize.description = Prompt used for summarizing web search results, use {query} as a placeholder for the search query.
48
56
  prompt_summarize.label = Summarize prompt
@@ -50,6 +58,8 @@ prompt_summarize_url.description = Prompt used for summarizing a specified URL p
50
58
  prompt_summarize_url.label = Summarize prompt (URL open)
51
59
  provider.description = Select the search engine provider, default: Google.
52
60
  provider.label = Provider
61
+ raw.label = Use raw content (without summarization)
62
+ raw.description = Return raw content from web search instead of summarized content
53
63
  summary_max_tokens.description = Maximum tokens in output when generating a summary.
54
64
  summary_max_tokens.label = Max summary tokens
55
65
  summary_model.description = Model used for summarizing web pages, default: gpt-3.5-turbo-1106.
@@ -50,6 +50,8 @@ prompt_summarize_url.description = Prompt utilizado para resumir una página URL
50
50
  prompt_summarize_url.label = Prompt de resumen (apertura de URL)
51
51
  provider.description = Seleccione el proveedor del motor de búsqueda, por defecto: Google.
52
52
  provider.label = Proveedor
53
+ raw.label = Usar contenido bruto (sin resumir)
54
+ raw.description = Devolver contenido bruto de la búsqueda en la web en lugar de contenido resumido
53
55
  summary_max_tokens.description = Número máximo de tokens en la salida al generar un resumen.
54
56
  summary_max_tokens.label = Máx tokens de resumen
55
57
  summary_model.description = Modelo utilizado para resumir páginas web, por defecto: gpt-3.5-turbo-1106.
@@ -50,6 +50,8 @@ prompt_summarize_url.description = Prompt utilisé pour résumer une page URL sp
50
50
  prompt_summarize_url.label = Prompt de résumé (ouverture d'URL)
51
51
  provider.description = Sélectionnez le fournisseur du moteur de recherche, par défaut : Google.
52
52
  provider.label = Fournisseur
53
+ raw.label = Utiliser le contenu brut (sans résumé)
54
+ raw.description = Retourner le contenu brut de la recherche sur le web au lieu du contenu résumé
53
55
  summary_max_tokens.description = Nombre maximal de tokens dans la sortie lors de la génération d'un résumé.
54
56
  summary_max_tokens.label = Max tokens de résumé
55
57
  summary_model.description = Modèle utilisé pour résumer les pages web, par défaut : gpt-3.5-turbo-1106.
@@ -50,6 +50,8 @@ prompt_summarize_url.description = Prompt utilizzato per riassumere una pagina U
50
50
  prompt_summarize_url.label = Prompt di riassunto (apertura URL)
51
51
  provider.description = Seleziona il provider del motore di ricerca, predefinito: Google.
52
52
  provider.label = Provider
53
+ raw.label = Usa contenuto grezzo (senza riassunto)
54
+ raw.description = Restituisci contenuto grezzo dalla ricerca sul web invece di contenuti riassunti
53
55
  summary_max_tokens.description = Numero massimo di token nell'output durante la generazione di un riassunto.
54
56
  summary_max_tokens.label = Max token di riassunto
55
57
  summary_model.description = Modello utilizzato per riassumere le pagine web, predefinito: gpt-3.5-turbo-1106.
@@ -50,6 +50,8 @@ prompt_summarize_url.description = Prompt używany do podsumowywania określonej
50
50
  prompt_summarize_url.label = Prompt podsumowujący (otwarte URL)
51
51
  provider.description = Wybierz dostawcę wyszukiwarki, domyślnie: Google.
52
52
  provider.label = Dostawca
53
+ raw.label = Użyj surowej zawartości (bez podsumowania)
54
+ raw.description = Zwróć surową zawartość z wyszukiwania w sieci zamiast podsumowanej zawartości
53
55
  summary_max_tokens.description = Maksymalna liczba tokenów w wyniku przy generowaniu podsumowania.
54
56
  summary_max_tokens.label = Maksymalna liczba tokenów podsumowania
55
57
  summary_model.description = Model używany do podsumowywania stron internetowych, domyślnie: gpt-3.5-turbo-1106.