Packages
llama_cpp_ex
0.8.2
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.28
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.0
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.1
0.6.0
0.5.0
0.4.4
0.4.3
0.4.2
0.4.1
0.3.0
0.2.0
Elixir bindings for llama.cpp — run LLMs locally with Metal, CUDA, Vulkan, or CPU acceleration.
Current section
Files
Jump to
Current section
Files
c_src/llama_cpp_ex/llama_nif.h
#pragma once
#include <fine.hpp>
#include <llama.h>
#include "chat.h"
namespace llama_cpp_ex {
// RAII wrapper for llama_model*
class LlamaModel {
public:
llama_model* model;
common_chat_templates_ptr chat_templates;
explicit LlamaModel(llama_model* m)
: model(m)
, chat_templates(common_chat_templates_init(m, ""))
{}
~LlamaModel() {
// Release chat_templates before freeing the model
chat_templates.reset();
if (model) llama_model_free(model);
}
LlamaModel(const LlamaModel&) = delete;
LlamaModel& operator=(const LlamaModel&) = delete;
const llama_vocab* vocab() const {
return llama_model_get_vocab(model);
}
};
// RAII wrapper for llama_context*
// Holds a ResourcePtr to the model to prevent premature GC.
class LlamaContext {
public:
llama_context* ctx;
fine::ResourcePtr<LlamaModel> model;
LlamaContext(llama_context* c, fine::ResourcePtr<LlamaModel> m)
: ctx(c), model(std::move(m)) {}
~LlamaContext() {
if (ctx) llama_free(ctx);
}
LlamaContext(const LlamaContext&) = delete;
LlamaContext& operator=(const LlamaContext&) = delete;
};
// RAII wrapper for llama_sampler*
class LlamaSampler {
public:
llama_sampler* sampler;
explicit LlamaSampler(llama_sampler* s) : sampler(s) {}
~LlamaSampler() {
if (sampler) llama_sampler_free(sampler);
}
LlamaSampler(const LlamaSampler&) = delete;
LlamaSampler& operator=(const LlamaSampler&) = delete;
};
} // namespace llama_cpp_ex