返回提交历史
Modified
g4f/Provider/Bing.py
+29
-17
Modified
g4f/gui/client/static/js/chat.v1.js
+11
-8
XFEstudio/gpt4free
Add copilot conversation mode
f861f322
代码差异
2 个文件
+40
-25
@@ -26,6 +26,7 @@ class Tones:
26
26
creative = "Creative"
27
27
balanced = "Balanced"
28
28
precise = "Precise"
29
copilot = "Balanced"
29
30
30
31
class Bing(AsyncGeneratorProvider, ProviderModelMixin):
31
32
"""
@@ -35,10 +36,8 @@ class Bing(AsyncGeneratorProvider, ProviderModelMixin):
35
36
working = True
36
37
supports_message_history = True
37
38
supports_gpt_4 = True
38
default_model = Tones.balanced
39
models = [
40
getattr(Tones, key) for key in dir(Tones) if not key.startswith("__")
41
]
39
default_model = "balanced"
40
models = [key for key in Tones.__dict__ if not key.startswith("__")]
42
41
43
42
@classmethod
44
43
def create_async_generator(
@@ -71,7 +70,7 @@ class Bing(AsyncGeneratorProvider, ProviderModelMixin):
71
70
context = create_context(messages[:-1]) if len(messages) > 1 else None
72
71
if tone is None:
73
72
tone = tone if model.startswith("gpt-4") else model
74
tone = cls.get_model(tone)
73
tone = cls.get_model("" if tone is None else tone.lower())
75
74
gpt4_turbo = True if model.startswith("gpt-4-turbo") else False
76
75
77
76
return stream_generate(
@@ -136,31 +135,32 @@ class Defaults:
136
135
]
137
136
138
137
sliceIds = {
139
"Balanced": [
138
"balanced": [
140
139
"supllmnfe","archnewtf",
141
140
"stpstream", "stpsig", "vnextvoicecf", "scmcbase", "cmcpupsalltf", "sydtransctrl",
142
141
"thdnsrch", "220dcl1s0", "0215wcrwips0", "0305hrthrots0", "0130gpt4t",
143
142
"bingfc", "0225unsticky1", "0228scss0",
144
143
"defquerycf", "defcontrol", "3022tphpv"
145
144
],
146
"Creative": [
145
"creative": [
147
146
"bgstream", "fltltst2c",
148
147
"stpstream", "stpsig", "vnextvoicecf", "cmcpupsalltf", "sydtransctrl",
149
148
"0301techgnd", "220dcl1bt15", "0215wcrwip", "0305hrthrot", "0130gpt4t",
150
149
"bingfccf", "0225unsticky1", "0228scss0",
151
150
"3022tpvs0"
152
151
],
153
"Precise": [
152
"precise": [
154
153
"bgstream", "fltltst2c",
155
154
"stpstream", "stpsig", "vnextvoicecf", "cmcpupsalltf", "sydtransctrl",
156
155
"0301techgnd", "220dcl1bt15", "0215wcrwip", "0305hrthrot", "0130gpt4t",
157
156
"bingfccf", "0225unsticky1", "0228scss0",
158
157
"defquerycf", "3022tpvs0"
159
158
],
159
"copilot": []
160
160
}
161
161
162
162
optionsSets = {
163
"Balanced": [
163
"balanced": [
164
164
"nlu_direct_response_filter", "deepleo",
165
165
"disable_emoji_spoken_text", "responsible_ai_policy_235",
166
166
"enablemm", "dv3sugg", "autosave",
@@ -168,7 +168,7 @@ class Defaults:
168
168
"galileo", "saharagenconv5", "gldcl1p",
169
169
"gpt4tmncnp"
170
170
],
171
"Creative": [
171
"creative": [
172
172
"nlu_direct_response_filter", "deepleo",
173
173
"disable_emoji_spoken_text", "responsible_ai_policy_235",
174
174
"enablemm", "dv3sugg",
@@ -176,7 +176,7 @@ class Defaults:
176
176
"h3imaginative", "techinstgnd", "hourthrot", "clgalileo", "gencontentv3",
177
177
"gpt4tmncnp"
178
178
],
179
"Precise": [
179
"precise": [
180
180
"nlu_direct_response_filter", "deepleo",
181
181
"disable_emoji_spoken_text", "responsible_ai_policy_235",
182
182
"enablemm", "dv3sugg",
@@ -184,6 +184,13 @@ class Defaults:
184
184
"h3precise", "techinstgnd", "hourthrot", "techinstgnd", "hourthrot",
185
185
"clgalileo", "gencontentv3"
186
186
],
187
"copilot": [
188
"nlu_direct_response_filter", "deepleo",
189
"disable_emoji_spoken_text", "responsible_ai_policy_235",
190
"enablemm", "dv3sugg",
191
"iyxapbing", "iycapbing",
192
"h3precise", "clgalileo", "gencontentv3", "prjupy"
193
],
187
194
}
188
195
189
196
# Default location settings
@@ -264,7 +271,7 @@ def create_message(
264
271
"allowedMessageTypes": Defaults.allowedMessageTypes,
265
272
"sliceIds": Defaults.sliceIds[tone],
266
273
"verbosity": "verbose",
267
"scenario": "SERP",
274
"scenario": "CopilotMicrosoftCom", # "SERP",
268
275
"plugins": [{"id": "c310c353-b9f0-4d76-ab0d-1dd5e979cf68", "category": 1}] if web_search else [],
269
276
"traceId": get_random_hex(40),
270
277
"conversationHistoryOptionsSets": ["autosave","savemem","uprofupd","uprofgen"],
@@ -282,8 +289,7 @@ def create_message(
282
289
"requestId": request_id,
283
290
"messageId": request_id
284
291
},
285
"tone": tone,
286
"extraExtensionParameters": {"gpt-creator-persona": {"personaId": "copilot"}},
292
"tone": getattr(Tones, tone),
287
293
"spokenTextMode": "None",
288
294
"conversationId": conversation.conversationId,
289
295
"participant": {"id": conversation.clientId}
@@ -322,6 +328,7 @@ async def stream_generate(
322
328
gpt4_turbo: bool = False,
323
329
timeout: int = 900,
324
330
conversation: Conversation = None,
331
return_conversation: bool = False,
325
332
raise_apology: bool = False,
326
333
max_retries: int = 5,
327
334
sleep_retry: int = 15,
@@ -344,10 +351,15 @@ async def stream_generate(
344
351
async with ClientSession(
345
352
timeout=ClientTimeout(total=timeout), connector=connector
346
353
) as session:
347
while conversation is None:
354
first = True
355
while first or conversation is None:
356
first = False
348
357
do_read = True
349
358
try:
350
conversation = await create_conversation(session, headers)
359
if conversation is None:
360
conversation = await create_conversation(session, headers)
361
if return_conversation:
362
yield conversation
351
363
except ResponseStatusError as e:
352
364
max_retries -= 1
353
365
if max_retries < 1:
@@ -358,7 +370,7 @@ async def stream_generate(
358
370
await asyncio.sleep(sleep_retry)
359
371
continue
360
372
361
image_request = await upload_image(session, image, tone, headers) if image else None
373
image_request = await upload_image(session, image, getattr(Tones, tone), headers) if image else None
362
374
async with session.ws_connect(
363
375
'wss://sydney.bing.com/sydney/ChatHub',
364
376
autoping=False,
@@ -811,7 +811,7 @@ async function on_api() {
811
811
812
812
register_settings_storage();
813
813
814
versions = await api('version')
814
versions = await api("version");
815
815
document.title = 'g4f - ' + versions["version"];
816
816
let text = "version ~ "
817
817
if (versions["version"] != versions["latest_version"]) {
@@ -825,19 +825,19 @@ async function on_api() {
825
825
826
826
models = await api("models");
827
827
models.forEach((model) => {
828
let option = document.createElement('option');
828
let option = document.createElement("option");
829
829
option.value = option.text = model;
830
830
modelSelect.appendChild(option);
831
831
});
832
832
833
providers = await api('providers')
833
providers = await api("providers")
834
834
providers.forEach((provider) => {
835
let option = document.createElement('option');
835
let option = document.createElement("option");
836
836
option.value = option.text = provider;
837
837
providerSelect.appendChild(option);
838
838
})
839
839
840
load_provider_models();
840
await load_provider_models(appStorage.getItem("provider"));
841
841
load_settings_storage()
842
842
}
843
843
@@ -965,8 +965,11 @@ async function read_response(response) {
965
965
}
966
966
}
967
967
968
async function load_provider_models() {
969
const provider = providerSelect.options[providerSelect.selectedIndex].value;
968
async function load_provider_models(providerIndex=null) {
969
if (!providerIndex) {
970
providerIndex = providerSelect.selectedIndex;
971
}
972
const provider = providerSelect.options[providerIndex].value;
970
973
if (!provider) {
971
974
return;
972
975
}
@@ -986,7 +989,7 @@ async function load_provider_models() {
986
989
modelSelect.classList.remove("hidden");
987
990
}
988
991
};
989
providerSelect.addEventListener("change", load_provider_models)
992
providerSelect.addEventListener("change", () => load_provider_models());
990
993
991
994
function save_storage() {
992
995
let filename = new Date().toLocaleString()