Skip to content

Commit 488933b

Browse files
authored
Merge branch 'main' into add_sam3d
2 parents e1b1626 + 6299707 commit 488933b

30 files changed

+813
-75
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ You can run our packages with vanilla JS, without any bundler, by using a CDN or
9898

9999
```html
100100
<script type="module">
101-
import { InferenceClient } from 'https://cdn.jsdelivr.net/npm/@huggingface/[email protected].4/+esm';
101+
import { InferenceClient } from 'https://cdn.jsdelivr.net/npm/@huggingface/[email protected].5/+esm';
102102
import { createRepo, commit, deleteRepo, listFiles } from "https://cdn.jsdelivr.net/npm/@huggingface/[email protected]/+esm";
103103
</script>
104104
```

packages/hub/src/lib/collection-info.spec.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@ describe("collectionInfo", () => {
3131
_id: "690df2a467ea25a1a346d0ae",
3232
author: "huggingfacejs",
3333
datasetsServerInfo: {
34-
formats: ["imagefolder"],
35-
libraries: ["datasets", "mlcroissant"],
36-
modalities: ["audio", "image"],
37-
numRows: 38,
38-
viewer: "viewer",
34+
formats: expect.any(Array),
35+
libraries: expect.any(Array),
36+
modalities: expect.any(Array),
37+
numRows: expect.any(Number),
38+
viewer: expect.any(String),
3939
},
4040
downloads: expect.any(Number),
4141
gated: false,
4242
id: "huggingfacejs/tasks",
4343
isLikedByUser: false,
44-
lastModified: "2025-05-21T10:59:37.000Z",
44+
lastModified: expect.any(String),
4545
likes: expect.any(Number),
4646
position: 0,
4747
private: false,
@@ -57,8 +57,7 @@ describe("collectionInfo", () => {
5757
numberItems: 5,
5858
owner: {
5959
_id: "6414d83b385a75d7790d5a58",
60-
avatarUrl:
61-
"https://cdn-avatars.huggingface.co/v1/production/uploads/1679315631188-61d2f90c3c2083e1c08af22d.png",
60+
avatarUrl: expect.any(String),
6261
followerCount: expect.any(Number),
6362
fullname: "Huggingface.js",
6463
isEnterprise: false,
@@ -83,8 +82,7 @@ describe("collectionInfo", () => {
8382
author: "huggingfacejs",
8483
authorData: {
8584
_id: "6414d83b385a75d7790d5a58",
86-
avatarUrl:
87-
"https://cdn-avatars.huggingface.co/v1/production/uploads/1679315631188-61d2f90c3c2083e1c08af22d.png",
85+
avatarUrl: expect.any(String),
8886
followerCount: expect.any(Number),
8987
fullname: "Huggingface.js",
9088
isEnterprise: false,
@@ -98,12 +96,12 @@ describe("collectionInfo", () => {
9896
colorTo: "green",
9997
createdAt: "2023-03-17T21:33:16.000Z",
10098
emoji: "🌎",
99+
featured: false,
101100
id: "huggingfacejs/push-model-from-web",
102101
isLikedByUser: false,
103-
lastModified: "2023-04-01T15:29:38.000Z",
104-
likes: expect.any(Number),
102+
lastModified: expect.any(String),
103+
likes: 1,
105104
pinned: false,
106-
featured: false,
107105
position: 2,
108106
private: false,
109107
repoType: "space",
@@ -141,8 +139,7 @@ describe("collectionInfo", () => {
141139
author: "huggingfacejs",
142140
authorData: {
143141
_id: "6414d83b385a75d7790d5a58",
144-
avatarUrl:
145-
"https://cdn-avatars.huggingface.co/v1/production/uploads/1679315631188-61d2f90c3c2083e1c08af22d.png",
142+
avatarUrl: expect.any(String),
146143
followerCount: expect.any(Number),
147144
fullname: "Huggingface.js",
148145
isEnterprise: false,
@@ -157,7 +154,7 @@ describe("collectionInfo", () => {
157154
gated: false,
158155
id: "huggingfacejs/test-model",
159156
isLikedByUser: false,
160-
lastModified: "2025-11-07T13:25:23.000Z",
157+
lastModified: expect.any(String),
161158
likes: expect.any(Number),
162159
position: 4,
163160
private: false,

packages/hub/src/lib/list-collections.spec.ts

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,17 @@ describe("listCollections", () => {
4141
_id: "690df2a467ea25a1a346d0ae",
4242
author: "huggingfacejs",
4343
datasetsServerInfo: {
44-
formats: ["imagefolder"],
45-
libraries: ["datasets", "mlcroissant"],
46-
modalities: ["audio", "image"],
47-
numRows: 38,
48-
viewer: "viewer",
44+
formats: expect.any(Array),
45+
libraries: expect.any(Array),
46+
modalities: expect.any(Array),
47+
numRows: expect.any(Number),
48+
viewer: expect.any(String),
4949
},
5050
downloads: expect.any(Number),
5151
gated: false,
5252
id: "huggingfacejs/tasks",
5353
isLikedByUser: false,
54-
lastModified: "2025-05-21T10:59:37.000Z",
54+
lastModified: expect.any(String),
5555
likes: expect.any(Number),
5656
position: 0,
5757
private: false,
@@ -63,12 +63,11 @@ describe("listCollections", () => {
6363
description: "Only used in E2E tests",
6464
id: "690df2897fa1945492b8cf42",
6565
isUpvotedByUser: false,
66-
lastUpdated: "2025-11-07T13:24:26.277Z",
66+
lastUpdated: expect.any(String),
6767
numberItems: 5,
6868
owner: {
6969
_id: "6414d83b385a75d7790d5a58",
70-
avatarUrl:
71-
"https://cdn-avatars.huggingface.co/v1/production/uploads/1679315631188-61d2f90c3c2083e1c08af22d.png",
70+
avatarUrl: expect.any(String),
7271
followerCount: expect.any(Number),
7372
fullname: "Huggingface.js",
7473
isEnterprise: false,
@@ -93,8 +92,7 @@ describe("listCollections", () => {
9392
author: "huggingfacejs",
9493
authorData: {
9594
_id: "6414d83b385a75d7790d5a58",
96-
avatarUrl:
97-
"https://cdn-avatars.huggingface.co/v1/production/uploads/1679315631188-61d2f90c3c2083e1c08af22d.png",
95+
avatarUrl: expect.any(String),
9896
followerCount: expect.any(Number),
9997
fullname: "Huggingface.js",
10098
isEnterprise: false,
@@ -108,14 +106,14 @@ describe("listCollections", () => {
108106
colorTo: "green",
109107
createdAt: "2023-03-17T21:33:16.000Z",
110108
emoji: "🌎",
109+
featured: false,
111110
id: "huggingfacejs/push-model-from-web",
112111
isLikedByUser: false,
113-
lastModified: "2023-04-01T15:29:38.000Z",
114-
likes: expect.any(Number),
112+
lastModified: expect.any(String),
113+
likes: 1,
115114
pinned: false,
116115
position: 2,
117116
private: false,
118-
featured: false,
119117
repoType: "space",
120118
runtime: {
121119
hardware: {

packages/inference/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@huggingface/inference",
3-
"version": "4.13.4",
3+
"version": "4.13.5",
44
"packageManager": "[email protected]",
55
"license": "MIT",
66
"author": "Hugging Face and Tim Mikeladze <[email protected]>",

packages/inference/src/lib/getProviderHelper.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import type {
2828
ImageToImageTaskHelper,
2929
ImageToTextTaskHelper,
3030
ImageToVideoTaskHelper,
31+
ImageTextToImageTaskHelper,
32+
ImageTextToVideoTaskHelper,
3133
ObjectDetectionTaskHelper,
3234
QuestionAnsweringTaskHelper,
3335
SentenceSimilarityTaskHelper,
@@ -276,6 +278,14 @@ export function getProviderHelper(
276278
provider: InferenceProviderOrPolicy,
277279
task: "image-to-video"
278280
): ImageToVideoTaskHelper & TaskProviderHelper;
281+
export function getProviderHelper(
282+
provider: InferenceProviderOrPolicy,
283+
task: "image-text-to-image"
284+
): ImageTextToImageTaskHelper & TaskProviderHelper;
285+
export function getProviderHelper(
286+
provider: InferenceProviderOrPolicy,
287+
task: "image-text-to-video"
288+
): ImageTextToVideoTaskHelper & TaskProviderHelper;
279289
export function getProviderHelper(
280290
provider: InferenceProviderOrPolicy,
281291
task: "sentence-similarity"

packages/inference/src/package.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
// 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.4";
2+
export const PACKAGE_VERSION = "4.13.5";
33
export const PACKAGE_NAME = "@huggingface/inference";

packages/inference/src/providers/providerHelper.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import type {
1919
ImageToTextInput,
2020
ImageToTextOutput,
2121
ImageToVideoInput,
22+
ImageTextToImageInput,
23+
ImageTextToVideoInput,
2224
ObjectDetectionInput,
2325
ObjectDetectionOutput,
2426
QuestionAnsweringInput,
@@ -54,6 +56,8 @@ import { toArray } from "../utils/toArray.js";
5456
import type { ImageToImageArgs } from "../tasks/cv/imageToImage.js";
5557
import type { AutomaticSpeechRecognitionArgs } from "../tasks/audio/automaticSpeechRecognition.js";
5658
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";
5761
import type { ImageSegmentationArgs } from "../tasks/cv/imageSegmentation.js";
5862

5963
/**
@@ -159,6 +163,18 @@ export interface ImageToVideoTaskHelper {
159163
preparePayloadAsync(args: ImageToVideoArgs): Promise<RequestArgs>;
160164
}
161165

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+
162178
export interface ImageSegmentationTaskHelper {
163179
getResponse(response: unknown, url?: string, headers?: HeadersInit): Promise<ImageSegmentationOutput>;
164180
preparePayload(params: BodyParams<ImageSegmentationInput & BaseArgs>): Record<string, unknown> | BodyInit;

packages/inference/src/snippets/getInferenceSnippets.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,10 @@ const HF_PYTHON_METHODS: Partial<Record<WidgetType, string>> = {
9696
"image-classification": "image_classification",
9797
"image-segmentation": "image_segmentation",
9898
"image-to-image": "image_to_image",
99+
"image-to-video": "image_to_video",
99100
"image-to-text": "image_to_text",
101+
"image-text-to-image": "image_text_to_image",
102+
"image-text-to-video": "image_text_to_video",
100103
"object-detection": "object_detection",
101104
"question-answering": "question_answering",
102105
"sentence-similarity": "sentence_similarity",
@@ -390,7 +393,9 @@ const snippets: Partial<
390393
"fill-mask": snippetGenerator("basic"),
391394
"image-classification": snippetGenerator("basicImage"),
392395
"image-segmentation": snippetGenerator("basicImage"),
396+
"image-text-to-image": snippetGenerator("imageToImage", prepareImageToImageInput),
393397
"image-text-to-text": snippetGenerator("conversational"),
398+
"image-text-to-video": snippetGenerator("imageToVideo", prepareImageToImageInput),
394399
"image-to-image": snippetGenerator("imageToImage", prepareImageToImageInput),
395400
"image-to-text": snippetGenerator("basicImage"),
396401
"image-to-video": snippetGenerator("imageToVideo", prepareImageToImageInput),
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

0 commit comments

Comments
 (0)