pygpt-net 2.5.3__py3-none-any.whl → 2.5.5__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.
@@ -325,6 +325,8 @@ dialog.models.editor.defaults.app.result = Restored to models factory settings.
325
325
  dialog.models.editor.defaults.user.confirm = Undo current changes?
326
326
  dialog.models.editor.defaults.user.result = Restored models user config
327
327
  dialog.models.editor.delete.confirm = Are you sure you want to delete the model?
328
+ dialog.ollama.model_not_found = The requested model ({model}) is not available in your Ollama.\nPlease download the model first by executing the command:\nollama pull {model}
329
+ dialog.ollama.not_installed = Ollama is not installed or not running.\nPlease install Ollama first by visiting:\nhttps://ollama.com/download
328
330
  dialog.plugin_settings = Plugin settings
329
331
  dialog.plugin.settings.btn.defaults.app = Load defaults
330
332
  dialog.plugin.settings.btn.defaults.user = Undo changes
@@ -952,8 +954,8 @@ settings.audio.input.rate.desc = Sampling rate, default: 44100
952
954
  settings.audio.input.stop_interval = Continuous recording auto-transcribe interval
953
955
  settings.audio.input.stop_interval.desc = Interval in seconds for auto-transcribe audio chunk, default: 10
954
956
  settings.audio.input.timeout = Recording timeout
955
- settings.audio.input.timeout.desc = Timeout (seconds) for auto-stop recording, 0 to disable, default: 120
956
957
  settings.audio.input.timeout.continuous = Enable timeout in continuous mode
958
+ settings.audio.input.timeout.desc = Timeout (seconds) for auto-stop recording, 0 to disable, default: 120
957
959
  settings.check_updates = Check for Updates on start
958
960
  settings.check_updates.bg = Check for Updates in the background
959
961
  settings.cmd.config.collapse = JSON params
@@ -1117,10 +1119,10 @@ settings.section.agent.llama = Agents
1117
1119
  settings.section.api_keys = API Keys
1118
1120
  settings.section.api_keys.anthropic = Anthropic
1119
1121
  settings.section.api_keys.azure_openai = Azure OpenAI
1122
+ settings.section.api_keys.deepseek = DeepSeek
1120
1123
  settings.section.api_keys.google = Google
1121
1124
  settings.section.api_keys.huggingface = HuggingFace
1122
1125
  settings.section.api_keys.openai = OpenAI
1123
- settings.section.api_keys.deepseek = DeepSeek
1124
1126
  settings.section.audio = Audio
1125
1127
  settings.section.ctx = Context
1126
1128
  settings.section.developer = Developer
@@ -293,6 +293,8 @@ dialog.license.label = Al utilizar este software, usted está aceptando los sigu
293
293
  dialog.license.title = Licencia
294
294
  dialog.logger.btn.clear = Limpiar
295
295
  dialog.logger.title = Logger
296
+ dialog.ollama.model_not_found = El modelo solicitado ({model}) no está disponible en tu Ollama.\nPor favor, descarga el modelo ejecutando el comando:\nollama pull {model}
297
+ dialog.ollama.not_installed = Ollama no está instalado o no está en funcionamiento.\nPor favor, instala Ollama primero visitando:\nhttps://ollama.com/download
296
298
  dialog.plugin_settings = Configuración de plugins
297
299
  dialog.plugin.settings.btn.defaults.app = Cargar predeterminados
298
300
  dialog.plugin.settings.btn.defaults.user = Deshacer cambios
@@ -777,8 +779,8 @@ settings.audio.input.rate.desc = Taux d'échantillonnage, par défaut : 44100
777
779
  settings.audio.input.stop_interval = Intervalo de transcripción automática continua
778
780
  settings.audio.input.stop_interval.desc = Intervalo en segundos para transcribir automáticamente el fragmento de audio, predeterminado: 10
779
781
  settings.audio.input.timeout = Tiempo de espera de grabación
780
- settings.audio.input.timeout.desc = Tiempo de espera (segundos) para detener la grabación automáticamente, 0 para deshabilitar, por defecto: 120
781
782
  settings.audio.input.timeout.continuous = Habilitar tiempo de espera en modo continuo
783
+ settings.audio.input.timeout.desc = Tiempo de espera (segundos) para detener la grabación automáticamente, 0 para deshabilitar, por defecto: 120
782
784
  settings.check_updates = Buscar actualizaciones al iniciar
783
785
  settings.check_updates.bg = Buscar actualizaciones en segundo plano
784
786
  settings.cmd.field.desc = Habilitar la herramienta `{cmd}`.
@@ -293,6 +293,8 @@ dialog.license.label = En utilisant ce logiciel, vous acceptez les termes suivan
293
293
  dialog.license.title = Licence
294
294
  dialog.logger.btn.clear = Effacer
295
295
  dialog.logger.title = Journal
296
+ dialog.ollama.model_not_found = Le modèle demandé ({model}) n'est pas disponible dans votre Ollama.\nVeuillez télécharger le modèle en exécutant la commande :\nollama pull {model}
297
+ dialog.ollama.not_installed = Ollama n'est pas installé ou n'est pas en cours d'exécution.\nVeuillez d'abord installer Ollama en visitant :\nhttps://ollama.com/download
296
298
  dialog.plugin_settings = Paramètres des plugins
297
299
  dialog.plugin.settings.btn.defaults.app = Charger les valeurs par défaut
298
300
  dialog.plugin.settings.btn.defaults.user = Annuler les modifications
@@ -777,8 +779,8 @@ settings.audio.input.rate.desc = Taux d'échantillonnage, par défaut : 44100
777
779
  settings.audio.input.stop_interval = Intervalle d'auto-transcription enregistrement continu
778
780
  settings.audio.input.stop_interval.desc = Intervalle en secondes pour la transcription automatique d'un morceau audio, par défaut : 10
779
781
  settings.audio.input.timeout = Délai d'enregistrement
780
- settings.audio.input.timeout.desc = Délai (secondes) pour l'arrêt automatique de l'enregistrement, 0 pour désactiver, par défaut : 120
781
782
  settings.audio.input.timeout.continuous = Activer le délai en mode continu
783
+ settings.audio.input.timeout.desc = Délai (secondes) pour l'arrêt automatique de l'enregistrement, 0 pour désactiver, par défaut : 120
782
784
  settings.check_updates = Vérifier les mises à jour au démarrage
783
785
  settings.check_updates.bg = Vérifier les mises à jour en arrière-plan
784
786
  settings.cmd.field.desc = Activer l'outil `{cmd}`.
