Installation

{:ollixir, "~> 0.1.1"}

Error Types

{:error, %Ollixir.ConnectionError{}}  # Server unreachable
{:error, %Ollixir.RequestError{}}     # Invalid request
{:error, %Ollixir.ResponseError{}}    # API error (4xx/5xx)

Client

client = Ollixir.init()                              # Default
client = Ollixir.init("http://host:11434")          # Custom host
client = Ollixir.init("host:11434")                 # Host without scheme
client = Ollixir.init(":11434")                     # Port-only host
client = Ollixir.init(host: "host:11434")           # Host option
client = Ollixir.init(receive_timeout: 120_000)     # With options

Environment

export OLLAMA_HOST="http://host:11434"
export OLLAMA_API_KEY="your_api_key_here"

OLLAMA_API_KEY is required for web search/fetch and cloud tests.

Chat

Ollixir.chat(client, model: "llama3.2", messages: [%{role: "user", content: "Hi"}])

Completion

Ollixir.completion(client, model: "llama3.2", prompt: "Once upon a time")
Ollixir.generate(client, model: "llama3.2", prompt: "...")  # Alias
Ollixir.completion(client, ..., suffix: "return result")    # Fill-in-middle
Ollixir.completion(client, ..., logprobs: true, top_logprobs: 3)  # Log probs

Streaming

# Enumerable
{:ok, stream} = Ollixir.chat(client, ..., stream: true)
Enum.each(stream, &IO.inspect/1)

# Process
{:ok, task} = Ollixir.chat(client, ..., stream: self())

Structured Output

Ollixir.chat(client, ..., format: %{type: "object", properties: %{...}})

Tools

Ollixir.chat(client, ..., tools: [%{type: "function", function: %{name: "...", ...}}])
Ollixir.chat(client, ..., tools: [&MyTools.add/2])       # Function → tool
Ollixir.Tool.define(:get_weather, description: "...", parameters: [...])
Ollixir.Web.Tools.all()                                  # Web search/fetch tools

Images (Multimodal)

Ollixir.chat(client, ..., messages: [%{role: "user", content: "Describe", images: ["./photo.jpg"]}])
Ollixir.completion(client, ..., images: ["./photo.jpg"])

Options

opts = Ollixir.Options.Presets.creative() |> Ollixir.Options.temperature(0.9)
Ollixir.chat(client, ..., options: opts)

Typed Responses

Ollixir.chat(client, ..., response_format: :struct)

Web (Cloud API)

Ollixir.web_search(client, query: "elixir language")
Ollixir.web_fetch(client, url: "https://elixir-lang.org")

Thinking

Ollixir.chat(client, ..., think: true)                   # Basic thinking
Ollixir.chat(client, ..., think: "high")                 # Thinking levels (gpt-oss, etc.)

Embeddings

Ollixir.embed(client, model: "nomic-embed-text", input: "text")
Ollixir.embed(client, model: "nomic-embed-text", input: ["text1", "text2"])
Ollixir.embed(client, ..., truncate: true, dimensions: 256)

Model Management

Ollixir.list_models(client)                          # List all
Ollixir.list_running(client)                         # Running models
Ollixir.show_model(client, name: "llama3.2")        # Model info
Ollixir.pull_model(client, name: "llama3.2")        # Download
Ollixir.preload(client, model: "llama3.2")          # Load to memory
Ollixir.unload(client, model: "llama3.2")           # Unload
Ollixir.copy_model(client, source: "a", destination: "b")
Ollixir.delete_model(client, name: "model")

Response Fields

ChatCompletion
response["message"]["content"]response["response"]
response["message"]["thinking"]response["thinking"]
response["message"]["tool_calls"]N/A

Common Options

OptionDescription
:modelModel name
:streamtrue or pid
:format"json" or schema
:response_format:map (default) or :struct

| :think | Enable thinking (true or "low"|"medium"|"high") | | :logprobs | Return token log probabilities | | :top_logprobs | Alternatives per token (0-20) | | :suffix | FIM suffix (completion only) | | :dimensions | Embedding output size (embed only) | | :keep_alive | Memory duration | | :options | Model params |