pygpt-net 2.6.63__py3-none-any.whl → 2.6.64__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 (37) hide show
  1. pygpt_net/CHANGELOG.txt +6 -0
  2. pygpt_net/__init__.py +1 -1
  3. pygpt_net/controller/attachment/attachment.py +17 -8
  4. pygpt_net/controller/camera/camera.py +4 -4
  5. pygpt_net/controller/lang/custom.py +2 -2
  6. pygpt_net/controller/ui/mode.py +18 -3
  7. pygpt_net/core/render/web/renderer.py +11 -0
  8. pygpt_net/data/config/config.json +2 -2
  9. pygpt_net/data/config/models.json +2 -2
  10. pygpt_net/data/config/presets/agent_openai_coder.json +15 -1
  11. pygpt_net/data/js/app/runtime.js +11 -4
  12. pygpt_net/data/js/app/scroll.js +14 -0
  13. pygpt_net/data/js/app.min.js +7 -6
  14. pygpt_net/data/locale/locale.de.ini +32 -0
  15. pygpt_net/data/locale/locale.en.ini +34 -2
  16. pygpt_net/data/locale/locale.es.ini +32 -0
  17. pygpt_net/data/locale/locale.fr.ini +32 -0
  18. pygpt_net/data/locale/locale.it.ini +32 -0
  19. pygpt_net/data/locale/locale.pl.ini +34 -2
  20. pygpt_net/data/locale/locale.uk.ini +32 -0
  21. pygpt_net/data/locale/locale.zh.ini +32 -0
  22. pygpt_net/js_rc.py +7574 -7505
  23. pygpt_net/provider/agents/llama_index/planner_workflow.py +15 -3
  24. pygpt_net/provider/agents/llama_index/workflow/planner.py +69 -41
  25. pygpt_net/provider/agents/openai/agent_planner.py +57 -35
  26. pygpt_net/provider/agents/openai/evolve.py +0 -3
  27. pygpt_net/provider/api/google/__init__.py +9 -3
  28. pygpt_net/provider/api/google/image.py +11 -1
  29. pygpt_net/provider/api/google/music.py +375 -0
  30. pygpt_net/ui/widget/option/combo.py +149 -11
  31. pygpt_net/ui/widget/textarea/web.py +1 -1
  32. pygpt_net/ui/widget/vision/camera.py +135 -12
  33. {pygpt_net-2.6.63.dist-info → pygpt_net-2.6.64.dist-info}/METADATA +8 -2
  34. {pygpt_net-2.6.63.dist-info → pygpt_net-2.6.64.dist-info}/RECORD +37 -36
  35. {pygpt_net-2.6.63.dist-info → pygpt_net-2.6.64.dist-info}/LICENSE +0 -0
  36. {pygpt_net-2.6.63.dist-info → pygpt_net-2.6.64.dist-info}/WHEEL +0 -0
  37. {pygpt_net-2.6.63.dist-info → pygpt_net-2.6.64.dist-info}/entry_points.txt +0 -0
pygpt_net/CHANGELOG.txt CHANGED
@@ -1,3 +1,9 @@
1
+ 2.6.64 (2025-09-27)
2
+
3
+ - Added translations to agent headers.
4
+ - Improved presets tabs.
5
+ - Added support for music (Lyria) in both image and video modes (beta).
6
+
1
7
  2.6.63 (2025-09-27)
2
8
 
3
9
  - Improved agents' workflows.
pygpt_net/__init__.py CHANGED
@@ -13,7 +13,7 @@ __author__ = "Marcin Szczygliński"
13
13
  __copyright__ = "Copyright 2025, Marcin Szczygliński"
14
14
  __credits__ = ["Marcin Szczygliński"]
15
15
  __license__ = "MIT"
16
- __version__ = "2.6.63"
16
+ __version__ = "2.6.64"
17
17
  __build__ = "2025-09-27"
18
18
  __maintainer__ = "Marcin Szczygliński"
19
19
  __github__ = "https://github.com/szczyglis-dev/py-gpt"
@@ -579,19 +579,28 @@ class Attachment:
579
579
  if not os.path.exists(url):
580
580
  return
581
581
 
582
- if not all:
583
- image_ext = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff']
584
- ext = os.path.splitext(url)[1].lower()
585
- if ext not in image_ext:
586
- return
582
+ is_image = False
583
+ image_ext = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff']
584
+ ext = os.path.splitext(url)[1].lower()
585
+ if ext in image_ext:
586
+ is_image = True
587
+
588
+ if not all and not is_image:
589
+ return
590
+
591
+ if is_image:
592
+ title = "attachments.paste.img"
593
+ status = "painter.capture.manual.captured.success"
594
+ else:
595
+ title = "attachments.paste.file"
596
+ status = "attachments.paste.success"
587
597
 
588
598
  mode = self.window.core.config.get('mode')
589
- title = "Clipboard image"
590
- self.window.core.attachments.new(mode, title, url, False)
599
+ self.window.core.attachments.new(mode, trans(title), url, False)
591
600
  self.window.core.attachments.save()
592
601
  self.window.controller.attachment.update()
593
602
  event = KernelEvent(KernelEvent.STATUS, {
594
- 'status': trans("painter.capture.manual.captured.success") + ' ' + os.path.basename(url),
603
+ 'status': trans(status) + ' ' + os.path.basename(url),
595
604
  })
596
605
  self.window.dispatch(event)
597
606
 
@@ -67,9 +67,9 @@ class Camera(QObject):
67
67
 
68
68
  # update label
69
69
  if not self.window.core.config.get('vision.capture.auto'):
70
- self.window.ui.nodes['video.preview'].label.setText(trans("vision.capture.label"))
70
+ self.window.ui.nodes['video.preview'].video.setToolTip(trans("vision.capture.label"))
71
71
  else:
72
- self.window.ui.nodes['video.preview'].label.setText(trans("vision.capture.auto.label"))
72
+ self.window.ui.nodes['video.preview'].video.setToolTip(trans("vision.capture.auto.label"))
73
73
 
74
74
  def update(self):
75
75
  """Update camera frame"""
@@ -381,7 +381,7 @@ class Camera(QObject):
381
381
  {'value': True}
382
382
  )
383
383
  """
384
- self.window.ui.nodes['video.preview'].label.setText(trans("vision.capture.auto.label"))
384
+ self.window.ui.nodes['video.preview'].video.setToolTip(trans("vision.capture.auto.label"))
385
385
 
386
386
  if not self.window.core.config.get('vision.capture.enabled'):
387
387
  self.enable_capture()
@@ -403,7 +403,7 @@ class Camera(QObject):
403
403
  {'value': False}
404
404
  )
405
405
  """
406
- self.window.ui.nodes['video.preview'].label.setText(trans("vision.capture.label"))
406
+ self.window.ui.nodes['video.preview'].video.setToolTip(trans("vision.capture.label"))
407
407
 
408
408
  def toggle_auto(self, state: bool):
