XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/gpt4free

Fix abort in webview

b5b56f35
Heiner Lohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

6 个文件 +36 -24
Modified g4f/Provider/selenium/Bard.py +1 -1
@@ -18,7 +18,7 @@ from ...webdriver import WebDriver, WebDriverSession, element_send_text
18 18
19 19 class Bard(AbstractProvider):
20 20 url = "https://bard.google.com"
21 working = True
21 working = False
22 22 needs_auth = True
23 23 webdriver = True
24 24
Modified g4f/Provider/selenium/Phind.py +1 -1
@@ -10,7 +10,7 @@ from ...webdriver import WebDriver, WebDriverSession
10 10
11 11 class Phind(AbstractProvider):
12 12 url = "https://www.phind.com"
13 working = True
13 working = False
14 14 supports_gpt_4 = True
15 15 supports_stream = True
16 16
Modified g4f/gui/__init__.py +7 -6
@@ -1,12 +1,13 @@
1 1 from ..errors import MissingRequirementsError
2 try:
3 from .server.app import app
4 from .server.website import Website
5 from .server.backend import Backend_Api
6 except ImportError:
7 raise MissingRequirementsError('Install "flask" package for the gui')
8 2
9 3 def run_gui(host: str = '0.0.0.0', port: int = 8080, debug: bool = False) -> None:
4 try:
5 from .server.app import app
6 from .server.website import Website
7 from .server.backend import Backend_Api
8 except ImportError:
9 raise MissingRequirementsError('Install "flask" package for the gui')
10
10 11 if debug:
11 12 import g4f
12 13 g4f.debug.logging = True
Modified g4f/gui/client/static/js/chat.v1.js +18 -14
@@ -19,6 +19,8 @@ const jailbreak = document.getElementById("jailbreak");
19 19
20 20 let prompt_lock = false;
21 21
22 let content, content_inner, content_count = null;
23
22 24 const options = ["switch", "model", "model2", "jailbreak", "patch", "provider", "history"];
23 25
24 26 messageInput.addEventListener("blur", () => {
@@ -202,7 +204,7 @@ async function add_message_chunk(message) {
202 204 console.info("Conversation used:", message.conversation)
203 205 } else if (message.type == "provider") {
204 206 window.provider_result = message.provider;
205 window.content.querySelector('.provider').innerHTML = `
207 content.querySelector('.provider').innerHTML = `
206 208 <a href="${message.provider.url}" target="_blank">
207 209 ${message.provider.name}
208 210 </a>
@@ -210,10 +212,10 @@ async function add_message_chunk(message) {
210 212 `
211 213 } else if (message.type == "message") {
212 214 console.error(messag.message)
213 return;
214 215 } else if (message.type == "error") {
216 window.error = message.error
215 217 console.error(message.error);
216 window.content_inner.innerHTML += `<p><strong>An error occured:</strong> ${message.error}</p>`;
218 content_inner.innerHTML += `<p><strong>An error occured:</strong> ${message.error}</p>`;
217 219 } else if (message.type == "content") {
218 220 window.text += message.content;
219 221 html = markdown_render(window.text);
@@ -228,11 +230,10 @@ async function add_message_chunk(message) {
228 230 if (lastIndex) {
229 231 html = html.substring(0, lastIndex) + '<span id="cursor"></span>' + lastElement;
230 232 }
231 window.content_inner.innerHTML = html;
232 window.content_count.innerText = count_words_and_tokens(text, window.provider_result?.model);
233 highlight(window.content_inner);
233 content_inner.innerHTML = html;
234 content_count.innerText = count_words_and_tokens(text, window.provider_result?.model);
235 highlight(content_inner);
234 236 }
235
236 237 window.scrollTo(0, 0);
237 238 if (message_box.scrollTop >= message_box.scrollHeight - message_box.clientHeight - 100) {
238 239 message_box.scrollTo({ top: message_box.scrollHeight, behavior: "auto" });
@@ -271,11 +272,12 @@ const ask_gpt = async () => {
271 272 window.controller = new AbortController();
272 273 window.text = "";
273 274 window.error = null;
275 window.abort = false;
274 276 window.provider_result = null;
275 277
276 window.content = document.getElementById(`gpt_${window.token}`);
277 window.content_inner = content.querySelector('.content_inner');
278 window.content_count = content.querySelector('.count');
278 content = document.getElementById(`gpt_${window.token}`);
279 content_inner = content.querySelector('.content_inner');
280 content_count = content.querySelector('.count');
279 281
280 282 message_box.scrollTop = message_box.scrollHeight;
281 283 window.scrollTo(0, 0);
@@ -307,9 +309,6 @@ const ask_gpt = async () => {
307 309 error = true;
308 310 text = "oops ! something went wrong, please try again / reload. [stacktrace in console]";
309 311 content_inner.innerHTML = text;
310 } else {
311 content_inner.innerHTML += " [aborted]";
312 if (text) text += " [aborted]";
313 312 }
314 313 }
315 314 if (!error && text) {
@@ -583,8 +582,13 @@ const load_conversations = async () => {
583 582 }
584 583 };
585 584
586 document.getElementById(`cancelButton`).addEventListener(`click`, async () => {
585 document.getElementById("cancelButton").addEventListener("click", async () => {
587 586 window.controller.abort();
587 if (!window.abort) {
588 window.abort = true;
589 content_inner.innerHTML += " [aborted]";
590 if (window.text) window.text += " [aborted]";
591 }
588 592 console.log(`aborted ${window.conversation_id}`);
589 593 });
590 594
Modified g4f/gui/server/api.py +2 -1
@@ -80,7 +80,8 @@ class Api():
80 80 self._prepare_conversation_kwargs(options, kwargs),
81 81 options.get("conversation_id")
82 82 ):
83 window.evaluate_js(f"this.add_message_chunk({json.dumps(message)})")
83 if not window.evaluate_js(f"if (!this.abort) this.add_message_chunk({json.dumps(message)}); !this.abort && !this.error;"):
84 break
84 85
85 86 def _prepare_conversation_kwargs(self, json_data: dict, kwargs: dict):
86 87 """
Modified g4f/gui/webview.py +7 -1
@@ -1,3 +1,5 @@
1 import sys
2 import os.path
1 3 import webview
2 4 try:
3 5 from platformdirs import user_config_dir
@@ -14,9 +16,13 @@ def run_webview(
14 16 debug: bool = False,
15 17 storage_path: str = None
16 18 ):
19 if getattr(sys, 'frozen', False):
20 dirname = sys._MEIPASS
21 else:
22 dirname = os.path.dirname(__file__)
17 23 webview.create_window(
18 24 f"g4f - {g4f.version.utils.current_version}",
19 "client/index.html",
25 os.path.join(dirname, "client/index.html"),
20 26 text_select=True,
21 27 js_api=Api(),
22 28 )