bing-chat-api / networks /chathub_request_payload_constructor.py
Hansimov's picture
:gem: [Feature] Support disable search for offline models
b977ac3
raw
history blame
7.01 kB
import random
import uuid
from conversations import ConversationStyle
class SystemPromptContextConstructor:
# https://github.com/weaigc/bingo/blob/eaebba306d5f68b940e4486ad81897516d0db0f3/src/lib/bots/bing/index.ts#L205-L211
# https://github.com/weaigc/bingo/blob/eaebba306d5f68b940e4486ad81897516d0db0f3/src/lib/bots/bing/index.ts#L296
def __init__(self, system_prompt: str = None):
self.system_prompt = system_prompt
self.construct()
def construct(self):
if self.system_prompt:
self.system_context = [
{
"author": "user",
"description": self.system_prompt,
"contextType": "WebPage",
"messageType": "Context",
"messageId": "discover-web--page-ping-mriduna-----",
}
]
else:
self.system_context = None
class ChathubRequestPayloadConstructor:
def __init__(
self,
prompt: str,
client_id: str,
conversation_id: str,
invocation_id: int = 0,
conversation_style: str = ConversationStyle.PRECISE.value,
system_prompt: str = None,
):
self.prompt = prompt
self.client_id = client_id
self.conversation_id = conversation_id
self.invocation_id = invocation_id
self.conversation_style = conversation_style.lower()
if self.conversation_style.endswith("offline"):
self.enable_search = False
self.conversation_style = self.conversation_style.replace("-offline", "")
else:
self.enable_search = True
self.message_id = self.generate_random_uuid()
self.system_prompt = system_prompt
self.construct()
def generate_random_uuid(self):
return str(uuid.uuid4())
def generate_random_hex_str(self, length: int = 32) -> str:
return "".join(random.choice("0123456789abcdef") for _ in range(length))
def set_options_sets(self):
options_sets_body = [
"nlu_direct_response_filter",
"deepleo",
"disable_emoji_spoken_text",
"responsible_ai_policy_235",
"enablemm",
"dv3sugg",
"autosave",
"iyxapbing",
"iycapbing",
"rai289",
"enflst",
"enpcktrk",
"rcaldictans",
"rcaltimeans",
"eredirecturl",
]
options_sets_by_styles = {
"precise": options_sets_body
+ [
"h3precise",
"clgalileo",
"gencontentv3",
],
"balanced": options_sets_body
+ [
"galileo",
"saharagenconv5",
],
"creative": options_sets_body
+ [
"h3imaginative",
"clgalileo",
"gencontentv3",
],
}
self.options_sets = options_sets_by_styles[self.conversation_style]
def set_search_options(self):
self.plugins = []
if self.enable_search:
self.plugins.append({"id": "c310c353-b9f0-4d76-ab0d-1dd5e979cf68"})
else:
self.options_sets.append("nosearchall")
def set_system_context(self):
self.system_context = SystemPromptContextConstructor(
self.system_prompt
).system_context
def construct(self):
self.set_options_sets()
self.set_search_options()
self.set_system_context()
self.request_payload = {
"arguments": [
{
"source": "cib",
"optionsSets": self.options_sets,
"allowedMessageTypes": [
"ActionRequest",
"Chat",
"ConfirmationCard",
"Context",
"InternalSearchQuery",
"InternalSearchResult",
"Disengaged",
"InternalLoaderMessage",
"InvokeAction",
"Progress",
"RenderCardRequest",
"RenderContentRequest",
"AdsQuery",
"SemanticSerp",
"GenerateContentQuery",
"SearchQuery",
],
"sliceIds": [
"techpillscf",
"gbaa",
"gba",
"gbapa",
"codecreator",
"dlidcf",
"specedge",
"preall15",
"suppsm240-t",
"translref",
"ardsw_1_9_9",
"fluxnosearchc",
"fluxnosearch",
"1115rai289",
"1119backoss0",
"124multi2t",
"1129gpt4ts0",
"kchero50cf",
"cacfastapis",
"cacdupereccf",
"cacmuidarb",
"cacfrwebt2cf",
"sswebtop2cf",
],
"verbosity": "verbose",
"scenario": "SERP",
"plugins": self.plugins,
"previousMessages": self.system_context,
"traceId": self.generate_random_hex_str(),
"conversationHistoryOptionsSets": [
"autosave",
"savemem",
"uprofupd",
"uprofgen",
],
"isStartOfSession": self.invocation_id == 0,
"requestId": self.message_id,
"message": {
"author": "user",
"inputMethod": "Keyboard",
"text": self.prompt,
"messageType": "Chat",
"requestId": self.message_id, # "a6ecd3aa-1007-6959-52fb-9e23f34e86be",
"messageId": self.message_id, # "a6ecd3aa-1007-6959-52fb-9e23f34e86be",
},
"tone": self.conversation_style.capitalize(),
"spokenTextMode": "None",
"conversationId": self.conversation_id, # "51D|BingProdUnAuthenticatedUsers|65761F31183134340AFD8F9AF1532EA90DC7F11ED348765DE9BAC956C9BA4669",
"participant": {
"id": self.client_id, # "23EBCCB7073868D70172DF780674692D",
},
}
],
"invocationId": str(self.invocation_id),
"target": "chat",
"type": 4,
}