from_provider Factory
Reference for the from_provider string-shorthand factory.
from_provider is the canonical entry point for the provider-string API. It implements native-first resolution: when both a native adapter and the LiteLLM universal adapter are installed, the native adapter is preferred. The factory file imports no SDKs at module load — all adapter imports happen inside the function.
Signature
def from_provider(
model: str,
*,
kind: Literal["llm", "embedding"] = "llm",
prefer_litellm: bool = False,
**kwargs: Any,
) -> LLMProvider | EmbeddingProvider: ...
Parameters
model-
Provider string. Accepted forms:
-
"openai/gpt-4o-mini"— provider-prefixed -
"anthropic/claude-3-5-sonnet-latest" -
"bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0" -
"groq/llama-3.1-8b-instant"(via LiteLLM) -
"ollama/llama3.2"(via LiteLLM; passapi_base=) -
"BAAI/bge-small-en-v1.5"(HuggingFace ID, embedding only) -
"gpt-4o"(bare model name — defaults toopenai/forkind="llm")
-
kind-
"llm"(default) or"embedding". Determines which adapter family is consulted. prefer_litellm-
When
True, route through LiteLLM even if a native adapter is available for the provider. Useful for consistency-across-providers testing or LiteLLM-based observability. **kwargs-
Passed verbatim to the adapter constructor. Common keys:
api_key,api_base,aws_region,aws_profile,timeout,dimensions(embedding only).
Raises
ImportError-
No adapter is available for the requested provider. The error message includes an install hint for both the native extra and the universal
[litellm]fallback. ValueError-
kindis not"llm"or"embedding".
Resolution algorithm
-
Parse the provider prefix:
provider, _, _ = model.partition("/"). -
If the model has no prefix:
-
For
kind="llm": default provider is"openai". -
For
kind="embedding": if the bare name looks like an OpenAI embedding (text-embedding-*), default toopenai/; otherwise treat as a HuggingFace ID and default to sentence-transformers.
-
-
HuggingFace IDs (org/model where
orgis not a known provider prefix) always route to sentence-transformers forkind="embedding". -
Native-first dispatch: if
prefer_litellm=Falseand the prefix is in the native set, and the corresponding extra is installed, return the native adapter.-
LLM native set:
{openai, anthropic, bedrock}. -
Embedding native set:
{openai, sentence-transformers, vertex_ai, bedrock}.
-
-
LiteLLM universal fallback: if
[litellm]is installed, returnLiteLLMProvider/LiteLLMEmbeddingProvider. -
Otherwise, raise
ImportErrorwith an install hint.
Examples
Provider string → native adapter
from neo4j_agent_memory.llm import from_provider
provider = from_provider("openai/gpt-4o-mini")
# Returns OpenAIProvider when [openai] is installed.
Universal fallback for an unsupported provider
provider = from_provider("groq/llama-3.1-70b-versatile")
# Returns LiteLLMProvider (no native Groq adapter).
Force LiteLLM even when native is available
provider = from_provider("openai/gpt-4o", prefer_litellm=True)
# Returns LiteLLMProvider, ignoring the native adapter.
Local Ollama via LiteLLM
provider = from_provider(
"ollama/llama3.2",
api_base="http://localhost:11434",
)
Install hints
When no adapter is available, the ImportError message is provider-specific:
No llm adapter available for provider 'anthropic'.
Install one of the following:
pip install 'neo4j-agent-memory[anthropic]' # native adapter
pip install 'neo4j-agent-memory[litellm]' # universal adapter (recommended)
Debugging which adapter you got
Enable debug logging:
import logging
logging.getLogger("neo4j_agent_memory.llm.factory").setLevel(logging.DEBUG)
from neo4j_agent_memory.llm import from_provider
provider = from_provider("openai/gpt-4o-mini")
# DEBUG: from_provider: routing 'openai/gpt-4o-mini' to native OpenAIProvider
Or just inspect the type:
print(type(provider).__name__)
# OpenAIProvider
Related
-
LLM Provider API — the Protocols.
-
Adapters — constructor signatures.