@huggingface/inference 4.13.9 → 4.13.10

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 (107) hide show
  1. package/dist/commonjs/lib/getProviderHelper.d.ts.map +1 -1
  2. package/dist/commonjs/lib/getProviderHelper.js +8 -4
  3. package/dist/commonjs/lib/makeRequestOptions.d.ts +2 -1
  4. package/dist/commonjs/lib/makeRequestOptions.d.ts.map +1 -1
  5. package/dist/commonjs/lib/makeRequestOptions.js +4 -2
  6. package/dist/commonjs/package.d.ts +1 -1
  7. package/dist/commonjs/package.d.ts.map +1 -1
  8. package/dist/commonjs/package.js +1 -1
  9. package/dist/commonjs/providers/fal-ai.d.ts +13 -3
  10. package/dist/commonjs/providers/fal-ai.d.ts.map +1 -1
  11. package/dist/commonjs/providers/fal-ai.js +49 -2
  12. package/dist/commonjs/providers/hf-inference.d.ts +3 -2
  13. package/dist/commonjs/providers/hf-inference.d.ts.map +1 -1
  14. package/dist/commonjs/providers/hf-inference.js +14 -8
  15. package/dist/commonjs/providers/hyperbolic.d.ts +2 -2
  16. package/dist/commonjs/providers/hyperbolic.d.ts.map +1 -1
  17. package/dist/commonjs/providers/hyperbolic.js +4 -1
  18. package/dist/commonjs/providers/nebius.d.ts +5 -4
  19. package/dist/commonjs/providers/nebius.d.ts.map +1 -1
  20. package/dist/commonjs/providers/nebius.js +11 -8
  21. package/dist/commonjs/providers/nscale.d.ts +2 -2
  22. package/dist/commonjs/providers/nscale.d.ts.map +1 -1
  23. package/dist/commonjs/providers/nscale.js +4 -1
  24. package/dist/commonjs/providers/providerHelper.d.ts +3 -3
  25. package/dist/commonjs/providers/providerHelper.d.ts.map +1 -1
  26. package/dist/commonjs/providers/providerHelper.js +3 -0
  27. package/dist/commonjs/providers/replicate.d.ts +2 -2
  28. package/dist/commonjs/providers/replicate.d.ts.map +1 -1
  29. package/dist/commonjs/providers/replicate.js +5 -2
  30. package/dist/commonjs/providers/together.d.ts +5 -4
  31. package/dist/commonjs/providers/together.d.ts.map +1 -1
  32. package/dist/commonjs/providers/together.js +11 -8
  33. package/dist/commonjs/providers/wavespeed.d.ts +14 -4
  34. package/dist/commonjs/providers/wavespeed.d.ts.map +1 -1
  35. package/dist/commonjs/providers/wavespeed.js +30 -2
  36. package/dist/commonjs/providers/zai-org.d.ts +2 -2
  37. package/dist/commonjs/providers/zai-org.d.ts.map +1 -1
  38. package/dist/commonjs/providers/zai-org.js +3 -1
  39. package/dist/commonjs/tasks/cv/textToImage.d.ts +5 -2
  40. package/dist/commonjs/tasks/cv/textToImage.d.ts.map +1 -1
  41. package/dist/commonjs/types.d.ts +4 -0
  42. package/dist/commonjs/types.d.ts.map +1 -1
  43. package/dist/commonjs/utils/dataUrlFromBlob.d.ts +2 -0
  44. package/dist/commonjs/utils/dataUrlFromBlob.d.ts.map +1 -0
  45. package/dist/commonjs/utils/dataUrlFromBlob.js +9 -0
  46. package/dist/esm/lib/getProviderHelper.d.ts.map +1 -1
  47. package/dist/esm/lib/getProviderHelper.js +8 -4
  48. package/dist/esm/lib/makeRequestOptions.d.ts +2 -1
  49. package/dist/esm/lib/makeRequestOptions.d.ts.map +1 -1
  50. package/dist/esm/lib/makeRequestOptions.js +4 -2
  51. package/dist/esm/package.d.ts +1 -1
  52. package/dist/esm/package.d.ts.map +1 -1
  53. package/dist/esm/package.js +1 -1
  54. package/dist/esm/providers/fal-ai.d.ts +13 -3
  55. package/dist/esm/providers/fal-ai.d.ts.map +1 -1
  56. package/dist/esm/providers/fal-ai.js +46 -1
  57. package/dist/esm/providers/hf-inference.d.ts +3 -2
  58. package/dist/esm/providers/hf-inference.d.ts.map +1 -1
  59. package/dist/esm/providers/hf-inference.js +15 -9
  60. package/dist/esm/providers/hyperbolic.d.ts +2 -2
  61. package/dist/esm/providers/hyperbolic.d.ts.map +1 -1
  62. package/dist/esm/providers/hyperbolic.js +5 -2
  63. package/dist/esm/providers/nebius.d.ts +5 -4
  64. package/dist/esm/providers/nebius.d.ts.map +1 -1
  65. package/dist/esm/providers/nebius.js +11 -8
  66. package/dist/esm/providers/nscale.d.ts +2 -2
  67. package/dist/esm/providers/nscale.d.ts.map +1 -1
  68. package/dist/esm/providers/nscale.js +5 -2
  69. package/dist/esm/providers/providerHelper.d.ts +3 -3
  70. package/dist/esm/providers/providerHelper.d.ts.map +1 -1
  71. package/dist/esm/providers/providerHelper.js +3 -0
  72. package/dist/esm/providers/replicate.d.ts +2 -2
  73. package/dist/esm/providers/replicate.d.ts.map +1 -1
  74. package/dist/esm/providers/replicate.js +5 -2
  75. package/dist/esm/providers/together.d.ts +5 -4
  76. package/dist/esm/providers/together.d.ts.map +1 -1
  77. package/dist/esm/providers/together.js +11 -8
  78. package/dist/esm/providers/wavespeed.d.ts +14 -4
  79. package/dist/esm/providers/wavespeed.d.ts.map +1 -1
  80. package/dist/esm/providers/wavespeed.js +27 -1
  81. package/dist/esm/providers/zai-org.d.ts +2 -2
  82. package/dist/esm/providers/zai-org.d.ts.map +1 -1
  83. package/dist/esm/providers/zai-org.js +3 -1
  84. package/dist/esm/tasks/cv/textToImage.d.ts +5 -2
  85. package/dist/esm/tasks/cv/textToImage.d.ts.map +1 -1
  86. package/dist/esm/types.d.ts +4 -0
  87. package/dist/esm/types.d.ts.map +1 -1
  88. package/dist/esm/utils/dataUrlFromBlob.d.ts +2 -0
  89. package/dist/esm/utils/dataUrlFromBlob.d.ts.map +1 -0
  90. package/dist/esm/utils/dataUrlFromBlob.js +6 -0
  91. package/package.json +2 -2
  92. package/src/lib/getProviderHelper.ts +8 -4
  93. package/src/lib/makeRequestOptions.ts +6 -3
  94. package/src/package.ts +1 -1
  95. package/src/providers/fal-ai.ts +60 -4
  96. package/src/providers/hf-inference.ts +20 -11
  97. package/src/providers/hyperbolic.ts +9 -4
  98. package/src/providers/nebius.ts +19 -13
  99. package/src/providers/nscale.ts +9 -4
  100. package/src/providers/providerHelper.ts +14 -3
  101. package/src/providers/replicate.ts +7 -4
  102. package/src/providers/together.ts +19 -13
  103. package/src/providers/wavespeed.ts +48 -4
  104. package/src/providers/zai-org.ts +5 -3
  105. package/src/tasks/cv/textToImage.ts +6 -2
  106. package/src/types.ts +5 -0
  107. package/src/utils/dataUrlFromBlob.ts +7 -0
