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

  1. Use a provider from the error's supported list, e.g. 'openai:gpt-4o-mini'
  2. Upgrade gpt-researcher to gain newer providers
  3. 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

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


AI-assisted analysis of assafelovic/gpt-researcher@6f998577d5 (2026-08-28). Data as JSON: /api/errors/dfaabf8936c09bde. Report an issue: GitHub.