Current section
Files
Jump to
Current section
Files
lib/candil.ex
defmodule Candil do
@moduledoc """
Candil — LLM inference and model management for Elixir.
Run local models via llama.cpp or remote models via OpenAI-compatible APIs.
## Quick start — local model
engine = %Candil.Engine{alias: :llama_server, use_precompiled: true, host: "127.0.0.1", port: 8080}
model = %Candil.Model{alias: :llama3, type: :local, model_dir: "/models",
filename: "llama-3-8b-q4_k_m.gguf", engine: :llama_server,
context_size: 8192, usage: [:chat]}
:ok = Candil.download_engine(engine)
{:ok, _} = Candil.download_model(model)
{:ok, _pid} = Candil.start_engine(engine, model)
{:ok, response} = Candil.chat(:llama3, [%{role: "user", content: "Hello!"}])
IO.puts(response.content)
:ok = Candil.stop_engine(:llama3)
## Quick start — remote model
provider = %Candil.Provider{alias: :openai, type: :openai,
base_url: "https://api.openai.com",
api_key: System.get_env("OPENAI_API_KEY")}
model = %Candil.Model{alias: :gpt4o, type: :remote, name: "gpt-4o",
provider: :openai, usage: [:chat]}
{:ok, response} = Candil.chat(model, provider, [%{role: "user", content: "Hello!"}])
## Configuration
Candil.Config.register_engine(engine)
Candil.Config.register_model(model)
Candil.Config.register_provider(provider)
"""
alias Candil.Llm
defdelegate download_engine(engine), to: Llm
defdelegate download_model(model), to: Llm
defdelegate start_engine(engine, model), to: Llm
defdelegate stop_engine(model_alias), to: Llm
defdelegate engine_healthy?(model_alias), to: Llm
defdelegate chat(model_alias, messages), to: Llm
defdelegate chat(model_alias, messages, opts), to: Llm
defdelegate chat(model, provider, messages, opts), to: Llm
defdelegate embed(model_alias, texts), to: Llm
defdelegate embed(model_alias, texts, opts), to: Llm
defdelegate embed(model, provider, texts, opts), to: Llm
defdelegate stream(model_alias, messages, callback), to: Llm
defdelegate stream(model_alias, messages, callback, opts), to: Llm
defdelegate stream(model, provider, messages, callback, opts), to: Llm
end