binary-husky/gpt_academic · error · RuntimeError
Failed to generate image, please try again later: {str(e)}
Error message
Failed to generate image, please try again later: {str(e)} What it means
This is the catch-all wrapper around gen_image_banana(). Every exception in the try block is shown as a generic failure message and re-raised as RuntimeError with only str(e). It hides whether the real failure was error 7, error 8, requests.post, response.json(), base64 decoding, or writing the output file.
Source
Thrown at crazy_functions/Image_Generate.py:279
logger.info(f'Generated image.')
yield from update_ui_latest_msg(lastmsg=f"Downloading image", chatbot=chatbot, history=history, delay=0)
if ';base64,' in image_url:
base64_string = image_url.split('base64,')[-1]
image_data = base64.b64decode(base64_string)
file_path = f'{get_log_folder()}/image_gen/'
os.makedirs(file_path, exist_ok=True)
file_name = 'Image' + time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) + '.png'
fp = file_path+file_name
with open(fp, 'wb+') as f: f.write(image_data)
else:
raise ValueError("Invalid image URL format.")
return image_url, fp
except Exception as e:
yield from update_ui_latest_msg(lastmsg=f"Generate failed, please try again later.", chatbot=chatbot, history=history, delay=0)
raise RuntimeError(f"Failed to generate image, please try again later: {str(e)}")
@CatchException
def 图片生成_NanoBanana(prompt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request):
history = [] # 清空历史,以免输入溢出
if prompt.strip() == "":
chatbot.append((prompt, "[Local Message] 图像生成提示为空白"))
yield from update_ui(chatbot=chatbot, history=history)
return
chatbot.append((View on GitHub (pinned to d6bde0fa54)
Solutions
- Capture the full exception chain and log response details instead of relying on the generic message.
- Verify GEMINI/ONE_API configuration and test the endpoint with the same payload.
- Handle both https and base64 image URLs.
- Retry only transient network/5xx failures with backoff.
- Ensure get_log_folder()/image_gen is writable.
Example fix
# before
except Exception as e:
yield from update_ui_latest_msg(...)
raise RuntimeError(f"Failed to generate image, please try again later: {str(e)}")
# after
except Exception as e:
logger.exception("NanoBanana image generation failed")
yield from update_ui_latest_msg(...)
raise RuntimeError(
f"Failed to generate image: {type(e).__name__}: {e}"
) from e
Defensive patterns
Strategy: try-catch
Validate before calling
api_key = get_conf("GEMINI_API_KEY") if not get_conf("REROUTE_ALL_TO_ONE_API") else get_conf("ONE_API_KEY")
if not api_key:
raise ValueError("Image API key is not configured")
if not get_conf("REROUTE_ALL_TO_ONE_API") and not get_conf("GEMINI_BASE_URL"):
raise ValueError("GEMINI_BASE_URL is not configured")
Try / catch
try:
yield from gen_image_banana(...)
except RuntimeError as e:
logger.exception("Image plugin failed")
chatbot.append(["图像生成失败", str(e)])
yield from update_ui(chatbot=chatbot, history=history)
Prevention
- Treat the generic wrapper as a symptom and inspect the chained exception.
- Smoke-test the image endpoint and key before a long session.
- Make the log folder writable.
- Retry transient network errors separately from schema errors.
When it happens
Trigger: Any network/request exception; missing or malformed JSON; missing choices/message/images/image_url fields; a non-base64 URL; invalid resolution/aspect ratio; quota/authentication failure; inability to create gpt_log/image_gen or write the PNG.
Common situations: Wrong GEMINI_BASE_URL/GEMINI_API_KEY or ONE_API_URL/ONE_API_KEY; model not enabled for images; provider returns https rather than base64; disk permission issues; transient network failure.
Related errors
- response.content.decode()
- No image URL found in the response.
- Invalid image URL format.
- 在线搜索失败!\n{Exceptions}
- 转换PDF失败: {str(e)}
AI-assisted analysis of binary-husky/gpt_academic@d6bde0fa54 (2026-08-14).
Data as JSON: /api/errors/715646770e2bd948.
Report an issue: GitHub.