@@ -293,6 +293,8 @@ dialog.license.label = Utilizzando questo software si accettano i seguenti termi
293
293
  dialog.license.title = Licenza
294
294
  dialog.logger.btn.clear = Pulisci
295
295
  dialog.logger.title = Logger
296
+ dialog.ollama.model_not_found = Il modello richiesto ({model}) non è disponibile nel tuo Ollama.\nPer favore, scarica il modello eseguendo il comando:\nollama pull {model}
297
+ dialog.ollama.not_installed = Ollama non è installato o non è in esecuzione.\nSi prega di installare prima Ollama visitando:\nhttps://ollama.com/download
296
298
  dialog.plugin_settings = Impostazioni plugin
297
299
  dialog.plugin.settings.btn.defaults.app = Carica i valori predefiniti
298
300
  dialog.plugin.settings.btn.defaults.user = Annulla modifiche
@@ -778,8 +780,8 @@ settings.audio.input.rate.desc = Frequenza di campionamento, predefinito: 44100
778
780
  settings.audio.input.stop_interval = Intervallo di trascrizione automatica continua
779
781
  settings.audio.input.stop_interval.desc = Intervallo in secondi per la trascrizione automatica del segmento audio, predefinito: 10
780
782
  settings.audio.input.timeout = Timeout di registrazione
781
- settings.audio.input.timeout.desc = Timeout (secondi) per l'arresto automatico della registrazione, 0 per disabilitare, predefinito: 120
782
783
  settings.audio.input.timeout.continuous = Abilita timeout in modalità continua
784
+ settings.audio.input.timeout.desc = Timeout (secondi) per l'arresto automatico della registrazione, 0 per disabilitare, predefinito: 120
783
785
  settings.check_updates = Controlla aggiornamenti all'avvio
784
786
  settings.check_updates.bg = Controlla gli aggiornamenti in background
785
787
  settings.cmd.field.desc = Abilita lo strumento `{cmd}`.
@@ -293,6 +293,8 @@ dialog.license.label = Korzystając z tego oprogramowania, akceptujesz następuj
293
293
  dialog.license.title = Licencja
294
294
  dialog.logger.btn.clear = Wyczyść
295
295
  dialog.logger.title = Logger
296
+ dialog.ollama.model_not_found = Żądany model ({model}) nie jest dostępny w twojej Ollama.\nProszę pobrać model, wykonując polecenie:\nollama pull {model}
297
+ dialog.ollama.not_installed = Ollama nie jest zainstalowana lub nie działa.\nProszę najpierw zainstalować Ollama, odwiedzając stronę:\nhttps://ollama.com/download
296
298
  dialog.plugin_settings = Ustawienia pluginów
297
299
  dialog.plugin.settings.btn.defaults.app = Wczytaj domyślne
298
300
  dialog.plugin.settings.btn.defaults.user = Cofnij zmiany
@@ -778,8 +780,8 @@ settings.audio.input.rate.desc = Częstotliwość próbkowania, domyślnie: 4410
778
780
  settings.audio.input.stop_interval = Interwał automatycznego transkrybowania nagrania ciągłego
779
781
  settings.audio.input.stop_interval.desc = Interwał w sekundach dla automatycznego transkrybowania fragmentu audio, domyślnie: 10
780
782
  settings.audio.input.timeout = Limit czasu nagrywania
781
- settings.audio.input.timeout.desc = Limit czasu (w sekundach) dla automatycznego zatrzymania nagrywania, 0 aby wyłączyć, domyślnie: 120
782
783
  settings.audio.input.timeout.continuous = Włącz limit czasu w trybie ciągłym
784
+ settings.audio.input.timeout.desc = Limit czasu (w sekundach) dla automatycznego zatrzymania nagrywania, 0 aby wyłączyć, domyślnie: 120
783
785
  settings.check_updates = Sprawdź aktualizacje przy starcie
784
786
  settings.check_updates.bg = Sprawdź aktualizacje w tle
785
787
  settings.cmd.field.desc = Włącz narzędzie `{cmd}`.
@@ -293,6 +293,8 @@ dialog.license.label = Використовуючи це програмне за
293
293
  dialog.license.title = Ліцензія
294
294
  dialog.logger.btn.clear = Очистити
295
295
  dialog.logger.title = Логер
296
+ dialog.ollama.model_not_found = Потрібна модель ({model}) не є доступною у вашій Ollama.\nБудь ласка, завантажте модель, виконавши команду:\nollama pull {model}
297
+ dialog.ollama.not_installed = Ollama не встановлено або не запущено.\nБудь ласка, спочатку встановіть Ollama, відвідавши:\nhttps://ollama.com/download
296
298
  dialog.plugin_settings = Налаштування плагінів
297
299
  dialog.plugin.settings.btn.defaults.app = Завантажити стандартні значення
298
300
  dialog.plugin.settings.btn.defaults.user = Відмінити зміни
@@ -777,8 +779,8 @@ settings.audio.input.rate.desc = Частота дискретизації, за
777
779
  settings.audio.input.stop_interval = Інтервал автоматичного транскрибування безперервного запису
778
780
  settings.audio.input.stop_interval.desc = Інтервал у секундах для автоматичного транскрибування фрагмента аудіо, за замовчуванням: 10
779
781
  settings.audio.input.timeout = Тайм-аут запису
780
- settings.audio.input.timeout.desc = Тайм-аут (в секундах) для автоматичної зупинки запису, 0 для відключення, за замовчуванням: 120
781
782
  settings.audio.input.timeout.continuous = Увімкнути тайм-аут у безперервному режимі
783
+ settings.audio.input.timeout.desc = Тайм-аут (в секундах) для автоматичної зупинки запису, 0 для відключення, за замовчуванням: 120
782
784
  settings.check_updates = Перевіряти оновлення при запуску
783
785
  settings.check_updates.bg = Перевіряти оновлення у фоновому режимі
784
786
  settings.cmd.field.desc = Увімкнути інструмент `{cmd}`.
@@ -303,6 +303,8 @@ dialog.models.editor.defaults.app.result = 恢復到模型工廠設置。
303
303
  dialog.models.editor.defaults.user.confirm = 撤銷當前更改?
304
304
  dialog.models.editor.defaults.user.result = 恢復模型用戶配置
305
305
  dialog.models.editor.delete.confirm = 您確定要刪除模型嗎?
