mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-11-10 19:11:01 +00:00
54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
from ..cookies import get_cookies
|
|
from ..image import ImageResponse
|
|
from ..errors import MissingAuthError
|
|
from ..typing import AsyncResult, Messages, Cookies
|
|
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
|
|
from .bing.create_images import create_images, create_session
|
|
|
|
class BingCreateImages(AsyncGeneratorProvider, ProviderModelMixin):
|
|
label = "Microsoft Designer in Bing"
|
|
parent = "Bing"
|
|
url = "https://www.bing.com/images/create"
|
|
working = True
|
|
needs_auth = True
|
|
image_models = ["dall-e"]
|
|
|
|
def __init__(self, cookies: Cookies = None, proxy: str = None, api_key: str = None) -> None:
|
|
if api_key is not None:
|
|
if cookies is None:
|
|
cookies = {}
|
|
cookies["_U"] = api_key
|
|
self.cookies = cookies
|
|
self.proxy = proxy
|
|
|
|
@classmethod
|
|
async def create_async_generator(
|
|
cls,
|
|
model: str,
|
|
messages: Messages,
|
|
api_key: str = None,
|
|
cookies: Cookies = None,
|
|
proxy: str = None,
|
|
**kwargs
|
|
) -> AsyncResult:
|
|
session = BingCreateImages(cookies, proxy, api_key)
|
|
yield await session.generate(messages[-1]["content"])
|
|
|
|
async def generate(self, prompt: str) -> ImageResponse:
|
|
"""
|
|
Asynchronously creates a markdown formatted string with images based on the prompt.
|
|
|
|
Args:
|
|
prompt (str): Prompt to generate images.
|
|
|
|
Returns:
|
|
str: Markdown formatted string with images.
|
|
"""
|
|
cookies = self.cookies or get_cookies(".bing.com", False)
|
|
if cookies is None or "_U" not in cookies:
|
|
raise MissingAuthError('Missing "_U" cookie')
|
|
async with create_session(cookies, self.proxy) as session:
|
|
images = await create_images(session, prompt)
|
|
return ImageResponse(images, prompt, {"preview": "{image}?w=200&h=200"} if len(images) > 1 else {}) |