8000 Add gpt4free, update GUI for using gpt4free (as a free service) as we… · DataSolveProblems/pyqt-openai@5e76211 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5e76211

Browse files
committed
Add gpt4free, update GUI for using gpt4free (as a free service) as well as API in each platforms (paid)
1 parent dff3d33 commit 5e76211

File tree

10 files changed

+188
-68
lines changed

10 files changed

+188
-68
lines changed

pyqt_openai/aboutDialog.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ def __initUi(self):
4242
descWidget3.setText(f'''
4343
<br/><br/>Contact: {CONTACT}<br/>
4444
<p>Powered by PySide6</p>
45+
<p>Powered by GPT4Free</p>
4546
''')
4647

4748
descWidget1.setAlignment(Qt.AlignmentFlag.AlignTop)

pyqt_openai/chat_widget/center/chatHome.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ def __init__(self, parent=None):
1515
self.__initUi()
1616

1717
def __initUi(self):
18-
title = QLabel(f"Welcome to {DEFAULT_APP_NAME}\n"
19-
f"main page!", self)
18+
title = QLabel(f"Welcome to {DEFAULT_APP_NAME}!", self)
2019
title.setFont(QFont('Arial', 32))
2120
title.setAlignment(Qt.AlignmentFlag.AlignCenter)
2221

pyqt_openai/chat_widget/center/chatWidget.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def __init__(self, parent=None):
2828
def __initVal(self):
2929
self.__cur_id = 0
3030
self.__notify_finish = CONFIG_MANAGER.get_general_property('notify_finish')
31+
self.__is_g4f = False
3132

3233
def __initUi(self):
3334
# Main widget
@@ -195,7 +196,7 @@ def __chat(self):
195196
# Run a different thread based on whether the llama-index is enabled or not.
196197
self.__t = LlamaOpenAIThread(param, container, LLAMAINDEX_WRAPPER, query_text)
197198
else:
198-
self.__t = ChatThread(param, info=container)
199+
self.__t = ChatThread(param, info=container, is_g4f=self.__is_g4f)
199200

200201
self.__t.started.connect(self.__beforeGenerated)
201202
self.__t.replyGenerated.connect(self.__browser.showLabel)
@@ -249,6 +250,10 @@ def __bringWindowToFront(self):
249250
window.raise_()
250251
window.activateWindow()
251252

253+
def setG4F(self, idx):
254+
# Decide whether to use G4F based on the current tab index
255+
self.__is_g4f = idx == 0
256+
252257
def toggleJSON(self, f):
253258
self.__prompt.toggleJSON(f)
254259

pyqt_openai/chat_widget/chatMainWidget.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ def __initUi(self):
5353

5454
self.__chatRightSideBarWidget = ChatRightSideBarWidget()
5555
self.__chatRightSideBarWidget.onToggleJSON.connect(self.__chatWidget.toggleJSON)
56+
self.__chatRightSideBarWidget.onTabChanged.connect(self.__chatWidget.setG4F)
57+
58+
self.__chatWidget.setG4F(self.__chatRightSideBarWidget.currentTabIdx())
5659

5760
try:
5861
self.__chatRightSideBarWidget.onDirectorySelected.connect(LLAMAINDEX_WRAPPER.set_directory)

pyqt_openai/chat_widget/chatThread.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
import openai
21
from llama_index.core.base.response.schema import StreamingResponse
32
from PySide6.QtCore import QThread, Signal
43

54
from pyqt_openai.models import ChatMessageContainer
6-
from pyqt_openai.globals import OPENAI_CLIENT
7-
from pyqt_openai.globals import form_response
5+
86

97
class LlamaOpenAIThread(QThread):
108
replyGenerated = Signal(str, bool, ChatMessageContainer)

pyqt_openai/chat_widget/right_sidebar/chatRightSideBarWidget.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
from PySide6.QtCore import Signal
44
from PySide6.QtWidgets import QScrollArea, QWidget, QTabWidget, QGridLayout
55

