cactus-react-native 1.10.2 → 1.10.3

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.
package/README.md CHANGED
@@ -631,6 +631,24 @@ const App = () => {
631
631
  };
632
632
  ```
633
633
 
634
+ ### Language Detection
635
+
636
+ Detect the spoken language in an audio file. Only available on the class, not the hook.
637
+
638
+ ```typescript
639
+ import { CactusSTT } from 'cactus-react-native';
640
+
641
+ const cactusSTT = new CactusSTT({ model: 'whisper-small' });
642
+
643
+ const result = await cactusSTT.detectLanguage({
644
+ audio: 'path/to/audio.wav',
645
+ options: { useVad: true },
646
+ });
647
+
648
+ console.log('Language:', result.language); // e.g. 'en'
649
+ console.log('Confidence:', result.confidence);
650
+ ```
651
+
634
652
  ## Voice Activity Detection (VAD)
635
653
 
636
654
  The `CactusVAD` class detects speech segments in audio, returning timestamped intervals where speech is present.
@@ -1346,7 +1364,7 @@ import { getRegistry } from 'cactus-react-native';
1346
1364
 
1347
1365
  const registry = await getRegistry();
1348
1366
  const model = registry['qwen3-0.6b'];
1349
- console.log(model.quantization.int4.url);
1367
+ console.log(model);
1350
1368
  ```
1351
1369
 
1352
1370
  ## Type Definitions
@@ -1523,6 +1541,8 @@ interface CactusLMImageEmbedResult {
1523
1541
 
1524
1542
  ```typescript
1525
1543
  interface CactusModel {
1544
+ slug: string;
1545
+ capabilities: string[];
1526
1546
  quantization: {
1527
1547
  int4: {
1528
1548
  sizeMb: number;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- const RUNTIME_VERSION = '1.10.2';
3
+ const RUNTIME_VERSION = '1.10.3';
4
4
  let registryPromise = null;
5
5
  export function getRegistry() {
6
6
  return registryPromise ??= fetchRegistry();
@@ -36,20 +36,21 @@ async function fetchRegistry() {
36
36
  }
37
37
  const models = await response.json();
38
38
  if (!models.length) return {};
39
- const version = await resolveWeightVersion(models[0].id).catch(e => {
40
- registryPromise = null;
41
- throw e;
42
- });
43
39
  const registry = {};
44
- for (const {
40
+ await Promise.all(models.map(async ({
45
41
  id,
46
- siblings = []
47
- } of models) {
42
+ siblings = [],
43
+ tags = []
44
+ }) => {
48
45
  const weights = siblings.map(s => s.rfilename).filter(f => f.startsWith('weights/') && f.endsWith('.zip'));
49
- if (!weights.some(f => f.endsWith('-int4.zip')) || !weights.some(f => f.endsWith('-int8.zip'))) continue;
46
+ if (!weights.some(f => f.endsWith('-int4.zip')) || !weights.some(f => f.endsWith('-int8.zip'))) return;
47
+ const version = await resolveWeightVersion(id).catch(() => null);
48
+ if (!version) return;
50
49
  const key = weights.find(f => f.endsWith('-int4.zip')).replace('weights/', '').replace('-int4.zip', '');
51
50
  const base = `https://huggingface.co/${id}/resolve/${version}/weights/${key}`;
52
51
  registry[key] = {
52
+ slug: key,
53
+ capabilities: tags.filter(t => !t.includes(':')),
53
54
  quantization: {
54
55
  int4: {
55
56
  sizeMb: 0,
@@ -71,7 +72,7 @@ async function fetchRegistry() {
71
72
  }
72
73
  }
73
74
  };
74
- }
75
+ }));
75
76
  return registry;
76
77
  }
77
78
  //# sourceMappingURL=modelRegistry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["RUNTIME_VERSION","registryPromise","getRegistry","fetchRegistry","parseVersionTag","tag","m","match","compareVersions","a","b","resolveWeightVersion","modelId","runtime","Error","res","fetch","ok","status","tags","json","compatible","map","t","name","filter","sort","length","response","catch","e","models","version","id","registry","siblings","weights","s","rfilename","f","startsWith","endsWith","some","key","find","replace","base","quantization","int4","sizeMb","url","pro","apple","int8"],"sourceRoot":"../../src","sources":["modelRegistry.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["RUNTIME_VERSION","registryPromise","getRegistry","fetchRegistry","parseVersionTag","tag","m","match","compareVersions","a","b","resolveWeightVersion","modelId","runtime","Error","res","fetch","ok","status","tags","json","compatible","map","t","name","filter","sort","length","response","catch","e","models","registry","Promise","all","id","siblings","weights","s","rfilename","f","startsWith","endsWith","some","version","key","find","replace","base","slug","capabilities","includes","quantization","int4","sizeMb","url","pro","apple","int8"],"sourceRoot":"../../src","sources":["modelRegistry.ts"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,6 @@
