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 CHANGED
@@ -1,3 +1,7 @@
1
+ 2.6.26 (2025-08-26)
2
+
3
+ - Added new provider: OpenRouter (#133).
4
+
1
5
  2.6.25 (2025-08-26)
2
6
 
3
7
  - Fixed the empty agent ID issue in OpenAI Agents evaluation.
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.25"
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.24 23:00:00 #
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 19:00:00 #
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'] = [
@@ -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.24 03:00:00 #
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"
@@ -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.24 03:00:00 #
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.25",
4
- "app.version": "2.6.25",
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": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.6.25",
4
- "app.version": "2.6.25",
3
+ "version": "2.6.26",
4
+ "app.version": "2.6.26",
5
5
  "updated_at": "2025-08-26T23:07:35"
6
6
  },
7
7
  "items": {
@@ -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 19:00:00 #
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:
@@ -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.openai import OpenAIEmbedding
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 OpenAIEmbedding(**args)
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.25
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
  [![pygpt](https://snapcraft.io/pygpt/badge.svg)](https://snapcraft.io/pygpt)
118
119
 
119
- Release: **2.6.25** | build: **2025-08-26** | Python: **>=3.10, <3.14**
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=H2S4Ef-StXOJORUfHzAlXuDM2RfGCcqfjX1phBCXdvM,102146
1
+ pygpt_net/CHANGELOG.txt,sha256=OPzWcDwJlO6V56bbymxIGot4eDXyVAYm_j3tDmQgUs8,102209
2
2
  pygpt_net/LICENSE,sha256=dz9sfFgYahvu2NZbx4C1xCsVn9GVer2wXcMkFRBvqzY,1146
3
- pygpt_net/__init__.py,sha256=nUePp_QEAhrDVl76LALHaSxBux29fjPz6LxnAoBSKIg,1373
4
- pygpt_net/app.py,sha256=8Yz8r16FpNntiVn2pN-_qnoYHd-jVdugKP0P_MOiYSA,21133
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=BO7nIN83qGq-sxROwY5C9v2OhcVwKcHx3-IJTz8nZX4,22996
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=WJnfVcLPFImAylHV3Kix7e-n9uqujVJ97jcK46NLEz8,15506
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=IrzgcxWg-yLBZUzGeGcvUnzNHQpRQEjktaAXGLApf3k,1497
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=YpcIHA_-OsuXiTmf_PoqW_UBadC8M7H7VAUgwxopj2w,25678
351
- pygpt_net/data/config/models.json,sha256=6qBHttexFm4ehoQGa5oXrIGjafHn44XmS7R7VXncTXw,110162
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=PzWl89Gi3mbmEtZtsG3koVlQIPw_4gwun9HTCGbsmhc,68019
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=pXzxi_iuUSZmK8UUsrXPMQIaHEmluwGglWCA2FC6t3c,93624
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=7eIeCvxm6Bn3tck6blq22LD5W8xQ5f9brQigX4EvqFA,123347
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=7vU0xWlMrFLzLMc6Os_xD-oAMxLEitvEHQcSdvCEY50,2290
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.25.dist-info/LICENSE,sha256=rbPqNB_xxANH8hKayJyIcTwD4bj4Y2G-Mcm85r1OImM,1126
2451
- pygpt_net-2.6.25.dist-info/METADATA,sha256=4FP0zTdSkVksnIePP4ra6wSV5C7bYGowxWagKQ6eCEc,157900
2452
- pygpt_net-2.6.25.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
2453
- pygpt_net-2.6.25.dist-info/entry_points.txt,sha256=qvpII6UHIt8XfokmQWnCYQrTgty8FeJ9hJvOuUFCN-8,43
2454
- pygpt_net-2.6.25.dist-info/RECORD,,
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,,