@workglow/huggingface-inference 0.2.33 → 0.2.35
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/dist/ai/HfInferenceProvider.d.ts +10 -20
- package/dist/ai/HfInferenceProvider.d.ts.map +1 -1
- package/dist/ai/HfInferenceQueuedProvider.d.ts +10 -20
- package/dist/ai/HfInferenceQueuedProvider.d.ts.map +1 -1
- package/dist/ai/common/HFI_Capabilities.d.ts +23 -0
- package/dist/ai/common/HFI_Capabilities.d.ts.map +1 -0
- package/dist/ai/common/HFI_CapabilitySets.d.ts +25 -0
- package/dist/ai/common/HFI_CapabilitySets.d.ts.map +1 -0
- package/dist/ai/common/HFI_ImageEdit.d.ts +4 -5
- package/dist/ai/common/HFI_ImageEdit.d.ts.map +1 -1
- package/dist/ai/common/HFI_ImageGenerate.d.ts +4 -5
- package/dist/ai/common/HFI_ImageGenerate.d.ts.map +1 -1
- package/dist/ai/common/HFI_JobRunFns.d.ts +2 -3
- package/dist/ai/common/HFI_JobRunFns.d.ts.map +1 -1
- package/dist/ai/common/HFI_ModelInfo.d.ts.map +1 -1
- package/dist/ai/common/HFI_ModelSchema.d.ts +3 -3
- package/dist/ai/common/HFI_ModelSearch.d.ts.map +1 -1
- package/dist/ai/common/HFI_TextEmbedding.d.ts.map +1 -1
- package/dist/ai/common/HFI_TextGeneration.d.ts +2 -3
- package/dist/ai/common/HFI_TextGeneration.d.ts.map +1 -1
- package/dist/ai/common/HFI_TextRewriter.d.ts +2 -3
- package/dist/ai/common/HFI_TextRewriter.d.ts.map +1 -1
- package/dist/ai/common/HFI_TextSummary.d.ts +2 -3
- package/dist/ai/common/HFI_TextSummary.d.ts.map +1 -1
- package/dist/ai/common/HFI_ToolCalling.d.ts +2 -3
- package/dist/ai/common/HFI_ToolCalling.d.ts.map +1 -1
- package/dist/ai/index.d.ts +25 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/runtime.d.ts.map +1 -1
- package/dist/ai-runtime.d.ts.map +1 -1
- package/dist/ai-runtime.js +188 -229
- package/dist/ai-runtime.js.map +20 -18
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +392 -25
- package/dist/ai.js.map +18 -5
- package/package.json +12 -13
package/dist/ai-runtime.js
CHANGED
|
@@ -44,54 +44,27 @@ function getProvider(model) {
|
|
|
44
44
|
// src/ai/registerHfInferenceInline.ts
|
|
45
45
|
import { registerProviderInline } from "@workglow/ai/provider-utils";
|
|
46
46
|
|
|
47
|
-
// src/ai/common/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
var
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
var
|
|
56
|
-
|
|
57
|
-
|
|
47
|
+
// src/ai/common/HFI_CapabilitySets.ts
|
|
48
|
+
var HFI_TEXT_GENERATION = ["text.generation"];
|
|
49
|
+
var HFI_TOOL_USE = ["text.generation", "tool-use"];
|
|
50
|
+
var HFI_TEXT_REWRITER = ["text.rewriter"];
|
|
51
|
+
var HFI_TEXT_SUMMARY = ["text.summary"];
|
|
52
|
+
var HFI_TEXT_EMBEDDING = ["text.embedding"];
|
|
53
|
+
var HFI_IMAGE_GENERATION = ["image.generation"];
|
|
54
|
+
var HFI_IMAGE_EDITING = ["image.editing"];
|
|
55
|
+
var HFI_MODEL_SEARCH = ["model.search"];
|
|
56
|
+
var HFI_MODEL_INFO = ["model.info"];
|
|
57
|
+
var HFI_CAPABILITY_SETS = [
|
|
58
|
+
HFI_TEXT_GENERATION,
|
|
59
|
+
HFI_TOOL_USE,
|
|
60
|
+
HFI_TEXT_REWRITER,
|
|
61
|
+
HFI_TEXT_SUMMARY,
|
|
62
|
+
HFI_TEXT_EMBEDDING,
|
|
63
|
+
HFI_IMAGE_GENERATION,
|
|
64
|
+
HFI_IMAGE_EDITING,
|
|
65
|
+
HFI_MODEL_SEARCH,
|
|
66
|
+
HFI_MODEL_INFO
|
|
58
67
|
];
|
|
59
|
-
function buildFallbackResults() {
|
|
60
|
-
return HFI_IMAGE_MODELS.map((m) => ({
|
|
61
|
-
id: m.id,
|
|
62
|
-
label: m.id,
|
|
63
|
-
description: "",
|
|
64
|
-
record: {
|
|
65
|
-
model_id: m.id,
|
|
66
|
-
provider: HF_INFERENCE,
|
|
67
|
-
title: m.id.split("/").pop() ?? m.id,
|
|
68
|
-
description: "",
|
|
69
|
-
tasks: m.tasks,
|
|
70
|
-
provider_config: { model_name: m.id },
|
|
71
|
-
metadata: {}
|
|
72
|
-
},
|
|
73
|
-
raw: m
|
|
74
|
-
}));
|
|
75
|
-
}
|
|
76
|
-
var HFI_ModelSearch = async (input, _model, _onProgress, signal) => {
|
|
77
|
-
const query = input.query?.trim() ?? "";
|
|
78
|
-
if (!input.credential_key) {
|
|
79
|
-
const fallback = buildFallbackResults();
|
|
80
|
-
const labeled = fallback.map((r) => ({ label: r.label, value: r.id }));
|
|
81
|
-
const filtered = filterLabeledModelsByQuery(labeled, query).map((m) => fallback.find((r) => r.id === m.value));
|
|
82
|
-
return { results: filtered };
|
|
83
|
-
}
|
|
84
|
-
const entries = await searchHfModels(query, undefined, undefined, signal, input.credential_key);
|
|
85
|
-
const results = entries.map((entry) => {
|
|
86
|
-
const imageEntry = HFI_IMAGE_MODELS.find((m) => m.id === entry.id);
|
|
87
|
-
const mapped = mapHfModelResult(entry, HF_INFERENCE);
|
|
88
|
-
if (imageEntry) {
|
|
89
|
-
mapped.record.tasks = imageEntry.tasks;
|
|
90
|
-
}
|
|
91
|
-
return mapped;
|
|
92
|
-
});
|
|
93
|
-
return { results };
|
|
94
|
-
};
|
|
95
68
|
|
|
96
69
|
// src/ai/common/HFI_ImageEdit.ts
|
|
97
70
|
import { ImageGenerationContentPolicyError, ImageGenerationProviderError } from "@workglow/ai";
|
|
@@ -135,11 +108,11 @@ async function gpuImageToBlob(image) {
|
|
|
135
108
|
const buffer = bytes.buffer instanceof ArrayBuffer ? bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) : new Uint8Array(bytes).buffer;
|
|
136
109
|
return new Blob([buffer], { type: "image/png" });
|
|
137
110
|
}
|
|
138
|
-
var
|
|
111
|
+
var HFI_ImageEdit_Stream = async (input, model, signal, emit) => {
|
|
139
112
|
const logger = getLogger();
|
|
140
113
|
const timer = `hfi:ImageEdit:${getModelName(model)}`;
|
|
141
114
|
logger.time(timer);
|
|
142
|
-
|
|
115
|
+
let result;
|
|
143
116
|
try {
|
|
144
117
|
const client = await getClient(model);
|
|
145
118
|
const modelName = getModelName(model);
|
|
@@ -163,9 +136,8 @@ var HFI_ImageEdit = async (input, model, update_progress, signal) => {
|
|
|
163
136
|
parameters: params
|
|
164
137
|
}, { signal });
|
|
165
138
|
const image = await blobToImageValue(blob);
|
|
166
|
-
update_progress(100, "Completed HF image edit");
|
|
167
139
|
logger.timeEnd(timer);
|
|
168
|
-
|
|
140
|
+
result = { image };
|
|
169
141
|
} catch (err) {
|
|
170
142
|
if (err instanceof ImageGenerationProviderError || err instanceof ImageGenerationContentPolicyError)
|
|
171
143
|
throw err;
|
|
@@ -174,13 +146,9 @@ var HFI_ImageEdit = async (input, model, update_progress, signal) => {
|
|
|
174
146
|
throw new ImageGenerationContentPolicyError(modelIdOf(model), msg);
|
|
175
147
|
throw new ImageGenerationProviderError(modelIdOf(model), msg, { cause: err });
|
|
176
148
|
}
|
|
177
|
-
};
|
|
178
|
-
var HFI_ImageEdit_Stream = async function* (input, model, signal) {
|
|
179
|
-
const result = await HFI_ImageEdit(input, model, () => {}, signal);
|
|
180
149
|
if (signal.aborted)
|
|
181
150
|
return;
|
|
182
|
-
|
|
183
|
-
yield { type: "finish", data: {} };
|
|
151
|
+
emit({ type: "finish", data: result });
|
|
184
152
|
};
|
|
185
153
|
|
|
186
154
|
// src/ai/common/HFI_ImageGenerate.ts
|
|
@@ -190,11 +158,11 @@ import { blobToImageValue as blobToImageValue2 } from "@workglow/ai/provider-uti
|
|
|
190
158
|
function modelIdOf2(model) {
|
|
191
159
|
return model?.model_id ?? model?.provider_config?.model_name ?? "huggingface";
|
|
192
160
|
}
|
|
193
|
-
var
|
|
161
|
+
var HFI_ImageGenerate_Stream = async (input, model, signal, emit) => {
|
|
194
162
|
const logger = getLogger2();
|
|
195
163
|
const timer = `hfi:ImageGenerate:${getModelName(model)}`;
|
|
196
164
|
logger.time(timer);
|
|
197
|
-
|
|
165
|
+
let result;
|
|
198
166
|
try {
|
|
199
167
|
const client = await getClient(model);
|
|
200
168
|
const modelName = getModelName(model);
|
|
@@ -211,9 +179,8 @@ var HFI_ImageGenerate = async (input, model, update_progress, signal) => {
|
|
|
211
179
|
}
|
|
212
180
|
}, { outputType: "blob", signal });
|
|
213
181
|
const image = await blobToImageValue2(blob);
|
|
214
|
-
update_progress(100, "Completed HF image generation");
|
|
215
182
|
logger.timeEnd(timer);
|
|
216
|
-
|
|
183
|
+
result = { image };
|
|
217
184
|
} catch (err) {
|
|
218
185
|
if (err instanceof ImageGenerationProviderError2 || err instanceof ImageGenerationContentPolicyError2)
|
|
219
186
|
throw err;
|
|
@@ -222,22 +189,37 @@ var HFI_ImageGenerate = async (input, model, update_progress, signal) => {
|
|
|
222
189
|
throw new ImageGenerationContentPolicyError2(modelIdOf2(model), msg);
|
|
223
190
|
throw new ImageGenerationProviderError2(modelIdOf2(model), msg, { cause: err });
|
|
224
191
|
}
|
|
225
|
-
};
|
|
226
|
-
var HFI_ImageGenerate_Stream = async function* (input, model, signal) {
|
|
227
|
-
const result = await HFI_ImageGenerate(input, model, () => {}, signal);
|
|
228
192
|
if (signal.aborted)
|
|
229
193
|
return;
|
|
230
|
-
|
|
231
|
-
yield { type: "finish", data: {} };
|
|
194
|
+
emit({ type: "finish", data: result });
|
|
232
195
|
};
|
|
233
196
|
|
|
234
197
|
// src/ai/common/HFI_ModelInfo.ts
|
|
235
|
-
var HFI_ModelInfo = async (input, model) => {
|
|
198
|
+
var HFI_ModelInfo = async (input, model, _signal, emit) => {
|
|
236
199
|
if (input.detail === "dimensions") {
|
|
237
200
|
const pc = model?.provider_config;
|
|
238
201
|
const native_dimensions = typeof pc?.native_dimensions === "number" ? pc.native_dimensions : undefined;
|
|
239
202
|
const mrl = typeof pc?.mrl === "boolean" ? pc.mrl : false;
|
|
240
|
-
|
|
203
|
+
emit({
|
|
204
|
+
type: "finish",
|
|
205
|
+
data: {
|
|
206
|
+
model: input.model,
|
|
207
|
+
is_local: false,
|
|
208
|
+
is_remote: true,
|
|
209
|
+
supports_browser: true,
|
|
210
|
+
supports_node: true,
|
|
211
|
+
is_cached: false,
|
|
212
|
+
is_loaded: false,
|
|
213
|
+
file_sizes: null,
|
|
214
|
+
...native_dimensions !== undefined ? { native_dimensions } : {},
|
|
215
|
+
...mrl ? { mrl } : {}
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
emit({
|
|
221
|
+
type: "finish",
|
|
222
|
+
data: {
|
|
241
223
|
model: input.model,
|
|
242
224
|
is_local: false,
|
|
243
225
|
is_remote: true,
|
|
@@ -245,30 +227,67 @@ var HFI_ModelInfo = async (input, model) => {
|
|
|
245
227
|
supports_node: true,
|
|
246
228
|
is_cached: false,
|
|
247
229
|
is_loaded: false,
|
|
248
|
-
file_sizes: null
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
230
|
+
file_sizes: null
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
// src/ai/common/HFI_ModelSearch.ts
|
|
236
|
+
import { mapHfModelResult, searchHfModels } from "@workglow/ai/provider-utils";
|
|
237
|
+
import { filterLabeledModelsByQuery } from "@workglow/ai/provider-utils";
|
|
238
|
+
|
|
239
|
+
// src/ai/common/HFI_Constants.ts
|
|
240
|
+
var HF_INFERENCE = "HF_INFERENCE";
|
|
241
|
+
|
|
242
|
+
// src/ai/common/HFI_ModelSearch.ts
|
|
243
|
+
var HFI_IMAGE_MODELS = [
|
|
244
|
+
{ id: "black-forest-labs/FLUX.1-schnell", capabilities: ["image.generation"] },
|
|
245
|
+
{ id: "black-forest-labs/FLUX.1-Kontext-dev", capabilities: ["image.editing"] }
|
|
246
|
+
];
|
|
247
|
+
function buildFallbackResults() {
|
|
248
|
+
return HFI_IMAGE_MODELS.map((m) => ({
|
|
249
|
+
id: m.id,
|
|
250
|
+
label: m.id,
|
|
251
|
+
description: "",
|
|
252
|
+
record: {
|
|
253
|
+
model_id: m.id,
|
|
254
|
+
provider: HF_INFERENCE,
|
|
255
|
+
title: m.id.split("/").pop() ?? m.id,
|
|
256
|
+
description: "",
|
|
257
|
+
capabilities: m.capabilities,
|
|
258
|
+
provider_config: { model_name: m.id },
|
|
259
|
+
metadata: {}
|
|
260
|
+
},
|
|
261
|
+
raw: m
|
|
262
|
+
}));
|
|
263
|
+
}
|
|
264
|
+
var HFI_ModelSearch = async (input, _model, signal, emit) => {
|
|
265
|
+
const query = input.query?.trim() ?? "";
|
|
266
|
+
if (!input.credential_key) {
|
|
267
|
+
const fallback = buildFallbackResults();
|
|
268
|
+
const labeled = fallback.map((r) => ({ label: r.label, value: r.id }));
|
|
269
|
+
const filtered = filterLabeledModelsByQuery(labeled, query).map((m) => fallback.find((r) => r.id === m.value));
|
|
270
|
+
emit({ type: "finish", data: { results: filtered } });
|
|
271
|
+
return;
|
|
252
272
|
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
};
|
|
273
|
+
const entries = await searchHfModels(query, undefined, undefined, signal, input.credential_key);
|
|
274
|
+
const results = entries.map((entry) => {
|
|
275
|
+
const imageEntry = HFI_IMAGE_MODELS.find((m) => m.id === entry.id);
|
|
276
|
+
const mapped = mapHfModelResult(entry, HF_INFERENCE);
|
|
277
|
+
if (imageEntry) {
|
|
278
|
+
mapped.record.capabilities = imageEntry.capabilities;
|
|
279
|
+
}
|
|
280
|
+
return mapped;
|
|
281
|
+
});
|
|
282
|
+
emit({ type: "finish", data: { results } });
|
|
263
283
|
};
|
|
264
284
|
|
|
265
285
|
// src/ai/common/HFI_TextEmbedding.ts
|
|
266
286
|
import { getLogger as getLogger3 } from "@workglow/util/worker";
|
|
267
|
-
var HFI_TextEmbedding = async (input, model,
|
|
287
|
+
var HFI_TextEmbedding = async (input, model, signal, emit) => {
|
|
268
288
|
const logger = getLogger3();
|
|
269
289
|
const timerLabel = `hfi:TextEmbedding:${model?.provider_config?.model_name}`;
|
|
270
290
|
logger.time(timerLabel, { model: model?.provider_config?.model_name });
|
|
271
|
-
update_progress(0, "Starting HF Inference text embedding");
|
|
272
291
|
const client = await getClient(model);
|
|
273
292
|
const modelName = getModelName(model);
|
|
274
293
|
if (Array.isArray(input.text)) {
|
|
@@ -276,45 +295,28 @@ var HFI_TextEmbedding = async (input, model, update_progress, signal) => {
|
|
|
276
295
|
model: modelName,
|
|
277
296
|
inputs: text
|
|
278
297
|
}, { signal })));
|
|
279
|
-
update_progress(100, "Completed HF Inference text embedding");
|
|
280
298
|
logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name, batch: true });
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
299
|
+
emit({
|
|
300
|
+
type: "finish",
|
|
301
|
+
data: {
|
|
302
|
+
vector: embeddings.map((embedding2) => new Float32Array(embedding2))
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
return;
|
|
284
306
|
}
|
|
285
307
|
const embedding = await client.featureExtraction({
|
|
286
308
|
model: modelName,
|
|
287
309
|
inputs: input.text
|
|
288
310
|
}, { signal });
|
|
289
|
-
update_progress(100, "Completed HF Inference text embedding");
|
|
290
311
|
logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name });
|
|
291
|
-
|
|
312
|
+
emit({
|
|
313
|
+
type: "finish",
|
|
314
|
+
data: { vector: new Float32Array(embedding) }
|
|
315
|
+
});
|
|
292
316
|
};
|
|
293
317
|
|
|
294
318
|
// src/ai/common/HFI_TextGeneration.ts
|
|
295
|
-
|
|
296
|
-
var HFI_TextGeneration = async (input, model, update_progress, signal) => {
|
|
297
|
-
const logger = getLogger4();
|
|
298
|
-
const timerLabel = `hfi:TextGeneration:${model?.provider_config?.model_name}`;
|
|
299
|
-
logger.time(timerLabel, { model: model?.provider_config?.model_name });
|
|
300
|
-
update_progress(0, "Starting HF Inference text generation");
|
|
301
|
-
const client = await getClient(model);
|
|
302
|
-
const modelName = getModelName(model);
|
|
303
|
-
const provider = getProvider(model);
|
|
304
|
-
const response = await client.chatCompletion({
|
|
305
|
-
model: modelName,
|
|
306
|
-
messages: [{ role: "user", content: input.prompt }],
|
|
307
|
-
max_tokens: input.maxTokens,
|
|
308
|
-
temperature: input.temperature,
|
|
309
|
-
top_p: input.topP,
|
|
310
|
-
frequency_penalty: input.frequencyPenalty,
|
|
311
|
-
provider
|
|
312
|
-
}, { signal });
|
|
313
|
-
update_progress(100, "Completed HF Inference text generation");
|
|
314
|
-
logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name });
|
|
315
|
-
return { text: response.choices[0]?.message?.content ?? "" };
|
|
316
|
-
};
|
|
317
|
-
var HFI_TextGeneration_Stream = async function* (input, model, signal) {
|
|
319
|
+
var HFI_TextGeneration_Stream = async (input, model, signal, emit) => {
|
|
318
320
|
const client = await getClient(model);
|
|
319
321
|
const modelName = getModelName(model);
|
|
320
322
|
const provider = getProvider(model);
|
|
@@ -330,30 +332,14 @@ var HFI_TextGeneration_Stream = async function* (input, model, signal) {
|
|
|
330
332
|
for await (const chunk of stream) {
|
|
331
333
|
const delta = chunk.choices[0]?.delta?.content ?? "";
|
|
332
334
|
if (delta) {
|
|
333
|
-
|
|
335
|
+
emit({ type: "text-delta", port: "text", textDelta: delta });
|
|
334
336
|
}
|
|
335
337
|
}
|
|
336
|
-
|
|
338
|
+
emit({ type: "finish", data: {} });
|
|
337
339
|
};
|
|
338
340
|
|
|
339
341
|
// src/ai/common/HFI_TextRewriter.ts
|
|
340
|
-
var
|
|
341
|
-
update_progress(0, "Starting HF Inference text rewriting");
|
|
342
|
-
const client = await getClient(model);
|
|
343
|
-
const modelName = getModelName(model);
|
|
344
|
-
const provider = getProvider(model);
|
|
345
|
-
const response = await client.chatCompletion({
|
|
346
|
-
model: modelName,
|
|
347
|
-
messages: [
|
|
348
|
-
{ role: "system", content: input.prompt },
|
|
349
|
-
{ role: "user", content: input.text }
|
|
350
|
-
],
|
|
351
|
-
provider
|
|
352
|
-
}, { signal });
|
|
353
|
-
update_progress(100, "Completed HF Inference text rewriting");
|
|
354
|
-
return { text: response.choices[0]?.message?.content ?? "" };
|
|
355
|
-
};
|
|
356
|
-
var HFI_TextRewriter_Stream = async function* (input, model, signal) {
|
|
342
|
+
var HFI_TextRewriter_Stream = async (input, model, signal, emit) => {
|
|
357
343
|
const client = await getClient(model);
|
|
358
344
|
const modelName = getModelName(model);
|
|
359
345
|
const provider = getProvider(model);
|
|
@@ -368,30 +354,14 @@ var HFI_TextRewriter_Stream = async function* (input, model, signal) {
|
|
|
368
354
|
for await (const chunk of stream) {
|
|
369
355
|
const delta = chunk.choices[0]?.delta?.content ?? "";
|
|
370
356
|
if (delta) {
|
|
371
|
-
|
|
357
|
+
emit({ type: "text-delta", port: "text", textDelta: delta });
|
|
372
358
|
}
|
|
373
359
|
}
|
|
374
|
-
|
|
360
|
+
emit({ type: "finish", data: {} });
|
|
375
361
|
};
|
|
376
362
|
|
|
377
363
|
// src/ai/common/HFI_TextSummary.ts
|
|
378
|
-
var
|
|
379
|
-
update_progress(0, "Starting HF Inference text summarization");
|
|
380
|
-
const client = await getClient(model);
|
|
381
|
-
const modelName = getModelName(model);
|
|
382
|
-
const provider = getProvider(model);
|
|
383
|
-
const response = await client.chatCompletion({
|
|
384
|
-
model: modelName,
|
|
385
|
-
messages: [
|
|
386
|
-
{ role: "system", content: "Summarize the following text concisely." },
|
|
387
|
-
{ role: "user", content: input.text }
|
|
388
|
-
],
|
|
389
|
-
provider
|
|
390
|
-
}, { signal });
|
|
391
|
-
update_progress(100, "Completed HF Inference text summarization");
|
|
392
|
-
return { text: response.choices[0]?.message?.content ?? "" };
|
|
393
|
-
};
|
|
394
|
-
var HFI_TextSummary_Stream = async function* (input, model, signal) {
|
|
364
|
+
var HFI_TextSummary_Stream = async (input, model, signal, emit) => {
|
|
395
365
|
const client = await getClient(model);
|
|
396
366
|
const modelName = getModelName(model);
|
|
397
367
|
const provider = getProvider(model);
|
|
@@ -406,46 +376,20 @@ var HFI_TextSummary_Stream = async function* (input, model, signal) {
|
|
|
406
376
|
for await (const chunk of stream) {
|
|
407
377
|
const delta = chunk.choices[0]?.delta?.content ?? "";
|
|
408
378
|
if (delta) {
|
|
409
|
-
|
|
379
|
+
emit({ type: "text-delta", port: "text", textDelta: delta });
|
|
410
380
|
}
|
|
411
381
|
}
|
|
412
|
-
|
|
382
|
+
emit({ type: "finish", data: {} });
|
|
413
383
|
};
|
|
414
384
|
|
|
415
385
|
// src/ai/common/HFI_ToolCalling.ts
|
|
416
|
-
import {
|
|
386
|
+
import { toOpenAIMessages } from "@workglow/ai/worker";
|
|
417
387
|
import {
|
|
418
388
|
accumulateOpenAIStream,
|
|
419
389
|
buildOpenAITools,
|
|
420
|
-
mapOpenAIToolChoice
|
|
421
|
-
parseOpenAIToolCallMessage
|
|
390
|
+
mapOpenAIToolChoice
|
|
422
391
|
} from "@workglow/ai/provider-utils";
|
|
423
|
-
var
|
|
424
|
-
update_progress(0, "Starting HF Inference tool calling");
|
|
425
|
-
const client = await getClient(model);
|
|
426
|
-
const modelName = getModelName(model);
|
|
427
|
-
const provider = getProvider(model);
|
|
428
|
-
const tools = buildOpenAITools(input.tools);
|
|
429
|
-
const messages = toOpenAIMessages(input);
|
|
430
|
-
const toolChoice = mapOpenAIToolChoice(input.toolChoice, false);
|
|
431
|
-
const params = {
|
|
432
|
-
model: modelName,
|
|
433
|
-
messages,
|
|
434
|
-
max_tokens: input.maxTokens,
|
|
435
|
-
temperature: input.temperature,
|
|
436
|
-
provider
|
|
437
|
-
};
|
|
438
|
-
if (toolChoice !== "none") {
|
|
439
|
-
params.tools = tools;
|
|
440
|
-
params.tool_choice = toolChoice;
|
|
441
|
-
}
|
|
442
|
-
const response = await client.chatCompletion(params, { signal });
|
|
443
|
-
const text = response.choices[0]?.message?.content ?? "";
|
|
444
|
-
const toolCalls = parseOpenAIToolCallMessage(response.choices[0]?.message?.tool_calls);
|
|
445
|
-
update_progress(100, "Completed HF Inference tool calling");
|
|
446
|
-
return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };
|
|
447
|
-
};
|
|
448
|
-
var HFI_ToolCalling_Stream = async function* (input, model, signal) {
|
|
392
|
+
var HFI_ToolCalling_Stream = async (input, model, signal, emit) => {
|
|
449
393
|
const client = await getClient(model);
|
|
450
394
|
const modelName = getModelName(model);
|
|
451
395
|
const provider = getProvider(model);
|
|
@@ -465,50 +409,70 @@ var HFI_ToolCalling_Stream = async function* (input, model, signal) {
|
|
|
465
409
|
params.tool_choice = toolChoice;
|
|
466
410
|
}
|
|
467
411
|
const stream = client.chatCompletionStream(params, { signal });
|
|
468
|
-
|
|
412
|
+
for await (const e of accumulateOpenAIStream(stream)) {
|
|
413
|
+
emit(e);
|
|
414
|
+
}
|
|
469
415
|
};
|
|
470
416
|
|
|
471
417
|
// src/ai/common/HFI_JobRunFns.ts
|
|
472
|
-
var
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
TextGenerationTask: HFI_TextGeneration_Stream,
|
|
485
|
-
TextRewriterTask: HFI_TextRewriter_Stream,
|
|
486
|
-
TextSummaryTask: HFI_TextSummary_Stream,
|
|
487
|
-
ToolCallingTask: HFI_ToolCalling_Stream,
|
|
488
|
-
ImageGenerateTask: HFI_ImageGenerate_Stream,
|
|
489
|
-
ImageEditTask: HFI_ImageEdit_Stream
|
|
490
|
-
};
|
|
418
|
+
var HFI_TextGeneration_Unified = HFI_TextGeneration_Stream;
|
|
419
|
+
var HFI_RUN_FNS = [
|
|
420
|
+
{ serves: HFI_TEXT_GENERATION, runFn: HFI_TextGeneration_Unified },
|
|
421
|
+
{ serves: HFI_TOOL_USE, runFn: HFI_ToolCalling_Stream },
|
|
422
|
+
{ serves: HFI_TEXT_REWRITER, runFn: HFI_TextRewriter_Stream },
|
|
423
|
+
{ serves: HFI_TEXT_SUMMARY, runFn: HFI_TextSummary_Stream },
|
|
424
|
+
{ serves: HFI_TEXT_EMBEDDING, runFn: HFI_TextEmbedding },
|
|
425
|
+
{ serves: HFI_IMAGE_GENERATION, runFn: HFI_ImageGenerate_Stream },
|
|
426
|
+
{ serves: HFI_IMAGE_EDITING, runFn: HFI_ImageEdit_Stream },
|
|
427
|
+
{ serves: HFI_MODEL_SEARCH, runFn: HFI_ModelSearch },
|
|
428
|
+
{ serves: HFI_MODEL_INFO, runFn: HFI_ModelInfo }
|
|
429
|
+
];
|
|
491
430
|
|
|
492
431
|
// src/ai/HfInferenceQueuedProvider.ts
|
|
493
432
|
import { AiProvider } from "@workglow/ai";
|
|
494
433
|
import { createCloudProviderClass } from "@workglow/ai/provider-utils";
|
|
495
|
-
var HFI_QUEUED_TASK_TYPES = [
|
|
496
|
-
"ModelInfoTask",
|
|
497
|
-
"TextGenerationTask",
|
|
498
|
-
"TextEmbeddingTask",
|
|
499
|
-
"TextRewriterTask",
|
|
500
|
-
"TextSummaryTask",
|
|
501
|
-
"ToolCallingTask",
|
|
502
|
-
"ModelSearchTask",
|
|
503
|
-
"ImageGenerateTask",
|
|
504
|
-
"ImageEditTask"
|
|
505
|
-
];
|
|
506
434
|
|
|
435
|
+
// src/ai/common/HFI_Capabilities.ts
|
|
436
|
+
var HFI_RUN_FN_SPECS = HFI_CAPABILITY_SETS.map((serves) => ({ serves }));
|
|
437
|
+
function hfInferenceWorkerRunFnSpecs() {
|
|
438
|
+
return HFI_RUN_FN_SPECS;
|
|
439
|
+
}
|
|
440
|
+
function inferHfInferenceCapabilities(model) {
|
|
441
|
+
const declared = model.capabilities ?? [];
|
|
442
|
+
if (declared.length > 0)
|
|
443
|
+
return declared;
|
|
444
|
+
const id = String(model.model_id ?? model.provider_config?.model_name ?? "");
|
|
445
|
+
const baseName = id.split("/").pop() ?? id;
|
|
446
|
+
if (/flux|stable-diffusion|sd-|sdxl|dall-e|kandinsky|wuerstchen|playground/i.test(baseName)) {
|
|
447
|
+
return ["image.generation", "image.editing", "model.info", "model.search"];
|
|
448
|
+
}
|
|
449
|
+
if (/embed|minilm|bge-|gte-|e5-/i.test(baseName)) {
|
|
450
|
+
return ["text.embedding", "model.info", "model.search"];
|
|
451
|
+
}
|
|
452
|
+
if (/llama|mistral|mixtral|gemma|phi|qwen|falcon|yi|deepseek|command|claude|gpt-/i.test(baseName)) {
|
|
453
|
+
return [
|
|
454
|
+
"text.generation",
|
|
455
|
+
"text.rewriter",
|
|
456
|
+
"text.summary",
|
|
457
|
+
"tool-use",
|
|
458
|
+
"model.info",
|
|
459
|
+
"model.search"
|
|
460
|
+
];
|
|
461
|
+
}
|
|
462
|
+
return ["model.search", "model.info"];
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
// src/ai/HfInferenceQueuedProvider.ts
|
|
507
466
|
class HfInferenceQueuedProvider extends createCloudProviderClass(AiProvider, {
|
|
508
467
|
name: HF_INFERENCE,
|
|
509
|
-
displayName: "Hugging Face Inference"
|
|
510
|
-
taskTypes: HFI_QUEUED_TASK_TYPES
|
|
468
|
+
displayName: "Hugging Face Inference"
|
|
511
469
|
}) {
|
|
470
|
+
inferCapabilities(model) {
|
|
471
|
+
return inferHfInferenceCapabilities(model);
|
|
472
|
+
}
|
|
473
|
+
workerRunFnSpecs() {
|
|
474
|
+
return hfInferenceWorkerRunFnSpecs();
|
|
475
|
+
}
|
|
512
476
|
}
|
|
513
477
|
|
|
514
478
|
// src/ai/common/HFI_ImageValidation.ts
|
|
@@ -532,7 +496,7 @@ function registerHfImageValidator() {
|
|
|
532
496
|
// src/ai/registerHfInferenceInline.ts
|
|
533
497
|
async function registerHfInferenceInline(options) {
|
|
534
498
|
registerHfImageValidator();
|
|
535
|
-
await registerProviderInline(new HfInferenceQueuedProvider(
|
|
499
|
+
await registerProviderInline(new HfInferenceQueuedProvider(HFI_RUN_FNS), "Hugging Face Inference", options);
|
|
536
500
|
}
|
|
537
501
|
|
|
538
502
|
// src/ai/registerHfInferenceWorker.ts
|
|
@@ -541,26 +505,21 @@ import { registerProviderWorker } from "@workglow/ai/provider-utils";
|
|
|
541
505
|
// src/ai/HfInferenceProvider.ts
|
|
542
506
|
import { AiProvider as AiProvider2 } from "@workglow/ai/worker";
|
|
543
507
|
import { createCloudProviderClass as createCloudProviderClass2 } from "@workglow/ai/provider-utils";
|
|
544
|
-
var HFI_WORKER_TASK_TYPES = [
|
|
545
|
-
"ModelInfoTask",
|
|
546
|
-
"TextGenerationTask",
|
|
547
|
-
"TextEmbeddingTask",
|
|
548
|
-
"TextRewriterTask",
|
|
549
|
-
"TextSummaryTask",
|
|
550
|
-
"ToolCallingTask",
|
|
551
|
-
"ModelSearchTask"
|
|
552
|
-
];
|
|
553
|
-
|
|
554
508
|
class HfInferenceProvider extends createCloudProviderClass2(AiProvider2, {
|
|
555
509
|
name: HF_INFERENCE,
|
|
556
|
-
displayName: "Hugging Face Inference"
|
|
557
|
-
taskTypes: HFI_WORKER_TASK_TYPES
|
|
510
|
+
displayName: "Hugging Face Inference"
|
|
558
511
|
}) {
|
|
512
|
+
inferCapabilities(model) {
|
|
513
|
+
return inferHfInferenceCapabilities(model);
|
|
514
|
+
}
|
|
515
|
+
workerRunFnSpecs() {
|
|
516
|
+
return hfInferenceWorkerRunFnSpecs();
|
|
517
|
+
}
|
|
559
518
|
}
|
|
560
519
|
|
|
561
520
|
// src/ai/registerHfInferenceWorker.ts
|
|
562
521
|
async function registerHfInferenceWorker() {
|
|
563
|
-
await registerProviderWorker((ws) => new HfInferenceProvider(
|
|
522
|
+
await registerProviderWorker((ws) => new HfInferenceProvider(HFI_RUN_FNS).registerOnWorkerServer(ws), "Hugging Face Inference");
|
|
564
523
|
}
|
|
565
524
|
export {
|
|
566
525
|
registerHfInferenceWorker,
|
|
@@ -571,4 +530,4 @@ export {
|
|
|
571
530
|
getClient
|
|
572
531
|
};
|
|
573
532
|
|
|
574
|
-
//# debugId=
|
|
533
|
+
//# debugId=1CA6F5315201146E64756E2164756E21
|