pygpt-net 2.5.18__py3-none-any.whl → 2.5.19__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 CHANGED
@@ -1,3 +1,8 @@
1
+ 2.5.19 (2025-06-27)
2
+
3
+ - Added option to enable/disable `Responses API` in `Config -> Settings -> API Keys -> OpenAI`.
4
+ - Added support for xAI / Grok models, added grok-3 models.
5
+
1
6
  2.5.18 (2025-06-26)
2
7
 
3
8
  - Non-GPT models are now available in standard Chat mode.
pygpt_net/__init__.py CHANGED
@@ -6,15 +6,15 @@
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-06-26 02:00:00 #
9
+ # Updated Date: 2025-06-27 18:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  __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.5.18"
17
- __build__ = "2025-06-26"
16
+ __version__ = "2.5.19"
17
+ __build__ = "2025-06-27"
18
18
  __maintainer__ = "Marcin Szczygliński"
19
19
  __github__ = "https://github.com/szczyglis-dev/py-gpt"
20
20
  __report__ = "https://github.com/szczyglis-dev/py-gpt/issues"
@@ -257,7 +257,7 @@ class Input:
257
257
  model = self.window.core.config.get('model')
258
258
  if model:
259
259
  model_data = self.window.core.models.get(model)
260
- if model_data is not None and model_data.is_openai():
260
+ if model_data is not None and model_data.is_gpt():
261
261
  self.window.controller.chat.common.check_api_key(monit=True)
262
262
  self.generating = False