6-
from pyqt_openai.chat_widget.right_sidebar.chatPage import ChatPage
6+
from pyqt_openai.chat_widget.right_sidebar.usingAPIPage import UsingAPIPage
77
from pyqt_openai.chat_widget.right_sidebar.llama_widget.llamaPage import LlamaPage
8+
from pyqt_openai.chat_widget.right_sidebar.usingG4FPage import UsingG4FPage
89
from pyqt_openai.config_loader import CONFIG_MANAGER
910

1011

1112
class ChatRightSideBarWidget(QScrollArea):
13+
onTabChanged = Signal(int)
1214
onDirectorySelected = Signal(str)
1315
onToggleJSON = Signal(bool)
1416

@@ -24,20 +26,23 @@ def __initVal(self):
2426

2527
def __initUi(self):
2628
tabWidget = QTabWidget()
29+
tabWidget.currentChanged.connect(self.onTabChanged.emit)
2730

28-
chatPage = ChatPage()
31+
usingG4FPage = UsingG4FPage()
32+
usingAPIPage = UsingAPIPage()
2933
self.__llamaPage = LlamaPage()
3034
self.__llamaPage.onDirectorySelected.connect(self.__onDirectorySelected)
3135

32-
tabWidget.addTab(chatPage, 'LLM')
36+
tabWidget.addTab(usingG4FPage, 'G4F')
37+
tabWidget.addTab(usingAPIPage, 'LLM')
3338
tabWidget.addTab(self.__llamaPage, 'LlamaIndex')
3439
tabWidget.currentChanged.connect(self.__tabChanged)
35-
tabWidget.setTabEnabled(1, self.__use_llama_index)
40+
tabWidget.setTabEnabled(2, self.__use_llama_index)
3641
tabWidget.setCurrentIndex(self.__cur_idx)
3742

38-
partial_func = partial(tabWidget.setTabEnabled, 1)
39-
chatPage.onToggleLlama.connect(lambda x: partial_func(x))
40-
chatPage.onToggleJSON.connect(self.onToggleJSON)
43+
partial_func = partial(tabWidget.setTabEnabled, 2)
44+
usingAPIPage.onToggleLlama.connect(lambda x: partial_func(x))
45+
usingAPIPage.onToggleJSON.connect(self.onToggleJSON)
4146

4247
lay = QGridLayout()
4348
lay.addWidget(tabWidget)
@@ -51,9 +56,13 @@ def __initUi(self):
5156
self.setStyleSheet('QScrollArea { border: 0 }')
5257

5358
def __tabChanged(self, idx):
54-
CONFIG_MANAGER.set_general_property('TAB_IDX', idx)
59+
self.__cur_idx = idx
60+
CONFIG_MANAGER.set_general_property('TAB_IDX', self.__cur_idx)
5561

5662
def __onDirectorySelected(self, selected_dirname):
5763
self.__llama_index_directory = selected_dirname
5864
CONFIG_MANAGER.set_general_property('llama_index_directory', selected_dirname)
59-
self.onDirectorySelected.emit(selected_dirname)
65+
self.onDirectorySelected.emit(selected_dirname)
66+
67+
def currentTabIdx(self):
68+
return self.__cur_idx

pyqt_openai/chat_widget/right_sidebar/chatPage.py renamed to pyqt_openai/chat_widget/right_sidebar/usingAPIPage.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from PySide6.QtCore import Qt, Signal
22
from PySide6.QtWidgets import QWidget, QDoubleSpinBox, QSpinBox, QFormLayout, QSizePolicy, QComboBox, QTextEdit, \
3-
QLabel, QVBoxLayout, QCheckBox, QPushButton, QScrollArea, QGroupBox
3+
QLabel, QVBoxLayout, QCheckBox, QPushButton, QScrollArea, QGroupBox, QHBoxLayout
44

55
from pyqt_openai import DEFAULT_SHORTCUT_JSON_MODE, OPENAI_TEMPERATURE_RANGE, OPENAI_TEMPERATURE_STEP, \
66
MAX_TOKENS_RANGE, TOP_P_RANGE, TOP_P_STEP, FREQUENCY_PENALTY_RANGE, PRESENCE_PENALTY_STEP, PRESENCE_PENALTY_RANGE, \
@@ -12,7 +12,7 @@
1212
from pyqt_openai.widgets.linkLabel import LinkLabel
1313