@@ -15,10 +15,10 @@
15
15
  * Thanks!
16
16
  */
17
17
  import type { TextToImageInput } from "@huggingface/tasks";
18
- import type { BodyParams } from "../types.js";
18
+ import type { BodyParams, OutputType } from "../types.js";
19
19
  import { omit } from "../utils/omit.js";
20
20
  import { BaseConversationalTask, TaskProviderHelper, type TextToImageTaskHelper } from "./providerHelper.js";
21
- import { InferenceClientProviderOutputError } from "../errors.js";
21
+ import { InferenceClientInputError, InferenceClientProviderOutputError } from "../errors.js";
22
22
 
23
23
  const NSCALE_API_BASE_URL = "https://inference.api.nscale.com";
24
24
 
@@ -40,6 +40,11 @@ export class NscaleTextToImageTask extends TaskProviderHelper implements TextToI
40
40
  }
41
41
 
42
42
  preparePayload(params: BodyParams<TextToImageInput>): Record<string, unknown> {
43
+ if (params.outputType === "url") {
44
+ throw new InferenceClientInputError(
45
+ "nscale provider does not support URL output. Use outputType 'blob', 'dataUrl' or 'json' instead."
46
+ );
47
+ }
43
48
  return {
44
49
  ...omit(params.args, ["inputs", "parameters"]),
45
50
  ...params.args.parameters,
@@ -57,7 +62,7 @@ export class NscaleTextToImageTask extends TaskProviderHelper implements TextToI
57
62
  response: NscaleCloudBase64ImageGeneration,
58
63
  url?: string,
59
64
  headers?: HeadersInit,
60
- outputType?: "url" | "blob" | "json"
65
+ outputType?: OutputType
61
66
  ): Promise<string | Blob | Record<string, unknown>> {
62
67
  if (
63
68
  typeof response === "object" &&
@@ -71,7 +76,7 @@ export class NscaleTextToImageTask extends TaskProviderHelper implements TextToI
71
76
  return { ...response };
72
77
  }
73
78
  const base64Data = response.data[0].b64_json;
74
- if (outputType === "url") {
79
+ if (outputType === "dataUrl") {
75
80
  return `data:image/jpeg;base64,${base64Data}`;
76
81
  }
77
82
  return fetch(`data:image/jpeg;base64,${base64Data}`).then((res) => res.blob());
@@ -51,7 +51,15 @@ import type {
51
51
  import { HF_ROUTER_URL } from "../config.js";
52
52
  import { InferenceClientProviderOutputError, InferenceClientRoutingError } from "../errors.js";
53
53
  import type { AudioToAudioOutput } from "../tasks/audio/audioToAudio.js";
54
- import type { BaseArgs, BodyParams, HeaderParams, InferenceProvider, RequestArgs, UrlParams } from "../types.js";
54
+ import type {
55
+ BaseArgs,
56
+ BodyParams,
57
+ HeaderParams,
58
+ InferenceProvider,
59
+ OutputType,
60
+ RequestArgs,
61
+ UrlParams,
62
+ } from "../types.js";
55
63
  import { toArray } from "../utils/toArray.js";
56
64
  import type { ImageToImageArgs } from "../tasks/cv/imageToImage.js";
57
65
  import type { AutomaticSpeechRecognitionArgs } from "../tasks/audio/automaticSpeechRecognition.js";
@@ -78,7 +86,7 @@ export abstract class TaskProviderHelper {
78
86
  response: unknown,
79
87
  url?: string,
80
88
  headers?: HeadersInit,
81
- outputType?: "url" | "blob"
89
+ outputType?: OutputType
82
90
  ): Promise<unknown>;
83
91
 
84
92
  /**
@@ -115,6 +123,9 @@ export abstract class TaskProviderHelper {
115
123
  makeUrl(params: UrlParams): string {
116
124
  const baseUrl = this.makeBaseUrl(params);
117
125
  const route = this.makeRoute(params).replace(/^\/+/, "");
126
+ if (params.urlTransform) {
127
+ return params.urlTransform(`${baseUrl}/${route}`);
128
+ }
118
129
  return `${baseUrl}/${route}`;
119
130
  }
120
131
 
@@ -141,7 +152,7 @@ export interface TextToImageTaskHelper {
141
152
  response: unknown,
142
153
  url?: string,
143
154
  headers?: HeadersInit,
144
- outputType?: "url" | "blob" | "json"
155
+ outputType?: OutputType
145
156
  ): Promise<string | Blob | Record<string, unknown>>;
146
157
  preparePayload(params: BodyParams<TextToImageInput & BaseArgs>): Record<string, unknown>;
147
158
  }
@@ -16,7 +16,8 @@
16
16
  */
17
17
  import { InferenceClientProviderOutputError } from "../errors.js";
18
18
  import { isUrl } from "../lib/isUrl.js";
19
- import type { BodyParams, HeaderParams, RequestArgs, UrlParams } from "../types.js";
19
+ import type { BodyParams, HeaderParams, OutputType, RequestArgs, UrlParams } from "../types.js";
20
+ import { dataUrlFromBlob } from "../utils/dataUrlFromBlob.js";
20
21
  import { omit } from "../utils/omit.js";
21
22
  import {
22
23
  TaskProviderHelper,
@@ -91,7 +92,7 @@ export class ReplicateTextToImageTask extends ReplicateTask implements TextToIma
91
92
  res: ReplicateOutput | Blob,
92
93
  url?: string,
93
94
  headers?: Record<string, string>,
94
- outputType?: "url" | "blob" | "json"
95
+ outputType?: OutputType
95
96
  ): Promise<string | Blob | Record<string, unknown>> {
96
97
  void url;
97
98
  void headers;
@@ -105,7 +106,8 @@ export class ReplicateTextToImageTask extends ReplicateTask implements TextToIma
105
106
  return res.output;
106
107
  }
107
108
  const urlResponse = await fetch(res.output);
108
- return await urlResponse.blob();
109
+ const blob = await urlResponse.blob();
110
+ return outputType === "dataUrl" ? dataUrlFromBlob(blob) : blob;
109
111
  }
110
112
 
111
113
  // Handle array output
@@ -123,7 +125,8 @@ export class ReplicateTextToImageTask extends ReplicateTask implements TextToIma
123
125
  return res.output[0];
124
126
  }
125
127
  const urlResponse = await fetch(res.output[0]);
126
- return await urlResponse.blob();
128
+ const blob = await urlResponse.blob();
129
+ return outputType === "dataUrl" ? dataUrlFromBlob(blob) : blob;
127
130
  }
128
131
 
129
132
  throw new InferenceClientProviderOutputError("Received malformed response from Replicate text-to-image API");
@@ -15,7 +15,7 @@
15
15
  * Thanks!
16
16
  */
17
17
  import type { ChatCompletionOutput, TextGenerationOutput, TextGenerationOutputFinishReason } from "@huggingface/tasks";
18
- import type { BodyParams } from "../types.js";
18
+ import type { BodyParams, OutputType } from "../types.js";
19
19
  import { omit } from "../utils/omit.js";
20
20
  import {
21
21
  BaseConversationalTask,
@@ -38,9 +38,10 @@ interface TogetherTextCompletionOutput extends Omit<ChatCompletionOutput, "choic
38
38
  }>;
39
39
  }