409
409
  """
@@ -68,9 +68,9 @@ class Custom:
68
68
 
69
69
  # camera capture
70
70
  if not self.window.core.config.get('vision.capture.auto'):
71
- self.window.ui.nodes['video.preview'].label.setText(trans("vision.capture.label"))
71
+ self.window.ui.nodes['video.preview'].video.setToolTip(trans("vision.capture.label"))
72
72
  else:
73
- self.window.ui.nodes['video.preview'].label.setText(trans("vision.capture.auto.label"))
73
+ self.window.ui.nodes['video.preview'].video.setToolTip(trans("vision.capture.auto.label"))
74
74
 
75
75
  # files / indexes
76
76
  self.window.ui.nodes['output_files'].btn_upload.setText(trans('files.local.upload'))
@@ -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.09.22 12:00:00 #
9
+ # Updated Date: 2025.09.27 15:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from pygpt_net.core.types import (
@@ -58,6 +58,19 @@ class Mode:
58
58
  is_completion = mode == MODE_COMPLETION
59
59
  is_audio = mode == MODE_AUDIO
60
60
 
61
+ # enable/disable system prompt edit - disable in agents (prompts are defined per agent in presets)
62
+ if not is_agent_openai and not is_agent_llama:
63
+ presets_editor.toggle_tab("personalize", True)
64
+ if 'preset.prompt' in ui_nodes and ui_nodes['preset.prompt'].isReadOnly():
65
+ ui_nodes['preset.prompt'].setReadOnly(False)
66
+ ui_nodes['preset.prompt'].setPlaceholderText("")
67
+ else:
68
+ presets_editor.toggle_tab("personalize", False)
69
+ if 'preset.prompt' in ui_nodes and not ui_nodes['preset.prompt'].isReadOnly():
70
+ ui_nodes['preset.prompt'].setReadOnly(True)
71
+ ui_nodes['preset.prompt'].setPlaceholderText(trans("toolbox.agent.preset.placeholder"))
72
+
73
+ # audio options visibility
61
74
  if not is_audio:
62
75
  ui_nodes['audio.auto_turn'].setVisible(False)
63
76
  ui_nodes["audio.loop"].setVisible(False)
@@ -71,6 +84,7 @@ class Mode:
71
84
  else:
72
85
  ctrl.audio.toggle_output_icon(False)
73
86
 
87
+ # presets/assistants visibility
74
88
  if not is_assistant:
75
89
  ui_nodes['presets.widget'].setVisible(True)
76
90
  else:
@@ -81,6 +95,7 @@ class Mode:
81
95
  else:
82
96
  ui_nodes['env.widget'].setVisible(True)
83
97
 
98
+ # agents/experts/presets label visibility
84
99
  show_agents_label = is_agent or is_agent_llama or is_agent_openai
85
100
  if show_agents_label:
86
101
  ui_nodes['preset.agents.label'].setVisible(True)
@@ -112,6 +127,7 @@ class Mode:
112
127
  else:
113
128
  ui_nodes['preset.editor.agent_provider_openai'].setVisible(False)
114
129
 
130
+ # prompt editor toolbox visibility
115
131
  if is_agent:
116
132
  presets_editor.toggle_tab("experts", True)
117
133
  ui_nodes['preset.editor.temperature'].setVisible(True)
@@ -145,6 +161,7 @@ class Mode:
145
161
  ui_nodes['preset.editor.modes'].setVisible(True)
146
162
  ui_tabs['preset.editor.extra'].setTabText(0, trans("preset.prompt"))
147
163
 
164
+ # image options visibility
148
165
  if is_image:
149
166
  ui_nodes['media.raw'].setVisible(True)
150
167
  if ctrl.media.is_video_model():
@@ -198,10 +215,8 @@ class Mode:
198
215
  # remote tools icon visibility
199
216
  if not is_image and not is_completion:
200
217
  self.window.ui.nodes['input'].set_icon_visible("web", True)
201
- # ui_nodes['icon.remote_tool.web'].setVisible(True)
202
218
  else:
203
219
  self.window.ui.nodes['input'].set_icon_visible("web", False)
204
- # ui_nodes['icon.remote_tool.web'].setVisible(False)
205
220
 
206
221
  ui_tabs['input'].setTabVisible(2, is_assistant)
207
222
  ui_tabs['input'].setTabVisible(3, (not is_assistant) and (not is_image))
@@ -386,6 +386,11 @@ class Renderer(BaseRenderer):
386
386
  except Exception:
387
387
  pass
388
388
 
389
+ try:
390
+ self.get_output_node(meta).page().runJavaScript("if (typeof window.begin !== 'undefined') begin();")
391
+ except Exception:
392
+ pass
393
+
389
394
  def end(self, meta: CtxMeta, ctx: CtxItem, stream: bool = False):
390
395
  """
391
396
  Render end
@@ -402,6 +407,12 @@ class Renderer(BaseRenderer):
402
407
  self.pids[pid].item = None
403
408
  else:
404
409
  self.reload()
410
+
411
+ try:
412
+ self.get_output_node(meta).page().runJavaScript("if (typeof window.end !== 'undefined') end();")
413
+ except Exception:
414
+ pass
415
+
405
416
  self.pids[pid].clear()
406
417
  self.auto_cleanup(meta)
407
418
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.6.63",
4
- "app.version": "2.6.63",
3
+ "version": "2.6.64",
4
+ "app.version": "2.6.64",
5
5
  "updated_at": "2025-09-27T00:00:00"
6
6
  },
7
7
  "access.audio.event.speech": false,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.6.63",
4
- "app.version": "2.6.63",
3
+ "version": "2.6.64",
4
+ "app.version": "2.6.64",
5
5
  "updated_at": "2025-09-27T00:00:00"
6
6
  },
