pygpt-net 2.6.25__py3-none-any.whl → 2.6.26__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 +4 -0
- pygpt_net/__init__.py +1 -1
- pygpt_net/app.py +3 -1
- pygpt_net/controller/model/importer.py +17 -3
- pygpt_net/core/models/models.py +5 -1
- pygpt_net/core/types/openai.py +2 -1
- pygpt_net/data/config/config.json +14 -2
- pygpt_net/data/config/models.json +2 -2
- pygpt_net/data/config/settings.json +34 -0
- pygpt_net/data/locale/locale.en.ini +8 -2
- pygpt_net/provider/core/config/patch.py +10 -1
- pygpt_net/provider/llms/local.py +8 -2
- pygpt_net/provider/llms/open_router.py +104 -0
- {pygpt_net-2.6.25.dist-info → pygpt_net-2.6.26.dist-info}/METADATA +8 -2
- {pygpt_net-2.6.25.dist-info → pygpt_net-2.6.26.dist-info}/RECORD +18 -17
- {pygpt_net-2.6.25.dist-info → pygpt_net-2.6.26.dist-info}/LICENSE +0 -0
- {pygpt_net-2.6.25.dist-info → pygpt_net-2.6.26.dist-info}/WHEEL +0 -0
- {pygpt_net-2.6.25.dist-info → pygpt_net-2.6.26.dist-info}/entry_points.txt +0 -0
pygpt_net/CHANGELOG.txt
CHANGED
pygpt_net/__init__.py
CHANGED
|
@@ -13,7 +13,7 @@ __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.6.
|
|
16
|
+
__version__ = "2.6.26"
|
|
17
17
|
__build__ = "2025-08-26"
|
|
18
18
|
__maintainer__ = "Marcin Szczygliński"
|
|
19
19
|
__github__ = "https://github.com/szczyglis-dev/py-gpt"
|
pygpt_net/app.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.08.
|
|
9
|
+
# Updated Date: 2025.08.26 23:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import os
|
|
@@ -124,6 +124,7 @@ from pygpt_net.provider.llms.ollama import OllamaLLM
|
|
|
124
124
|
from pygpt_net.provider.llms.openai import OpenAILLM
|
|
125
125
|
from pygpt_net.provider.llms.perplexity import PerplexityLLM
|
|
126
126
|
from pygpt_net.provider.llms.x_ai import xAILLM
|
|
127
|
+
from pygpt_net.provider.llms.open_router import OpenRouterLLM
|
|
127
128
|
|
|
128
129
|
# vector store providers (llama-index)
|
|
129
130
|
from pygpt_net.provider.vector_stores.chroma import ChromaProvider
|
|
@@ -430,6 +431,7 @@ def run(**kwargs):
|
|
|
430
431
|
launcher.add_llm(DeepseekApiLLM())
|
|
431
432
|
launcher.add_llm(PerplexityLLM())
|
|
432
433
|
launcher.add_llm(xAILLM())
|
|
434
|
+
launcher.add_llm(OpenRouterLLM())
|
|
433
435
|
|
|
434
436
|
# register LLMs
|
|
435
437
|
llms = kwargs.get('llms', None)
|
|
@@ -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.08.26
|
|
9
|
+
# Updated Date: 2025.08.26 23:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import copy
|
|
@@ -431,13 +431,13 @@ class Importer:
|
|
|
431
431
|
]
|
|
432
432
|
elif self.provider == "mistral_ai":
|
|
433
433
|
m.tool_calls = True
|
|
434
|
-
m.llama_index['args']
|
|
434
|
+
m.llama_index['args'].append(
|
|
435
435
|
{
|
|
436
436
|
'name': 'api_key',
|
|
437
437
|
'value': '{api_key_mistral}',
|
|
438
438
|
'type': 'str'
|
|
439
439
|
}
|
|
440
|
-
|
|
440
|
+
)
|
|
441
441
|
elif self.provider == "local_ai":
|
|
442
442
|
m.tool_calls = True
|
|
443
443
|
m.llama_index['env'] = [
|
|
@@ -452,6 +452,20 @@ class Importer:
|
|
|
452
452
|
'type': 'str'
|
|
453
453
|
}
|
|
454
454
|
]
|
|
455
|
+
elif self.provider == "open_router":
|
|
456
|
+
m.tool_calls = True
|
|
457
|
+
m.llama_index['env'] = [
|
|
458
|
+
{
|
|
459
|
+
'name': 'OPENAI_API_KEY',
|
|
460
|
+
'value': '{api_key_open_router}',
|
|
461
|
+
'type': 'str'
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
'name': 'OPENAI_API_BASE',
|
|
465
|
+
'value': '{api_endpoint_open_router}',
|
|
466
|
+
'type': 'str'
|
|
467
|
+
}
|
|
468
|
+
]
|
|
455
469
|
elif self.provider == "x_ai":
|
|
456
470
|
m.tool_calls = True
|
|
457
471
|
m.llama_index['env'] = [
|
pygpt_net/core/models/models.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.08.
|
|
9
|
+
# Updated Date: 2025.08.26 23:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import copy
|
|
@@ -498,6 +498,10 @@ class Models:
|
|
|
498
498
|
args["api_key"] = cfg.get('api_key_hugging_face', "")
|
|
499
499
|
args["base_url"] = cfg.get('api_endpoint_hugging_face', "")
|
|
500
500
|
self.window.core.debug.info("[api] Using client: HuggingFace Router API")
|
|
501
|
+
elif model.provider == "open_router":
|
|
502
|
+
args["api_key"] = cfg.get('api_key_open_router', "")
|
|
503
|
+
args["base_url"] = cfg.get('api_endpoint_open_router', "")
|
|
504
|
+
self.window.core.debug.info("[api] Using client: OpenRouter API")
|
|
501
505
|
elif model.provider == "ollama":
|
|
502
506
|
args["api_key"] = "ollama"
|
|
503
507
|
args["base_url"] = self.window.core.models.ollama.get_base_url() + "/v1"
|
pygpt_net/core/types/openai.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.08.
|
|
9
|
+
# Updated Date: 2025.08.26 23:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
OPENAI_COMPATIBLE_PROVIDERS = [
|
|
@@ -21,6 +21,7 @@ OPENAI_COMPATIBLE_PROVIDERS = [
|
|
|
21
21
|
"perplexity",
|
|
22
22
|
"deepseek_api",
|
|
23
23
|
"x_ai",
|
|
24
|
+
"open_router",
|
|
24
25
|
]
|
|
25
26
|
|
|
26
27
|
OPENAI_DISABLE_TOOLS = [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"__meta__": {
|
|
3
|
-
"version": "2.6.
|
|
4
|
-
"app.version": "2.6.
|
|
3
|
+
"version": "2.6.26",
|
|
4
|
+
"app.version": "2.6.26",
|
|
5
5
|
"updated_at": "2025-08-26T00:00:00"
|
|
6
6
|
},
|
|
7
7
|
"access.audio.event.speech": false,
|
|
@@ -77,6 +77,7 @@
|
|
|
77
77
|
"api_endpoint_anthropic": "https://api.anthropic.com/v1",
|
|
78
78
|
"api_endpoint_mistral": "https://api.mistral.ai/v1",
|
|
79
79
|
"api_endpoint_hugging_face": "https://router.huggingface.co/v1",
|
|
80
|
+
"api_endpoint_open_router": "https://openrouter.ai/api/v1",
|
|
80
81
|
"api_key": "",
|
|
81
82
|
"api_key_google": "",
|
|
82
83
|
"api_key_anthropic": "",
|
|
@@ -86,6 +87,7 @@
|
|
|
86
87
|
"api_key_xai": "",
|
|
87
88
|
"api_key_mistral": "",
|
|
88
89
|
"api_key_voyage": "",
|
|
90
|
+
"api_key_open_router": "",
|
|
89
91
|
"api_proxy": "",
|
|
90
92
|
"api_use_responses": true,
|
|
91
93
|
"api_use_responses_llama": false,
|
|
@@ -244,6 +246,16 @@
|
|
|
244
246
|
"name": "model_name",
|
|
245
247
|
"value": "text-embedding-3-small",
|
|
246
248
|
"type": "str"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"name": "api_base",
|
|
252
|
+
"value": "https://api.openai.com/v1",
|
|
253
|
+
"type": "str"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"name": "timeout",
|
|
257
|
+
"value": 60,
|
|
258
|
+
"type": "float"
|
|
247
259
|
}
|
|
248
260
|
],
|
|
249
261
|
"llama.idx.embeddings.env": [
|
|
@@ -388,6 +388,40 @@
|
|
|
388
388
|
"advanced": false,
|
|
389
389
|
"tab": "Voyage"
|
|
390
390
|
},
|
|
391
|
+
"api_key_open_router": {
|
|
392
|
+
"section": "api_keys",
|
|
393
|
+
"type": "text",
|
|
394
|
+
"slider": false,
|
|
395
|
+
"label": "settings.api_key.open_router",
|
|
396
|
+
"description": "settings.api_key.open_router.desc",
|
|
397
|
+
"value": "",
|
|
398
|
+
"min": null,
|
|
399
|
+
"max": null,
|
|
400
|
+
"multiplier": null,
|
|
401
|
+
"step": null,
|
|
402
|
+
"extra": {
|
|
403
|
+
"bold": true
|
|
404
|
+
},
|
|
405
|
+
"secret": true,
|
|
406
|
+
"persist": true,
|
|
407
|
+
"advanced": false,
|
|
408
|
+
"tab": "OpenRouter"
|
|
409
|
+
},
|
|
410
|
+
"api_endpoint_open_router": {
|
|
411
|
+
"section": "api_keys",
|
|
412
|
+
"type": "text",
|
|
413
|
+
"slider": false,
|
|
414
|
+
"label": "settings.api_endpoint_open_router",
|
|
415
|
+
"description": "settings.api_endpoint_open_router.desc",
|
|
416
|
+
"value": "https://openrouter.ai/api/v1",
|
|
417
|
+
"min": null,
|
|
418
|
+
"max": null,
|
|
419
|
+
"multiplier": null,
|
|
420
|
+
"step": null,
|
|
421
|
+
"secret": false,
|
|
422
|
+
"advanced": false,
|
|
423
|
+
"tab": "OpenRouter"
|
|
424
|
+
},
|
|
391
425
|
"app.env": {
|
|
392
426
|
"section": "general",
|
|
393
427
|
"type": "dict",
|
|
@@ -1059,10 +1059,10 @@ settings.agent.idx = Index to use
|
|
|
1059
1059
|
settings.agent.idx.auto_retrieve = Auto retrieve additional context from RAG
|
|
1060
1060
|
settings.agent.idx.auto_retrieve.desc = Auto retrieve additional context from RAG at the beginning if the index is provided.
|
|
1061
1061
|
settings.agent.idx.desc = Only if sub-mode is Chat with Files, choose the index to use in Autonomous and Experts modes
|
|
1062
|
-
settings.agent.llama.eval_model = Model for evaluation
|
|
1063
|
-
settings.agent.llama.eval_model.desc = Model used for evaluation with score/percentage (loop). If not selected, then current active model will be used.
|
|
1064
1062
|
settings.agent.llama.append_eval = Append and compare previous evaluation prompt in next evaluation
|
|
1065
1063
|
settings.agent.llama.append_eval.desc = If enabled, previous improvement prompt will be checked in next eval in loop
|
|
1064
|
+
settings.agent.llama.eval_model = Model for evaluation
|
|
1065
|
+
settings.agent.llama.eval_model.desc = Model used for evaluation with score/percentage (loop). If not selected, then current active model will be used.
|
|
1066
1066
|
settings.agent.llama.iterations = Max run iterations
|
|
1067
1067
|
settings.agent.llama.iterations.desc = Max run iterations before goal achieved in Always-continue mode
|
|
1068
1068
|
settings.agent.llama.max_eval = Max evaluation steps in loop
|
|
@@ -1092,6 +1092,8 @@ settings.api_endpoint_hugging_face = Router API Endpoint
|
|
|
1092
1092
|
settings.api_endpoint_hugging_face.desc = API Endpoint for HuggingFace Router provider (OpenAI compatible ChatCompletions)
|
|
1093
1093
|
settings.api_endpoint_mistral = API Endpoint
|
|
1094
1094
|
settings.api_endpoint_mistral.desc = Mistral AI API endpoint URL, default: https://api.mistral.ai/v1
|
|
1095
|
+
settings.api_endpoint_open_router = API Endpoint
|
|
1096
|
+
settings.api_endpoint_open_router.desc = OpenRouter API endpoint URL, default: https://openrouter.ai/api/v1
|
|
1095
1097
|
settings.api_endpoint_perplexity = API Endpoint
|
|
1096
1098
|
settings.api_endpoint_perplexity.desc = Perplexity API endpoint URL, default: https://api.perplexity.ai
|
|
1097
1099
|
settings.api_endpoint_xai = API Endpoint
|
|
@@ -1108,6 +1110,8 @@ settings.api_key.hugging_face = HuggingFace API KEY
|
|
|
1108
1110
|
settings.api_key.hugging_face.desc = Required for the HuggingFace API.
|
|
1109
1111
|
settings.api_key.mistral = Mistral AI API KEY
|
|
1110
1112
|
settings.api_key.mistral.desc = Required for the Mistral AI API.
|
|
1113
|
+
settings.api_key.open_router = OpenRouter API KEY
|
|
1114
|
+
settings.api_key.open_router.desc = Required for the OpenRouter API.
|
|
1111
1115
|
settings.api_key.perplexity = Perplexity API KEY
|
|
1112
1116
|
settings.api_key.perplexity.desc = Required for the Perplexity API.
|
|
1113
1117
|
settings.api_key.voyage = VoyageAI API KEY
|
|
@@ -1345,7 +1349,9 @@ settings.section.api_keys.google = Google
|
|
|
1345
1349
|
settings.section.api_keys.huggingface = HuggingFace
|
|
1346
1350
|
settings.section.api_keys.mistral_ai = Mistral AI
|
|
1347
1351
|
settings.section.api_keys.openai = OpenAI
|
|
1352
|
+
settings.section.api_keys.openrouter = OpenRouter
|
|
1348
1353
|
settings.section.api_keys.perplexity = Perplexity
|
|
1354
|
+
settings.section.api_keys.voyage = VoyageAI
|
|
1349
1355
|
settings.section.api_keys.xai = xAI
|
|
1350
1356
|
settings.section.audio = Audio
|
|
1351
1357
|
settings.section.audio.cache = Cache
|
|
@@ -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.08.26
|
|
9
|
+
# Updated Date: 2025.08.26 23:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import copy
|
|
@@ -2335,6 +2335,15 @@ class Patch:
|
|
|
2335
2335
|
})
|
|
2336
2336
|
updated = True
|
|
2337
2337
|
|
|
2338
|
+
# < 2.6.26
|
|
2339
|
+
if old < parse_version("2.6.26"):
|
|
2340
|
+
print("Migrating config from < 2.6.26...")
|
|
2341
|
+
if "api_key_open_router" not in data:
|
|
2342
|
+
data["api_key_open_router"] = ""
|
|
2343
|
+
if "api_endpoint_open_router" not in data:
|
|
2344
|
+
data["api_endpoint_open_router"] = "https://openrouter.ai/api/v1"
|
|
2345
|
+
updated = True
|
|
2346
|
+
|
|
2338
2347
|
# update file
|
|
2339
2348
|
migrated = False
|
|
2340
2349
|
if updated:
|
pygpt_net/provider/llms/local.py
CHANGED
|
@@ -39,7 +39,7 @@ class LocalLLM(BaseLLM):
|
|
|
39
39
|
:param config: config keyword arguments list
|
|
40
40
|
:return: Embedding provider instance
|
|
41
41
|
"""
|
|
42
|
-
from llama_index.embeddings.
|
|
42
|
+
from llama_index.embeddings.openai_like import OpenAILikeEmbedding
|
|
43
43
|
args = {}
|
|
44
44
|
if config is not None:
|
|
45
45
|
args = self.parse_args({
|
|
@@ -47,7 +47,7 @@ class LocalLLM(BaseLLM):
|
|
|
47
47
|
}, window)
|
|
48
48
|
if "model" in args and "model_name" not in args:
|
|
49
49
|
args["model_name"] = args.pop("model")
|
|
50
|
-
return
|
|
50
|
+
return OpenAILikeEmbedding(**args)
|
|
51
51
|
|
|
52
52
|
def llama(
|
|
53
53
|
self,
|
|
@@ -65,4 +65,10 @@ class LocalLLM(BaseLLM):
|
|
|
65
65
|
"""
|
|
66
66
|
from llama_index.llms.openai_like import OpenAILike
|
|
67
67
|
args = self.parse_args(model.llama_index, window)
|
|
68
|
+
if "model" not in args:
|
|
69
|
+
args["model"] = model.id
|
|
70
|
+
if "is_chat_model" not in args:
|
|
71
|
+
args["is_chat_model"] = True
|
|
72
|
+
if "is_function_calling_model" not in args:
|
|
73
|
+
args["is_function_calling_model"] = model.tool_calls
|
|
68
74
|
return OpenAILike(**args)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# ================================================== #
|
|
4
|
+
# This file is a part of PYGPT package #
|
|
5
|
+
# Website: https://pygpt.net #
|
|
6
|
+
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
|
7
|
+
# MIT License #
|
|
8
|
+
# Created By : Marcin Szczygliński #
|
|
9
|
+
# Updated Date: 2025.08.26 23:00:00 #
|
|
10
|
+
# ================================================== #
|
|
11
|
+
|
|
12
|
+
from typing import Optional, Dict, List
|
|
13
|
+
|
|
14
|
+
from llama_index.core.base.embeddings.base import BaseEmbedding
|
|
15
|
+
from llama_index.core.llms.llm import BaseLLM as LlamaBaseLLM
|
|
16
|
+
|
|
17
|
+
from pygpt_net.core.types import (
|
|
18
|
+
MODE_LLAMA_INDEX,
|
|
19
|
+
)
|
|
20
|
+
from pygpt_net.provider.llms.base import BaseLLM
|
|
21
|
+
from pygpt_net.item.model import ModelItem
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class OpenRouterLLM(BaseLLM):
|
|
25
|
+
def __init__(self, *args, **kwargs):
|
|
26
|
+
super(OpenRouterLLM, self).__init__(*args, **kwargs)
|
|
27
|
+
self.id = "open_router"
|
|
28
|
+
self.name = "OpenRouter"
|
|
29
|
+
self.type = [MODE_LLAMA_INDEX, "embeddings"]
|
|
30
|
+
|
|
31
|
+
def get_embeddings_model(
|
|
32
|
+
self,
|
|
33
|
+
window,
|
|
34
|
+
config: Optional[List[Dict]] = None
|
|
35
|
+
) -> BaseEmbedding:
|
|
36
|
+
"""
|
|
37
|
+
Return provider instance for embeddings
|
|
38
|
+
|
|
39
|
+
:param window: window instance
|
|
40
|
+
:param config: config keyword arguments list
|
|
41
|
+
:return: Embedding provider instance
|
|
42
|
+
"""
|
|
43
|
+
from llama_index.embeddings.openai_like import OpenAILikeEmbedding
|
|
44
|
+
args = {}
|
|
45
|
+
if config is not None:
|
|
46
|
+
args = self.parse_args({
|
|
47
|
+
"args": config,
|
|
48
|
+
}, window)
|
|
49
|
+
if "api_key" not in args:
|
|
50
|
+
args["api_key"] = window.core.config.get("api_key_open_router", "")
|
|
51
|
+
if "api_base" not in args:
|
|
52
|
+
args["api_base"] = window.core.config.get("api_endpoint_open_router", "")
|
|
53
|
+
if "model" in args and "model_name" not in args:
|
|
54
|
+
args["model_name"] = args.pop("model")
|
|
55
|
+
return OpenAILikeEmbedding(**args)
|
|
56
|
+
|
|
57
|
+
def llama(
|
|
58
|
+
self,
|
|
59
|
+
window,
|
|
60
|
+
model: ModelItem,
|
|
61
|
+
stream: bool = False
|
|
62
|
+
) -> LlamaBaseLLM:
|
|
63
|
+
"""
|
|
64
|
+
Return LLM provider instance for llama
|
|
65
|
+
|
|
66
|
+
:param window: window instance
|
|
67
|
+
:param model: model instance
|
|
68
|
+
:param stream: stream mode
|
|
69
|
+
:return: LLM provider instance
|
|
70
|
+
"""
|
|
71
|
+
from llama_index.llms.openai_like import OpenAILike
|
|
72
|
+
args = self.parse_args(model.llama_index, window)
|
|
73
|
+
if "model" not in args:
|
|
74
|
+
args["model"] = model.id
|
|
75
|
+
if "api_key" not in args:
|
|
76
|
+
args["api_key"] = window.core.config.get("api_key_open_router", "")
|
|
77
|
+
if "api_base" not in args:
|
|
78
|
+
args["api_base"] = window.core.config.get("api_endpoint_open_router", "")
|
|
79
|
+
if "is_chat_model" not in args:
|
|
80
|
+
args["is_chat_model"] = True
|
|
81
|
+
if "is_function_calling_model" not in args:
|
|
82
|
+
args["is_function_calling_model"] = model.tool_calls
|
|
83
|
+
return OpenAILike(**args)
|
|
84
|
+
|
|
85
|
+
def get_models(
|
|
86
|
+
self,
|
|
87
|
+
window,
|
|
88
|
+
) -> List[Dict]:
|
|
89
|
+
"""
|
|
90
|
+
Return list of models for the provider
|
|
91
|
+
|
|
92
|
+
:param window: window instance
|
|
93
|
+
:return: list of models
|
|
94
|
+
"""
|
|
95
|
+
items = []
|
|
96
|
+
client = self.get_client(window)
|
|
97
|
+
models_list = client.models.list()
|
|
98
|
+
if models_list.data:
|
|
99
|
+
for item in models_list.data:
|
|
100
|
+
items.append({
|
|
101
|
+
"id": item.id,
|
|
102
|
+
"name": item.id,
|
|
103
|
+
})
|
|
104
|
+
return items
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pygpt-net
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.26
|
|
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, 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
|
|
@@ -51,6 +51,7 @@ Requires-Dist: llama-index-embeddings-huggingface-api (>=0.3.1,<0.4.0)
|
|
|
51
51
|
Requires-Dist: llama-index-embeddings-mistralai (>=0.3.0,<0.4.0)
|
|
52
52
|
Requires-Dist: llama-index-embeddings-ollama (>=0.5.0,<0.6.0)
|
|
53
53
|
Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
|
|
54
|
+
Requires-Dist: llama-index-embeddings-openai-like (>=0.1.1,<0.2.0)
|
|
54
55
|
Requires-Dist: llama-index-embeddings-voyageai (>=0.3.6,<0.4.0)
|
|
55
56
|
Requires-Dist: llama-index-llms-anthropic (>=0.6.19,<0.7.0)
|
|
56
57
|
Requires-Dist: llama-index-llms-azure-openai (>=0.3.4,<0.4.0)
|
|
@@ -116,7 +117,7 @@ Description-Content-Type: text/markdown
|
|
|
116
117
|
|
|
117
118
|
[](https://snapcraft.io/pygpt)
|
|
118
119
|
|
|
119
|
-
Release: **2.6.
|
|
120
|
+
Release: **2.6.26** | build: **2025-08-26** | Python: **>=3.10, <3.14**
|
|
120
121
|
|
|
121
122
|
> Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
|
|
122
123
|
>
|
|
@@ -1267,6 +1268,7 @@ There is built-in support for those LLM providers:
|
|
|
1267
1268
|
- `Mistral AI`
|
|
1268
1269
|
- `Ollama`
|
|
1269
1270
|
- `OpenAI`
|
|
1271
|
+
- `OpenRouter`
|
|
1270
1272
|
- `Perplexity`
|
|
1271
1273
|
- `xAI`
|
|
1272
1274
|
|
|
@@ -3540,6 +3542,10 @@ may consume additional tokens that are not displayed in the main window.
|
|
|
3540
3542
|
|
|
3541
3543
|
## Recent changes:
|
|
3542
3544
|
|
|
3545
|
+
**2.6.26 (2025-08-26)**
|
|
3546
|
+
|
|
3547
|
+
- Added new provider: OpenRouter (#133).
|
|
3548
|
+
|
|
3543
3549
|
**2.6.25 (2025-08-26)**
|
|
3544
3550
|
|
|
3545
3551
|
- Fixed the empty agent ID issue in OpenAI Agents evaluation.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
pygpt_net/CHANGELOG.txt,sha256=
|
|
1
|
+
pygpt_net/CHANGELOG.txt,sha256=OPzWcDwJlO6V56bbymxIGot4eDXyVAYm_j3tDmQgUs8,102209
|
|
2
2
|
pygpt_net/LICENSE,sha256=dz9sfFgYahvu2NZbx4C1xCsVn9GVer2wXcMkFRBvqzY,1146
|
|
3
|
-
pygpt_net/__init__.py,sha256=
|
|
4
|
-
pygpt_net/app.py,sha256=
|
|
3
|
+
pygpt_net/__init__.py,sha256=svlE7En0NQLfBZljWRbjDPQjLwh1gTqdIupgnwRJYjU,1373
|
|
4
|
+
pygpt_net/app.py,sha256=yj9spTUBBXrsKAFF3FlQrLgNNtFMXKLnsRIRxlXtqCY,21233
|
|
5
5
|
pygpt_net/config.py,sha256=LCKrqQfePVNrAvH3EY_1oZx1Go754sDoyUneJ0iGWFI,16660
|
|
6
6
|
pygpt_net/container.py,sha256=NsMSHURaEC_eW8vrCNdztwqkxB7jui3yVlzUOMYvCHg,4124
|
|
7
7
|
pygpt_net/controller/__init__.py,sha256=JEG5RwohoHCcqhBVoUhlwDJwsAhMbCRfl89QTtVXW9Q,6145
|
|
@@ -99,7 +99,7 @@ pygpt_net/controller/mode/__init__.py,sha256=1Kcz0xHc2IW_if9S9eQozBUvIu69eLAe7T-
|
|
|
99
99
|
pygpt_net/controller/mode/mode.py,sha256=F3rERGN_sAgAqDITFYd1Nj56_4MiBIS9TwjjSPH1uEc,7437
|
|
100
100
|
pygpt_net/controller/model/__init__.py,sha256=mQXq9u269D8TD3u_44J6DFFyHKkaZplk-tRFCssBGbE,509
|
|
101
101
|
pygpt_net/controller/model/editor.py,sha256=_WDVFTrgZKM5Y8MZiWur4e5oSuRbXr-Q3PDozVtZ9fw,16384
|
|
102
|
-
pygpt_net/controller/model/importer.py,sha256=
|
|
102
|
+
pygpt_net/controller/model/importer.py,sha256=yODAd4eNOdWEt12TP7DmXuqmu900s-mVbF_6e3hB61g,23531
|
|
103
103
|
pygpt_net/controller/model/model.py,sha256=E0VfgIwNn75pjnB_v3RnqHr6jV1Eeua8VgpreQlA8vI,9132
|
|
104
104
|
pygpt_net/controller/notepad/__init__.py,sha256=ZbMh4D6nsGuI4AwYMdegfij5ubmUznEE_UcqSSDjSPk,511
|
|
105
105
|
pygpt_net/controller/notepad/notepad.py,sha256=mQgXalIMKkYTVKGkUD1mEHkHIzhTlt3QSiSb5eIhZgo,10767
|
|
@@ -271,7 +271,7 @@ pygpt_net/core/llm/llm.py,sha256=O4dSkOvs0nKQffdFuGSlScvPCyrTFTNRFJTH-frqOnM,238
|
|
|
271
271
|
pygpt_net/core/locale/__init__.py,sha256=5fmTz0u-DvCrII3KqfVAnd8YIQ8F_JDPfN16z5JRcU4,510
|
|
272
272
|
pygpt_net/core/locale/locale.py,sha256=lplM0fr0oFOcp8Nhoss7EGfbnAqE_kQnX0KbttQjgP0,6059
|
|
273
273
|
pygpt_net/core/models/__init__.py,sha256=EpJrNNINMcaO4Qc6a87IWZkfBMx7G9YJN-pdLpcqH3w,510
|
|
274
|
-
pygpt_net/core/models/models.py,sha256=
|
|
274
|
+
pygpt_net/core/models/models.py,sha256=kvy5tpsbDwEws0W6v3Y4CjbV2VrGtu1_d4RubstzS_A,15782
|
|
275
275
|
pygpt_net/core/models/ollama.py,sha256=MiCt1Nzd3VHjnj7a0CmGjqUkPuD7401obd7G7KQIZzU,3189
|
|
276
276
|
pygpt_net/core/modes/__init__.py,sha256=dKpce7VTQCzmSfNBT1WHd_zKzXRthRs7ZKqHQSEtftc,509
|
|
277
277
|
pygpt_net/core/modes/modes.py,sha256=Dm1mChW26dzjrMe8QPUAbwnl95o62vyqbQVxwztMX5A,3065
|
|
@@ -330,7 +330,7 @@ pygpt_net/core/types/console.py,sha256=vzYZ4fYkwK71ECJB7Qop0qcVIC6USLxxKuFN-Zweu
|
|
|
330
330
|
pygpt_net/core/types/mode.py,sha256=jJIFch8lRo5q7lr3uX77odFjXBHwG1_h7_CxE56slSg,858
|
|
331
331
|
pygpt_net/core/types/model.py,sha256=V8O9yipzqyTmVjzeESQ1xvZpSdRU6UYmvWJ1M2Kxs5A,549
|
|
332
332
|
pygpt_net/core/types/multimodal.py,sha256=yeKLZ5MrCHU5LhWwFE-yGApt-FB59kTmElo3G7td9uw,594
|
|
333
|
-
pygpt_net/core/types/openai.py,sha256=
|
|
333
|
+
pygpt_net/core/types/openai.py,sha256=LQyJ506IbG2EJxLVHgKBDAjMLi_qbIC7ow_kM2zHwkw,1516
|
|
334
334
|
pygpt_net/core/types/tools.py,sha256=BdonNwytk5SxYtYdlDkMg5lMvFoXz3CQJHZ__oVlm_8,1223
|
|
335
335
|
pygpt_net/core/updater/__init__.py,sha256=fC4g0Xn9S8lLxGbop1q2o2qi9IZegoVayNVWemgBwds,511
|
|
336
336
|
pygpt_net/core/updater/updater.py,sha256=cykBw8BqJlJNisWnpXnSPZ25Gfw3Ufyd9a_dUuEo3p8,16740
|
|
@@ -347,8 +347,8 @@ pygpt_net/css_rc.py,sha256=i13kX7irhbYCWZ5yJbcMmnkFp_UfS4PYnvRFSPF7XXo,11349
|
|
|
347
347
|
pygpt_net/data/audio/click_off.mp3,sha256=aNiRDP1pt-Jy7ija4YKCNFBwvGWbzU460F4pZWZDS90,65201
|
|
348
348
|
pygpt_net/data/audio/click_on.mp3,sha256=qfdsSnthAEHVXzeyN4LlC0OvXuyW8p7stb7VXtlvZ1k,65201
|
|
349
349
|
pygpt_net/data/audio/ok.mp3,sha256=LTiV32pEBkpUGBkKkcOdOFB7Eyt_QoP2Nv6c5AaXftk,32256
|
|
350
|
-
pygpt_net/data/config/config.json,sha256=
|
|
351
|
-
pygpt_net/data/config/models.json,sha256=
|
|
350
|
+
pygpt_net/data/config/config.json,sha256=12lwz860pUODSsoPIuaU5Hj-5bCI877Q_BtyJ_MxcM8,25983
|
|
351
|
+
pygpt_net/data/config/models.json,sha256=2JioRPvIpqBj0WKmho85nUt0N_ejhcGqrgfPmr27O3g,110162
|
|
352
352
|
pygpt_net/data/config/modes.json,sha256=M882iiqX_R2sNQl9cqZ3k-uneEvO9wpARtHRMLx_LHw,2265
|
|
353
353
|
pygpt_net/data/config/presets/agent_code_act.json,sha256=GYHqhxtKFLUCvRI3IJAJ7Qe1k8yD9wGGNwManldWzlI,754
|
|
354
354
|
pygpt_net/data/config/presets/agent_openai.json,sha256=bpDJgLRey_effQkzFRoOEGd4aHUrmzeODSDdNzrf62I,730
|
|
@@ -383,7 +383,7 @@ pygpt_net/data/config/presets/current.vision.json,sha256=x1ll5B3ROSKYQA6l27PRGXU
|
|
|
383
383
|
pygpt_net/data/config/presets/dalle_white_cat.json,sha256=esqUb43cqY8dAo7B5u99tRC0MBV5lmlrVLnJhTSkL8w,552
|
|
384
384
|
pygpt_net/data/config/presets/joke_agent.json,sha256=R6n9P7KRb0s-vZWZE7kHdlOfXAx1yYrPmUw8uLyw8OE,474
|
|
385
385
|
pygpt_net/data/config/presets/joke_expert.json,sha256=jjcoIYEOaEp8kLoIbecxQROiq4J3Zess5w8_HmngPOY,671
|
|
386
|
-
pygpt_net/data/config/settings.json,sha256=
|
|
386
|
+
pygpt_net/data/config/settings.json,sha256=KrUtxc-9XiYFi73gauRVidm-YDnSs8w_L5VBWX2Z3VQ,68977
|
|
387
387
|
pygpt_net/data/config/settings_section.json,sha256=OLWgjs3hHFzk50iwzVyUpcFW7dfochOnbZS0vDoMlDU,1158
|
|
388
388
|
pygpt_net/data/css/fix_windows.css,sha256=Mks14Vg25ncbMqZJfAMStrhvZmgHF6kU75ohTWRZeI8,664
|
|
389
389
|
pygpt_net/data/css/fix_windows.dark.css,sha256=7hGbT_qI5tphYC_WlFpJRDAcmjBb0AQ2Yc-y-_Zzf2M,161
|
|
@@ -1608,7 +1608,7 @@ pygpt_net/data/js/katex/katex.min.css,sha256=lVaKnUaQNG4pI71WHffQZVALLQF4LMZEk4n
|
|
|
1608
1608
|
pygpt_net/data/js/katex/katex.min.js,sha256=KLASOtKS2x8pUxWVzCDmlWJ4jhuLb0vtrgakbD6gDDo,276757
|
|
1609
1609
|
pygpt_net/data/languages.csv,sha256=fvtER6vnTXFHQslCh-e0xCfZDQ-ijgW4GYpOJG4U7LY,8289
|
|
1610
1610
|
pygpt_net/data/locale/locale.de.ini,sha256=-9uJDmILG7HXvU-L4HbYGmKEwHLqbH0CKVfuZnkguz4,102617
|
|
1611
|
-
pygpt_net/data/locale/locale.en.ini,sha256=
|
|
1611
|
+
pygpt_net/data/locale/locale.en.ini,sha256=zQ9OR-cjWkLdbj5WZRDN02hLZMqN9dti3Hp8XeWPXRI,93994
|
|
1612
1612
|
pygpt_net/data/locale/locale.es.ini,sha256=OuXZrLbmPDDYWXgzREf74F4t7KYvGHRJZtb_EbreyCQ,103268
|
|
1613
1613
|
pygpt_net/data/locale/locale.fr.ini,sha256=6Qu9cL_MM6mQ6dWXt3_-zKh4W_mmAVA4woDylOZXavk,106069
|
|
1614
1614
|
pygpt_net/data/locale/locale.it.ini,sha256=6FhyvqOs_jtlawtTBoDp5D2q9yOU8j3W0MnvruvkXvo,101076
|
|
@@ -2038,7 +2038,7 @@ pygpt_net/provider/core/calendar/db_sqlite/storage.py,sha256=QDclQCQdr4QyRIqjgGX
|
|
|
2038
2038
|
pygpt_net/provider/core/config/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
2039
2039
|
pygpt_net/provider/core/config/base.py,sha256=cbvzbMNqL2XgC-36gGubnU37t94AX7LEw0lecb2Nm80,1365
|
|
2040
2040
|
pygpt_net/provider/core/config/json_file.py,sha256=GCcpCRQnBiSLWwlGbG9T3ZgiHkTfp5Jsg2KYkZcakBw,6789
|
|
2041
|
-
pygpt_net/provider/core/config/patch.py,sha256=
|
|
2041
|
+
pygpt_net/provider/core/config/patch.py,sha256=SipJw4rQ7TxOGd7zq5Ppjro28a2zAhIWYPBLKqkylag,123759
|
|
2042
2042
|
pygpt_net/provider/core/ctx/__init__.py,sha256=jQQgG9u_ZLsZWXustoc1uvC-abUvj4RBKPAM30-f2Kc,488
|
|
2043
2043
|
pygpt_net/provider/core/ctx/base.py,sha256=Tfb4MDNe9BXXPU3lbzpdYwJF9S1oa2-mzgu5XT4It9g,3003
|
|
2044
2044
|
pygpt_net/provider/core/ctx/db_sqlite/__init__.py,sha256=0dP8VhI4bnFsQQKxAkaleKFlyaMycDD_cnE7gBCa57Y,512
|
|
@@ -2128,10 +2128,11 @@ pygpt_net/provider/llms/llama_index/openai/responses.py,sha256=dOzrPV0u1CQRloU2c
|
|
|
2128
2128
|
pygpt_net/provider/llms/llama_index/openai/utils.py,sha256=IdvbjJ2y5zWDkntoPgBZ2pGbcrYIbGbg1smoju2XkUI,29243
|
|
2129
2129
|
pygpt_net/provider/llms/llama_index/x_ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2130
2130
|
pygpt_net/provider/llms/llama_index/x_ai/embedding.py,sha256=QrGgpkD0F4Jm5cMJgN6oYai7UK_bJ0YoGr7Uvy5GtRU,2458
|
|
2131
|
-
pygpt_net/provider/llms/local.py,sha256=
|
|
2131
|
+
pygpt_net/provider/llms/local.py,sha256=UGFFbao5zOaoztg7ED4kyz3-QYTDSGozhaXm2T-G5K0,2570
|
|
2132
2132
|
pygpt_net/provider/llms/mistral.py,sha256=e8pcWyNT8HjA3KLZL1vO7z4FlBxer-QCVpaGtKgQ4UY,3858
|
|
2133
2133
|
pygpt_net/provider/llms/ollama.py,sha256=vVqA22eH-APgyfHCaHSvJlAgxLSvspvZSaOCeaKWQCw,4434
|
|
2134
2134
|
pygpt_net/provider/llms/ollama_custom.py,sha256=WVbLiEEwnz5loKiLy7EYmpuWz0Tp5Vhd1vOUB2051kI,24167
|
|
2135
|
+
pygpt_net/provider/llms/open_router.py,sha256=WydEHidDtkTCJ2_4xmjGNxCttzj8WcLL0oc3iTui3QE,3569
|
|
2135
2136
|
pygpt_net/provider/llms/openai.py,sha256=oaPCEffOQI3TGe_l15Ta3Mt_MKshxsONRCSc59fINaE,5419
|
|
2136
2137
|
pygpt_net/provider/llms/perplexity.py,sha256=DO5RZaUEDmRhps0Hoa1OX05no5n4uxT4JjwOGWPshPY,3899
|
|
2137
2138
|
pygpt_net/provider/llms/x_ai.py,sha256=TkOdSce3OndH4lSoYgBB7FkljM0eqbSX3OT5UtT0Cqc,4509
|
|
@@ -2447,8 +2448,8 @@ pygpt_net/ui/widget/textarea/web.py,sha256=cqs5i67bD19_BNgcYL7NXlwYBei4UYSL_IYPZ
|
|
|
2447
2448
|
pygpt_net/ui/widget/vision/__init__.py,sha256=8HT4tQFqQogEEpGYTv2RplKBthlsFKcl5egnv4lzzEw,488
|
|
2448
2449
|
pygpt_net/ui/widget/vision/camera.py,sha256=v1qEncaZr5pXocO5Cpk_lsgfCMvfFigdJmzsYfzvCl0,1877
|
|
2449
2450
|
pygpt_net/utils.py,sha256=GBAXOpp_Wjfu7Al7TnTV62-R-JPMiP9GuPXLJ0HmeJU,8906
|
|
2450
|
-
pygpt_net-2.6.
|
|
2451
|
-
pygpt_net-2.6.
|
|
2452
|
-
pygpt_net-2.6.
|
|
2453
|
-
pygpt_net-2.6.
|
|
2454
|
-
pygpt_net-2.6.
|
|
2451
|
+
pygpt_net-2.6.26.dist-info/LICENSE,sha256=rbPqNB_xxANH8hKayJyIcTwD4bj4Y2G-Mcm85r1OImM,1126
|
|
2452
|
+
pygpt_net-2.6.26.dist-info/METADATA,sha256=Gy7L13Hw71wlfPfAHjwaC56aABGM95w2AZlrYRo0J8w,158049
|
|
2453
|
+
pygpt_net-2.6.26.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
2454
|
+
pygpt_net-2.6.26.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
|
|
2455
|
+
pygpt_net-2.6.26.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|