306
+ dialog.ollama.model_not_found = 您的Ollama中没有请求的模型({model})。\n请先通过执行以下命令下载模型:\nollama pull {model}
307
+ dialog.ollama.not_installed = 未安装或未运行Ollama。\n请先通过访问以下网址安装Ollama:\nhttps://ollama.com/download
306
308
  dialog.plugin_settings = 插件設置
307
309
  dialog.plugin.settings.btn.defaults.app = 加載默認值
308
310
  dialog.plugin.settings.btn.defaults.user = 撤銷更改
@@ -879,8 +881,8 @@ settings.audio.input.rate.desc = 采样率,默认: 44100
879
881
  settings.audio.input.stop_interval = 连续录音自动转录间隔
880
882
  settings.audio.input.stop_interval.desc = 自动转录音频片段的间隔(以秒为单位),默认:10
881
883
  settings.audio.input.timeout = 录音超时
882
- settings.audio.input.timeout.desc = 自动停止录音的超时时间(秒),0为禁用,默认:120
883
884
  settings.audio.input.timeout.continuous = 在连续模式下启用超时
885
+ settings.audio.input.timeout.desc = 自动停止录音的超时时间(秒),0为禁用,默认:120
884
886
  settings.check_updates = 啟動時檢查更新
885
887
  settings.check_updates.bg = 在後台檢查更新
886
888
  settings.cmd.field.desc = 启用 `{cmd}` 工具。
pygpt_net/item/model.py CHANGED
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.15 00:00:00 #
9
+ # Updated Date: 2025.02.02 02:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -28,6 +28,7 @@ class ModelItem:
28
28
  self.ctx = 0
29
29
  self.tokens = 0
30
30
  self.default = False
31
+ self.extra = {}
31
32
 
32
33
  def from_dict(self, data: dict):
33
34
  """
@@ -48,6 +49,8 @@ class ModelItem:
48
49
  self.tokens = data['tokens']
49
50
  if 'default' in data:
50
51
  self.default = data['default']
52
+ if 'extra' in data:
53
+ self.extra = data['extra']
51
54
 
52
55
  # multimodal
53
56
  if 'multimodal' in data:
@@ -97,6 +100,7 @@ class ModelItem:
97
100
  data['tokens'] = self.tokens
98
101
  data['default'] = self.default
99
102
  data['multimodal'] = ','.join(self.multimodal)
103
+ data['extra'] = self.extra
100
104
 
101
105
  data['langchain.provider'] = None
102
106
  data['langchain.mode'] = ""
@@ -180,6 +184,28 @@ class ModelItem:
180
184
  """
181
185
  return len(self.multimodal) > 0
182
186
 
187
+ def is_ollama(self) -> bool:
188
+ """
189
+ Check if model is Ollama
190
+
191
+ :return: True if Ollama
192
+ """
193
+ if self.llama_index is None:
194
+ return False
195
+ return "ollama" in self.llama_index.get("provider", "")
196
+
197
+ def get_ollama_model(self) -> str:
198
+ """
199
+ Get Ollama model ID
200
+
201
+ :return: model ID
202
+ """
203
+ if "args" in self.llama_index:
204
+ for arg in self.llama_index["args"]:
205
+ if arg["name"] == "model":
206
+ return arg["value"]
207
+ return ""
208
+
183
209
  def has_mode(self, mode: str) -> bool:
184
210
  """
185
211
  Check if model has mode
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.12.14 22:00:00 #
9
+ # Updated Date: 2025.02.02 02:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -32,9 +32,7 @@ class JsonFileProvider(BaseProvider):
32
32
  self.config_file = 'models.json'
33
33
 
34
34
  def install(self):
35
- """
36
- Install provider data files
37
- """
35
+ """Install provider data files"""
38
36
  dst = os.path.join(self.window.core.config.path, self.config_file)
39
37
  if not os.path.exists(dst):
40
38
  src = os.path.join(self.window.core.config.get_app_path(), 'data', 'config', self.config_file)
@@ -166,6 +164,7 @@ class JsonFileProvider(BaseProvider):
166
164
  'tokens': item.tokens,
167
165
  'default': item.default,
168
166
  'multimodal': item.multimodal,
167
+ 'extra': item.extra,
169
168
  }
170
169
 
171
170
  @staticmethod
@@ -194,6 +193,8 @@ class JsonFileProvider(BaseProvider):
194
193
  item.default = data['default']
195
194
  if 'multimodal' in data:
196
195
  item.multimodal = data['multimodal']
196
+ if 'extra' in data:
197
+ item.extra = data['extra']
197
198
 
198
199
  def dump(self, item: ModelItem) -> str:
199
200
  """
@@ -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.02.01 11:00:00 #
9
+ # Updated Date: 2025.02.02 02:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from packaging.version import parse as parse_version, Version
@@ -490,6 +490,19 @@ class Patch:
490
490
  model.name = model.id
491
491
  updated = True
492
492
 
493
+ # < 2.5.4 <--- add o3-mini, update output tokens in o1, o1-mini, o1-preview
494
+ if old < parse_version("2.5.4"):
495
+ print("Migrating models from < 2.5.4...")
496
+ for id in data:
497
+ model = data[id]
498
+ if model.id == "o1":
499
+ model.tokens = 100000
500
+ elif model.id == "o1-mini":
501
+ model.tokens = 65536
502
+ elif model.id == "o1-preview":
503
+ model.tokens = 65536
504
+ updated = True
505
+
493
506
  # update file
494
507
  if updated:
495
508
  data = dict(sorted(data.items()))
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2024.11.26 19:00:00 #
9
+ # Updated Date: 2025.02.02 02:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from httpx_socks import SyncProxyTransport
@@ -199,6 +199,16 @@ class Gpt:
199
199
  ctx.audio_expires_ts = response.choices[0].message.audio.expires_at
200
200
  ctx.is_audio = True
201
201
  output = response.choices[0].message.audio.transcript # from transcript
202
+ self.chat.audio_prev_expires_ts = ctx.audio_expires_ts
203
+ self.chat.audio_prev_id = ctx.audio_id
204
+ elif response.choices[0].message and not response.choices[0].message.audio:
205
+ output = response.choices[0].message.content
206
+ ctx.audio_id = self.chat.audio_prev_id
207
+ ctx.audio_expires_ts = self.chat.audio_prev_expires_ts
208
+ if response.choices[0].message.tool_calls:
209
+ ctx.tool_calls = self.window.core.command.unpack_tool_calls(
210
+ response.choices[0].message.tool_calls,
211
+ )
202
212
 
203
213
  ctx.set_output(output, ai_name)
