mirror of https://github.com/xtekky/gpt4free.git
Bugfix Bing.py - Resolved Issues with system prompt, Bing personalities and enabled all supported user requests
I used this repository (https://github.com/waylaidwanderer/node-chatgpt-api/) as a reference to fix all the bugs related to Bing "personality." I included all the required fields in the allowedMessageTypes and optionsSets (as well as sliceIds) to allow it to respond to any requests it actually supports. Will also finish the code to fully implement the image generation functionality.
This commit is contained in:
parent
9eee45023e
commit
21e56a1af8
|
@ -57,7 +57,7 @@ class Bing(AsyncGeneratorProvider):
|
|||
|
||||
def create_context(messages: Messages):
|
||||
return "".join(
|
||||
f"[{message['role']}](#message)\n{message['content']}\n\n"
|
||||
f"[{message['role']}]" + ("(#message)" if message['role']!="system" else "(#additional_instructions)") + f"\n{message['content']}\n\n"
|
||||
for message in messages
|
||||
)
|
||||
|
||||
|
@ -166,9 +166,9 @@ class Defaults:
|
|||
"ActionRequest",
|
||||
"Chat",
|
||||
"Context",
|
||||
"Disengaged",
|
||||
# "Disengaged", unwanted
|
||||
"Progress",
|
||||
"AdsQuery",
|
||||
# "AdsQuery", unwanted
|
||||
"SemanticSerp",
|
||||
"GenerateContentQuery",
|
||||
"SearchQuery",
|
||||
|
@ -176,34 +176,21 @@ class Defaults:
|
|||
# useless messages (such as "Analyzing images" or "Searching the web") while it's retrieving the AI response
|
||||
# "InternalSearchQuery",
|
||||
# "InternalSearchResult",
|
||||
# Not entirely certain about these two, but these parameters may be used for real-time markdown rendering.
|
||||
# Keeping them could potentially complicate the retrieval of the messages because link references written while
|
||||
# the AI is responding would then be moved to the very end of its message.
|
||||
# "RenderCardRequest",
|
||||
"RenderCardRequest",
|
||||
# "RenderContentRequest"
|
||||
]
|
||||
|
||||
sliceIds = [
|
||||
"wrapuxslimt5",
|
||||
"wrapalgo",
|
||||
"wraptopalgo",
|
||||
"st14",
|
||||
"arankr1_1_9_9",
|
||||
"0731ziv2s0",
|
||||
"voiceall",
|
||||
"1015onstblg",
|
||||
"vsspec",
|
||||
"cacdiscf",
|
||||
"909ajcopus0",
|
||||
"scpbfmob",
|
||||
"rwt1",
|
||||
"cacmuidarb",
|
||||
"sappdlpt",
|
||||
"917fluxv14",
|
||||
"delaygc",
|
||||
"remsaconn3p",
|
||||
"splitcss3p",
|
||||
"sydconfigoptt"
|
||||
'abv2',
|
||||
'srdicton',
|
||||
'convcssclick',
|
||||
'stylewv2',
|
||||
'contctxp2tf',
|
||||
'802fluxv1pc_a',
|
||||
'806log2sphs0',
|
||||
'727savemem',
|
||||
'277teditgnds0',
|
||||
'207hlthgrds0',
|
||||
]
|
||||
|
||||
location = {
|
||||
|
@ -248,19 +235,21 @@ class Defaults:
|
|||
}
|
||||
|
||||
optionsSets = [
|
||||
"nlu_direct_response_filter",
|
||||
"deepleo",
|
||||
"disable_emoji_spoken_text",
|
||||
"responsible_ai_policy_235",
|
||||
"enablemm",
|
||||
"dv3sugg",
|
||||
"iyxapbing",
|
||||
"iycapbing",
|
||||
"h3imaginative",
|
||||
"clgalileo",
|
||||
"gencontentv3",
|
||||
"fluxv14",
|
||||
"eredirecturl"
|
||||
'nlu_direct_response_filter',
|
||||
'deepleo',
|
||||
'disable_emoji_spoken_text',
|
||||
'responsible_ai_policy_235',
|
||||
'enablemm',
|
||||
'iyxapbing',
|
||||
'iycapbing',
|
||||
'gencontentv3',
|
||||
'fluxsrtrunc',
|
||||
'fluxtrunc',
|
||||
'fluxv1',
|
||||
'rai278',
|
||||
'replaceurl',
|
||||
'eredirecturl',
|
||||
'nojbfedge'
|
||||
]
|
||||
|
||||
def format_message(msg: dict) -> str:
|
||||
|
@ -297,7 +286,7 @@ def build_image_upload_api_payload(image_bin: str, conversation: Conversation, t
|
|||
)
|
||||
return data, boundary
|
||||
|
||||
def is_data_uri_an_image(data_uri):
|
||||
def is_data_uri_an_image(data_uri: str):
|
||||
try:
|
||||
# Check if the data URI starts with 'data:image' and contains an image format (e.g., jpeg, png, gif)
|
||||
if not re.match(r'data:image/(\w+);base64,', data_uri):
|
||||
|
@ -310,7 +299,7 @@ def is_data_uri_an_image(data_uri):
|
|||
except Exception as e:
|
||||
raise e
|
||||
|
||||
def is_accepted_format(binary_data):
|
||||
def is_accepted_format(binary_data: bytes) -> bool:
|
||||
try:
|
||||
check = False
|
||||
if binary_data.startswith(b'\xFF\xD8\xFF'):
|
||||
|
@ -331,7 +320,7 @@ def is_accepted_format(binary_data):
|
|||
except Exception as e:
|
||||
raise e
|
||||
|
||||
def extract_data_uri(data_uri):
|
||||
def extract_data_uri(data_uri: str) -> bytes:
|
||||
try:
|
||||
data = data_uri.split(",")[1]
|
||||
data = base64.b64decode(data)
|
||||
|
@ -339,7 +328,7 @@ def extract_data_uri(data_uri):
|
|||
except Exception as e:
|
||||
raise e
|
||||
|
||||
def get_orientation(data: bytes):
|
||||
def get_orientation(data: bytes) -> int:
|
||||
try:
|
||||
if data[:2] != b'\xFF\xD8':
|
||||
raise Exception('NotJpeg')
|
||||
|
@ -352,7 +341,7 @@ def get_orientation(data: bytes):
|
|||
except Exception:
|
||||
pass
|
||||
|
||||
def process_image(orientation, img, new_width, new_height):
|
||||
def process_image(orientation: int, img: Image.Image, new_width: int, new_height: int) -> Image.Image:
|
||||
try:
|
||||
# Initialize the canvas
|
||||
new_img = Image.new("RGB", (new_width, new_height), color="#FFFFFF")
|
||||
|
@ -370,7 +359,7 @@ def process_image(orientation, img, new_width, new_height):
|
|||
except Exception as e:
|
||||
raise e
|
||||
|
||||
def compress_image_to_base64(img, compression_rate):
|
||||
def compress_image_to_base64(img, compression_rate) -> str:
|
||||
try:
|
||||
output_buffer = io.BytesIO()
|
||||
img.save(output_buffer, format="JPEG", quality=int(compression_rate * 100))
|
||||
|
@ -379,13 +368,22 @@ def compress_image_to_base64(img, compression_rate):
|
|||
raise e
|
||||
|
||||
def create_message(conversation: Conversation, prompt: str, tone: str, context: str=None) -> str:
|
||||
options_sets = Defaults.optionsSets
|
||||
if tone == Tones.creative:
|
||||
options_sets.append("h3imaginative")
|
||||
elif tone == Tones.precise:
|
||||
options_sets.append("h3precise")
|
||||
elif tone == Tones.balanced:
|
||||
options_sets.append("galileo")
|
||||
else:
|
||||
options_sets.append("harmonyv3")
|
||||
|
||||
request_id = str(uuid.uuid4())
|
||||
struct = {
|
||||
'arguments': [
|
||||
{
|
||||
'source': 'cib',
|
||||
'optionsSets': Defaults.optionsSets,
|
||||
'optionsSets': options_sets,
|
||||
'allowedMessageTypes': Defaults.allowedMessageTypes,
|
||||
'sliceIds': Defaults.sliceIds,
|
||||
'traceId': os.urandom(16).hex(),
|
||||
|
|
Loading…
Reference in New Issue