1
1
  export interface CactusModel {
2
+ slug: string;
3
+ capabilities: string[];
2
4
  quantization: {
3
5
  int4: {
4
6
  sizeMb: number;
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/types/common.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE;QACZ,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,CAAC,EAAE;gBACJ,KAAK,EAAE,MAAM,CAAC;aACf,CAAC;SACH,CAAC;QACF,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,CAAC,EAAE;gBACJ,KAAK,EAAE,MAAM,CAAC;aACf,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/types/common.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE;QACZ,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,CAAC,EAAE;gBACJ,KAAK,EAAE,MAAM,CAAC;aACf,CAAC;SACH,CAAC;QACF,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,CAAC,EAAE;gBACJ,KAAK,EAAE,MAAM,CAAC;aACf,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cactus-react-native",
3
- "version": "1.10.2",
3
+ "version": "1.10.3",
4
4
  "description": "Run AI models locally on mobile devices",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,6 +1,6 @@
1
1
  import type { CactusModel } from './types/common';
2
2
 
3
- const RUNTIME_VERSION = '1.10.2';
3
+ const RUNTIME_VERSION = '1.10.3';
4
4
 
5
5
  let registryPromise: Promise<{ [key: string]: CactusModel }> | null = null;
6
6
 
@@ -56,50 +56,52 @@ async function fetchRegistry(): Promise<{ [key: string]: CactusModel }> {
56
56
  const models: any[] = await response.json();
57
57
  if (!models.length) return {};
58
58
 
59
- const version = await resolveWeightVersion(models[0]!.id).catch((e) => {
60
- registryPromise = null;
61
- throw e;
62
- });
63
-
64
59
  const registry: { [key: string]: CactusModel } = {};
65
60
 
66
- for (const { id, siblings = [] } of models) {
67
- const weights: string[] = siblings
68
- .map((s: any) => s.rfilename)
69
- .filter((f: string) => f.startsWith('weights/') && f.endsWith('.zip'));
70
-
71
- if (
72
- !weights.some((f) => f.endsWith('-int4.zip')) ||
73
- !weights.some((f) => f.endsWith('-int8.zip'))
74
- )
75
- continue;
76
-
77
- const key = weights
78
- .find((f) => f.endsWith('-int4.zip'))!
79
- .replace('weights/', '')
80
- .replace('-int4.zip', '');
81
-
82
- const base = `https://huggingface.co/${id}/resolve/${version}/weights/${key}`;
83
-
84
- registry[key] = {
85
- quantization: {
86
- int4: {
87
- sizeMb: 0,
88
- url: `${base}-int4.zip`,
89
- ...(weights.some((f) => f.endsWith('-int4-apple.zip'))
90
- ? { pro: { apple: `${base}-int4-apple.zip` } }
91
- : {}),
92
- },
93
- int8: {
94
- sizeMb: 0,
95
- url: `${base}-int8.zip`,
96
- ...(weights.some((f) => f.endsWith('-int8-apple.zip'))
97
- ? { pro: { apple: `${base}-int8-apple.zip` } }
98
- : {}),
61
+ await Promise.all(
62
+ models.map(async ({ id, siblings = [], tags = [] }) => {
63
+ const weights: string[] = siblings
64
+ .map((s: any) => s.rfilename)
65
+ .filter((f: string) => f.startsWith('weights/') && f.endsWith('.zip'));
66
+
67
+ if (
68
+ !weights.some((f) => f.endsWith('-int4.zip')) ||
69
+ !weights.some((f) => f.endsWith('-int8.zip'))
70
+ )
71
+ return;
72
+
73
+ const version = await resolveWeightVersion(id).catch(() => null);
74
+ if (!version) return;
75
+
76
+ const key = weights
77
+ .find((f) => f.endsWith('-int4.zip'))!
78
+ .replace('weights/', '')
79
+ .replace('-int4.zip', '');
80
+
81
+ const base = `https://huggingface.co/${id}/resolve/${version}/weights/${key}`;
82
+
83
+ registry[key] = {
84
+ slug: key,
85
+ capabilities: (tags as string[]).filter((t) => !t.includes(':')),
86
+ quantization: {
87
+ int4: {
88
+ sizeMb: 0,
89
+ url: `${base}-int4.zip`,
90
+ ...(weights.some((f) => f.endsWith('-int4-apple.zip'))
91
+ ? { pro: { apple: `${base}-int4-apple.zip` } }
92
+ : {}),
93
+ },
94
+ int8: {
95
+ sizeMb: 0,
96
+ url: `${base}-int8.zip`,
97
+ ...(weights.some((f) => f.endsWith('-int8-apple.zip'))
98
+ ? { pro: { apple: `${base}-int8-apple.zip` } }
99
+ : {}),
100
+ },
99
101
  },
100
- },
101
- };
102
- }
102
+ };
103
+ })
104
+ );
103
105
 
104
106
  return registry;
105
107
  }
@@ -1,4 +1,6 @@
1
1
  export interface CactusModel {
2
+ slug: string;
3
+ capabilities: string[];
2
4
  quantization: {
3
5
  int4: {
4
6
  sizeMb: number;