Engine and model registry for Candil.Llm.
Stores engine and model definitions in ETS so they can be looked up by alias throughout the application. Definitions can be loaded at startup from application configuration or registered programmatically at runtime.
Application config
config :apero, Candil.Config,
engines: [
%{
alias: :llama_server,
use_precompiled: true,
precompiled_version: :latest,
host: "127.0.0.1",
port: 8080,
start_args: ["--n-gpu-layers", "35"]
}
],
models: [
%{
alias: :llama3,
type: :local,
model_dir: "/models",
filename: "llama-3-8b-q4_k_m.gguf",
context_size: 8192,
engine: :llama_server,
usage: [:chat, :completion]
},
%{
alias: :gpt4o,
type: :remote,
name: "gpt-4o",
context_size: 128_000,
provider: :openai,
usage: [:chat, :completion, :embeddings]
}
],
providers: [
%{
alias: :openai,
type: :openai,
base_url: "https://api.openai.com",
api_key: {:system, "OPENAI_API_KEY"}
}
]Programmatic registration
Candil.Config.register_engine(%Candil.Engine{alias: :llama_server, ...})
Candil.Config.register_model(%Candil.Model{alias: :llama3, ...})
Candil.Config.register_provider(%Candil.Provider{alias: :openai, ...})Values for :api_key can be:
- A plain string
"sk-..."— used as-is. {:system, "ENV_VAR"}— resolved from the environment at lookup time.
Summary
Functions
Returns a specification to start this module under a supervisor.
Removes an engine registration.
Removes a model registration.
Removes a provider registration.
Looks up an engine by alias.
Looks up a model by alias.
Looks up a provider by alias, resolving {:system, "ENV_VAR"} api_key
values from the environment at lookup time.
Returns all registered engines.
Returns all registered models.
Returns all registered providers.
Registers an engine definition.
Registers a model definition.
Registers a provider definition.
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec deregister_engine(atom()) :: :ok
Removes an engine registration.
@spec deregister_model(atom()) :: :ok
Removes a model registration.
@spec deregister_provider(atom()) :: :ok
Removes a provider registration.
@spec get_engine(atom()) :: {:ok, Candil.Engine.t()} | {:error, :not_found}
Looks up an engine by alias.
Returns {:ok, engine} or {:error, :not_found}.
@spec get_model(atom()) :: {:ok, Candil.Model.t()} | {:error, :not_found}
Looks up a model by alias.
Returns {:ok, model} or {:error, :not_found}.
@spec get_provider(atom()) :: {:ok, Candil.Provider.t()} | {:error, :not_found}
Looks up a provider by alias, resolving {:system, "ENV_VAR"} api_key
values from the environment at lookup time.
Returns {:ok, provider} or {:error, :not_found}.
@spec list_engines() :: [Candil.Engine.t()]
Returns all registered engines.
@spec list_models() :: [Candil.Model.t()]
Returns all registered models.
@spec list_providers() :: [Candil.Provider.t()]
Returns all registered providers.
@spec register_engine(Candil.Engine.t()) :: :ok
Registers an engine definition.
Overwrites any existing entry with the same alias.
@spec register_model(Candil.Model.t()) :: :ok
Registers a model definition.
Overwrites any existing entry with the same alias.
@spec register_provider(Candil.Provider.t()) :: :ok
Registers a provider definition.
Overwrites any existing entry with the same alias.