mirror of
https://github.com/xtekky/gpt4free.git
synced 2026-01-04 08:11:56 -08:00
Fix abort in webview
This commit is contained in:
parent
8ed63693e4
commit
b5b56f35ca
6 changed files with 36 additions and 24 deletions
|
|
@ -18,7 +18,7 @@ from ...webdriver import WebDriver, WebDriverSession, element_send_text
|
||||||
|
|
||||||
class Bard(AbstractProvider):
|
class Bard(AbstractProvider):
|
||||||
url = "https://bard.google.com"
|
url = "https://bard.google.com"
|
||||||
working = True
|
working = False
|
||||||
needs_auth = True
|
needs_auth = True
|
||||||
webdriver = True
|
webdriver = True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ from ...webdriver import WebDriver, WebDriverSession
|
||||||
|
|
||||||
class Phind(AbstractProvider):
|
class Phind(AbstractProvider):
|
||||||
url = "https://www.phind.com"
|
url = "https://www.phind.com"
|
||||||
working = True
|
working = False
|
||||||
supports_gpt_4 = True
|
supports_gpt_4 = True
|
||||||
supports_stream = True
|
supports_stream = True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
from ..errors import MissingRequirementsError
|
from ..errors import MissingRequirementsError
|
||||||
try:
|
|
||||||
from .server.app import app
|
|
||||||
from .server.website import Website
|
|
||||||
from .server.backend import Backend_Api
|
|
||||||
except ImportError:
|
|
||||||
raise MissingRequirementsError('Install "flask" package for the gui')
|
|
||||||
|
|
||||||
def run_gui(host: str = '0.0.0.0', port: int = 8080, debug: bool = False) -> None:
|
def run_gui(host: str = '0.0.0.0', port: int = 8080, debug: bool = False) -> None:
|
||||||
|
try:
|
||||||
|
from .server.app import app
|
||||||
|
from .server.website import Website
|
||||||
|
from .server.backend import Backend_Api
|
||||||
|
except ImportError:
|
||||||
|
raise MissingRequirementsError('Install "flask" package for the gui')
|
||||||
|
|
||||||
if debug:
|
if debug:
|
||||||
import g4f
|
import g4f
|
||||||
g4f.debug.logging = True
|
g4f.debug.logging = True
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ const jailbreak = document.getElementById("jailbreak");
|
||||||
|
|
||||||
let prompt_lock = false;
|
let prompt_lock = false;
|
||||||
|
|
||||||
|
let content, content_inner, content_count = null;
|
||||||
|
|
||||||
const options = ["switch", "model", "model2", "jailbreak", "patch", "provider", "history"];
|
const options = ["switch", "model", "model2", "jailbreak", "patch", "provider", "history"];
|
||||||
|
|
||||||
messageInput.addEventListener("blur", () => {
|
messageInput.addEventListener("blur", () => {
|
||||||
|
|
@ -202,7 +204,7 @@ async function add_message_chunk(message) {
|
||||||
console.info("Conversation used:", message.conversation)
|
console.info("Conversation used:", message.conversation)
|
||||||
} else if (message.type == "provider") {
|
} else if (message.type == "provider") {
|
||||||
window.provider_result = message.provider;
|
window.provider_result = message.provider;
|
||||||
window.content.querySelector('.provider').innerHTML = `
|
content.querySelector('.provider').innerHTML = `
|
||||||
<a href="${message.provider.url}" target="_blank">
|
<a href="${message.provider.url}" target="_blank">
|
||||||
${message.provider.name}
|
${message.provider.name}
|
||||||
</a>
|
</a>
|
||||||
|
|
@ -210,10 +212,10 @@ async function add_message_chunk(message) {
|
||||||
`
|
`
|
||||||
} else if (message.type == "message") {
|
} else if (message.type == "message") {
|
||||||
console.error(messag.message)
|
console.error(messag.message)
|
||||||
return;
|
|
||||||
} else if (message.type == "error") {
|
} else if (message.type == "error") {
|
||||||
|
window.error = message.error
|
||||||
console.error(message.error);
|
console.error(message.error);
|
||||||
window.content_inner.innerHTML += `<p><strong>An error occured:</strong> ${message.error}</p>`;
|
content_inner.innerHTML += `<p><strong>An error occured:</strong> ${message.error}</p>`;
|
||||||
} else if (message.type == "content") {
|
} else if (message.type == "content") {
|
||||||
window.text += message.content;
|
window.text += message.content;
|
||||||
html = markdown_render(window.text);
|
html = markdown_render(window.text);
|
||||||
|
|
@ -228,11 +230,10 @@ async function add_message_chunk(message) {
|
||||||
if (lastIndex) {
|
if (lastIndex) {
|
||||||
html = html.substring(0, lastIndex) + '<span id="cursor"></span>' + lastElement;
|
html = html.substring(0, lastIndex) + '<span id="cursor"></span>' + lastElement;
|
||||||
}
|
}
|
||||||
window.content_inner.innerHTML = html;
|
content_inner.innerHTML = html;
|
||||||
window.content_count.innerText = count_words_and_tokens(text, window.provider_result?.model);
|
content_count.innerText = count_words_and_tokens(text, window.provider_result?.model);
|
||||||
highlight(window.content_inner);
|
highlight(content_inner);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.scrollTo(0, 0);
|
window.scrollTo(0, 0);
|
||||||
if (message_box.scrollTop >= message_box.scrollHeight - message_box.clientHeight - 100) {
|
if (message_box.scrollTop >= message_box.scrollHeight - message_box.clientHeight - 100) {
|
||||||
message_box.scrollTo({ top: message_box.scrollHeight, behavior: "auto" });
|
message_box.scrollTo({ top: message_box.scrollHeight, behavior: "auto" });
|
||||||
|
|
@ -271,11 +272,12 @@ const ask_gpt = async () => {
|
||||||
window.controller = new AbortController();
|
window.controller = new AbortController();
|
||||||
window.text = "";
|
window.text = "";
|
||||||
window.error = null;
|
window.error = null;
|
||||||
|
window.abort = false;
|
||||||
window.provider_result = null;
|
window.provider_result = null;
|
||||||
|
|
||||||
window.content = document.getElementById(`gpt_${window.token}`);
|
content = document.getElementById(`gpt_${window.token}`);
|
||||||
window.content_inner = content.querySelector('.content_inner');
|
content_inner = content.querySelector('.content_inner');
|
||||||
window.content_count = content.querySelector('.count');
|
content_count = content.querySelector('.count');
|
||||||
|
|
||||||
message_box.scrollTop = message_box.scrollHeight;
|
message_box.scrollTop = message_box.scrollHeight;
|
||||||
window.scrollTo(0, 0);
|
window.scrollTo(0, 0);
|
||||||
|
|
@ -307,9 +309,6 @@ const ask_gpt = async () => {
|
||||||
error = true;
|
error = true;
|
||||||
text = "oops ! something went wrong, please try again / reload. [stacktrace in console]";
|
text = "oops ! something went wrong, please try again / reload. [stacktrace in console]";
|
||||||
content_inner.innerHTML = text;
|
content_inner.innerHTML = text;
|
||||||
} else {
|
|
||||||
content_inner.innerHTML += " [aborted]";
|
|
||||||
if (text) text += " [aborted]";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!error && text) {
|
if (!error && text) {
|
||||||
|
|
@ -583,8 +582,13 @@ const load_conversations = async () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
document.getElementById(`cancelButton`).addEventListener(`click`, async () => {
|
document.getElementById("cancelButton").addEventListener("click", async () => {
|
||||||
window.controller.abort();
|
window.controller.abort();
|
||||||
|
if (!window.abort) {
|
||||||
|
window.abort = true;
|
||||||
|
content_inner.innerHTML += " [aborted]";
|
||||||
|
if (window.text) window.text += " [aborted]";
|
||||||
|
}
|
||||||
console.log(`aborted ${window.conversation_id}`);
|
console.log(`aborted ${window.conversation_id}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,8 @@ class Api():
|
||||||
self._prepare_conversation_kwargs(options, kwargs),
|
self._prepare_conversation_kwargs(options, kwargs),
|
||||||
options.get("conversation_id")
|
options.get("conversation_id")
|
||||||
):
|
):
|
||||||
window.evaluate_js(f"this.add_message_chunk({json.dumps(message)})")
|
if not window.evaluate_js(f"if (!this.abort) this.add_message_chunk({json.dumps(message)}); !this.abort && !this.error;"):
|
||||||
|
break
|
||||||
|
|
||||||
def _prepare_conversation_kwargs(self, json_data: dict, kwargs: dict):
|
def _prepare_conversation_kwargs(self, json_data: dict, kwargs: dict):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import sys
|
||||||
|
import os.path
|
||||||
import webview
|
import webview
|
||||||
try:
|
try:
|
||||||
from platformdirs import user_config_dir
|
from platformdirs import user_config_dir
|
||||||
|
|
@ -14,9 +16,13 @@ def run_webview(
|
||||||
debug: bool = False,
|
debug: bool = False,
|
||||||
storage_path: str = None
|
storage_path: str = None
|
||||||
):
|
):
|
||||||
|
if getattr(sys, 'frozen', False):
|
||||||
|
dirname = sys._MEIPASS
|
||||||
|
else:
|
||||||
|
dirname = os.path.dirname(__file__)
|
||||||
webview.create_window(
|
webview.create_window(
|
||||||
f"g4f - {g4f.version.utils.current_version}",
|
f"g4f - {g4f.version.utils.current_version}",
|
||||||
"client/index.html",
|
os.path.join(dirname, "client/index.html"),
|
||||||
text_select=True,
|
text_select=True,
|
||||||
js_api=Api(),
|
js_api=Api(),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue