Skip to content

Commit aeae645

Browse files
author
kqlio67
committed
Refactor image response usage and improve caching logic.
- Switch "images" to "urls" - Enhance error handling - Adjust random seed usage - Tweak conversation logic - Minor UI functional changes
2 parents a6b2cb9 + b220056 commit aeae645

File tree

14 files changed

+39
-41
lines changed

14 files changed

+39
-41
lines changed

g4f/Provider/ARTA.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ async def create_async_generator(
187187
image_urls = [image["url"] for image in status_data.get("response", [])]
188188
duration = time.time() - start_time
189189
yield Reasoning(label="Generated", status=f"{n} image(s) in {duration:.2f}s")
190-
yield ImageResponse(images=image_urls, alt=prompt)
190+
yield ImageResponse(urls=image_urls, alt=prompt)
191191
return
192192
elif status in ("IN_QUEUE", "IN_PROGRESS"):
193193
if last_status != status:

g4f/Provider/Blackbox.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ async def create_async_generator(
639639
image_url_match = re.search(r'!\[.*?\]\((.*?)\)', full_response_text)
640640
if image_url_match:
641641
image_url = image_url_match.group(1)
642-
yield ImageResponse(images=[image_url], alt=format_image_prompt(messages, prompt))
642+
yield ImageResponse(urls=[image_url], alt=format_image_prompt(messages, prompt))
643643
return
644644

645645
# Handle conversation history once, in one place

g4f/Provider/ImageLabs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ async def create_async_generator(
7878
if progress_data.get('status') == 'Done' or progress_data.get('final_image_url'):
7979
# Yield ImageResponse with the final image URL
8080
yield ImageResponse(
81-
images=[progress_data.get('final_image_url')],
81+
urls=[progress_data.get('final_image_url')],
8282
alt=prompt
8383
)
8484
break

g4f/Provider/PollinationsAI.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
1313
from ..typing import AsyncResult, Messages, MediaListType
1414
from ..image import is_data_an_audio
15-
from ..errors import ModelNotFoundError
15+
from ..errors import ModelNotFoundError, ResponseError
1616
from ..requests.raise_for_status import raise_for_status
1717
from ..requests.aiohttp import get_connector
1818
from ..image.copy_images import save_response_media
@@ -279,7 +279,7 @@ async def _generate_text(
279279
**kwargs
280280
) -> AsyncResult:
281281
if not cache and seed is None:
282-
seed = random.randint(9999, 99999999)
282+
seed = random.randint(0, 2**32)
283283
json_mode = False
284284
if response_format and response_format.get("type") == "json_object":
285285
json_mode = True
@@ -318,31 +318,30 @@ async def _generate_text(
318318
if line[6:].startswith(b"[DONE]"):
319319
break
320320
result = json.loads(line[6:])
321+
if "usage" in result:
322+
yield Usage(**result["usage"])
321323
choices = result.get("choices", [{}])
322324
choice = choices.pop() if choices else {}
323325
content = choice.get("delta", {}).get("content")
324326
if content:
325327
yield content
326-
if "usage" in result:
327-
yield Usage(**result["usage"])
328328
finish_reason = choice.get("finish_reason")
329329
if finish_reason:
330330
yield FinishReason(finish_reason)
331331
return
332332
result = await response.json()
333-
choice = result["choices"][0]
334-
message = choice.get("message", {})
335-
content = message.get("content", "")
336-
337-
if "tool_calls" in message:
338-
yield ToolCalls(message["tool_calls"])
339-
340-
if content:
341-
yield content
342-
333+
if "choices" in result:
334+
choice = result["choices"][0]
335+
message = choice.get("message", {})
336+
content = message.get("content", "")
337+
if content:
338+
yield content
339+
if "tool_calls" in message:
340+
yield ToolCalls(message["tool_calls"])
341+
else:
342+
raise ResponseError(result)
343343
if "usage" in result:
344344
yield Usage(**result["usage"])
345-
346345
finish_reason = choice.get("finish_reason")
347346
if finish_reason:
348347
yield FinishReason(finish_reason)

g4f/Provider/Websim.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ async def _handle_image_request(
124124
response_json = json.loads(response_text)
125125
image_url = response_json.get("url")
126126
if image_url:
127-
yield ImageResponse(images=[image_url], alt=used_prompt)
127+
yield ImageResponse(urls=[image_url], alt=used_prompt)
128128

129129
@classmethod
130130
async def _handle_chat_request(

g4f/Provider/hf_space/Voodoohop_Flux1Schnell.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,5 @@ async def create_async_generator(
7171
elif event_type == b'complete':
7272
json_data = json.loads(data)
7373
image_url = json_data[0]['url']
74-
yield ImageResponse(images=[image_url], alt=prompt)
74+
yield ImageResponse(urls=[image_url], alt=prompt)
7575
return

g4f/Provider/needs_auth/Grok.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ async def create_authed(
8383
model: str,
8484
messages: Messages,
8585
auth_result: AuthResult,
86-
cookies: Cookies = None,
8786
return_conversation: bool = False,
8887
conversation: Conversation = None,
8988
**kwargs
@@ -130,7 +129,7 @@ async def create_authed(
130129
yield token
131130
generated_images = response_data.get("modelResponse", {}).get("generatedImageUrls", None)
132131
if generated_images:
133-
yield ImageResponse([f'{cls.assets_url}/{image}' for image in generated_images], "", {"cookies": cookies, "headers": headers})
132+
yield ImageResponse([f'{cls.assets_url}/{image}' for image in generated_images], "", {"cookies": auth_result.cookies, "headers": auth_result.headers})
134133
title = result.get("title", {}).get("newTitle", "")
135134
if title:
136135
yield TitleGeneration(title)

g4f/Provider/not_working/AiChats.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ async def create_async_generator(
7474

7575
base64_image = base64.b64encode(image_data).decode('utf-8')
7676
base64_url = f"data:image/png;base64,{base64_image}"
77-
yield ImageResponse(base64_url, prompt)
77+
yield ImageResponse(image_url, prompt)
7878
else:
7979
yield f"Error: No image URL found in the response. Full response: {response_json}"
8080
else:

g4f/Provider/not_working/Airforce.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ async def generate_image(
170170
async with session.get(cls.api_endpoint_imagine2, params=params, proxy=proxy) as response:
171171
if response.status == 200:
172172
image_url = str(response.url)
173-
yield ImageResponse(images=image_url, alt=prompt)
173+
yield ImageResponse(urls=image_url, alt=prompt)
174174
else:
175175
error_text = await response.text()
176176
raise RuntimeError(f"Image generation failed: {response.status} - {error_text}")

g4f/cookies.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def get_cookies(domain_name: str, raise_requirements_error: bool = True, single_
7777
Returns:
7878
Dict[str, str]: A dictionary of cookie names and values.
7979
"""
80-
if cache_result and domain_name in CookiesConfig.cookies:
80+
if domain_name in CookiesConfig.cookies:
8181
return CookiesConfig.cookies[domain_name]
8282

8383
cookies = load_cookies_from_browsers(domain_name, raise_requirements_error, single_browser)

0 commit comments

Comments
 (0)