From 5ec0302e19ae9d9a1f94b7b90dec9ba1f44659ed Mon Sep 17 00:00:00 2001 From: manatlan Date: Fri, 15 Nov 2024 10:10:04 +0100 Subject: [PATCH] FIX: fix the url in the markdown output (md compliance), and the chunk/ImageResponse to str ! (#2353) add fix_url ( replace ' ' by '+' (to be markdown compliant)) --- g4f/image.py | 11 ++++++++--- g4f/providers/base_provider.py | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/g4f/image.py b/g4f/image.py index 6561b83a..556ec43d 100644 --- a/g4f/image.py +++ b/g4f/image.py @@ -23,6 +23,11 @@ EXTENSIONS_MAP: dict[str, str] = { "image/webp": "webp", } +def fix_url(url:str) -> str: + """ replace ' ' by '+' (to be markdown compliant)""" + return url.replace(" ","+") + + def to_image(image: ImageType, is_svg: bool = False) -> Image: """ Converts the input image to a PIL Image object. @@ -212,12 +217,12 @@ def format_images_markdown(images: Union[str, list], alt: str, preview: Union[st str: The formatted markdown string. """ if isinstance(images, str): - result = f"[![{alt}]({preview.replace('{image}', images) if preview else images})]({images})" + result = f"[![{alt}]({fix_url(preview.replace('{image}', images) if preview else images)})]({fix_url(images)})" else: if not isinstance(preview, list): preview = [preview.replace('{image}', image) if preview else image for image in images] result = "\n".join( - f"[![#{idx+1} {alt}]({preview[idx]})]({image})" + f"[![#{idx+1} {alt}]({fix_url(preview[idx])})]({fix_url(image)})" #f'[#{idx+1} {alt}]({image})' for idx, image in enumerate(images) ) @@ -302,4 +307,4 @@ class ImageRequest: self.options = options def get(self, key: str): - return self.options.get(key) \ No newline at end of file + return self.options.get(key) diff --git a/g4f/providers/base_provider.py b/g4f/providers/base_provider.py index a03dcbba..5d48f2e0 100644 --- a/g4f/providers/base_provider.py +++ b/g4f/providers/base_provider.py @@ -248,7 +248,7 @@ class AsyncGeneratorProvider(AsyncProvider): str: The created result as a string. """ return "".join([ - chunk async for chunk in cls.create_async_generator(model, messages, stream=False, **kwargs) + str(chunk) async for chunk in cls.create_async_generator(model, messages, stream=False, **kwargs) if not isinstance(chunk, (Exception, FinishReason)) ])