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

XFEstudio/gpt4free

Improve error handling in gui

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

代码差异

2 个文件 +45 -59
Modified g4f/gui/client/js/chat.v1.js +38 -52
@@ -65,39 +65,37 @@ const remove_cancel_button = async () => {
65 65 const ask_gpt = async () => {
66 66 regenerate.classList.add(`regenerate-hidden`);
67 67 messages = await get_messages(window.conversation_id);
68 try {
69 window.scrollTo(0, 0);
70 window.controller = new AbortController();
71 68
72 jailbreak = document.getElementById("jailbreak");
73 provider = document.getElementById("provider");
74 model = document.getElementById("model");
75 prompt_lock = true;
76 window.text = ``;
69 window.scrollTo(0, 0);
70 window.controller = new AbortController();
77 71
78 stop_generating.classList.remove(`stop_generating-hidden`);
72 jailbreak = document.getElementById("jailbreak");
73 provider = document.getElementById("provider");
74 model = document.getElementById("model");
75 prompt_lock = true;
76 window.text = ``;
79 77
80 message_box.scrollTop = message_box.scrollHeight;
81 window.scrollTo(0, 0);
82 await new Promise((r) => setTimeout(r, 500));
83 window.scrollTo(0, 0);
78 stop_generating.classList.remove(`stop_generating-hidden`);
84 79
85 message_box.innerHTML += `
86 <div class="message">
87 <div class="assistant">
88 ${gpt_image} <i class="fa-regular fa-phone-arrow-down-left"></i>
89 </div>
90 <div class="content" id="gpt_${window.token}">
91 <div id="cursor"></div>
92 </div>
93 </div>
94 `;
80 message_box.scrollTop = message_box.scrollHeight;
81 window.scrollTo(0, 0);
82 await new Promise((r) => setTimeout(r, 500));
83 window.scrollTo(0, 0);
95 84
96 message_box.scrollTop = message_box.scrollHeight;
97 window.scrollTo(0, 0);
98 await new Promise((r) => setTimeout(r, 1000));
99 window.scrollTo(0, 0);
85 message_box.innerHTML += `
86 <div class="message">
87 <div class="assistant">
88 ${gpt_image} <i class="fa-regular fa-phone-arrow-down-left"></i>
89 </div>
90 <div class="content" id="gpt_${window.token}">
91 <div id="cursor"></div>
92 </div>
93 </div>
94 `;
100 95
96 message_box.scrollTop = message_box.scrollHeight;
97 window.scrollTo(0, 0);
98 try {
101 99 const response = await fetch(`/backend-api/v2/conversation`, {
102 100 method: `POST`,
103 101 signal: window.controller.signal,
@@ -122,8 +120,10 @@ const ask_gpt = async () => {
122 120 }),
123 121 });
124 122
125 const reader = response.body.getReader();
123 await new Promise((r) => setTimeout(r, 1000));
124 window.scrollTo(0, 0);
126 125
126 const reader = response.body.getReader();
127 127 while (true) {
128 128 const { value, done } = await reader.read();
129 129 if (done) break;
@@ -142,43 +142,29 @@ const ask_gpt = async () => {
142 142 }
143 143
144 144 if (text.includes(`G4F_ERROR`)) {
145 console.log("response", text);
145 146 document.getElementById(`gpt_${window.token}`).innerHTML = "An error occured, please try again, if the problem persists, please use a other model or provider";
146 147 }
147
148 add_message(window.conversation_id, "assistant", text);
149
150 message_box.scrollTop = message_box.scrollHeight;
151 await remove_cancel_button();
152 prompt_lock = false;
153
154 await load_conversations(20, 0);
155 window.scrollTo(0, 0);
156
157 148 } catch (e) {
158
159 message_box.scrollTop = message_box.scrollHeight;
160 await remove_cancel_button();
161 prompt_lock = false;
162
163 await load_conversations(20, 0);
164
165 149 console.log(e);
166 150
167 151 let cursorDiv = document.getElementById(`cursor`);
168 152 if (cursorDiv) cursorDiv.parentNode.removeChild(cursorDiv);
169 153
170 154 if (e.name != `AbortError`) {
171 let error_message = `oops ! something went wrong, please try again / reload. [stacktrace in console]`;
172
173 document.getElementById(`gpt_${window.token}`).innerHTML = error_message;
174 add_message(window.conversation_id, "assistant", error_message);
155 text = `oops ! something went wrong, please try again / reload. [stacktrace in console]`;
156 document.getElementById(`gpt_${window.token}`).innerHTML = text;
175 157 } else {
176 158 document.getElementById(`gpt_${window.token}`).innerHTML += ` [aborted]`;
177 add_message(window.conversation_id, "assistant", text + ` [aborted]`);
159 text += ` [aborted]`
178 160 }
179
180 window.scrollTo(0, 0);
181 161 }
162 add_message(window.conversation_id, "assistant", text);
163 message_box.scrollTop = message_box.scrollHeight;
164 await remove_cancel_button();
165 prompt_lock = false;
166 window.scrollTo(0, 0);
167 await load_conversations(20, 0);
182 168 regenerate.classList.remove(`regenerate-hidden`);
183 169 };
184 170
Modified g4f/gui/server/backend.py +7 -7
@@ -74,14 +74,14 @@ class Backend_Api:
74 74 provider = g4f.Provider.ProviderUtils.convert.get(provider)
75 75
76 76 def try_response():
77 response = g4f.ChatCompletion.create(
78 model=model,
79 provider=provider,
80 messages=messages,
81 stream=True,
82 ignore_stream_and_auth=True
83 )
84 77 try:
78 response = g4f.ChatCompletion.create(
79 model=model,
80 provider=provider,
81 messages=messages,
82 stream=True,
83 ignore_stream_and_auth=True
84 )
85 85 yield from response
86 86 except Exception as e:
87 87 print(e)