Huggingface.js documentation

đŸ€— Hugging Face Inference

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

đŸ€— Hugging Face Inference

Un wrapper propulsé par Typescript qui fournit une interface unifiée pour exécuter l'inférence sur plusieurs services pour les modÚles hébergés sur le Hugging Face Hub :

  1. Fournisseurs d’infĂ©rence : un accĂšs unifiĂ© et simplifiĂ© Ă  des centaines de modĂšles de machine learning, propulsĂ© par nos partenaires d’infĂ©rence serverless. Cette nouvelle approche s’appuie sur notre prĂ©cĂ©dente API d’infĂ©rence serverless, offrant davantage de modĂšles, des performances amĂ©liorĂ©es et une fiabilitĂ© accrue grĂące Ă  des fournisseurs de premier plan. Consultez la documentation pour obtenir la liste des fournisseurs pris en charge.
  2. Inference Endpoints : un produit permettant de déployer facilement des modÚles en production. L'inférence est exécutée par Hugging Face sur une infrastructure dédiée et entiÚrement gérée, chez le fournisseur cloud de votre choix.
  3. Points de terminaison locaux : vous pouvez Ă©galement exĂ©cuter l’infĂ©rence avec des serveurs d’infĂ©rence locaux tels que llama.cpp, Ollama, vLLM, LiteLLM ou Text Generation Inference (TGI) en connectant le client Ă  ces points de terminaison locaux.

Premiers pas

Installer

NƓud

npm install @huggingface/inference

pnpm add @huggingface/inference

yarn add @huggingface/inference

Deno

// esm.sh
import { InferenceClient } from "https://esm.sh/@huggingface/inference";
// or npm:
import { InferenceClient } from "npm:@huggingface/inference";

Initialiser

import { InferenceClient } from '@huggingface/inference';

const hf = new InferenceClient('your access token');

❗Note importante : Passez toujours un jeton d'accĂšs. Rejoignez Hugging Face puis rendez-vous sur jetons d'accĂšs pour gĂ©nĂ©rer votre jeton d'accĂšs gratuitement.

Votre jeton d'accĂšs doit ĂȘtre conservĂ© en secret. Si vous devez le protĂ©ger dans des applications front-end, nous vous suggĂ©rons de configurer un serveur proxy qui stocke le jeton d'accĂšs.

Utilisation des fournisseurs d'inférence

Vous pouvez envoyer des requĂȘtes d'infĂ©rence Ă  des fournisseurs tiers avec le client d'infĂ©rence.

Actuellement, nous prenons en charge les fournisseurs suivants :

Pour envoyer des requĂȘtes Ă  un fournisseur tiers, vous devez passer le paramĂštre provider Ă  la fonction d’infĂ©rence. La valeur par dĂ©faut du paramĂštre provider est « auto », ce qui sĂ©lectionne le premier des fournisseurs disponibles pour le modĂšle, triĂ©s selon l’ordre de prĂ©fĂ©rence dĂ©fini dans https://hf.co/settings/inference-providers.

const accessToken = "hf_..."; // Either a HF access token, or an API key from the third-party provider (Replicate in this example)

const client = new InferenceClient(accessToken);
await client.textToImage({
  provider: "replicate",
  model:"black-forest-labs/Flux.1-dev",
  inputs: "A black forest cake"
})

Vous devez Ă©galement vous assurer que votre requĂȘte est authentifiĂ©e avec un jeton d’accĂšs. Lorsque l’authentification est effectuĂ©e avec un jeton d’accĂšs Hugging Face, la requĂȘte est acheminĂ©e via https://huggingface.co. Lorsque l’authentification est effectuĂ©e avec une clĂ© de fournisseur tiers, la requĂȘte est envoyĂ©e directement Ă  l’API d’infĂ©rence de ce fournisseur.

Seul un sous-ensemble de modĂšles est pris en charge lors de la demande auprĂšs de fournisseurs tiers. Vous pouvez consulter la liste des modĂšles pris en charge par tĂąche de pipeline ici :

