You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.1 KiB
68 lines
2.1 KiB
"""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)
|