pygpt-net 2.6.64__py3-none-any.whl → 2.6.66__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 (68) hide show
  1. pygpt_net/CHANGELOG.txt +21 -0
  2. pygpt_net/__init__.py +3 -3
  3. pygpt_net/app.py +5 -1
  4. pygpt_net/controller/chat/chat.py +0 -0
  5. pygpt_net/controller/chat/handler/openai_stream.py +137 -7
  6. pygpt_net/controller/chat/render.py +0 -0
  7. pygpt_net/controller/config/field/checkbox_list.py +34 -1
  8. pygpt_net/controller/files/files.py +71 -2
  9. pygpt_net/controller/media/media.py +20 -1
  10. pygpt_net/controller/presets/editor.py +137 -22
  11. pygpt_net/controller/presets/presets.py +4 -1
  12. pygpt_net/controller/ui/mode.py +14 -10
  13. pygpt_net/controller/ui/ui.py +18 -1
  14. pygpt_net/core/agents/custom/__init__.py +18 -2
  15. pygpt_net/core/agents/custom/runner.py +2 -2
  16. pygpt_net/core/attachments/clipboard.py +146 -0
  17. pygpt_net/core/image/image.py +34 -1
  18. pygpt_net/core/render/web/renderer.py +33 -11
  19. pygpt_net/core/tabs/tabs.py +0 -0
  20. pygpt_net/core/types/image.py +61 -3
  21. pygpt_net/data/config/config.json +4 -3
  22. pygpt_net/data/config/models.json +629 -41
  23. pygpt_net/data/css/style.dark.css +12 -0
  24. pygpt_net/data/css/style.light.css +12 -0
  25. pygpt_net/data/icons/pin2.svg +1 -0
  26. pygpt_net/data/icons/pin3.svg +3 -0
  27. pygpt_net/data/icons/point.svg +1 -0
  28. pygpt_net/data/icons/target.svg +1 -0
  29. pygpt_net/data/js/app/ui.js +19 -2
  30. pygpt_net/data/js/app/user.js +22 -54
  31. pygpt_net/data/js/app.min.js +7 -9
  32. pygpt_net/data/locale/locale.de.ini +4 -0
  33. pygpt_net/data/locale/locale.en.ini +8 -0
  34. pygpt_net/data/locale/locale.es.ini +4 -0
  35. pygpt_net/data/locale/locale.fr.ini +4 -0
  36. pygpt_net/data/locale/locale.it.ini +4 -0
  37. pygpt_net/data/locale/locale.pl.ini +4 -0
  38. pygpt_net/data/locale/locale.uk.ini +4 -0
  39. pygpt_net/data/locale/locale.zh.ini +4 -0
  40. pygpt_net/icons.qrc +4 -0
  41. pygpt_net/icons_rc.py +274 -137
  42. pygpt_net/item/model.py +15 -19
  43. pygpt_net/js_rc.py +2038 -2075
  44. pygpt_net/provider/agents/openai/agent.py +0 -0
  45. pygpt_net/provider/api/google/__init__.py +20 -9
  46. pygpt_net/provider/api/google/image.py +161 -28
  47. pygpt_net/provider/api/google/video.py +73 -36
  48. pygpt_net/provider/api/openai/__init__.py +21 -11
  49. pygpt_net/provider/api/openai/agents/client.py +0 -0
  50. pygpt_net/provider/api/openai/video.py +562 -0
  51. pygpt_net/provider/core/config/patch.py +15 -0
  52. pygpt_net/provider/core/model/patch.py +29 -3
  53. pygpt_net/provider/vector_stores/qdrant.py +117 -0
  54. pygpt_net/ui/__init__.py +6 -1
  55. pygpt_net/ui/dialog/preset.py +9 -4
  56. pygpt_net/ui/layout/chat/attachments.py +18 -1
  57. pygpt_net/ui/layout/status.py +3 -3
  58. pygpt_net/ui/layout/toolbox/raw.py +7 -1
  59. pygpt_net/ui/widget/element/status.py +55 -0
  60. pygpt_net/ui/widget/filesystem/explorer.py +116 -2
  61. pygpt_net/ui/widget/lists/context.py +26 -16
  62. pygpt_net/ui/widget/option/checkbox_list.py +14 -2
  63. pygpt_net/ui/widget/textarea/input.py +71 -17
  64. {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/METADATA +76 -25
  65. {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/RECORD +63 -55
  66. {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/LICENSE +0 -0
  67. {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/WHEEL +0 -0
  68. {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/entry_points.txt +0 -0
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.09.26 17:00:00 #
9
+ # Updated Date: 2025.09.28 10:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -1216,11 +1216,10 @@ class Renderer(BaseRenderer):
1216
1216
  if preset.ai_name:
1217
1217
  output_name = preset.ai_name
1218
1218
  if preset.ai_avatar:
1219
- presets_dir = self.window.core.config.get_user_dir("presets")
1220
- avatars_dir = os.path.join(presets_dir, "avatars")
1221
- avatar_path = os.path.join(avatars_dir, preset.ai_avatar)
1222
- if os.path.exists(avatar_path):
1223
- avatar_html = f"<img src=\"{self._file_prefix}{avatar_path}\" class=\"avatar\"> "
1219
+ # prefer thumbnail "thumb_<name>" when available
1220
+ avatar_fs = self._resolve_avatar_fs_path(preset.ai_avatar)
1221
+ if avatar_fs:
1222
+ avatar_html = f"<img src=\"{self._file_prefix}{avatar_fs}\" class=\"avatar\"> "
1224
1223
 
1225
1224
  if not output_name and not avatar_html:
1226
1225
  return ""
@@ -1962,6 +1961,30 @@ class Renderer(BaseRenderer):
1962
1961
  pass
1963
1962
  return None
1964
1963
 
1964
+ def _resolve_avatar_fs_path(self, basename: str) -> Optional[str]:
1965
+ """
1966
+ Resolve avatar file system path preferring a local thumbnail named 'thumb_<basename>'.
1967
+
1968
+ Returns:
1969
+ - Absolute path to thumbnail when exists,
1970
+ - Otherwise absolute path to original when exists,
1971
+ - Otherwise None.
1972
+ """
1973
+ if not basename:
1974
+ return None
1975
+ try:
1976
+ presets_dir = self.window.core.config.get_user_dir("presets")
1977
+ avatars_dir = os.path.join(presets_dir, "avatars")
1978
+ thumb = os.path.join(avatars_dir, f"thumb_{basename}")
1979
+ original = os.path.join(avatars_dir, basename)
1980
+ if os.path.exists(thumb):
1981
+ return thumb
1982
+ if os.path.exists(original):
1983
+ return original
1984
+ except Exception:
1985
+ pass
1986
+ return None
1987
+
1965
1988
  def _output_identity(self, ctx: CtxItem) -> Tuple[str, Optional[str], bool]:
1966
1989
  """
1967
1990
  Resolve output identity (name, avatar file:// path) based on preset or ctx-provided agent name.
@@ -1999,11 +2022,10 @@ class Renderer(BaseRenderer):
1999
2022
  name = preset.ai_name or default_name
2000
2023
  avatar = None
2001
2024
  if preset.ai_avatar:
2002
- presets_dir = self.window.core.config.get_user_dir("presets")
2003
- avatars_dir = os.path.join(presets_dir, "avatars")
2004
- avatar_path = os.path.join(avatars_dir, preset.ai_avatar)
2005
- if os.path.exists(avatar_path):
2006
- avatar = f"{self._file_prefix}{avatar_path}"
2025
+ # prefer thumbnail URL if available
2026
+ avatar_fs = self._resolve_avatar_fs_path(preset.ai_avatar)
2027
+ if avatar_fs:
2028
+ avatar = f"{self._file_prefix}{avatar_fs}"
2007
2029
  return name, avatar, True
2008
2030
 
2009
2031
  def _build_render_block(
File without changes
@@ -6,12 +6,20 @@
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.01 23:00:00 #
9
+ # Updated Date: 2025.12.25 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  VIDEO_AVAILABLE_ASPECT_RATIOS = {
13
- "16:9": "16:9",
13
+ "1:1": "1:1",
14
+ "2:3": "2:3",
15
+ "3:2": "3:2",
16
+ "3:4": "3:4",
17
+ "4:3": "4:3",
18
+ "4:5": "4:5",
19
+ "5:4": "5:4",
14
20
  "9:16": "9:16",
21
+ "16:9": "16:9",
22
+ "21:9": "21:9",
15
23
  }
16
24
 
17
25
 
@@ -50,5 +58,55 @@ IMAGE_AVAILABLE_RESOLUTIONS = {
50
58
  "2560x1792": "2560x1792",
51
59
  "1536x2816": "1536x2816",
52
60
  "2816x1536": "2816x1536"
53
- }
61
+ },
62
+ "nano-banana-pro": {
63
+ "2048x2048": "2048x2048",
64
+ "4096x4096": "4096x4096",
65
+ "1664x2496": "1664x2496",
66
+ "2496x1664": "2496x1664",
67
+ "3328x4992": "3328x4992",
68
+ "4992x3328": "4992x3328",
69
+ "1728x2368": "1728x2368",
70
+ "2368x1728": "2368x1728",
71
+ "3456x4736": "3456x4736",
72
+ "4736x3456": "4736x3456",
73
+ "1792x2304": "1792x2304",
74
+ "2304x1792": "2304x1792",
75
+ "3584x4608": "3584x4608",
76
+ "4608x3584": "4608x3584",
77
+ "1536x2688": "1536x2688",
78
+ "2688x1536": "2688x1536",
79
+ "3072x5376": "3072x5376",
80
+ "5376x3072": "5376x3072",
81
+ "3072x1344": "3072x1344",
82
+ "6144x2688": "6144x2688"
83
+ },
84
+ "nano-banana": {
85
+ "1024x1024": "1024x1024",
86
+ "832x1248": "832x1248",
87
+ "1248x832": "1248x832",
88
+ "864x1184": "864x1184",
89
+ "1184x864": "1184x864",
90
+ "896x1152": "896x1152",
91
+ "1152x896": "1152x896",
92
+ "768x1344": "768x1344",
93
+ "1344x768": "1344x768",
94
+ "1536x672": "1536x672"
95
+ },
96
+ "sora-2-pro": {
97
+ "1280x720": "1280x720",
98
+ "720x1280": "720x1280",
99
+ "1792x1024": "1792x1024",
100
+ "1024x1792": "1024x1792"
101
+ },
102
+ "sora-2": {
103
+ "1280x720": "1280x720",
104
+ "720x1280": "720x1280"
105
+ },
106
+ "veo-3": {
107
+ "1280x720": "1280x720",
108
+ "720x1280": "720x1280",
109
+ "1920x1080": "1920x1080",
110
+ "1080x1920": "1080x1920"
111
+ },
54
112
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.6.64",
4
- "app.version": "2.6.64",
5
- "updated_at": "2025-09-27T00:00:00"
3
+ "version": "2.6.66",
4
+ "app.version": "2.6.66",
5
+ "updated_at": "2025-12-15T00:00:00"
6
6
  },
7
7
  "access.audio.event.speech": false,
8
8
  "access.audio.event.speech.disabled": [],
@@ -207,6 +207,7 @@
207
207
  "font_size.toolbox": 12,
208
208
  "frequency_penalty": 0.0,
209
209
  "func_call.native": true,
210
+ "img_mode": "image",
210
211
  "img_prompt_model": "gpt-4o",
211
212
  "img_raw": true,
212
213
  "img_resolution": "1024x1024",