import random import time from io import BytesIO from urllib.parse import quote import requests from PIL import Image class Inference: def __init__(self): self.session = requests.Session() def _fetch(self, *args, retries=5, **kwargs): for retry in range(retries + 1): try: response = self.session.get(*args, **kwargs) response.raise_for_status() return response.content except requests.RequestException: if response.status_code in {429, 500, 502, 503, 504}: delay = min(2 ** retry, 60) time.sleep(delay) else: return None return None def __call__( self, prompt, seed=42, width=1024, height=1024 ): url = f"https://image.pollinations.ai/prompt/{quote(prompt)}" params = { "prompt": prompt, "seed": seed, "width": width, "height": height, "enhance": "true", "nologo": "true", "private": "true" } image = self._fetch(url, params=params) if image: return Image.open(BytesIO(image)) return None