Skip to content
This repository was archived by the owner on Dec 18, 2024. It is now read-only.

Commit b2453bb

Browse files
authored
Merge pull request #56 from Integration-Automation/dev
Dev
2 parents a66b8f5 + 7bcfb1a commit b2453bb

File tree

9 files changed

+124
-9
lines changed

9 files changed

+124
-9
lines changed

GPT_EXE/browser/__init__.py

Whitespace-only changes.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from PySide6.QtCore import Qt
2+
from PySide6.QtWebEngineCore import QWebEngineDownloadRequest
3+
from PySide6.QtWidgets import QWidget, QBoxLayout, QPlainTextEdit
4+
5+
6+
class BrowserDownloadWindow(QWidget):
7+
8+
def __init__(self, download_instance: QWebEngineDownloadRequest):
9+
super().__init__()
10+
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
11+
self.box_layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
12+
self.show_download_detail_plaintext = QPlainTextEdit()
13+
self.show_download_detail_plaintext.setReadOnly(True)
14+
self.setWindowTitle("Download")
15+
self.download_instance = download_instance
16+
self.download_instance.isFinishedChanged.connect(self.print_finish)
17+
self.download_instance.interruptReasonChanged.connect(self.print_interrupt)
18+
self.download_instance.stateChanged.connect(self.print_state)
19+
self.download_instance.accept()
20+
self.box_layout.addWidget(self.show_download_detail_plaintext)
21+
self.setLayout(self.box_layout)
22+
23+
def print_finish(self):
24+
self.show_download_detail_plaintext.appendPlainText(str(self.download_instance.isFinished()))
25+
26+
def print_interrupt(self):
27+
self.show_download_detail_plaintext.appendPlainText(str(self.download_instance.interruptReason()))
28+
29+
def print_state(self):
30+
self.show_download_detail_plaintext.appendPlainText(str(self.download_instance.state()))

GPT_EXE/browser/browser_view.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from typing import List
2+
3+
from PySide6.QtCore import Qt
4+
from PySide6.QtWebEngineCore import QWebEngineDownloadRequest
5+
from PySide6.QtWebEngineWidgets import QWebEngineView
6+
7+
from .browser_download_window import BrowserDownloadWindow
8+
9+
10+
class BrowserView(QWebEngineView):
11+
12+
def __init__(self, start_url: str = "https://www.google.com/"):
13+
super().__init__()
14+
self.setUrl(start_url)
15+
self.download_list: List[QWebEngineDownloadRequest] = list()
16+
self.download_window_list: List[BrowserDownloadWindow] = list()
17+
self.page().profile().downloadRequested.connect(self.download_file)
18+
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
19+
20+
def download_file(self, download_instance: QWebEngineDownloadRequest):
21+
self.download_list.append(download_instance)
22+
download_detail_window = BrowserDownloadWindow(download_instance)
23+
self.download_window_list.append(download_detail_window)
24+
download_detail_window.show()
25+
26+
def closeEvent(self, event) -> None:
27+
for download_instance in self.download_list:
28+
download_instance.cancel()
29+
for download_window in self.download_window_list:
30+
download_window.close()
31+
super().closeEvent(event)

GPT_EXE/browser/browser_widget.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from PySide6.QtGui import QAction, Qt
2+
from PySide6.QtWidgets import QWidget, QGridLayout, QPushButton, QInputDialog
3+
4+
from .browser_view import BrowserView
5+
6+
7+
class JEBrowser(QWidget):
8+
9+
def __init__(self, start_url: str = "https://www.bing.com/chat"):
10+
super().__init__()
11+
# Browser setting
12+
self.browser = BrowserView(start_url)
13+
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
14+
# Action
15+
self.find_action = QAction()
16+
self.find_action.setShortcut("Ctrl+f")
17+
self.find_action.triggered.connect(self.find_text)
18+
self.addAction(self.find_action)
19+
# Layout
20+
self.grid_layout = QGridLayout()
21+
self.grid_layout.addWidget(self.browser, 0, 0, -1, -1)
22+
self.setLayout(self.grid_layout)
23+
24+
def find_text(self):
25+
search_box = QInputDialog(self)
26+
search_text, press_ok = search_box.getText(self, "Find text", "Find text")
27+
if press_ok:
28+
self.browser.findText(search_text)
29+
else:
30+
self.browser.findText("")
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import sys
2+
3+
from PySide6.QtCore import QCoreApplication
4+
from PySide6.QtWidgets import QMainWindow, QApplication
5+
from qt_material import apply_stylesheet
6+
7+
from GPT_EXE.browser.browser_widget import JEBrowser
8+
9+
10+
class JustOpenGPTBrowser(QMainWindow):
11+
12+
def __init__(self):
13+
super().__init__()
14+
self.browser_widget = JEBrowser()
15+
self.setCentralWidget(self.browser_widget)
16+
17+
18+
if __name__ == "__main__":
19+
new_editor = QCoreApplication.instance()
20+
if new_editor is None:
21+
new_editor = QApplication(sys.argv)
22+
window = JustOpenGPTBrowser()
23+
apply_stylesheet(new_editor, theme='dark_amber.xml')
24+
window.showMaximized()
25+
sys.exit(new_editor.exec())

README.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,9 @@ if __name__ == "__main__":
238238

239239
<details open>
240240

241+
> * Q: Exception: Throttled: Request is throttled.
242+
> * A: Bing's chat rate limit.
243+
> * ![rate_limit.png](images/rate_limit.png)
241244
> * Q: RuntimeError: This event loop is already running
242245
> * A: If you are using Jupyter, pls use nest_asyncio.apply()
243246
> * Like: https://github.com/Integration-Automation/ReEdgeGPT/issues/30
@@ -257,9 +260,3 @@ if __name__ == "__main__":
257260
> * See https://github.com/Integration-Automation/ReEdgeGPT/issues/22
258261
> * Q: UnauthorizedRequest: Token issued by https://sydney.bing.com/sydney is invalid
259262
> * A: Bing block your connect, Try to use proxy or clear cookie.
260-
261-
</details>
262-
263-
---
264-
> Origin repo (archived): https://github.com/acheong08/EdgeGPT
265-
---

images/rate_limit.png

6.48 KB
Loading

requirements.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ prompt_toolkit
55
requests
66
rich
77
re_edge_gpt
8-
regex
8+
regex
9+
PySide6
10+
qt-material

test/unit_test/manual_test/test_bot_manual.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
async def test_ask() -> None:
1414
bot = None
1515
try:
16-
cookies = json.loads(open(
16+
cookies: list[dict] = json.loads(open(
1717
str(Path(str(Path.cwd()) + "/bing_cookies.json")), encoding="utf-8").read())
1818
bot = await Chatbot.create(cookies=cookies)
1919
response = await bot.ask(
20-
prompt="Deer soup",
20+
prompt="How to get extract iron on mine",
2121
conversation_style=ConversationStyle.balanced,
2222
simplify_response=True
2323
)

0 commit comments

Comments
 (0)