assafelovic/gpt-researcher · error · RuntimeError
ModelsLab API error
Error message
ModelsLab API error
What it means
RuntimeError raised right after the initial ModelsLab text2img POST: the API immediately responded with status "error" instead of "processing" or "success". The message is taken from the API's "messege" field (misspelled by ModelsLab), defaulting to "ModelsLab API error".
Solutions
- Inspect the exception message — it carries the API's stated reason.
- Verify the ModelsLab API key and remaining credits.
- Check that the payload keys/model name match the current ModelsLab text2img API docs.
- If the key was rotated, update the MODELslab credentials in config/env.
Example fix
// before
out = await generator._request_images(payload)
// after
try:
out = await generator._request_images(payload)
except RuntimeError as e:
raise ImageProviderError(f"ModelsLab rejected request: {e}") from e Defensive patterns
Strategy: try-catch
Validate before calling
null
Type guard
null
Try / catch
try:
out = await generator._request_images(payload)
except RuntimeError as e:
raise ImageProviderError(str(e)) from e Prevention
- Verify API key/credits before batch runs.
- Validate payload keys against the current ModelsLab text2img schema.
- Fail fast on the first request so polling never starts for doomed jobs.
When it happens
Trigger: generate_image() → _request_images() posts payload to TEXT2IMG_URL; response JSON has body["status"] == "error" on the first call, before any polling starts.
Common situations: Invalid or exhausted API key, malformed payload (bad model_id, missing prompt), or content-policy rejection at request validation time.
Related errors
- ModelsLab generation error
- ModelsLab image generation timed out after polling.
- fastCRW API search failed.
AI-assisted analysis of assafelovic/gpt-researcher@6f998577d5 (2026-08-28).
Data as JSON: /api/errors/5865244db3e526ee.
Report an issue: GitHub.
Appendix: source
Thrown at gpt_researcher/llm_provider/image/modelslab_image_generator.py:223
try:
import aiohttp
async with aiohttp.ClientSession() as session:
async with session.post(
TEXT2IMG_URL,
json=payload,
timeout=aiohttp.ClientTimeout(total=30),
) as resp:
body = await resp.json()
except ImportError:
import requests
body = await asyncio.to_thread(
lambda: requests.post(TEXT2IMG_URL, json=payload, timeout=30).json()
)
if body.get("status") == "error":
raise RuntimeError(body.get("messege", "ModelsLab API error"))
if body.get("status") == "processing" and body.get("id"):
return await self._poll_for_result(body["id"])
return body.get("output", [])
def is_available(self) -> bool:
"""Return True if the API key is configured."""
return bool(self.api_key)
@classmethod
def from_config(cls, config) -> Optional["ModelsLabImageGeneratorProvider"]:
"""Create a ModelsLabImageGeneratorProvider from a Config object."""
enabled = getattr(config, "IMAGE_GENERATION_ENABLED", False)
provider = getattr(config, "IMAGE_GENERATION_PROVIDER", "google")
if not enabled or provider != "modelslab":
return None
model = getattr(config, "IMAGE_GENERATION_MODEL", None)View on GitHub (pinned to 6f998577d5)