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

XFEstudio/gpt4free

added context

03dc8532
unknown <alexey.verb.04@gmail.com>
提交于

代码差异

3 个文件 +83 -50
Modified g4f/gui/client/css/style.css +33 -0
@@ -260,6 +260,32 @@ body {
260 260 z-index: 10000;
261 261 }
262 262
263 .message .assistant{
264 max-width: 48px;
265 max-height: 48px;
266 flex-shrink: 0;
267 }
268
269 .message .assistant img {
270 width: 100%;
271 height: 100%;
272 object-fit: cover;
273 border-radius: 8px;
274 outline: 1px solid var(--blur-border);
275 }
276
277 .message .assistant:after {
278 content: "63";
279 position: absolute;
280 bottom: 0;
281 right: 0;
282 height: 60%;
283 width: 60%;
284 background: var(--colour-3);
285 filter: blur(10px) opacity(0.5);
286 z-index: 10000;
287 }
288
263 289 .message .content {
264 290 display: flex;
265 291 flex-direction: column;
@@ -280,6 +306,13 @@ body {
280 306 z-index: 1000;
281 307 }
282 308
309 .message .assistant i {
310 position: absolute;
311 bottom: -6px;
312 right: -6px;
313 z-index: 1000;
314 }
315
283 316 .new_convo {
284 317 padding: 8px 12px;
285 318 display: flex;
Modified g4f/gui/client/js/chat.v1.js +36 -16
@@ -31,12 +31,37 @@ const handle_ask = async () => {
31 31 message_input.style.height = `80px`;
32 32 message_input.focus();
33 33
34 let txtMsgs = [];
35 const divTags = document.getElementsByClassName("message");
36 for(let i=0;i<divTags.length;i++){
37 if(!divTags[i].children[1].classList.contains("welcome-message")){
38 if(divTags[i].children[0].className == "assistant"){
39 const msg = {
40 role: "assistant",
41 content: divTags[i].children[1].textContent+" "
42 };
43 txtMsgs.push(msg);
44 }else{
45 const msg = {
46 role: "user",
47 content: divTags[i].children[1].textContent+" "
48 };
49 txtMsgs.push(msg);
50 }
51 }
52 }
53
34 54 window.scrollTo(0, 0);
35 55 let message = message_input.value;
56 const msg = {
57 role: "user",
58 content: message
59 };
60 txtMsgs.push(msg);
36 61
37 62 if (message.length > 0) {
38 63 message_input.value = ``;
39 await ask_gpt(message);
64 await ask_gpt(txtMsgs);
40 65 }
41 66 };
42 67
@@ -49,13 +74,13 @@ const remove_cancel_button = async () => {
49 74 }, 300);
50 75 };
51 76
52 const ask_gpt = async (message) => {
77 const ask_gpt = async (txtMsgs) => {
53 78 try {
54 79 message_input.value = ``;
55 80 message_input.innerHTML = ``;
56 81 message_input.innerText = ``;
57 82
58 add_conversation(window.conversation_id, message);
83 add_conversation(window.conversation_id, txtMsgs[0].content);
59 84 window.scrollTo(0, 0);
60 85 window.controller = new AbortController();
61 86
@@ -75,7 +100,7 @@ const ask_gpt = async (message) => {
75 100 <i class="fa-regular fa-phone-arrow-up-right"></i>
76 101 </div>
77 102 <div class="content" id="user_${token}">
78 ${format(message)}
103 ${format(txtMsgs[txtMsgs.length-1].content)}
79 104 </div>
80 105 </div>
81 106 `;
@@ -87,7 +112,7 @@ const ask_gpt = async (message) => {
87 112
88 113 message_box.innerHTML += `
89 114 <div class="message">
90 <div class="user">
115 <div class="assistant">
91 116 ${gpt_image} <i class="fa-regular fa-phone-arrow-down-left"></i>
92 117 </div>
93 118 <div class="content" id="gpt_${window.token}">
@@ -120,12 +145,7 @@ const ask_gpt = async (message) => {
120 145 conversation: await get_conversation(window.conversation_id),
121 146 internet_access: document.getElementById(`switch`).checked,
122 147 content_type: `text`,
123 parts: [
124 {
125 content: message,
126 role: `user`,
127 },
128 ],
148 parts: txtMsgs,
129 149 },
130 150 },
131 151 }),
@@ -154,7 +174,7 @@ const ask_gpt = async (message) => {
154 174 document.getElementById(`gpt_${window.token}`).innerHTML = "An error occured, please try again, if the problem persists, please reload / refresh cache or use a differnet browser";
155 175 }
156 176
157 add_message(window.conversation_id, "user", message);
177 add_message(window.conversation_id, "user", txtMsgs[txtMsgs.length-1].content);
158 178 add_message(window.conversation_id, "assistant", text);
159 179
160 180 message_box.scrollTop = message_box.scrollHeight;
@@ -165,7 +185,7 @@ const ask_gpt = async (message) => {
165 185 window.scrollTo(0, 0);
166 186
167 187 } catch (e) {
168 add_message(window.conversation_id, "user", message);
188 add_message(window.conversation_id, "user", txtMsgs[txtMsgs.length-1].content);
169 189
170 190 message_box.scrollTop = message_box.scrollHeight;
171 191 await remove_cancel_button();
@@ -279,7 +299,7 @@ const load_conversation = async (conversation_id) => {
279 299 for (item of conversation.items) {
280 300 message_box.innerHTML += `
281 301 <div class="message">
282 <div class="user">
302 <div class=${item.role == "assistant" ? "assistant" : "user"}>
283 303 ${item.role == "assistant" ? gpt_image : user_image}
284 304 ${item.role == "assistant"
285 305 ? `<i class="fa-regular fa-phone-arrow-down-left"></i>`
@@ -316,7 +336,7 @@ const get_conversation = async (conversation_id) => {
316 336
317 337 const add_conversation = async (conversation_id, content) => {
318 338 if (content.length > 17) {
319 title = content.substring(0, 17) + '..'
339 title = content.substring(0, 17) + '...'
320 340 } else {
321 341 title = content + '&nbsp;'.repeat(19 - content.length)
322 342 }
@@ -461,7 +481,7 @@ const say_hello = async () => {
461 481
462 482 message_box.innerHTML += `
463 483 <div class="message">
464 <div class="user">
484 <div class="assistant">
465 485 ${gpt_image}
466 486 <i class="fa-regular fa-phone-arrow-down-left"></i>
467 487 </div>
Modified g4f/gui/server/backend.py +14 -34
@@ -1,5 +1,4 @@
1 1 import g4f
2 import json
3 2
4 3 from flask import request
5 4 from .internet import search
@@ -44,45 +43,26 @@ class Backend_Api:
44 43 }
45 44
46 45 def _conversation(self):
47 config = None
48 proxy = None
49 46 try:
50 config = json.load(open("config.json","r",encoding="utf-8"))
51 proxy = config["proxy"]
52
53 except Exception:
54 pass
55
56 try:
57 jailbreak = request.json['jailbreak']
58 internet_access = request.json['meta']['content']['internet_access']
59 conversation = request.json['meta']['content']['conversation']
60 prompt = request.json['meta']['content']['parts'][0]
47 #jailbreak = request.json['jailbreak']
48 #internet_access = request.json['meta']['content']['internet_access']
49 #conversation = request.json['meta']['content']['conversation']
50 prompt = request.json['meta']['content']['parts']
61 51 model = request.json['model']
62 52 provider = request.json.get('provider').split('g4f.Provider.')[1]
63 53
64 messages = special_instructions[jailbreak] + conversation + search(internet_access, prompt) + [prompt]
54 messages = prompt
55 print(messages)
65 56
66 57 def stream():
67 if proxy != None:
68 yield from g4f.ChatCompletion.create(
69 model=model,
70 provider=get_provider(provider),
71 messages=messages,
72 stream=True,
73 proxy=proxy
74 ) if provider else g4f.ChatCompletion.create(
75 model=model, messages=messages, stream=True, proxy=proxy
76 )
77 else:
78 yield from g4f.ChatCompletion.create(
79 model=model,
80 provider=get_provider(provider),
81 messages=messages,
82 stream=True,
83 ) if provider else g4f.ChatCompletion.create(
84 model=model, messages=messages, stream=True
85 )
58 yield from g4f.ChatCompletion.create(
59 model=g4f.models.gpt_35_long,
60 provider=get_provider(provider),
61 messages=messages,
62 stream=True,
63 ) if provider else g4f.ChatCompletion.create(
64 model=model, messages=messages, stream=True
65 )
86 66
87 67 return self.app.response_class(stream(), mimetype='text/event-stream')
88 68