cactus-react-native 1.10.1 → 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 +21 -1
- package/android/gradle.properties +1 -1
- package/android/src/main/jniLibs/arm64-v8a/libcactus.a +0 -0
- package/lib/module/modelRegistry.js +11 -10
- package/lib/module/modelRegistry.js.map +1 -1
- package/lib/typescript/src/types/common.d.ts +2 -0
- package/lib/typescript/src/types/common.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/modelRegistry.ts +44 -42
- package/src/types/common.ts +2 -0
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
|
|
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;
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
const RUNTIME_VERSION = '1.10.
|
|
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
|
-
|
|
40
|
+
await Promise.all(models.map(async ({
|
|
45
41
|
id,
|
|
46
|
-
siblings = []
|
|
47
|
-
|
|
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')))
|
|
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","
|
|
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 +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
package/src/modelRegistry.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CactusModel } from './types/common';
|
|
2
2
|
|
|
3
|
-
const RUNTIME_VERSION = '1.10.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|