204
214
  ctx.set_tokens(
@@ -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.01.31 19:00:00 #
9
+ # Updated Date: 2025.02.02 02:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -35,6 +35,8 @@ class Chat:
35
35
  """
36
36
  self.window = window
37
37
  self.input_tokens = 0
38
+ self.audio_prev_id = None
39
+ self.audio_prev_expires_ts = None
38
40
 
39
41
  def send(
40
42
  self,
@@ -91,32 +93,35 @@ class Chat:
91
93
  # extra API kwargs
92
94
  response_kwargs = {}
93
95
 
94
- # tools / functions >>>>>>>>>> TMP DISABLED FOR AUDIO <<<<<<<<<<
96
+ # tools / functions
95
97
  tools = []
96
- if mode not in [MODE_AUDIO]:
97
- if functions is not None and isinstance(functions, list):
98
- for function in functions:
99
- if str(function['name']).strip() == '' or function['name'] is None:
100
- continue
101
- params = {}
102
- if function['params'] is not None and function['params'] != "":
103
- params = json.loads(function['params']) # unpack JSON from string
104
- tools.append({
105
- "type": "function",
106
- "function": {
107
- "name": function['name'],
108
- "parameters": params,
109
- "description": function['desc'],
110
- }
111
- })
98
+ if functions is not None and isinstance(functions, list):
99
+ for function in functions:
100
+ if str(function['name']).strip() == '' or function['name'] is None:
101
+ continue
102
+ params = {}
103
+ if function['params'] is not None and function['params'] != "":
104
+ params = json.loads(function['params']) # unpack JSON from string
105
+ tools.append({
106
+ "type": "function",
107
+ "function": {
108
+ "name": function['name'],
109
+ "parameters": params,
110
+ "description": function['desc'],
111
+ }
112
+ })
112
113
 
113
114
  # fix: o1 compatibility
114
- if model.id is not None and not model.id.startswith("o1"):
115
+ if model.id is not None and not model.id.startswith("o1") and not model.id.startswith("o3"):
115
116
  response_kwargs['presence_penalty'] = self.window.core.config.get('presence_penalty')
116
117
  response_kwargs['frequency_penalty'] = self.window.core.config.get('frequency_penalty')
117
118
  response_kwargs['temperature'] = self.window.core.config.get('temperature')
118
119
  response_kwargs['top_p'] = self.window.core.config.get('top_p')
119
120
 
121
+ # extra arguments, o3 only
122
+ if model.extra and "reasoning_effort" in model.extra:
123
+ response_kwargs['reasoning_effort'] = model.extra["reasoning_effort"]
124
+
120
125
  # tool calls are not supported for o1-mini and o1-preview
121
126
  if (model.id is not None
122
127
  and model.id not in ["o1-mini", "o1-preview"]):
@@ -124,11 +129,12 @@ class Chat:
124
129
  response_kwargs['tools'] = tools
125
130
 
126
131
  if max_tokens > 0:
127
- if not model.id.startswith("o1"):
132
+ if not model.id.startswith("o1") and not model.id.startswith("o3"):
128
133
  response_kwargs['max_tokens'] = max_tokens
129
134
  else:
130
135
  response_kwargs['max_completion_tokens'] = max_tokens
131
136
 
137
+ # o1 models do not support streaming
132
138
  if model.id is not None and model.id.startswith("o1"):
133
139
  stream = False
134
140
 
@@ -182,7 +188,8 @@ class Chat:
182
188
  # tokens config
183
189
  mode = MODE_CHAT
184
190
  allowed_system = True
185
- if model.id is not None and model.id.startswith("o1"):
191
+ if (model.id is not None
192
+ and model.id in ["o1-mini", "o1-preview"]):
186
193
  allowed_system = False
187
194
 
188
195
  used_tokens = self.window.core.tokens.from_user(
@@ -235,14 +242,22 @@ class Chat:
235
242
  "content": item.final_output,
236
243
  }
237
244
  # append previous audio ID
238
- if MODE_AUDIO in model.mode and item.audio_id:
239
- # at first check expires_at - expired audio throws error in API
240
- current_timestamp = time.time()
241
- audio_timestamp = int(item.audio_expires_ts) if item.audio_expires_ts else 0
242
- if audio_timestamp and audio_timestamp > current_timestamp:
243
- msg["audio"] = {
244
- "id": item.audio_id
245
- }
245
+ if MODE_AUDIO in model.mode:
246
+ if item.audio_id:
247
+ # at first check expires_at - expired audio throws error in API
248
+ current_timestamp = time.time()
249
+ audio_timestamp = int(item.audio_expires_ts) if item.audio_expires_ts else 0
250
+ if audio_timestamp and audio_timestamp > current_timestamp:
251
+ msg["audio"] = {
252
+ "id": item.audio_id
253
+ }
254
+ elif self.audio_prev_id:
255
+ current_timestamp = time.time()
256
+ audio_timestamp = int(self.audio_prev_expires_ts) if self.audio_prev_expires_ts else 0
257
+ if audio_timestamp and audio_timestamp > current_timestamp:
258
+ msg["audio"] = {
259
+ "id": self.audio_prev_id
260
+ }
246
261
  messages.append(msg)
247
262
 
248
263
  # use vision and audio if available in current model
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pygpt-net
3
- Version: 2.5.3
3
+ Version: 2.5.5
4
4
  Summary: Desktop AI Assistant powered by models: OpenAI o1, GPT-4o, GPT-4, GPT-4 Vision, GPT-3.5, DALL-E 3, Llama 3, Mistral, Gemini, Claude, DeepSeek, Bielik, and other models supported by Langchain, Llama Index, and Ollama. Features include chatbot, text completion, image generation, vision analysis, speech-to-text, internet access, file handling, command execution and more.
5
5
  Home-page: https://pygpt.net
6
6
  License: MIT
@@ -94,7 +94,7 @@ Description-Content-Type: text/markdown
94
94
 
95
95
  [![pygpt](https://snapcraft.io/pygpt/badge.svg)](https://snapcraft.io/pygpt)
96
96
 
97
- Release: **2.5.3** | build: **2025.02.01** | Python: **>=3.10, <3.13**
97
+ Release: **2.5.5** | build: **2025.02.02** | Python: **>=3.10, <3.13**
98
98
 
99
99
  > Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
100
100
  >
@@ -376,6 +376,10 @@ To use microphone in Snap version you must connect the microphone with:
376
376
  sudo snap connect pygpt:audio-record :audio-record
377
377
  ```
378
378
 
379
+ **Access to microphone and audio in Windows version:**
380
+
381
+ If you have a problems with audio or microphone in the non-binary PIP/Python version on Windows, check to see if FFmpeg is installed. If it's not, install it and add it to the PATH. You can find a tutorial on how to do this here: https://phoenixnap.com/kb/ffmpeg-windows. The binary version already includes FFmpeg.
382
+
379
383
  **Windows and VC++ Redistributable**
380
384
 
381
385
  On Windows, the proper functioning requires the installation of the `VC++ Redistributable`, which can be found on the Microsoft website:
@@ -4052,6 +4056,18 @@ may consume additional tokens that are not displayed in the main window.
4052
4056
 
4053
4057
  ## Recent changes:
4054
4058
 
4059
+ **2.5.5 (2025-02-02)**
4060
+
4061
+ - Fix: system prompt apply.
4062
+ - Added calendar live update on tab change.
4063
+ - Added API Key monit at launch displayed only once.
4064
+
4065
+ **2.5.4 (2025-02-02)**
4066
+
4067
+ - Added new models: `o3-mini` and `gpt-4o-mini-audio-preview`.
4068
+ - Enabled tool calls in Chat with Audio mode.
4069
+ - Added a check to verify if Ollama is running and if the model is available.
4070
+
4055
4071
  **2.5.3 (2025-02-01)**
4056
4072
 
4057
4073
  - Fix: Snap permission denied bug.
@@ -1,9 +1,9 @@
1
- CHANGELOG.md,sha256=0otwm_0CNzSr9PIFeEQp06aAsZobUQDCwSBR4aVTxWA,82788
2
- README.md,sha256=i2voQ_07RT7LtSE_TJa7Ucx5opMXVCAJKofJPYQuhzs,163834
1
+ CHANGELOG.md,sha256=uIgNsgmVYgLRl9OpfPgjxhzXTq83YYJwbIo_sgsxoEQ,83148
2
+ README.md,sha256=lLm4OYfl5OLDtCQYP35-xObvWBckIn2vTe0dSSDMqJE,164569
3
3
  icon.png,sha256=CzcINJaU23a9hNjsDlDNbyuiEvKZ4Wg6DQVYF6SpuRg,13970
4
- pygpt_net/CHANGELOG.txt,sha256=347g2SJ6pfkZCSE-7xaGPyVLaK5mb3UIK365YIbbs5o,81269
4
+ pygpt_net/CHANGELOG.txt,sha256=ABzJ_GvFmUqLoLh8Sz3pvDI1FJeWHstUq9osD4SlijM,81619
5
5
  pygpt_net/LICENSE,sha256=dz9sfFgYahvu2NZbx4C1xCsVn9GVer2wXcMkFRBvqzY,1146
6
- pygpt_net/__init__.py,sha256=Oij8fhgNj7ruc8smFqTe5uXrV7BxJ2Yj6zFbEn_ZSu8,1372
6
+ pygpt_net/__init__.py,sha256=VgcIjhZrvmGpUZxLoV50V_zfgAvVi9PaIlJecGKzXkg,1372
7
7
  pygpt_net/app.py,sha256=XXjn9XaKHGRcsHN8mMuqbRHAg8_Da0GLmACUU9ddjBc,16217
8
8
  pygpt_net/config.py,sha256=Qc1FOBtTf3O6A6-6KoqUGtoJ0u8hXQeowvCVbZFwtik,16405
9
9
  pygpt_net/container.py,sha256=BemiVZPpPNIzfB-ZvnZeeBPFu-AcX2c30OqYFylEjJc,4023
@@ -34,7 +34,7 @@ pygpt_net/controller/chat/command.py,sha256=3fNYvgt9NmCZPNrlqfLXivmN63ZRsuFseNjj
34
34
  pygpt_net/controller/chat/common.py,sha256=-BJa2wHRHLDY-BHgp36GFhSr0yGNclkJGMiJQDktHaA,13958
35
35
  pygpt_net/controller/chat/files.py,sha256=VFiiTeWTYR15Nwf1CTLEmeXqlmRHzNQVkNaU6hY2Gz4,2846
36
36
  pygpt_net/controller/chat/image.py,sha256=XghPvTP8n3DxFgRrZ3bCfeLNTvOKSxbl-ewTwUTd4HM,8308
37
- pygpt_net/controller/chat/input.py,sha256=FD3s1ytwvxSIje_e50BPNGq9UUV9XNhk0qUvoaNMeFo,10244
37
+ pygpt_net/controller/chat/input.py,sha256=H6gmYjD3fSzSD_Xj7bpR0JooRtNgsyVkU6kobBUoSpk,10946
38
38
  pygpt_net/controller/chat/output.py,sha256=VuziVuI9Lj_4kZmTWvXg8t2tq4w9uD7J1g2MqlMCV6s,9272
39
39
  pygpt_net/controller/chat/render.py,sha256=h23QCvMDIAaCpInqwwADa4G43sSpSn-CE5celnk1LSc,17206
40
40
  pygpt_net/controller/chat/response.py,sha256=UnTnnn2on-Qg2_T_QcQcklTCcuq6XhyLLxs1fn-D9Tg,9450
@@ -75,10 +75,10 @@ pygpt_net/controller/lang/custom.py,sha256=o_JpcFmDCkuqzNzA_esX7Ajg61O14tOr17ZKc
75
75
  pygpt_net/controller/lang/mapping.py,sha256=uQz9GasYP6CAVvzV_54v5d0P0uPcG9z5Hjv8HITNA-o,23600
76
76
  pygpt_net/controller/lang/plugins.py,sha256=JEiOajXB7BfxPPfBkYl82K1_gKpRVcMEPNPwsNAJ6WU,3879
77
77
  pygpt_net/controller/lang/settings.py,sha256=awPEshWbHlOt11Zyg_uQKlbYjvABXrQ7QMHdpu2L9ZI,2634
78
- pygpt_net/controller/launcher/__init__.py,sha256=om6aEZx31cSiCuShnDHp5Fs-Lj6Rb_pmbOO5fBweEWU,1899
78
+ pygpt_net/controller/launcher/__init__.py,sha256=YykWa_vl8HEsH8wMz2aQsLlGqn62dIRpQ-OZzLDomgM,2063
79
79
  pygpt_net/controller/layout/__init__.py,sha256=9R30zrZtvedAf1OxQLzxDWt8o2XirUq0bkcFRnpCztg,11433
80
80
  pygpt_net/controller/mode/__init__.py,sha256=TY3y5fD8kpqLCmDyyCoEL_1OTSOXLnHVdIvH2lGUTew,7303
81
- pygpt_net/controller/model/__init__.py,sha256=W1JOEL_hk6kcGyQGDRmwtaTLndQAC8x7S2KMzSyWLJM,5839
81
+ pygpt_net/controller/model/__init__.py,sha256=qRXFmBje0zu_obAku3qTkhnr01z5D5yDN4gbX347NMA,5931
82
82
  pygpt_net/controller/model/editor.py,sha256=8UaNi_Ui5ooPdio9_mw4ECihTxE7Iq5n5hDl41D3hu0,12675
83
83
  pygpt_net/controller/notepad/__init__.py,sha256=wgnvLtTBuq6W6Eio3BgjrESPRNLRRVyqUutpBNb9T7k,9267
84
84
  pygpt_net/controller/painter/__init__.py,sha256=1Ekmr2a3irDkSb2wowiPXhW59rfdZOW1tdbxeubph-k,2747
@@ -102,7 +102,7 @@ pygpt_net/controller/theme/nodes.py,sha256=6SCKMGQ5SZdKgy4t69raiikTLQDPPkjoYTPwl
102
102
  pygpt_net/controller/tools/__init__.py,sha256=b_yt413iRUI9fWHzZGdtM4333UjzrJb-zmq_exYTgy4,2723
103
103
  pygpt_net/controller/ui/__init__.py,sha256=WsH7OzMS_ixCwuHeSajv2E3irPo9B4H3dQe7Svd_71k,5903
104
104
  pygpt_net/controller/ui/mode.py,sha256=8mw_tmRo7sArvgv-k1yfwx5SCfVOkwdc96U8ZiW83Q0,10231
105
- pygpt_net/controller/ui/tabs.py,sha256=xl3KMq7uyC-Vja7MTLUG_4Ade7CtU85U5pj3-ka-aO4,20154
105
+ pygpt_net/controller/ui/tabs.py,sha256=7DxDCkkx0mPJ8VbVp-mRt8cb2Mgjbv7Jv3OOVkJp91k,20321
106
106
  pygpt_net/controller/ui/vision.py,sha256=KrP8wFuuz-gsO9iwbLDnzvC5iqWVlWjFarQ27HkHdEg,2303
107
107
  pygpt_net/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
108
  pygpt_net/core/access/__init__.py,sha256=rFKp9xMsuJHS_wxiMEMMHVRd5lXdkPj7LuObAIdQFBY,942
@@ -136,7 +136,7 @@ pygpt_net/core/camera/__init__.py,sha256=K74D_4Q_GN1M66pTH6H2D1em_FlWohGLgb0aDQ6
136
136
  pygpt_net/core/chain/__init__.py,sha256=C7Xm88bRblcyM4e0wZMFG-6SQCdw_frXN9kqnWzce60,3541
137
137
  pygpt_net/core/chain/chat.py,sha256=5LxPWHkocjrIAAwrdDH1ss6knAnh4_owfbHPsOQYSws,5238
138
138
  pygpt_net/core/chain/completion.py,sha256=GGRA-q6sQgPnSibiwHBwk7jgT0MgOkka1_jK2-IiBPg,5698
139
- pygpt_net/core/command/__init__.py,sha256=0in4peAOe2cH3B0CA4Ni_LhEU3AfKaSG9iMf1d0z0Kk,24303
139
+ pygpt_net/core/command/__init__.py,sha256=Yj0nL_gtHjSTBbw6A-jpgTDz6JgE86FvfH82eqtM40g,24279
140
140
  pygpt_net/core/ctx/__init__.py,sha256=5W5ZPYE5rkbBRRdL7mT9MFvnWZKjib0cMBiC-9HFl28,43311
141
141
  pygpt_net/core/ctx/bag.py,sha256=-LRhttDRiQkw1Msl3kbGQYaY9w8zqn1o0miNRdqjHtQ,1286
142
142
  pygpt_net/core/ctx/container.py,sha256=tdPHPRfTi8yGY1MZGgFtYtx2lvc5K9OTqhjde16wivY,4232
@@ -197,7 +197,7 @@ pygpt_net/core/installer/__init__.py,sha256=I7ALQy8P3SG7iOY04gDQpRVmSFNCtk83sz90
197
197
  pygpt_net/core/llm/__init__.py,sha256=cns_L7QeKXwq22Jj09gOG5PPnX0PxB3dagcdiXZvBFI,1291
198
198
  pygpt_net/core/locale/__init__.py,sha256=KcG4lwtiI7mqtS8ojX2A2IuO0kCYGQP0-bwuBqzx_mc,5484
199
199
  pygpt_net/core/models/__init__.py,sha256=W4UaqC8KmlgesV151OGHOLbUDf2GPGNs7SWe7mCL2Fo,10043
200
- pygpt_net/core/models/ollama.py,sha256=RGE1mVPpNIRuCqGIvTQEqEQDirwj9lUy0R5rGG229LM,1388
200
+ pygpt_net/core/models/ollama.py,sha256=R73J1X7sWhjg5DiPCQNbGiZyKZmvhb5ROU1kyELWBbM,2457
201
201
  pygpt_net/core/modes/__init__.py,sha256=d3Wju5zo8DaUxPINPOAkOaKy0uuL9DryVubB4xiEqAU,3110
202
202
  pygpt_net/core/notepad/__init__.py,sha256=lsgn4zXapg51227oTO3fr93FyltuEMEyJCNSAOki61o,4246
203
203
  pygpt_net/core/platforms/__init__.py,sha256=QygvsQadTpWW1K4_GraO38r7u82sYpgz3FI4iv_Dodw,4563
@@ -250,9 +250,9 @@ pygpt_net/css_rc.py,sha256=i13kX7irhbYCWZ5yJbcMmnkFp_UfS4PYnvRFSPF7XXo,11349
250
250
  pygpt_net/data/audio/click_off.mp3,sha256=aNiRDP1pt-Jy7ija4YKCNFBwvGWbzU460F4pZWZDS90,65201
251
251
  pygpt_net/data/audio/click_on.mp3,sha256=qfdsSnthAEHVXzeyN4LlC0OvXuyW8p7stb7VXtlvZ1k,65201
252
252
  pygpt_net/data/audio/ok.mp3,sha256=LTiV32pEBkpUGBkKkcOdOFB7Eyt_QoP2Nv6c5AaXftk,32256
253
- pygpt_net/data/config/config.json,sha256=nUdrZmPjtTUp0hzfth_GZYTUZkhedc_rZhc-q0ODfjc,19884
254
- pygpt_net/data/config/models.json,sha256=evUfeCh9cV-MRmBNlRyal-_LzLQ9eZ2hu7VYDiOoiA0,79220
255
- pygpt_net/data/config/modes.json,sha256=s02H8WgA1KKgeIyk5CeHlBFg_E2vuB_agz1Eb7bEoUM,1921
253
+ pygpt_net/data/config/config.json,sha256=gpKCf09K2bnLv8x-gS_1jCq5hNvY7au9nHVSdsWOEPE,19884
254
+ pygpt_net/data/config/models.json,sha256=eCbwMBQf2yUZE0tmn6LBdc27Kue6VWXk1dqAhFl95ns,88881
255
+ pygpt_net/data/config/modes.json,sha256=53R2p3vJPfG1SzSuGX1gLbIyt_ejcHItZRy5DXYVBfM,1921
256
256
  pygpt_net/data/config/presets/agent_openai.json,sha256=vMTR-soRBiEZrpJJHuFLWyx8a3Ez_BqtqjyXgxCAM_Q,733
257
257
  pygpt_net/data/config/presets/agent_openai_assistant.json,sha256=awJw9lNTGpKML6SJUShVn7lv8AXh0oic7wBeyoN7AYs,798
258
258
  pygpt_net/data/config/presets/agent_planner.json,sha256=a6Rv58Bnm2STNWB0Rw_dGhnsz6Lb3J8_GwsUVZaTIXc,742
@@ -1488,14 +1488,14 @@ pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff,sha256=4U_tArGrp86fW
1488
1488
  pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff2,sha256=cdUX1ngneHz6vfGGkUzDNY7aU543kxlB8rL9SiH2jAs,13568
1489
1489
  pygpt_net/data/js/katex/katex.min.css,sha256=lVaKnUaQNG4pI71WHffQZVALLQF4LMZEk4nOia8U9ow,23532
1490
1490
  pygpt_net/data/js/katex/katex.min.js,sha256=KLASOtKS2x8pUxWVzCDmlWJ4jhuLb0vtrgakbD6gDDo,276757
1491
- pygpt_net/data/locale/locale.de.ini,sha256=t4zR4P9gC7qxw8AfHjk4lV4mQGzzjVQN74mBrAxISP8,64241
1492
- pygpt_net/data/locale/locale.en.ini,sha256=womiO7pcyNd7sAojhO2SQswNLeBCxf7d8qX8uq4xHNw,76867
1493
- pygpt_net/data/locale/locale.es.ini,sha256=SMR7lgEpGOK1MAWJFvwdTICRZR2Zz9GCAxmIn6lHQ0U,64461
1494
- pygpt_net/data/locale/locale.fr.ini,sha256=zSyjr4HGgJt8ooKv9UBkVag2tOeg2ZbRE-J4cKRNxaI,66483
1495
- pygpt_net/data/locale/locale.it.ini,sha256=3WbsgyhElEuTUd74HRLIT5SFN06xLsCCO9My2hholUo,63215
1496
- pygpt_net/data/locale/locale.pl.ini,sha256=wjmVHr72v-R-ZJIadEbCCy3Eb1mWRb8WZXQrUgeXh48,63310
1497
- pygpt_net/data/locale/locale.uk.ini,sha256=HfHqZt31oTpoOBajAsxySBY2g5DT-5s9q35TVD8_K0s,88193
1498
- pygpt_net/data/locale/locale.zh.ini,sha256=yFOgI_tF0Fd2P8f2SIXIwdMfkGkOmT1WgD_i6Nz1Cwc,64928
1491
+ pygpt_net/data/locale/locale.de.ini,sha256=j3Wfno6oS_1G_ZyCC8RaicXz6SREpilN8e034zEYPl0,64611
1492
+ pygpt_net/data/locale/locale.en.ini,sha256=oplJAGOC8JXUtv4o_eOim9CaIZVLm8HqwNE-t4Af5XY,77183
1493
+ pygpt_net/data/locale/locale.es.ini,sha256=BYaHtKQCIYgXH-dMait7dU5LL_n50uo1PNRhOF9Vayw,64794
1494
+ pygpt_net/data/locale/locale.fr.ini,sha256=lidia86KWGyWXiKz7pjZx9giTaELVndduS7ai91lAFc,66840
1495
+ pygpt_net/data/locale/locale.it.ini,sha256=jVsWf8fm3E5FDzVxxm5Y2YMfJsiqU1rAmGRVo0h1jeU,63544
1496
+ pygpt_net/data/locale/locale.pl.ini,sha256=nItsy01XhY7whQ_kmIloNXHb55AVOxqayfv41DQEbIo,63639
1497
+ pygpt_net/data/locale/locale.uk.ini,sha256=SnanhyKTGk9uex5OmRGoDW-ywt13e2LNoXkFyrtO34A,88641
1498
+ pygpt_net/data/locale/locale.zh.ini,sha256=Dp5l607JDnZfinhJn2yw73cbALjQ6VYNZPTPU_fcpBk,65214
1499
1499
  pygpt_net/data/locale/plugin.agent.de.ini,sha256=BY28KpfFvgfVYJzcw2o5ScWnR4uuErIYGyc3NVHlmTw,1714
1500
1500
  pygpt_net/data/locale/plugin.agent.en.ini,sha256=88LkZUpilbV9l4QDbMyIdq_K9sbWt-CQPpavEttPjJU,1489
1501
1501
  pygpt_net/data/locale/plugin.agent.es.ini,sha256=bqaJQne8HPKFVtZ8Ukzo1TSqVW41yhYbGUqW3j2x1p8,1680
@@ -1676,7 +1676,7 @@ pygpt_net/item/calendar_note.py,sha256=ZXTIChVaH_E7ju_CJ2LI77C4ikvd2G-c3tRo7UG9u
1676
1676
  pygpt_net/item/ctx.py,sha256=kfY_t8-SCKjeSm39xtG2C1sbCBxmXWc0yNr0yf85gtA,18904
1677
1677
  pygpt_net/item/index.py,sha256=gDQYPlhwHF0QVGwX4TFGxHyO7pt5tqHcuyc3DPgPCA0,1681
1678
1678
  pygpt_net/item/mode.py,sha256=bhX6ZOvTKsiLI6-N-7cuJ_9izlAqq6bsXF1FjufJvfw,600
1679
- pygpt_net/item/model.py,sha256=_VxfztYd0HBnsBsymGLGqemM2zwPjWKlEEWxy3a1cjw,7482
1679
+ pygpt_net/item/model.py,sha256=gP3WKq9XWwoI-aOnr62t6va-4IV13fjJP_6o0Javg2k,8166
1680
1680
  pygpt_net/item/notepad.py,sha256=EuTgvDEpxQL-4QRfbkUfKtUG7nkTJaYe2K13ZeN173I,1508
1681
1681
  pygpt_net/item/preset.py,sha256=413IdBxlY7zA895dEPNJMI6OJVRTQu0vlacEb0CY8EU,5430
1682
1682
  pygpt_net/item/prompt.py,sha256=oX3BA9n2E6fco2dMZu7DiO3GQgqPj3isFjPcTcFXw9s,1558
@@ -1849,8 +1849,8 @@ pygpt_net/provider/core/mode/json_file.py,sha256=JFLwJ2DN-gyWliVDBHEY3W4tmok4u_r
1849
1849
  pygpt_net/provider/core/mode/patch.py,sha256=VS2KCYW05jxLd-lcStNY1k4fHKUUrVVLTdRsu5zQwC8,837
1850
1850
  pygpt_net/provider/core/model/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
1851
1851
  pygpt_net/provider/core/model/base.py,sha256=L1x2rHha8a8hnCUYxZr88utay1EWEx5qBXW_2acpAN0,1319
1852
- pygpt_net/provider/core/model/json_file.py,sha256=g0u1tbOm7QKutjD5mZLRwzmYmoIqA8b6bDQ6wKbucYM,6484
1853
- pygpt_net/provider/core/model/patch.py,sha256=u7K6-et8bAeBrhGXgmESC7FiM8JpeBhFpaO6TOGs8Vg,23248
1852
+ pygpt_net/provider/core/model/json_file.py,sha256=k6M6KhiXJ0xsXdYXUFsHPcaJ-v_dMkzX8311Rk-d57s,6566
1853
+ pygpt_net/provider/core/model/patch.py,sha256=jzBXk1N83tqgIffSLHq165zkUVTIVy9KdSsNftR6kgQ,23816
1854
1854
  pygpt_net/provider/core/notepad/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
1855
1855
  pygpt_net/provider/core/notepad/base.py,sha256=7aPhild8cALTaN3JEbI0YrkIW1DRIycGQWTfsdH6WcQ,1323
1856
1856
  pygpt_net/provider/core/notepad/db_sqlite/__init__.py,sha256=DQnVKJxvLq-6zlRlLk3MXSQZEObFtcQ5p5mEnuRzwYE,3104
@@ -1868,10 +1868,10 @@ pygpt_net/provider/core/preset/patch.py,sha256=uGeOqz-JnFVXHAjnlto5I79O-HNXMLRSJ
1868
1868
  pygpt_net/provider/core/prompt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1869
1869
  pygpt_net/provider/core/prompt/base.py,sha256=EYUA30T1QwJ9RSD0uW5x6VEstgIXNwgutmaXI64BWhw,1304
1870
1870
  pygpt_net/provider/core/prompt/json_file.py,sha256=5yfW1RgEa36tX4-ntze4PavWLry0YG43D2LO23_MrzE,4838
1871
- pygpt_net/provider/gpt/__init__.py,sha256=1nY17w9PqNCQs4gY77CkQgh4PhLZDfJ81or6czWw_4c,8614
1871
+ pygpt_net/provider/gpt/__init__.py,sha256=QZgTYRhe9rV2m4e60VTtUxgkYZFEwTX0H4aILSGdV0A,9265
1872
1872
  pygpt_net/provider/gpt/assistants.py,sha256=DSw1YB_J9n2rFD5CPDWZy59I38VSG6uLpYydGLTUPMQ,14083
1873
1873
  pygpt_net/provider/gpt/audio.py,sha256=frHElxYVaHYkNDCMJ9tQMoGqxSaZ-s5oPlAEHUAckkc,2032
1874
- pygpt_net/provider/gpt/chat.py,sha256=ibUCKOsR0FnJPGBcFmchwxa-3VRJu2sztUcWEbkTOgw,9747
1874
+ pygpt_net/provider/gpt/chat.py,sha256=UlxRFZghIB-zBoCOxMlX6vqNveKiQi2RdU3dOwo0Fb4,10512
1875
1875
  pygpt_net/provider/gpt/completion.py,sha256=OusKOb4G11aYRJUjRWcMsf80cRQQvee9DzRe99ubLmc,6164
1876
1876
  pygpt_net/provider/gpt/image.py,sha256=ZqYrtVTcfPa8Kf08pWLKy1Zhvi6pu61GBlslRBauoK0,8967
1877
1877
  pygpt_net/provider/gpt/store.py,sha256=FaVd7SBC_QQ0W26_odJwcrLH54CSq0UZXZnuwIhRm54,17315
@@ -2180,8 +2180,8 @@ pygpt_net/ui/widget/textarea/web.py,sha256=2LebPHa_e5lvBqnIVzjwsLcFMoc11BonXgAUs
2180
2180
  pygpt_net/ui/widget/vision/__init__.py,sha256=8HT4tQFqQogEEpGYTv2RplKBthlsFKcl5egnv4lzzEw,488
2181
2181
  pygpt_net/ui/widget/vision/camera.py,sha256=T8b5cmK6uhf_WSSxzPt_Qod8JgMnst6q8sQqRvgQiSA,2584
2182
2182
  pygpt_net/utils.py,sha256=WtrdagJ-BlCjxGEEVq2rhsyAZMcU6JqltCXzOs823po,6707
2183
- pygpt_net-2.5.3.dist-info/LICENSE,sha256=rbPqNB_xxANH8hKayJyIcTwD4bj4Y2G-Mcm85r1OImM,1126
2184
- pygpt_net-2.5.3.dist-info/METADATA,sha256=mtRx9Lw38oBqP5TqC1GIAA5nn4YgQ-ZfRa9ynbZd_KQ,168789
2185
- pygpt_net-2.5.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
2186
- pygpt_net-2.5.3.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
2187
- pygpt_net-2.5.3.dist-info/RECORD,,
2183
+ pygpt_net-2.5.5.dist-info/LICENSE,sha256=rbPqNB_xxANH8hKayJyIcTwD4bj4Y2G-Mcm85r1OImM,1126
2184
+ pygpt_net-2.5.5.dist-info/METADATA,sha256=Ey3mzoSiwozQUI3hilOYi4nqXczHO49dOeqi8ZIf3zs,169524
2185
+ pygpt_net-2.5.5.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
2186
+ pygpt_net-2.5.5.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
2187
+ pygpt_net-2.5.5.dist-info/RECORD,,