@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.
- package/dist/commonjs/lib/getProviderHelper.d.ts.map +1 -1
- package/dist/commonjs/lib/getProviderHelper.js +8 -4
- package/dist/commonjs/lib/makeRequestOptions.d.ts +2 -1
- package/dist/commonjs/lib/makeRequestOptions.d.ts.map +1 -1
- package/dist/commonjs/lib/makeRequestOptions.js +4 -2
- package/dist/commonjs/package.d.ts +1 -1
- package/dist/commonjs/package.d.ts.map +1 -1
- package/dist/commonjs/package.js +1 -1
- package/dist/commonjs/providers/fal-ai.d.ts +13 -3
- package/dist/commonjs/providers/fal-ai.d.ts.map +1 -1
- package/dist/commonjs/providers/fal-ai.js +49 -2
- package/dist/commonjs/providers/hf-inference.d.ts +3 -2
- package/dist/commonjs/providers/hf-inference.d.ts.map +1 -1
- package/dist/commonjs/providers/hf-inference.js +14 -8
- package/dist/commonjs/providers/hyperbolic.d.ts +2 -2
- package/dist/commonjs/providers/hyperbolic.d.ts.map +1 -1
- package/dist/commonjs/providers/hyperbolic.js +4 -1
- package/dist/commonjs/providers/nebius.d.ts +5 -4
- package/dist/commonjs/providers/nebius.d.ts.map +1 -1
- package/dist/commonjs/providers/nebius.js +11 -8
- package/dist/commonjs/providers/nscale.d.ts +2 -2
- package/dist/commonjs/providers/nscale.d.ts.map +1 -1
- package/dist/commonjs/providers/nscale.js +4 -1
- package/dist/commonjs/providers/providerHelper.d.ts +3 -3
- package/dist/commonjs/providers/providerHelper.d.ts.map +1 -1
- package/dist/commonjs/providers/providerHelper.js +3 -0
- package/dist/commonjs/providers/replicate.d.ts +2 -2
- package/dist/commonjs/providers/replicate.d.ts.map +1 -1
- package/dist/commonjs/providers/replicate.js +5 -2
- package/dist/commonjs/providers/together.d.ts +5 -4
- package/dist/commonjs/providers/together.d.ts.map +1 -1
- package/dist/commonjs/providers/together.js +11 -8
- package/dist/commonjs/providers/wavespeed.d.ts +14 -4
- package/dist/commonjs/providers/wavespeed.d.ts.map +1 -1
- package/dist/commonjs/providers/wavespeed.js +30 -2
- package/dist/commonjs/providers/zai-org.d.ts +2 -2
- package/dist/commonjs/providers/zai-org.d.ts.map +1 -1
- package/dist/commonjs/providers/zai-org.js +3 -1
- package/dist/commonjs/tasks/cv/textToImage.d.ts +5 -2
- package/dist/commonjs/tasks/cv/textToImage.d.ts.map +1 -1
- package/dist/commonjs/types.d.ts +4 -0
- package/dist/commonjs/types.d.ts.map +1 -1
- package/dist/commonjs/utils/dataUrlFromBlob.d.ts +2 -0
- package/dist/commonjs/utils/dataUrlFromBlob.d.ts.map +1 -0
- package/dist/commonjs/utils/dataUrlFromBlob.js +9 -0
- package/dist/esm/lib/getProviderHelper.d.ts.map +1 -1
- package/dist/esm/lib/getProviderHelper.js +8 -4
- package/dist/esm/lib/makeRequestOptions.d.ts +2 -1
- package/dist/esm/lib/makeRequestOptions.d.ts.map +1 -1
- package/dist/esm/lib/makeRequestOptions.js +4 -2
- package/dist/esm/package.d.ts +1 -1
- package/dist/esm/package.d.ts.map +1 -1
- package/dist/esm/package.js +1 -1
- package/dist/esm/providers/fal-ai.d.ts +13 -3
- package/dist/esm/providers/fal-ai.d.ts.map +1 -1
- package/dist/esm/providers/fal-ai.js +46 -1
- package/dist/esm/providers/hf-inference.d.ts +3 -2
- package/dist/esm/providers/hf-inference.d.ts.map +1 -1
- package/dist/esm/providers/hf-inference.js +15 -9
- package/dist/esm/providers/hyperbolic.d.ts +2 -2
- package/dist/esm/providers/hyperbolic.d.ts.map +1 -1
- package/dist/esm/providers/hyperbolic.js +5 -2
- package/dist/esm/providers/nebius.d.ts +5 -4
- package/dist/esm/providers/nebius.d.ts.map +1 -1
- package/dist/esm/providers/nebius.js +11 -8
- package/dist/esm/providers/nscale.d.ts +2 -2
- package/dist/esm/providers/nscale.d.ts.map +1 -1
- package/dist/esm/providers/nscale.js +5 -2
- package/dist/esm/providers/providerHelper.d.ts +3 -3
- package/dist/esm/providers/providerHelper.d.ts.map +1 -1
- package/dist/esm/providers/providerHelper.js +3 -0
- package/dist/esm/providers/replicate.d.ts +2 -2
- package/dist/esm/providers/replicate.d.ts.map +1 -1
- package/dist/esm/providers/replicate.js +5 -2
- package/dist/esm/providers/together.d.ts +5 -4
- package/dist/esm/providers/together.d.ts.map +1 -1
- package/dist/esm/providers/together.js +11 -8
- package/dist/esm/providers/wavespeed.d.ts +14 -4
- package/dist/esm/providers/wavespeed.d.ts.map +1 -1
- package/dist/esm/providers/wavespeed.js +27 -1
- package/dist/esm/providers/zai-org.d.ts +2 -2
- package/dist/esm/providers/zai-org.d.ts.map +1 -1
- package/dist/esm/providers/zai-org.js +3 -1
- package/dist/esm/tasks/cv/textToImage.d.ts +5 -2
- package/dist/esm/tasks/cv/textToImage.d.ts.map +1 -1
- package/dist/esm/types.d.ts +4 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils/dataUrlFromBlob.d.ts +2 -0
- package/dist/esm/utils/dataUrlFromBlob.d.ts.map +1 -0
- package/dist/esm/utils/dataUrlFromBlob.js +6 -0
- package/package.json +2 -2
- package/src/lib/getProviderHelper.ts +8 -4
- package/src/lib/makeRequestOptions.ts +6 -3
- package/src/package.ts +1 -1
- package/src/providers/fal-ai.ts +60 -4
- package/src/providers/hf-inference.ts +20 -11
- package/src/providers/hyperbolic.ts +9 -4
- package/src/providers/nebius.ts +19 -13
- package/src/providers/nscale.ts +9 -4
- package/src/providers/providerHelper.ts +14 -3
- package/src/providers/replicate.ts +7 -4
- package/src/providers/together.ts +19 -13
- package/src/providers/wavespeed.ts +48 -4
- package/src/providers/zai-org.ts +5 -3
- package/src/tasks/cv/textToImage.ts +6 -2
- package/src/types.ts +5 -0
- package/src/utils/dataUrlFromBlob.ts +7 -0
package/src/providers/nscale.ts
CHANGED
|
@@ -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?:
|
|
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 === "
|
|
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 {
|
|
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?:
|
|
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?:
|
|
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?:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
41
|
+
interface TogetherImageGeneration {
|
|
42
42
|
data: Array<{
|
|
43
|
-
b64_json
|
|
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:
|
|
119
|
+
response: TogetherImageGeneration,
|
|
119
120
|
url?: string,
|
|
120
121
|
headers?: HeadersInit,
|
|
121
|
-
outputType?:
|
|
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
|
-
|
|
135
|
-
if (
|
|
136
|
-
return
|
|
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<
|
|
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?:
|
|
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
|
-
|
|
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
|
+
}
|
package/src/providers/zai-org.ts
CHANGED
|
@@ -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?:
|
|
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
|
-
|
|
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?:
|
|
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
|
+
}
|