7
7
  "items": {
@@ -31,7 +31,21 @@
31
31
  "enabled": true,
32
32
  "description": "",
33
33
  "remote_tools": "",
34
- "extra": {},
34
+ "extra": {
35
+ "openai_agent_feedback": {
36
+ "base": {
37
+ "prompt": "You are senior programmer and expert in coding. Use markdown for code blocks. If there is any feedback provided, use it to improve the code.",
38
+ "allow_local_tools": false,
39
+ "allow_remote_tools": false
40
+ },
41
+ "feedback": {
42
+ "model": "o3-mini-low",
43
+ "prompt": "You evaluate a code and decide if it's correct. If it's not correct, you provide feedback on what needs to be fixed and improved. Never give it a pass on the first try. After 5 attempts, you can give it a pass if the code is good enough. You can use tools for checking the code, running tests, etc.",
44
+ "allow_local_tools": false,
45
+ "allow_remote_tools": false
46
+ }
47
+ }
48
+ },
35
49
  "__meta__": {
36
50
  "version": "2.5.81",
37
51
  "app.version": "2.5.81",
@@ -197,6 +197,7 @@ class Runtime {
197
197
  api_appendNode = (payload) => {
198
198
  this.resetStreamState('appendNode');
199
199
  this.data.append(payload);
200
+ this.scrollMgr.scheduleScroll();
200
201
  };
201
202
 
202
203
  api_replaceNodes = (payload) => {
@@ -267,10 +268,7 @@ class Runtime {
267
268
  api_updateToolOutput = (c) => this.toolOutput.update(c);
268
269
  api_clearToolOutput = () => this.toolOutput.clear();
269
270
  api_beginToolOutput = () => this.toolOutput.begin();
270
- api_endToolOutput = () => {
271
- this.toolOutput.end();
272
- this.scrollMgr.scheduleScroll();
273
- }
271
+ api_endToolOutput = () => this.toolOutput.end();
274
272
  api_enableToolOutput = () => this.toolOutput.enable();
275
273
  api_disableToolOutput = () => this.toolOutput.disable();
276
274
  api_toggleToolOutput = (id) => this.toolOutput.toggle(id);
@@ -377,6 +375,12 @@ class Runtime {
377
375
  api_showTips = () => this.tips.show();
378
376
  api_hideTips = () => this.tips.hide();
379
377
 
378
+ // API: begin/end.
379
+ api_begin = () => {};
380
+ api_end = () => {
381
+ this.scrollMgr.forceScrollToBottomImmediateAtEnd();
382
+ }
383
+
380
384
  // API: custom markup rules control.
381
385
  api_getCustomMarkupRules = () => this.customMarkup.getRules();
382
386
  api_setCustomMarkupRules = (rules) => {
@@ -481,6 +485,9 @@ window.appendStreamTyped = (type, name, chunk) => runtime.api_onChunk(name, chun
481
485
  window.nextStream = () => runtime.api_nextStream();
482
486
  window.clearStream = () => runtime.api_clearStream();
483
487
 
488
+ window.begin = () => runtime.api_begin();
489
+ window.end = () => runtime.api_end();
490
+
484
491
  window.appendNode = (payload) => runtime.api_appendNode(payload);
485
492
  window.replaceNodes = (payload) => runtime.api_replaceNodes(payload);
486
493
  window.appendToInput = (html) => runtime.api_appendToInput(html);
@@ -58,6 +58,20 @@ class ScrollManager {
58
58
  this.prevScroll = el.scrollHeight;
59
59
  }
60
60
 
61
+ // Jump to bottom immediately (no smooth behavior).
62
+ forceScrollToBottomImmediateAtEnd() {
63
+ if (this.userInteracted === true || !this.isNearBottom(200)) return;
64
+ const el = Utils.SE;
65
+ setTimeout(() => {
66
+ el.scrollTo({
67
+ top: el.scrollHeight,
68
+ behavior: 'instant'
69
+ });
70
+ this.lastScrollTop = el.scrollTop;
71
+ this.prevScroll = el.scrollHeight;
72
+ }, 100);
73
+ }
74
+
61
75
  // Scroll window to bottom based on auto-follow and margins.
62
76
  scrollToBottom(live = false, force = false) {
63
77
  const el = Utils.SE;
@@ -1,4 +1,4 @@
1
- /* app.min.js — generated on 2025-09-27 09:10:08 by bin/minify_js.py using rjsmin */
1
+ /* app.min.js — generated on 2025-09-27 18:00:57 by bin/minify_js.py using rjsmin */
2
2
 
3
3
  /* data/js/app/async.js */
4
4
  class AsyncRunner{constructor(cfg,raf){this.cfg=cfg||{};this.raf=raf||null;const A=this.cfg.ASYNC||{};this.SLICE_MS=Utils.g('ASYNC_SLICE_MS',A.SLICE_MS??12);this.SLICE_HIDDEN_MS=Utils.g('ASYNC_SLICE_HIDDEN_MS',A.SLICE_HIDDEN_MS??Math.min(this.SLICE_MS,6));this.MIN_YIELD_MS=Utils.g('ASYNC_MIN_YIELD_MS',A.MIN_YIELD_MS??0);this._opGen=new Map();}
@@ -504,6 +504,7 @@ scheduleScroll(live=false){if(live===true&&this.autoFollow!==true)return;if(this
504
504
  cancelPendingScroll(){try{this.raf.cancelGroup('ScrollManager');}catch(_){}
505
505
  this.scrollScheduled=false;this.scrollFabUpdateScheduled=false;this.scrollRAF=0;this.scrollFabRAF=0;}
506
506
  forceScrollToBottomImmediate(){const el=Utils.SE;el.scrollTop=el.scrollHeight;this.prevScroll=el.scrollHeight;}
507
+ forceScrollToBottomImmediateAtEnd(){if(this.userInteracted===true||!this.isNearBottom(200))return;const el=Utils.SE;setTimeout(()=>{el.scrollTo({top:el.scrollHeight,behavior:'instant'});this.lastScrollTop=el.scrollTop;this.prevScroll=el.scrollHeight;},100);}
507
508
  scrollToBottom(live=false,force=false){const el=Utils.SE;const marginPx=this.cfg.UI.SCROLL_NEAR_MARGIN_PX;const behavior='instant';const h=el.scrollHeight;if(live===true&&this.autoFollow!==true){this.prevScroll=h;return;}
508
509
  if((live===true&&this.userInteracted===false)||this.isNearBottom(marginPx)||live===false||force){try{el.scrollTo({top:h,behavior});}catch(_){el.scrollTop=h;}}
509
510
  this.prevScroll=el.scrollHeight;}
@@ -866,16 +867,16 @@ this._lastHeavyResetMs=now;}else{try{this.raf.cancelGroup('StreamQueue');}catch(
866
867
  try{this.tips&&this.tips.hide();}catch(_){}}
867
868
  api_onChunk=(name,chunk,type)=>{const t=String(type||'text_delta');if(t==='text_delta'){this.api_appendStream(name,chunk);return;}
868
869
  this.logger.debug('STREAM','IGNORED_NON_TEXT_CHUNK',{type:t,len:(chunk?String(chunk).length:0)});};api_beginStream=(chunk=false)=>{this.tips&&this.tips.hide();this.resetStreamState('beginStream',{clearMsg:true,finalizeActive:false,forceHeavy:true});this.stream.beginStream(chunk);};api_endStream=()=>{this.stream.endStream();};api_applyStream=(name,chunk)=>{this.stream.applyStream(name,chunk);};api_appendStream=(name,chunk)=>{this.streamQ.enqueue(name,chunk);};api_nextStream=()=>{this.tips&&this.tips.hide();const element=this.dom.get('_append_output_');const before=this.dom.get('_append_output_before_');if(element&&before){const frag=document.createDocumentFragment();while(element.firstChild)frag.appendChild(element.firstChild);before.appendChild(frag);}
869
- this.resetStreamState('nextStream',{clearMsg:true,finalizeActive:false,forceHeavy:true});this.scrollMgr.scheduleScroll();};api_clearStream=()=>{this.tips&&this.tips.hide();this.resetStreamState('clearStream',{clearMsg:true,forceHeavy:true});const el=this.dom.getStreamContainer();if(!el)return;el.replaceChildren();};api_appendNode=(payload)=>{this.resetStreamState('appendNode');this.data.append(payload);};api_replaceNodes=(payload)=>{this.resetStreamState('replaceNodes',{clearMsg:true,forceHeavy:true});this.dom.clearNodes();this.data.replace(payload);};api_appendToInput=(payload)=>{this.nodes.appendToInput(payload);this.scrollMgr.autoFollow=true;this.scrollMgr.userInteracted=false;try{this.scrollMgr.lastScrollTop=Utils.SE.scrollTop|0;}catch(_){}
870
- this.scrollMgr.scheduleScroll();};api_clearNodes=()=>{this.dom.clearNodes();this.resetStreamState('clearNodes',{clearMsg:true,forceHeavy:true});};api_clearInput=()=>{this.resetStreamState('clearInput',{forceHeavy:true});this.dom.clearInput();};api_clearOutput=()=>{this.dom.clearOutput();this.resetStreamState('clearOutput',{clearMsg:true,forceHeavy:true});};api_clearLive=()=>{this.dom.clearLive();this.resetStreamState('clearLive',{forceHeavy:true});};api_appendToolOutput=(c)=>this.toolOutput.append(c);api_updateToolOutput=(c)=>this.toolOutput.update(c);api_clearToolOutput=()=>this.toolOutput.clear();api_beginToolOutput=()=>this.toolOutput.begin();api_endToolOutput=()=>{this.toolOutput.end();this.scrollMgr.scheduleScroll();}
871
- api_enableToolOutput=()=>this.toolOutput.enable();api_disableToolOutput=()=>this.toolOutput.disable();api_toggleToolOutput=(id)=>this.toolOutput.toggle(id);api_appendExtra=(id,c)=>this.nodes.appendExtra(id,c,this.scrollMgr);api_removeNode=(id)=>this.nodes.removeNode(id,this.scrollMgr);api_removeNodesFromId=(id)=>this.nodes.removeNodesFromId(id,this.scrollMgr);api_replaceLive=(content)=>{const el=this.dom.get('_append_live_');if(!el)return;if(el.classList.contains('hidden')){el.classList.remove('hidden');el.classList.add('visible');}
870
+ this.resetStreamState('nextStream',{clearMsg:true,finalizeActive:false,forceHeavy:true});this.scrollMgr.scheduleScroll();};api_clearStream=()=>{this.tips&&this.tips.hide();this.resetStreamState('clearStream',{clearMsg:true,forceHeavy:true});const el=this.dom.getStreamContainer();if(!el)return;el.replaceChildren();};api_appendNode=(payload)=>{this.resetStreamState('appendNode');this.data.append(payload);this.scrollMgr.scheduleScroll();};api_replaceNodes=(payload)=>{this.resetStreamState('replaceNodes',{clearMsg:true,forceHeavy:true});this.dom.clearNodes();this.data.replace(payload);};api_appendToInput=(payload)=>{this.nodes.appendToInput(payload);this.scrollMgr.autoFollow=true;this.scrollMgr.userInteracted=false;try{this.scrollMgr.lastScrollTop=Utils.SE.scrollTop|0;}catch(_){}
871
+ this.scrollMgr.scheduleScroll();};api_clearNodes=()=>{this.dom.clearNodes();this.resetStreamState('clearNodes',{clearMsg:true,forceHeavy:true});};api_clearInput=()=>{this.resetStreamState('clearInput',{forceHeavy:true});this.dom.clearInput();};api_clearOutput=()=>{this.dom.clearOutput();this.resetStreamState('clearOutput',{clearMsg:true,forceHeavy:true});};api_clearLive=()=>{this.dom.clearLive();this.resetStreamState('clearLive',{forceHeavy:true});};api_appendToolOutput=(c)=>this.toolOutput.append(c);api_updateToolOutput=(c)=>this.toolOutput.update(c);api_clearToolOutput=()=>this.toolOutput.clear();api_beginToolOutput=()=>this.toolOutput.begin();api_endToolOutput=()=>this.toolOutput.end();api_enableToolOutput=()=>this.toolOutput.enable();api_disableToolOutput=()=>this.toolOutput.disable();api_toggleToolOutput=(id)=>this.toolOutput.toggle(id);api_appendExtra=(id,c)=>this.nodes.appendExtra(id,c,this.scrollMgr);api_removeNode=(id)=>this.nodes.removeNode(id,this.scrollMgr);api_removeNodesFromId=(id)=>this.nodes.removeNodesFromId(id,this.scrollMgr);api_replaceLive=(content)=>{const el=this.dom.get('_append_live_');if(!el)return;if(el.classList.contains('hidden')){el.classList.remove('hidden');el.classList.add('visible');}
872
872
  el.innerHTML=content;try{const maybePromise=this.renderer.renderPendingMarkdown(el);const post=()=>{try{this.highlighter.observeNewCode(el,{deferLastIfStreaming:true,minLinesForLast:this.cfg.PROFILE_CODE.minLinesForHL,minCharsForLast:this.cfg.PROFILE_CODE.minCharsForHL},this.stream.activeCode);this.highlighter.observeMsgBoxes(el,(box)=>{this.highlighter.observeNewCode(box,{deferLastIfStreaming:true,minLinesForLast:this.cfg.PROFILE_CODE.minLinesForHL,minCharsForLast:this.cfg.PROFILE_CODE.minCharsForHL},this.stream.activeCode);this.codeScroll.initScrollableBlocks(box);});}catch(_){}
873
873
  try{const mm=getMathMode();if(mm==='finalize-only')this.math.schedule(el,0,true);else this.math.schedule(el);}catch(_){}
874
- this.scrollMgr.scheduleScroll();};if(maybePromise&&typeof maybePromise.then==='function'){maybePromise.then(post);}else{post();}}catch(_){this.scrollMgr.scheduleScroll();}};api_updateFooter=(html)=>{const el=this.dom.get('_footer_');if(el)el.innerHTML=html;};api_enableEditIcons=()=>this.ui.enableEditIcons();api_disableEditIcons=()=>this.ui.disableEditIcons();api_enableTimestamp=()=>this.ui.enableTimestamp();api_disableTimestamp=()=>this.ui.disableTimestamp();api_enableBlocks=()=>this.ui.enableBlocks();api_disableBlocks=()=>this.ui.disableBlocks();api_updateCSS=(styles)=>this.ui.updateCSS(styles);api_getScrollPosition=()=>{this.bridge.updateScrollPosition(window.scrollY);};api_setScrollPosition=(pos)=>{try{window.scrollTo(0,pos);this.scrollMgr.prevScroll=parseInt(pos);}catch(_){}};api_showLoading=()=>this.loading.show();api_hideLoading=()=>this.loading.hide();api_restoreCollapsedCode=(root)=>this.renderer.restoreCollapsedCode(root);api_scrollToTopUser=()=>this.scrollMgr.scrollToTopUser();api_scrollToBottomUser=()=>this.scrollMgr.scrollToBottomUser();api_showTips=()=>this.tips.show();api_hideTips=()=>this.tips.hide();api_getCustomMarkupRules=()=>this.customMarkup.getRules();api_setCustomMarkupRules=(rules)=>{this.customMarkup.setRules(rules);try{this.stream.setCustomFenceSpecs(this.customMarkup.getSourceFenceSpecs());}catch(_){}};init(){this.highlighter.initHLJS();this.dom.init();this.ui.ensureStickyHeaderStyle();this.tips=new TipsManager(this.dom);this.events.install();this.bridge.initQWebChannel(this.cfg.PID,(bridge)=>{const onChunk=(name,chunk,type)=>this.api_onChunk(name,chunk,type);const onNode=(payload)=>this.api_appendNode(payload);const onNodeReplace=(payload)=>this.api_replaceNodes(payload);const onNodeInput=(html)=>this.api_appendToInput(html);this.bridge.connect(onChunk,onNode,onNodeReplace,onNodeInput);try{this.logger.bindBridge(this.bridge.bridge||this.bridge);}catch(_){}});this.renderer.init();try{this.renderer.renderPendingMarkdown(document);}catch(_){}
874
+ this.scrollMgr.scheduleScroll();};if(maybePromise&&typeof maybePromise.then==='function'){maybePromise.then(post);}else{post();}}catch(_){this.scrollMgr.scheduleScroll();}};api_updateFooter=(html)=>{const el=this.dom.get('_footer_');if(el)el.innerHTML=html;};api_enableEditIcons=()=>this.ui.enableEditIcons();api_disableEditIcons=()=>this.ui.disableEditIcons();api_enableTimestamp=()=>this.ui.enableTimestamp();api_disableTimestamp=()=>this.ui.disableTimestamp();api_enableBlocks=()=>this.ui.enableBlocks();api_disableBlocks=()=>this.ui.disableBlocks();api_updateCSS=(styles)=>this.ui.updateCSS(styles);api_getScrollPosition=()=>{this.bridge.updateScrollPosition(window.scrollY);};api_setScrollPosition=(pos)=>{try{window.scrollTo(0,pos);this.scrollMgr.prevScroll=parseInt(pos);}catch(_){}};api_showLoading=()=>this.loading.show();api_hideLoading=()=>this.loading.hide();api_restoreCollapsedCode=(root)=>this.renderer.restoreCollapsedCode(root);api_scrollToTopUser=()=>this.scrollMgr.scrollToTopUser();api_scrollToBottomUser=()=>this.scrollMgr.scrollToBottomUser();api_showTips=()=>this.tips.show();api_hideTips=()=>this.tips.hide();api_begin=()=>{};api_end=()=>{this.scrollMgr.forceScrollToBottomImmediateAtEnd();}
875
+ api_getCustomMarkupRules=()=>this.customMarkup.getRules();api_setCustomMarkupRules=(rules)=>{this.customMarkup.setRules(rules);try{this.stream.setCustomFenceSpecs(this.customMarkup.getSourceFenceSpecs());}catch(_){}};init(){this.highlighter.initHLJS();this.dom.init();this.ui.ensureStickyHeaderStyle();this.tips=new TipsManager(this.dom);this.events.install();this.bridge.initQWebChannel(this.cfg.PID,(bridge)=>{const onChunk=(name,chunk,type)=>this.api_onChunk(name,chunk,type);const onNode=(payload)=>this.api_appendNode(payload);const onNodeReplace=(payload)=>this.api_replaceNodes(payload);const onNodeInput=(html)=>this.api_appendToInput(html);this.bridge.connect(onChunk,onNode,onNodeReplace,onNodeInput);try{this.logger.bindBridge(this.bridge.bridge||this.bridge);}catch(_){}});this.renderer.init();try{this.renderer.renderPendingMarkdown(document);}catch(_){}
875
876
  this.highlighter.observeMsgBoxes(document,(box)=>{this.highlighter.observeNewCode(box,{deferLastIfStreaming:true,minLinesForLast:this.cfg.PROFILE_CODE.minLinesForHL,minCharsForLast:this.cfg.PROFILE_CODE.minCharsForHL},this.stream.activeCode);this.codeScroll.initScrollableBlocks(box);});this.highlighter.observeNewCode(document,{deferLastIfStreaming:true,minLinesForLast:this.cfg.PROFILE_CODE.minLinesForHL,minCharsForLast:this.cfg.PROFILE_CODE.minCharsForHL},this.stream.activeCode);this.highlighter.scheduleScanVisibleCodes(this.stream.activeCode);this.tips.cycle();this.scrollMgr.updateScrollFab(true);}
876
877
  cleanup(){this.tips.cleanup();try{this.bridge.disconnect();}catch(_){}
877
878
  this.events.cleanup();this.highlighter.cleanup();this.math.cleanup();this.streamQ.clear();this.dom.cleanup();}}
878
879
  if(typeof RafManager!=='undefined'&&RafManager.prototype&&typeof RafManager.prototype.cancel==='function'){RafManager.prototype.cancel=function(key){const t=this.tasks.get(key);if(!t)return;this.tasks.delete(key);if(t.group){const set=this.groups.get(t.group);if(set){set.delete(key);if(set.size===0)this.groups.delete(t.group);}}};}
879
- window.__collapsed_idx=window.__collapsed_idx||[];const runtime=new Runtime();document.addEventListener('DOMContentLoaded',()=>runtime.init());Object.defineProperty(window,'SE',{get(){return Utils.SE;}});window.beginStream=(chunk)=>runtime.api_beginStream(chunk);window.endStream=()=>runtime.api_endStream();window.applyStream=(name,chunk)=>runtime.api_applyStream(name,chunk);window.appendStream=(name,chunk)=>runtime.api_appendStream(name,chunk);window.appendStreamTyped=(type,name,chunk)=>runtime.api_onChunk(name,chunk,type);window.nextStream=()=>runtime.api_nextStream();window.clearStream=()=>runtime.api_clearStream();window.appendNode=(payload)=>runtime.api_appendNode(payload);window.replaceNodes=(payload)=>runtime.api_replaceNodes(payload);window.appendToInput=(html)=>runtime.api_appendToInput(html);window.clearNodes=()=>runtime.api_clearNodes();window.clearInput=()=>runtime.api_clearInput();window.clearOutput=()=>runtime.api_clearOutput();window.clearLive=()=>runtime.api_clearLive();window.appendToolOutput=(c)=>runtime.api_appendToolOutput(c);window.updateToolOutput=(c)=>runtime.api_updateToolOutput(c);window.clearToolOutput=()=>runtime.api_clearToolOutput();window.beginToolOutput=()=>runtime.api_beginToolOutput();window.endToolOutput=()=>runtime.api_endToolOutput();window.enableToolOutput=()=>runtime.api_enableToolOutput();window.disableToolOutput=()=>runtime.api_disableToolOutput();window.toggleToolOutput=(id)=>runtime.api_toggleToolOutput(id);window.appendExtra=(id,c)=>runtime.api_appendExtra(id,c);window.removeNode=(id)=>runtime.api_removeNode(id);window.removeNodesFromId=(id)=>runtime.api_removeNodesFromId(id);window.replaceLive=(c)=>runtime.api_replaceLive(c);window.updateFooter=(c)=>runtime.api_updateFooter(c);window.enableEditIcons=()=>runtime.api_enableEditIcons();window.disableEditIcons=()=>runtime.api_disableEditIcons();window.enableTimestamp=()=>runtime.api_enableTimestamp();window.disableTimestamp=()=>runtime.api_disableTimestamp();window.enableBlocks=()=>runtime.api_enableBlocks();window.disableBlocks=()=>runtime.api_disableBlocks();window.updateCSS=(s)=>runtime.api_updateCSS(s);window.getScrollPosition=()=>runtime.api_getScrollPosition();window.setScrollPosition=(pos)=>runtime.api_setScrollPosition(pos);window.showLoading=()=>runtime.api_showLoading();window.hideLoading=()=>runtime.api_hideLoading();window.restoreCollapsedCode=(root)=>runtime.api_restoreCollapsedCode(root);window.scrollToTopUser=()=>runtime.api_scrollToTopUser();window.scrollToBottomUser=()=>runtime.api_scrollToBottomUser();window.showTips=()=>runtime.api_showTips();window.hideTips=()=>runtime.api_hideTips();window.getCustomMarkupRules=()=>runtime.api_getCustomMarkupRules();window.setCustomMarkupRules=(rules)=>runtime.api_setCustomMarkupRules(rules);window.__pygpt_cleanup=()=>runtime.cleanup();RafManager.prototype.stats=function(){const byGroup=new Map();for(const[key,t]of this.tasks){const g=t.group||'default';byGroup.set(g,(byGroup.get(g)||0)+1);}
880
+ window.__collapsed_idx=window.__collapsed_idx||[];const runtime=new Runtime();document.addEventListener('DOMContentLoaded',()=>runtime.init());Object.defineProperty(window,'SE',{get(){return Utils.SE;}});window.beginStream=(chunk)=>runtime.api_beginStream(chunk);window.endStream=()=>runtime.api_endStream();window.applyStream=(name,chunk)=>runtime.api_applyStream(name,chunk);window.appendStream=(name,chunk)=>runtime.api_appendStream(name,chunk);window.appendStreamTyped=(type,name,chunk)=>runtime.api_onChunk(name,chunk,type);window.nextStream=()=>runtime.api_nextStream();window.clearStream=()=>runtime.api_clearStream();window.begin=()=>runtime.api_begin();window.end=()=>runtime.api_end();window.appendNode=(payload)=>runtime.api_appendNode(payload);window.replaceNodes=(payload)=>runtime.api_replaceNodes(payload);window.appendToInput=(html)=>runtime.api_appendToInput(html);window.clearNodes=()=>runtime.api_clearNodes();window.clearInput=()=>runtime.api_clearInput();window.clearOutput=()=>runtime.api_clearOutput();window.clearLive=()=>runtime.api_clearLive();window.appendToolOutput=(c)=>runtime.api_appendToolOutput(c);window.updateToolOutput=(c)=>runtime.api_updateToolOutput(c);window.clearToolOutput=()=>runtime.api_clearToolOutput();window.beginToolOutput=()=>runtime.api_beginToolOutput();window.endToolOutput=()=>runtime.api_endToolOutput();window.enableToolOutput=()=>runtime.api_enableToolOutput();window.disableToolOutput=()=>runtime.api_disableToolOutput();window.toggleToolOutput=(id)=>runtime.api_toggleToolOutput(id);window.appendExtra=(id,c)=>runtime.api_appendExtra(id,c);window.removeNode=(id)=>runtime.api_removeNode(id);window.removeNodesFromId=(id)=>runtime.api_removeNodesFromId(id);window.replaceLive=(c)=>runtime.api_replaceLive(c);window.updateFooter=(c)=>runtime.api_updateFooter(c);window.enableEditIcons=()=>runtime.api_enableEditIcons();window.disableEditIcons=()=>runtime.api_disableEditIcons();window.enableTimestamp=()=>runtime.api_enableTimestamp();window.disableTimestamp=()=>runtime.api_disableTimestamp();window.enableBlocks=()=>runtime.api_enableBlocks();window.disableBlocks=()=>runtime.api_disableBlocks();window.updateCSS=(s)=>runtime.api_updateCSS(s);window.getScrollPosition=()=>runtime.api_getScrollPosition();window.setScrollPosition=(pos)=>runtime.api_setScrollPosition(pos);window.showLoading=()=>runtime.api_showLoading();window.hideLoading=()=>runtime.api_hideLoading();window.restoreCollapsedCode=(root)=>runtime.api_restoreCollapsedCode(root);window.scrollToTopUser=()=>runtime.api_scrollToTopUser();window.scrollToBottomUser=()=>runtime.api_scrollToBottomUser();window.showTips=()=>runtime.api_showTips();window.hideTips=()=>runtime.api_hideTips();window.getCustomMarkupRules=()=>runtime.api_getCustomMarkupRules();window.setCustomMarkupRules=(rules)=>runtime.api_setCustomMarkupRules(rules);window.__pygpt_cleanup=()=>runtime.cleanup();RafManager.prototype.stats=function(){const byGroup=new Map();for(const[key,t]of this.tasks){const g=t.group||'default';byGroup.set(g,(byGroup.get(g)||0)+1);}
880
881
  return{tasks:this.tasks.size,groups:Array.from(byGroup,([group,count])=>({group,count})).sort((a,b)=>b.count-a.count)};};RafManager.prototype.dumpHotGroups=function(label=''){const s=this.stats();console.log('[RAF]',label,'tasks=',s.tasks,'byGroup=',s.groups.slice(0,8));};RafManager.prototype.findDomTasks=function(){const out=[];for(const[key,t]of this.tasks){let el=null;if(key&&key.nodeType===1)el=key;else if(key&&key.el&&key.el.nodeType===1)el=key.el;if(el)out.push({group:t.group,tag:el.tagName,connected:el.isConnected});}
881
882
  return out;};function gaugeSE(se){const ropeLen=(se.streamBuf.length+se._sbLen);const ac=se.activeCode;const domFrozen=ac?.frozenEl?.textContent?.length||0;const domTail=ac?.tailEl?.textContent?.length||0;const domLen=domFrozen+domTail;return{ropeLen,domLen,totalChars:ropeLen+domLen,ratioRopeToDom:(domLen?(ropeLen/domLen).toFixed(2):'n/a'),fenceOpen:se.fenceOpen,codeOpen:se.codeStream?.open};};
@@ -118,12 +118,40 @@ agent.option.tools.local = Lokale Werkzeuge zulassen
118
118
  agent.option.tools.local.desc = Nutzung lokaler Werkzeuge für diesen Agenten zulassen
119
119
  agent.option.tools.remote = Entfernte Werkzeuge zulassen
120
120
  agent.option.tools.remote.desc = Nutzung entfernter Werkzeuge für diesen Agenten zulassen
121
+ agent.planner.display.executor = Ausführender
122
+ agent.planner.display.executor_agent = FunktionsAgent
123
+ agent.planner.display.planner = PlanerArbeitsablauf
124
+ agent.planner.label.execute = Ausführen
125
+ agent.planner.label.plan = Plan
126
+ agent.planner.label.refine = Verfeinern
127
+ agent.planner.label.refine.index = Verfeinern {index}
128
+ agent.planner.label.refine.index_total = Verfeinern {index}/{total}
129
+ agent.planner.label.step = Schritt
130
+ agent.planner.label.subtask = Teilaufgabe
131
+ agent.planner.label.subtask.index = Teilaufgabe {index}
132
+ agent.planner.label.subtask.index_total = Teilaufgabe {index}/{total}
133
+ agent.planner.label.with_name = {base}: {name}
121
134
  agent.planner.plan.label = Planer (initial)
122
135
  agent.planner.plan.prompt.desc = Initialer Plan-Prompt
123
136
  agent.planner.refine.label = Planer (verfeinern)
124
137
  agent.planner.refine.prompt.desc = Plan verfeinern prompt
125
138
  agent.planner.step.label = Prompt ausführen
126
139
  agent.planner.step.prompt.desc = Schritte ausführen prompt
140
+ agent.planner.ui.current_plan = Aktueller Plan:
141
+ agent.planner.ui.dependencies = Abhängigkeiten:
142
+ agent.planner.ui.executing_plan = Plan wird ausgeführt...
143
+ agent.planner.ui.execution_stopped = Planausführung gestoppt.
144
+ agent.planner.ui.expected_output = Erwartetes Ergebnis:
145
+ agent.planner.ui.plan_execution_finished = Planausführung beendet.
146
+ agent.planner.ui.plan_finished = Plan abgeschlossen.
147
+ agent.planner.ui.plan_marked_complete = Plan als abgeschlossen markiert: {reason}
148
+ agent.planner.ui.refine_failed_parse = Verfeinern fehlgeschlagen; ohne Änderungen fortfahren.
149
+ agent.planner.ui.refining_remaining_plan = Verfeinerung des verbleibenden Plans...
150
+ agent.planner.ui.subtask_failed = Teilaufgabe fehlgeschlagen: {error}
151
+ agent.planner.ui.subtask_finished = Teilaufgabe abgeschlossen {index}/{total}: {name}
152
+ agent.planner.ui.subtask_header.one = **===== Teilaufgabe {index}: {name} =====**
153
+ agent.planner.ui.subtask_header.progress = **===== Teilaufgabe {index}/{total}: {name} =====**
154
+ agent.planner.ui.updated_remaining_plan = Aktualisierter verbleibender Plan:
127
155
  alert.preset.empty_id = Name ist erforderlich.
128
156
  alert.preset.no_chat_completion = Mindestens eine der Optionen: Chat, Vervollständigung, Bild oder Vision wird benötigt!
129
157
  alert.snap.file_manager = Snap erkannt. Bitte das Verzeichnis manuell in Ihrem Dateimanager öffnen:
@@ -183,6 +211,9 @@ attachments.header.path = Pfad
183
211
  attachments.header.size = Größe
184
212
  attachments.header.store = Vektor Speicher(e)
185
213
  attachments.options.label = Optionen
214
+ attachments.paste.file = Zwischenablage-Anhang
215
+ attachments.paste.img = Zwischenablage-Bild
216
+ attachments.paste.success = Anhang aus der Zwischenablage hinzugefügt
186
217
  attachments.send_clear = Liste nach dem Senden löschen
187
218
  attachments.tab = Anhänge
188
219
  attachments_uploaded.btn.clear = Dateien löschen
@@ -1552,6 +1583,7 @@ toolbox.agent.llama.loop.label = Schleife / bewerten (bis Punktzahl, 0% = unendl
1552
1583
  toolbox.agent.llama.loop.mode.complete = Min. % abschluss
1553
1584
  toolbox.agent.llama.loop.mode.score = Min. % bewertung
1554
1585
  toolbox.agent.llama.loop.score.tooltip = Erforderliche Punktzahl zum Beenden, 0% = unendliche Schleife
1586
+ toolbox.agent.preset.placeholder = System-Prompt ist pro Agent im Agenten-Preset definierbar
1555
1587
  toolbox.agents.label = Agenten
1556
1588
  toolbox.assistants.label = Assistenten
1557
1589
  toolbox.env.label = Env
@@ -98,13 +98,14 @@ agent.name.worker = Worker
98
98
  agent.option.model = Model
99
99
  agent.option.name = Name
100
100
  agent.option.prompt = Prompt
101
- agent.option.prompt.refine.desc = Prompt for plan refining
102
101
  agent.option.prompt.b1.desc = Prompt for bot 1
103
102
  agent.option.prompt.b2.desc = Prompt for bot 2
104
103
  agent.option.prompt.base.desc = Prompt for Base Agent
105
104
  agent.option.prompt.chooser.desc = Prompt for Chooser agent
105
+ agent.option.prompt.desc = Prompt for agent
106
106
  agent.option.prompt.feedback.desc = Prompt for feedback evaluation
107
107
  agent.option.prompt.planner.desc = Prompt for Planner agent
108
+ agent.option.prompt.refine.desc = Prompt for plan refining
108
109
  agent.option.prompt.search.desc = Prompt for search agent
109
110
  agent.option.prompt.supervisor.desc = Prompt for Supervisor
110
111
  agent.option.prompt.worker.desc = Prompt for Worker
@@ -124,12 +125,40 @@ agent.option.tools.local = Allow local tools
124
125
  agent.option.tools.local.desc = Allow usage of local tools for this agent
125
126
  agent.option.tools.remote = Allow remote tools
126
127
  agent.option.tools.remote.desc = Allow usage of remote tools for this agent
128
+ agent.planner.display.executor = Executor
129
+ agent.planner.display.executor_agent = FunctionAgent
130
+ agent.planner.display.planner = PlannerWorkflow
131
+ agent.planner.label.execute = Execute
132
+ agent.planner.label.plan = Plan
133
+ agent.planner.label.refine = Refine
134
+ agent.planner.label.refine.index = Refine {index}
135
+ agent.planner.label.refine.index_total = Refine {index}/{total}
136
+ agent.planner.label.step = Step
137
+ agent.planner.label.subtask = Sub-task
138
+ agent.planner.label.subtask.index = Sub-task {index}
139
+ agent.planner.label.subtask.index_total = Sub-task {index}/{total}
140
+ agent.planner.label.with_name = {base}: {name}
127
141
  agent.planner.plan.label = Planner (initial)
128
142
  agent.planner.plan.prompt.desc = Initial plan prompt
129
143
  agent.planner.refine.label = Planner (refine)
130
144
  agent.planner.refine.prompt.desc = Plan refine prompt
131
145
  agent.planner.step.label = Execute prompt
132
146
  agent.planner.step.prompt.desc = Steps execute prompt
147
+ agent.planner.ui.current_plan = Current plan:
148
+ agent.planner.ui.dependencies = Dependencies:
149
+ agent.planner.ui.executing_plan = Executing plan...
150
+ agent.planner.ui.execution_stopped = Plan execution stopped.
151
+ agent.planner.ui.expected_output = Expected output:
152
+ agent.planner.ui.plan_execution_finished = Plan execution finished.
153
+ agent.planner.ui.plan_finished = Plan finished.
154
+ agent.planner.ui.plan_marked_complete = Planner marked the plan as complete: {reason}
155
+ agent.planner.ui.refine_failed_parse = Refine step failed to parse; continuing without changes.
156
+ agent.planner.ui.refining_remaining_plan = Refining remaining plan...
157
+ agent.planner.ui.subtask_failed = Sub-task failed: {error}
158
+ agent.planner.ui.subtask_finished = Finished Sub Task {index}/{total}: {name}
159
+ agent.planner.ui.subtask_header.one = **===== Sub Task {index}: {name} =====**
160
+ agent.planner.ui.subtask_header.progress = **===== Sub Task {index}/{total}: {name} =====**
161
+ agent.planner.ui.updated_remaining_plan = Updated remaining plan:
133
162
  alert.preset.empty_id = Name is required.
134
163
  alert.preset.no_chat_completion = At least one of: chat, completion, img or vision option is required!
135
164
  alert.snap.file_manager = Snap detected. Please open the directory manually in your file manager:
@@ -190,6 +219,9 @@ attachments.header.path = Path
190
219
  attachments.header.size = Size
191
220
  attachments.header.store = Vector Store(s)
192
221
  attachments.options.label = Options
222
+ attachments.paste.file = Clipboard attachment
223
+ attachments.paste.img = Clipboard image
224
+ attachments.paste.success = Added attachment from clipboard
193
225
  attachments.send_clear = Clear list after sending
194
226
  attachments.tab = Attachments
195
227
  attachments_uploaded.btn.clear = Clear
@@ -1627,6 +1659,7 @@ toolbox.agent.llama.loop.mode.complete = Min. % complete
1627
1659
  toolbox.agent.llama.loop.mode.score = Min. % score
1628
1660
  toolbox.agent.llama.loop.mode.tooltip = Evaluate task completion / or task result accuracy
1629
1661
  toolbox.agent.llama.loop.score.tooltip = Required score to finish, 0% = infinity loop
1662
+ toolbox.agent.preset.placeholder = System prompt is definable per agent in Agent preset
1630
1663
  toolbox.agents.label = Agents
1631
1664
  toolbox.assistants.label = Assistants
1632
1665
  toolbox.env.label = Env
@@ -1729,4 +1762,3 @@ vision.capture.manual.captured.success = Image captured from the camera:
1729
1762
  vision.capture.name.prefix = Camera capture:
1730
1763
  vision.capture.options.title = Video capture
1731
1764
  vision.checkbox.tooltip = If checked, the vision model is active. It will be automatically activated upon image upload. You can deactivate it in real-time.
1732
- agent.option.prompt.desc = Prompt for agent
@@ -118,12 +118,40 @@ agent.option.tools.local = Permitir herramientas locales
118
118
  agent.option.tools.local.desc = Permitir uso de herramientas locales para este agente
119
119
  agent.option.tools.remote = Permitir herramientas remotas
120
120
  agent.option.tools.remote.desc = Permitir uso de herramientas remotas para este agente
121
+ agent.planner.display.executor = Ejecutante
122
+ agent.planner.display.executor_agent = AgenteFunción
123
+ agent.planner.display.planner = FlujoDeTrabajoDelPlanificador
124
+ agent.planner.label.execute = Ejecutar
125
+ agent.planner.label.plan = Plan
126
+ agent.planner.label.refine = Refinar
127
+ agent.planner.label.refine.index = Refinar {index}
128
+ agent.planner.label.refine.index_total = Refinar {index}/{total}
129
+ agent.planner.label.step = Paso
130
+ agent.planner.label.subtask = Subtarea
131
+ agent.planner.label.subtask.index = Subtarea {index}
132
+ agent.planner.label.subtask.index_total = Subtarea {index}/{total}
133
+ agent.planner.label.with_name = {base}: {name}
121
134
  agent.planner.plan.label = Planificador (inicial)
122
135
  agent.planner.plan.prompt.desc = Prompt del plan inicial
123
136
  agent.planner.refine.label = Planificador (refinamiento)
124
137
  agent.planner.refine.prompt.desc = Prompt de refinamiento del plan
125
138
  agent.planner.step.label = Ejecutar prompt
126
139
  agent.planner.step.prompt.desc = Pasos ejecutar prompt
140
+ agent.planner.ui.current_plan = Plan actual:
141
+ agent.planner.ui.dependencies = Dependencias:
142
+ agent.planner.ui.executing_plan = Ejecutando plan...
143
+ agent.planner.ui.execution_stopped = Ejecución del plan detenida.
144
+ agent.planner.ui.expected_output = Salida esperada:
145
+ agent.planner.ui.plan_execution_finished = Ejecución del plan finalizada.
146
+ agent.planner.ui.plan_finished = Plan finalizado.
147
+ agent.planner.ui.plan_marked_complete = Plan marcado como completo: {reason}
148
+ agent.planner.ui.refine_failed_parse = Fallo en el refinamiento; continuando sin cambios.
149
+ agent.planner.ui.refining_remaining_plan = Refinando el plan restante...
150
+ agent.planner.ui.subtask_failed = Subtarea fallida: {error}
151
+ agent.planner.ui.subtask_finished = Subtarea finalizada {index}/{total}: {name}
152
+ agent.planner.ui.subtask_header.one = **===== Subtarea {index}: {name} =====**
153
+ agent.planner.ui.subtask_header.progress = **===== Subtarea {index}/{total}: {name} =====**
154
+ agent.planner.ui.updated_remaining_plan = Plan restante actualizado:
127
155
  alert.preset.empty_id = Se requiere un nombre.
128
156
  alert.preset.no_chat_completion = Se requiere al menos una de las siguientes: chat, finalización, img o visión.
129
157
  alert.snap.file_manager = Se detectó un snapshot. Por favor, abra el directorio manualmente en su gestor de archivos:
@@ -183,6 +211,9 @@ attachments.header.path = Ruta
183
211
  attachments.header.size = Tamaño
184
212
  attachments.header.store = Almacén(es) de vectores
185
213
  attachments.options.label = Opciones
214
+ attachments.paste.file = Archivo adjunto del portapapeles
215
+ attachments.paste.img = Imagen del portapapeles
216
+ attachments.paste.success = Archivo adjunto agregado desde el portapapeles
186
217
  attachments.send_clear = Limpiar lista después de enviar
187
218
  attachments.tab = Adjuntos
188
219
  attachments_uploaded.btn.clear = Limpiar archivos
@@ -1553,6 +1584,7 @@ toolbox.agent.llama.loop.label = Bucle / evaluar (hasta puntuación, 0% = infini
1553
1584
  toolbox.agent.llama.loop.mode.complete = Min. % finalización
1554
1585
  toolbox.agent.llama.loop.mode.score = Min. % evaluación
1555
1586
  toolbox.agent.llama.loop.score.tooltip = Puntuación requerida para finalizar, 0% = bucle infinito
1587
+ toolbox.agent.preset.placeholder = El prompt del sistema es definible por agente en el preset del agente
1556
1588
  toolbox.agents.label = Agentes
1557
1589
  toolbox.assistants.label = Asistentes
1558
1590
  toolbox.env.label = Env
@@ -118,12 +118,40 @@ agent.option.tools.local = Autoriser les outils locaux
118
118
  agent.option.tools.local.desc = Autoriser l'utilisation des outils locaux pour cet agent
119
119
  agent.option.tools.remote = Autoriser les outils distants
120
120
  agent.option.tools.remote.desc = Autoriser l'utilisation des outils distants pour cet agent
121
+ agent.planner.display.executor = Exécuteur
122
+ agent.planner.display.executor_agent = AgentFonction
123
+ agent.planner.display.planner = FluxDeTravailDuPlanificateur
124
+ agent.planner.label.execute = Exécuter
125
+ agent.planner.label.plan = Plan
126
+ agent.planner.label.refine = Affiner
127
+ agent.planner.label.refine.index = Affiner {index}
128
+ agent.planner.label.refine.index_total = Affiner {index}/{total}
129
+ agent.planner.label.step = Étape
130
+ agent.planner.label.subtask = Sous-tâche
131
+ agent.planner.label.subtask.index = Sous-tâche {index}
132
+ agent.planner.label.subtask.index_total = Sous-tâche {index}/{total}
133
+ agent.planner.label.with_name = {base}: {name}
121
134
  agent.planner.plan.label = Planificateur (initial)
122
135
  agent.planner.plan.prompt.desc = Prompt initial du plan
123
136
  agent.planner.refine.label = Planificateur (raffinement)
124
137
  agent.planner.refine.prompt.desc = Prompt de raffinement du plan
125
138
  agent.planner.step.label = Exécuter le prompt
126
139
  agent.planner.step.prompt.desc = Étapes d'exécution du prompt
140
+ agent.planner.ui.current_plan = Plan actuel:
141
+ agent.planner.ui.dependencies = Dépendances:
142
+ agent.planner.ui.executing_plan = Exécution du plan...
143
+ agent.planner.ui.execution_stopped = Exécution du plan arrêtée.
144
+ agent.planner.ui.expected_output = Résultat attendu:
145
+ agent.planner.ui.plan_execution_finished = Exécution du plan terminée.
146
+ agent.planner.ui.plan_finished = Plan terminé.
147
+ agent.planner.ui.plan_marked_complete = Plan marqué comme terminé: {reason}
148
+ agent.planner.ui.refine_failed_parse = L'affinage a échoué; continuation sans changement.
149
+ agent.planner.ui.refining_remaining_plan = Raffinement du plan restant...
150
+ agent.planner.ui.subtask_failed = Échec de la sous-tâche: {error}
151
+ agent.planner.ui.subtask_finished = Sous-tâche terminée {index}/{total}: {name}
152
+ agent.planner.ui.subtask_header.one = **===== Sous-tâche {index}: {name} =====**
153
+ agent.planner.ui.subtask_header.progress = **===== Sous-tâche {index}/{total}: {name} =====**
154
+ agent.planner.ui.updated_remaining_plan = Plan restant mis à jour:
127
155
  alert.preset.empty_id = Le nom est requis.
128
156
  alert.preset.no_chat_completion = Au moins une des options suivantes est requise : chat, complétion, img ou vision !
129
157
  alert.snap.file_manager = Snap détecté. Veuillez ouvrir le répertoire manuellement dans votre gestionnaire de fichiers :
@@ -183,6 +211,9 @@ attachments.header.path = Chemin
183
211
  attachments.header.size = Taille
184
212
  attachments.header.store = Base(s) vectorielle(s)
185
213
  attachments.options.label = Options
214
+ attachments.paste.file = Pièce jointe du presse-papiers
215
+ attachments.paste.img = Image du presse-papiers
216
+ attachments.paste.success = Pièce jointe ajoutée depuis le presse-papiers
186
217
  attachments.send_clear = Effacer la liste après envoi
187
218
  attachments.tab = Pièces jointes
188
219
  attachments_uploaded.btn.clear = Effacer les fichiers
@@ -1552,6 +1583,7 @@ toolbox.agent.llama.loop.label = Boucle / évaluer (jusqu'à score, 0% = infini)
1552
1583
  toolbox.agent.llama.loop.mode.complete = Min. % achèvement
1553
1584
  toolbox.agent.llama.loop.mode.score = Min. % évaluation
1554
1585
  toolbox.agent.llama.loop.score.tooltip = Score requis pour terminer, 0% = boucle infinie
1586
+ toolbox.agent.preset.placeholder = Le prompt système est définissable par agent dans le préréglage de l'agent
1555
1587
  toolbox.agents.label = Agents
1556
1588
  toolbox.assistants.label = Assistants
1557
1589
  toolbox.env.label = Env