pygpt-net 2.6.65__py3-none-any.whl → 2.6.67__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 +17 -0
- pygpt_net/__init__.py +3 -3
- pygpt_net/app.py +2 -0
- pygpt_net/controller/chat/chat.py +0 -0
- pygpt_net/controller/chat/handler/openai_stream.py +137 -7
- pygpt_net/controller/chat/render.py +0 -0
- pygpt_net/controller/config/field/checkbox_list.py +34 -1
- pygpt_net/controller/config/field/textarea.py +2 -2
- pygpt_net/controller/dialogs/info.py +2 -2
- pygpt_net/controller/media/media.py +48 -1
- pygpt_net/controller/model/editor.py +74 -9
- pygpt_net/controller/presets/presets.py +4 -1
- pygpt_net/controller/settings/editor.py +25 -1
- pygpt_net/controller/ui/mode.py +14 -10
- pygpt_net/controller/ui/ui.py +18 -1
- pygpt_net/core/image/image.py +34 -1
- pygpt_net/core/tabs/tabs.py +0 -0
- pygpt_net/core/types/image.py +70 -3
- pygpt_net/core/video/video.py +43 -3
- pygpt_net/data/config/config.json +4 -3
- pygpt_net/data/config/models.json +637 -38
- pygpt_net/data/locale/locale.de.ini +5 -0
- pygpt_net/data/locale/locale.en.ini +5 -0
- pygpt_net/data/locale/locale.es.ini +5 -0
- pygpt_net/data/locale/locale.fr.ini +5 -0
- pygpt_net/data/locale/locale.it.ini +5 -0
- pygpt_net/data/locale/locale.pl.ini +5 -0
- pygpt_net/data/locale/locale.uk.ini +5 -0
- pygpt_net/data/locale/locale.zh.ini +5 -0
- pygpt_net/item/model.py +15 -19
- pygpt_net/provider/agents/openai/agent.py +0 -0
- pygpt_net/provider/api/google/__init__.py +20 -9
- pygpt_net/provider/api/google/image.py +161 -28
- pygpt_net/provider/api/google/video.py +73 -36
- pygpt_net/provider/api/openai/__init__.py +21 -11
- pygpt_net/provider/api/openai/agents/client.py +0 -0
- pygpt_net/provider/api/openai/video.py +562 -0
- pygpt_net/provider/core/config/patch.py +7 -0
- pygpt_net/provider/core/model/patch.py +54 -3
- pygpt_net/provider/vector_stores/qdrant.py +117 -0
- pygpt_net/ui/dialog/models.py +10 -1
- pygpt_net/ui/layout/toolbox/raw.py +7 -1
- pygpt_net/ui/layout/toolbox/video.py +14 -6
- pygpt_net/ui/widget/option/checkbox_list.py +14 -2
- pygpt_net/ui/widget/option/input.py +3 -1
- {pygpt_net-2.6.65.dist-info → pygpt_net-2.6.67.dist-info}/METADATA +72 -25
- {pygpt_net-2.6.65.dist-info → pygpt_net-2.6.67.dist-info}/RECORD +45 -43
- {pygpt_net-2.6.65.dist-info → pygpt_net-2.6.67.dist-info}/LICENSE +0 -0
- {pygpt_net-2.6.65.dist-info → pygpt_net-2.6.67.dist-info}/WHEEL +0 -0
- {pygpt_net-2.6.65.dist-info → pygpt_net-2.6.67.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
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.09.30 13:00:00 #
|
|
10
|
+
# ================================================== #
|
|
11
|
+
|
|
12
|
+
import datetime
|
|
13
|
+
import os.path
|
|
14
|
+
from typing import Optional
|
|
15
|
+
|
|
16
|
+
from llama_index.core.indices.base import BaseIndex
|
|
17
|
+
from llama_index.core import StorageContext
|
|
18
|
+
|
|
19
|
+
from pygpt_net.utils import parse_args
|
|
20
|
+
from .base import BaseStore
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class QdrantProvider(BaseStore):
|
|
24
|
+
def __init__(self, *args, **kwargs):
|
|
25
|
+
super(QdrantProvider, self).__init__(*args, **kwargs)
|
|
26
|
+
"""
|
|
27
|
+
Qdrant vector store provider
|
|
28
|
+
|
|
29
|
+
:param args: args
|
|
30
|
+
:param kwargs: kwargs
|
|
31
|
+
"""
|
|
32
|
+
self.window = kwargs.get('window', None)
|
|
33
|
+
self.id = "QdrantVectorStore"
|
|
34
|
+
self.prefix = "qdrant_" # prefix for index directory
|
|
35
|
+
self.indexes = {}
|
|
36
|
+
|
|
37
|
+
def create(self, id: str):
|
|
38
|
+
"""
|
|
39
|
+
Create empty index
|
|
40
|
+
|
|
41
|
+
:param id: index name
|
|
42
|
+
"""
|
|
43
|
+
path = self.get_path(id)
|
|
44
|
+
if not os.path.exists(path):
|
|
45
|
+
os.makedirs(path, exist_ok=True)
|
|
46
|
+
self.store(id)
|
|
47
|
+
|
|
48
|
+
def get_qdrant_store(self, id: str):
|
|
49
|
+
"""
|
|
50
|
+
Get Qdrant vector store
|
|
51
|
+
|
|
52
|
+
:param id: index name
|
|
53
|
+
:return: QdrantVectorStore instance
|
|
54
|
+
"""
|
|
55
|
+
from llama_index.vector_stores.qdrant import QdrantVectorStore
|
|
56
|
+
|
|
57
|
+
additional_args = parse_args(
|
|
58
|
+
self.window.core.config.get('llama.idx.storage.args', []),
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
url = additional_args.get('url', 'http://localhost:6333')
|
|
62
|
+
api_key = additional_args.get('api_key', '')
|
|
63
|
+
|
|
64
|
+
store_args = {k: v for k, v in additional_args.items() if k not in ['url', 'api_key', 'collection_name']}
|
|
65
|
+
|
|
66
|
+
return QdrantVectorStore(
|
|
67
|
+
url=url,
|
|
68
|
+
api_key=api_key,
|
|
69
|
+
collection_name=id,
|
|
70
|
+
**store_args
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
def get(
|
|
74
|
+
self,
|
|
75
|
+
id: str,
|
|
76
|
+
llm: Optional = None,
|
|
77
|
+
embed_model: Optional = None,
|
|
78
|
+
) -> BaseIndex:
|
|
79
|
+
"""
|
|
80
|
+
Get index
|
|
81
|
+
|
|
82
|
+
:param id: index name
|
|
83
|
+
:param llm: LLM instance
|
|
84
|
+
:param embed_model: Embedding model instance
|
|
85
|
+
:return: index instance
|
|
86
|
+
"""
|
|
87
|
+
if not self.exists(id):
|
|
88
|
+
self.create(id)
|
|
89
|
+
vector_store = self.get_qdrant_store(id)
|
|
90
|
+
storage_context = StorageContext.from_defaults(
|
|
91
|
+
vector_store=vector_store,
|
|
92
|
+
)
|
|
93
|
+
self.indexes[id] = self.index_from_store(
|
|
94
|
+
vector_store=vector_store,
|
|
95
|
+
storage_context=storage_context,
|
|
96
|
+
llm=llm,
|
|
97
|
+
embed_model=embed_model,
|
|
98
|
+
)
|
|
99
|
+
return self.indexes[id]
|
|
100
|
+
|
|
101
|
+
def store(
|
|
102
|
+
self,
|
|
103
|
+
id: str,
|
|
104
|
+
index: Optional[BaseIndex] = None
|
|
105
|
+
):
|
|
106
|
+
"""
|
|
107
|
+
Store index
|
|
108
|
+
|
|
109
|
+
:param id: index name
|
|
110
|
+
:param index: index instance
|
|
111
|
+
"""
|
|
112
|
+
path = self.get_path(id)
|
|
113
|
+
os.makedirs(path, exist_ok=True)
|
|
114
|
+
lock_file = os.path.join(path, 'store.lock')
|
|
115
|
+
with open(lock_file, 'w') as f:
|
|
116
|
+
f.write(id + ': ' + str(datetime.datetime.now()))
|
|
117
|
+
self.indexes[id] = index
|
pygpt_net/ui/dialog/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.
|
|
9
|
+
# Updated Date: 2025.12.26 13:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import copy
|
|
@@ -166,11 +166,20 @@ class Models:
|
|
|
166
166
|
self.window.ui.nodes['models.editor.search'].on_search = self._on_search_models
|
|
167
167
|
self.window.ui.nodes['models.editor.search'].on_clear = self._on_clear_models # clear via "X" button
|
|
168
168
|
|
|
169
|
+
# provider select
|
|
170
|
+
option_provider = self.window.controller.model.editor.get_provider_option()
|
|
171
|
+
self.window.ui.config[parent_id]['provider_global'] = OptionCombo(self.window, parent_id, 'provider_global',
|
|
172
|
+
option_provider)
|
|
173
|
+
provider_keys = self.window.controller.config.placeholder.apply_by_id('llm_providers')
|
|
174
|
+
provider_keys.insert(0, {"-": trans("list.all")}) # add "All" option
|
|
175
|
+
self.window.ui.config[parent_id]['provider_global'].set_keys(provider_keys)
|
|
176
|
+
|
|
169
177
|
# container for search + list (left panel)
|
|
170
178
|
left_layout = QVBoxLayout()
|
|
171
179
|
left_layout.setContentsMargins(0, 0, 0, 0)
|
|
172
180
|
left_layout.setSpacing(6)
|
|
173
181
|
left_layout.addWidget(self.window.ui.nodes['models.editor.search'])
|
|
182
|
+
left_layout.addWidget(self.window.ui.config[parent_id]['provider_global'])
|
|
174
183
|
left_layout.addWidget(self.window.ui.nodes[id])
|
|
175
184
|
left_widget = QWidget()
|
|
176
185
|
left_widget.setLayout(left_layout)
|
|
@@ -6,11 +6,12 @@
|
|
|
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.
|
|
9
|
+
# Updated Date: 2025.12.25 20:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QWidget, QCheckBox
|
|
13
13
|
|
|
14
|
+
from pygpt_net.ui.widget.option.combo import OptionCombo
|
|
14
15
|
from pygpt_net.utils import trans
|
|
15
16
|
|
|
16
17
|
|
|
@@ -39,7 +40,12 @@ class Raw:
|
|
|
39
40
|
conf_global['img_raw'] = QCheckBox(trans("img.raw"), parent=container)
|
|
40
41
|
conf_global['img_raw'].toggled.connect(self.window.controller.media.toggle_raw)
|
|
41
42
|
|
|
43
|
+
conf_global = ui.config['global']
|
|
44
|
+
option_modes = self.window.core.image.get_available_modes()
|
|
45
|
+
conf_global['img_mode'] = OptionCombo(self.window, 'global', 'img_mode', option_modes)
|
|
46
|
+
|
|
42
47
|
cols = QHBoxLayout()
|
|
48
|
+
cols.addWidget(conf_global['img_mode'])
|
|
43
49
|
cols.addWidget(conf_global['img_raw'])
|
|
44
50
|
|
|
45
51
|
rows = QVBoxLayout()
|
|
@@ -6,12 +6,13 @@
|
|
|
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.
|
|
9
|
+
# Updated Date: 2025.12.26 12:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
|
-
from PySide6.QtWidgets import
|
|
12
|
+
from PySide6.QtWidgets import QWidget, QHBoxLayout
|
|
13
13
|
|
|
14
14
|
from pygpt_net.ui.widget.option.combo import OptionCombo
|
|
15
|
+
from pygpt_net.ui.widget.option.input import OptionInput
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
class Video:
|
|
@@ -36,11 +37,18 @@ class Video:
|
|
|
36
37
|
container = QWidget()
|
|
37
38
|
ui.nodes['video.options'] = container
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
option_ratio = self.window.core.video.get_aspect_ratio_option()
|
|
41
|
+
option_resolution = self.window.core.video.get_resolution_option()
|
|
42
|
+
option_duration = self.window.core.video.get_duration_option()
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
conf_global['video.aspect_ratio'] = OptionCombo(self.window, 'global', 'video.aspect_ratio', option_ratio)
|
|
45
|
+
conf_global['video.resolution'] = OptionCombo(self.window, 'global', 'video.resolution', option_resolution)
|
|
46
|
+
conf_global['video.duration'] = OptionInput(self.window, 'global', 'video.duration', option_duration)
|
|
47
|
+
|
|
48
|
+
rows = QHBoxLayout()
|
|
49
|
+
rows.addWidget(conf_global['video.resolution'], 2)
|
|
50
|
+
rows.addWidget(conf_global['video.aspect_ratio'], 2)
|
|
51
|
+
rows.addWidget(conf_global['video.duration'], 1)
|
|
44
52
|
rows.setContentsMargins(2, 5, 5, 5)
|
|
45
53
|
|
|
46
54
|
container.setLayout(rows)
|
|
@@ -6,10 +6,10 @@
|
|
|
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.
|
|
9
|
+
# Updated Date: 2025.12.25 20:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
|
-
from PySide6.QtWidgets import QCheckBox, QWidget
|
|
12
|
+
from PySide6.QtWidgets import QCheckBox, QWidget, QPushButton
|
|
13
13
|
|
|
14
14
|
from pygpt_net.ui.base.flow_layout import FlowLayout
|
|
15
15
|
from pygpt_net.utils import trans
|
|
@@ -84,6 +84,18 @@ class OptionCheckboxList(QWidget):
|
|
|
84
84
|
for widget in widgets:
|
|
85
85
|
self.layout.addWidget(widget)
|
|
86
86
|
|
|
87
|
+
# select/unselect all button
|
|
88
|
+
btn_select = QPushButton("X", self)
|
|
89
|
+
btn_select.setToolTip(trans("action.select_unselect_all"))
|
|
90
|
+
btn_select.clicked.connect(
|
|
91
|
+
lambda: self.window.controller.config.checkbox_list.on_select_all(
|
|
92
|
+
self.parent_id,
|
|
93
|
+
self.id,
|
|
94
|
+
self.option
|
|
95
|
+
)
|
|
96
|
+
)
|
|
97
|
+
self.layout.addWidget(btn_select)
|
|
98
|
+
|
|
87
99
|
self.layout.setContentsMargins(0, 0, 0, 0)
|
|
88
100
|
self.setLayout(self.layout)
|
|
89
101
|
|
|
@@ -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.
|
|
9
|
+
# Updated Date: 2025.12.26 12:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from PySide6.QtGui import QAction, QIcon
|
|
@@ -104,6 +104,8 @@ class OptionInput(QLineEdit):
|
|
|
104
104
|
self.real_time = self.option["real_time"]
|
|
105
105
|
if "read_only" in self.option and self.option["read_only"]:
|
|
106
106
|
self.setReadOnly(True)
|
|
107
|
+
if "placeholder" in self.option and self.option["placeholder"]:
|
|
108
|
+
self.setPlaceholderText(self.option["placeholder"])
|
|
107
109
|
|
|
108
110
|
# on update hook
|
|
109
111
|
self.textChanged.connect(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pygpt-net
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.67
|
|
4
4
|
Summary: Desktop AI Assistant powered by: OpenAI GPT-5, GPT-4, o1, o3, Gemini, Claude, Grok, DeepSeek, and other models supported by Llama Index, and Ollama. Chatbot, agents, completion, image generation, vision analysis, speech-to-text, plugins, MCP, internet access, file handling, command execution and more.
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: ai,api,api key,app,assistant,bielik,chat,chatbot,chatgpt,claude,dall-e,deepseek,desktop,gemini,gpt,gpt-3.5,gpt-4,gpt-4-vision,gpt-4o,gpt-5,gpt-oss,gpt3.5,gpt4,grok,langchain,llama-index,llama3,mistral,o1,o3,ollama,openai,presets,py-gpt,py_gpt,pygpt,pyside,qt,text completion,tts,ui,vision,whisper
|
|
@@ -24,44 +24,45 @@ Requires-Dist: Pygments (==2.19.2)
|
|
|
24
24
|
Requires-Dist: SQLAlchemy (==2.0.43)
|
|
25
25
|
Requires-Dist: SpeechRecognition (>=3.14.3,<4.0.0)
|
|
26
26
|
Requires-Dist: Telethon (>=1.40.0,<2.0.0)
|
|
27
|
-
Requires-Dist: anthropic (>=0.
|
|
28
|
-
Requires-Dist: azure-core (==1.
|
|
27
|
+
Requires-Dist: anthropic (>=0.75.0,<0.76.0)
|
|
28
|
+
Requires-Dist: azure-core (==1.37.0)
|
|
29
29
|
Requires-Dist: beautifulsoup4 (==4.13.5)
|
|
30
|
+
Requires-Dist: charset-normalizer (>=2.0,!=3.2.0)
|
|
30
31
|
Requires-Dist: chromadb (==1.1.0)
|
|
31
32
|
Requires-Dist: croniter (>=2.0.7,<3.0.0)
|
|
32
33
|
Requires-Dist: ddgs (>=9.5.5,<10.0.0)
|
|
33
34
|
Requires-Dist: docker (>=7.1.0,<8.0.0)
|
|
34
35
|
Requires-Dist: docx2txt (>=0.8,<0.9)
|
|
35
36
|
Requires-Dist: gkeepapi (==0.15.1)
|
|
36
|
-
Requires-Dist: google-api-python-client (==2.
|
|
37
|
-
Requires-Dist: google-
|
|
37
|
+
Requires-Dist: google-api-python-client (==2.187.0)
|
|
38
|
+
Requires-Dist: google-genai (>=1.56.0,<2.0.0)
|
|
38
39
|
Requires-Dist: grpcio (==1.75.0)
|
|
39
40
|
Requires-Dist: httpx (==0.28.1)
|
|
40
41
|
Requires-Dist: httpx-socks (>=0.10.1,<0.11.0)
|
|
41
42
|
Requires-Dist: huggingface-hub (==0.35.0)
|
|
42
43
|
Requires-Dist: ipykernel (>=6.30.1,<7.0.0)
|
|
43
44
|
Requires-Dist: jupyter_client (>=8.6.3,<9.0.0)
|
|
44
|
-
Requires-Dist: llama-index (==0.
|
|
45
|
-
Requires-Dist: llama-index-core (==0.
|
|
45
|
+
Requires-Dist: llama-index (==0.14.10)
|
|
46
|
+
Requires-Dist: llama-index-core (==0.14.10)
|
|
46
47
|
Requires-Dist: llama-index-embeddings-azure-openai (>=0.4.1,<0.5.0)
|
|
47
48
|
Requires-Dist: llama-index-embeddings-gemini (>=0.4.1,<0.5.0)
|
|
48
49
|
Requires-Dist: llama-index-embeddings-google-genai (>=0.3.1,<0.4.0)
|
|
49
50
|
Requires-Dist: llama-index-embeddings-huggingface-api (>=0.4.1,<0.5.0)
|
|
50
51
|
Requires-Dist: llama-index-embeddings-mistralai (>=0.4.1,<0.5.0)
|
|
51
|
-
Requires-Dist: llama-index-embeddings-ollama (>=0.8.
|
|
52
|
+
Requires-Dist: llama-index-embeddings-ollama (>=0.8.5,<0.9.0)
|
|
52
53
|
Requires-Dist: llama-index-embeddings-openai (>=0.5.1,<0.6.0)
|
|
53
54
|
Requires-Dist: llama-index-embeddings-openai-like (>=0.2.2,<0.3.0)
|
|
54
|
-
Requires-Dist: llama-index-embeddings-voyageai (>=0.
|
|
55
|
-
Requires-Dist: llama-index-llms-anthropic (>=0.
|
|
56
|
-
Requires-Dist: llama-index-llms-azure-openai (>=0.4.
|
|
55
|
+
Requires-Dist: llama-index-embeddings-voyageai (>=0.5.2,<0.6.0)
|
|
56
|
+
Requires-Dist: llama-index-llms-anthropic (>=0.10.4,<0.11.0)
|
|
57
|
+
Requires-Dist: llama-index-llms-azure-openai (>=0.4.2,<0.5.0)
|
|
57
58
|
Requires-Dist: llama-index-llms-deepseek (>=0.2.2,<0.3.0)
|
|
58
59
|
Requires-Dist: llama-index-llms-gemini (>=0.6.1,<0.7.0)
|
|
59
|
-
Requires-Dist: llama-index-llms-google-genai (>=0.
|
|
60
|
+
Requires-Dist: llama-index-llms-google-genai (>=0.8.2,<0.9.0)
|
|
60
61
|
Requires-Dist: llama-index-llms-huggingface-api (>=0.6.1,<0.7.0)
|
|
61
|
-
Requires-Dist: llama-index-llms-mistralai (>=0.
|
|
62
|
-
Requires-Dist: llama-index-llms-ollama (>=0.
|
|
63
|
-
Requires-Dist: llama-index-llms-openai (>=0.
|
|
64
|
-
Requires-Dist: llama-index-llms-openai-like (>=0.5.
|
|
62
|
+
Requires-Dist: llama-index-llms-mistralai (>=0.9.0,<0.10.0)
|
|
63
|
+
Requires-Dist: llama-index-llms-ollama (>=0.9.1,<0.10.0)
|
|
64
|
+
Requires-Dist: llama-index-llms-openai (>=0.6.12,<0.7.0)
|
|
65
|
+
Requires-Dist: llama-index-llms-openai-like (>=0.5.3,<0.6.0)
|
|
65
66
|
Requires-Dist: llama-index-llms-perplexity (>=0.4.1,<0.5.0)
|
|
66
67
|
Requires-Dist: llama-index-multi-modal-llms-openai (>=0.6.1,<0.7.0)
|
|
67
68
|
Requires-Dist: llama-index-readers-chatgpt-plugin (>=0.4.1,<0.5.0)
|
|
@@ -75,14 +76,15 @@ Requires-Dist: llama-index-readers-web (>=0.5.3,<0.6.0)
|
|
|
75
76
|
Requires-Dist: llama-index-vector-stores-chroma (>=0.5.3,<0.6.0)
|
|
76
77
|
Requires-Dist: llama-index-vector-stores-elasticsearch (==0.5.1)
|
|
77
78
|
Requires-Dist: llama-index-vector-stores-pinecone (>=0.7.1,<0.8.0)
|
|
78
|
-
Requires-Dist: llama-index-vector-stores-
|
|
79
|
+
Requires-Dist: llama-index-vector-stores-qdrant (>=0.8.5,<0.9.0)
|
|
80
|
+
Requires-Dist: llama-index-vector-stores-redis (>=0.6.2,<0.7.0)
|
|
79
81
|
Requires-Dist: mcp (>=1.13.1,<2.0.0)
|
|
80
82
|
Requires-Dist: mss (>=9.0.2,<10.0.0)
|
|
81
83
|
Requires-Dist: nbconvert (>=7.16.6,<8.0.0)
|
|
82
84
|
Requires-Dist: numpy (==1.26.4)
|
|
83
85
|
Requires-Dist: onnxruntime (==1.22.1)
|
|
84
|
-
Requires-Dist: openai (==
|
|
85
|
-
Requires-Dist: openai-agents (>=0.
|
|
86
|
+
Requires-Dist: openai (==2.14.0)
|
|
87
|
+
Requires-Dist: openai-agents (>=0.6.4,<0.7.0)
|
|
86
88
|
Requires-Dist: opencv-python (>=4.11.0.86,<5.0.0.0)
|
|
87
89
|
Requires-Dist: packaging (>=25.0,<26.0)
|
|
88
90
|
Requires-Dist: pandas (==2.2.3)
|
|
@@ -104,7 +106,7 @@ Requires-Dist: tiktoken (==0.11.0)
|
|
|
104
106
|
Requires-Dist: transformers (==4.56.2)
|
|
105
107
|
Requires-Dist: urllib3 (==2.5.0)
|
|
106
108
|
Requires-Dist: wikipedia (>=1.4.0,<2.0.0)
|
|
107
|
-
Requires-Dist: xai-sdk (>=1.
|
|
109
|
+
Requires-Dist: xai-sdk (>=1.5.0,<2.0.0)
|
|
108
110
|
Requires-Dist: youtube-transcript-api (>=0.6.3,<0.7.0)
|
|
109
111
|
Project-URL: Changelog, https://github.com/szczyglis-dev/py-gpt/blob/master/CHANGELOG.md
|
|
110
112
|
Project-URL: Documentation, https://pygpt.readthedocs.io/
|
|
@@ -117,7 +119,7 @@ Description-Content-Type: text/markdown
|
|
|
117
119
|
|
|
118
120
|
[](https://snapcraft.io/pygpt)
|
|
119
121
|
|
|
120
|
-
Release: **2.6.
|
|
122
|
+
Release: **2.6.67** | build: **2025-12-26** | Python: **>=3.10, <3.14**
|
|
121
123
|
|
|
122
124
|
> Official website: https://pygpt.net | Documentation: https://pygpt.readthedocs.io
|
|
123
125
|
>
|
|
@@ -183,7 +185,8 @@ You can download compiled 64-bit versions for Windows and Linux here: https://py
|
|
|
183
185
|
- Includes an node-based Agents Builder.
|
|
184
186
|
- Supports multiple languages.
|
|
185
187
|
- Requires no previous knowledge of using AI models.
|
|
186
|
-
-
|
|
188
|
+
- Image generation via models like `DALL-E`, `gpt-image`, `Imagen` and `Nano Banana`.
|
|
189
|
+
- Video generation via models like `Veo3` and `Sora2`.
|
|
187
190
|
- Fully configurable.
|
|
188
191
|
- Themes support.
|
|
189
192
|
- Real-time code syntax highlighting.
|
|
@@ -650,6 +653,7 @@ Options for indexing existing context history or enabling real-time indexing new
|
|
|
650
653
|
- ChromaVectorStore
|
|
651
654
|
- ElasticsearchStore
|
|
652
655
|
- PinecodeVectorStore
|
|
656
|
+
- QdrantVectorStore
|
|
653
657
|
- RedisVectorStore
|
|
654
658
|
- SimpleVectorStore
|
|
655
659
|
```
|
|
@@ -706,7 +710,10 @@ Plugin allows you to generate images in Chat mode:
|
|
|
706
710
|
|
|
707
711
|

|
|
708
712
|
|
|
709
|
-
**Video generation**:
|
|
713
|
+
**Video generation**:
|
|
714
|
+
|
|
715
|
+
From version `2.6.32`, video generation (using `Google Veo 3`) is also available.
|
|
716
|
+
From version `2.6.66`, video generation (using `OpenAI Sora 2`) is also available.
|
|
710
717
|
|
|
711
718
|
### Multiple variants
|
|
712
719
|
|
|
@@ -1154,7 +1161,7 @@ The name of the currently active profile is shown as (Profile Name) in the windo
|
|
|
1154
1161
|
|
|
1155
1162
|
## Built-in models
|
|
1156
1163
|
|
|
1157
|
-
PyGPT has a preconfigured list of models (as of 2025-
|
|
1164
|
+
PyGPT has a preconfigured list of models (as of 2025-12-25):
|
|
1158
1165
|
|
|
1159
1166
|
- `bielik-11b-v2.3-instruct:Q4_K_M` (Ollama)
|
|
1160
1167
|
- `chatgpt-4o-latest` (OpenAI)
|
|
@@ -1164,6 +1171,8 @@ PyGPT has a preconfigured list of models (as of 2025-08-31):
|
|
|
1164
1171
|
- `claude-3-opus` (Anthropic)
|
|
1165
1172
|
- `claude-opus-4-0` (Anthropic)
|
|
1166
1173
|
- `claude-sonnet-4-0` (Anthropic)
|
|
1174
|
+
- `claude-opus-4-5` (Anthropic)
|
|
1175
|
+
- `claude-sonnet-4-5` (Anthropic)
|
|
1167
1176
|
- `codellama` (Ollama)
|
|
1168
1177
|
- `codex-mini` (OpenAI)
|
|
1169
1178
|
- `dall-e-2` (OpenAI)
|
|
@@ -1180,6 +1189,9 @@ PyGPT has a preconfigured list of models (as of 2025-08-31):
|
|
|
1180
1189
|
- `gemini-2.5-flash` (Google)
|
|
1181
1190
|
- `gemini-2.5-flash-preview-native-audio-dialog` (Google, real-time)
|
|
1182
1191
|
- `gemini-2.5-pro` (Google)
|
|
1192
|
+
- `gemini-3-flash-preview` (Google)
|
|
1193
|
+
- `gemini-3-pro-image-preview` (Google)
|
|
1194
|
+
- `gemini-3-pro-preview` (Google)
|
|
1183
1195
|
- `gpt-3.5-turbo` (OpenAI)
|
|
1184
1196
|
- `gpt-3.5-turbo-16k` (OpenAI)
|
|
1185
1197
|
- `gpt-3.5-turbo-instruct` (OpenAI)
|
|
@@ -1196,7 +1208,9 @@ PyGPT has a preconfigured list of models (as of 2025-08-31):
|
|
|
1196
1208
|
- `gpt-5` (OpenAI)
|
|
1197
1209
|
- `gpt-5-mini` (OpenAI)
|
|
1198
1210
|
- `gpt-5-nano` (OpenAI)
|
|
1211
|
+
- `gpt-5.2` (OpenAI)
|
|
1199
1212
|
- `gpt-image-1` (OpenAI)
|
|
1213
|
+
- `gpt-image-1.5` (OpenAI)
|
|
1200
1214
|
- `gpt-oss:20b` (OpenAI - via Ollama and HuggingFace Router)
|
|
1201
1215
|
- `gpt-oss:120b` (OpenAI - via Ollama and HuggingFace Router)
|
|
1202
1216
|
- `gpt-realtime` (OpenAI, real-time)
|
|
@@ -1212,6 +1226,7 @@ PyGPT has a preconfigured list of models (as of 2025-08-31):
|
|
|
1212
1226
|
- `mistral` (Ollama)
|
|
1213
1227
|
- `mistral-large` (Ollama)
|
|
1214
1228
|
- `mistral-small3.1` (Ollama)
|
|
1229
|
+
- `nano-banana-pro-preview` (Google)
|
|
1215
1230
|
- `o1` (OpenAI)
|
|
1216
1231
|
- `o1-mini` (OpenAI)
|
|
1217
1232
|
- `o1-pro` (OpenAI)
|
|
@@ -1231,11 +1246,14 @@ PyGPT has a preconfigured list of models (as of 2025-08-31):
|
|
|
1231
1246
|
- `sonar-pro` (Perplexity)
|
|
1232
1247
|
- `sonar-reasoning` (Perplexity)
|
|
1233
1248
|
- `sonar-reasoning-pro` (Perplexity)
|
|
1249
|
+
- `sora-2` (OpenAI)
|
|
1234
1250
|
- `veo-3.0-generate-preview` (Google)
|
|
1235
1251
|
- `veo-3.0-fast-generate-preview` (Google)
|
|
1252
|
+
- `veo-3.1-generate-preview` (Google)
|
|
1253
|
+
- `veo-3.1-fast-generate-preview` (Google)
|
|
1236
1254
|
|
|
1237
1255
|
All models are specified in the configuration file `models.json`, which you can customize.
|
|
1238
|
-
This file is located in your working directory. You can add new models provided directly by `OpenAI API` (or compatible) and those supported by `LlamaIndex` or `Ollama` to this file. Configuration for LlamaIndex
|
|
1256
|
+
This file is located in your working directory. You can add new models provided directly by `OpenAI API` (or compatible), `Google Gen AI API`, `Anthropic API`, `xAI API`, and those supported by `LlamaIndex` or `Ollama` to this file. Configuration for LlamaIndex in placed in `llama_index` key.
|
|
1239
1257
|
|
|
1240
1258
|
You can import new models by manually editing `models.json` or by using the model importer in the `Config -> Models -> Import` menu.
|
|
1241
1259
|
|
|
@@ -3088,6 +3106,7 @@ You can provide a single URI in the form of: `{scheme}://{user}:{password}@{host
|
|
|
3088
3106
|
- ChromaVectorStore
|
|
3089
3107
|
- ElasticsearchStore
|
|
3090
3108
|
- PinecodeVectorStore
|
|
3109
|
+
- QdrantVectorStore
|
|
3091
3110
|
- RedisVectorStore
|
|
3092
3111
|
- SimpleVectorStore
|
|
3093
3112
|
```
|
|
@@ -3118,6 +3137,15 @@ Keyword arguments for Pinecone(`**kwargs`):
|
|
|
3118
3137
|
- `api_key`
|
|
3119
3138
|
- index_name (default: current index ID, already set, not required)
|
|
3120
3139
|
|
|
3140
|
+
**QdrantVectorStore**
|
|
3141
|
+
|
|
3142
|
+
Keyword arguments for QdrantVectorStore(`**kwargs`):
|
|
3143
|
+
|
|
3144
|
+
- `url` - str, default: `http://localhost:6333`
|
|
3145
|
+
- `api_key` - str, default: `None` (for Qdrant Cloud)
|
|
3146
|
+
- `collection_name` (default: current index ID, already set, not required)
|
|
3147
|
+
- any other keyword arguments provided on list
|
|
3148
|
+
|
|
3121
3149
|
**RedisVectorStore**
|
|
3122
3150
|
|
|
3123
3151
|
Keyword arguments for RedisVectorStore(`**kwargs`):
|
|
@@ -3615,6 +3643,7 @@ You can create a custom vector store provider or data loader for your data and d
|
|
|
3615
3643
|
from pygpt_net.provider.vector_stores.chroma import ChromaProvider
|
|
3616
3644
|
from pygpt_net.provider.vector_stores.elasticsearch import ElasticsearchProvider
|
|
3617
3645
|
from pygpt_net.provider.vector_stores.pinecode import PinecodeProvider
|
|
3646
|
+
from pygpt_net.provider.vector_stores.qdrant import QdrantProvider
|
|
3618
3647
|
from pygpt_net.provider.vector_stores.redis import RedisProvider
|
|
3619
3648
|
from pygpt_net.provider.vector_stores.simple import SimpleProvider
|
|
3620
3649
|
|
|
@@ -3624,6 +3653,7 @@ def run(**kwargs):
|
|
|
3624
3653
|
launcher.add_vector_store(ChromaProvider())
|
|
3625
3654
|
launcher.add_vector_store(ElasticsearchProvider())
|
|
3626
3655
|
launcher.add_vector_store(PinecodeProvider())
|
|
3656
|
+
launcher.add_vector_store(QdrantProvider())
|
|
3627
3657
|
launcher.add_vector_store(RedisProvider())
|
|
3628
3658
|
launcher.add_vector_store(SimpleProvider())
|
|
3629
3659
|
|
|
@@ -3723,6 +3753,23 @@ may consume additional tokens that are not displayed in the main window.
|
|
|
3723
3753
|
|
|
3724
3754
|
## Recent changes:
|
|
3725
3755
|
|
|
3756
|
+
**2.6.67 (2025-12-26)**
|
|
3757
|
+
|
|
3758
|
+
- Added a provider filter to the models editor.
|
|
3759
|
+
- Added video options (resolution, duration) to the toolbox.
|
|
3760
|
+
- Updated the models configuration.
|
|
3761
|
+
|
|
3762
|
+
**2.6.66 (2025-12-25)**
|
|
3763
|
+
|
|
3764
|
+
- Added Sora 2 support - #155.
|
|
3765
|
+
- Added Nano Banana support.
|
|
3766
|
+
- Added Qdrant Vector Store - merged PR #147 by @Anush008.
|
|
3767
|
+
- Added models: gpt-5.2, gpt-image-1.5, gemini-3, nano-banana-pro, sora-2, claude-sonnet-4.5, claude-opus-4.5, veo-3.1.
|
|
3768
|
+
- Added Select/unselect All option in checkbox lists.
|
|
3769
|
+
- OpenAI SDK upgraded to 2.14.0, Anthropic SDK upgraded to 0.75.0, xAI SDK upgraded to 1.5.0, Google GenAI upgraded to 1.56.0, LlamaIndex upgraded to 0.14.10.
|
|
3770
|
+
- Fix: charset-normalizer 3.2.0 circular import - #152.
|
|
3771
|
+
- Fix: Google client closed state.
|
|
3772
|
+
|
|
3726
3773
|
**2.6.65 (2025-09-28)**
|
|
3727
3774
|
|
|
3728
3775
|
- Added drag and drop functionality for files and directories from the filesystem in attachments and file explorer.
|