mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-10-18 06:10:44 +08:00
Fix load share conversation
This commit is contained in:
@@ -9,6 +9,7 @@ from inspect import signature
|
||||
|
||||
from ...errors import VersionNotFoundError, MissingAuthError
|
||||
from ...image.copy_images import copy_media, ensure_media_dir, get_media_dir
|
||||
from ...image import get_width_height
|
||||
from ...tools.run_tools import iter_run_tools
|
||||
from ... import Provider
|
||||
from ...providers.base_provider import ProviderModelMixin
|
||||
@@ -196,8 +197,9 @@ class Api:
|
||||
media = chunk
|
||||
if download_media or chunk.get("cookies"):
|
||||
chunk.alt = format_media_prompt(kwargs.get("messages"), chunk.alt)
|
||||
tags = [model, kwargs.get("aspect_ratio"), kwargs.get("resolution"), kwargs.get("width"), kwargs.get("height")]
|
||||
media = asyncio.run(copy_media(chunk.get_list(), chunk.get("cookies"), chunk.get("headers"), proxy=proxy, alt=chunk.alt, tags=tags))
|
||||
width, height = get_width_height(chunk.get("width"), chunk.get("height"))
|
||||
tags = [model, kwargs.get("aspect_ratio"), kwargs.get("resolution")]
|
||||
media = asyncio.run(copy_media(chunk.get_list(), chunk.get("cookies"), chunk.get("headers"), proxy=proxy, alt=chunk.alt, tags=tags, add_url=f"width={width}&height={height}&"))
|
||||
media = ImageResponse(media, chunk.alt) if isinstance(chunk, ImageResponse) else VideoResponse(media, chunk.alt)
|
||||
yield self._format_json("content", str(media), urls=media.urls, alt=media.alt)
|
||||
elif isinstance(chunk, SynthesizeData):
|
||||
|
@@ -442,14 +442,14 @@ class Backend_Api(Api):
|
||||
@self.app.route('/backend-api/v2/chat/<share_id>', methods=['GET'])
|
||||
def get_chat(share_id: str) -> str:
|
||||
share_id = secure_filename(share_id)
|
||||
if self.chat_cache.get(share_id, 0) == int(request.headers.get("if-none-match", 0)):
|
||||
if self.chat_cache.get(share_id, 0) == int(request.headers.get("if-none-match", -1)):
|
||||
return jsonify({"error": {"message": "Not modified"}}), 304
|
||||
file = get_bucket_dir(share_id, "chat.json")
|
||||
if not os.path.isfile(file):
|
||||
return jsonify({"error": {"message": "Not found"}}), 404
|
||||
with open(file, 'r') as f:
|
||||
chat_data = json.load(f)
|
||||
if chat_data.get("updated", 0) == int(request.headers.get("if-none-match", 0)):
|
||||
if chat_data.get("updated", 0) == int(request.headers.get("if-none-match", -1)):
|
||||
return jsonify({"error": {"message": "Not modified"}}), 304
|
||||
self.chat_cache[share_id] = chat_data.get("updated", 0)
|
||||
return jsonify(chat_data), 200
|
||||
|
@@ -310,26 +310,31 @@ def to_input_audio(audio: ImageType, filename: str = None) -> str:
|
||||
def use_aspect_ratio(extra_body: dict, aspect_ratio: str) -> Image:
|
||||
extra_body = {key: value for key, value in extra_body.items() if value is not None}
|
||||
if extra_body.get("width") is None or extra_body.get("height") is None:
|
||||
if aspect_ratio == "1:1":
|
||||
width, height = get_width_height(
|
||||
aspect_ratio,
|
||||
extra_body.get("width"),
|
||||
extra_body.get("height")
|
||||
)
|
||||
extra_body = {
|
||||
"width": extra_body.get("width", 1024),
|
||||
"height": extra_body.get("height", 1024),
|
||||
**extra_body
|
||||
}
|
||||
elif aspect_ratio == "16:9":
|
||||
extra_body = {
|
||||
"width": extra_body.get("width", 832),
|
||||
"height": extra_body.get("height", 480),
|
||||
**extra_body
|
||||
}
|
||||
elif aspect_ratio == "9:16":
|
||||
extra_body = {
|
||||
"width": extra_body.get("width", 480),
|
||||
"height": extra_body.get("height", 832),
|
||||
"width": width,
|
||||
"height": height,
|
||||
**extra_body
|
||||
}
|
||||
return extra_body
|
||||
|
||||
def get_width_height(
|
||||
aspect_ratio: str,
|
||||
width: Optional[int] = None,
|
||||
height: Optional[int] = None
|
||||
) -> tuple[int, int]:
|
||||
if aspect_ratio == "1:1":
|
||||
return width or 1024, height or 1024
|
||||
elif aspect_ratio == "16:9":
|
||||
return width or 832, height or 480
|
||||
elif aspect_ratio == "9:16":
|
||||
return width or 480, height or 832,
|
||||
return width, height
|
||||
|
||||
class ImageRequest:
|
||||
def __init__(
|
||||
self,
|
||||
|
@@ -10,7 +10,7 @@ from urllib.parse import quote, unquote
|
||||
from aiohttp import ClientSession, ClientError
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from ..typing import Optional, Cookies
|
||||
from ..typing import Optional, Cookies, Union
|
||||
from ..requests.aiohttp import get_connector
|
||||
from ..image import MEDIA_TYPE_MAP, EXTENSIONS_MAP
|
||||
from ..tools.files import secure_filename
|
||||
@@ -108,7 +108,7 @@ async def copy_media(
|
||||
proxy: Optional[str] = None,
|
||||
alt: str = None,
|
||||
tags: list[str] = None,
|
||||
add_url: bool = True,
|
||||
add_url: Union[bool, str] = True,
|
||||
target: str = None,
|
||||
ssl: bool = None
|
||||
) -> list[str]:
|
||||
@@ -178,7 +178,7 @@ async def copy_media(
|
||||
pass
|
||||
# Build URL with safe encoding
|
||||
url_filename = quote(os.path.basename(target_path))
|
||||
return f"/media/{url_filename}" + (('?url=' + quote(image)) if add_url and not image.startswith('data:') else '')
|
||||
return f"/media/{url_filename}" + (('?' + add_url if isinstance(add_url, str) else '' + 'url=' + quote(image)) if add_url and not image.startswith('data:') else '')
|
||||
|
||||
except (ClientError, IOError, OSError, ValueError) as e:
|
||||
debug.error(f"Image copying failed: {type(e).__name__}: {e}")
|
||||
|
@@ -70,7 +70,15 @@ def merge_media(media: list, messages: list) -> Iterator:
|
||||
yield from media
|
||||
|
||||
def render_messages(messages: Messages, media: list = None) -> Iterator:
|
||||
last_is_assistant = False
|
||||
for idx, message in enumerate(messages):
|
||||
# Remove duplicate assistant messages
|
||||
if message.get("role") == "assistant":
|
||||
if last_is_assistant:
|
||||
continue
|
||||
last_is_assistant = True
|
||||
else:
|
||||
last_is_assistant = False
|
||||
if isinstance(message["content"], list):
|
||||
parts = [render_part(part) for part in message["content"] if part]
|
||||
yield {
|
||||
|
Reference in New Issue
Block a user