pygpt-net 2.7.8__py3-none-any.whl → 2.7.9__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 +5 -0
- pygpt_net/__init__.py +3 -3
- pygpt_net/controller/realtime/realtime.py +13 -1
- pygpt_net/data/config/config.json +4 -3
- pygpt_net/data/config/models.json +37 -22
- pygpt_net/provider/api/google/realtime/client.py +70 -24
- pygpt_net/provider/api/google/realtime/realtime.py +48 -12
- pygpt_net/provider/api/openai/realtime/realtime.py +26 -6
- pygpt_net/provider/api/x_ai/__init__.py +0 -3
- pygpt_net/provider/api/x_ai/realtime/client.py +185 -146
- pygpt_net/provider/api/x_ai/realtime/realtime.py +30 -15
- pygpt_net/provider/api/x_ai/remote_tools.py +83 -0
- pygpt_net/provider/api/x_ai/tools.py +51 -0
- pygpt_net/provider/core/config/patch.py +12 -1
- pygpt_net/provider/core/model/patch.py +36 -1
- {pygpt_net-2.7.8.dist-info → pygpt_net-2.7.9.dist-info}/METADATA +7 -2
- {pygpt_net-2.7.8.dist-info → pygpt_net-2.7.9.dist-info}/RECORD +20 -20
- {pygpt_net-2.7.8.dist-info → pygpt_net-2.7.9.dist-info}/LICENSE +0 -0
- {pygpt_net-2.7.8.dist-info → pygpt_net-2.7.9.dist-info}/WHEEL +0 -0
- {pygpt_net-2.7.8.dist-info → pygpt_net-2.7.9.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: 2026.01.
|
|
9
|
+
# Updated Date: 2026.01.07 23:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import json
|
|
@@ -27,7 +27,7 @@ class Realtime:
|
|
|
27
27
|
|
|
28
28
|
def __init__(self, window=None):
|
|
29
29
|
"""
|
|
30
|
-
|
|
30
|
+
xAI API realtime controller
|
|
31
31
|
|
|
32
32
|
:param window: Window instance
|
|
33
33
|
"""
|
|
@@ -68,15 +68,11 @@ class Realtime:
|
|
|
68
68
|
self.handler.set_debug(is_debug)
|
|
69
69
|
|
|
70
70
|
# tools
|
|
71
|
-
tools =
|
|
72
|
-
'''
|
|
73
|
-
tools = self.window.core.api.xai.tools.prepare(model, context.external_functions)
|
|
74
|
-
'''
|
|
71
|
+
tools = self.window.core.api.xai.tools.prepare_realtime(context.external_functions)
|
|
75
72
|
|
|
76
73
|
# remote tools
|
|
77
74
|
remote_tools = []
|
|
78
|
-
|
|
79
|
-
remote_tools = self.window.core.api.openai.remote_tools.append_to_tools(
|
|
75
|
+
remote_tools = self.window.core.api.xai.remote.append_to_tools(
|
|
80
76
|
mode=context.mode,
|
|
81
77
|
model=model,
|
|
82
78
|
stream=context.stream,
|
|
@@ -84,7 +80,6 @@ class Realtime:
|
|
|
84
80
|
tools=remote_tools,
|
|
85
81
|
preset=context.preset,
|
|
86
82
|
)
|
|
87
|
-
'''
|
|
88
83
|
|
|
89
84
|
# handle sub-reply (tool results from tool calls)
|
|
90
85
|
if context.ctx.internal:
|
|
@@ -107,6 +102,31 @@ class Realtime:
|
|
|
107
102
|
self.handler.update_ctx(context.ctx)
|
|
108
103
|
return True # do not start new session, just send tool results
|
|
109
104
|
|
|
105
|
+
# Resolve last session ID from history only (no fallback)
|
|
106
|
+
last_session_id = extract_last_session_id(context.history) if context.history else None
|
|
107
|
+
if is_debug:
|
|
108
|
+
print("[realtime session] Last ID", last_session_id)
|
|
109
|
+
|
|
110
|
+
# Enforce clean state rules prior to any live updates:
|
|
111
|
+
# - If there is no history: always reset live session to start fresh.
|
|
112
|
+
# - If history exists but has no resumable handle: close any active session to avoid continuation.
|
|
113
|
+
try:
|
|
114
|
+
history_len = len(context.history) if context.history else 0
|
|
115
|
+
except Exception:
|
|
116
|
+
history_len = 0
|
|
117
|
+
|
|
118
|
+
if history_len == 0:
|
|
119
|
+
if self.handler.is_session_active():
|
|
120
|
+
self.handler.close_session_sync()
|
|
121
|
+
try:
|
|
122
|
+
if context.ctx and isinstance(context.ctx.extra, dict):
|
|
123
|
+
context.ctx.extra.pop("rt_session_id", None)
|
|
124
|
+
except Exception:
|
|
125
|
+
pass
|
|
126
|
+
last_session_id = None # force new session
|
|
127
|
+
elif not last_session_id and self.handler.is_session_active():
|
|
128
|
+
self.handler.close_session_sync()
|
|
129
|
+
|
|
110
130
|
# update auto-turn in active session
|
|
111
131
|
if (self.handler.is_session_active()
|
|
112
132
|
and (auto_turn != self.prev_auto_turn
|
|
@@ -121,13 +141,8 @@ class Realtime:
|
|
|
121
141
|
self.window.update_status(trans("speech.listening"))
|
|
122
142
|
return True # do not send new request if session is active
|
|
123
143
|
|
|
124
|
-
# Last session ID
|
|
125
|
-
last_session_id = extract_last_session_id(context.history)
|
|
126
|
-
if is_debug:
|
|
127
|
-
print("[realtime session] Last ID", last_session_id)
|
|
128
|
-
|
|
129
144
|
# Voice
|
|
130
|
-
voice = "
|
|
145
|
+
voice = "Ara"
|
|
131
146
|
try:
|
|
132
147
|
v = self.window.core.plugins.get_option("audio_output", "xai_tts_voice")
|
|
133
148
|
if v:
|
|
@@ -28,6 +28,7 @@ except Exception:
|
|
|
28
28
|
x_x_search = None
|
|
29
29
|
x_code_execution = None
|
|
30
30
|
x_mcp = None
|
|
31
|
+
x_collections_search = None
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
class Remote:
|
|
@@ -42,6 +43,9 @@ class Remote:
|
|
|
42
43
|
- Builds xAI SDK tool objects for web_search, x_search, code_execution, MCP.
|
|
43
44
|
- Returns include flags, max_turns and use_encrypted_content settings.
|
|
44
45
|
|
|
46
|
+
Realtime (WebSocket) tools builder for xAI:
|
|
47
|
+
- Produces Realtime-compatible tool descriptors to be attached to session.update/response.create.
|
|
48
|
+
|
|
45
49
|
:param window: Window instance
|
|
46
50
|
"""
|
|
47
51
|
self.window = window
|
|
@@ -269,6 +273,85 @@ class Remote:
|
|
|
269
273
|
"reason": http_reason,
|
|
270
274
|
}
|
|
271
275
|
|
|
276
|
+
# ---------- Realtime tools (WebSocket) ----------
|
|
277
|
+
|
|
278
|
+
def append_to_tools(
|
|
279
|
+
self,
|
|
280
|
+
mode: str,
|
|
281
|
+
model: ModelItem,
|
|
282
|
+
stream: bool,
|
|
283
|
+
is_expert_call: bool,
|
|
284
|
+
tools: List[dict],
|
|
285
|
+
preset=None
|
|
286
|
+
) -> List[dict]:
|
|
287
|
+
"""
|
|
288
|
+
Prepare remote tools for xAI Realtime sessions.
|
|
289
|
+
|
|
290
|
+
The returned list contains Realtime/WebSocket tool descriptors understood by xAI’s Grok Voice Agent API.
|
|
291
|
+
Server-side tools are executed by xAI; client-side tools are added separately in the caller.
|
|
292
|
+
|
|
293
|
+
:param mode: Agent mode (unused here, kept for signature compatibility)
|
|
294
|
+
:param model: Model item
|
|
295
|
+
:param stream: Streaming flag
|
|
296
|
+
:param is_expert_call: Expert call flag (unused here for xAI)
|
|
297
|
+
:param tools: Current tools list to extend
|
|
298
|
+
:param preset: Preset item (unused here)
|
|
299
|
+
:return: Extended tools list
|
|
300
|
+
"""
|
|
301
|
+
cfg = self.window.core.config
|
|
302
|
+
enabled_global = self.window.controller.chat.remote_tools.enabled
|
|
303
|
+
|
|
304
|
+
# Toggles
|
|
305
|
+
is_web_enabled = enabled_global(model, "web_search")
|
|
306
|
+
is_x_enabled = bool(cfg.get("remote_tools.xai.x_search", False))
|
|
307
|
+
is_code_enabled = bool(cfg.get("remote_tools.xai.code_execution", False))
|
|
308
|
+
is_mcp_enabled = bool(cfg.get("remote_tools.xai.mcp", False))
|
|
309
|
+
is_collections_enabled = bool(cfg.get("remote_tools.xai.collections", False))
|
|
310
|
+
|
|
311
|
+
# Web search
|
|
312
|
+
if is_web_enabled:
|
|
313
|
+
tools.append({"type": "web_search"})
|
|
314
|
+
|
|
315
|
+
# X search
|
|
316
|
+
if is_x_enabled:
|
|
317
|
+
tools.append({"type": "x_search"})
|
|
318
|
+
|
|
319
|
+
# Code execution (code interpreter)
|
|
320
|
+
if is_code_enabled:
|
|
321
|
+
# Container is optional here; xAI executes code server-side
|
|
322
|
+
tools.append({"type": "code_interpreter"})
|
|
323
|
+
|
|
324
|
+
# Collections search
|
|
325
|
+
if is_collections_enabled:
|
|
326
|
+
ids = cfg.get("remote_tools.xai.collections.args", "")
|
|
327
|
+
ids_list: List[str] = []
|
|
328
|
+
if ids:
|
|
329
|
+
try:
|
|
330
|
+
ids_list = [s.strip() for s in ids.split(",") if s.strip()]
|
|
331
|
+
except Exception:
|
|
332
|
+
ids_list = []
|
|
333
|
+
if ids_list:
|
|
334
|
+
tools.append({
|
|
335
|
+
"type": "collections_search",
|
|
336
|
+
"collection_ids": ids_list,
|
|
337
|
+
})
|
|
338
|
+
|
|
339
|
+
# MCP
|
|
340
|
+
if is_mcp_enabled:
|
|
341
|
+
mcp_tool = cfg.get("remote_tools.xai.mcp.args", "")
|
|
342
|
+
if mcp_tool:
|
|
343
|
+
try:
|
|
344
|
+
parsed = json.loads(mcp_tool)
|
|
345
|
+
# Accept either full dict or minimal {"type":"mcp"}
|
|
346
|
+
if isinstance(parsed, dict):
|
|
347
|
+
tools.append(parsed)
|
|
348
|
+
except Exception:
|
|
349
|
+
tools.append({"type": "mcp"})
|
|
350
|
+
else:
|
|
351
|
+
tools.append({"type": "mcp"})
|
|
352
|
+
|
|
353
|
+
return tools
|
|
354
|
+
|
|
272
355
|
# ---------- helpers ----------
|
|
273
356
|
|
|
274
357
|
def _build_http_params(
|
|
@@ -26,6 +26,7 @@ class Tools:
|
|
|
26
26
|
|
|
27
27
|
- prepare(): legacy OpenAI-compatible dicts (kept for compatibility if needed).
|
|
28
28
|
- prepare_sdk_tools(): xAI SDK client-side tool descriptors for Chat Responses.
|
|
29
|
+
- prepare_realtime(): Realtime/WebSocket-compatible function tools.
|
|
29
30
|
|
|
30
31
|
:param window: Window instance
|
|
31
32
|
"""
|
|
@@ -168,4 +169,54 @@ class Tools:
|
|
|
168
169
|
))
|
|
169
170
|
except Exception:
|
|
170
171
|
continue
|
|
172
|
+
return tools
|
|
173
|
+
|
|
174
|
+
def prepare_realtime(self, functions: list) -> List[dict]:
|
|
175
|
+
"""
|
|
176
|
+
Prepare function tools for Realtime/WebSocket sessions.
|
|
177
|
+
|
|
178
|
+
The returned structure matches the Realtime "tools" schema:
|
|
179
|
+
[
|
|
180
|
+
{
|
|
181
|
+
"type": "function",
|
|
182
|
+
"function": {
|
|
183
|
+
"name": "...",
|
|
184
|
+
"description": "...",
|
|
185
|
+
"parameters": { ... JSON Schema ... }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
|
|
190
|
+
:param functions: List of functions with keys: name (str), desc (str), params (JSON Schema str)
|
|
191
|
+
:return: List of function tool descriptors
|
|
192
|
+
"""
|
|
193
|
+
if not functions or not isinstance(functions, list):
|
|
194
|
+
return []
|
|
195
|
+
|
|
196
|
+
tools: List[dict] = []
|
|
197
|
+
for fn in functions:
|
|
198
|
+
name = str(fn.get("name") or "").strip()
|
|
199
|
+
if not name:
|
|
200
|
+
continue
|
|
201
|
+
desc = fn.get("desc") or ""
|
|
202
|
+
params: Optional[dict] = {}
|
|
203
|
+
if fn.get("params"):
|
|
204
|
+
try:
|
|
205
|
+
params = json.loads(fn["params"])
|
|
206
|
+
except Exception:
|
|
207
|
+
params = {}
|
|
208
|
+
params = self._sanitize_schema(params or {})
|
|
209
|
+
if not params.get("type"):
|
|
210
|
+
params["type"] = "object"
|
|
211
|
+
else:
|
|
212
|
+
params = {"type": "object"}
|
|
213
|
+
|
|
214
|
+
tools.append({
|
|
215
|
+
"type": "function",
|
|
216
|
+
"function": {
|
|
217
|
+
"name": name,
|
|
218
|
+
"description": desc,
|
|
219
|
+
"parameters": params,
|
|
220
|
+
}
|
|
221
|
+
})
|
|
171
222
|
return tools
|
|
@@ -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: 2026.01.
|
|
9
|
+
# Updated Date: 2026.01.07 23:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import copy
|
|
@@ -274,6 +274,17 @@ class Patch:
|
|
|
274
274
|
data[key] = cfg_get_base(key)
|
|
275
275
|
updated = True
|
|
276
276
|
|
|
277
|
+
# < 2.7.9
|
|
278
|
+
if old < parse_version("2.7.9"):
|
|
279
|
+
print("Migrating config from < 2.7.9...")
|
|
280
|
+
to_add = [
|
|
281
|
+
"api_key_management_xai",
|
|
282
|
+
]
|
|
283
|
+
for key in to_add:
|
|
284
|
+
if key not in data or data[key] is None or data[key] == "None":
|
|
285
|
+
data[key] = ""
|
|
286
|
+
updated = True
|
|
287
|
+
|
|
277
288
|
# update file
|
|
278
289
|
migrated = False
|
|
279
290
|
if updated:
|
|
@@ -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: 2026.01.
|
|
9
|
+
# Updated Date: 2026.01.07 23:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from packaging.version import parse as parse_version, Version
|
|
@@ -154,6 +154,41 @@ class Patch:
|
|
|
154
154
|
m.input.append("image")
|
|
155
155
|
updated = True
|
|
156
156
|
|
|
157
|
+
# < 2.7.9 <--- add missing audio input
|
|
158
|
+
if old < parse_version("2.7.9"):
|
|
159
|
+
print("Migrating models from < 2.7.9...")
|
|
160
|
+
models_to_update = [
|
|
161
|
+
"grok-4",
|
|
162
|
+
"grok-4-fast-non-reasoning",
|
|
163
|
+
"grok-4-fast-reasoning",
|
|
164
|
+
"grok-4-1-fast-non-reasoning",
|
|
165
|
+
"grok-4-1-fast-reasoning",
|
|
166
|
+
]
|
|
167
|
+
for model in models_to_update:
|
|
168
|
+
if model in data:
|
|
169
|
+
m = data[model]
|
|
170
|
+
if not m.is_audio_input():
|
|
171
|
+
m.input.append("audio")
|
|
172
|
+
if not m.is_audio_output():
|
|
173
|
+
m.output.append("audio")
|
|
174
|
+
if not m.has_mode("audio"):
|
|
175
|
+
m.mode.append("audio")
|
|
176
|
+
models_to_remove = [
|
|
177
|
+
"gemini-2.5-flash-preview-native-audio-dialog",
|
|
178
|
+
]
|
|
179
|
+
for model in models_to_remove:
|
|
180
|
+
if model in data:
|
|
181
|
+
del data[model]
|
|
182
|
+
models_to_add = [
|
|
183
|
+
"gemini-2.5-flash-native-audio-latest",
|
|
184
|
+
]
|
|
185
|
+
for model in models_to_add:
|
|
186
|
+
if model not in data:
|
|
187
|
+
base_model = from_base(model)
|
|
188
|
+
if base_model:
|
|
189
|
+
data[model] = base_model
|
|
190
|
+
updated = True
|
|
191
|
+
|
|
157
192
|
# update file
|
|
158
193
|
if updated:
|
|
159
194
|
# fix empty/broken data
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pygpt-net
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.9
|
|
4
4
|
Summary: Desktop AI Assistant powered by: OpenAI GPT-5, GPT-4, o1, o3, Gemini, Claude, Grok, DeepSeek, and other models supported by Llama Index, and Ollama. Chatbot, agents, completion, image generation, vision analysis, speech-to-text, plugins, MCP, internet access, file handling, command execution and more.
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: ai,api,api key,app,assistant,bielik,chat,chatbot,chatgpt,claude,dall-e,deepseek,desktop,gemini,gpt,gpt-3.5,gpt-4,gpt-4-vision,gpt-4o,gpt-5,gpt-oss,gpt3.5,gpt4,grok,langchain,llama-index,llama3,mistral,o1,o3,ollama,openai,presets,py-gpt,py_gpt,pygpt,pyside,qt,text completion,tts,ui,vision,whisper
|
|
@@ -120,7 +120,7 @@ Description-Content-Type: text/markdown
|
|
|
120
120
|
|
|
121
121
|
[](https://snapcraft.io/pygpt)
|
|
122
122
|
|
|
123
|
-
Release: **2.7.
|
|
123
|
+
Release: **2.7.9** | build: **2026-01-08** | Python: **>=3.10, <3.14**
|
|
124
124
|
|
|
125
125
|
> Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
|
|
126
126
|
>
|
|
@@ -3796,6 +3796,11 @@ may consume additional tokens that are not displayed in the main window.
|
|
|
3796
3796
|
|
|
3797
3797
|
## Recent changes:
|
|
3798
3798
|
|
|
3799
|
+
**2.7.9 (2026-01-08)**
|
|
3800
|
+
|
|
3801
|
+
- Improved realtime audio mode.
|
|
3802
|
+
- Added xAI provider and Grok support in realtime audio mode.
|
|
3803
|
+
|
|
3799
3804
|
**2.7.8 (2026-01-06)**
|
|
3800
3805
|
|
|
3801
3806
|
- Added the xAI Collections remote tool and integrated collections management into the Remote Vector Stores tool.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
pygpt_net/CHANGELOG.txt,sha256=
|
|
1
|
+
pygpt_net/CHANGELOG.txt,sha256=hBm2ZJ6EkaBRuxX5IXh_eMN143ar-FtuJpU6d7YiPxo,113342
|
|
2
2
|
pygpt_net/LICENSE,sha256=dz9sfFgYahvu2NZbx4C1xCsVn9GVer2wXcMkFRBvqzY,1146
|
|
3
|
-
pygpt_net/__init__.py,sha256=
|
|
3
|
+
pygpt_net/__init__.py,sha256=J8M1OM6KzKL_uJYHulGYX8QKp54g3nova5oRIxHUNBM,1372
|
|
4
4
|
pygpt_net/app.py,sha256=Q3x2I3IxxjsM1XvlsLn_fdPEbbUZ9TndGGIO7NETJI8,26474
|
|
5
5
|
pygpt_net/app_core.py,sha256=nFKChQ66naIft6jGXr1HCg7povnhIfa44h_VhsadOpo,3926
|
|
6
6
|
pygpt_net/config.py,sha256=3CA7xXPKQsdRie1CY8_b5-Kk1taWMciUP9CesXRQNNY,18302
|
|
@@ -122,7 +122,7 @@ pygpt_net/controller/presets/experts.py,sha256=yST5XG67sU7PfqS93D5ypzeL1JlQ0nFr-
|
|
|
122
122
|
pygpt_net/controller/presets/presets.py,sha256=dQ0CeBbEO5KiLolaytkALmKvtuduAhYxCyuTV6Ea_7U,28279
|
|
123
123
|
pygpt_net/controller/realtime/__init__.py,sha256=MhvJb5wBqcpX6uylof01qEDRdU3SepTD88sU2lXNtIQ,519
|
|
124
124
|
pygpt_net/controller/realtime/manager.py,sha256=qtifO3sAtT1ROtRs9N_8t6A8_wgxOxxGl-PfLHzhdxY,1762
|
|
125
|
-
pygpt_net/controller/realtime/realtime.py,sha256=
|
|
125
|
+
pygpt_net/controller/realtime/realtime.py,sha256=dT4Tfm3WM2IvLbKZwDqhUR23o_a4vlJLO58YLiZyRLY,11494
|
|
126
126
|
pygpt_net/controller/remote_store/__init__.py,sha256=4aYypHq5Kwrg6IxYEspFkj-WBBKczbc6Qm0TQajLS3M,516
|
|
127
127
|
pygpt_net/controller/remote_store/batch.py,sha256=JMKv1q3dEzM9Gv2u5moyLJ4I1AFHCKLZ18LT8yy3nzM,14275
|
|
128
128
|
pygpt_net/controller/remote_store/remote_store.py,sha256=VAcDTFxDEbnuzRCgeW1QZk_2OfLhfOthrYKn5hH3eUE,37506
|
|
@@ -428,8 +428,8 @@ pygpt_net/css_rc.py,sha256=PX6g9z5BsD-DXISuR2oq3jHcjiKfcJ4HsgcHez6wGMc,27762
|
|
|
428
428
|
pygpt_net/data/audio/click_off.mp3,sha256=aNiRDP1pt-Jy7ija4YKCNFBwvGWbzU460F4pZWZDS90,65201
|
|
429
429
|
pygpt_net/data/audio/click_on.mp3,sha256=qfdsSnthAEHVXzeyN4LlC0OvXuyW8p7stb7VXtlvZ1k,65201
|
|
430
430
|
pygpt_net/data/audio/ok.mp3,sha256=LTiV32pEBkpUGBkKkcOdOFB7Eyt_QoP2Nv6c5AaXftk,32256
|
|
431
|
-
pygpt_net/data/config/config.json,sha256=
|
|
432
|
-
pygpt_net/data/config/models.json,sha256=
|
|
431
|
+
pygpt_net/data/config/config.json,sha256=HJom7EcI0OGL1aM1cRRh57gKge4zAcf_zaVVZc-ZwUg,32026
|
|
432
|
+
pygpt_net/data/config/models.json,sha256=4di9ExQsm0T_G7GVI8Pxhaua8duXG5L5FA4D0Ppib1o,143834
|
|
433
433
|
pygpt_net/data/config/modes.json,sha256=IpjLOm428_vs6Ma9U-YQTNKJNtZw-qyM1lwhh73xl1w,2111
|
|
434
434
|
pygpt_net/data/config/presets/agent_code_act.json,sha256=GYHqhxtKFLUCvRI3IJAJ7Qe1k8yD9wGGNwManldWzlI,754
|
|
435
435
|
pygpt_net/data/config/presets/agent_openai.json,sha256=bpDJgLRey_effQkzFRoOEGd4aHUrmzeODSDdNzrf62I,730
|
|
@@ -2184,8 +2184,8 @@ pygpt_net/provider/api/google/computer.py,sha256=4MHyoZQv1E_YsUYnQVILOeXlvroO8FO
|
|
|
2184
2184
|
pygpt_net/provider/api/google/image.py,sha256=jyZrRkre33Mcm_tLnq32VLu9ytXzx5Wvsy6mO4hKA3o,36464
|
|
2185
2185
|
pygpt_net/provider/api/google/music.py,sha256=pxLn-7ATTMvX5loCTX_H6Uq69pcTo4Df8sn69YyzelQ,14394
|
|
2186
2186
|
pygpt_net/provider/api/google/realtime/__init__.py,sha256=Ism0i9dihgxYuzQHgA6vzmsswZnBOAvVqQp0j5G2JLQ,519
|
|
2187
|
-
pygpt_net/provider/api/google/realtime/client.py,sha256=
|
|
2188
|
-
pygpt_net/provider/api/google/realtime/realtime.py,sha256=
|
|
2187
|
+
pygpt_net/provider/api/google/realtime/client.py,sha256=Syvq6CM90MgNvOLjNZ17AcPTIS_heLsNZZxhmJP75pU,81573
|
|
2188
|
+
pygpt_net/provider/api/google/realtime/realtime.py,sha256=iAIi5qQRCTb2sqxuZzMWxAjUQU3HJDESIYTTQgiKu1o,9084
|
|
2189
2189
|
pygpt_net/provider/api/google/remote_tools.py,sha256=4_yst06f2axETDKbE0RuGIeXslI39KN4obyjgU2FpNQ,3906
|
|
2190
2190
|
pygpt_net/provider/api/google/store.py,sha256=aKWhy8ZdwFjZ63ElrQuq19NinJDdJywH_7jLpeu6qQc,22243
|
|
2191
2191
|
pygpt_net/provider/api/google/stream.py,sha256=PYNi86BZJUqOHBxTOvutZLxR9QnF9jfJwzr-lWb4vZ0,23761
|
|
@@ -2216,7 +2216,7 @@ pygpt_net/provider/api/openai/container.py,sha256=jWsFkgofa5SKjztQnJZdfhryX-dYAc
|
|
|
2216
2216
|
pygpt_net/provider/api/openai/image.py,sha256=Bqaz9aJiSIsV8ZdJJ4nTjjJSCzPLDMhL9cpK4a7-RhU,16751
|
|
2217
2217
|
pygpt_net/provider/api/openai/realtime/__init__.py,sha256=Ism0i9dihgxYuzQHgA6vzmsswZnBOAvVqQp0j5G2JLQ,519
|
|
2218
2218
|
pygpt_net/provider/api/openai/realtime/client.py,sha256=4_Evnlb0vobuNbJwNEej1oL9cAhlnfV02tbons7JQSY,76208
|
|
2219
|
-
pygpt_net/provider/api/openai/realtime/realtime.py,sha256=
|
|
2219
|
+
pygpt_net/provider/api/openai/realtime/realtime.py,sha256=jmy7MC-fXTy-fbZyxySJBge7FuXA24WlGbbpkGi9Z3c,8438
|
|
2220
2220
|
pygpt_net/provider/api/openai/remote_tools.py,sha256=B_-o_lnljvGUJyu9jqV2k0mQdW-evNrYa4EOGDYzKbA,5935
|
|
2221
2221
|
pygpt_net/provider/api/openai/responses.py,sha256=omtMvXmpYqqtnwThkXuAv-TtvWK9ycHRx7gthHQJJd8,29801
|
|
2222
2222
|
pygpt_net/provider/api/openai/store.py,sha256=Za7XwZOkFT_b2CrA-WF01uDOTjXTlP72c8Db3VWbsqo,18777
|
|
@@ -2230,18 +2230,18 @@ pygpt_net/provider/api/openai/worker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
|
|
|
2230
2230
|
pygpt_net/provider/api/openai/worker/assistants.py,sha256=z1fZzl59FYMVXxv48r9JVIzSCFgLzYOeKXhreZcIzO8,21538
|
|
2231
2231
|
pygpt_net/provider/api/openai/worker/importer.py,sha256=GNsE_SNxg9b3oT8RWloqQeThKg3G8BDHXihQv7z92hw,14544
|
|
2232
2232
|
pygpt_net/provider/api/openai/worker/importer_assistants.py,sha256=-8-5zRxu0LX8GjA7-HR9thanl_T6aRpDE_dXaTCY1Wg,7330
|
|
2233
|
-
pygpt_net/provider/api/x_ai/__init__.py,sha256=
|
|
2233
|
+
pygpt_net/provider/api/x_ai/__init__.py,sha256=oaGQbsBYu1_MLOFR_sU5EY_r4qnq2lEfZLX0Dt0K09Q,12673
|
|
2234
2234
|
pygpt_net/provider/api/x_ai/audio.py,sha256=hy3nsI7aSwgMOEK9zNtuWHR-tBWjqHGGn7eZwR-lfgQ,2032
|
|
2235
2235
|
pygpt_net/provider/api/x_ai/chat.py,sha256=fs5_GcBmeSFjHOTAM2dYwGCO5j6VGnpre5fko0Stbdk,50406
|
|
2236
2236
|
pygpt_net/provider/api/x_ai/image.py,sha256=cE6ZH8NCYIIYHp1F8joWdsROSeaqLDxrUfGGQWCUDBk,12797
|
|
2237
2237
|
pygpt_net/provider/api/x_ai/realtime/__init__.py,sha256=Ism0i9dihgxYuzQHgA6vzmsswZnBOAvVqQp0j5G2JLQ,519
|
|
2238
|
-
pygpt_net/provider/api/x_ai/realtime/client.py,sha256=
|
|
2239
|
-
pygpt_net/provider/api/x_ai/realtime/realtime.py,sha256=
|
|
2240
|
-
pygpt_net/provider/api/x_ai/remote_tools.py,sha256=
|
|
2238
|
+
pygpt_net/provider/api/x_ai/realtime/client.py,sha256=7zGJ3TwvRLDe0FBzwzUKLorftbGqE2xejvRjoZbZ4ug,76382
|
|
2239
|
+
pygpt_net/provider/api/x_ai/realtime/realtime.py,sha256=1AQKhvrXDcZN3z246VdgyfUBgjegWiS2xa1zpSTk8qc,8369
|
|
2240
|
+
pygpt_net/provider/api/x_ai/remote_tools.py,sha256=y9_3Q167hjsuYfibpRQFJokfbqOCmV_K_3zWAkKaPF0,17525
|
|
2241
2241
|
pygpt_net/provider/api/x_ai/responses.py,sha256=n_fT_Rgs4q3Ka5jpc17e03DZrfh8r4mRY78A1SYR44o,18986
|
|
2242
2242
|
pygpt_net/provider/api/x_ai/store.py,sha256=H8tPubU3Rw_0BjD0SRQ313tdKAeS1O4DTqMya1tlUAc,21635
|
|
2243
2243
|
pygpt_net/provider/api/x_ai/stream.py,sha256=mIH_leW2mf9vubkH7FT9dik5CKIWayfuioCfQZpek14,27621
|
|
2244
|
-
pygpt_net/provider/api/x_ai/tools.py,sha256=
|
|
2244
|
+
pygpt_net/provider/api/x_ai/tools.py,sha256=dJxc2Ssj2oyhGVJVNjwHZKP3Sc3aGxlRmp29AH9HHPM,7680
|
|
2245
2245
|
pygpt_net/provider/api/x_ai/utils.py,sha256=9qayMXp0SUNiQ1yxKoJ9UY4LLm2JFRxFv2GPCjQ-5JQ,7221
|
|
2246
2246
|
pygpt_net/provider/api/x_ai/vision.py,sha256=Y7_wkMp9XFev2uQwBX--SqUsw9yqWqf7Ns8Y2pOOhhg,3656
|
|
2247
2247
|
pygpt_net/provider/api/x_ai/worker/importer.py,sha256=y9geGaGkAfMErvMkHh5PPyZ0xfcfhypzC1sGEJYECvE,12482
|
|
@@ -2281,7 +2281,7 @@ pygpt_net/provider/core/calendar/db_sqlite/storage.py,sha256=QDclQCQdr4QyRIqjgGX
|
|
|
2281
2281
|
pygpt_net/provider/core/config/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
2282
2282
|
pygpt_net/provider/core/config/base.py,sha256=cbvzbMNqL2XgC-36gGubnU37t94AX7LEw0lecb2Nm80,1365
|
|
2283
2283
|
pygpt_net/provider/core/config/json_file.py,sha256=GCcpCRQnBiSLWwlGbG9T3ZgiHkTfp5Jsg2KYkZcakBw,6789
|
|
2284
|
-
pygpt_net/provider/core/config/patch.py,sha256=
|
|
2284
|
+
pygpt_net/provider/core/config/patch.py,sha256=MSSM_jzdQv2EARVAYDn6q_TA1g6gnKnTUFbZm1jael8,12155
|
|
2285
2285
|
pygpt_net/provider/core/config/patches/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2286
2286
|
pygpt_net/provider/core/config/patches/patch_before_2_6_42.py,sha256=HN2xH_9_uXTGdAS2VHUUP_nkra2dssXS7LOTY0Nu8PE,126802
|
|
2287
2287
|
pygpt_net/provider/core/ctx/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
@@ -2312,7 +2312,7 @@ pygpt_net/provider/core/mode/patch.py,sha256=VS2KCYW05jxLd-lcStNY1k4fHKUUrVVLTdR
|
|
|
2312
2312
|
pygpt_net/provider/core/model/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
2313
2313
|
pygpt_net/provider/core/model/base.py,sha256=L1x2rHha8a8hnCUYxZr88utay1EWEx5qBXW_2acpAN0,1319
|
|
2314
2314
|
pygpt_net/provider/core/model/json_file.py,sha256=l74l_n5PEHNp-FsoHtO9LHflz3RFKwDwKwOKN0stgZw,8418
|
|
2315
|
-
pygpt_net/provider/core/model/patch.py,sha256=
|
|
2315
|
+
pygpt_net/provider/core/model/patch.py,sha256=VoLFyZB6YFkJEsbuEAeZ1brXiX1X4g3mYoYX_mjha38,7924
|
|
2316
2316
|
pygpt_net/provider/core/model/patches/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2317
2317
|
pygpt_net/provider/core/model/patches/patch_before_2_6_42.py,sha256=4z10uc4NnmCCL9AYWrXfzi1Xet5OZFjc7K-Nf0s4T1s,37729
|
|
2318
2318
|
pygpt_net/provider/core/notepad/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
@@ -2715,8 +2715,8 @@ pygpt_net/ui/widget/textarea/web.py,sha256=kt1HvnaoiHL0SMnS3rCEolHoJtADAcw5EhUTI
|
|
|
2715
2715
|
pygpt_net/ui/widget/vision/__init__.py,sha256=8HT4tQFqQogEEpGYTv2RplKBthlsFKcl5egnv4lzzEw,488
|
|
2716
2716
|
pygpt_net/ui/widget/vision/camera.py,sha256=DCx7h1nHruuUkU0Tw8Ay4OUVoNJhkuLsW4hIvGF5Skw,6985
|
|
2717
2717
|
pygpt_net/utils.py,sha256=r-Dum4brfBaZaHJr-ux86FfdMuMHFwyuUL2bEFirdhc,14649
|
|
2718
|
-
pygpt_net-2.7.
|
|
2719
|
-
pygpt_net-2.7.
|
|
2720
|
-
pygpt_net-2.7.
|
|
2721
|
-
pygpt_net-2.7.
|
|
2722
|
-
pygpt_net-2.7.
|
|
2718
|
+
pygpt_net-2.7.9.dist-info/LICENSE,sha256=rbPqNB_xxANH8hKayJyIcTwD4bj4Y2G-Mcm85r1OImM,1126
|
|
2719
|
+
pygpt_net-2.7.9.dist-info/METADATA,sha256=JsrtCVatIaZmn-tSpjUSW_bW7N_XNZAv9XoO91WOuIo,173989
|
|
2720
|
+
pygpt_net-2.7.9.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
2721
|
+
pygpt_net-2.7.9.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
|
|
2722
|
+
pygpt_net-2.7.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|