cactus-react-native 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -706,7 +706,7 @@ Java_com_cactus_LlamaContext_doCompletion(
706
706
  UNUSED(thiz);
707
707
  auto llama = context_map[(long) context_ptr];
708
708
 
709
- llama->rewind();
709
+ // llama->rewind();
710
710
 
711
711
  //llama_reset_timings(llama->ctx);
712
712
 
@@ -417,7 +417,7 @@
417
417
  - (NSDictionary *)completion:(NSDictionary *)params
418
418
  onToken:(void (^)(NSMutableDictionary * tokenResult))onToken
419
419
  {
420
- llama->rewind();
420
+ // llama->rewind();
421
421
 
422
422
  //llama_reset_timings(llama->ctx);
423
423
 
@@ -877,7 +877,7 @@
877
877
  @throw [NSException exceptionWithName:@"LlamaException" reason:@"Multimodal is not enabled" userInfo:nil];
878
878
  }
879
879
 
880
- llama->rewind();
880
+ // llama->rewind();
881
881
 
882
882
  llama->params.prompt = [prompt UTF8String];
883
883
  llama->params.sampling.seed = params[@"seed"] ? [params[@"seed"] intValue] : -1;
@@ -65,6 +65,9 @@ class ConversationHistoryManager {
65
65
  reset() {
66
66
  this.history = [];
67
67
  }
68
+ getMessages() {
69
+ return this.history;
70
+ }
68
71
  }
69
72
  exports.ConversationHistoryManager = ConversationHistoryManager;
70
73
  //# sourceMappingURL=chat.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["formatChat","messages","chat","forEach","currMsg","role","content","Array","isArray","part","text","TypeError","Error","push","ConversationHistoryManager","history","processNewMessages","fullMessageHistory","divergent","length","i","JSON","stringify","newMessages","requiresReset","slice","update","assistantResponse","reset","exports"],"sourceRoot":"../../src","sources":["chat.ts"],"mappings":";;;;;;;AAWO,SAASA,UAAUA,CACxBC,QAAsC,EACZ;EAC1B,MAAMC,IAA8B,GAAG,EAAE;EAEzCD,QAAQ,CAACE,OAAO,CAAEC,OAAO,IAAK;IAC5B,MAAMC,IAAY,GAAGD,OAAO,CAACC,IAAI,IAAI,EAAE;IAEvC,IAAIC,OAAe,GAAG,EAAE;IACxB,IAAI,SAAS,IAAIF,OAAO,EAAE;MACxB,IAAI,OAAOA,OAAO,CAACE,OAAO,KAAK,QAAQ,EAAE;QACvC;QAAC,CAAC;UAAEA;QAAQ,CAAC,GAAGF,OAAO;MACzB,CAAC,MAAM,IAAIG,KAAK,CAACC,OAAO,CAACJ,OAAO,CAACE,OAAO,CAAC,EAAE;QACzCF,OAAO,CAACE,OAAO,CAACH,OAAO,CAAEM,IAAI,IAAK;UAChC,IAAI,MAAM,IAAIA,IAAI,EAAE;YAClBH,OAAO,IAAI,GAAGA,OAAO,GAAG,IAAI,GAAG,EAAE,GAAGG,IAAI,CAACC,IAAI,EAAE;UACjD;QACF,CAAC,CAAC;MACJ,CAAC,MAAM;QACL,MAAM,IAAIC,SAAS,CACjB,kFACF,CAAC;MACH;IACF,CAAC,MAAM;MACL,MAAM,IAAIC,KAAK,CACb,6EACF,CAAC;IACH;IAEAV,IAAI,CAACW,IAAI,CAAC;MAAER,IAAI;MAAEC;IAAQ,CAAC,CAAC;EAC9B,CAAC,CAAC;EACF,OAAOJ,IAAI;AACb;AAOO,MAAMY,0BAA0B,CAAC;EAC9BC,OAAO,GAAiC,EAAE;EAE3CC,kBAAkBA,CACvBC,kBAAgD,EAC7B;IACnB,IAAIC,SAAS,GAAGD,kBAAkB,CAACE,MAAM,GAAG,IAAI,CAACJ,OAAO,CAACI,MAAM;IAC/D,IAAI,CAACD,SAAS,EAAE;MACd,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACL,OAAO,CAACI,MAAM,EAAEC,CAAC,EAAE,EAAE;QAC5C,IAAIC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACP,OAAO,CAACK,CAAC,CAAC,CAAC,KAAKC,IAAI,CAACC,SAAS,CAACL,kBAAkB,CAACG,CAAC,CAAC,CAAC,EAAE;UAC7EF,SAAS,GAAG,IAAI;UAChB;QACF;MACF;IACF;IAEA,IAAIA,SAAS,EAAE;MACb,OAAO;QAAEK,WAAW,EAAEN,kBAAkB;QAAEO,aAAa,EAAE;MAAK,CAAC;IACjE;IAEA,MAAMD,WAAW,GAAGN,kBAAkB,CAACQ,KAAK,CAAC,IAAI,CAACV,OAAO,CAACI,MAAM,CAAC;IACjE,OAAO;MAAEI,WAAW;MAAEC,aAAa,EAAE;IAAM,CAAC;EAC9C;EAEOE,MAAMA,CACXH,WAAyC,EACzCI,iBAA6C,EAC7C;IACA,IAAI,CAACZ,OAAO,CAACF,IAAI,CAAC,GAAGU,WAAW,EAAEI,iBAAiB,CAAC;EACtD;EAEOC,KAAKA,CAAA,EAAG;IACb,IAAI,CAACb,OAAO,GAAG,EAAE;EACnB;AACF;AAACc,OAAA,CAAAf,0BAAA,GAAAA,0BAAA","ignoreList":[]}
1
+ {"version":3,"names":["formatChat","messages","chat","forEach","currMsg","role","content","Array","isArray","part","text","TypeError","Error","push","ConversationHistoryManager","history","processNewMessages","fullMessageHistory","divergent","length","i","JSON","stringify","newMessages","requiresReset","slice","update","assistantResponse","reset","getMessages","exports"],"sourceRoot":"../../src","sources":["chat.ts"],"mappings":";;;;;;;AAWO,SAASA,UAAUA,CACxBC,QAAsC,EACZ;EAC1B,MAAMC,IAA8B,GAAG,EAAE;EAEzCD,QAAQ,CAACE,OAAO,CAAEC,OAAO,IAAK;IAC5B,MAAMC,IAAY,GAAGD,OAAO,CAACC,IAAI,IAAI,EAAE;IAEvC,IAAIC,OAAe,GAAG,EAAE;IACxB,IAAI,SAAS,IAAIF,OAAO,EAAE;MACxB,IAAI,OAAOA,OAAO,CAACE,OAAO,KAAK,QAAQ,EAAE;QACvC;QAAC,CAAC;UAAEA;QAAQ,CAAC,GAAGF,OAAO;MACzB,CAAC,MAAM,IAAIG,KAAK,CAACC,OAAO,CAACJ,OAAO,CAACE,OAAO,CAAC,EAAE;QACzCF,OAAO,CAACE,OAAO,CAACH,OAAO,CAAEM,IAAI,IAAK;UAChC,IAAI,MAAM,IAAIA,IAAI,EAAE;YAClBH,OAAO,IAAI,GAAGA,OAAO,GAAG,IAAI,GAAG,EAAE,GAAGG,IAAI,CAACC,IAAI,EAAE;UACjD;QACF,CAAC,CAAC;MACJ,CAAC,MAAM;QACL,MAAM,IAAIC,SAAS,CACjB,kFACF,CAAC;MACH;IACF,CAAC,MAAM;MACL,MAAM,IAAIC,KAAK,CACb,6EACF,CAAC;IACH;IAEAV,IAAI,CAACW,IAAI,CAAC;MAAER,IAAI;MAAEC;IAAQ,CAAC,CAAC;EAC9B,CAAC,CAAC;EACF,OAAOJ,IAAI;AACb;AAOO,MAAMY,0BAA0B,CAAC;EAC9BC,OAAO,GAAiC,EAAE;EAE3CC,kBAAkBA,CACvBC,kBAAgD,EAC7B;IACnB,IAAIC,SAAS,GAAGD,kBAAkB,CAACE,MAAM,GAAG,IAAI,CAACJ,OAAO,CAACI,MAAM;IAC/D,IAAI,CAACD,SAAS,EAAE;MACd,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACL,OAAO,CAACI,MAAM,EAAEC,CAAC,EAAE,EAAE;QAC5C,IAAIC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACP,OAAO,CAACK,CAAC,CAAC,CAAC,KAAKC,IAAI,CAACC,SAAS,CAACL,kBAAkB,CAACG,CAAC,CAAC,CAAC,EAAE;UAC7EF,SAAS,GAAG,IAAI;UAChB;QACF;MACF;IACF;IAEA,IAAIA,SAAS,EAAE;MACb,OAAO;QAAEK,WAAW,EAAEN,kBAAkB;QAAEO,aAAa,EAAE;MAAK,CAAC;IACjE;IAEA,MAAMD,WAAW,GAAGN,kBAAkB,CAACQ,KAAK,CAAC,IAAI,CAACV,OAAO,CAACI,MAAM,CAAC;IACjE,OAAO;MAAEI,WAAW;MAAEC,aAAa,EAAE;IAAM,CAAC;EAC9C;EAEOE,MAAMA,CACXH,WAAyC,EACzCI,iBAA6C,EAC7C;IACA,IAAI,CAACZ,OAAO,CAACF,IAAI,CAAC,GAAGU,WAAW,EAAEI,iBAAiB,CAAC;EACtD;EAEOC,KAAKA,CAAA,EAAG;IACb,IAAI,CAACb,OAAO,GAAG,EAAE;EACnB;EAEOc,WAAWA,CAAA,EAAiC;IACjD,OAAO,IAAI,CAACd,OAAO;EACrB;AACF;AAACe,OAAA,CAAAhB,0BAAA,GAAAA,0BAAA","ignoreList":[]}
@@ -11,6 +11,16 @@ var _chat = require("./chat");
11
11
  // @ts-ignore
12
12
 
13
13
  class CactusLM {
14
+ // the initPromise enables a "async singleton" initialization pattern which
15
+ // protects against a race condition in the event of multiple init attempts
16
+ static _initCache = new Map();
17
+ static getCacheKey(params, cactusToken, retryOptions) {
18
+ return JSON.stringify({
19
+ params,
20
+ cactusToken,
21
+ retryOptions
22
+ });
23
+ }
14
24
  constructor(context) {
15
25
  this.context = context;
16
26
  this.conversationHistoryManager = new _chat.ConversationHistoryManager();
@@ -19,62 +29,75 @@ class CactusLM {
19
29
  if (cactusToken) {
20
30
  (0, _remote.setCactusToken)(cactusToken);
21
31
  }
22
- const maxRetries = retryOptions?.maxRetries ?? 3;
23
- const delayMs = retryOptions?.delayMs ?? 1000;
24
- const configs = [params, {
25
- ...params,
26
- n_gpu_layers: 0
27
- }];
28
- const sleep = ms => {
29
- return new Promise(resolve => {
30
- const start = Date.now();
31
- const wait = () => {
32
- if (Date.now() - start >= ms) {
33
- resolve();
34
- } else {
35
- Promise.resolve().then(wait);
32
+ const key = CactusLM.getCacheKey(params, cactusToken, retryOptions);
33
+ if (CactusLM._initCache.has(key)) {
34
+ // concurrent initialization calls with the same params all get the same cached Promise
35
+ return CactusLM._initCache.get(key);
36
+ }
37
+ const initPromise = (async () => {
38
+ const maxRetries = retryOptions?.maxRetries ?? 3;
39
+ const delayMs = retryOptions?.delayMs ?? 1000;
40
+ const configs = [params, {
41
+ ...params,
42
+ n_gpu_layers: 0
43
+ }];
44
+ const sleep = ms => {
45
+ return new Promise(resolve => {
46
+ const start = Date.now();
47
+ const wait = () => {
48
+ if (Date.now() - start >= ms) {
49
+ resolve();
50
+ } else {
51
+ Promise.resolve().then(wait);
52
+ }
53
+ };
54
+ wait();
55
+ });
56
+ };
57
+ for (const config of configs) {
58
+ let lastError = null;
59
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
60
+ try {
61
+ const context = await (0, _index.initLlama)(config, onProgress);
62
+ return {
63
+ lm: new CactusLM(context),
64
+ error: null
65
+ };
66
+ } catch (e) {
67
+ lastError = e;
68
+ const isLastConfig = configs.indexOf(config) === configs.length - 1;
69
+ const isLastAttempt = attempt === maxRetries;
70
+ _telemetry.Telemetry.error(e, {
71
+ n_gpu_layers: config.n_gpu_layers ?? null,
72
+ n_ctx: config.n_ctx ?? null,
73
+ model: config.model ?? null
74
+ });
75
+ if (!isLastAttempt) {
76
+ const delay = delayMs * Math.pow(2, attempt - 1);
77
+ await sleep(delay);
78
+ } else if (!isLastConfig) {
79
+ break;
80
+ }
36
81
  }
37
- };
38
- wait();
39
- });
40
- };
41
- for (const config of configs) {
42
- let lastError = null;
43
- for (let attempt = 1; attempt <= maxRetries; attempt++) {
44
- try {
45
- const context = await (0, _index.initLlama)(config, onProgress);
82
+ }
83
+ if (configs.indexOf(config) === configs.length - 1 && lastError) {
46
84
  return {
47
- lm: new CactusLM(context),
48
- error: null
85
+ lm: null,
86
+ error: lastError
49
87
  };
50
- } catch (e) {
51
- lastError = e;
52
- const isLastConfig = configs.indexOf(config) === configs.length - 1;
53
- const isLastAttempt = attempt === maxRetries;
54
- _telemetry.Telemetry.error(e, {
55
- n_gpu_layers: config.n_gpu_layers ?? null,
56
- n_ctx: config.n_ctx ?? null,
57
- model: config.model ?? null
58
- });
59
- if (!isLastAttempt) {
60
- const delay = delayMs * Math.pow(2, attempt - 1);
61
- await sleep(delay);
62
- } else if (!isLastConfig) {
63
- break;
64
- }
65
88
  }
66
89
  }
67
- if (configs.indexOf(config) === configs.length - 1 && lastError) {
68
- return {
69
- lm: null,
70
- error: lastError
71
- };
72
- }
90
+ return {
91
+ lm: null,
92
+ error: new Error('Failed to initialize CactusLM after all retries')
93
+ };
94
+ })();
95
+ CactusLM._initCache.set(key, initPromise);
96
+ const result = await initPromise;
97
+ if (result.error) {
98
+ CactusLM._initCache.delete(key); // Reset on failure to allow retries
73
99
  }
74
- return {
75
- lm: null,
76
- error: new Error('Failed to initialize CactusLM after all retries')
77
- };
100
+ return result;
78
101
  }
79
102
  completion = async (messages, params = {}, callback) => {
80
103
  const {
@@ -147,6 +170,9 @@ class CactusLM {
147
170
  async release() {
148
171
  return this.context.release();
149
172
  }
173
+ async stopCompletion() {
174
+ return await this.context.stopCompletion();
175
+ }
150
176
  }
151
177
  exports.CactusLM = CactusLM;
152
178
  //# sourceMappingURL=lm.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_index","require","_telemetry","_remote","_chat","CactusLM","constructor","context","conversationHistoryManager","ConversationHistoryManager","init","params","onProgress","cactusToken","retryOptions","setCactusToken","maxRetries","delayMs","configs","n_gpu_layers","sleep","ms","Promise","resolve","start","Date","now","wait","then","config","lastError","attempt","initLlama","lm","error","e","isLastConfig","indexOf","length","isLastAttempt","Telemetry","n_ctx","model","delay","Math","pow","Error","completion","messages","callback","newMessages","requiresReset","processNewMessages","rewind","reset","console","warn","result","update","role","content","embedding","text","mode","_handleRemoteEmbedding","_handleLocalEmbedding","remoteError","localError","embeddingValues","getVertexAIEmbedding","release","exports"],"sourceRoot":"../../src","sources":["lm.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_index","require","_telemetry","_remote","_chat","CactusLM","_initCache","Map","getCacheKey","params","cactusToken","retryOptions","JSON","stringify","constructor","context","conversationHistoryManager","ConversationHistoryManager","init","onProgress","setCactusToken","key","has","get","initPromise","maxRetries","delayMs","configs","n_gpu_layers","sleep","ms","Promise","resolve","start","Date","now","wait","then","config","lastError","attempt","initLlama","lm","error","e","isLastConfig","indexOf","length","isLastAttempt","Telemetry","n_ctx","model","delay","Math","pow","Error","set","result","delete","completion","messages","callback","newMessages","requiresReset","processNewMessages","rewind","reset","console","warn","update","role","content","embedding","text","mode","_handleRemoteEmbedding","_handleLocalEmbedding","remoteError","localError","embeddingValues","getVertexAIEmbedding","release","stopCompletion","exports"],"sourceRoot":"../../src","sources":["lm.ts"],"mappings":"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","ignoreList":[]}
@@ -9,44 +9,92 @@ var _telemetry = require("./telemetry");
9
9
  var _remote = require("./remote");
10
10
  var _chat = require("./chat");
11
11
  class CactusVLM {
12
+ // see CactusLM for detailed docs
13
+ static _initCache = new Map();
14
+ static getCacheKey(params, cactusToken, retryOptions) {
15
+ return JSON.stringify({
16
+ params,
17
+ cactusToken,
18
+ retryOptions
19
+ });
20
+ }
12
21
  constructor(context) {
13
22
  this.context = context;
14
23
  this.conversationHistoryManager = new _chat.ConversationHistoryManager();
15
24
  }
16
- static async init(params, onProgress, cactusToken) {
25
+ static async init(params, onProgress, cactusToken, retryOptions) {
17
26
  if (cactusToken) {
18
27
  (0, _remote.setCactusToken)(cactusToken);
19
28
  }
20
- const configs = [params, {
21
- ...params,
22
- n_gpu_layers: 0
23
- }];
24
- for (const config of configs) {
25
- try {
26
- const context = await (0, _index.initLlama)(config, onProgress);
27
- await (0, _index.initMultimodal)(context.id, params.mmproj, false);
28
- return {
29
- vlm: new CactusVLM(context),
30
- error: null
31
- };
32
- } catch (e) {
33
- _telemetry.Telemetry.error(e, {
34
- n_gpu_layers: config.n_gpu_layers ?? null,
35
- n_ctx: config.n_ctx ?? null,
36
- model: config.model ?? null
29
+ const key = CactusVLM.getCacheKey(params, cactusToken, retryOptions);
30
+ if (CactusVLM._initCache.has(key)) {
31
+ return CactusVLM._initCache.get(key);
32
+ }
33
+ const initPromise = (async () => {
34
+ const maxRetries = retryOptions?.maxRetries ?? 3;
35
+ const delayMs = retryOptions?.delayMs ?? 1000;
36
+ const configs = [params, {
37
+ ...params,
38
+ n_gpu_layers: 0
39
+ }];
40
+ const sleep = ms => {
41
+ return new Promise(resolve => {
42
+ const start = Date.now();
43
+ const wait = () => {
44
+ if (Date.now() - start >= ms) {
45
+ resolve();
46
+ } else {
47
+ Promise.resolve().then(wait);
48
+ }
49
+ };
50
+ wait();
37
51
  });
38
- if (configs.indexOf(config) === configs.length - 1) {
52
+ };
53
+ for (const config of configs) {
54
+ let lastError = null;
55
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
56
+ try {
57
+ const context = await (0, _index.initLlama)(config, onProgress);
58
+ await (0, _index.initMultimodal)(context.id, params.mmproj, false);
59
+ return {
60
+ vlm: new CactusVLM(context),
61
+ error: null
62
+ };
63
+ } catch (e) {
64
+ lastError = e;
65
+ const isLastConfig = configs.indexOf(config) === configs.length - 1;
66
+ const isLastAttempt = attempt === maxRetries;
67
+ _telemetry.Telemetry.error(e, {
68
+ n_gpu_layers: config.n_gpu_layers ?? null,
69
+ n_ctx: config.n_ctx ?? null,
70
+ model: config.model ?? null
71
+ });
72
+ if (!isLastAttempt) {
73
+ const delay = delayMs * Math.pow(2, attempt - 1);
74
+ await sleep(delay);
75
+ } else if (!isLastConfig) {
76
+ break;
77
+ }
78
+ }
79
+ }
80
+ if (configs.indexOf(config) === configs.length - 1 && lastError) {
39
81
  return {
40
82
  vlm: null,
41
- error: e
83
+ error: lastError
42
84
  };
43
85
  }
44
86
  }
87
+ return {
88
+ vlm: null,
89
+ error: new Error('Failed to initialize CactusVLM')
90
+ };
91
+ })();
92
+ CactusVLM._initCache.set(key, initPromise);
93
+ const result = await initPromise;
94
+ if (result.error) {
95
+ CactusVLM._initCache.delete(key);
45
96
  }
46
- return {
47
- vlm: null,
48
- error: new Error('Failed to initialize CactusVLM')
49
- };
97
+ return result;
50
98
  }
51
99
  async completion(messages, params = {}, callback) {
52
100
  const mode = params.mode || 'local';
@@ -163,6 +211,9 @@ class CactusVLM {
163
211
  async release() {
164
212
  return this.context.release();
165
213
  }
214
+ async stopCompletion() {
215
+ return await this.context.stopCompletion();
216
+ }
166
217
  }
167
218
  exports.CactusVLM = CactusVLM;
168
219
  //# sourceMappingURL=vlm.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_index","require","_telemetry","_remote","_chat","CactusVLM","constructor","context","conversationHistoryManager","ConversationHistoryManager","init","params","onProgress","cactusToken","setCactusToken","configs","n_gpu_layers","config","initLlama","initMultimodal","id","mmproj","vlm","error","e","Telemetry","n_ctx","model","indexOf","length","Error","completion","messages","callback","mode","result","lastError","_handleRemoteCompletion","_handleLocalCompletion","remoteError","localError","newMessages","requiresReset","processNewMessages","rewind","reset","console","warn","images","formattedPrompt","getFormattedChat","prompt","multimodalCompletion","emit_partial_completion","update","role","content","text","map","m","join","imagePath","responseText","getVisionCompletion","getTextCompletion","i","token","reasoning_content","tool_calls","tokens_predicted","split","tokens_evaluated","truncated","stopped_eos","stopped_word","stopped_limit","stopping_word","tokens_cached","timings","prompt_n","prompt_ms","prompt_per_token_ms","prompt_per_second","predicted_n","predicted_ms","predicted_per_token_ms","predicted_per_second","release","exports"],"sourceRoot":"../../src","sources":["vlm.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_index","require","_telemetry","_remote","_chat","CactusVLM","_initCache","Map","getCacheKey","params","cactusToken","retryOptions","JSON","stringify","constructor","context","conversationHistoryManager","ConversationHistoryManager","init","onProgress","setCactusToken","key","has","get","initPromise","maxRetries","delayMs","configs","n_gpu_layers","sleep","ms","Promise","resolve","start","Date","now","wait","then","config","lastError","attempt","initLlama","initMultimodal","id","mmproj","vlm","error","e","isLastConfig","indexOf","length","isLastAttempt","Telemetry","n_ctx","model","delay","Math","pow","Error","set","result","delete","completion","messages","callback","mode","_handleRemoteCompletion","_handleLocalCompletion","remoteError","localError","newMessages","requiresReset","processNewMessages","rewind","reset","console","warn","images","formattedPrompt","getFormattedChat","prompt","multimodalCompletion","emit_partial_completion","update","role","content","text","map","m","join","imagePath","responseText","getVisionCompletion","getTextCompletion","i","token","reasoning_content","tool_calls","tokens_predicted","split","tokens_evaluated","truncated","stopped_eos","stopped_word","stopped_limit","stopping_word","tokens_cached","timings","prompt_n","prompt_ms","prompt_per_token_ms","prompt_per_second","predicted_n","predicted_ms","predicted_per_token_ms","predicted_per_second","release","stopCompletion","exports"],"sourceRoot":"../../src","sources":["vlm.ts"],"mappings":"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","ignoreList":[]}
@@ -60,5 +60,8 @@ export class ConversationHistoryManager {
60
60
  reset() {
61
61
  this.history = [];
62
62
  }
63
+ getMessages() {
64
+ return this.history;
65
+ }
63
66
  }
64
67
  //# sourceMappingURL=chat.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["formatChat","messages","chat","forEach","currMsg","role","content","Array","isArray","part","text","TypeError","Error","push","ConversationHistoryManager","history","processNewMessages","fullMessageHistory","divergent","length","i","JSON","stringify","newMessages","requiresReset","slice","update","assistantResponse","reset"],"sourceRoot":"../../src","sources":["chat.ts"],"mappings":";;AAWA,OAAO,SAASA,UAAUA,CACxBC,QAAsC,EACZ;EAC1B,MAAMC,IAA8B,GAAG,EAAE;EAEzCD,QAAQ,CAACE,OAAO,CAAEC,OAAO,IAAK;IAC5B,MAAMC,IAAY,GAAGD,OAAO,CAACC,IAAI,IAAI,EAAE;IAEvC,IAAIC,OAAe,GAAG,EAAE;IACxB,IAAI,SAAS,IAAIF,OAAO,EAAE;MACxB,IAAI,OAAOA,OAAO,CAACE,OAAO,KAAK,QAAQ,EAAE;QACvC;QAAC,CAAC;UAAEA;QAAQ,CAAC,GAAGF,OAAO;MACzB,CAAC,MAAM,IAAIG,KAAK,CAACC,OAAO,CAACJ,OAAO,CAACE,OAAO,CAAC,EAAE;QACzCF,OAAO,CAACE,OAAO,CAACH,OAAO,CAAEM,IAAI,IAAK;UAChC,IAAI,MAAM,IAAIA,IAAI,EAAE;YAClBH,OAAO,IAAI,GAAGA,OAAO,GAAG,IAAI,GAAG,EAAE,GAAGG,IAAI,CAACC,IAAI,EAAE;UACjD;QACF,CAAC,CAAC;MACJ,CAAC,MAAM;QACL,MAAM,IAAIC,SAAS,CACjB,kFACF,CAAC;MACH;IACF,CAAC,MAAM;MACL,MAAM,IAAIC,KAAK,CACb,6EACF,CAAC;IACH;IAEAV,IAAI,CAACW,IAAI,CAAC;MAAER,IAAI;MAAEC;IAAQ,CAAC,CAAC;EAC9B,CAAC,CAAC;EACF,OAAOJ,IAAI;AACb;AAOA,OAAO,MAAMY,0BAA0B,CAAC;EAC9BC,OAAO,GAAiC,EAAE;EAE3CC,kBAAkBA,CACvBC,kBAAgD,EAC7B;IACnB,IAAIC,SAAS,GAAGD,kBAAkB,CAACE,MAAM,GAAG,IAAI,CAACJ,OAAO,CAACI,MAAM;IAC/D,IAAI,CAACD,SAAS,EAAE;MACd,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACL,OAAO,CAACI,MAAM,EAAEC,CAAC,EAAE,EAAE;QAC5C,IAAIC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACP,OAAO,CAACK,CAAC,CAAC,CAAC,KAAKC,IAAI,CAACC,SAAS,CAACL,kBAAkB,CAACG,CAAC,CAAC,CAAC,EAAE;UAC7EF,SAAS,GAAG,IAAI;UAChB;QACF;MACF;IACF;IAEA,IAAIA,SAAS,EAAE;MACb,OAAO;QAAEK,WAAW,EAAEN,kBAAkB;QAAEO,aAAa,EAAE;MAAK,CAAC;IACjE;IAEA,MAAMD,WAAW,GAAGN,kBAAkB,CAACQ,KAAK,CAAC,IAAI,CAACV,OAAO,CAACI,MAAM,CAAC;IACjE,OAAO;MAAEI,WAAW;MAAEC,aAAa,EAAE;IAAM,CAAC;EAC9C;EAEOE,MAAMA,CACXH,WAAyC,EACzCI,iBAA6C,EAC7C;IACA,IAAI,CAACZ,OAAO,CAACF,IAAI,CAAC,GAAGU,WAAW,EAAEI,iBAAiB,CAAC;EACtD;EAEOC,KAAKA,CAAA,EAAG;IACb,IAAI,CAACb,OAAO,GAAG,EAAE;EACnB;AACF","ignoreList":[]}
1
+ {"version":3,"names":["formatChat","messages","chat","forEach","currMsg","role","content","Array","isArray","part","text","TypeError","Error","push","ConversationHistoryManager","history","processNewMessages","fullMessageHistory","divergent","length","i","JSON","stringify","newMessages","requiresReset","slice","update","assistantResponse","reset","getMessages"],"sourceRoot":"../../src","sources":["chat.ts"],"mappings":";;AAWA,OAAO,SAASA,UAAUA,CACxBC,QAAsC,EACZ;EAC1B,MAAMC,IAA8B,GAAG,EAAE;EAEzCD,QAAQ,CAACE,OAAO,CAAEC,OAAO,IAAK;IAC5B,MAAMC,IAAY,GAAGD,OAAO,CAACC,IAAI,IAAI,EAAE;IAEvC,IAAIC,OAAe,GAAG,EAAE;IACxB,IAAI,SAAS,IAAIF,OAAO,EAAE;MACxB,IAAI,OAAOA,OAAO,CAACE,OAAO,KAAK,QAAQ,EAAE;QACvC;QAAC,CAAC;UAAEA;QAAQ,CAAC,GAAGF,OAAO;MACzB,CAAC,MAAM,IAAIG,KAAK,CAACC,OAAO,CAACJ,OAAO,CAACE,OAAO,CAAC,EAAE;QACzCF,OAAO,CAACE,OAAO,CAACH,OAAO,CAAEM,IAAI,IAAK;UAChC,IAAI,MAAM,IAAIA,IAAI,EAAE;YAClBH,OAAO,IAAI,GAAGA,OAAO,GAAG,IAAI,GAAG,EAAE,GAAGG,IAAI,CAACC,IAAI,EAAE;UACjD;QACF,CAAC,CAAC;MACJ,CAAC,MAAM;QACL,MAAM,IAAIC,SAAS,CACjB,kFACF,CAAC;MACH;IACF,CAAC,MAAM;MACL,MAAM,IAAIC,KAAK,CACb,6EACF,CAAC;IACH;IAEAV,IAAI,CAACW,IAAI,CAAC;MAAER,IAAI;MAAEC;IAAQ,CAAC,CAAC;EAC9B,CAAC,CAAC;EACF,OAAOJ,IAAI;AACb;AAOA,OAAO,MAAMY,0BAA0B,CAAC;EAC9BC,OAAO,GAAiC,EAAE;EAE3CC,kBAAkBA,CACvBC,kBAAgD,EAC7B;IACnB,IAAIC,SAAS,GAAGD,kBAAkB,CAACE,MAAM,GAAG,IAAI,CAACJ,OAAO,CAACI,MAAM;IAC/D,IAAI,CAACD,SAAS,EAAE;MACd,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACL,OAAO,CAACI,MAAM,EAAEC,CAAC,EAAE,EAAE;QAC5C,IAAIC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACP,OAAO,CAACK,CAAC,CAAC,CAAC,KAAKC,IAAI,CAACC,SAAS,CAACL,kBAAkB,CAACG,CAAC,CAAC,CAAC,EAAE;UAC7EF,SAAS,GAAG,IAAI;UAChB;QACF;MACF;IACF;IAEA,IAAIA,SAAS,EAAE;MACb,OAAO;QAAEK,WAAW,EAAEN,kBAAkB;QAAEO,aAAa,EAAE;MAAK,CAAC;IACjE;IAEA,MAAMD,WAAW,GAAGN,kBAAkB,CAACQ,KAAK,CAAC,IAAI,CAACV,OAAO,CAACI,MAAM,CAAC;IACjE,OAAO;MAAEI,WAAW;MAAEC,aAAa,EAAE;IAAM,CAAC;EAC9C;EAEOE,MAAMA,CACXH,WAAyC,EACzCI,iBAA6C,EAC7C;IACA,IAAI,CAACZ,OAAO,CAACF,IAAI,CAAC,GAAGU,WAAW,EAAEI,iBAAiB,CAAC;EACtD;EAEOC,KAAKA,CAAA,EAAG;IACb,IAAI,CAACb,OAAO,GAAG,EAAE;EACnB;EAEOc,WAAWA,CAAA,EAAiC;IACjD,OAAO,IAAI,CAACd,OAAO;EACrB;AACF","ignoreList":[]}
package/lib/module/lm.js CHANGED
@@ -7,6 +7,16 @@ import { Telemetry } from './telemetry';
7
7
  import { setCactusToken, getVertexAIEmbedding } from './remote';
8
8
  import { ConversationHistoryManager } from './chat';
9
9
  export class CactusLM {
10
+ // the initPromise enables a "async singleton" initialization pattern which
11
+ // protects against a race condition in the event of multiple init attempts
12
+ static _initCache = new Map();
13
+ static getCacheKey(params, cactusToken, retryOptions) {
14
+ return JSON.stringify({
15
+ params,
16
+ cactusToken,
17
+ retryOptions
18
+ });
19
+ }
10
20
  constructor(context) {
11
21
  this.context = context;
12
22
  this.conversationHistoryManager = new ConversationHistoryManager();
@@ -15,62 +25,75 @@ export class CactusLM {
15
25
  if (cactusToken) {
16
26
  setCactusToken(cactusToken);
17
27
  }
18
- const maxRetries = retryOptions?.maxRetries ?? 3;
19
- const delayMs = retryOptions?.delayMs ?? 1000;
20
- const configs = [params, {
21
- ...params,
22
- n_gpu_layers: 0
23
- }];
24
- const sleep = ms => {
25
- return new Promise(resolve => {
26
- const start = Date.now();
27
- const wait = () => {
28
- if (Date.now() - start >= ms) {
29
- resolve();
30
- } else {
31
- Promise.resolve().then(wait);
28
+ const key = CactusLM.getCacheKey(params, cactusToken, retryOptions);
29
+ if (CactusLM._initCache.has(key)) {
30
+ // concurrent initialization calls with the same params all get the same cached Promise
31
+ return CactusLM._initCache.get(key);
32
+ }
33
+ const initPromise = (async () => {
34
+ const maxRetries = retryOptions?.maxRetries ?? 3;
35
+ const delayMs = retryOptions?.delayMs ?? 1000;
36
+ const configs = [params, {
37
+ ...params,
38
+ n_gpu_layers: 0
39
+ }];
40
+ const sleep = ms => {
41
+ return new Promise(resolve => {
42
+ const start = Date.now();
43
+ const wait = () => {
44
+ if (Date.now() - start >= ms) {
45
+ resolve();
46
+ } else {
47
+ Promise.resolve().then(wait);
48
+ }
49
+ };
50
+ wait();
51
+ });
52
+ };
53
+ for (const config of configs) {
54
+ let lastError = null;
55
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
56
+ try {
57
+ const context = await initLlama(config, onProgress);
58
+ return {
59
+ lm: new CactusLM(context),
60
+ error: null
61
+ };
62
+ } catch (e) {
63
+ lastError = e;
64
+ const isLastConfig = configs.indexOf(config) === configs.length - 1;
65
+ const isLastAttempt = attempt === maxRetries;
66
+ Telemetry.error(e, {
67
+ n_gpu_layers: config.n_gpu_layers ?? null,
68
+ n_ctx: config.n_ctx ?? null,
69
+ model: config.model ?? null
70
+ });
71
+ if (!isLastAttempt) {
72
+ const delay = delayMs * Math.pow(2, attempt - 1);
73
+ await sleep(delay);
74
+ } else if (!isLastConfig) {
75
+ break;
76
+ }
32
77
  }
33
- };
34
- wait();
35
- });
36
- };
37
- for (const config of configs) {
38
- let lastError = null;
39
- for (let attempt = 1; attempt <= maxRetries; attempt++) {
40
- try {
41
- const context = await initLlama(config, onProgress);
78
+ }
79
+ if (configs.indexOf(config) === configs.length - 1 && lastError) {
42
80
  return {
43
- lm: new CactusLM(context),
44
- error: null
81
+ lm: null,
82
+ error: lastError
45
83
  };
46
- } catch (e) {
47
- lastError = e;
48
- const isLastConfig = configs.indexOf(config) === configs.length - 1;
49
- const isLastAttempt = attempt === maxRetries;
50
- Telemetry.error(e, {
51
- n_gpu_layers: config.n_gpu_layers ?? null,
52
- n_ctx: config.n_ctx ?? null,
53
- model: config.model ?? null
54
- });
55
- if (!isLastAttempt) {
56
- const delay = delayMs * Math.pow(2, attempt - 1);
57
- await sleep(delay);
58
- } else if (!isLastConfig) {
59
- break;
60
- }
61
84
  }
62
85
  }
63
- if (configs.indexOf(config) === configs.length - 1 && lastError) {
64
- return {
65
- lm: null,
66
- error: lastError
67
- };
68
- }
86
+ return {
87
+ lm: null,
88
+ error: new Error('Failed to initialize CactusLM after all retries')
89
+ };
90
+ })();
91
+ CactusLM._initCache.set(key, initPromise);
92
+ const result = await initPromise;
93
+ if (result.error) {
94
+ CactusLM._initCache.delete(key); // Reset on failure to allow retries
69
95
  }
70
- return {
71
- lm: null,
72
- error: new Error('Failed to initialize CactusLM after all retries')
73
- };
96
+ return result;
74
97
  }
75
98
  completion = async (messages, params = {}, callback) => {
76
99
  const {
@@ -143,5 +166,8 @@ export class CactusLM {
143
166
  async release() {
144
167
  return this.context.release();
145
168
  }
169
+ async stopCompletion() {
170
+ return await this.context.stopCompletion();
171
+ }
146
172
  }
147
173
  //# sourceMappingURL=lm.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["initLlama","Telemetry","setCactusToken","getVertexAIEmbedding","ConversationHistoryManager","CactusLM","constructor","context","conversationHistoryManager","init","params","onProgress","cactusToken","retryOptions","maxRetries","delayMs","configs","n_gpu_layers","sleep","ms","Promise","resolve","start","Date","now","wait","then","config","lastError","attempt","lm","error","e","isLastConfig","indexOf","length","isLastAttempt","n_ctx","model","delay","Math","pow","Error","completion","messages","callback","newMessages","requiresReset","processNewMessages","rewind","reset","console","warn","result","update","role","content","embedding","text","mode","_handleRemoteEmbedding","_handleLocalEmbedding","remoteError","localError","embeddingValues","release"],"sourceRoot":"../../src","sources":["lm.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["initLlama","Telemetry","setCactusToken","getVertexAIEmbedding","ConversationHistoryManager","CactusLM","_initCache","Map","getCacheKey","params","cactusToken","retryOptions","JSON","stringify","constructor","context","conversationHistoryManager","init","onProgress","key","has","get","initPromise","maxRetries","delayMs","configs","n_gpu_layers","sleep","ms","Promise","resolve","start","Date","now","wait","then","config","lastError","attempt","lm","error","e","isLastConfig","indexOf","length","isLastAttempt","n_ctx","model","delay","Math","pow","Error","set","result","delete","completion","messages","callback","newMessages","requiresReset","processNewMessages","rewind","reset","console","warn","update","role","content","embedding","text","mode","_handleRemoteEmbedding","_handleLocalEmbedding","remoteError","localError","embeddingValues","release","stopCompletion"],"sourceRoot":"../../src","sources":["lm.ts"],"mappings":"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","ignoreList":[]}
package/lib/module/vlm.js CHANGED
@@ -5,44 +5,92 @@ import { Telemetry } from './telemetry';
5
5
  import { setCactusToken, getTextCompletion, getVisionCompletion } from './remote';
6
6
  import { ConversationHistoryManager } from './chat';
7
7
  export class CactusVLM {
8
+ // see CactusLM for detailed docs
9
+ static _initCache = new Map();
10
+ static getCacheKey(params, cactusToken, retryOptions) {
11
+ return JSON.stringify({
12
+ params,
13
+ cactusToken,
14
+ retryOptions
15
+ });
16
+ }
8
17
  constructor(context) {
9
18
  this.context = context;
10
19
  this.conversationHistoryManager = new ConversationHistoryManager();
11
20
  }
12
- static async init(params, onProgress, cactusToken) {
21
+ static async init(params, onProgress, cactusToken, retryOptions) {
13
22
  if (cactusToken) {
14
23
  setCactusToken(cactusToken);
15
24
  }
16
- const configs = [params, {
17
- ...params,
18
- n_gpu_layers: 0
19
- }];
20
- for (const config of configs) {
21
- try {
22
- const context = await initLlama(config, onProgress);
23
- await initMultimodal(context.id, params.mmproj, false);
24
- return {
25
- vlm: new CactusVLM(context),
26
- error: null
27
- };
28
- } catch (e) {
29
- Telemetry.error(e, {
30
- n_gpu_layers: config.n_gpu_layers ?? null,
31
- n_ctx: config.n_ctx ?? null,
32
- model: config.model ?? null
25
+ const key = CactusVLM.getCacheKey(params, cactusToken, retryOptions);
26
+ if (CactusVLM._initCache.has(key)) {
27
+ return CactusVLM._initCache.get(key);
28
+ }
29
+ const initPromise = (async () => {
30
+ const maxRetries = retryOptions?.maxRetries ?? 3;
31
+ const delayMs = retryOptions?.delayMs ?? 1000;
32
+ const configs = [params, {
33
+ ...params,
34
+ n_gpu_layers: 0
35
+ }];
36
+ const sleep = ms => {
37
+ return new Promise(resolve => {
38
+ const start = Date.now();
39
+ const wait = () => {
40
+ if (Date.now() - start >= ms) {
41
+ resolve();
42
+ } else {
43
+ Promise.resolve().then(wait);
44
+ }
45
+ };
46
+ wait();
33
47
  });
34
- if (configs.indexOf(config) === configs.length - 1) {
48
+ };
49
+ for (const config of configs) {
50
+ let lastError = null;
51
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
52
+ try {
53
+ const context = await initLlama(config, onProgress);
54
+ await initMultimodal(context.id, params.mmproj, false);
55
+ return {
56
+ vlm: new CactusVLM(context),
57
+ error: null
58
+ };
59
+ } catch (e) {
60
+ lastError = e;
61
+ const isLastConfig = configs.indexOf(config) === configs.length - 1;
62
+ const isLastAttempt = attempt === maxRetries;
63
+ Telemetry.error(e, {
64
+ n_gpu_layers: config.n_gpu_layers ?? null,
65
+ n_ctx: config.n_ctx ?? null,
66
+ model: config.model ?? null
67
+ });
68
+ if (!isLastAttempt) {
69
+ const delay = delayMs * Math.pow(2, attempt - 1);
70
+ await sleep(delay);
71
+ } else if (!isLastConfig) {
72
+ break;
73
+ }
74
+ }
75
+ }
76
+ if (configs.indexOf(config) === configs.length - 1 && lastError) {
35
77
  return {
36
78
  vlm: null,
37
- error: e
79
+ error: lastError
38
80
  };
39
81
  }
40
82
  }
83
+ return {
84
+ vlm: null,
85
+ error: new Error('Failed to initialize CactusVLM')
86
+ };
87
+ })();
88
+ CactusVLM._initCache.set(key, initPromise);
89
+ const result = await initPromise;
90
+ if (result.error) {
91
+ CactusVLM._initCache.delete(key);
41
92
  }
42
- return {
43
- vlm: null,
44
- error: new Error('Failed to initialize CactusVLM')
45
- };
93
+ return result;
46
94
  }
47
95
  async completion(messages, params = {}, callback) {
48
96
  const mode = params.mode || 'local';
@@ -159,5 +207,8 @@ export class CactusVLM {
159
207
  async release() {
160
208
  return this.context.release();
161
209
  }
210
+ async stopCompletion() {
211
+ return await this.context.stopCompletion();
212
+ }
162
213
  }
163
214
  //# sourceMappingURL=vlm.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["initLlama","initMultimodal","multimodalCompletion","Telemetry","setCactusToken","getTextCompletion","getVisionCompletion","ConversationHistoryManager","CactusVLM","constructor","context","conversationHistoryManager","init","params","onProgress","cactusToken","configs","n_gpu_layers","config","id","mmproj","vlm","error","e","n_ctx","model","indexOf","length","Error","completion","messages","callback","mode","result","lastError","_handleRemoteCompletion","_handleLocalCompletion","remoteError","localError","newMessages","requiresReset","processNewMessages","rewind","reset","console","warn","images","formattedPrompt","getFormattedChat","prompt","emit_partial_completion","update","role","content","text","map","m","join","imagePath","responseText","i","token","reasoning_content","tool_calls","tokens_predicted","split","tokens_evaluated","truncated","stopped_eos","stopped_word","stopped_limit","stopping_word","tokens_cached","timings","prompt_n","prompt_ms","prompt_per_token_ms","prompt_per_second","predicted_n","predicted_ms","predicted_per_token_ms","predicted_per_second","release"],"sourceRoot":"../../src","sources":["vlm.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["initLlama","initMultimodal","multimodalCompletion","Telemetry","setCactusToken","getTextCompletion","getVisionCompletion","ConversationHistoryManager","CactusVLM","_initCache","Map","getCacheKey","params","cactusToken","retryOptions","JSON","stringify","constructor","context","conversationHistoryManager","init","onProgress","key","has","get","initPromise","maxRetries","delayMs","configs","n_gpu_layers","sleep","ms","Promise","resolve","start","Date","now","wait","then","config","lastError","attempt","id","mmproj","vlm","error","e","isLastConfig","indexOf","length","isLastAttempt","n_ctx","model","delay","Math","pow","Error","set","result","delete","completion","messages","callback","mode","_handleRemoteCompletion","_handleLocalCompletion","remoteError","localError","newMessages","requiresReset","processNewMessages","rewind","reset","console","warn","images","formattedPrompt","getFormattedChat","prompt","emit_partial_completion","update","role","content","text","map","m","join","imagePath","responseText","i","token","reasoning_content","tool_calls","tokens_predicted","split","tokens_evaluated","truncated","stopped_eos","stopped_word","stopped_limit","stopping_word","tokens_cached","timings","prompt_n","prompt_ms","prompt_per_token_ms","prompt_per_second","predicted_n","predicted_ms","predicted_per_token_ms","predicted_per_second","release","stopCompletion"],"sourceRoot":"../../src","sources":["vlm.ts"],"mappings":"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","ignoreList":[]}
@@ -16,5 +16,6 @@ export declare class ConversationHistoryManager {
16
16
  processNewMessages(fullMessageHistory: CactusOAICompatibleMessage[]): ProcessedMessages;
17
17
  update(newMessages: CactusOAICompatibleMessage[], assistantResponse: CactusOAICompatibleMessage): void;
18
18
  reset(): void;
19
+ getMessages(): CactusOAICompatibleMessage[];
19
20
  }
20
21
  //# sourceMappingURL=chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAE5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE,GAAG,GAAG,CAAA;CAC7C,CAAA;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,0BAA0B,EAAE,GACrC,sBAAsB,EAAE,CA8B1B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,0BAA0B,EAAE,CAAC;IAC1C,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,0BAA0B;IACrC,OAAO,CAAC,OAAO,CAAoC;IAE5C,kBAAkB,CACvB,kBAAkB,EAAE,0BAA0B,EAAE,GAC/C,iBAAiB;IAmBb,MAAM,CACX,WAAW,EAAE,0BAA0B,EAAE,EACzC,iBAAiB,EAAE,0BAA0B;IAKxC,KAAK;CAGb"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAE5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE,GAAG,GAAG,CAAA;CAC7C,CAAA;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,0BAA0B,EAAE,GACrC,sBAAsB,EAAE,CA8B1B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,0BAA0B,EAAE,CAAC;IAC1C,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,0BAA0B;IACrC,OAAO,CAAC,OAAO,CAAoC;IAE5C,kBAAkB,CACvB,kBAAkB,EAAE,0BAA0B,EAAE,GAC/C,iBAAiB;IAmBb,MAAM,CACX,WAAW,EAAE,0BAA0B,EAAE,EACzC,iBAAiB,EAAE,0BAA0B;IAKxC,KAAK;IAIL,WAAW,IAAI,0BAA0B,EAAE;CAGnD"}
@@ -8,6 +8,8 @@ interface CactusLMReturn {
8
8
  export declare class CactusLM {
9
9
  protected context: LlamaContext;
10
10
  protected conversationHistoryManager: ConversationHistoryManager;
11
+ private static _initCache;
12
+ private static getCacheKey;
11
13
  protected constructor(context: LlamaContext);
12
14
  static init(params: ContextParams, onProgress?: (progress: number) => void, cactusToken?: string, retryOptions?: {
13
15
  maxRetries?: number;
@@ -19,6 +21,7 @@ export declare class CactusLM {
19
21
  protected _handleRemoteEmbedding(text: string): Promise<NativeEmbeddingResult>;
20
22
  rewind: () => Promise<void>;
21
23
  release(): Promise<void>;
24
+ stopCompletion(): Promise<void>;
22
25
  }
23
26
  export {};
24
27
  //# sourceMappingURL=lm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lm.d.ts","sourceRoot":"","sources":["../../src/lm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,MAAM,SAAS,CAAA;AAGjD,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,0BAA0B,EAC1B,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAIhB,OAAO,EAAE,0BAA0B,EAAE,MAAM,QAAQ,CAAA;AAEnD,UAAU,cAAc;IACtB,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED,qBAAa,QAAQ;IACnB,SAAS,CAAC,OAAO,EAAE,YAAY,CAAA;IAC/B,SAAS,CAAC,0BAA0B,EAAE,0BAA0B,CAAA;IAEhE,SAAS,aAAa,OAAO,EAAE,YAAY;WAK9B,IAAI,CACf,MAAM,EAAE,aAAa,EACrB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACvC,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,cAAc,CAAC;IA6D1B,UAAU,GACR,UAAU,0BAA0B,EAAE,EACtC,SAAQ,gBAAqB,EAC7B,WAAW,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,KAC7B,OAAO,CAAC,sBAAsB,CAAC,CAqBjC;IAEK,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,eAAe,EACxB,IAAI,GAAE,MAAgB,GACrB,OAAO,CAAC,qBAAqB,CAAC;cAoCjB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;cAI7F,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAOpF,MAAM,QAAa,OAAO,CAAC,IAAI,CAAC,CAE/B;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
1
+ {"version":3,"file":"lm.d.ts","sourceRoot":"","sources":["../../src/lm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,MAAM,SAAS,CAAA;AAGjD,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,0BAA0B,EAC1B,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAIhB,OAAO,EAAE,0BAA0B,EAAE,MAAM,QAAQ,CAAA;AAEnD,UAAU,cAAc;IACtB,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED,qBAAa,QAAQ;IACnB,SAAS,CAAC,OAAO,EAAE,YAAY,CAAA;IAC/B,SAAS,CAAC,0BAA0B,EAAE,0BAA0B,CAAA;IAIhE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAmD;IAE5E,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,SAAS,aAAa,OAAO,EAAE,YAAY;WAK9B,IAAI,CACf,MAAM,EAAE,aAAa,EACrB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACvC,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,cAAc,CAAC;IA8E1B,UAAU,GACR,UAAU,0BAA0B,EAAE,EACtC,SAAQ,gBAAqB,EAC7B,WAAW,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,KAC7B,OAAO,CAAC,sBAAsB,CAAC,CAqBjC;IAEK,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,eAAe,EACxB,IAAI,GAAE,MAAgB,GACrB,OAAO,CAAC,qBAAqB,CAAC;cAoCjB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;cAI7F,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAOpF,MAAM,QAAa,OAAO,CAAC,IAAI,CAAC,CAE/B;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAItC"}
@@ -14,13 +14,19 @@ export type VLMCompletionParams = Omit<CompletionParams, 'prompt'> & {
14
14
  export declare class CactusVLM {
15
15
  private context;
16
16
  protected conversationHistoryManager: ConversationHistoryManager;
17
+ private static _initCache;
18
+ private static getCacheKey;
17
19
  private constructor();
18
- static init(params: VLMContextParams, onProgress?: (progress: number) => void, cactusToken?: string): Promise<CactusVLMReturn>;
20
+ static init(params: VLMContextParams, onProgress?: (progress: number) => void, cactusToken?: string, retryOptions?: {
21
+ maxRetries?: number;
22
+ delayMs?: number;
23
+ }): Promise<CactusVLMReturn>;
19
24
  completion(messages: CactusOAICompatibleMessage[], params?: VLMCompletionParams, callback?: (data: any) => void): Promise<NativeCompletionResult>;
20
25
  private _handleLocalCompletion;
21
26
  private _handleRemoteCompletion;
22
27
  rewind(): Promise<void>;
23
28
  release(): Promise<void>;
29
+ stopCompletion(): Promise<void>;
24
30
  }
25
31
  export {};
26
32
  //# sourceMappingURL=vlm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vlm.d.ts","sourceRoot":"","sources":["../../src/vlm.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC5B,MAAM,SAAS,CAAA;AAIhB,OAAO,EAAE,0BAA0B,EAAE,MAAM,QAAQ,CAAA;AAEnD,UAAU,eAAe;IACvB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG;IACnE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAc;IAC7B,SAAS,CAAC,0BAA0B,EAAE,0BAA0B,CAAA;IAEhE,OAAO;WAKM,IAAI,CACf,MAAM,EAAE,gBAAgB,EACxB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACvC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,CAAC;IA8BrB,UAAU,CACd,QAAQ,EAAE,0BAA0B,EAAE,EACtC,MAAM,GAAE,mBAAwB,EAChC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAC7B,OAAO,CAAC,sBAAsB,CAAC;IAuClC,OAAO,CAAC,sBAAsB,CAyC7B;YAEa,uBAAuB;IA+C/B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
1
+ {"version":3,"file":"vlm.d.ts","sourceRoot":"","sources":["../../src/vlm.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC5B,MAAM,SAAS,CAAA;AAIhB,OAAO,EAAE,0BAA0B,EAAE,MAAM,QAAQ,CAAA;AAEnD,UAAU,eAAe;IACvB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG;IACnE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAc;IAC7B,SAAS,CAAC,0BAA0B,EAAE,0BAA0B,CAAA;IAGhE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAoD;IAE7E,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO;WAKM,IAAI,CACf,MAAM,EAAE,gBAAgB,EACxB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACvC,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,eAAe,CAAC;IA8ErB,UAAU,CACd,QAAQ,EAAE,0BAA0B,EAAE,EACtC,MAAM,GAAE,mBAAwB,EAChC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAC7B,OAAO,CAAC,sBAAsB,CAAC;IAuClC,OAAO,CAAC,sBAAsB,CAyC7B;YAEa,uBAAuB;IA+C/B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cactus-react-native",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "Run AI models locally on mobile devices",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/src/chat.ts CHANGED
@@ -82,4 +82,8 @@ export class ConversationHistoryManager {
82
82
  public reset() {
83
83
  this.history = [];
84
84
  }
85
+
86
+ public getMessages(): CactusOAICompatibleMessage[] {
87
+ return this.history;
88
+ }
85
89
  }
package/src/lm.ts CHANGED
@@ -23,6 +23,14 @@ export class CactusLM {
23
23
  protected context: LlamaContext
24
24
  protected conversationHistoryManager: ConversationHistoryManager
25
25
 
26
+ // the initPromise enables a "async singleton" initialization pattern which
27
+ // protects against a race condition in the event of multiple init attempts
28
+ private static _initCache: Map<string, Promise<CactusLMReturn>> = new Map();
29
+
30
+ private static getCacheKey(params: ContextParams, cactusToken?: string, retryOptions?: { maxRetries?: number; delayMs?: number }): string {
31
+ return JSON.stringify({ params, cactusToken, retryOptions });
32
+ }
33
+
26
34
  protected constructor(context: LlamaContext) {
27
35
  this.context = context
28
36
  this.conversationHistoryManager = new ConversationHistoryManager()
@@ -34,64 +42,81 @@ export class CactusLM {
34
42
  cactusToken?: string,
35
43
  retryOptions?: { maxRetries?: number; delayMs?: number },
36
44
  ): Promise<CactusLMReturn> {
45
+
37
46
  if (cactusToken) {
38
47
  setCactusToken(cactusToken);
39
48
  }
40
49
 
41
- const maxRetries = retryOptions?.maxRetries ?? 3;
42
- const delayMs = retryOptions?.delayMs ?? 1000;
43
-
44
- const configs = [
45
- params,
46
- { ...params, n_gpu_layers: 0 }
47
- ];
48
-
49
- const sleep = (ms: number): Promise<void> => {
50
- return new Promise(resolve => {
51
- const start = Date.now();
52
- const wait = () => {
53
- if (Date.now() - start >= ms) {
54
- resolve();
55
- } else {
56
- Promise.resolve().then(wait);
57
- }
58
- };
59
- wait();
60
- });
61
- };
50
+ const key = CactusLM.getCacheKey(params, cactusToken, retryOptions);
51
+ if (CactusLM._initCache.has(key)) {
52
+ // concurrent initialization calls with the same params all get the same cached Promise
53
+ return CactusLM._initCache.get(key)!;
54
+ }
62
55
 
63
- for (const config of configs) {
64
- let lastError: Error | null = null;
65
-
66
- for (let attempt = 1; attempt <= maxRetries; attempt++) {
67
- try {
68
- const context = await initLlama(config, onProgress);
69
- return { lm: new CactusLM(context), error: null };
70
- } catch (e) {
71
- lastError = e as Error;
72
- const isLastConfig = configs.indexOf(config) === configs.length - 1;
73
- const isLastAttempt = attempt === maxRetries;
74
-
75
- Telemetry.error(e as Error, {
76
- n_gpu_layers: config.n_gpu_layers ?? null,
77
- n_ctx: config.n_ctx ?? null,
78
- model: config.model ?? null,
79
- });
80
-
81
- if (!isLastAttempt) {
82
- const delay = delayMs * Math.pow(2, attempt - 1);
83
- await sleep(delay);
84
- } else if (!isLastConfig) {
85
- break;
56
+ const initPromise = (async () => {
57
+ const maxRetries = retryOptions?.maxRetries ?? 3;
58
+ const delayMs = retryOptions?.delayMs ?? 1000;
59
+
60
+ const configs = [
61
+ params,
62
+ { ...params, n_gpu_layers: 0 }
63
+ ];
64
+
65
+ const sleep = (ms: number): Promise<void> => {
66
+ return new Promise(resolve => {
67
+ const start = Date.now();
68
+ const wait = () => {
69
+ if (Date.now() - start >= ms) {
70
+ resolve();
71
+ } else {
72
+ Promise.resolve().then(wait);
73
+ }
74
+ };
75
+ wait();
76
+ });
77
+ };
78
+
79
+ for (const config of configs) {
80
+ let lastError: Error | null = null;
81
+
82
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
83
+ try {
84
+ const context = await initLlama(config, onProgress);
85
+ return { lm: new CactusLM(context), error: null };
86
+ } catch (e) {
87
+ lastError = e as Error;
88
+ const isLastConfig = configs.indexOf(config) === configs.length - 1;
89
+ const isLastAttempt = attempt === maxRetries;
90
+
91
+ Telemetry.error(e as Error, {
92
+ n_gpu_layers: config.n_gpu_layers ?? null,
93
+ n_ctx: config.n_ctx ?? null,
94
+ model: config.model ?? null,
95
+ });
96
+
97
+ if (!isLastAttempt) {
98
+ const delay = delayMs * Math.pow(2, attempt - 1);
99
+ await sleep(delay);
100
+ } else if (!isLastConfig) {
101
+ break;
102
+ }
86
103
  }
87
104
  }
105
+
106
+ if (configs.indexOf(config) === configs.length - 1 && lastError) {
107
+ return { lm: null, error: lastError };
108
+ }
88
109
  }
89
-
90
- if (configs.indexOf(config) === configs.length - 1 && lastError) {
91
- return { lm: null, error: lastError };
92
- }
110
+ return { lm: null, error: new Error('Failed to initialize CactusLM after all retries') };
111
+ })();
112
+
113
+ CactusLM._initCache.set(key, initPromise);
114
+
115
+ const result = await initPromise;
116
+ if (result.error) {
117
+ CactusLM._initCache.delete(key); // Reset on failure to allow retries
93
118
  }
94
- return { lm: null, error: new Error('Failed to initialize CactusLM after all retries') };
119
+ return result;
95
120
  }
96
121
 
97
122
  completion = async (
@@ -179,4 +204,9 @@ export class CactusLM {
179
204
  async release(): Promise<void> {
180
205
  return this.context.release()
181
206
  }
207
+
208
+ async stopCompletion(): Promise<void> {
209
+ return await this.context.stopCompletion()
210
+ }
211
+
182
212
  }
package/src/vlm.ts CHANGED
@@ -31,6 +31,13 @@ export class CactusVLM {
31
31
  private context: LlamaContext
32
32
  protected conversationHistoryManager: ConversationHistoryManager
33
33
 
34
+ // see CactusLM for detailed docs
35
+ private static _initCache: Map<string, Promise<CactusVLMReturn>> = new Map();
36
+
37
+ private static getCacheKey(params: VLMContextParams, cactusToken?: string, retryOptions?: { maxRetries?: number; delayMs?: number }): string {
38
+ return JSON.stringify({ params, cactusToken, retryOptions });
39
+ }
40
+
34
41
  private constructor(context: LlamaContext) {
35
42
  this.context = context
36
43
  this.conversationHistoryManager = new ConversationHistoryManager()
@@ -40,34 +47,83 @@ export class CactusVLM {
40
47
  params: VLMContextParams,
41
48
  onProgress?: (progress: number) => void,
42
49
  cactusToken?: string,
50
+ retryOptions?: { maxRetries?: number; delayMs?: number },
43
51
  ): Promise<CactusVLMReturn> {
44
52
  if (cactusToken) {
45
53
  setCactusToken(cactusToken);
46
54
  }
47
55
 
48
- const configs = [
49
- params,
50
- { ...params, n_gpu_layers: 0 }
51
- ];
56
+ const key = CactusVLM.getCacheKey(params, cactusToken, retryOptions);
57
+ if (CactusVLM._initCache.has(key)) {
58
+ return CactusVLM._initCache.get(key)!;
59
+ }
52
60
 
53
- for (const config of configs) {
54
- try {
55
- const context = await initLlama(config, onProgress)
56
- await initMultimodal(context.id, params.mmproj, false)
57
- return {vlm: new CactusVLM(context), error: null}
58
- } catch (e) {
59
- Telemetry.error(e as Error, {
60
- n_gpu_layers: config.n_gpu_layers ?? null,
61
- n_ctx: config.n_ctx ?? null,
62
- model: config.model ?? null,
61
+ const initPromise = (async () => {
62
+ const maxRetries = retryOptions?.maxRetries ?? 3;
63
+ const delayMs = retryOptions?.delayMs ?? 1000;
64
+
65
+ const configs = [
66
+ params,
67
+ { ...params, n_gpu_layers: 0 }
68
+ ];
69
+
70
+ const sleep = (ms: number): Promise<void> => {
71
+ return new Promise(resolve => {
72
+ const start = Date.now();
73
+ const wait = () => {
74
+ if (Date.now() - start >= ms) {
75
+ resolve();
76
+ } else {
77
+ Promise.resolve().then(wait);
78
+ }
79
+ };
80
+ wait();
63
81
  });
64
- if (configs.indexOf(config) === configs.length - 1) {
65
- return {vlm: null, error: e as Error}
82
+ };
83
+
84
+ for (const config of configs) {
85
+ let lastError: Error | null = null;
86
+
87
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
88
+ try {
89
+ const context = await initLlama(config, onProgress)
90
+ await initMultimodal(context.id, params.mmproj, false)
91
+ return {vlm: new CactusVLM(context), error: null}
92
+ } catch (e) {
93
+ lastError = e as Error;
94
+ const isLastConfig = configs.indexOf(config) === configs.length - 1;
95
+ const isLastAttempt = attempt === maxRetries;
96
+
97
+ Telemetry.error(e as Error, {
98
+ n_gpu_layers: config.n_gpu_layers ?? null,
99
+ n_ctx: config.n_ctx ?? null,
100
+ model: config.model ?? null,
101
+ });
102
+
103
+ if (!isLastAttempt) {
104
+ const delay = delayMs * Math.pow(2, attempt - 1);
105
+ await sleep(delay);
106
+ } else if (!isLastConfig) {
107
+ break;
108
+ }
109
+ }
110
+ }
111
+
112
+ if (configs.indexOf(config) === configs.length - 1 && lastError) {
113
+ return {vlm: null, error: lastError}
66
114
  }
67
115
  }
68
- }
69
116
 
70
- return {vlm: null, error: new Error('Failed to initialize CactusVLM')}
117
+ return {vlm: null, error: new Error('Failed to initialize CactusVLM')}
118
+ })();
119
+
120
+ CactusVLM._initCache.set(key, initPromise);
121
+
122
+ const result = await initPromise;
123
+ if (result.error) {
124
+ CactusVLM._initCache.delete(key);
125
+ }
126
+ return result;
71
127
  }
72
128
 
73
129
  async completion(
@@ -210,4 +266,8 @@ export class CactusVLM {
210
266
  async release(): Promise<void> {
211
267
  return this.context.release()
212
268
  }
269
+
270
+ async stopCompletion(): Promise<void> {
271
+ return await this.context.stopCompletion()
272
+ }
213
273
  }