❗Note importante : Pour ĂȘtre compatible, l'API tierce doit respecter la forme « standard » de l'API que nous attendons sur les pages de modĂšles HF pour chaque type de tĂąche de pipeline. Ce n'est pas un problĂšme pour les LLM, car tout le monde a convergĂ© vers l'API OpenAI de toute façon, mais cela peut ĂȘtre plus dĂ©licat pour d'autres tĂąches comme « text-to-image » ou « automatic-speech-recognition », pour lesquelles il n'existe pas d'API standard. Faites-le-nous savoir si vous avez besoin d'aide ou si nous pouvons vous faciliter la tĂąche !

👋Vous souhaitez ajouter un autre fournisseur ? Contactez-nous si vous souhaitez ajouter la prise en charge d’un autre fournisseur d’infĂ©rence, et/ou faites-en la demande sur https://huggingface.co/spaces/huggingface/HuggingDiscussions/discussions/49

Tree-shaking

Vous pouvez importer directement les fonctions dont vous avez besoin depuis le module, au lieu d'utiliser la classe InferenceClient.

import { textGeneration } from "@huggingface/inference";

await textGeneration({
  accessToken: "hf_...",
  model: "model_or_endpoint",
  inputs: ...,
  parameters: ...
})

Cela permettra Ă  votre bundler d'effectuer du tree-shaking.

Gestion des erreurs

Le package d'inférence fournit des types d'erreurs spécifiques pour vous aider à gérer efficacement différents scénarios d'erreurs.

Types d'erreurs

Le package définit plusieurs types d'erreurs qui étendent la classe de base Error :

  • InferenceClientError : classe d'erreur de base pour toutes les erreurs d'Inference de Hugging Face
  • InferenceClientInputError : levĂ©e en cas de problĂšme avec les paramĂštres d’entrĂ©e
  • InferenceClientProviderApiError : levĂ©e en cas d’erreurs au niveau de l’API provenant des fournisseurs
  • InferenceClientHubApiError : levĂ©e en cas d’erreurs au niveau de l’API provenant du Hugging Face Hub
  • InferenceClientProviderOutputError : levĂ©e lorsque le format des rĂ©ponses API des fournisseurs pose problĂšme

Exemple d'utilisation

import { InferenceClient } from "@huggingface/inference";
import {
  InferenceClientError,
  InferenceClientInputError,
  InferenceClientProviderApiError,
  InferenceClientProviderOutputError,
  InferenceClientHubApiError,
} from "@huggingface/inference";

const client = new InferenceClient();

try {
  const result = await client.textGeneration({
    model: "gpt2",
    inputs: "Hello, I'm a language model",
  });
} catch (error) {
  if (error instanceof InferenceClientProviderApiError) {
    // Handle API errors (e.g., rate limits, authentication issues)
    console.error("Provider API Error:", error.message);
    console.error("HTTP Request details:", error.httpRequest);
    console.error("HTTP Response details:", error.httpResponse);
  } else if (error instanceof InferenceClientHubApiError) {
    // Handle API errors (e.g., rate limits, authentication issues)
    console.error("Hub API Error:", error.message);
    console.error("HTTP Request details:", error.httpRequest);
    console.error("HTTP Response details:", error.httpResponse);
  } else if (error instanceof InferenceClientProviderOutputError) {
    // Handle malformed responses from providers
    console.error("Provider Output Error:", error.message);
  } else if (error instanceof InferenceClientInputError) {
    // Handle invalid input parameters
    console.error("Input Error:", error.message);
  } else {
    // Handle unexpected errors
    console.error("Unexpected error:", error);
  }
}

/// Catch all errors from @huggingface/inference
try {
  const result = await client.textGeneration({
    model: "gpt2",
    inputs: "Hello, I'm a language model",
  });
} catch (error) {
  if (error instanceof InferenceClientError) {
    // Handle errors from @huggingface/inference
    console.error("Error from InferenceClient:", error);
  } else {
    // Handle unexpected errors
    console.error("Unexpected error:", error);
  }
}

Détails de l'erreur

InferenceClientProviderApiError

Cette erreur se produit lorsque des problĂšmes surviennent avec la requĂȘte API lors de l'infĂ©rence chez le fournisseur sĂ©lectionnĂ©.

