mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-12-25 12:16:17 +03:00
6a624acf55
Reuse cookies and access token in Copilot Send in the gui messages to multiple providers at once Add GUI documenation
55 lines
2.0 KiB
Python
55 lines
2.0 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"
|
|
url = "https://www.bing.com/images/create"
|
|
working = True
|
|
needs_auth = True
|
|
image_models = ["dall-e-3"]
|
|
models = image_models
|
|
|
|
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,
|
|
prompt: str = None,
|
|
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"] if prompt is None else prompt)
|
|
|
|
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 {}) |