-
-
Notifications
You must be signed in to change notification settings - Fork 185
Expand file tree
/
Copy pathAddonModelLora.cpp
More file actions
103 lines (86 loc) · 3.08 KB
/
AddonModelLora.cpp
File metadata and controls
103 lines (86 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "addonGlobals.h"
#include "AddonModel.h"
#include "AddonModelData.h"
#include "AddonModelLora.h"
class AddonModelLoraUnloadLoraWorker : public Napi::AsyncWorker {
public:
AddonModelLora* addonLora;
AddonModelLoraUnloadLoraWorker(const Napi::Env& env, AddonModelLora* addonLora)
: Napi::AsyncWorker(env, "AddonModelLoraUnloadLoraWorker"),
addonLora(addonLora),
deferred(Napi::Promise::Deferred::New(env)) {
addonLora->Ref();
}
~AddonModelLoraUnloadLoraWorker() {
addonLora->Unref();
}
Napi::Promise GetPromise() {
return deferred.Promise();
}
protected:
Napi::Promise::Deferred deferred;
void Execute() {
try {
addonLora->dispose();
} catch (const std::exception& e) {
SetError(e.what());
} catch(...) {
SetError("Unknown error when calling \"llama_adapter_lora_free\"");
}
}
void OnOK() {
deferred.Resolve(Env().Undefined());
}
void OnError(const Napi::Error& err) {
deferred.Reject(err.Value());
}
};
AddonModelLora::AddonModelLora(const Napi::CallbackInfo& info) : Napi::ObjectWrap<AddonModelLora>(info) {
model = Napi::ObjectWrap<AddonModel>::Unwrap(info[0].As<Napi::Object>());
loraFilePath = info[1].As<Napi::String>().Utf8Value();
lora_adapter = nullptr;
}
AddonModelLora::~AddonModelLora() {
dispose();
}
void AddonModelLora::dispose(bool skipErase) {
if (lora_adapter != nullptr) {
lora_adapter = nullptr;
if (!skipErase && model->data != nullptr) {
model->data->removeLora(this);
}
model->Unref();
}
}
Napi::Value AddonModelLora::GetFilePath(const Napi::CallbackInfo& info) {
return Napi::String::New(info.Env(), loraFilePath);
}
Napi::Value AddonModelLora::GetUsages(const Napi::CallbackInfo& info) {
return Napi::Number::From(info.Env(), usages);
}
void AddonModelLora::SetUsages(const Napi::CallbackInfo& info, const Napi::Value &value) {
usages = value.As<Napi::Number>().Uint32Value();
}
Napi::Value AddonModelLora::Dispose(const Napi::CallbackInfo& info) {
AddonModelLoraUnloadLoraWorker* worker = new AddonModelLoraUnloadLoraWorker(this->Env(), this);
worker->Queue();
return worker->GetPromise();
}
Napi::Value AddonModelLora::GetDisposed(const Napi::CallbackInfo& info) {
return Napi::Boolean::New(info.Env(), lora_adapter == nullptr);
}
void AddonModelLora::init(Napi::Object exports) {
exports.Set(
"AddonModelLora",
DefineClass(
exports.Env(),
"AddonModelLora",
{
InstanceAccessor("usages", &AddonModelLora::GetUsages, &AddonModelLora::SetUsages),
InstanceAccessor("filePath", &AddonModelLora::GetFilePath, nullptr),
InstanceAccessor("disposed", &AddonModelLora::GetDisposed, nullptr),
InstanceMethod("dispose", &AddonModelLora::Dispose),
}
)
);
}