Elle possÚde plusieurs propriétés :

  • message : un message d'erreur descriptif
  • httpRequest : DĂ©tails de la requĂȘte Ă©chouĂ©e (URL, mĂ©thode, en-tĂȘtes)
  • httpResponse : DĂ©tails de la rĂ©ponse, y compris le code de statut et le corps

InferenceClientHubApiError

Cette erreur se produit lorsque des problĂšmes surviennent lors de la requĂȘte Ă  l'API du Hugging Face Hub.

Elle possÚde plusieurs propriétés :

  • message : un message d'erreur descriptif
  • httpRequest : DĂ©tails de la requĂȘte Ă©chouĂ©e (URL, mĂ©thode, en-tĂȘtes)
  • httpResponse : DĂ©tails de la rĂ©ponse, y compris le code de statut et le corps

InferenceClientProviderOutputError

Cette erreur se produit lorsqu'un fournisseur renvoie une réponse dans un format inattendu.

InferenceClientInputError

Cette erreur se produit lorsque les paramĂštres d’entrĂ©e sont invalides ou manquants. Le message d’erreur dĂ©crit ce qui ne va pas avec l’entrĂ©e.

Traitement du langage naturel

Génération de texte

GénÚre du texte à partir d'un prompt d'entrée.

await hf.textGeneration({
  model: 'mistralai/Mixtral-8x7B-v0.1',
  provider: "together",
  inputs: 'The answer to the universe is'
})

for await (const output of hf.textGenerationStream({
  model: "mistralai/Mixtral-8x7B-v0.1",
  provider: "together",
  inputs: 'repeat "one two three four"',
  parameters: { max_new_tokens: 250 }
})) {
  console.log(output.token.text, output.generated_text);
}

Chat Completion

Générer une réponse de modÚle à partir d'une liste de messages constituant une conversation.

// Non-streaming API
const out = await hf.chatCompletion({
  model: "Qwen/Qwen3-32B",
  provider: "cerebras",
  messages: [{ role: "user", content: "Hello, nice to meet you!" }],
  max_tokens: 512,
  temperature: 0.1,
});

// Streaming API
let out = "";
for await (const chunk of hf.chatCompletionStream({
  model: "Qwen/Qwen3-32B",
  provider: "cerebras",
  messages: [
    { role: "user", content: "Can you help me solve an equation?" },
  ],
  max_tokens: 512,
  temperature: 0.1,
})) {
  if (chunk.choices && chunk.choices.length > 0) {
    out += chunk.choices[0].delta.content;
  }
}

Extraction de caractéristiques

Cette tùche lit du texte et produit des valeurs flottantes brutes, généralement consommées dans le cadre d'une base de données sémantique ou d'une recherche sémantique.

await hf.featureExtraction({
  model: "sentence-transformers/distilbert-base-nli-mean-tokens",
  inputs: "That is a happy person",
});

Fill Mask

Tente de combler un trou avec un mot manquant (un jeton, pour ĂȘtre prĂ©cis).

await hf.fillMask({
  model: 'bert-base-uncased',
  inputs: '[MASK] world!'
})

Résumé

Résume un texte long en un texte plus court. Attention, certains modÚles ont une longueur d'entrée maximale.

await hf.summarization({
  model: 'facebook/bart-large-cnn',
  inputs:
    'The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930.',
  parameters: {
    max_length: 100
  }
})

Question-réponse

Répond aux questions en fonction du contexte que vous fournissez.

await hf.questionAnswering({
  model: 'deepset/roberta-base-squad2',
  inputs: {
    question: 'What is the capital of France?',
    context: 'The capital of France is Paris.'
  }
})

Réponses aux questions sur les tableaux

await hf.tableQuestionAnswering({
  model: 'google/tapas-base-finetuned-wtq',
  inputs: {
    query: 'How many stars does the transformers repository have?',
    table: {
      Repository: ['Transformers', 'Datasets', 'Tokenizers'],
      Stars: ['36542', '4512', '3934'],
      Contributors: ['651', '77', '34'],
      'Programming language': ['Python', 'Python', 'Rust, Python and NodeJS']
    }
  }
})

Classification de texte

Souvent utilisée pour l'analyse de sentiments, cette méthode attribue des étiquettes au texte fourni, accompagnées d'un score de probabilité pour chaque étiquette.

