Gertie01 / studio-nw6xjfbq: Report
Simply put, you’re trying to use a feature that doesn’t currently exist and encountering an error.
* * *
Your Space fails because the code calls a method that doesn’t exist on `huggingface_hub.InferenceClient`. The class exposes task-specific helpers like `text_to_image(...)` for generation. There is no `image_generation(...)`. So Python raises `AttributeError`. Replace the call and keep arguments in the supported shape. (Hugging Face)
# What’s happening, in plain terms
* **You’re using the wrong API surface.** `InferenceClient` provides one method per task. For images it’s `text_to_image`. Older tutorials or third-party wrappers sometimes mention `client.post(...)` or custom helpers; those aren’t on today’s client and trigger similar errors. (Hugging Face)
* **Router confusion is common.** The Hugging Face OpenAI-compatible router is for **chat completion** only. It does not expose an OpenAI-style image API. Use `InferenceClient.text_to_image` or a provider SDK for images. (Hugging Face)
* **Model availability varies by provider.** Some providers may not serve `stabilityai/stable-diffusion-xl-base-1.0` directly. The Inference Providers docs show recommended, provider-backed choices like FLUX or SDXL-Lightning. (Hugging Face)
* **If you run SDXL yourself, use Diffusers.** The SDXL model card shows working Diffusers code and prerequisites. (Hugging Face)
# Minimal, beginner-safe fix
Replace the nonexistent `image_generation(...)` with the supported helper. Keep parameters as flat kwargs.
# pip install -U "huggingface_hub>=1.1.2" pillow # docs: https://huggingface.co/docs/inference-providers/en/tasks/text-to-image
import os
from huggingface_hub import InferenceClient
client = InferenceClient(
provider="hf-inference", # or "fal-ai", "replicate", "together"
api_key=os.environ["HF_TOKEN"], # HF token with Inference Providers permission
)
# Returns a PIL.Image
image = client.text_to_image( # ← correct method
"a neon kitsune in a rainy Tokyo alley", # prompt
model="stabilityai/stable-diffusion-xl-base-1.0",
width=1024,
height=1024,
negative_prompt="blurry, low quality",
num_inference_steps=30,
guidance_scale=7.5,
)
image.save("out.png")
# ref and example: https://huggingface.co/docs/inference-providers/en/tasks/text-to-image
Why this works: `text_to_image` is the official image generation entrypoint on `InferenceClient`. The Inference Providers docs show this method and a working Python snippet. (Hugging Face)
# Likely causes in your Space’s code, and exact remedies
1. **Wrong call name**
* **Cause:** `client.image_generation(...)`.
* **Fix:** `client.text_to_image(...)`. Keep generation options as keyword args (e.g., `width=`, `height=`, `num_inference_steps=`). (Hugging Face)
2. **Legacy helper like`client.post(...)`**
* **Cause:** Old blog posts or wrappers still call `.post`.
* **Fix:** Stop using `.post`. Call the task helper (`text_to_image`) or call the HTTP API yourself if you must. The community has multiple “no attribute .post” reports after client updates. (GitHub)
3. **Router misuse**
* **Cause:** Trying to create images through `router.huggingface.co` with an OpenAI-style Images API.
* **Fix:** Use `InferenceClient.text_to_image` or a provider SDK. The OpenAI-compatible router covers **chat completion** only. (Hugging Face)
4. **Provider doesn’t serve your model**
* **Cause:** You pass `stabilityai/stable-diffusion-xl-base-1.0` to a provider that doesn’t host it.
* **Fix:** Either switch provider or pick a provider-backed model from the Text-to-Image page (e.g., FLUX.1, SDXL-Lightning). (Hugging Face)
5. **Running SDXL inside the Space**
* **Cause:** You want to avoid Providers and run the model yourself.
* **Fix:** Use Diffusers as shown on the model card; requires a GPU and the SDXL license terms. (Hugging Face)
# Gradio / Spaces patterns that don’t break
**Provider call inside a Space**
# pip install -U gradio "huggingface_hub>=1.1.2" pillow
import gradio as gr
from huggingface_hub import InferenceClient
import os
client = InferenceClient(provider="hf-inference", api_key=os.environ.get("HF_TOKEN"))
def generate(prompt, w, h, steps, guidance, neg):
return client.text_to_image(
prompt, model="stabilityai/stable-diffusion-xl-base-1.0",
width=w, height=h, num_inference_steps=steps, guidance_scale=guidance,
negative_prompt=neg
)
demo = gr.Interface(
fn=generate,
inputs=[gr.Text(label="Prompt"), gr.Slider(512, 1344, 1024, step=64, label="Width"),
gr.Slider(512, 1344, 1024, step=64, label="Height"),
gr.Slider(5, 50, 30, step=1, label="Steps"),
gr.Slider(1.0, 12.0, 7.5, step=0.5, label="Guidance"),
gr.Text(label="Negative prompt", value="blurry, low quality")],
outputs=gr.Image(type="pil"),
)
demo.launch()
# method shape: https://huggingface.co/docs/inference-providers/en/tasks/text-to-image
**ZeroGPU on Spaces**
If you rely on ZeroGPU, keep generation inside the function that runs under a short GPU slot. Use the decorator and avoid long warmups. (Hugging Face)
# If you prefer to self-host SDXL in the Space
# pip install -U "diffusers>=0.30.0" transformers accelerate torch pillow
# model card diffusers snippet: https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0
import torch
from diffusers import StableDiffusionXLPipeline
pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
torch_dtype=torch.float16,
use_safetensors=True,
).to("cuda")
def generate_local(prompt, w=1024, h=1024, steps=30, guidance=7.5, neg="blurry, low quality"):
out = pipe(prompt=prompt, height=h, width=w,
num_inference_steps=steps, guidance_scale=guidance,
negative_prompt=neg)
return out.images[0]
# full usage and refiner flow shown on the model card
The SDXL card documents base-only and base+refiner pipelines, install hints, and optimization tips. (Hugging Face)
# Diagnostic checklist (run top-to-bottom)
1. **Confirm method availability**
from huggingface_hub import InferenceClient, __version__
print(__version__) # expect ≥ 1.1.x
print(hasattr(InferenceClient(), "text_to_image")) # True means your client exposes the helper
Use the helper if present; don’t invent `image_generation`. Docs show `text_to_image`. (Hugging Face)
2. **Use a provider-backed model first**
Try FLUX or SDXL-Lightning to confirm routing works. Then point back to SDXL base if your provider supports it. (Hugging Face)
3. **Passing options**
With `InferenceClient`, pass generation settings as keyword args, not nested under a `parameters` dict. The HTTP spec uses `parameters`, but the Python helper takes kwargs; the official snippet demonstrates the helper call. (Hugging Face)
4. **Do not send image calls to the OpenAI-compatible router**
The router is chat-only; images won’t work there. (Hugging Face)
5. **If you self-host**
Follow the SDXL model card Diffusers recipe and ensure a GPU. (Hugging Face)
# Common symptoms → concrete fixes
Symptom | Root cause | Fix
---|---|---
`AttributeError: 'InferenceClient' object has no attribute 'image_generation'` | No such method on the client. | Call `text_to_image(...)`. (Hugging Face)
`AttributeError: 'InferenceClient' object has no attribute 'post'` | Legacy wrapper examples. Method removed/never existed. | Use task helpers. Don’t call `.post`. (GitHub)
Calls to `router.huggingface.co` for images fail | Router exposes chat completion only. | Use `InferenceClient.text_to_image` or a provider SDK. (Hugging Face)
Provider returns “model not supported” | Provider doesn’t host that ID. | Choose a recommended model or change provider. (Hugging Face)
Diffusers errors in Space | Missing GPU or packages. | Follow the SDXL card diffusers section and GPU notes. (Hugging Face)
# Short, curated extras
**Official, stable**
* **Text-to-Image with Inference Providers**. Shows `InferenceClient.text_to_image` Python usage and what arguments are supported. Good for verifying method names. (Hugging Face)
* **SDXL model card (Diffusers recipes).** Covers base vs refiner, install, and performance tips. Useful if you self-host. (Hugging Face)
* **ZeroGPU docs.** If your Space uses on-demand GPU allocation. (Hugging Face)
**Community signals on breaking calls**
* **Missing`.post` on `InferenceClient`.** Confirms legacy examples cause `AttributeError`. Useful sanity check if you still see attribute errors after renaming the method. (GitHub)