@dinilmusick/gutts 0.1.2 → 1.0.0
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/.krusbl-release-attestation.json +8 -0
- package/README.md +15 -6
- package/dist/api/api-registry.d.ts +4 -0
- package/dist/api/api-registry.d.ts.map +1 -0
- package/dist/api/api-registry.js +26 -0
- package/dist/api/api-registry.js.map +1 -0
- package/dist/api/api-types.d.ts +37 -0
- package/dist/api/api-types.d.ts.map +1 -0
- package/dist/api/api-types.js +2 -0
- package/dist/api/api-types.js.map +1 -0
- package/dist/api/array-apis.d.ts +3 -0
- package/dist/api/array-apis.d.ts.map +1 -0
- package/dist/api/array-apis.js +11 -0
- package/dist/api/array-apis.js.map +1 -0
- package/dist/api/define-api.d.ts +3 -0
- package/dist/api/define-api.d.ts.map +1 -0
- package/dist/api/define-api.js +22 -0
- package/dist/api/define-api.js.map +1 -0
- package/dist/api/index.d.ts +4 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +3 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/json-apis.d.ts +3 -0
- package/dist/api/json-apis.d.ts.map +1 -0
- package/dist/api/json-apis.js +9 -0
- package/dist/api/json-apis.js.map +1 -0
- package/dist/api/number-apis.d.ts +3 -0
- package/dist/api/number-apis.d.ts.map +1 -0
- package/dist/api/number-apis.js +9 -0
- package/dist/api/number-apis.js.map +1 -0
- package/dist/api/object-apis.d.ts +3 -0
- package/dist/api/object-apis.d.ts.map +1 -0
- package/dist/api/object-apis.js +8 -0
- package/dist/api/object-apis.js.map +1 -0
- package/dist/api/string-apis.d.ts +3 -0
- package/dist/api/string-apis.d.ts.map +1 -0
- package/dist/api/string-apis.js +16 -0
- package/dist/api/string-apis.js.map +1 -0
- package/dist/api/url-apis.d.ts +3 -0
- package/dist/api/url-apis.d.ts.map +1 -0
- package/dist/api/url-apis.js +9 -0
- package/dist/api/url-apis.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/models/ettin/index.d.ts +115 -0
- package/dist/models/ettin/index.d.ts.map +1 -0
- package/dist/models/ettin/index.js +62 -0
- package/dist/models/ettin/index.js.map +1 -0
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +9 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/minilm/index.d.ts +39 -0
- package/dist/models/minilm/index.d.ts.map +1 -0
- package/dist/models/minilm/index.js +41 -0
- package/dist/models/minilm/index.js.map +1 -0
- package/dist/models/model-library.d.ts +10 -0
- package/dist/models/model-library.d.ts.map +1 -0
- package/dist/models/model-library.js +14 -0
- package/dist/models/model-library.js.map +1 -0
- package/dist/models/model-registry.d.ts +4 -0
- package/dist/models/model-registry.d.ts.map +1 -0
- package/dist/models/model-registry.js +17 -0
- package/dist/models/model-registry.js.map +1 -0
- package/dist/models/model-residency.d.ts +11 -0
- package/dist/models/model-residency.d.ts.map +1 -0
- package/dist/models/model-residency.js +49 -0
- package/dist/models/model-residency.js.map +1 -0
- package/dist/models/model-types.d.ts +45 -0
- package/dist/models/model-types.d.ts.map +1 -0
- package/dist/models/model-types.js +2 -0
- package/dist/models/model-types.js.map +1 -0
- package/dist/models/needle3/index.d.ts +43 -0
- package/dist/models/needle3/index.d.ts.map +1 -0
- package/dist/models/needle3/index.js +44 -0
- package/dist/models/needle3/index.js.map +1 -0
- package/dist/models/runtimes/cactus.d.ts +6 -0
- package/dist/models/runtimes/cactus.d.ts.map +1 -0
- package/dist/models/runtimes/cactus.js +41 -0
- package/dist/models/runtimes/cactus.js.map +1 -0
- package/dist/models/runtimes/ettin-head.d.ts +13 -0
- package/dist/models/runtimes/ettin-head.d.ts.map +1 -0
- package/dist/models/runtimes/ettin-head.js +88 -0
- package/dist/models/runtimes/ettin-head.js.map +1 -0
- package/dist/models/runtimes/transformers.d.ts +8 -0
- package/dist/models/runtimes/transformers.d.ts.map +1 -0
- package/dist/models/runtimes/transformers.js +141 -0
- package/dist/models/runtimes/transformers.js.map +1 -0
- package/dist/models/smollm2/index.d.ts +39 -0
- package/dist/models/smollm2/index.d.ts.map +1 -0
- package/dist/models/smollm2/index.js +42 -0
- package/dist/models/smollm2/index.js.map +1 -0
- package/dist/models/whistle/index.d.ts +38 -0
- package/dist/models/whistle/index.d.ts.map +1 -0
- package/dist/models/whistle/index.js +40 -0
- package/dist/models/whistle/index.js.map +1 -0
- package/gutts.manifest.json +7 -3
- package/package.json +25 -9
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
async function loadSafetensors(modelUri, subpath) {
|
|
5
|
+
const cacheDir = path.join(os.homedir(), ".cache", "gutts", modelUri, path.dirname(subpath));
|
|
6
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
7
|
+
const cacheFile = path.join(cacheDir, path.basename(subpath));
|
|
8
|
+
let buf;
|
|
9
|
+
if (fs.existsSync(cacheFile)) {
|
|
10
|
+
const fileBuf = fs.readFileSync(cacheFile);
|
|
11
|
+
buf = fileBuf.buffer.slice(fileBuf.byteOffset, fileBuf.byteOffset + fileBuf.byteLength);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
const url = `https://huggingface.co/${modelUri}/resolve/main/${subpath}`;
|
|
15
|
+
const res = await fetch(url);
|
|
16
|
+
if (!res.ok)
|
|
17
|
+
throw new Error(`Failed to download Ettin head weights from ${url}: ${res.statusText}`);
|
|
18
|
+
buf = await res.arrayBuffer();
|
|
19
|
+
fs.writeFileSync(cacheFile, Buffer.from(buf));
|
|
20
|
+
}
|
|
21
|
+
const view = new DataView(buf);
|
|
22
|
+
const headerLen = Number(view.getBigUint64(0, true));
|
|
23
|
+
const header = JSON.parse(new TextDecoder().decode(new Uint8Array(buf, 8, headerLen)));
|
|
24
|
+
const dataStart = 8 + headerLen;
|
|
25
|
+
const tensors = {};
|
|
26
|
+
for (const [key, meta] of Object.entries(header)) {
|
|
27
|
+
if (key === "__metadata__")
|
|
28
|
+
continue;
|
|
29
|
+
const [start, end] = meta.data_offsets;
|
|
30
|
+
tensors[key] = new Float32Array(buf.slice(dataStart + start, dataStart + end));
|
|
31
|
+
}
|
|
32
|
+
return tensors;
|
|
33
|
+
}
|
|
34
|
+
export async function loadEttinHeadWeights(modelUri) {
|
|
35
|
+
const [t2, t3, t4] = await Promise.all([
|
|
36
|
+
loadSafetensors(modelUri, "2_Dense/model.safetensors"),
|
|
37
|
+
loadSafetensors(modelUri, "3_LayerNorm/model.safetensors"),
|
|
38
|
+
loadSafetensors(modelUri, "4_Dense/model.safetensors"),
|
|
39
|
+
]);
|
|
40
|
+
const w1 = t2["linear.weight"];
|
|
41
|
+
const lnWeight = t3["norm.weight"];
|
|
42
|
+
const lnBias = t3["norm.bias"];
|
|
43
|
+
const w2 = t4["linear.weight"];
|
|
44
|
+
const b2 = t4["linear.bias"];
|
|
45
|
+
if (!w1 || !lnWeight || !lnBias || !w2 || !b2) {
|
|
46
|
+
throw new Error(`Invalid Ettin head weights for ${modelUri}`);
|
|
47
|
+
}
|
|
48
|
+
return { w1, lnWeight, lnBias, w2, b2 };
|
|
49
|
+
}
|
|
50
|
+
export function computeEttinHeadScores(hidden, head) {
|
|
51
|
+
const [batchSize = 0, seqLen = 0, hiddenSize = 0] = hidden.dims;
|
|
52
|
+
const { w1, lnWeight, lnBias, w2, b2 } = head;
|
|
53
|
+
const scores = [];
|
|
54
|
+
const c = Math.sqrt(2 / Math.PI);
|
|
55
|
+
for (let b = 0; b < batchSize; b += 1) {
|
|
56
|
+
const clsOffset = b * seqLen * hiddenSize;
|
|
57
|
+
const cls = hidden.data.subarray(clsOffset, clsOffset + hiddenSize);
|
|
58
|
+
const y = new Float32Array(hiddenSize);
|
|
59
|
+
for (let i = 0; i < hiddenSize; i += 1) {
|
|
60
|
+
let sum = 0;
|
|
61
|
+
const rowOffset = i * hiddenSize;
|
|
62
|
+
for (let j = 0; j < hiddenSize; j += 1) {
|
|
63
|
+
sum += (w1[rowOffset + j] ?? 0) * (cls[j] ?? 0);
|
|
64
|
+
}
|
|
65
|
+
y[i] = 0.5 * sum * (1 + Math.tanh(c * (sum + 0.044715 * sum * sum * sum)));
|
|
66
|
+
}
|
|
67
|
+
let mean = 0;
|
|
68
|
+
for (let i = 0; i < hiddenSize; i += 1)
|
|
69
|
+
mean += y[i] ?? 0;
|
|
70
|
+
mean /= hiddenSize;
|
|
71
|
+
let variance = 0;
|
|
72
|
+
for (let i = 0; i < hiddenSize; i += 1) {
|
|
73
|
+
const diff = (y[i] ?? 0) - mean;
|
|
74
|
+
variance += diff * diff;
|
|
75
|
+
}
|
|
76
|
+
const invStd = 1 / Math.sqrt(variance / hiddenSize + 1e-5);
|
|
77
|
+
for (let i = 0; i < hiddenSize; i += 1) {
|
|
78
|
+
y[i] = ((y[i] ?? 0) - mean) * invStd * (lnWeight[i] ?? 1) + (lnBias[i] ?? 0);
|
|
79
|
+
}
|
|
80
|
+
let logit = b2[0] ?? 0;
|
|
81
|
+
for (let i = 0; i < hiddenSize; i += 1) {
|
|
82
|
+
logit += (w2[i] ?? 0) * (y[i] ?? 0);
|
|
83
|
+
}
|
|
84
|
+
scores.push(1 / (1 + Math.exp(-logit)));
|
|
85
|
+
}
|
|
86
|
+
return scores;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=ettin-head.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ettin-head.js","sourceRoot":"","sources":["../../../src/models/runtimes/ettin-head.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ModelRuntime } from "../model-types.js";
|
|
2
|
+
import type { SmolLM2Model } from "../smollm2/index.js";
|
|
3
|
+
import type { MiniLMModel } from "../minilm/index.js";
|
|
4
|
+
import type { EttinRerankerModel } from "../ettin/index.js";
|
|
5
|
+
export declare const smolLM2Runtime: ModelRuntime<SmolLM2Model>;
|
|
6
|
+
export declare const miniLMRuntime: ModelRuntime<MiniLMModel>;
|
|
7
|
+
export declare const ettinRuntime: ModelRuntime<EttinRerankerModel>;
|
|
8
|
+
//# sourceMappingURL=transformers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformers.d.ts","sourceRoot":"","sources":["../../../src/models/runtimes/transformers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AA8B1D,eAAO,MAAM,cAAc,EAAE,YAAY,CAAC,YAAY,CAuCrD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,WAAW,CAmBnD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,YAAY,CAAC,kBAAkB,CA+BzD,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { loadEttinHeadWeights, computeEttinHeadScores } from "./ettin-head.js";
|
|
2
|
+
async function ensureOrtInputMetadataPolyfill() {
|
|
3
|
+
try {
|
|
4
|
+
const { createRequire } = await import("module");
|
|
5
|
+
const require = createRequire(import.meta.resolve("@huggingface/transformers"));
|
|
6
|
+
const ort = require("onnxruntime-node");
|
|
7
|
+
if (ort?.InferenceSession?.prototype && !("inputMetadata" in ort.InferenceSession.prototype)) {
|
|
8
|
+
Object.defineProperty(ort.InferenceSession.prototype, "inputMetadata", {
|
|
9
|
+
get() {
|
|
10
|
+
return (this.inputNames ?? []).map((name) => ({
|
|
11
|
+
name,
|
|
12
|
+
type: "float32",
|
|
13
|
+
shape: ["batch_size", 3, 0, 64],
|
|
14
|
+
}));
|
|
15
|
+
},
|
|
16
|
+
configurable: true,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// If running in an environment where onnxruntime-node is patched or unavailable, proceed
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export const smolLM2Runtime = {
|
|
25
|
+
async load() {
|
|
26
|
+
await ensureOrtInputMetadataPolyfill();
|
|
27
|
+
const { pipeline } = await import("@huggingface/transformers");
|
|
28
|
+
const pipe = (await pipeline("text-generation", "HuggingFaceTB/SmolLM2-135M-Instruct", {
|
|
29
|
+
dtype: "q4",
|
|
30
|
+
}));
|
|
31
|
+
const sessions = pipe.model?.sessions ?? {};
|
|
32
|
+
for (const session of Object.values(sessions)) {
|
|
33
|
+
if (session && typeof session === "object" && !("inputMetadata" in session)) {
|
|
34
|
+
Object.defineProperty(Object.getPrototypeOf(session), "inputMetadata", {
|
|
35
|
+
get() {
|
|
36
|
+
return (this.inputNames ?? []).map((name) => ({
|
|
37
|
+
name,
|
|
38
|
+
type: "float32",
|
|
39
|
+
shape: ["batch_size", 3, 0, 64],
|
|
40
|
+
}));
|
|
41
|
+
},
|
|
42
|
+
configurable: true,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
generate: async (input) => {
|
|
48
|
+
const output = await pipe(input.prompt, {
|
|
49
|
+
max_new_tokens: input.maxNewTokens ?? 32,
|
|
50
|
+
});
|
|
51
|
+
const first = Array.isArray(output) ? output[0] : output;
|
|
52
|
+
if (!first || typeof first !== "object" || !("generated_text" in first)) {
|
|
53
|
+
throw new Error("SmolLM2 runtime returned an invalid generation result.");
|
|
54
|
+
}
|
|
55
|
+
return String(first.generated_text);
|
|
56
|
+
},
|
|
57
|
+
dispose: async () => pipe.dispose?.(),
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
async unload(model) {
|
|
61
|
+
await model.dispose?.();
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
export const miniLMRuntime = {
|
|
65
|
+
async load() {
|
|
66
|
+
await ensureOrtInputMetadataPolyfill();
|
|
67
|
+
const { pipeline } = await import("@huggingface/transformers");
|
|
68
|
+
const pipe = (await pipeline("feature-extraction", "sentence-transformers/all-MiniLM-L6-v2"));
|
|
69
|
+
return {
|
|
70
|
+
similarity: async ({ left, right }) => {
|
|
71
|
+
const output = await pipe([left, right], { pooling: "mean", normalize: true });
|
|
72
|
+
const data = tensorData(output);
|
|
73
|
+
const half = Math.floor(data.length / 2);
|
|
74
|
+
if (half === 0 || data.length % 2 !== 0)
|
|
75
|
+
throw new Error("MiniLM runtime returned invalid embeddings.");
|
|
76
|
+
return cosine(data.subarray(0, half), data.subarray(half));
|
|
77
|
+
},
|
|
78
|
+
dispose: async () => pipe.dispose?.(),
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
async unload(model) {
|
|
82
|
+
await model.dispose?.();
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
export const ettinRuntime = {
|
|
86
|
+
async load(metadata) {
|
|
87
|
+
await ensureOrtInputMetadataPolyfill();
|
|
88
|
+
const { AutoTokenizer, AutoModel } = await import("@huggingface/transformers");
|
|
89
|
+
const targetModel = metadata.modelUri ?? "cross-encoder/ettin-reranker-17m-v1";
|
|
90
|
+
const [tokenizer, model, headWeights] = await Promise.all([
|
|
91
|
+
AutoTokenizer.from_pretrained(targetModel),
|
|
92
|
+
AutoModel.from_pretrained(targetModel),
|
|
93
|
+
loadEttinHeadWeights(targetModel),
|
|
94
|
+
]);
|
|
95
|
+
return {
|
|
96
|
+
rerank: async ({ query, candidates }) => {
|
|
97
|
+
if (candidates.length === 0)
|
|
98
|
+
return [];
|
|
99
|
+
const inputs = await tokenizer(Array(candidates.length).fill(query), {
|
|
100
|
+
text_pair: candidates,
|
|
101
|
+
padding: true,
|
|
102
|
+
truncation: true,
|
|
103
|
+
});
|
|
104
|
+
const outputs = await model(inputs);
|
|
105
|
+
const lastHidden = outputs.last_hidden_state;
|
|
106
|
+
if (!lastHidden)
|
|
107
|
+
throw new Error(`Ettin runtime returned an invalid result for ${targetModel}.`);
|
|
108
|
+
return computeEttinHeadScores(lastHidden, headWeights);
|
|
109
|
+
},
|
|
110
|
+
dispose: async () => {
|
|
111
|
+
await model.dispose?.();
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
async unload(model) {
|
|
116
|
+
await model.dispose?.();
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
function tensorData(output) {
|
|
120
|
+
if (!output || typeof output !== "object" || !("data" in output)) {
|
|
121
|
+
throw new Error("Embedding runtime returned an invalid tensor.");
|
|
122
|
+
}
|
|
123
|
+
const data = output.data;
|
|
124
|
+
if (!(data instanceof Float32Array))
|
|
125
|
+
throw new Error("Embedding runtime returned invalid tensor data.");
|
|
126
|
+
return data;
|
|
127
|
+
}
|
|
128
|
+
function cosine(left, right) {
|
|
129
|
+
let dot = 0;
|
|
130
|
+
let leftNorm = 0;
|
|
131
|
+
let rightNorm = 0;
|
|
132
|
+
for (let i = 0; i < left.length; i += 1) {
|
|
133
|
+
const l = left[i] ?? 0;
|
|
134
|
+
const r = right[i] ?? 0;
|
|
135
|
+
dot += l * r;
|
|
136
|
+
leftNorm += l * l;
|
|
137
|
+
rightNorm += r * r;
|
|
138
|
+
}
|
|
139
|
+
return dot / Math.sqrt(leftNorm * rightNorm);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=transformers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformers.js","sourceRoot":"","sources":["../../../src/models/runtimes/transformers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ModelLibrary } from "../model-library.js";
|
|
2
|
+
import type { ModelRuntime } from "../model-types.js";
|
|
3
|
+
export type SmolLM2Model = {
|
|
4
|
+
generate(input: {
|
|
5
|
+
prompt: string;
|
|
6
|
+
maxNewTokens?: number;
|
|
7
|
+
}): Promise<string>;
|
|
8
|
+
dispose?: () => Promise<void>;
|
|
9
|
+
};
|
|
10
|
+
export declare const smolLM2Metadata: {
|
|
11
|
+
readonly id: "model.smollm2-135m-instruct";
|
|
12
|
+
readonly name: "SmolLM2-135M-Instruct";
|
|
13
|
+
readonly provider: "Hugging Face";
|
|
14
|
+
readonly version: "135M";
|
|
15
|
+
readonly description: "Compact instruction-tuned language model for general text generation.";
|
|
16
|
+
readonly examples: readonly ["summarize text", "rewrite text", "draft a short response"];
|
|
17
|
+
readonly avoidWhen: "Avoid for high-stakes reasoning, broad factual knowledge, or tasks requiring large context.";
|
|
18
|
+
readonly whenToUse: "Use for short general-purpose text generation when a local model is preferred.";
|
|
19
|
+
readonly size: {
|
|
20
|
+
readonly value: 105;
|
|
21
|
+
readonly unit: "MB";
|
|
22
|
+
readonly qualifier: "artifact";
|
|
23
|
+
};
|
|
24
|
+
readonly capabilities: readonly ["text-generation", "instruction-following"];
|
|
25
|
+
readonly input: "Natural-language prompt";
|
|
26
|
+
readonly output: "Generated natural-language text";
|
|
27
|
+
readonly runtime: "ModelRuntime adapter";
|
|
28
|
+
readonly modelUri: "HuggingFaceTB/SmolLM2-135M-Instruct";
|
|
29
|
+
readonly license: "Apache-2.0";
|
|
30
|
+
};
|
|
31
|
+
export declare const smolLM2GenerateApi: import("../../index.js").ApiDefinition;
|
|
32
|
+
export declare class SmolLM2 extends ModelLibrary<SmolLM2Model> {
|
|
33
|
+
constructor(runtime?: ModelRuntime<SmolLM2Model>);
|
|
34
|
+
generate(input: {
|
|
35
|
+
prompt: string;
|
|
36
|
+
maxNewTokens?: number;
|
|
37
|
+
}): Promise<string>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/smollm2/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAGpD,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,KAAK,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1E,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;CAgBlB,CAAC;AAEX,eAAO,MAAM,kBAAkB,wCAY7B,CAAC;AAEH,qBAAa,OAAQ,SAAQ,YAAY,CAAC,YAAY,CAAC;gBACzC,OAAO,GAAE,YAAY,CAAC,YAAY,CAAkB;IAIhE,QAAQ,CAAC,KAAK,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAG1E"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { defineApi } from "../../api/define-api.js";
|
|
2
|
+
import { ModelLibrary } from "../model-library.js";
|
|
3
|
+
import { smolLM2Runtime } from "../runtimes/transformers.js";
|
|
4
|
+
export const smolLM2Metadata = {
|
|
5
|
+
id: "model.smollm2-135m-instruct",
|
|
6
|
+
name: "SmolLM2-135M-Instruct",
|
|
7
|
+
provider: "Hugging Face",
|
|
8
|
+
version: "135M",
|
|
9
|
+
description: "Compact instruction-tuned language model for general text generation.",
|
|
10
|
+
examples: ["summarize text", "rewrite text", "draft a short response"],
|
|
11
|
+
avoidWhen: "Avoid for high-stakes reasoning, broad factual knowledge, or tasks requiring large context.",
|
|
12
|
+
whenToUse: "Use for short general-purpose text generation when a local model is preferred.",
|
|
13
|
+
size: { value: 105, unit: "MB", qualifier: "artifact" },
|
|
14
|
+
capabilities: ["text-generation", "instruction-following"],
|
|
15
|
+
input: "Natural-language prompt",
|
|
16
|
+
output: "Generated natural-language text",
|
|
17
|
+
runtime: "ModelRuntime adapter",
|
|
18
|
+
modelUri: "HuggingFaceTB/SmolLM2-135M-Instruct",
|
|
19
|
+
license: "Apache-2.0",
|
|
20
|
+
};
|
|
21
|
+
export const smolLM2GenerateApi = defineApi({
|
|
22
|
+
id: "model.smollm2-135m-instruct.generate",
|
|
23
|
+
name: "SmolLM2-135M-Instruct.generate",
|
|
24
|
+
category: "models",
|
|
25
|
+
description: "Generate natural-language text with SmolLM2-135M-Instruct.",
|
|
26
|
+
parameters: [
|
|
27
|
+
{ name: "prompt", description: "Prompt supplied to the model.", required: true, schema: { type: "string" } },
|
|
28
|
+
{ name: "maxNewTokens", description: "Maximum number of new tokens.", required: false, schema: { type: "number" } },
|
|
29
|
+
],
|
|
30
|
+
output: { type: "string", description: "Generated natural-language text." },
|
|
31
|
+
semantics: { deterministic: false, pure: false, sideEffects: false },
|
|
32
|
+
errors: ["Model load failure", "Inference failure"],
|
|
33
|
+
});
|
|
34
|
+
export class SmolLM2 extends ModelLibrary {
|
|
35
|
+
constructor(runtime = smolLM2Runtime) {
|
|
36
|
+
super(smolLM2Metadata, runtime);
|
|
37
|
+
}
|
|
38
|
+
generate(input) {
|
|
39
|
+
return this.withModel((model) => model.generate(input));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/smollm2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAO3D,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,EAAE,EAAE,6BAA6B;IACjC,IAAI,EAAE,uBAAuB;IAC7B,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,uEAAuE;IACpF,QAAQ,EAAE,CAAC,gBAAgB,EAAE,cAAc,EAAE,wBAAwB,CAAC;IACtE,SAAS,EAAE,6FAA6F;IACxG,SAAS,EAAE,gFAAgF;IAC3F,IAAI,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAC;IACrD,YAAY,EAAE,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IAC1D,KAAK,EAAE,yBAAyB;IAChC,MAAM,EAAE,iCAAiC;IACzC,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,qCAAqC;IAC/C,OAAO,EAAE,YAAY;CACb,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;IAC1C,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,gCAAgC;IACtC,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,4DAA4D;IACzE,UAAU,EAAE;QACV,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,EAAC;QACxG,EAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,EAAC;KAChH;IACD,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAC;IACzE,SAAS,EAAE,EAAC,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAC;IAClE,MAAM,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,OAAO,OAAQ,SAAQ,YAA0B;IACrD,YAAY,UAAsC,cAAc;QAC9D,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,KAA8C;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ModelLibrary } from "../model-library.js";
|
|
2
|
+
import type { ModelRuntime } from "../model-types.js";
|
|
3
|
+
export type WhistleModel = {
|
|
4
|
+
transcribe(input: {
|
|
5
|
+
audio: Uint8Array;
|
|
6
|
+
language?: string;
|
|
7
|
+
}): Promise<string>;
|
|
8
|
+
close?: () => Promise<void>;
|
|
9
|
+
};
|
|
10
|
+
export declare const whistleMetadata: {
|
|
11
|
+
readonly id: "model.cactus-whistle";
|
|
12
|
+
readonly name: "Whistle";
|
|
13
|
+
readonly provider: "Cactus Compute";
|
|
14
|
+
readonly version: "1";
|
|
15
|
+
readonly description: "Compact CPU speech-recognition model for on-device transcription.";
|
|
16
|
+
readonly examples: readonly ["transcribe a voice note", "transcribe a command"];
|
|
17
|
+
readonly avoidWhen: "Avoid when audio understanding beyond transcription is required.";
|
|
18
|
+
readonly whenToUse: "Use for local speech-to-text when low resource use and privacy matter.";
|
|
19
|
+
readonly size: {
|
|
20
|
+
readonly value: 16.9;
|
|
21
|
+
readonly unit: "MB";
|
|
22
|
+
readonly qualifier: "artifact";
|
|
23
|
+
};
|
|
24
|
+
readonly capabilities: readonly ["speech-to-text", "on-device", "cpu"];
|
|
25
|
+
readonly input: "Audio bytes";
|
|
26
|
+
readonly output: "Transcribed natural-language text";
|
|
27
|
+
readonly runtime: "Cactus Needle runtime adapter";
|
|
28
|
+
readonly modelUri: "Cactus-Compute/whistle";
|
|
29
|
+
};
|
|
30
|
+
export declare const whistleTranscribeApi: import("../../index.js").ApiDefinition;
|
|
31
|
+
export declare class Whistle extends ModelLibrary<WhistleModel> {
|
|
32
|
+
constructor(runtime?: ModelRuntime<WhistleModel>);
|
|
33
|
+
transcribe(input: {
|
|
34
|
+
audio: Uint8Array;
|
|
35
|
+
language?: string;
|
|
36
|
+
}): Promise<string>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/whistle/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAGpD,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,KAAK,EAAE;QAAC,KAAK,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;CAelB,CAAC;AAEX,eAAO,MAAM,oBAAoB,wCAW/B,CAAC;AAEH,qBAAa,OAAQ,SAAQ,YAAY,CAAC,YAAY,CAAC;gBACzC,OAAO,GAAE,YAAY,CAAC,YAAY,CAAwB;IAItE,UAAU,CAAC,KAAK,EAAE;QAAC,KAAK,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAG3E"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { defineApi } from "../../api/define-api.js";
|
|
2
|
+
import { ModelLibrary } from "../model-library.js";
|
|
3
|
+
import { cactusWhistleRuntime } from "../runtimes/cactus.js";
|
|
4
|
+
export const whistleMetadata = {
|
|
5
|
+
id: "model.cactus-whistle",
|
|
6
|
+
name: "Whistle",
|
|
7
|
+
provider: "Cactus Compute",
|
|
8
|
+
version: "1",
|
|
9
|
+
description: "Compact CPU speech-recognition model for on-device transcription.",
|
|
10
|
+
examples: ["transcribe a voice note", "transcribe a command"],
|
|
11
|
+
avoidWhen: "Avoid when audio understanding beyond transcription is required.",
|
|
12
|
+
whenToUse: "Use for local speech-to-text when low resource use and privacy matter.",
|
|
13
|
+
size: { value: 16.9, unit: "MB", qualifier: "artifact" },
|
|
14
|
+
capabilities: ["speech-to-text", "on-device", "cpu"],
|
|
15
|
+
input: "Audio bytes",
|
|
16
|
+
output: "Transcribed natural-language text",
|
|
17
|
+
runtime: "Cactus Needle runtime adapter",
|
|
18
|
+
modelUri: "Cactus-Compute/whistle",
|
|
19
|
+
};
|
|
20
|
+
export const whistleTranscribeApi = defineApi({
|
|
21
|
+
id: "model.cactus-whistle.transcribe",
|
|
22
|
+
name: "Whistle.transcribe",
|
|
23
|
+
category: "models",
|
|
24
|
+
description: "Transcribe speech audio into natural-language text.",
|
|
25
|
+
parameters: [
|
|
26
|
+
{ name: "audio", description: "Audio bytes supplied to the speech model.", required: true, schema: { type: "string" } },
|
|
27
|
+
{ name: "language", description: "Optional language identifier.", required: false, schema: { type: "string" } },
|
|
28
|
+
],
|
|
29
|
+
output: { type: "string", description: "Transcribed text." },
|
|
30
|
+
semantics: { deterministic: true, pure: false, sideEffects: false },
|
|
31
|
+
});
|
|
32
|
+
export class Whistle extends ModelLibrary {
|
|
33
|
+
constructor(runtime = cactusWhistleRuntime) {
|
|
34
|
+
super(whistleMetadata, runtime);
|
|
35
|
+
}
|
|
36
|
+
transcribe(input) {
|
|
37
|
+
return this.withModel((model) => model.transcribe(input));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/whistle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,uBAAuB,CAAC;AAO3D,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,EAAE,EAAE,sBAAsB;IAC1B,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,gBAAgB;IAC1B,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,mEAAmE;IAChF,QAAQ,EAAE,CAAC,yBAAyB,EAAE,sBAAsB,CAAC;IAC7D,SAAS,EAAE,kEAAkE;IAC7E,SAAS,EAAE,wEAAwE;IACnF,IAAI,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAC;IACtD,YAAY,EAAE,CAAC,gBAAgB,EAAE,WAAW,EAAE,KAAK,CAAC;IACpD,KAAK,EAAE,aAAa;IACpB,MAAM,EAAE,mCAAmC;IAC3C,OAAO,EAAE,+BAA+B;IACxC,QAAQ,EAAE,wBAAwB;CAC1B,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;IAC5C,EAAE,EAAE,iCAAiC;IACrC,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,qDAAqD;IAClE,UAAU,EAAE;QACV,EAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,2CAA2C,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,EAAC;QACnH,EAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,EAAC;KAC5G;IACD,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAC;IAC1D,SAAS,EAAE,EAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAC;CAClE,CAAC,CAAC;AAEH,MAAM,OAAO,OAAQ,SAAQ,YAA0B;IACrD,YAAY,UAAsC,oBAAoB;QACpE,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,UAAU,CAAC,KAA6C;QACtD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;CACF"}
|
package/gutts.manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://skipo.dev/schemas/gutts-manifest.v1.json",
|
|
3
3
|
"package": "@dinilmusick/gutts",
|
|
4
4
|
"packageType": "global-utility",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "1.0.0",
|
|
6
6
|
"promotion": {
|
|
7
7
|
"eligible": true,
|
|
8
8
|
"scope": "global",
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
"arrays",
|
|
15
15
|
"objects",
|
|
16
16
|
"numbers",
|
|
17
|
-
"urls"
|
|
17
|
+
"urls",
|
|
18
|
+
"api",
|
|
19
|
+
"models"
|
|
18
20
|
],
|
|
19
21
|
"exports": [
|
|
20
22
|
"@dinilmusick/gutts/json",
|
|
@@ -22,6 +24,8 @@
|
|
|
22
24
|
"@dinilmusick/gutts/arrays",
|
|
23
25
|
"@dinilmusick/gutts/objects",
|
|
24
26
|
"@dinilmusick/gutts/numbers",
|
|
25
|
-
"@dinilmusick/gutts/urls"
|
|
27
|
+
"@dinilmusick/gutts/urls",
|
|
28
|
+
"@dinilmusick/gutts/api",
|
|
29
|
+
"@dinilmusick/gutts/models"
|
|
26
30
|
]
|
|
27
31
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dinilmusick/gutts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Global Utilities for TypeScript applications.",
|
|
6
6
|
"type": "module",
|
|
@@ -14,12 +14,31 @@
|
|
|
14
14
|
"./objects": "./dist/objects/object-concepts.js",
|
|
15
15
|
"./numbers": "./dist/numbers/number-concepts.js",
|
|
16
16
|
"./urls": "./dist/urls/url-concepts.js",
|
|
17
|
+
"./api": "./dist/api/index.js",
|
|
18
|
+
"./models": "./dist/models/index.js",
|
|
17
19
|
"./gutts.manifest.json": "./gutts.manifest.json"
|
|
18
20
|
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc -p tsconfig.json",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
25
|
+
"prepublishOnly": "pnpm run build"
|
|
26
|
+
},
|
|
19
27
|
"dependencies": {
|
|
28
|
+
"@huggingface/transformers": "^4.3.2",
|
|
29
|
+
"cactus-needle": "^0.3.0",
|
|
20
30
|
"lodash-es": "^4.17.21",
|
|
21
31
|
"validator": "^13.15.15"
|
|
22
32
|
},
|
|
33
|
+
"pnpm": {
|
|
34
|
+
"overrides": {
|
|
35
|
+
"onnxruntime-node": "1.20.1"
|
|
36
|
+
},
|
|
37
|
+
"onlyBuiltDependencies": [
|
|
38
|
+
"onnxruntime-node",
|
|
39
|
+
"protobufjs"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
23
42
|
"devDependencies": {
|
|
24
43
|
"@types/lodash-es": "^4.17.12",
|
|
25
44
|
"@types/validator": "^13.12.2",
|
|
@@ -29,20 +48,17 @@
|
|
|
29
48
|
"files": [
|
|
30
49
|
"dist",
|
|
31
50
|
"README.md",
|
|
32
|
-
"gutts.manifest.json"
|
|
51
|
+
"gutts.manifest.json",
|
|
52
|
+
".krusbl-release-attestation.json"
|
|
33
53
|
],
|
|
34
54
|
"publishConfig": {
|
|
35
55
|
"access": "public",
|
|
36
56
|
"registry": "https://registry.npmjs.org/"
|
|
37
57
|
},
|
|
58
|
+
"packageManager": "pnpm@10.33.0",
|
|
38
59
|
"repository": {
|
|
39
60
|
"type": "git",
|
|
40
61
|
"url": "git+https://github.com/dinilmusick/GutTS.git"
|
|
41
62
|
},
|
|
42
|
-
"license": "MIT"
|
|
43
|
-
|
|
44
|
-
"build": "tsc -p tsconfig.json",
|
|
45
|
-
"test": "vitest run",
|
|
46
|
-
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
63
|
+
"license": "MIT"
|
|
64
|
+
}
|