await hf.textClassification({
  model: 'distilbert-base-uncased-finetuned-sst-2-english',
  inputs: 'I like you. I love you.'
})

Classification de jetons

UtilisĂ© pour l’analyse de phrases, qu’elle soit grammaticale ou de reconnaissance d’entitĂ©s nommĂ©es (NER), afin de comprendre les mots-clĂ©s contenus dans le texte.

await hf.tokenClassification({
  model: 'dbmdz/bert-large-cased-finetuned-conll03-english',
  inputs: 'My name is Sarah Jessica Parker but you can call me Jessica'
})

Traduction

Convertit le texte d'une langue Ă  une autre.

await hf.translation({
  model: 't5-base',
  inputs: 'My name is Wolfgang and I live in Berlin'
})

await hf.translation({
  model: 'facebook/mbart-large-50-many-to-many-mmt',
  inputs: textToTranslate,
  parameters: {
  "src_lang": "en_XX",
  "tgt_lang": "fr_XX"
 }
})

Classification en zéro tir

Vérifie à quel point un texte d'entrée correspond à un ensemble d'étiquettes que vous fournissez.

await hf.zeroShotClassification({
  model: 'facebook/bart-large-mnli',
  inputs: [
    'Hi, I recently bought a device from your company but it is not working as advertised and I would like to get reimbursed!'
  ],
  parameters: { candidate_labels: ['refund', 'legal', 'faq'] }
})

Similarité de phrases

Calculer la similarité sémantique entre un texte et une liste d'autres phrases.

await hf.sentenceSimilarity({
  model: 'sentence-transformers/paraphrase-xlm-r-multilingual-v1',
  inputs: {
    source_sentence: 'That is a happy person',
    sentences: [
      'That is a happy dog',
      'That is a very happy person',
      'Today is a sunny day'
    ]
  }
})

Classement de texte

Classez les documents selon leur pertinence par rapport Ă  une requĂȘte.

await hf.textRanking({
  model: 'cross-encoder/ettin-reranker-68m-v1',
  inputs: {
    query: 'Which planet is known as the Red Planet?',
    texts: [
      "Venus is often called Earth's twin because of its similar size and proximity.",
      'Mars, known for its reddish appearance, is often referred to as the Red Planet.',
      'Jupiter, the largest planet in our solar system, has a prominent red spot.',
      'Saturn, famous for its rings, is sometimes mistaken for the Red Planet.'
    ]
  }
})

Audio

Reconnaissance automatique de la parole

Transcrit le discours Ă  partir d'un fichier audio.

Démonstration

await hf.automaticSpeechRecognition({
  model: 'facebook/wav2vec2-large-960h-lv60-self',
  data: readFileSync('test/sample1.flac')
})

Classification audio

Attribue des étiquettes à l'audio fourni, accompagnées d'un score de probabilité pour chaque étiquette.

Démonstration

await hf.audioClassification({
  model: 'superb/hubert-large-superb-er',
  data: readFileSync('test/sample1.flac')
})

Texte en parole

GénÚre une parole naturelle à partir d'une entrée textuelle.

Tutoriel interactif

await hf.textToSpeech({
  model: 'espnet/kan-bayashi_ljspeech_vits',
  inputs: 'Hello world!'
})

Audio vers Audio

GénÚre un ou plusieurs audios à partir d'un audio d'entrée, couramment utilisé pour l'amélioration de la parole et la séparation des sources.

await hf.audioToAudio({
  model: 'speechbrain/sepformer-wham',
  data: readFileSync('test/sample1.flac')
})

Vision par ordinateur

Classification d'images

Attribue des étiquettes à une image donnée, accompagnées d'un score de probabilité pour chaque étiquette.

Démonstration

await hf.imageClassification({
  data: readFileSync('test/cheetah.png'),
  model: 'google/vit-base-patch16-224'
})

Détection d'objets

Détecte les objets dans une image et renvoie des étiquettes avec les boßtes englobantes correspondantes et les scores de probabilité.

Démonstration

await hf.objectDetection({
  data: readFileSync('test/cats.png'),
  model: 'facebook/detr-resnet-50'
})

Segmentation d'images