263
263
  self.window.dispatch(KernelEvent(KernelEvent.STATE_ERROR, {
@@ -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.06.26 16:00:00 #
9
+ # Updated Date: 2025.06.27 16:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import time
@@ -96,6 +96,8 @@ class Bridge:
96
96
  if base_mode == MODE_CHAT and mode == MODE_LLAMA_INDEX:
97
97
  context.idx = None # disable index if in Chat mode and switch to Llama Index
98
98
 
99
+ # print("Using mode: ", mode)
100
+
99
101
  if mode == MODE_LLAMA_INDEX and base_mode != MODE_LLAMA_INDEX:
100
102
  context.idx_mode = MODE_CHAT # default in sub-mode
101
103
 
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.5.18",
4
- "app.version": "2.5.18",
5
- "updated_at": "2025-06-26T00:00:00"
3
+ "version": "2.5.19",
4
+ "app.version": "2.5.19",
5
+ "updated_at": "2025-06-27T00:00:00"
6
6
  },
7
7
  "access.audio.event.speech": false,
8
8
  "access.audio.event.speech.disabled": [],
@@ -62,13 +62,16 @@
62
62
  "api_azure_endpoint": "https://<your-resource-name>.openai.azure.com/",
63
63
  "api_endpoint": "https://api.openai.com/v1",
64
64
  "api_endpoint_perplexity": "https://api.perplexity.ai",
65
+ "api_endpoint_xai": "https://api.x.ai/v1",
65
66
  "api_key": "",
66
67
  "api_key_google": "",
67
68
  "api_key_anthropic": "",
68
69
  "api_key_hugging_face": "",
69
70
  "api_key_deepseek": "",
70
71
  "api_key_perplexity": "",
72
+ "api_key_xai": "",
71
73
  "api_proxy": "",
74
+ "api_use_responses": true,
72
75
  "app.env": [
73
76
  {
74
77
  "name": "OLLAMA_API_BASE",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.5.18",
4
- "app.version": "2.5.18",
5
- "updated_at": "2025-06-26T00:00:00"
3
+ "version": "2.5.19",
4
+ "app.version": "2.5.19",
5
+ "updated_at": "2025-06-27T00:00:00"
6
6
  },
7
7
  "items": {
8
8
  "claude-3-5-sonnet-20240620": {
@@ -4288,6 +4288,238 @@
4288
4288
  "tokens": 16384,
4289
4289
  "default": false,
4290
4290
  "multimodal": []
4291
+ },
4292
+ "grok-3": {
4293
+ "id": "grok-3",
4294
+ "name": "grok-3",
4295
+ "mode": [
4296
+ "chat"
4297
+ ],
4298
+ "langchain": {
4299
+ "provider": "openai",
4300
+ "mode": [
4301
+ "chat"
4302
+ ],
4303
+ "args": [
4304
+ {
4305
+ "name": "model_name",
4306
+ "value": "grok-3",
4307
+ "type": "str"
4308
+ }
4309
+ ],
4310
+ "env": [
4311
+ {
4312
+ "name": "OPENAI_API_KEY",
4313
+ "value": "{api_key_xai}"
4314
+ },
4315
+ {
4316
+ "name": "OPENAI_API_BASE",
4317
+ "value": "{api_endpoint_xai}"
4318
+ }
4319
+ ]
4320
+ },
4321
+ "llama_index": {
4322
+ "provider": "openai",
4323
+ "mode": [
4324
+ "chat"
4325
+ ],
4326
+ "args": [
4327
+ {
4328
+ "name": "model",
4329
+ "value": "grok-3",
4330
+ "type": "str"
4331
+ }
4332
+ ],
4333
+ "env": [
4334
+ {
4335
+ "name": "OPENAI_API_KEY",
4336
+ "value": "{api_key_xai}"
4337
+ },
4338
+ {
4339
+ "name": "OPENAI_API_BASE",
4340
+ "value": "{api_endpoint_xai}"
4341
+ }
4342
+ ]
4343
+ },
4344
+ "ctx": 131072,
4345
+ "tokens": 16384,
4346
+ "default": false,
4347
+ "openai": true,
4348
+ "multimodal": []
4349
+ },
4350
+ "grok-3-fast": {
4351
+ "id": "grok-3-fast",
4352
+ "name": "grok-3-fast",
4353
+ "mode": [
4354
+ "chat"
4355
+ ],
4356
+ "langchain": {
4357
+ "provider": "openai",
4358
+ "mode": [
4359
+ "chat"
4360
+ ],
4361
+ "args": [
4362
+ {
4363
+ "name": "model_name",
4364
+ "value": "grok-3-fast",
4365
+ "type": "str"
4366
+ }
4367
+ ],
4368
+ "env": [
4369
+ {
4370
+ "name": "OPENAI_API_KEY",
4371
+ "value": "{api_key_xai}"
4372
+ },
4373
+ {
4374
+ "name": "OPENAI_API_BASE",
4375
+ "value": "{api_endpoint_xai}"
4376
+ }
4377
+ ]
4378
+ },
4379
+ "llama_index": {
4380
+ "provider": "openai",
4381
+ "mode": [
4382
+ "chat"
4383
+ ],
4384
+ "args": [
4385
+ {
4386
+ "name": "model",
4387
+ "value": "grok-3-fast",
4388
+ "type": "str"
4389
+ }
4390
+ ],
4391
+ "env": [
4392
+ {
4393
+ "name": "OPENAI_API_KEY",
4394
+ "value": "{api_key_xai}"
4395
+ },
4396
+ {
4397
+ "name": "OPENAI_API_BASE",
4398
+ "value": "{api_endpoint_xai}"
4399
+ }
4400
+ ]
4401
+ },
4402
+ "ctx": 131072,
4403
+ "tokens": 16384,
4404
+ "default": false,
4405
+ "openai": true,
4406
+ "multimodal": []
4407
+ },
4408
+ "grok-3-mini": {
4409
+ "id": "grok-3-mini",
4410
+ "name": "grok-3-mini",
4411
+ "mode": [
4412
+ "chat"
4413
+ ],
4414
+ "langchain": {
4415
+ "provider": "openai",
4416
+ "mode": [
4417
+ "chat"
4418
+ ],
4419
+ "args": [
4420
+ {
4421
+ "name": "model_name",
4422
+ "value": "grok-3-mini",
4423
+ "type": "str"
4424
+ }
4425
+ ],
4426
+ "env": [
4427
+ {
4428
+ "name": "OPENAI_API_KEY",
4429
+ "value": "{api_key_xai}"
4430
+ },
4431
+ {
4432
+ "name": "OPENAI_API_BASE",
4433
+ "value": "{api_endpoint_xai}"
4434
+ }
4435
+ ]
4436
+ },
4437
+ "llama_index": {
4438
+ "provider": "openai",
4439
+ "mode": [
4440
+ "chat"
4441
+ ],
4442
+ "args": [
4443
+ {
4444
+ "name": "model",
4445
+ "value": "grok-3-mini",
4446
+ "type": "str"
4447
+ }
4448
+ ],
4449
+ "env": [
4450
+ {
4451
+ "name": "OPENAI_API_KEY",
4452
+ "value": "{api_key_xai}"
4453
+ },
4454
+ {
4455
+ "name": "OPENAI_API_BASE",
4456
+ "value": "{api_endpoint_xai}"
4457
+ }
4458
+ ]
4459
+ },
4460
+ "ctx": 131072,
4461
+ "tokens": 16384,
4462
+ "default": false,
4463
+ "openai": true,
4464
+ "multimodal": []
4465
+ },
4466
+ "grok-3-mini-fast": {
4467
+ "id": "grok-3-mini-fast",
4468
+ "name": "grok-3-mini-fast",
4469
+ "mode": [
4470
+ "chat"
4471
+ ],
4472
+ "langchain": {
4473
+ "provider": "openai",
4474
+ "mode": [
4475
+ "chat"
4476
+ ],
4477
+ "args": [
4478
+ {
4479
+ "name": "model_name",
4480
+ "value": "grok-3-mini-fast",
4481
+ "type": "str"
4482
+ }
4483
+ ],
4484
+ "env": [
4485
+ {
4486
+ "name": "OPENAI_API_KEY",
4487
+ "value": "{api_key_xai}"
4488
+ },
4489
+ {
4490
+ "name": "OPENAI_API_BASE",
4491
+ "value": "{api_endpoint_xai}"
4492
+ }
4493
+ ]
4494
+ },
4495
+ "llama_index": {
4496
+ "provider": "openai",
4497
+ "mode": [
4498
+ "chat"
4499
+ ],
4500
+ "args": [
4501
+ {
4502
+ "name": "model",
4503
+ "value": "grok-3-mini-fast",
4504
+ "type": "str"
4505
+ }
4506
+ ],
4507
+ "env": [
4508
+ {
4509
+ "name": "OPENAI_API_KEY",
4510
+ "value": "{api_key_xai}"
4511
+ },
4512
+ {
4513
+ "name": "OPENAI_API_BASE",
4514
+ "value": "{api_endpoint_xai}"
4515
+ }
4516
+ ]
4517
+ },
4518
+ "ctx": 131072,
4519
+ "tokens": 16384,
4520
+ "default": false,
4521
+ "openai": true,
4522
+ "multimodal": []
4291
4523
  }
4292
4524
  }
4293
4525
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.5.18",
4
- "app.version": "2.5.18",
5
- "updated_at": "2025-06-26T00:00:00"
3
+ "version": "2.5.19",
4
+ "app.version": "2.5.19",
5
+ "updated_at": "2025-06-27T00:00:00"
6
6
  },
7
7
  "items": {
8
8
  "chat": {
@@ -69,6 +69,21 @@
69
69
  "advanced": false,
70
70
  "tab": "OpenAI"
71
71
  },
72
+ "api_use_responses": {
73
+ "section": "api_keys",
74
+ "type": "bool",
75
+ "slider": false,
76
+ "label": "settings.api_use_responses",
77
+ "description": "settings.api_use_responses.desc",
78
+ "value": true,
79
+ "min": null,
80
+ "max": null,
81
+ "multiplier": null,
82
+ "step": null,
83
+ "secret": false,
84
+ "advanced": false,
85
+ "tab": "OpenAI"
86
+ },
72
87
  "api_key_google": {
73
88
  "section": "api_keys",
74
89
  "type": "text",
@@ -145,6 +160,25 @@
145
160
  "advanced": false,
146
161
  "tab": "DeepSeek"
147
162
  },
163
+ "api_key_xai": {
164
+ "section": "api_keys",
165
+ "type": "text",
166
+ "slider": false,
167
+ "label": "settings.api_key.xai",
168
+ "description": "settings.api_key.xai.desc",
169
+ "value": "",
170
+ "min": null,
171
+ "max": null,
172
+ "multiplier": null,
173
+ "step": null,
174
+ "extra": {
175
+ "bold": true
176
+ },
177
+ "secret": true,
178
+ "persist": true,
179
+ "advanced": false,
180
+ "tab": "xAI"
181
+ },
148
182
  "api_azure_version": {
149
183
  "section": "api_keys",
150
184
  "type": "text",
@@ -830,7 +830,7 @@ models.importer.error.remove.not_exists = Model already exists in current list
830
830
  models.importer.loaded = Ollama models loaded successfully.
831
831
  models.importer.status.imported = Models imported successfully.
832
832
  model.openai = OpenAI API
833
- model.openai.desc = Supports native OpenAI API
833
+ model.openai.desc = Supports OpenAI API (or compatible)
834
834
  model.tokens = Output tokens
835
835
  model.tokens.desc = Max model output tokens
836
836
  mode.research = Research (Perplexity)
@@ -953,6 +953,8 @@ settings.api_azure_version = OpenAI API version
953
953
  settings.api_azure_version.desc = Azure OpenAI API version, e.g. 2023-07-01-preview
954
954
  settings.api_endpoint = API Endpoint
955
955
  settings.api_endpoint.desc = OpenAI API (or compatible) endpoint URL, default: https://api.openai.com/v1
956
+ settings.api_endpoint_xai = API Endpoint
957
+ settings.api_endpoint_xai.desc = xAPI API endpoint URL, default: https://api.x.ai
956
958
  settings.api_key = OpenAI API KEY
957
959
  settings.api_key.anthropic = Anthropic API KEY
958
960
  settings.api_key.anthropic.desc = Required for the Anthropic API and Claude models.
@@ -965,8 +967,12 @@ settings.api_key.hugging_face = HuggingFace API KEY
965
967
  settings.api_key.hugging_face.desc = Required for the HuggingFace API.
966
968
  settings.api_key.perplexity = Perplexity API KEY
967
969
  settings.api_key.perplexity.desc = Required for the Perplexity API.
970
+ settings.api_key.xai = xAI API KEY
971
+ settings.api_key.xai.desc = Required for the xAI API and Grok models.
968
972
  settings.api_proxy = Proxy address
969
973
  settings.api_proxy.desc = Optional, proxy for OpenAI API, e.g. http://proxy.example.com or socks5://user:pass@host:port
974
+ settings.api_use_responses = Use Responses API
975
+ settings.api_use_responses.desc = Use Responses API instead of ChatCompletions API
970
976
  settings.app.env = Application environment (os.environ)
971
977
  settings.app.env.desc = Additional environment vars to set on application start
972
978
  settings.audio.input.channels = Channels
@@ -1152,6 +1158,7 @@ settings.section.api_keys.google = Google
1152
1158
  settings.section.api_keys.huggingface = HuggingFace
1153
1159
  settings.section.api_keys.openai = OpenAI
1154
1160
  settings.section.api_keys.perplexity = Perplexity
1161
+ settings.section.api_keys.xai = xAI
1155
1162
  settings.section.audio = Audio
1156
1163
  settings.section.ctx = Context
1157
1164
  settings.section.developer = Developer
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: 2025.06.26 16:00:00 #
9
+ # Updated Date: 2025.06.27 16:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -203,6 +203,14 @@ class ModelItem:
203
203
 
204
204
  :return: True if OpenAI
205
205
  """
206
+ return self.openai
207
+
208
+ def is_gpt(self) -> bool:
209
+ """
210
+ Check if model is supported by OpenAI Responses API
211
+
212
+ :return: True if OpenAI Responses API compatible
213
+ """
206
214
  if (self.id.startswith("gpt-")
207
215
  or self.id.startswith("chatgpt")
208
216
  or self.id.startswith("o1")
@@ -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.03.02 19:00:00 #
9
+ # Updated Date: 2025.06.27 16:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import copy
@@ -1869,6 +1869,17 @@ class Patch:
1869
1869
  data["remote_tools.image"] = False
1870
1870
  updated = True
1871
1871
 
1872
+ # < 2.5.19
1873
+ if old < parse_version("2.5.19"):
1874
+ print("Migrating config from < 2.5.19...")
1875
+ if 'api_use_responses' not in data:
1876
+ data["api_use_responses"] = True
1877
+ if 'api_key_xai' not in data:
1878
+ data["api_key_xai"] = ""
1879
+ if 'api_endpoint_xai' not in data:
1880
+ data["api_endpoint_xai"] = "https://api.x.ai/v1"
1881
+ updated = True
1882
+
1872
1883
  # update file
1873
1884
  migrated = False
1874
1885
  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: 2025.06.26 16:00:00 #
9
+ # Updated Date: 2025.06.27 16:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from packaging.version import parse as parse_version, Version
@@ -566,6 +566,10 @@ class Patch:
566
566
  model.mode.append("chat")
567
567
  updated = True
568
568
 
569
+ # < 2.5.19 <--- add Grok models
570
+ if old < parse_version("2.5.19"):
571
+ updated = True
572
+
569
573
  # update file
570
574
  if updated:
571
575
  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: 2025.06.25 02:00:00 #
9
+ # Updated Date: 2025.06.27 16:00:00 #
10
10
  # ================================================== #
11
11
  import base64
12
12
 
@@ -34,6 +34,7 @@ from .responses import Responses
34
34
  from .store import Store
35
35
  from .summarizer import Summarizer
36
36
  from .vision import Vision
37
+ from pygpt_net.item.model import ModelItem
37
38
 
38
39
 
39
40
  class Gpt:
@@ -54,11 +55,12 @@ class Gpt:
54
55
  self.summarizer = Summarizer(window)
55
56
  self.vision = Vision(window)
56
57
 
57
- def get_client(self, mode: str = MODE_CHAT) -> OpenAI:
58
+ def get_client(self, mode: str = MODE_CHAT, model: ModelItem = None) -> OpenAI:
58
59
  """
59
60
  Return OpenAI client
60
61
 
61
62
  :param mode: Mode
63
+ :param model: Model
62
64
  :return: OpenAI client
63
65
  """
64
66
  args = {
@@ -87,6 +89,12 @@ class Gpt:
87
89
  endpoint = self.window.core.config.get('api_endpoint_perplexity')
88
90
  if endpoint:
89
91
  args["base_url"] = endpoint
92
+ elif mode == MODE_CHAT:
93
+ if model is not None:
94
+ # xAI / grok
95
+ if model.id.startswith("grok"):
96
+ args["api_key"] = self.window.core.config.get('api_key_xai')
97
+ args["base_url"] = self.window.core.config.get('api_endpoint_xai')
90
98
 
91
99
  return OpenAI(**args)
92
100
 
@@ -113,9 +121,6 @@ class Gpt:
113
121
 
114
122
  # --- Responses API ---- /beta/
115
123
  use_responses_api = False
116
- if mode == MODE_CHAT:
117
- use_responses_api = True # use responses API for chat, audio, research modes
118
- ctx.use_responses_api = use_responses_api # set in context
119
124
 
120
125
  # get model id
121
126
  model_id = None
@@ -124,6 +129,12 @@ class Gpt:
124
129
  if max_tokens > model.tokens: # check max output tokens
125
130
  max_tokens = model.tokens
126
131
 
132
+ if model.is_gpt():
133
+ if mode == MODE_CHAT and self.window.core.config.get('api_use_responses', False):
134
+ use_responses_api = True # use responses API for chat mode, only OpenAI models
135
+
136
+ ctx.use_responses_api = use_responses_api # set in context
137
+
127
138
  response = None
128
139
  used_tokens = 0
129
140
  context.max_tokens = max_tokens # update max output tokens
@@ -304,7 +315,7 @@ class Gpt:
304
315
  if model is None:
305
316
  model = self.window.core.models.from_defaults()
306
317
 
307
- client = self.get_client(mode)
318
+ client = self.get_client(mode, model)
308
319
  messages = []
309
320
  messages.append({"role": "system", "content": system_prompt})
310
321
  messages.append({"role": "user", "content": prompt})
@@ -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.26 23:00:00 #
9
+ # Updated Date: 2025.06.27 16:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import json
@@ -67,7 +67,7 @@ class Chat:
67
67
  user_name = ctx.input_name # from ctx
68
68
  ai_name = ctx.output_name # from ctx
69
69
 
70
- client = self.window.core.gpt.get_client(mode)
70
+ client = self.window.core.gpt.get_client(mode, context.model)
71
71
 
72
72
  # build chat messages
73
73
  messages = self.build(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pygpt-net
3
- Version: 2.5.18
3
+ Version: 2.5.19
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
  License: MIT
6
6
  Keywords: py_gpt,py-gpt,pygpt,desktop,app,o1,gpt,gpt4,gpt-4o,gpt-4v,gpt3.5,gpt-4,gpt-4-vision,gpt-3.5,llama3,mistral,gemini,deepseek,bielik,claude,tts,whisper,vision,chatgpt,dall-e,chat,chatbot,assistant,text completion,image generation,ai,api,openai,api key,langchain,llama-index,ollama,presets,ui,qt,pyside
@@ -100,7 +100,7 @@ Description-Content-Type: text/markdown
100
100
 
101
101
  [![pygpt](https://snapcraft.io/pygpt/badge.svg)](https://snapcraft.io/pygpt)
102
102
 
103
- Release: **2.5.18** | build: **2025-06-26** | Python: **>=3.10, <3.13**
103
+ Release: **2.5.19** | build: **2025-06-27** | Python: **>=3.10, <3.13**
104
104
 
105
105
  > Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
106
106
  >
@@ -462,7 +462,7 @@ Your API keys will be available here:
462
462
 
463
463
  **+ Inline Vision and Image generation**
464
464
 
465
- This mode in **PyGPT** mirrors `ChatGPT`, allowing you to chat with models such as `o1`, `o3`, `GPT-4`, `GPT-4o` and `GPT-3.5`. It works by using the `Responses` OpenAI API.
465
+ This mode in **PyGPT** mirrors `ChatGPT`, allowing you to chat with models such as `o1`, `o3`, `GPT-4`, `GPT-4o` and `GPT-3.5`. It works by using the `Responses` and `ChatCompletions` OpenAI API. You can select the API to use in: `Config -> Settings -> API Keys -> OpenAI`.
466
466
 
467
467
  **Tip: This mode directly uses the OpenAI API. Other models, such as Gemini, Claude, or Llama3, are supported in Chat mode via LlamaIndex, which the application switches to in the background when working with models other than OpenAI.**
468
468
 
@@ -1003,7 +1003,7 @@ The name of the currently active profile is shown as (Profile Name) in the windo
1003
1003
 
1004
1004
  ## Built-in models
1005
1005
 
1006
- PyGPT has built-in support for models (as of 2025-06-24):
1006
+ PyGPT has built-in support for models (as of 2025-06-27):
1007
1007
 
1008
1008
  - `bielik-11b-v2.3-instruct:Q4_K_M`
1009
1009
  - `chatgpt-4o-latest`
@@ -1049,6 +1049,10 @@ PyGPT has built-in support for models (as of 2025-06-24):
1049
1049
  - `gpt-4o-2024-11-20`
1050
1050
  - `gpt-4o-audio-preview`
1051
1051
  - `gpt-4o-mini`
1052
+ - `grok-3`
1053
+ - `grok-3-fast`
1054
+ - `grok-3-mini`
1055
+ - `grok-3-mini-fast`
1052
1056
  - `llama2-uncensored`
1053
1057
  - `llama3.1`
1054
1058
  - `llama3.1:405b`
@@ -1064,6 +1068,8 @@ PyGPT has built-in support for models (as of 2025-06-24):
1064
1068
  - `qwen:7b`
1065
1069
  - `qwen2:7b`
1066
1070
  - `qwen2.5-coder:7b`
1071
+ - `qwen3:8b`
1072
+ - `qwen3:30b-a3b`
1067
1073
  - `r1` (Perplexity)
1068
1074
  - `sonar` (Perplexity)
1069
1075
  - `sonar-deep-research` (Perplexity)
@@ -4124,6 +4130,11 @@ may consume additional tokens that are not displayed in the main window.
4124
4130
 
4125
4131
  ## Recent changes:
4126
4132
 
4133
+ **2.5.19 (2025-06-27)**
4134
+
4135
+ - Added option to enable/disable `Responses API` in `Config -> Settings -> API Keys -> OpenAI`.
4136
+ - Added support for xAI / Grok models, added grok-3 models.
4137
+
4127
4138
  **2.5.18 (2025-06-26)**
4128
4139
 
4129
4140
  - Non-GPT models are now available in standard Chat mode.
@@ -1,6 +1,6 @@
1
- pygpt_net/CHANGELOG.txt,sha256=PYJboFWLvy_yIF6BTddmQ23EMwESIKEqgXaZ8n-CbSQ,84411
1
+ pygpt_net/CHANGELOG.txt,sha256=s52Jz40Jda50SOFtFXE2Vc0GOrcu2bYLjUBDKpDwtP0,84589
2
2
  pygpt_net/LICENSE,sha256=dz9sfFgYahvu2NZbx4C1xCsVn9GVer2wXcMkFRBvqzY,1146
3
- pygpt_net/__init__.py,sha256=NiGpaEE4CWDjmzgyWg3-ycjTyNOFtWwz23Iw-rQvwmM,1373
3
+ pygpt_net/__init__.py,sha256=HxrIG5WnUAsMEgT7ers_FbpAF8aSEkNXm4n8FDUoA5c,1373
4
4
  pygpt_net/app.py,sha256=XXjn9XaKHGRcsHN8mMuqbRHAg8_Da0GLmACUU9ddjBc,16217
5
5
  pygpt_net/config.py,sha256=Qc1FOBtTf3O6A6-6KoqUGtoJ0u8hXQeowvCVbZFwtik,16405
6
6
  pygpt_net/container.py,sha256=BemiVZPpPNIzfB-ZvnZeeBPFu-AcX2c30OqYFylEjJc,4023
@@ -31,7 +31,7 @@ pygpt_net/controller/chat/command.py,sha256=3fNYvgt9NmCZPNrlqfLXivmN63ZRsuFseNjj
31
31
  pygpt_net/controller/chat/common.py,sha256=KuyPrRSlwo7VWukCCjdnMIcwNX5LocW5RrNmNaHcdA8,14782
32
32
  pygpt_net/controller/chat/files.py,sha256=VFiiTeWTYR15Nwf1CTLEmeXqlmRHzNQVkNaU6hY2Gz4,2846
33
33
  pygpt_net/controller/chat/image.py,sha256=XghPvTP8n3DxFgRrZ3bCfeLNTvOKSxbl-ewTwUTd4HM,8308
34
- pygpt_net/controller/chat/input.py,sha256=pmcKX9oZNKlXgwgR0HtDeMEXsIjpr5PdsVsoDYwAzsw,11956
34
+ pygpt_net/controller/chat/input.py,sha256=oosE9TbSzJuoqpSI6TN6P1r_pGGzz73gSTsB2ahxOcc,11953
35
35
  pygpt_net/controller/chat/output.py,sha256=VuziVuI9Lj_4kZmTWvXg8t2tq4w9uD7J1g2MqlMCV6s,9272
36
36
  pygpt_net/controller/chat/render.py,sha256=h23QCvMDIAaCpInqwwADa4G43sSpSn-CE5celnk1LSc,17206
37
37
  pygpt_net/controller/chat/response.py,sha256=UnTnnn2on-Qg2_T_QcQcklTCcuq6XhyLLxs1fn-D9Tg,9450
@@ -126,7 +126,7 @@ pygpt_net/core/audio/__init__.py,sha256=uszH6pqMToDzL0WpPeUvVlyJ8RN4gFmQbsL4GFYM
126
126
  pygpt_net/core/audio/capture.py,sha256=cR3PsnbxJ8yPE5oirHFAieAIaDGXynUxA4aitocXkgY,11223
127
127
  pygpt_net/core/audio/context.py,sha256=2XpXWhDC09iUvc0FRMq9BF2_rnQ60ZG4Js6LbO5MohY,1115
128
128
  pygpt_net/core/audio/whisper.py,sha256=WZ_fNQ06s1NBxyoYB-lTFqDO6ARcnq9MZFekRaTNxTo,993
129
- pygpt_net/core/bridge/__init__.py,sha256=urV-W5x3hg2-iab-xj1VQtG3QNLveT6vQYfzlgm0NwI,10287
129
+ pygpt_net/core/bridge/__init__.py,sha256=pQNHIh3EDRq0G4qqiM8SI1Byt2U4cTcMORV7Pys7Nys,10326
130
130
  pygpt_net/core/bridge/context.py,sha256=zIqbbFyZYsU5JEJGvwBg07u9QeeMUKsdTnURyp8tR4Y,4351
131
131
  pygpt_net/core/bridge/worker.py,sha256=8o8HmnjtoImHFFPOfzymePPgmVUPZoFNHFd0BYUHV3c,5885
132
132
  pygpt_net/core/calendar/__init__.py,sha256=ao9kQk6Xjse95m1TbL1Mlbo1k1Q8D9eGc10L-71G9TY,7227
@@ -248,9 +248,9 @@ pygpt_net/css_rc.py,sha256=i13kX7irhbYCWZ5yJbcMmnkFp_UfS4PYnvRFSPF7XXo,11349
248
248
  pygpt_net/data/audio/click_off.mp3,sha256=aNiRDP1pt-Jy7ija4YKCNFBwvGWbzU460F4pZWZDS90,65201
249
249
  pygpt_net/data/audio/click_on.mp3,sha256=qfdsSnthAEHVXzeyN4LlC0OvXuyW8p7stb7VXtlvZ1k,65201
250
250
  pygpt_net/data/audio/ok.mp3,sha256=LTiV32pEBkpUGBkKkcOdOFB7Eyt_QoP2Nv6c5AaXftk,32256
251
- pygpt_net/data/config/config.json,sha256=A7GbzPXvEfSfotXYLex344gdyMXbFTHSqiMidbz42e8,20147
252
- pygpt_net/data/config/models.json,sha256=vOHBPF6htMWz99dT1UVCr7P3V9ypHUgfhLyJHbC3m-I,129240
253
- pygpt_net/data/config/modes.json,sha256=ghLjCPCCtVq-tvZqRFYGrZhx4hSXoukYe_UsTOFtXzk,2093
251
+ pygpt_net/data/config/config.json,sha256=ExjPPGRgwo2KP6HZ9w62b8uPvC1dv7matesdnrLD0YI,20242
252
+ pygpt_net/data/config/models.json,sha256=OR7trPoWKZEPg5fvQlvin923UqktC8QpFa8-39hTzBw,136164
253
+ pygpt_net/data/config/modes.json,sha256=lh4k2vVOZOjh2-HF8q-x4kbBrFZ2nKFfzUHBib3F4Sc,2093
254
254
  pygpt_net/data/config/presets/agent_openai.json,sha256=vMTR-soRBiEZrpJJHuFLWyx8a3Ez_BqtqjyXgxCAM_Q,733
255
255
  pygpt_net/data/config/presets/agent_openai_assistant.json,sha256=awJw9lNTGpKML6SJUShVn7lv8AXh0oic7wBeyoN7AYs,798
256
256
  pygpt_net/data/config/presets/agent_planner.json,sha256=a6Rv58Bnm2STNWB0Rw_dGhnsz6Lb3J8_GwsUVZaTIXc,742
@@ -271,7 +271,7 @@ pygpt_net/data/config/presets/current.vision.json,sha256=x1ll5B3ROSKYQA6l27PRGXU
271
271
  pygpt_net/data/config/presets/dalle_white_cat.json,sha256=esqUb43cqY8dAo7B5u99tRC0MBV5lmlrVLnJhTSkL8w,552
272
272
  pygpt_net/data/config/presets/joke_agent.json,sha256=R6n9P7KRb0s-vZWZE7kHdlOfXAx1yYrPmUw8uLyw8OE,474
273
273
  pygpt_net/data/config/presets/joke_expert.json,sha256=aFBFCY97Uba71rRq0MSeakXaOj8yuaUqekQ842YHv64,683
274
- pygpt_net/data/config/settings.json,sha256=EozvASp2W3BWaRB57YW4LJju2t5RI3sFp62TYwGZ3Vo,52000
274
+ pygpt_net/data/config/settings.json,sha256=yAyMRYx1xyrD1Y-G1oApJ1-KkHzhEtMV9KshbLLUx70,52876
275
275
  pygpt_net/data/config/settings_section.json,sha256=Ng6kgmgxVmvt-KYFIqZvIDAEK4DfISNjNVF55DFWNjs,1082
276
276
  pygpt_net/data/css/fix_windows.css,sha256=Mks14Vg25ncbMqZJfAMStrhvZmgHF6kU75ohTWRZeI8,664
277
277
  pygpt_net/data/css/markdown.css,sha256=yaoJPogZZ_ghbqP8vTXTycwVyD61Ik5_033NpzuUzC0,1122
@@ -1488,7 +1488,7 @@ pygpt_net/data/js/katex/fonts/KaTeX_Typewriter-Regular.woff2,sha256=cdUX1ngneHz6
1488
1488
  pygpt_net/data/js/katex/katex.min.css,sha256=lVaKnUaQNG4pI71WHffQZVALLQF4LMZEk4nOia8U9ow,23532
1489
1489
  pygpt_net/data/js/katex/katex.min.js,sha256=KLASOtKS2x8pUxWVzCDmlWJ4jhuLb0vtrgakbD6gDDo,276757
1490
1490
  pygpt_net/data/locale/locale.de.ini,sha256=rqWfqXip_kNrIr6o07PI6yMmdTiBWJIT__zWlAsgNPY,66016
1491
- pygpt_net/data/locale/locale.en.ini,sha256=NYynCv1uSfu7XJ21uH7rHJPF2nCbNul-kw8GkFxFbaI,79102
1491
+ pygpt_net/data/locale/locale.en.ini,sha256=kvpKSLbzJXIT8xeWZ5i5Ul3C4jG7FMuxby_i3Uhfcis,79505
1492
1492
  pygpt_net/data/locale/locale.es.ini,sha256=ALVNLou4HbMfmJL-mNUa9NkXccStUgSqInIx7qnCV6s,66183
1493
1493
  pygpt_net/data/locale/locale.fr.ini,sha256=b6LaF_MnW4j-nU7PuMgY5R7LvjZ7juKd0OwoJGXhNkY,68231
1494
1494
  pygpt_net/data/locale/locale.it.ini,sha256=PILGaGTCumfULasxW-2eJ0d3-06QJJJWC8_KEvjuuAs,64951
@@ -1675,7 +1675,7 @@ pygpt_net/item/calendar_note.py,sha256=Y9rfMmTbWwcFrHNra62aUww-NGPIE6O03wHRrF5Ty
1675
1675
  pygpt_net/item/ctx.py,sha256=XZ4aRlpISA9_f63VNAG8BmmqFxx01m33TPa1CCFX_xA,18971
1676
1676
  pygpt_net/item/index.py,sha256=gDQYPlhwHF0QVGwX4TFGxHyO7pt5tqHcuyc3DPgPCA0,1681
1677
1677
  pygpt_net/item/mode.py,sha256=bhX6ZOvTKsiLI6-N-7cuJ_9izlAqq6bsXF1FjufJvfw,600
1678
- pygpt_net/item/model.py,sha256=iHJPPkB_tmErDfm7y-2P8Nb1dJXyGqNf8Kgh35XS6jc,9376
1678
+ pygpt_net/item/model.py,sha256=-m3ZoaK0ybDMvRr1wbulYxdF5xmBEe8_SzepOTW96Ig,9576
1679
1679
  pygpt_net/item/notepad.py,sha256=l5e0JAnwz5a3fPSaSq1ih3XfgrLX5365xAg5HYIqIyQ,1513
1680
1680
  pygpt_net/item/preset.py,sha256=m03LtRjODd64xoZ92EJaOPp82VXOZ3zBUDtJEFyxvc4,5575
1681
1681
  pygpt_net/item/prompt.py,sha256=aDzXxQ4kLQ0Ve1EvCmO8p9CzYVm2BYuR9ubYf6HFr4g,1563
@@ -1822,7 +1822,7 @@ pygpt_net/provider/core/calendar/db_sqlite/storage.py,sha256=QDclQCQdr4QyRIqjgGX
1822
1822
  pygpt_net/provider/core/config/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
1823
1823
  pygpt_net/provider/core/config/base.py,sha256=cbvzbMNqL2XgC-36gGubnU37t94AX7LEw0lecb2Nm80,1365
1824
1824
  pygpt_net/provider/core/config/json_file.py,sha256=P78SRQpNr_nF7TYftYLnHl_DVo7GLPNs4_lvw97sqq8,5122
1825
- pygpt_net/provider/core/config/patch.py,sha256=N_faJxKqLkslJ1MwdhaIjgPv-D_UeMj0VBif7FvGKKE,97966
1825
+ pygpt_net/provider/core/config/patch.py,sha256=fuNJ04XbZ6zA321z7eiJaRG15PHOZoMtFvjotDyaFa8,98442
1826
1826
  pygpt_net/provider/core/ctx/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
1827
1827
  pygpt_net/provider/core/ctx/base.py,sha256=Tfb4MDNe9BXXPU3lbzpdYwJF9S1oa2-mzgu5XT4It9g,3003
1828
1828
  pygpt_net/provider/core/ctx/db_sqlite/__init__.py,sha256=G2pB7kZfREJRLJZmfv3DKTslXC-K7EhNN2sn56q6BFA,11753
@@ -1849,7 +1849,7 @@ pygpt_net/provider/core/mode/patch.py,sha256=VS2KCYW05jxLd-lcStNY1k4fHKUUrVVLTdR
1849
1849
  pygpt_net/provider/core/model/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
1850
1850
  pygpt_net/provider/core/model/base.py,sha256=L1x2rHha8a8hnCUYxZr88utay1EWEx5qBXW_2acpAN0,1319
1851
1851
  pygpt_net/provider/core/model/json_file.py,sha256=DsGVNYIi5Pg57SJghHWBULq9Uu0sNTWEks3ZyRRTd4o,6786
1852
- pygpt_net/provider/core/model/patch.py,sha256=b4tdmvf15zHXV-Z1Awiv5-C5WJQztVXlxxpxcmgiIjM,26668
1852
+ pygpt_net/provider/core/model/patch.py,sha256=tU4SHRAE6_ubJ89xI9qtQdxdTzpCd3VGY0oyHlGZ6b4,26790
1853
1853
  pygpt_net/provider/core/notepad/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
1854
1854
  pygpt_net/provider/core/notepad/base.py,sha256=7aPhild8cALTaN3JEbI0YrkIW1DRIycGQWTfsdH6WcQ,1323
1855
1855
  pygpt_net/provider/core/notepad/db_sqlite/__init__.py,sha256=DQnVKJxvLq-6zlRlLk3MXSQZEObFtcQ5p5mEnuRzwYE,3104
@@ -1867,10 +1867,10 @@ pygpt_net/provider/core/preset/patch.py,sha256=uGeOqz-JnFVXHAjnlto5I79O-HNXMLRSJ
1867
1867
  pygpt_net/provider/core/prompt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1868
1868
  pygpt_net/provider/core/prompt/base.py,sha256=EYUA30T1QwJ9RSD0uW5x6VEstgIXNwgutmaXI64BWhw,1304
1869
1869
  pygpt_net/provider/core/prompt/json_file.py,sha256=5yfW1RgEa36tX4-ntze4PavWLry0YG43D2LO23_MrzE,4838
1870
- pygpt_net/provider/gpt/__init__.py,sha256=P4v9s9L2S0onPP6ieuPL497FN24juQB39PwfCgPesu8,12014
1870
+ pygpt_net/provider/gpt/__init__.py,sha256=oGvQkJsjCa5sw6BPaSIS-_sI9zo-1no1PVUcqn3DI0A,12539
1871
1871
  pygpt_net/provider/gpt/assistants.py,sha256=DSw1YB_J9n2rFD5CPDWZy59I38VSG6uLpYydGLTUPMQ,14083
1872
1872
  pygpt_net/provider/gpt/audio.py,sha256=frHElxYVaHYkNDCMJ9tQMoGqxSaZ-s5oPlAEHUAckkc,2032
1873
- pygpt_net/provider/gpt/chat.py,sha256=W-p6njN843JyExMcyqD_ClzmWv8de9F4-LdLwjS_4Pg,10406
1873
+ pygpt_net/provider/gpt/chat.py,sha256=OGME7rK3I_gE-PkjiI74PoOn5QPPmRWyI_OlHc0isRY,10421
1874
1874
  pygpt_net/provider/gpt/completion.py,sha256=OusKOb4G11aYRJUjRWcMsf80cRQQvee9DzRe99ubLmc,6164
1875
1875
  pygpt_net/provider/gpt/image.py,sha256=lUHZrVCR2Fbxz5uXqPH9I-_xn0FkDyfzOGrpi-9RZbI,10134
1876
1876
  pygpt_net/provider/gpt/responses.py,sha256=fkFNfXN25EWLiqa8XCTVxAEyRR5bAsWWXkyvrdKk888,9976
@@ -2184,8 +2184,8 @@ pygpt_net/ui/widget/textarea/web.py,sha256=2LebPHa_e5lvBqnIVzjwsLcFMoc11BonXgAUs
2184
2184
  pygpt_net/ui/widget/vision/__init__.py,sha256=8HT4tQFqQogEEpGYTv2RplKBthlsFKcl5egnv4lzzEw,488
2185
2185
  pygpt_net/ui/widget/vision/camera.py,sha256=T8b5cmK6uhf_WSSxzPt_Qod8JgMnst6q8sQqRvgQiSA,2584
2186
2186
  pygpt_net/utils.py,sha256=WtrdagJ-BlCjxGEEVq2rhsyAZMcU6JqltCXzOs823po,6707
2187
- pygpt_net-2.5.18.dist-info/LICENSE,sha256=rbPqNB_xxANH8hKayJyIcTwD4bj4Y2G-Mcm85r1OImM,1126
2188
- pygpt_net-2.5.18.dist-info/METADATA,sha256=nHOTJNb6XaXlsTjCdJ0vgKP2HTPSQ2ACf7CP7tig5Uw,172380
2189
- pygpt_net-2.5.18.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
2190
- pygpt_net-2.5.18.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
2191
- pygpt_net-2.5.18.dist-info/RECORD,,
2187
+ pygpt_net-2.5.19.dist-info/LICENSE,sha256=rbPqNB_xxANH8hKayJyIcTwD4bj4Y2G-Mcm85r1OImM,1126
2188
+ pygpt_net-2.5.19.dist-info/METADATA,sha256=8J0EzTUq-UJNv-3-5GklPeK5AZLWjE-0d3b_ROltsZY,172757
2189
+ pygpt_net-2.5.19.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
2190
+ pygpt_net-2.5.19.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
2191
+ pygpt_net-2.5.19.dist-info/RECORD,,