LangEx.LLM.Registry (LangEx v0.11.3)

Copy Markdown View Source

Provider registry and model resolver for LLM chat models.

Mirrors LangChain's pattern of separate provider packages with a unified init_chat_model/2 interface. Providers can be registered at compile time (built-in) or at runtime via register_provider/2.

Usage

# Resolve by model string (auto-detects provider):
{LangEx.LLM.OpenAI, opts} = LangEx.LLM.Registry.init_chat_model("gpt-4o")

# Resolve by provider atom:
{LangEx.LLM.Anthropic, opts} = LangEx.LLM.Registry.init_chat_model(:anthropic, model: "claude-sonnet-4-20250514")

# Use in a graph node:
Graph.add_node(:llm, LangEx.LLM.ChatModel.node(model: "gpt-4o"))

Summary

Functions

Resolves a provider module and options from a model string or provider atom.

Lists all registered providers (built-in + runtime).

Registers a model prefix pattern for provider inference.

Registers a custom provider at runtime.

Functions

init_chat_model(model_or_provider, opts \\ [])

@spec init_chat_model(
  atom() | String.t(),
  keyword()
) :: {module(), keyword()}

Resolves a provider module and options from a model string or provider atom.

Returns {module, opts} where module implements LangEx.LLM.

Examples

{LangEx.LLM.OpenAI, [model: "gpt-4o"]} = init_chat_model("gpt-4o")
{LangEx.LLM.Anthropic, []} = init_chat_model(:anthropic)
{LangEx.LLM.OpenAI, [model: "gpt-4o", temperature: 0.5]} = init_chat_model("gpt-4o", temperature: 0.5)

list_providers()

@spec list_providers() :: %{required(atom()) => module()}

Lists all registered providers (built-in + runtime).

register_prefix(prefix, provider)

@spec register_prefix(String.t(), atom()) :: :ok

Registers a model prefix pattern for provider inference.

Example

LangEx.LLM.Registry.register_prefix("llama-", :groq)

register_provider(name, module)

@spec register_provider(atom(), module()) :: :ok

Registers a custom provider at runtime.

Registered providers are stored in :persistent_term and survive across function calls but not across node restarts.

Example

LangEx.LLM.Registry.register_provider(:groq, MyApp.LLM.Groq)