diff --git a/g4f/Provider/Bing.py b/g4f/Provider/Bing.py index ae7f106b..c54a3ae5 100644 --- a/g4f/Provider/Bing.py +++ b/g4f/Provider/Bing.py @@ -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(),