mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-10-20 23:09:49 +08:00
Fix process_image in Bing
Add ImageResponse to Bing Fix cursor styling in gui
This commit is contained in:
@@ -9,9 +9,10 @@ from urllib import parse
|
||||
from aiohttp import ClientSession, ClientTimeout
|
||||
|
||||
from ..typing import AsyncResult, Messages, ImageType
|
||||
from ..image import ImageResponse
|
||||
from .base_provider import AsyncGeneratorProvider
|
||||
from .bing.upload_image import upload_image
|
||||
from .bing.create_images import create_images, format_images_markdown
|
||||
from .bing.create_images import create_images
|
||||
from .bing.conversation import Conversation, create_conversation, delete_conversation
|
||||
|
||||
class Tones():
|
||||
@@ -172,7 +173,7 @@ def create_message(
|
||||
prompt: str,
|
||||
tone: str,
|
||||
context: str = None,
|
||||
image_info: dict = None,
|
||||
image_response: ImageResponse = None,
|
||||
web_search: bool = False,
|
||||
gpt4_turbo: bool = False
|
||||
) -> str:
|
||||
@@ -228,9 +229,9 @@ def create_message(
|
||||
'target': 'chat',
|
||||
'type': 4
|
||||
}
|
||||
if image_info and "imageUrl" in image_info and "originalImageUrl" in image_info:
|
||||
struct['arguments'][0]['message']['originalImageUrl'] = image_info['originalImageUrl']
|
||||
struct['arguments'][0]['message']['imageUrl'] = image_info['imageUrl']
|
||||
if image_response.get('imageUrl') and image_response.get('originalImageUrl'):
|
||||
struct['arguments'][0]['message']['originalImageUrl'] = image_response.get('originalImageUrl')
|
||||
struct['arguments'][0]['message']['imageUrl'] = image_response.get('imageUrl')
|
||||
struct['arguments'][0]['experienceType'] = None
|
||||
struct['arguments'][0]['attachedFileInfo'] = {"fileName": None, "fileType": None}
|
||||
if context:
|
||||
@@ -262,9 +263,9 @@ async def stream_generate(
|
||||
headers=headers
|
||||
) as session:
|
||||
conversation = await create_conversation(session, proxy)
|
||||
image_info = None
|
||||
if image:
|
||||
image_info = await upload_image(session, image, tone, proxy)
|
||||
image_response = await upload_image(session, image, tone, proxy) if image else None
|
||||
if image_response:
|
||||
yield image_response
|
||||
try:
|
||||
async with session.ws_connect(
|
||||
'wss://sydney.bing.com/sydney/ChatHub',
|
||||
@@ -274,7 +275,7 @@ async def stream_generate(
|
||||
) as wss:
|
||||
await wss.send_str(format_message({'protocol': 'json', 'version': 1}))
|
||||
await wss.receive(timeout=timeout)
|
||||
await wss.send_str(create_message(conversation, prompt, tone, context, image_info, web_search, gpt4_turbo))
|
||||
await wss.send_str(create_message(conversation, prompt, tone, context, image_response, web_search, gpt4_turbo))
|
||||
|
||||
response_txt = ''
|
||||
returned_text = ''
|
||||
@@ -290,6 +291,7 @@ async def stream_generate(
|
||||
response = json.loads(obj)
|
||||
if response.get('type') == 1 and response['arguments'][0].get('messages'):
|
||||
message = response['arguments'][0]['messages'][0]
|
||||
image_response = None
|
||||
if (message['contentOrigin'] != 'Apology'):
|
||||
if 'adaptiveCards' in message:
|
||||
card = message['adaptiveCards'][0]['body'][0]
|
||||
@@ -301,7 +303,7 @@ async def stream_generate(
|
||||
elif message.get('contentType') == "IMAGE":
|
||||
prompt = message.get('text')
|
||||
try:
|
||||
response_txt += format_images_markdown(await create_images(session, prompt, proxy), prompt)
|
||||
image_response = ImageResponse(await create_images(session, prompt, proxy), prompt)
|
||||
except:
|
||||
response_txt += f"\nhttps://www.bing.com/images/create?q={parse.quote(prompt)}"
|
||||
final = True
|
||||
@@ -310,6 +312,8 @@ async def stream_generate(
|
||||
if new != "\n":
|
||||
yield new
|
||||
returned_text = response_txt
|
||||
if image_response:
|
||||
yield image_response
|
||||
elif response.get('type') == 2:
|
||||
result = response['item']['result']
|
||||
if result.get('error'):
|
||||
|
@@ -6,7 +6,7 @@ import json
|
||||
import math
|
||||
from ...typing import ImageType
|
||||
from aiohttp import ClientSession
|
||||
from ...image import to_image, process_image, to_base64
|
||||
from ...image import to_image, process_image, to_base64, ImageResponse
|
||||
|
||||
image_config = {
|
||||
"maxImagePixels": 360000,
|
||||
@@ -19,7 +19,7 @@ async def upload_image(
|
||||
image: ImageType,
|
||||
tone: str,
|
||||
proxy: str = None
|
||||
) -> dict:
|
||||
) -> ImageResponse:
|
||||
image = to_image(image)
|
||||
width, height = image.size
|
||||
max_image_pixels = image_config['maxImagePixels']
|
||||
@@ -55,7 +55,7 @@ async def upload_image(
|
||||
else "https://www.bing.com/images/blob?bcid="
|
||||
+ result['bcid']
|
||||
)
|
||||
return result
|
||||
return ImageResponse(result["imageUrl"], "", result)
|
||||
|
||||
def build_image_upload_api_payload(image_bin: str, tone: str):
|
||||
payload = {
|
||||
|
@@ -13,7 +13,6 @@ from ...webdriver import get_browser, get_driver_cookies
|
||||
from ...typing import AsyncResult, Messages
|
||||
from ...requests import StreamSession
|
||||
from ...image import to_image, to_bytes, ImageType, ImageResponse
|
||||
from ... import debug
|
||||
|
||||
models = {
|
||||
"gpt-3.5": "text-davinci-002-render-sha",
|
||||
@@ -242,9 +241,7 @@ class OpenaiChat(AsyncGeneratorProvider):
|
||||
json=data,
|
||||
headers={"Accept": "text/event-stream", **headers}
|
||||
) as response:
|
||||
try:
|
||||
response.raise_for_status()
|
||||
except:
|
||||
if not response.ok:
|
||||
raise RuntimeError(f"Response {response.status_code}: {await response.text()}")
|
||||
try:
|
||||
last_message: int = 0
|
||||
|
@@ -566,6 +566,7 @@ select {
|
||||
animation: blink 0.8s infinite;
|
||||
width: 7px;
|
||||
height: 15px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
|
@@ -104,7 +104,7 @@ const ask_gpt = async () => {
|
||||
</div>
|
||||
<div class="content" id="gpt_${window.token}">
|
||||
<div class="provider"></div>
|
||||
<div class="content_inner"><div id="cursor"></div></div>
|
||||
<div class="content_inner"><span id="cursor"></span></div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
@@ -168,7 +168,7 @@ const ask_gpt = async () => {
|
||||
}
|
||||
if (error) {
|
||||
console.error(error);
|
||||
content_inner.innerHTML = "An error occured, please try again, if the problem persists, please use a other model or provider";
|
||||
content_inner.innerHTML += "<p>An error occured, please try again, if the problem persists, please use a other model or provider.</p>";
|
||||
} else {
|
||||
html = markdown_render(text);
|
||||
html = html.substring(0, html.lastIndexOf('</p>')) + '<span id="cursor"></span></p>';
|
||||
|
@@ -64,7 +64,6 @@ def get_orientation(image: Image.Image) -> int:
|
||||
|
||||
def process_image(img: Image.Image, new_width: int, new_height: int) -> Image.Image:
|
||||
orientation = get_orientation(img)
|
||||
new_img = Image.new("RGB", (new_width, new_height), color="#FFFFFF")
|
||||
if orientation:
|
||||
if orientation > 4:
|
||||
img = img.transpose(Image.FLIP_LEFT_RIGHT)
|
||||
@@ -74,8 +73,8 @@ def process_image(img: Image.Image, new_width: int, new_height: int) -> Image.Im
|
||||
img = img.transpose(Image.ROTATE_270)
|
||||
if orientation in [7, 8]:
|
||||
img = img.transpose(Image.ROTATE_90)
|
||||
new_img.paste(img, (0, 0))
|
||||
return new_img
|
||||
img.thumbnail((new_width, new_height))
|
||||
return img
|
||||
|
||||
def to_base64(image: Image.Image, compression_rate: float) -> str:
|
||||
output_buffer = BytesIO()
|
||||
|
Reference in New Issue
Block a user