# Tâches

## Qu'est-ce qu'une tâche ?

Les tâches, ou types de pipeline, décrivent la « forme » de l’API de chaque modèle (entrées et sorties) et servent à déterminer quelle API d’inférence et quel widget afficher pour un modèle donné.

Cette classification est relativement grossière (vous pouvez toujours ajouter des noms de tâches plus fins dans les étiquettes de votre modèle), de sorte que **vous devriez rarement avoir à créer une nouvelle tâche**. Si vous souhaitez ajouter la prise en charge d'une nouvelle tâche, ce document explique les étapes requises.

## Aperçu

L'intégration d'une nouvelle tâche dans le Hub signifie que :
* Les utilisateurs peuvent rechercher tous les modèles – et les jeux de données – d'une tâche donnée.
* L'API d'inférence prend en charge la tâche.
* Les utilisateurs peuvent tester les modèles directement avec le widget. 🏆

Notez que vous n'avez pas besoin d'implémenter toutes les étapes vous-même. L'ajout d'une nouvelle tâche est un effort communautaire, et plusieurs personnes peuvent y contribuer. 🧑‍🤝‍🧑

Pour commencer, ouvrez un nouveau ticket dans le dépôt [huggingface_hub](https://github.com/huggingface/huggingface_hub/issues). Veuillez utiliser le modèle « Adding a new task ». ⚠️Avant de commencer à coder, il est conseillé de parcourir ce document. ⚠️

La première étape consiste à téléverser un modèle pour votre tâche proposée. Une fois que vous avez un modèle dans le Hub pour la nouvelle tâche, l'étape suivante est de l'activer dans l'API d'inférence. Il existe trois types de prise en charge parmi lesquels vous pouvez choisir :

* 🤗 utilisation d'un modèle `transformers`
* 🐳 utilisation d'un modèle d'une [bibliothèque officiellement prise en charge](./models-libraries)
* 🖨️ l’utilisation d’un modèle avec un code d’inférence personnalisé. Cette option expérimentale présente des inconvénients, nous recommandons donc d’utiliser l’une des autres approches.

Enfin, vous pouvez ajouter quelques éléments d’interface, tels que l’icône de la tâche et le widget, qui complètent l’intégration dans le Hub. 📷

Certaines étapes sont indépendantes ; il n'est pas nécessaire de les effectuer dans un ordre précis. **Vous n'avez pas besoin de l'API d'inférence pour ajouter l'icône.** Cela signifie que, même si l'intégration complète n'est pas encore en place, les utilisateurs peuvent toujours rechercher des modèles pour une tâche donnée.

## Ajout de nouvelles tâches au Hub

### Utilisation de la bibliothèque transformers de Hugging Face

Si votre modèle est un modèle basé sur `transformers`, il existe une correspondance 1:1 entre la tâche de l'API d'inférence et une classe `pipeline`. Voici quelques exemples de PR de la bibliothèque `transformers` :
* [Ajout de ImageClassificationPipeline](https://github.com/huggingface/transformers/pull/11598)
* [Ajout de AudioClassificationPipeline](https://github.com/huggingface/transformers/pull/13342)

Une fois le pipeline soumis et déployé, vous devriez pouvoir utiliser l'API d'inférence pour votre modèle.

### Utiliser l’API d’inférence communautaire avec une bibliothèque prise en charge

Le Hub prend également en charge plus de 10 bibliothèques open source dans l'[API d'inférence communautaire](https://github.com/huggingface/api-inference-community).

**L’ajout d’une nouvelle tâche est relativement simple et nécessite 2 PR :**
* PR 1 : Ajouter la nouvelle tâche à la [validation](https://github.com/huggingface/api-inference-community/blob/main/api_inference_community/validation.py) de l'API. Ce code garantit que l'entrée de déduction est valide pour une tâche donnée. Exemples de PR :
    * [Ajouter du texte vers image](https://github.com/huggingface/huggingface_hub/commit/5f040a117cf2a44d704621012eb41c01b103cfca#diff-db8bbac95c077540d79900384cfd524d451e629275cbb5de7a31fc1cd5d6c189)
    * [Ajouter audio-classification](https://github.com/huggingface/huggingface_hub/commit/141e30588a2031d4d5798eaa2c1250d1d1b75905#diff-db8bbac95c077540d79900384cfd524d451e629275cbb5de7a31fc1cd5d6c189)
    * [Ajouter tabular-classification](https://github.com/huggingface/huggingface_hub/commit/dbea604a45df163d3f0b4b1d897e4b0fb951c650#diff-db8bbac95c077540d79900384cfd524d451e629275cbb5de7a31fc1cd5d6c189)
* PR 2 : Ajouter la nouvelle tâche à une image Docker de bibliothèque. Vous devez également ajouter un modèle à [`docker_images/common/app/pipelines`](https://github.com/huggingface/api-inference-community/tree/main/docker_images/common/app/pipelines) pour faciliter l’intégration de la tâche dans d’autres bibliothèques. Voici un exemple de PR :
    * [Ajouter la classification de texte à spaCy](https://github.com/huggingface/huggingface_hub/commit/6926fd9bec23cb963ce3f58ec53496083997f0fa#diff-3f1083a92ca0047b50f9ad2d04f0fe8dfaeee0e26ab71eb8835e365359a1d0dc)

### Ajout de l'API d'inférence communautaire pour un prototype rapide

**Mon modèle n'est pris en charge par aucune bibliothèque. Suis-je condamné ? 😱**

Nous recommandons d'utiliser [Hugging Face Spaces](./spaces) pour ces cas d'usage.

### Éléments d'interface

Le Hub permet aux utilisateurs de filtrer les modèles par tâche donnée. Pour ce faire, vous devez ajouter la tâche à plusieurs endroits. Vous pourrez également choisir une icône pour la tâche !

1. Ajoutez le type de tâche à `Types.ts`

Dans [huggingface.js/packages/tasks/src/pipelines.ts](https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/src/pipelines.ts), vous devez faire quelques choses

* Ajoutez le type à `PIPELINE_DATA`. Notez que les types de pipeline sont classés dans différentes catégories (NLP, Audio, Computer Vision, et autres).
* Vous devrez également effectuer de légères modifications dans [huggingface.js/packages/tasks/src/tasks/index.ts](https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/src/tasks/index.ts)

2. Choisir une icône

Vous pouvez ajouter une icône dans le répertoire [lib/Icons](https://github.com/huggingface/huggingface.js/tree/main/packages/widgets/src/lib/components/Icons). Nous choisissons généralement des icônes carbon depuis https://icones.js.org/collection/carbon. Ajoutez également l'icône à [PipelineIcon](https://github.com/huggingface/huggingface.js/blob/main/packages/widgets/src/lib/components/PipelineIcon/PipelineIcon.svelte).

### Widget

Une fois la tâche déployée en production, que pourrait-il y avoir de plus excitant que d’implémenter un moyen pour les utilisateurs de manipuler directement les modèles dans leur navigateur ? 🤩 Vous pouvez trouver tous les widgets [ici](https://huggingface.co/spaces/huggingfacejs/inference-widgets).

Si vous souhaitez contribuer avec un widget, vous pouvez consulter l'[implémentation](https://github.com/huggingface/huggingface.js/tree/main/packages/widgets) de tous les widgets.

