@huggingface/inference 4.13.4 → 4.13.6
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 +3 -1
- package/dist/commonjs/lib/getProviderHelper.d.ts.map +1 -1
- package/dist/commonjs/lib/getProviderHelper.js +1 -0
- package/dist/commonjs/package.d.ts +1 -1
- package/dist/commonjs/package.js +1 -1
- package/dist/commonjs/providers/providerHelper.d.ts +13 -1
- package/dist/commonjs/providers/providerHelper.d.ts.map +1 -1
- package/dist/commonjs/providers/zai-org.d.ts +16 -18
- package/dist/commonjs/providers/zai-org.d.ts.map +1 -1
- package/dist/commonjs/providers/zai-org.js +90 -1
- package/dist/commonjs/snippets/getInferenceSnippets.d.ts.map +1 -1
- package/dist/commonjs/snippets/getInferenceSnippets.js +5 -0
- package/dist/commonjs/tasks/cv/imageTextToImage.d.ts +9 -0
- package/dist/commonjs/tasks/cv/imageTextToImage.d.ts.map +1 -0
- package/dist/commonjs/tasks/cv/imageTextToImage.js +20 -0
- package/dist/commonjs/tasks/cv/imageTextToVideo.d.ts +9 -0
- package/dist/commonjs/tasks/cv/imageTextToVideo.d.ts.map +1 -0
- package/dist/commonjs/tasks/cv/imageTextToVideo.js +20 -0
- package/dist/commonjs/tasks/index.d.ts +2 -0
- package/dist/commonjs/tasks/index.d.ts.map +1 -1
- package/dist/commonjs/tasks/index.js +2 -0
- package/dist/esm/lib/getProviderHelper.d.ts +3 -1
- package/dist/esm/lib/getProviderHelper.d.ts.map +1 -1
- package/dist/esm/lib/getProviderHelper.js +1 -0
- package/dist/esm/package.d.ts +1 -1
- package/dist/esm/package.js +1 -1
- package/dist/esm/providers/providerHelper.d.ts +13 -1
- package/dist/esm/providers/providerHelper.d.ts.map +1 -1
- package/dist/esm/providers/zai-org.d.ts +16 -18
- package/dist/esm/providers/zai-org.d.ts.map +1 -1
- package/dist/esm/providers/zai-org.js +89 -1
- package/dist/esm/snippets/getInferenceSnippets.d.ts.map +1 -1
- package/dist/esm/snippets/getInferenceSnippets.js +5 -0
- package/dist/esm/tasks/cv/imageTextToImage.d.ts +9 -0
- package/dist/esm/tasks/cv/imageTextToImage.d.ts.map +1 -0
- package/dist/esm/tasks/cv/imageTextToImage.js +17 -0
- package/dist/esm/tasks/cv/imageTextToVideo.d.ts +9 -0
- package/dist/esm/tasks/cv/imageTextToVideo.d.ts.map +1 -0
- package/dist/esm/tasks/cv/imageTextToVideo.js +17 -0
- package/dist/esm/tasks/index.d.ts +2 -0
- package/dist/esm/tasks/index.d.ts.map +1 -1
- package/dist/esm/tasks/index.js +2 -0
- package/package.json +3 -3
- package/src/lib/getProviderHelper.ts +11 -0
- package/src/package.ts +1 -1
- package/src/providers/providerHelper.ts +16 -0
- package/src/providers/zai-org.ts +147 -2
- package/src/snippets/getInferenceSnippets.ts +5 -0
- package/src/tasks/cv/imageTextToImage.ts +22 -0
- package/src/tasks/cv/imageTextToVideo.ts +22 -0
- package/src/tasks/index.ts +2 -0
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* https://huggingface.co/api/partners/zai-org/models
|
|
5
|
-
*
|
|
6
|
-
* This is a publicly available mapping.
|
|
7
|
-
*
|
|
8
|
-
* If you want to try to run inference for a new model locally before it's registered on huggingface.co,
|
|
9
|
-
* you can add it to the dictionary "HARDCODED_MODEL_ID_MAPPING" in consts.ts, for dev purposes.
|
|
10
|
-
*
|
|
11
|
-
* - If you work at zai and want to update this mapping, please use the model mapping API we provide on huggingface.co
|
|
12
|
-
* - If you're a community member and want to add a new supported HF model to zai, please open an issue on the present repo
|
|
13
|
-
* and we will tag zai team members.
|
|
14
|
-
*
|
|
15
|
-
* Thanks!
|
|
16
|
-
*/
|
|
17
|
-
import { BaseConversationalTask } from "./providerHelper.js";
|
|
18
|
-
import type { HeaderParams } from "../types.js";
|
|
1
|
+
import type { BodyParams, HeaderParams } from "../types.js";
|
|
2
|
+
import { BaseConversationalTask, TaskProviderHelper, type TextToImageTaskHelper } from "./providerHelper.js";
|
|
19
3
|
export declare class ZaiConversationalTask extends BaseConversationalTask {
|
|
20
4
|
constructor();
|
|
21
5
|
prepareHeaders(params: HeaderParams, binary: boolean): Record<string, string>;
|
|
22
6
|
makeRoute(): string;
|
|
23
7
|
}
|
|
8
|
+
interface ZaiTextToImageResponse {
|
|
9
|
+
model: string;
|
|
10
|
+
id: string;
|
|
11
|
+
request_id: string;
|
|
12
|
+
task_status: "PROCESSING" | "SUCCESS" | "FAIL";
|
|
13
|
+
}
|
|
14
|
+
export declare class ZaiTextToImageTask extends TaskProviderHelper implements TextToImageTaskHelper {
|
|
15
|
+
constructor();
|
|
16
|
+
prepareHeaders(params: HeaderParams, binary: boolean): Record<string, string>;
|
|
17
|
+
makeRoute(): string;
|
|
18
|
+
preparePayload(params: BodyParams): Record<string, unknown>;
|
|
19
|
+
getResponse(response: ZaiTextToImageResponse, url?: string, headers?: Record<string, string>, outputType?: "url" | "blob" | "json"): Promise<string | Blob | Record<string, unknown>>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
24
22
|
//# sourceMappingURL=zai-org.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zai-org.d.ts","sourceRoot":"","sources":["../../../src/providers/zai-org.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zai-org.d.ts","sourceRoot":"","sources":["../../../src/providers/zai-org.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG5D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAI7G,qBAAa,qBAAsB,SAAQ,sBAAsB;;IAKvD,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO7E,SAAS,IAAI,MAAM;CAG5B;AAED,UAAU,sBAAsB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;CAC/C;AAaD,qBAAa,kBAAmB,SAAQ,kBAAmB,YAAW,qBAAqB;;IAKjF,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYtF,SAAS,IAAI,MAAM;IAInB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IASrD,WAAW,CAChB,QAAQ,EAAE,sBAAsB,EAChC,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAClC,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAsFnD"}
|
|
@@ -14,7 +14,11 @@
|
|
|
14
14
|
*
|
|
15
15
|
* Thanks!
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
17
|
+
import { InferenceClientProviderApiError, InferenceClientProviderOutputError } from "../errors.js";
|
|
18
|
+
import { isUrl } from "../lib/isUrl.js";
|
|
19
|
+
import { delay } from "../utils/delay.js";
|
|
20
|
+
import { omit } from "../utils/omit.js";
|
|
21
|
+
import { BaseConversationalTask, TaskProviderHelper } from "./providerHelper.js";
|
|
18
22
|
const ZAI_API_BASE_URL = "https://api.z.ai";
|
|
19
23
|
export class ZaiConversationalTask extends BaseConversationalTask {
|
|
20
24
|
constructor() {
|
|
@@ -30,3 +34,87 @@ export class ZaiConversationalTask extends BaseConversationalTask {
|
|
|
30
34
|
return "/api/paas/v4/chat/completions";
|
|
31
35
|
}
|
|
32
36
|
}
|
|
37
|
+
const MAX_POLL_ATTEMPTS = 60;
|
|
38
|
+
const POLL_INTERVAL_MS = 5000;
|
|
39
|
+
export class ZaiTextToImageTask extends TaskProviderHelper {
|
|
40
|
+
constructor() {
|
|
41
|
+
super("zai-org", ZAI_API_BASE_URL);
|
|
42
|
+
}
|
|
43
|
+
prepareHeaders(params, binary) {
|
|
44
|
+
const headers = {
|
|
45
|
+
Authorization: `Bearer ${params.accessToken}`,
|
|
46
|
+
"x-source-channel": "hugging_face",
|
|
47
|
+
"accept-language": "en-US,en",
|
|
48
|
+
};
|
|
49
|
+
if (!binary) {
|
|
50
|
+
headers["Content-Type"] = "application/json";
|
|
51
|
+
}
|
|
52
|
+
return headers;
|
|
53
|
+
}
|
|
54
|
+
makeRoute() {
|
|
55
|
+
return "/api/paas/v4/async/images/generations";
|
|
56
|
+
}
|
|
57
|
+
preparePayload(params) {
|
|
58
|
+
return {
|
|
59
|
+
...omit(params.args, ["inputs", "parameters"]),
|
|
60
|
+
...params.args.parameters,
|
|
61
|
+
model: params.model,
|
|
62
|
+
prompt: params.args.inputs,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
async getResponse(response, url, headers, outputType) {
|
|
66
|
+
void url;
|
|
67
|
+
if (typeof response !== "object" ||
|
|
68
|
+
!response ||
|
|
69
|
+
!("task_status" in response) ||
|
|
70
|
+
!("id" in response) ||
|
|
71
|
+
typeof response.id !== "string") {
|
|
72
|
+
throw new InferenceClientProviderOutputError(`Received malformed response from ZAI text-to-image API: expected { id: string, task_status: string }, got: ${JSON.stringify(response)}`);
|
|
73
|
+
}
|
|
74
|
+
if (response.task_status === "FAIL") {
|
|
75
|
+
throw new InferenceClientProviderOutputError("ZAI API returned task status: FAIL");
|
|
76
|
+
}
|
|
77
|
+
const taskId = response.id;
|
|
78
|
+
const pollUrl = `${ZAI_API_BASE_URL}/api/paas/v4/async-result/${taskId}`;
|
|
79
|
+
const pollHeaders = {
|
|
80
|
+
"x-source-channel": "hugging_face",
|
|
81
|
+
"accept-language": "en-US,en",
|
|
82
|
+
};
|
|
83
|
+
if (headers && headers["Authorization"]) {
|
|
84
|
+
pollHeaders["Authorization"] = headers["Authorization"];
|
|
85
|
+
}
|
|
86
|
+
for (let attempt = 0; attempt < MAX_POLL_ATTEMPTS; attempt++) {
|
|
87
|
+
await delay(POLL_INTERVAL_MS);
|
|
88
|
+
const resp = await fetch(pollUrl, {
|
|
89
|
+
method: "GET",
|
|
90
|
+
headers: pollHeaders,
|
|
91
|
+
});
|
|
92
|
+
if (!resp.ok) {
|
|
93
|
+
throw new InferenceClientProviderApiError(`Failed to fetch result from ZAI text-to-image API: ${resp.status}`, { url: pollUrl, method: "GET" }, { requestId: resp.headers.get("x-request-id") ?? "", status: resp.status, body: await resp.text() });
|
|
94
|
+
}
|
|
95
|
+
const result = await resp.json();
|
|
96
|
+
if (result.task_status === "FAIL") {
|
|
97
|
+
throw new InferenceClientProviderOutputError("ZAI text-to-image API task failed");
|
|
98
|
+
}
|
|
99
|
+
if (result.task_status === "SUCCESS") {
|
|
100
|
+
if (!result.image_result ||
|
|
101
|
+
!Array.isArray(result.image_result) ||
|
|
102
|
+
result.image_result.length === 0 ||
|
|
103
|
+
typeof result.image_result[0]?.url !== "string" ||
|
|
104
|
+
!isUrl(result.image_result[0].url)) {
|
|
105
|
+
throw new InferenceClientProviderOutputError(`Received malformed response from ZAI text-to-image API: expected { image_result: Array<{ url: string }> }, got: ${JSON.stringify(result)}`);
|
|
106
|
+
}
|
|
107
|
+
const imageUrl = result.image_result[0].url;
|
|
108
|
+
if (outputType === "json") {
|
|
109
|
+
return { ...result };
|
|
110
|
+
}
|
|
111
|
+
if (outputType === "url") {
|
|
112
|
+
return imageUrl;
|
|
113
|
+
}
|
|
114
|
+
const imageResponse = await fetch(imageUrl);
|
|
115
|
+
return await imageResponse.blob();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
throw new InferenceClientProviderOutputError(`Timed out while waiting for the result from ZAI API - aborting after ${MAX_POLL_ATTEMPTS} attempts`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInferenceSnippets.d.ts","sourceRoot":"","sources":["../../../src/snippets/getInferenceSnippets.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EAGrB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EAAE,6BAA6B,EAAE,yBAAyB,EAA8B,MAAM,aAAa,CAAC;AAKxH,MAAM,MAAM,uBAAuB,GAAG;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"getInferenceSnippets.d.ts","sourceRoot":"","sources":["../../../src/snippets/getInferenceSnippets.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EAGrB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EAAE,6BAA6B,EAAE,yBAAyB,EAA8B,MAAM,aAAa,CAAC;AAKxH,MAAM,MAAM,uBAAuB,GAAG;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA4Y5B,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,yBAAyB,EACnC,wBAAwB,CAAC,EAAE,6BAA6B,EACxD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,gBAAgB,EAAE,CAIpB"}
|
|
@@ -41,7 +41,10 @@ const HF_PYTHON_METHODS = {
|
|
|
41
41
|
"image-classification": "image_classification",
|
|
42
42
|
"image-segmentation": "image_segmentation",
|
|
43
43
|
"image-to-image": "image_to_image",
|
|
44
|
+
"image-to-video": "image_to_video",
|
|
44
45
|
"image-to-text": "image_to_text",
|
|
46
|
+
"image-text-to-image": "image_text_to_image",
|
|
47
|
+
"image-text-to-video": "image_text_to_video",
|
|
45
48
|
"object-detection": "object_detection",
|
|
46
49
|
"question-answering": "question_answering",
|
|
47
50
|
"sentence-similarity": "sentence_similarity",
|
|
@@ -274,7 +277,9 @@ const snippets = {
|
|
|
274
277
|
"fill-mask": snippetGenerator("basic"),
|
|
275
278
|
"image-classification": snippetGenerator("basicImage"),
|
|
276
279
|
"image-segmentation": snippetGenerator("basicImage"),
|
|
280
|
+
"image-text-to-image": snippetGenerator("imageToImage", prepareImageToImageInput),
|
|
277
281
|
"image-text-to-text": snippetGenerator("conversational"),
|
|
282
|
+
"image-text-to-video": snippetGenerator("imageToVideo", prepareImageToImageInput),
|
|
278
283
|
"image-to-image": snippetGenerator("imageToImage", prepareImageToImageInput),
|
|
279
284
|
"image-to-text": snippetGenerator("basicImage"),
|
|
280
285
|
"image-to-video": snippetGenerator("imageToVideo", prepareImageToImageInput),
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ImageTextToImageInput } from "@huggingface/tasks";
|
|
2
|
+
import type { BaseArgs, Options } from "../../types.js";
|
|
3
|
+
export type ImageTextToImageArgs = BaseArgs & ImageTextToImageInput;
|
|
4
|
+
/**
|
|
5
|
+
* This task takes an image and text input and outputs a new generated image.
|
|
6
|
+
* Recommended model: black-forest-labs/FLUX.2-dev
|
|
7
|
+
*/
|
|
8
|
+
export declare function imageTextToImage(args: ImageTextToImageArgs, options?: Options): Promise<Blob>;
|
|
9
|
+
//# sourceMappingURL=imageTextToImage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageTextToImage.d.ts","sourceRoot":"","sources":["../../../../src/tasks/cv/imageTextToImage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGxD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,qBAAqB,CAAC;AAEpE;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CASnG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { resolveProvider } from "../../lib/getInferenceProviderMapping.js";
|
|
2
|
+
import { getProviderHelper } from "../../lib/getProviderHelper.js";
|
|
3
|
+
import { innerRequest } from "../../utils/request.js";
|
|
4
|
+
/**
|
|
5
|
+
* This task takes an image and text input and outputs a new generated image.
|
|
6
|
+
* Recommended model: black-forest-labs/FLUX.2-dev
|
|
7
|
+
*/
|
|
8
|
+
export async function imageTextToImage(args, options) {
|
|
9
|
+
const provider = await resolveProvider(args.provider, args.model, args.endpointUrl);
|
|
10
|
+
const providerHelper = getProviderHelper(provider, "image-text-to-image");
|
|
11
|
+
const payload = await providerHelper.preparePayloadAsync(args);
|
|
12
|
+
const { data: res, requestContext } = await innerRequest(payload, providerHelper, {
|
|
13
|
+
...options,
|
|
14
|
+
task: "image-text-to-image",
|
|
15
|
+
});
|
|
16
|
+
return providerHelper.getResponse(res, requestContext.url, requestContext.info.headers);
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ImageTextToVideoInput } from "@huggingface/tasks";
|
|
2
|
+
import type { BaseArgs, Options } from "../../types.js";
|
|
3
|
+
export type ImageTextToVideoArgs = BaseArgs & ImageTextToVideoInput;
|
|
4
|
+
/**
|
|
5
|
+
* This task takes an image and text input and outputs a generated video.
|
|
6
|
+
* Recommended model: Lightricks/LTX-Video
|
|
7
|
+
*/
|
|
8
|
+
export declare function imageTextToVideo(args: ImageTextToVideoArgs, options?: Options): Promise<Blob>;
|
|
9
|
+
//# sourceMappingURL=imageTextToVideo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageTextToVideo.d.ts","sourceRoot":"","sources":["../../../../src/tasks/cv/imageTextToVideo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGxD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,qBAAqB,CAAC;AAEpE;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CASnG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { resolveProvider } from "../../lib/getInferenceProviderMapping.js";
|
|
2
|
+
import { getProviderHelper } from "../../lib/getProviderHelper.js";
|
|
3
|
+
import { innerRequest } from "../../utils/request.js";
|
|
4
|
+
/**
|
|
5
|
+
* This task takes an image and text input and outputs a generated video.
|
|
6
|
+
* Recommended model: Lightricks/LTX-Video
|
|
7
|
+
*/
|
|
8
|
+
export async function imageTextToVideo(args, options) {
|
|
9
|
+
const provider = await resolveProvider(args.provider, args.model, args.endpointUrl);
|
|
10
|
+
const providerHelper = getProviderHelper(provider, "image-text-to-video");
|
|
11
|
+
const payload = await providerHelper.preparePayloadAsync(args);
|
|
12
|
+
const { data: res, requestContext } = await innerRequest(payload, providerHelper, {
|
|
13
|
+
...options,
|
|
14
|
+
task: "image-text-to-video",
|
|
15
|
+
});
|
|
16
|
+
return providerHelper.getResponse(res, requestContext.url, requestContext.info.headers);
|
|
17
|
+
}
|
|
@@ -9,6 +9,8 @@ export * from "./cv/imageSegmentation.js";
|
|
|
9
9
|
export * from "./cv/imageToImage.js";
|
|
10
10
|
export * from "./cv/imageToText.js";
|
|
11
11
|
export * from "./cv/imageToVideo.js";
|
|
12
|
+
export * from "./cv/imageTextToImage.js";
|
|
13
|
+
export * from "./cv/imageTextToVideo.js";
|
|
12
14
|
export * from "./cv/objectDetection.js";
|
|
13
15
|
export * from "./cv/textToImage.js";
|
|
14
16
|
export * from "./cv/textToVideo.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tasks/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAG7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AAGxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qCAAqC,CAAC;AAGpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAGhD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AAGxD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tasks/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAG7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AAGxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qCAAqC,CAAC;AAGpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAGhD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AAGxD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC"}
|
package/dist/esm/tasks/index.js
CHANGED
|
@@ -12,6 +12,8 @@ export * from "./cv/imageSegmentation.js";
|
|
|
12
12
|
export * from "./cv/imageToImage.js";
|
|
13
13
|
export * from "./cv/imageToText.js";
|
|
14
14
|
export * from "./cv/imageToVideo.js";
|
|
15
|
+
export * from "./cv/imageTextToImage.js";
|
|
16
|
+
export * from "./cv/imageTextToVideo.js";
|
|
15
17
|
export * from "./cv/objectDetection.js";
|
|
16
18
|
export * from "./cv/textToImage.js";
|
|
17
19
|
export * from "./cv/textToVideo.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@huggingface/inference",
|
|
3
|
-
"version": "4.13.
|
|
3
|
+
"version": "4.13.6",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Hugging Face and Tim Mikeladze <tim.mikeladze@gmail.com>",
|
|
6
6
|
"description": "Typescript client for the Hugging Face Inference Providers and Inference Endpoints",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
},
|
|
41
41
|
"type": "module",
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@huggingface/tasks": "^0.19.
|
|
44
|
-
"@huggingface/jinja": "^0.5.
|
|
43
|
+
"@huggingface/tasks": "^0.19.76",
|
|
44
|
+
"@huggingface/jinja": "^0.5.3"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/node": "18.13.0"
|
|
@@ -28,6 +28,8 @@ import type {
|
|
|
28
28
|
ImageToImageTaskHelper,
|
|
29
29
|
ImageToTextTaskHelper,
|
|
30
30
|
ImageToVideoTaskHelper,
|
|
31
|
+
ImageTextToImageTaskHelper,
|
|
32
|
+
ImageTextToVideoTaskHelper,
|
|
31
33
|
ObjectDetectionTaskHelper,
|
|
32
34
|
QuestionAnsweringTaskHelper,
|
|
33
35
|
SentenceSimilarityTaskHelper,
|
|
@@ -182,6 +184,7 @@ export const PROVIDERS: Record<InferenceProvider, Partial<Record<InferenceTask,
|
|
|
182
184
|
},
|
|
183
185
|
"zai-org": {
|
|
184
186
|
conversational: new Zai.ZaiConversationalTask(),
|
|
187
|
+
"text-to-image": new Zai.ZaiTextToImageTask(),
|
|
185
188
|
},
|
|
186
189
|
};
|
|
187
190
|
|
|
@@ -276,6 +279,14 @@ export function getProviderHelper(
|
|
|
276
279
|
provider: InferenceProviderOrPolicy,
|
|
277
280
|
task: "image-to-video"
|
|
278
281
|
): ImageToVideoTaskHelper & TaskProviderHelper;
|
|
282
|
+
export function getProviderHelper(
|
|
283
|
+
provider: InferenceProviderOrPolicy,
|
|
284
|
+
task: "image-text-to-image"
|
|
285
|
+
): ImageTextToImageTaskHelper & TaskProviderHelper;
|
|
286
|
+
export function getProviderHelper(
|
|
287
|
+
provider: InferenceProviderOrPolicy,
|
|
288
|
+
task: "image-text-to-video"
|
|
289
|
+
): ImageTextToVideoTaskHelper & TaskProviderHelper;
|
|
279
290
|
export function getProviderHelper(
|
|
280
291
|
provider: InferenceProviderOrPolicy,
|
|
281
292
|
task: "sentence-similarity"
|
package/src/package.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Generated file from package.json. Issues importing JSON directly when publishing on commonjs/ESM - see https://github.com/microsoft/TypeScript/issues/51783
|
|
2
|
-
export const PACKAGE_VERSION = "4.13.
|
|
2
|
+
export const PACKAGE_VERSION = "4.13.6";
|
|
3
3
|
export const PACKAGE_NAME = "@huggingface/inference";
|
|
@@ -19,6 +19,8 @@ import type {
|
|
|
19
19
|
ImageToTextInput,
|
|
20
20
|
ImageToTextOutput,
|
|
21
21
|
ImageToVideoInput,
|
|
22
|
+
ImageTextToImageInput,
|
|
23
|
+
ImageTextToVideoInput,
|
|
22
24
|
ObjectDetectionInput,
|
|
23
25
|
ObjectDetectionOutput,
|
|
24
26
|
QuestionAnsweringInput,
|
|
@@ -54,6 +56,8 @@ import { toArray } from "../utils/toArray.js";
|
|
|
54
56
|
import type { ImageToImageArgs } from "../tasks/cv/imageToImage.js";
|
|
55
57
|
import type { AutomaticSpeechRecognitionArgs } from "../tasks/audio/automaticSpeechRecognition.js";
|
|
56
58
|
import type { ImageToVideoArgs } from "../tasks/cv/imageToVideo.js";
|
|
59
|
+
import type { ImageTextToImageArgs } from "../tasks/cv/imageTextToImage.js";
|
|
60
|
+
import type { ImageTextToVideoArgs } from "../tasks/cv/imageTextToVideo.js";
|
|
57
61
|
import type { ImageSegmentationArgs } from "../tasks/cv/imageSegmentation.js";
|
|
58
62
|
|
|
59
63
|
/**
|
|
@@ -159,6 +163,18 @@ export interface ImageToVideoTaskHelper {
|
|
|
159
163
|
preparePayloadAsync(args: ImageToVideoArgs): Promise<RequestArgs>;
|
|
160
164
|
}
|
|
161
165
|
|
|
166
|
+
export interface ImageTextToImageTaskHelper {
|
|
167
|
+
getResponse(response: unknown, url?: string, headers?: HeadersInit): Promise<Blob>;
|
|
168
|
+
preparePayload(params: BodyParams<ImageTextToImageInput & BaseArgs>): Record<string, unknown>;
|
|
169
|
+
preparePayloadAsync(args: ImageTextToImageArgs): Promise<RequestArgs>;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export interface ImageTextToVideoTaskHelper {
|
|
173
|
+
getResponse(response: unknown, url?: string, headers?: HeadersInit): Promise<Blob>;
|
|
174
|
+
preparePayload(params: BodyParams<ImageTextToVideoInput & BaseArgs>): Record<string, unknown>;
|
|
175
|
+
preparePayloadAsync(args: ImageTextToVideoArgs): Promise<RequestArgs>;
|
|
176
|
+
}
|
|
177
|
+
|
|
162
178
|
export interface ImageSegmentationTaskHelper {
|
|
163
179
|
getResponse(response: unknown, url?: string, headers?: HeadersInit): Promise<ImageSegmentationOutput>;
|
|
164
180
|
preparePayload(params: BodyParams<ImageSegmentationInput & BaseArgs>): Record<string, unknown> | BodyInit;
|
package/src/providers/zai-org.ts
CHANGED
|
@@ -14,8 +14,12 @@
|
|
|
14
14
|
*
|
|
15
15
|
* Thanks!
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
18
|
-
import
|
|
17
|
+
import { InferenceClientProviderApiError, InferenceClientProviderOutputError } from "../errors.js";
|
|
18
|
+
import { isUrl } from "../lib/isUrl.js";
|
|
19
|
+
import type { BodyParams, HeaderParams } from "../types.js";
|
|
20
|
+
import { delay } from "../utils/delay.js";
|
|
21
|
+
import { omit } from "../utils/omit.js";
|
|
22
|
+
import { BaseConversationalTask, TaskProviderHelper, type TextToImageTaskHelper } from "./providerHelper.js";
|
|
19
23
|
|
|
20
24
|
const ZAI_API_BASE_URL = "https://api.z.ai";
|
|
21
25
|
|
|
@@ -35,3 +39,144 @@ export class ZaiConversationalTask extends BaseConversationalTask {
|
|
|
35
39
|
return "/api/paas/v4/chat/completions";
|
|
36
40
|
}
|
|
37
41
|
}
|
|
42
|
+
|
|
43
|
+
interface ZaiTextToImageResponse {
|
|
44
|
+
model: string;
|
|
45
|
+
id: string;
|
|
46
|
+
request_id: string;
|
|
47
|
+
task_status: "PROCESSING" | "SUCCESS" | "FAIL";
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
interface ZaiAsyncResultResponse {
|
|
51
|
+
image_result?: Array<{ url: string }>;
|
|
52
|
+
model: string;
|
|
53
|
+
id: string;
|
|
54
|
+
request_id: string;
|
|
55
|
+
task_status: "PROCESSING" | "SUCCESS" | "FAIL";
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const MAX_POLL_ATTEMPTS = 60;
|
|
59
|
+
const POLL_INTERVAL_MS = 5000;
|
|
60
|
+
|
|
61
|
+
export class ZaiTextToImageTask extends TaskProviderHelper implements TextToImageTaskHelper {
|
|
62
|
+
constructor() {
|
|
63
|
+
super("zai-org", ZAI_API_BASE_URL);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
override prepareHeaders(params: HeaderParams, binary: boolean): Record<string, string> {
|
|
67
|
+
const headers: Record<string, string> = {
|
|
68
|
+
Authorization: `Bearer ${params.accessToken}`,
|
|
69
|
+
"x-source-channel": "hugging_face",
|
|
70
|
+
"accept-language": "en-US,en",
|
|
71
|
+
};
|
|
72
|
+
if (!binary) {
|
|
73
|
+
headers["Content-Type"] = "application/json";
|
|
74
|
+
}
|
|
75
|
+
return headers;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
makeRoute(): string {
|
|
79
|
+
return "/api/paas/v4/async/images/generations";
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
preparePayload(params: BodyParams): Record<string, unknown> {
|
|
83
|
+
return {
|
|
84
|
+
...omit(params.args, ["inputs", "parameters"]),
|
|
85
|
+
...(params.args.parameters as Record<string, unknown>),
|
|
86
|
+
model: params.model,
|
|
87
|
+
prompt: params.args.inputs,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async getResponse(
|
|
92
|
+
response: ZaiTextToImageResponse,
|
|
93
|
+
url?: string,
|
|
94
|
+
headers?: Record<string, string>,
|
|
95
|
+
outputType?: "url" | "blob" | "json"
|
|
96
|
+
): Promise<string | Blob | Record<string, unknown>> {
|
|
97
|
+
void url;
|
|
98
|
+
if (
|
|
99
|
+
typeof response !== "object" ||
|
|
100
|
+
!response ||
|
|
101
|
+
!("task_status" in response) ||
|
|
102
|
+
!("id" in response) ||
|
|
103
|
+
typeof response.id !== "string"
|
|
104
|
+
) {
|
|
105
|
+
throw new InferenceClientProviderOutputError(
|
|
106
|
+
`Received malformed response from ZAI text-to-image API: expected { id: string, task_status: string }, got: ${JSON.stringify(
|
|
107
|
+
response
|
|
108
|
+
)}`
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (response.task_status === "FAIL") {
|
|
113
|
+
throw new InferenceClientProviderOutputError("ZAI API returned task status: FAIL");
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const taskId = response.id;
|
|
117
|
+
const pollUrl = `${ZAI_API_BASE_URL}/api/paas/v4/async-result/${taskId}`;
|
|
118
|
+
|
|
119
|
+
const pollHeaders: Record<string, string> = {
|
|
120
|
+
"x-source-channel": "hugging_face",
|
|
121
|
+
"accept-language": "en-US,en",
|
|
122
|
+
};
|
|
123
|
+
if (headers && headers["Authorization"]) {
|
|
124
|
+
pollHeaders["Authorization"] = headers["Authorization"];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
for (let attempt = 0; attempt < MAX_POLL_ATTEMPTS; attempt++) {
|
|
128
|
+
await delay(POLL_INTERVAL_MS);
|
|
129
|
+
|
|
130
|
+
const resp = await fetch(pollUrl, {
|
|
131
|
+
method: "GET",
|
|
132
|
+
headers: pollHeaders,
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
if (!resp.ok) {
|
|
136
|
+
throw new InferenceClientProviderApiError(
|
|
137
|
+
`Failed to fetch result from ZAI text-to-image API: ${resp.status}`,
|
|
138
|
+
{ url: pollUrl, method: "GET" },
|
|
139
|
+
{ requestId: resp.headers.get("x-request-id") ?? "", status: resp.status, body: await resp.text() }
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const result: ZaiAsyncResultResponse = await resp.json();
|
|
144
|
+
|
|
145
|
+
if (result.task_status === "FAIL") {
|
|
146
|
+
throw new InferenceClientProviderOutputError("ZAI text-to-image API task failed");
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (result.task_status === "SUCCESS") {
|
|
150
|
+
if (
|
|
151
|
+
!result.image_result ||
|
|
152
|
+
!Array.isArray(result.image_result) ||
|
|
153
|
+
result.image_result.length === 0 ||
|
|
154
|
+
typeof result.image_result[0]?.url !== "string" ||
|
|
155
|
+
!isUrl(result.image_result[0].url)
|
|
156
|
+
) {
|
|
157
|
+
throw new InferenceClientProviderOutputError(
|
|
158
|
+
`Received malformed response from ZAI text-to-image API: expected { image_result: Array<{ url: string }> }, got: ${JSON.stringify(
|
|
159
|
+
result
|
|
160
|
+
)}`
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const imageUrl = result.image_result[0].url;
|
|
165
|
+
|
|
166
|
+
if (outputType === "json") {
|
|
167
|
+
return { ...result };
|
|
168
|
+
}
|
|
169
|
+
if (outputType === "url") {
|
|
170
|
+
return imageUrl;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const imageResponse = await fetch(imageUrl);
|
|
174
|
+
return await imageResponse.blob();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
throw new InferenceClientProviderOutputError(
|
|
179
|
+
`Timed out while waiting for the result from ZAI API - aborting after ${MAX_POLL_ATTEMPTS} attempts`
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -96,7 +96,10 @@ const HF_PYTHON_METHODS: Partial<Record<WidgetType, string>> = {
|
|
|
96
96
|
"image-classification": "image_classification",
|
|
97
97
|
"image-segmentation": "image_segmentation",
|
|
98
98
|
"image-to-image": "image_to_image",
|
|
99
|
+
"image-to-video": "image_to_video",
|
|
99
100
|
"image-to-text": "image_to_text",
|
|
101
|
+
"image-text-to-image": "image_text_to_image",
|
|
102
|
+
"image-text-to-video": "image_text_to_video",
|
|
100
103
|
"object-detection": "object_detection",
|
|
101
104
|
"question-answering": "question_answering",
|
|
102
105
|
"sentence-similarity": "sentence_similarity",
|
|
@@ -390,7 +393,9 @@ const snippets: Partial<
|
|
|
390
393
|
"fill-mask": snippetGenerator("basic"),
|
|
391
394
|
"image-classification": snippetGenerator("basicImage"),
|
|
392
395
|
"image-segmentation": snippetGenerator("basicImage"),
|
|
396
|
+
"image-text-to-image": snippetGenerator("imageToImage", prepareImageToImageInput),
|
|
393
397
|
"image-text-to-text": snippetGenerator("conversational"),
|
|
398
|
+
"image-text-to-video": snippetGenerator("imageToVideo", prepareImageToImageInput),
|
|
394
399
|
"image-to-image": snippetGenerator("imageToImage", prepareImageToImageInput),
|
|
395
400
|
"image-to-text": snippetGenerator("basicImage"),
|
|
396
401
|
"image-to-video": snippetGenerator("imageToVideo", prepareImageToImageInput),
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ImageTextToImageInput } from "@huggingface/tasks";
|
|
2
|
+
import { resolveProvider } from "../../lib/getInferenceProviderMapping.js";
|
|
3
|
+
import { getProviderHelper } from "../../lib/getProviderHelper.js";
|
|
4
|
+
import type { BaseArgs, Options } from "../../types.js";
|
|
5
|
+
import { innerRequest } from "../../utils/request.js";
|
|
6
|
+
|
|
7
|
+
export type ImageTextToImageArgs = BaseArgs & ImageTextToImageInput;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* This task takes an image and text input and outputs a new generated image.
|
|
11
|
+
* Recommended model: black-forest-labs/FLUX.2-dev
|
|
12
|
+
*/
|
|
13
|
+
export async function imageTextToImage(args: ImageTextToImageArgs, options?: Options): Promise<Blob> {
|
|
14
|
+
const provider = await resolveProvider(args.provider, args.model, args.endpointUrl);
|
|
15
|
+
const providerHelper = getProviderHelper(provider, "image-text-to-image");
|
|
16
|
+
const payload = await providerHelper.preparePayloadAsync(args);
|
|
17
|
+
const { data: res, requestContext } = await innerRequest<Blob>(payload, providerHelper, {
|
|
18
|
+
...options,
|
|
19
|
+
task: "image-text-to-image",
|
|
20
|
+
});
|
|
21
|
+
return providerHelper.getResponse(res, requestContext.url, requestContext.info.headers as Record<string, string>);
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ImageTextToVideoInput } from "@huggingface/tasks";
|
|
2
|
+
import { resolveProvider } from "../../lib/getInferenceProviderMapping.js";
|
|
3
|
+
import { getProviderHelper } from "../../lib/getProviderHelper.js";
|
|
4
|
+
import type { BaseArgs, Options } from "../../types.js";
|
|
5
|
+
import { innerRequest } from "../../utils/request.js";
|
|
6
|
+
|
|
7
|
+
export type ImageTextToVideoArgs = BaseArgs & ImageTextToVideoInput;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* This task takes an image and text input and outputs a generated video.
|
|
11
|
+
* Recommended model: Lightricks/LTX-Video
|
|
12
|
+
*/
|
|
13
|
+
export async function imageTextToVideo(args: ImageTextToVideoArgs, options?: Options): Promise<Blob> {
|
|
14
|
+
const provider = await resolveProvider(args.provider, args.model, args.endpointUrl);
|
|
15
|
+
const providerHelper = getProviderHelper(provider, "image-text-to-video");
|
|
16
|
+
const payload = await providerHelper.preparePayloadAsync(args);
|
|
17
|
+
const { data: res, requestContext } = await innerRequest<Blob>(payload, providerHelper, {
|
|
18
|
+
...options,
|
|
19
|
+
task: "image-text-to-video",
|
|
20
|
+
});
|
|
21
|
+
return providerHelper.getResponse(res, requestContext.url, requestContext.info.headers as Record<string, string>);
|
|
22
|
+
}
|
package/src/tasks/index.ts
CHANGED
|
@@ -14,6 +14,8 @@ export * from "./cv/imageSegmentation.js";
|
|
|
14
14
|
export * from "./cv/imageToImage.js";
|
|
15
15
|
export * from "./cv/imageToText.js";
|
|
16
16
|
export * from "./cv/imageToVideo.js";
|
|
17
|
+
export * from "./cv/imageTextToImage.js";
|
|
18
|
+
export * from "./cv/imageTextToVideo.js";
|
|
17
19
|
export * from "./cv/objectDetection.js";
|
|
18
20
|
export * from "./cv/textToImage.js";
|
|
19
21
|
export * from "./cv/textToVideo.js";
|