Skip to content

Commit d01f0df

Browse files
committed
implementing LlamaModel
1 parent 78364fc commit d01f0df

4 files changed

+35
-4
lines changed

src/llama_model.cpp

+14-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,19 @@
55
using namespace godot;
66

77
void LlamaModel::load_model(const String &path) {
8-
// TODO: load model logic
8+
if (model) {
9+
llama_free_model(model);
10+
}
11+
llama_model_params model_params = llama_model_default_params();
12+
model = llama_load_model_from_file(path.utf8().get_data(), model_params);
913
}
1014

11-
void LlamaModel::_bind_methods() {}
15+
void LlamaModel::_bind_methods() {
16+
ClassDB::bind_method(D_METHOD("load_model", "path"), &LlamaModel::load_model);
17+
}
18+
19+
LlamaModel::~LlamaModel() {
20+
if (model) {
21+
llama_free_model(model);
22+
}
23+
}

src/llama_model.h

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ namespace godot {
88
class LlamaModel : public Resource {
99
GDCLASS(LlamaModel, Resource)
1010

11+
private:
12+
llama_model *model = nullptr;
13+
1114
protected:
1215
static void _bind_methods();
1316

src/llama_model_loader.cpp

+16-2
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ using namespace godot;
88

99
PackedStringArray LlamaModelLoader::_get_recognized_extensions() const {
1010
PackedStringArray arr;
11-
arr.append("gguf");
11+
arr.push_back("gguf");
1212
return arr;
1313
}
1414

1515
Variant godot::LlamaModelLoader::_load(const String &path, const String &original_path, bool use_sub_threads, int32_t cache_mode) const {
16-
LlamaModel *model = memnew(LlamaModel);
16+
Ref<LlamaModel> model = memnew(LlamaModel);
1717

1818
if (!FileAccess::file_exists(path)) {
1919
return ERR_FILE_NOT_FOUND;
@@ -24,4 +24,18 @@ Variant godot::LlamaModelLoader::_load(const String &path, const String &origina
2424
model->load_model(absPath);
2525

2626
return { model };
27+
}
28+
29+
bool LlamaModelLoader::_handles_type(const StringName &type) const {
30+
return ClassDB::is_parent_class(type, "LlamaModel");
31+
}
32+
33+
String LlamaModelLoader::_get_resource_type(const String &p_path) const {
34+
String el = p_path.get_extension().to_lower();
35+
36+
if (el == "gguf") {
37+
return "LlamaModel";
38+
}
39+
40+
return "";
2741
}

src/llama_model_loader.h

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class LlamaModelLoader : public ResourceFormatLoader {
1414
public:
1515
PackedStringArray _get_recognized_extensions() const override;
1616
Variant _load(const String &path, const String &original_path, bool use_sub_threads, int32_t cache_mode) const override;
17+
virtual bool _handles_type(const StringName &type) const override;
18+
virtual String _get_resource_type(const String &p_path) const override;
1719
};
1820

1921
} //namespace godot

0 commit comments

Comments
 (0)