1414

15-
class ChatPage(QWidget):
15+
class UsingAPIPage(QWidget):
1616
onToggleLlama = Signal(bool)
1717
onToggleJSON = Signal(bool)
1818

@@ -50,6 +50,14 @@ def __initUi(self):
5050
modelCmbBox.setCurrentText(self.__model)
5151
modelCmbBox.currentTextChanged.connect(self.__modelChanged)
5252

53+
lay = QHBoxLayout()
54+
lay.addWidget(QLabel(LangClass.TRANSLATIONS['Model']))
55+
lay.addWidget(modelCmbBox)
56+
lay.setContentsMargins(0, 0, 0, 0)
57+
58+
selectModelWidget = QWidget()
59+
selectModelWidget.setLayout(lay)
60+
5361
self.__warningLbl = QLabel()
5462
self.__warningLbl.setStyleSheet('color: red;')
5563
self.__warningLbl.setVisible(False)
@@ -164,7 +172,7 @@ def __initUi(self):
164172
lay.addWidget(systemlbl)
165173
lay.addWidget(self.__systemTextEdit)
166174
lay.addWidget(saveSystemBtn)
167-
lay.addWidget(modelCmbBox)
175+
lay.addWidget(selectModelWidget)
168176
lay.addWidget(self.__warningLbl)
169177
lay.addWidget(streamChkBox)
170178
lay.addWidget(self.__jsonChkBox)
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from PySide6.QtCore import Qt, Signal
2+
from PySide6.QtWidgets import QWidget, QComboBox, QVBoxLayout, QCheckBox, QHBoxLayout, QLabel
3+
4+
from pyqt_openai.config_loader import CONFIG_MANAGER
5+
from pyqt_openai.globals import get_chat_model
6+
from pyqt_openai.lang.translations import LangClass
7+
8+
9+
class UsingG4FPage(QWidget):
10+
onToggleLlama = Signal(bool)
11+
onToggleJSON = Signal(bool)
12+
13+
def __init__(self, parent=None):
14+
super().__init__(parent)
15+
self.__initVal()
16+
self.__initUi()
17+
18+
def __initVal(self):
19+
self.__stream = CONFIG_MANAGER.get_general_property('stream')
20+
self.__model = CONFIG_MANAGER.get_general_property('model')
21+
22+
def __initUi(self):
23+
modelCmbBox = QComboBox()
24+
modelCmbBox.addItems(get_chat_model())
25+
modelCmbBox.setCurrentText(self.__model)
26+
modelCmbBox.currentTextChanged.connect(self.__modelChanged)
27+
28+
lay = QHBoxLayout()
29+
lay.addWidget(QLabel(LangClass.TRANSLATIONS['Model']))
30+
lay.addWidget(modelCmbBox)
31+
lay.setContentsMargins(0, 0, 0, 0)
32+
33+
selectModelWidget = QWidget()
34+
selectModelWidget.setLayout(lay)
35+
36+
streamChkBox = QCheckBox()
37+
streamChkBox.setChecked(self.__stream)
38+
streamChkBox.toggled.connect(self.__streamChecked)
39+
streamChkBox.setText(LangClass.TRANSLATIONS['Stream'])
40+
41+
lay = QVBoxLayout()
42+
lay.addWidget(selectModelWidget)
43+
lay.addWidget(streamChkBox)
44+
lay.setAlignment(Qt.AlignmentFlag.AlignTop)
45+
46+
self.setLayout(lay)
47+
48+
def __modelChanged(self, v):
49+
self.__model = v
50+
CONFIG_MANAGER.set_general_property('model', v)
51+
52+
def __streamChecked(self, f):
53+
self.__stream = f
54+
CONFIG_MANAGER.set_general_property('stream', f)

0 commit comments

Comments
 (0)
0