40
40
 
41
- interface TogetherBase64ImageGeneration {
41
+ interface TogetherImageGeneration {
42
42
  data: Array<{
43
- b64_json: string;
43
+ b64_json?: string;
44
+ url?: string;
44
45
  }>;
45
46
  }
46
47
 
@@ -109,33 +110,38 @@ export class TogetherTextToImageTask extends TaskProviderHelper implements TextT
109
110
  ...omit(params.args, ["inputs", "parameters"]),
110
111
  ...(params.args.parameters as Record<string, unknown>),
111
112
  prompt: params.args.inputs,
112
- response_format: "base64",
113
+ response_format: params.outputType === "url" ? "url" : "base64",
113
114
  model: params.model,
114
115
  };
115
116
  }
116
117
 
117
118
  async getResponse(
118
- response: TogetherBase64ImageGeneration,
119
+ response: TogetherImageGeneration,
119
120
  url?: string,
120
121
  headers?: HeadersInit,
121
- outputType?: "url" | "blob" | "json"
122
+ outputType?: OutputType
122
123
  ): Promise<string | Blob | Record<string, unknown>> {
123
124
  if (
124
125
  typeof response === "object" &&
125
126
  "data" in response &&
126
127
  Array.isArray(response.data) &&
127
- response.data.length > 0 &&
128
- "b64_json" in response.data[0] &&
129
- typeof response.data[0].b64_json === "string"
128
+ response.data.length > 0
130
129
  ) {
131
130
  if (outputType === "json") {
132
131
  return { ...response };
133
132
  }
134
- const base64Data = response.data[0].b64_json;
135
- if (outputType === "url") {
136
- return `data:image/jpeg;base64,${base64Data}`;
133
+
134
+ if ("url" in response.data[0] && typeof response.data[0].url === "string") {
135
+ return response.data[0].url;
136
+ }
137
+
138
+ if ("b64_json" in response.data[0] && typeof response.data[0].b64_json === "string") {
139
+ const base64Data = response.data[0].b64_json;
140
+ if (outputType === "dataUrl") {
141
+ return `data:image/jpeg;base64,${base64Data}`;
142
+ }
143
+ return fetch(`data:image/jpeg;base64,${base64Data}`).then((res) => res.blob());
137
144
  }
138
- return fetch(`data:image/jpeg;base64,${base64Data}`).then((res) => res.blob());
139
145
  }
140
146
 
141
147
  throw new InferenceClientProviderOutputError("Received malformed response from Together text-to-image API");
@@ -1,8 +1,11 @@
1
1
  import type { TextToImageArgs } from "../tasks/cv/textToImage.js";
2
2
  import type { ImageToImageArgs } from "../tasks/cv/imageToImage.js";
3
+ import type { ImageTextToImageArgs } from "../tasks/cv/imageTextToImage.js";
3
4
  import type { TextToVideoArgs } from "../tasks/cv/textToVideo.js";
4
5
  import type { ImageToVideoArgs } from "../tasks/cv/imageToVideo.js";
5
- import type { BodyParams, RequestArgs, UrlParams } from "../types.js";
6
+ import type { BodyParams, OutputType, RequestArgs, UrlParams } from "../types.js";
7
+ import type { ImageTextToVideoArgs } from "../tasks/cv/imageTextToVideo.js";
8
+ import { dataUrlFromBlob } from "../utils/dataUrlFromBlob.js";
6
9
  import { delay } from "../utils/delay.js";
7
10
  import { omit } from "../utils/omit.js";
8
11
  import { base64FromBytes } from "../utils/base64FromBytes.js";
@@ -11,6 +14,8 @@ import type {
11
14
  TextToVideoTaskHelper,
12
15
  ImageToImageTaskHelper,
13
16
  ImageToVideoTaskHelper,
17
+ ImageTextToImageTaskHelper,
18
+ ImageTextToVideoTaskHelper,
14
19
  } from "./providerHelper.js";
15
20
  import { TaskProviderHelper } from "./providerHelper.js";
16
21
  import {
@@ -93,7 +98,14 @@ abstract class WavespeedAITask extends TaskProviderHelper {
93
98
  }
94
99
 
95
100
  preparePayload(
96
- params: BodyParams<ImageToImageArgs | TextToImageArgs | TextToVideoArgs | ImageToVideoArgs>
101
+ params: BodyParams<
102
+ | ImageToImageArgs
103
+ | ImageTextToImageArgs
104
+ | ImageTextToVideoArgs
105
+ | TextToImageArgs
106
+ | TextToVideoArgs
107
+ | ImageToVideoArgs
108
+ >
97
109
  ): Record<string, unknown> {
98
110
  const payload: Record<string, unknown> = {
99
111
  ...omit(params.args, ["inputs", "parameters"]),
@@ -116,7 +128,7 @@ abstract class WavespeedAITask extends TaskProviderHelper {
116
128
  response: WaveSpeedAISubmitTaskResponse,
117
129
  url?: string,
118
130
  headers?: Record<string, string>,
119
- outputType?: "url" | "blob" | "json"
131
+ outputType?: OutputType
120
132
  ): Promise<string | Blob | Record<string, unknown>> {
121
133
  if (!url || !headers) {
122
134
  throw new InferenceClientInputError("Headers are required for WaveSpeed AI API calls");
@@ -179,7 +191,8 @@ abstract class WavespeedAITask extends TaskProviderHelper {
179
191
  }
180
192
  );
181
193
  }
182
- return await mediaResponse.blob();
194
+ const blob = await mediaResponse.blob();
195
+ return outputType === "dataUrl" ? dataUrlFromBlob(blob) : blob;
183
196
  }
184
197
  case "failed": {
185
198
  throw new InferenceClientProviderOutputError(taskResult.error || "Task failed");
@@ -256,3 +269,34 @@ export class WavespeedAIImageToVideoTask extends WavespeedAITask implements Imag
256
269
  return super.getResponse(response, url, headers) as Promise<Blob>;
257
270
  }
258
271
  }
272
+
273
+ // 1x1 fully transparent PNG for use when no input image is provided
274
+ const TRANSPARENT_1PX_PNG_BASE64 =
275
+ "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
276
+
277
+ function getTransparentPngBlob(): Blob {
278
+ const bytes = Uint8Array.from(Buffer.from(TRANSPARENT_1PX_PNG_BASE64, "base64"));
279
+ return new Blob([bytes], { type: "image/png" });
280
+ }
281
+
282
+ export class WavespeedAIImageTextToImageTask extends WavespeedAIImageToImageTask implements ImageTextToImageTaskHelper {
283
+ constructor() {
284
+ super();
285
+ }
286
+
287
+ override async preparePayloadAsync(args: ImageTextToImageArgs): Promise<RequestArgs> {
288
+ const inputs = args.inputs ?? getTransparentPngBlob();
289
+ return super.preparePayloadAsync({ ...args, inputs } as ImageToImageArgs);
290
+ }
291
+ }
292
+
293
+ export class WavespeedAIImageTextToVideoTask extends WavespeedAIImageToVideoTask implements ImageTextToVideoTaskHelper {
294
+ constructor() {
295
+ super();
296
+ }
297
+
298
+ override async preparePayloadAsync(args: ImageTextToVideoArgs): Promise<RequestArgs> {
299
+ const inputs = args.inputs ?? getTransparentPngBlob();
300
+ return super.preparePayloadAsync({ ...args, inputs } as ImageToVideoArgs);
301
+ }
302
+ }
@@ -20,7 +20,8 @@ import {
20
20
  InferenceClientProviderOutputError,
21
21
  } from "../errors.js";
22
22
  import { isUrl } from "../lib/isUrl.js";
23
- import type { BodyParams, HeaderParams } from "../types.js";
23
+ import type { BodyParams, HeaderParams, OutputType } from "../types.js";
24
+ import { dataUrlFromBlob } from "../utils/dataUrlFromBlob.js";
24
25
  import { delay } from "../utils/delay.js";
25
26
  import { omit } from "../utils/omit.js";
26
27
  import { BaseConversationalTask, TaskProviderHelper, type TextToImageTaskHelper } from "./providerHelper.js";
@@ -96,7 +97,7 @@ export class ZaiTextToImageTask extends TaskProviderHelper implements TextToImag
96
97
  response: ZaiTextToImageResponse,
97
98
  url?: string,
98
99
  headers?: Record<string, string>,
99
- outputType?: "url" | "blob" | "json"
100
+ outputType?: OutputType
100
101
  ): Promise<string | Blob | Record<string, unknown>> {
101
102
  if (!url || !headers) {
102
103
  throw new InferenceClientInputError(`URL and headers are required for 'text-to-image' task`);
@@ -179,7 +180,8 @@ export class ZaiTextToImageTask extends TaskProviderHelper implements TextToImag
179
180
  }
180
181
 
181
182
  const imageResponse = await fetch(imageUrl);
182
- return await imageResponse.blob();
183
+ const blob = await imageResponse.blob();
184
+ return outputType === "dataUrl" ? dataUrlFromBlob(blob) : blob;
183
185
  }
184
186
  }
185
187
 
@@ -2,13 +2,13 @@ import type { TextToImageInput } from "@huggingface/tasks";
2
2
  import { resolveProvider } from "../../lib/getInferenceProviderMapping.js";
3
3
  import { getProviderHelper } from "../../lib/getProviderHelper.js";
4
4
  import { makeRequestOptions } from "../../lib/makeRequestOptions.js";
5
- import type { BaseArgs, Options } from "../../types.js";
5
+ import type { BaseArgs, Options, OutputType } from "../../types.js";
6
6
  import { innerRequest } from "../../utils/request.js";
7
7
 
8
8
  export type TextToImageArgs = BaseArgs & TextToImageInput;
9
9
 
10
10
  interface TextToImageOptions extends Options {
11
- outputType?: "url" | "blob" | "json";
11
+ outputType?: OutputType;
12
12
  }
13
13
 
14
14
  /**
@@ -19,6 +19,10 @@ export async function textToImage(
19
19
  args: TextToImageArgs,
20
20
  options?: TextToImageOptions & { outputType: "url" }
21
21
  ): Promise<string>;
22
+ export async function textToImage(
23
+ args: TextToImageArgs,
24
+ options?: TextToImageOptions & { outputType: "dataUrl" }
25
+ ): Promise<string>;
22
26
  export async function textToImage(
23
27
  args: TextToImageArgs,
24
28
  options?: TextToImageOptions & { outputType?: undefined | "blob" }
package/src/types.ts CHANGED
@@ -163,6 +163,7 @@ export type RequestArgs = BaseArgs &
163
163
  | ChatCompletionInput
164
164
  ) & {
165
165
  parameters?: Record<string, unknown>;
166
+ urlTransform?: (url: string) => string;
166
167
  };
167
168
 
168
169
  export type AuthMethod = "none" | "hf-token" | "credentials-include" | "provider-key";
@@ -176,11 +177,15 @@ export interface UrlParams {
176
177
  authMethod: AuthMethod;
177
178
  model: string;
178
179
  task?: InferenceTask;
180
+ urlTransform?: (url: string) => string;
179
181
  }
180
182
 
183
+ export type OutputType = "url" | "dataUrl" | "blob" | "json";
184
+
181
185
  export interface BodyParams<T extends Record<string, unknown> = Record<string, unknown>> {
182
186
  args: T;
183
187
  model: string;
184
188
  mapping?: InferenceProviderMappingEntry | undefined;
185
189
  task?: InferenceTask;
190
+ outputType?: OutputType;
186
191
  }
@@ -0,0 +1,7 @@
1
+ import { base64FromBytes } from "./base64FromBytes.js";
2
+
3
+ export async function dataUrlFromBlob(blob: Blob, mimeType = "image/jpeg"): Promise<string> {
4
+ const buffer = await blob.arrayBuffer();
5
+ const base64 = base64FromBytes(new Uint8Array(buffer));
6
+ return `data:${mimeType};base64,${base64}`;
7
+ }