Détecte les segments au sein d'une image et renvoie des étiquettes avec les boßtes englobantes correspondantes et les scores de probabilité.

await hf.imageSegmentation({
  data: readFileSync('test/cats.png'),
  model: 'facebook/detr-resnet-50-panoptic'
})

Image vers texte

Extrait du texte d'une image donnée, couramment utilisé pour la légende d'images ou la reconnaissance optique de caractÚres.

await hf.imageToText({
  data: readFileSync('test/cats.png'),
  model: 'nlpconnect/vit-gpt2-image-captioning'
})

Texte vers image

Crée une image à partir d'un prompt texte.

Démonstration

await hf.textToImage({
  model: 'black-forest-labs/FLUX.1-dev',
  inputs: 'a picture of a green bird'
})

Image vers image

Image-to-image est la tĂąche qui consiste Ă  transformer une image source afin qu’elle corresponde aux caractĂ©ristiques d’une image cible ou d’un domaine d’images cible.

Tutoriel interactif

await hf.imageToImage({
  inputs: new Blob([readFileSync("test/stormtrooper_depth.png")]),
  parameters: {
    prompt: "elmo's lecture",
  },
  model: "lllyasviel/sd-controlnet-depth",
});

Classification d'images en zéro tir

Vérifie à quel point une image d'entrée correspond à un ensemble d'étiquettes que vous fournissez.

await hf.zeroShotImageClassification({
  model: 'openai/clip-vit-large-patch14-336',
  inputs: {
    image: await (await fetch('https://placekitten.com/300/300')).blob()
  },
  parameters: {
    candidate_labels: ['cat', 'dog']
  }
})

Multimodal

Réponse à des questions visuelles

Le Visual Question Answering est la tùche de répondre à des questions ouvertes à partir d'une image. Ils produisent des réponses en langage naturel à des questions en langage naturel.

Démonstration

await hf.visualQuestionAnswering({
  model: 'dandelin/vilt-b32-finetuned-vqa',
  inputs: {
    question: 'How many cats are lying down?',
    image: await (await fetch('https://placekitten.com/300/300')).blob()
  }
})

Question-réponse sur documents

Les modÚles de réponse à des questions sur des documents prennent en entrée une paire (document, question) et renvoient une réponse en langage naturel.

Démonstration

await hf.documentQuestionAnswering({
  model: 'impira/layoutlm-document-qa',
  inputs: {
    question: 'Invoice number?',
    image: await (await fetch('https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png')).blob(),
  }
})

Données tabulaires

Régression tabulaire

La régression tabulaire est la tùche qui consiste à prédire une valeur numérique à partir d'un ensemble d'attributs.

await hf.tabularRegression({
  model: "scikit-learn/Fish-Weight",
  inputs: {
    data: {
      "Height": ["11.52", "12.48", "12.3778"],
      "Length1": ["23.2", "24", "23.9"],
      "Length2": ["25.4", "26.3", "26.5"],
      "Length3": ["30", "31.2", "31.1"],
      "Species": ["Bream", "Bream", "Bream"],
      "Width": ["4.02", "4.3056", "4.6961"]
    },
  },
})

Classification de données tabulaires

La classification tabulaire est la tùche qui consiste à classer une catégorie cible (un groupe) sur la base d'un ensemble d'attributs.

await hf.tabularClassification({
  model: "vvmnnnkv/wine-quality",
  inputs: {
    data: {
      "fixed_acidity": ["7.4", "7.8", "10.3"],
      "volatile_acidity": ["0.7", "0.88", "0.32"],
      "citric_acid": ["0", "0", "0.45"],
      "residual_sugar": ["1.9", "2.6", "6.4"],
      "chlorides": ["0.076", "0.098", "0.073"],
      "free_sulfur_dioxide": ["11", "25", "5"],
      "total_sulfur_dioxide": ["34", "67", "13"],
      "density": ["0.9978", "0.9968", "0.9976"],
      "pH": ["3.51", "3.2", "3.23"],
      "sulphates": ["0.56", "0.68", "0.82"],
      "alcohol": ["9.4", "9.8", "12.6"]
    },
  },
})

Vous pouvez utiliser tout fournisseur compatible avec l'API de complétion de chat avec la méthode chatCompletion.

