assafelovic/gpt-researcher · error · ValueError
Unsupported {provider}.\n\nSupported model providers are: {s
Error message
Unsupported {provider}.\n\nSupported model providers are: {supported} What it means
GenericLLMProvider.from_provider dispatches on the provider name to construct a langchain chat client; unknown provider names fall through to a ValueError listing _SUPPORTED_PROVIDERS.
Source
Thrown at gpt_researcher/llm_provider/generic/base.py:355
**kwargs
)
elif provider == "nebius":
_check_pkg("langchain_openai")
from langchain_openai import ChatOpenAI
# NEBIUS_BASE_URL overrides the default endpoint (self-hosted / regional)
llm = ChatOpenAI(openai_api_base=os.getenv("NEBIUS_BASE_URL", 'https://api.tokenfactory.nebius.com/v1'),
openai_api_key=os.environ["NEBIUS_API_KEY"],
**kwargs
)
elif provider == 'netmind':
_check_pkg("langchain_netmind")
from langchain_netmind import ChatNetmind
llm = ChatNetmind(**kwargs)
else:
supported = ", ".join(_SUPPORTED_PROVIDERS)
raise ValueError(
f"Unsupported {provider}.\n\nSupported model providers are: {supported}"
)
return cls(llm, chat_log, verbose=verbose)
async def get_chat_response(self, messages, stream, websocket=None, **kwargs):
self._reset_last_response_metadata()
if not stream:
# Getting output from the model chain using ainvoke for asynchronous invoking
output = await self.llm.ainvoke(messages, **kwargs)
self._capture_response_metadata(output)
res = output.content
else:
res = await self.stream_response(messages, websocket, **kwargs)
if self.chat_logger:View on GitHub (pinned to 6f998577d5)
Solutions
- Use a provider from the error's supported list, e.g. 'openai:gpt-4o-mini'
- Upgrade gpt-researcher to gain newer providers
- For truly custom needs, construct your own GenericLLMProvider around a langchain chat object
Example fix
# before SMART_LLM=openia:gpt-4o # after SMART_LLM=openai:gpt-4o
Defensive patterns
Strategy: validation
Validate before calling
PROVIDERS = {"openai","anthropic","azure","groq","ollama","bedrock"} # mirror _SUPPORTED_PROVIDERS
prov = os.getenv("FAST_LLM", "openai:gpt-4o-mini").split(":", 1)[0]
assert prov in PROVIDERS, f"unsupported LLM provider {prov}" Try / catch
try:
llm = GenericLLMProvider.from_provider(provider, model)
except ValueError as e:
if "Unsupported" in str(e):
llm = GenericLLMProvider.from_provider("openai", "gpt-4o-mini")
else: raise Prevention
- Spell-check provider prefixes
- Pin a gpt-researcher version and use providers from its supported list
When it happens
Trigger: Setting FAST_LLM/SMART_LLM provider to a typo ('openia'), or a provider this version doesn't support yet, then calling get_llm or conduct_research_with_tools.
Common situations: Version drift (provider added in newer release); custom env like 'together' on an older build; colon-format value where the model part leaked into the provider field.
Related errors
- Set SMART_LLM or FAST_LLM = '<llm_provider>:<llm_model>' Eg
- Invalid reasoning effort: {reasoning_effort_str}. Valid opti
- Embedding provider not found.
- Invalid retriever(s) found: {', '.join(invalid_retrievers)}.
- Set EMBEDDING = '<embedding_provider>:<embedding_model>' Eg
AI-assisted analysis of assafelovic/gpt-researcher@6f998577d5 (2026-08-28).
Data as JSON: /api/errors/dfaabf8936c09bde.
Report an issue: GitHub.