@workglow/huggingface-inference 0.2.34 → 0.2.36

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.
Files changed (36) hide show
  1. package/dist/ai/HfInferenceProvider.d.ts +10 -20
  2. package/dist/ai/HfInferenceProvider.d.ts.map +1 -1
  3. package/dist/ai/HfInferenceQueuedProvider.d.ts +10 -20
  4. package/dist/ai/HfInferenceQueuedProvider.d.ts.map +1 -1
  5. package/dist/ai/common/HFI_Capabilities.d.ts +23 -0
  6. package/dist/ai/common/HFI_Capabilities.d.ts.map +1 -0
  7. package/dist/ai/common/HFI_CapabilitySets.d.ts +25 -0
  8. package/dist/ai/common/HFI_CapabilitySets.d.ts.map +1 -0
  9. package/dist/ai/common/HFI_ImageEdit.d.ts +4 -5
  10. package/dist/ai/common/HFI_ImageEdit.d.ts.map +1 -1
  11. package/dist/ai/common/HFI_ImageGenerate.d.ts +4 -5
  12. package/dist/ai/common/HFI_ImageGenerate.d.ts.map +1 -1
  13. package/dist/ai/common/HFI_JobRunFns.d.ts +2 -3
  14. package/dist/ai/common/HFI_JobRunFns.d.ts.map +1 -1
  15. package/dist/ai/common/HFI_ModelInfo.d.ts.map +1 -1
  16. package/dist/ai/common/HFI_ModelSchema.d.ts +3 -3
  17. package/dist/ai/common/HFI_ModelSearch.d.ts.map +1 -1
  18. package/dist/ai/common/HFI_TextEmbedding.d.ts.map +1 -1
  19. package/dist/ai/common/HFI_TextGeneration.d.ts +2 -3
  20. package/dist/ai/common/HFI_TextGeneration.d.ts.map +1 -1
  21. package/dist/ai/common/HFI_TextRewriter.d.ts +2 -3
  22. package/dist/ai/common/HFI_TextRewriter.d.ts.map +1 -1
  23. package/dist/ai/common/HFI_TextSummary.d.ts +2 -3
  24. package/dist/ai/common/HFI_TextSummary.d.ts.map +1 -1
  25. package/dist/ai/common/HFI_ToolCalling.d.ts +2 -3
  26. package/dist/ai/common/HFI_ToolCalling.d.ts.map +1 -1
  27. package/dist/ai/index.d.ts +25 -0
  28. package/dist/ai/index.d.ts.map +1 -1
  29. package/dist/ai/runtime.d.ts.map +1 -1
  30. package/dist/ai-runtime.d.ts.map +1 -1
  31. package/dist/ai-runtime.js +188 -229
  32. package/dist/ai-runtime.js.map +20 -18
  33. package/dist/ai.d.ts.map +1 -1
  34. package/dist/ai.js +392 -25
  35. package/dist/ai.js.map +18 -5
  36. package/package.json +12 -13
@@ -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/HFI_ModelSearch.ts
48
- import { mapHfModelResult, searchHfModels } from "@workglow/ai/provider-utils";
49
- import { filterLabeledModelsByQuery } from "@workglow/ai/provider-utils";
50
-
51
- // src/ai/common/HFI_Constants.ts
52
- var HF_INFERENCE = "HF_INFERENCE";
53
-
54
- // src/ai/common/HFI_ModelSearch.ts
55
- var HFI_IMAGE_MODELS = [
56
- { id: "black-forest-labs/FLUX.1-schnell", tasks: ["ImageGenerateTask"] },
57
- { id: "black-forest-labs/FLUX.1-Kontext-dev", tasks: ["ImageEditTask"] }
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 HFI_ImageEdit = async (input, model, update_progress, signal) => {
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
- update_progress(0, "Starting HF image edit");
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
- return { image };
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
- yield { type: "snapshot", data: result };
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 HFI_ImageGenerate = async (input, model, update_progress, signal) => {
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
- update_progress(0, "Starting HF image generation");
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
- return { image };
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
- yield { type: "snapshot", data: result };
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
- return {
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
- ...native_dimensions !== undefined ? { native_dimensions } : {},
250
- ...mrl ? { mrl } : {}
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
- return {
254
- model: input.model,
255
- is_local: false,
256
- is_remote: true,
257
- supports_browser: true,
258
- supports_node: true,
259
- is_cached: false,
260
- is_loaded: false,
261
- file_sizes: null
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, update_progress, signal) => {
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
- return {
282
- vector: embeddings.map((embedding2) => new Float32Array(embedding2))
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
- return { vector: new Float32Array(embedding) };
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
- import { getLogger as getLogger4 } from "@workglow/util/worker";
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
- yield { type: "text-delta", port: "text", textDelta: delta };
335
+ emit({ type: "text-delta", port: "text", textDelta: delta });
334
336
  }
335
337
  }
336
- yield { type: "finish", data: {} };
338
+ emit({ type: "finish", data: {} });
337
339
  };
338
340
 
339
341
  // src/ai/common/HFI_TextRewriter.ts
340
- var HFI_TextRewriter = async (input, model, update_progress, signal) => {
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
- yield { type: "text-delta", port: "text", textDelta: delta };
357
+ emit({ type: "text-delta", port: "text", textDelta: delta });
372
358
  }
373
359
  }
374
- yield { type: "finish", data: {} };
360
+ emit({ type: "finish", data: {} });
375
361
  };
376
362
 
377
363
  // src/ai/common/HFI_TextSummary.ts
378
- var HFI_TextSummary = async (input, model, update_progress, signal) => {
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
- yield { type: "text-delta", port: "text", textDelta: delta };
379
+ emit({ type: "text-delta", port: "text", textDelta: delta });
410
380
  }
411
381
  }
412
- yield { type: "finish", data: {} };
382
+ emit({ type: "finish", data: {} });
413
383
  };
414
384
 
415
385
  // src/ai/common/HFI_ToolCalling.ts
416
- import { filterValidToolCalls, toOpenAIMessages } from "@workglow/ai/worker";
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 HFI_ToolCalling = async (input, model, update_progress, signal) => {
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
- yield* accumulateOpenAIStream(stream);
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 HFI_TASKS = {
473
- ModelInfoTask: HFI_ModelInfo,
474
- TextGenerationTask: HFI_TextGeneration,
475
- TextEmbeddingTask: HFI_TextEmbedding,
476
- TextRewriterTask: HFI_TextRewriter,
477
- TextSummaryTask: HFI_TextSummary,
478
- ToolCallingTask: HFI_ToolCalling,
479
- ModelSearchTask: HFI_ModelSearch,
480
- ImageGenerateTask: HFI_ImageGenerate,
481
- ImageEditTask: HFI_ImageEdit
482
- };
483
- var HFI_STREAM_TASKS = {
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(HFI_TASKS, HFI_STREAM_TASKS), "Hugging Face Inference", options);
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(HFI_TASKS, HFI_STREAM_TASKS).registerOnWorkerServer(ws), "Hugging Face Inference");
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=5D7101999CE2E9A764756E2164756E21
533
+ //# debugId=1CA6F5315201146E64756E2164756E21