// Chat Completion Example
const MISTRAL_KEY = process.env.MISTRAL_KEY;
const hf = new InferenceClient(MISTRAL_KEY, {
  endpointUrl: "https://api.mistral.ai",
});
const stream = hf.chatCompletionStream({
  model: "mistral-tiny",
  messages: [{ role: "user", content: "Complete the equation one + one = , just the answer" }],
});
let out = "";
for await (const chunk of stream) {
  if (chunk.choices && chunk.choices.length > 0) {
    out += chunk.choices[0].delta.content;
    console.log(out);
  }
}

Utilisation des points de terminaison d'inférence

Les exemples prĂ©sentĂ©s ci-dessus utilisent des fournisseurs d’infĂ©rence. Bien que ceux-ci s’avĂšrent trĂšs utiles pour le prototypage et les tests rapides, une fois que vous ĂȘtes prĂȘt Ă  dĂ©ployer votre modĂšle en production, vous devrez utiliser une infrastructure dĂ©diĂ©e. C’est lĂ  qu’interviennent les Inference Endpoints. Ils vous permettent de dĂ©ployer n’importe quel modĂšle et de l’exposer sous forme d’API privĂ©e. Une fois le dĂ©ploiement effectuĂ©, vous obtenez une URL Ă  laquelle vous pouvez vous connecter :

import { InferenceClient } from '@huggingface/inference';

const hf = new InferenceClient("hf_xxxxxxxxxxxxxx", {
	endpointUrl: "https://j3z5luu0ooo76jnl.us-east-1.aws.endpoints.huggingface.cloud/v1/",
});

const response = await hf.chatCompletion({
	messages: [
		{
			role: "user",
			content: "What is the capital of France?",
		},
	],
});

console.log(response.choices[0].message.content);

Par dĂ©faut, tous les appels Ă  l’endpoint d’infĂ©rence attendent que le modĂšle soit chargĂ©. Lorsque le scaling to 0 est activĂ© sur l’endpoint, cela peut entraĂźner un temps d’attente non nĂ©gligeable. Si vous prĂ©fĂ©rez dĂ©sactiver ce comportement et gĂ©rer vous-mĂȘme les erreurs HTTP 500 renvoyĂ©es par l’endpoint, vous pouvez procĂ©der ainsi :

const hf = new InferenceClient("hf_xxxxxxxxxxxxxx", {
	endpointUrl: "https://j3z5luu0ooo76jnl.us-east-1.aws.endpoints.huggingface.cloud/v1/",
});

const response = await hf.chatCompletion(
	{
		messages: [
			{
				role: "user",
				content: "What is the capital of France?",
			},
		],
	},
	{
		retry_on_error: false,
	}
);

Utilisation de points de terminaison locaux

Vous pouvez utiliser InferenceClient pour exĂ©cuter des complĂ©tions de chat avec des serveurs d’infĂ©rence locaux (llama.cpp, vllm, litellm server, TGI, mlx, etc.) fonctionnant sur votre propre machine. L’API doit ĂȘtre compatible avec l’API OpenAI.

import { InferenceClient } from '@huggingface/inference';

const hf = new InferenceClient(undefined, {
	endpointUrl: "http://localhost:8080",
});

const response = await hf.chatCompletion({
	messages: [
		{
			role: "user",
			content: "What is the capital of France?",
		},
	],
});

console.log(response.choices[0].message.content);

De maniĂšre similaire au client JS d'OpenAI, InferenceClient peut ĂȘtre utilisĂ© pour exĂ©cuter une infĂ©rence de Chat Completion avec n'importe quel point de terminaison compatible avec l'API REST d'OpenAI.

Exécution des tests

HF_TOKEN="your access token" pnpm run test

Trouver des modÚles appropriés

Nous disposons d’un projet de documentation informatif intitulĂ© Tasks qui rĂ©pertorie les modĂšles disponibles pour chaque tĂąche et explique en dĂ©tail le fonctionnement de chaque tĂąche.

Il contient également des démonstrations, des exemples de sorties et d'autres ressources si vous souhaitez approfondir l'aspect machine learning.

Dépendances

  • @huggingface/tasks : Typages uniquement
Update on GitHub