"""Bing-Chat model by Micorsoft""" import os import asyncio import json from pathlib import Path from EdgeGPT.EdgeGPT import Chatbot, ConversationStyle from EdgeGPT.EdgeUtils import Cookie, ImageQuery, Query from EdgeGPT.ImageGen import ImageGen class BingChat: """ EdgeGPT model by OpenAI Parameters ---------- cookies_path : str Path to the cookies.json necessary for authenticating with EdgeGPT Examples -------- >>> edgegpt = BingChat(cookies_path="./path/to/cookies.json") >>> response = edgegpt("Hello, my name is ChatGPT") >>> image_path = edgegpt.create_img("Sunset over mountains") """ def __init__(self, cookies_path: str = None): self.cookies = json.loads(open(cookies_path, encoding="utf-8").read()) self.bot = asyncio.run(Chatbot.create(cookies=self.cookies)) def __call__( self, prompt: str, style: ConversationStyle = ConversationStyle.creative ) -> str: """ Get a text response using the EdgeGPT model based on the provided prompt. """ response = asyncio.run( self.bot.ask( prompt=prompt, conversation_style=style, simplify_response=True ) ) return response["text"] def create_img( self, prompt: str, output_dir: str = "./output", auth_cookie: str = None, auth_cookie_SRCHHPGUSR: str = None ) -> str: """ Generate an image based on the provided prompt and save it in the given output directory. Returns the path of the generated image. """ if not auth_cookie: raise ValueError("Auth cookie is required for image generation.") image_generator = ImageGen(auth_cookie, auth_cookie_SRCHHPGUSR, quiet=True, ) images = image_generator.get_images(prompt) image_generator.save_images(images, output_dir=output_dir) return Path(output_dir) / images[0] @staticmethod def set_cookie_dir_path(path: str): """ Set the directory path for managing cookies. """ Cookie.dir_path = Path(path)