assafelovic/gpt-researcher · error · ValueError
Invalid reasoning effort: {reasoning_effort_str}. Valid opti
Error message
Invalid reasoning effort: {reasoning_effort_str}. Valid options are: {', '.join([effort.value for effort in ReasoningEfforts])} What it means
Config.parse_reasoning_effort validates the reasoning effort string against the ReasoningEfforts enum values (low/medium/high, per typical versions). Anything else—including None handled separately—raises a ValueError listing valid options.
Source
Thrown at gpt_researcher/config/config.py:230
llm_provider, llm_model = llm_str.split(":", 1)
assert llm_provider in _SUPPORTED_PROVIDERS, (
f"Unsupported {llm_provider}.\nSupported llm providers are: "
+ ", ".join(_SUPPORTED_PROVIDERS)
)
return llm_provider, llm_model
except ValueError:
raise ValueError(
"Set SMART_LLM or FAST_LLM = '<llm_provider>:<llm_model>' "
"Eg 'openai:gpt-4o-mini'"
)
@staticmethod
def parse_reasoning_effort(reasoning_effort_str: str | None) -> str | None:
"""Parse reasoning effort string into (reasoning_effort)."""
if reasoning_effort_str is None:
return ReasoningEfforts.Medium.value
if reasoning_effort_str not in [effort.value for effort in ReasoningEfforts]:
raise ValueError(f"Invalid reasoning effort: {reasoning_effort_str}. Valid options are: {', '.join([effort.value for effort in ReasoningEfforts])}")
return reasoning_effort_str
@staticmethod
def parse_embedding(embedding_str: str | None) -> tuple[str | None, str | None]:
"""Parse embedding string into (embedding_provider, embedding_model)."""
from gpt_researcher.memory.embeddings import _SUPPORTED_PROVIDERS
if embedding_str is None:
return None, None
try:
embedding_provider, embedding_model = embedding_str.split(":", 1)
assert embedding_provider in _SUPPORTED_PROVIDERS, (
f"Unsupported {embedding_provider}.\nSupported embedding providers are: "
+ ", ".join(_SUPPORTED_PROVIDERS)
)
return embedding_provider, embedding_model
except ValueError:
raise ValueError(View on GitHub (pinned to 6f998577d5)
Solutions
- Use a lowercase valid value: 'low', 'medium', or 'high'
- Omit the setting entirely (defaults to medium)
- Upgrade gpt-researcher if you need newer enum members like 'minimal'
Example fix
# before reasoning_effort="Medium" # after reasoning_effort="medium"
Defensive patterns
Strategy: validation
Validate before calling
VALID = {"low", "medium", "high"}
effort = os.getenv("REASONING_EFFORT")
assert effort is None or effort.lower() in VALID Type guard
def is_reasoning_effort(v) -> bool:
return v is None or v in {"low","medium","high"} Try / catch
try:
cfg = Config()
except ValueError as e:
if "reasoning effort" in str(e):
os.environ["REASONING_EFFORT"] = "medium"
cfg = Config()
else:
raise Prevention
- Lowercase the value before setting
- Omit the setting to use the default
When it happens
Trigger: Setting REASONING_EFFORT or passing reasoning_effort='minimal'/'max'/'' on a version whose enum only has low, medium, high; case-sensitive values like 'Medium' also fail.
Common situations: Using a value valid for OpenAI o-series ('minimal') on an older gpt-researcher; passing capitalized effort from a UI dropdown.
Related errors
- Invalid retriever(s) found: {', '.join(invalid_retrievers)}.
- Set SMART_LLM or FAST_LLM = '<llm_provider>:<llm_model>' Eg
- Unsupported {provider}.\n\nSupported model providers are: {s
- Model cannot be None
- Embedding provider not found.
AI-assisted analysis of assafelovic/gpt-researcher@6f998577d5 (2026-08-28).
Data as JSON: /api/errors/e5cf893f6f01d62e.
Report an issue: GitHub.