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.
- pygpt_net/CHANGELOG.txt +21 -0
- pygpt_net/__init__.py +3 -3
- pygpt_net/app.py +5 -1
- pygpt_net/controller/chat/chat.py +0 -0
- pygpt_net/controller/chat/handler/openai_stream.py +137 -7
- pygpt_net/controller/chat/render.py +0 -0
- pygpt_net/controller/config/field/checkbox_list.py +34 -1
- pygpt_net/controller/files/files.py +71 -2
- pygpt_net/controller/media/media.py +20 -1
- pygpt_net/controller/presets/editor.py +137 -22
- pygpt_net/controller/presets/presets.py +4 -1
- pygpt_net/controller/ui/mode.py +14 -10
- pygpt_net/controller/ui/ui.py +18 -1
- pygpt_net/core/agents/custom/__init__.py +18 -2
- pygpt_net/core/agents/custom/runner.py +2 -2
- pygpt_net/core/attachments/clipboard.py +146 -0
- pygpt_net/core/image/image.py +34 -1
- pygpt_net/core/render/web/renderer.py +33 -11
- pygpt_net/core/tabs/tabs.py +0 -0
- pygpt_net/core/types/image.py +61 -3
- pygpt_net/data/config/config.json +4 -3
- pygpt_net/data/config/models.json +629 -41
- pygpt_net/data/css/style.dark.css +12 -0
- pygpt_net/data/css/style.light.css +12 -0
- pygpt_net/data/icons/pin2.svg +1 -0
- pygpt_net/data/icons/pin3.svg +3 -0
- pygpt_net/data/icons/point.svg +1 -0
- pygpt_net/data/icons/target.svg +1 -0
- pygpt_net/data/js/app/ui.js +19 -2
- pygpt_net/data/js/app/user.js +22 -54
- pygpt_net/data/js/app.min.js +7 -9
- pygpt_net/data/locale/locale.de.ini +4 -0
- pygpt_net/data/locale/locale.en.ini +8 -0
- pygpt_net/data/locale/locale.es.ini +4 -0
- pygpt_net/data/locale/locale.fr.ini +4 -0
- pygpt_net/data/locale/locale.it.ini +4 -0
- pygpt_net/data/locale/locale.pl.ini +4 -0
- pygpt_net/data/locale/locale.uk.ini +4 -0
- pygpt_net/data/locale/locale.zh.ini +4 -0
- pygpt_net/icons.qrc +4 -0
- pygpt_net/icons_rc.py +274 -137
- pygpt_net/item/model.py +15 -19
- pygpt_net/js_rc.py +2038 -2075
- pygpt_net/provider/agents/openai/agent.py +0 -0
- pygpt_net/provider/api/google/__init__.py +20 -9
- pygpt_net/provider/api/google/image.py +161 -28
- pygpt_net/provider/api/google/video.py +73 -36
- pygpt_net/provider/api/openai/__init__.py +21 -11
- pygpt_net/provider/api/openai/agents/client.py +0 -0
- pygpt_net/provider/api/openai/video.py +562 -0
- pygpt_net/provider/core/config/patch.py +15 -0
- pygpt_net/provider/core/model/patch.py +29 -3
- pygpt_net/provider/vector_stores/qdrant.py +117 -0
- pygpt_net/ui/__init__.py +6 -1
- pygpt_net/ui/dialog/preset.py +9 -4
- pygpt_net/ui/layout/chat/attachments.py +18 -1
- pygpt_net/ui/layout/status.py +3 -3
- pygpt_net/ui/layout/toolbox/raw.py +7 -1
- pygpt_net/ui/widget/element/status.py +55 -0
- pygpt_net/ui/widget/filesystem/explorer.py +116 -2
- pygpt_net/ui/widget/lists/context.py +26 -16
- pygpt_net/ui/widget/option/checkbox_list.py +14 -2
- pygpt_net/ui/widget/textarea/input.py +71 -17
- {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/METADATA +76 -25
- {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/RECORD +63 -55
- {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/LICENSE +0 -0
- {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/WHEEL +0 -0
- {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.
|
|
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
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
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
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
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(
|
pygpt_net/core/tabs/tabs.py
CHANGED
|
File without changes
|
pygpt_net/core/types/image.py
CHANGED
|
@@ -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.
|
|
9
|
+
# Updated Date: 2025.12.25 20:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
VIDEO_AVAILABLE_ASPECT_RATIOS = {
|
|
13
|
-
"
|
|
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.
|
|
4
|
-
"app.version": "2.6.
|
|
5
|
-
"updated_at": "2025-
|
|
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",
|