# タスク

## タスクとは何ですか？

タスク、またはパイプラインタイプは、各モデルの API の「形状」（入力と出力）を記述し、特定のモデルに対してどの Inference API とウィジェットを表示するかを決定するために使用されます。

この分類は比較的粗い粒度です（モデルタグにさらに細粒度のタスク名を追加することは常に可能です）ので、**新しいタスクを作成する必要はほとんどありません**。新しいタスクへのサポートを追加したい場合は、このドキュメントで必要な手順を説明しています。

## 概要

Hubに新しいタスクが統合されるということは、以下のことを意味します。
* ユーザーは、特定のタスクのすべてのモデルおよびデータセットを検索できます。
* Inference API はこのタスクをサポートしています。
* ユーザーはウィジェットを介してモデルを直接試すことができます。🏆

すべてのステップを自分で実装する必要はありません。新しいタスクの追加はコミュニティ全体の取り組みであり、複数の人が貢献できます。🧑‍🤝‍🧑

プロセスを開始するには、[huggingface_hub](https://github.com/huggingface/huggingface_hub/issues)リポジトリで新しいissueを開いてください。「Adding a new task」テンプレートを使用してください。⚠️コーディングを開始する前に、このドキュメントを確認することをお勧めします。⚠️

最初のステップは、提案するタスク用のモデルをアップロードすることです。新しいタスク用のモデルがHubに存在するようになったら、次のステップはInference APIでそれを有効にすることです。選択できるサポートの種類は3つあります。

* 🤗 `transformers`モデルの使用
* 🐳 [公式にサポートされているライブラリ](./models-libraries)のモデルを使用する
* 🖨️ カスタム推論コード付きのモデルを使用する。この実験的なオプションにはデメリットがあるため、他のアプローチのいずれかを使用することをお勧めします。

最後に、タスクのアイコンやウィジェットなどのUI要素を追加して、Hubでの統合を完成させます。📷

一部のステップは独立しており、順序を問わず実行できます。**アイコンを追加するには、Inference APIは必要ありません。**つまり、まだ完全な統合が実現されていなくても、ユーザーは特定のタスクのモデルを検索できます。

## Hubに新しいタスクを追加する

### Hugging Face transformersライブラリを使用する

モデルが`transformers`ベースのモデルである場合、Inference APIのタスクと`pipeline`クラスの間には1対1のマッピングが存在します。`transformers`ライブラリからのPRの例をいくつか示します。
* [ImageClassificationPipelineの追加](https://github.com/huggingface/transformers/pull/11598)
* [AudioClassificationPipelineの追加](https://github.com/huggingface/transformers/pull/13342)

パイプラインが送信されデプロイされると、モデルのInference APIを使用できるようになります。

### サポートされているライブラリとCommunity Inference APIを使用する

Hubは、[Community Inference API](https://github.com/huggingface/api-inference-community)において10以上のオープンソースライブラリをサポートしています。

**新しいタスクの追加は比較的簡単で、2つのPRが必要です：**
* PR 1: 新しいタスクを API の [validation](https://github.com/huggingface/api-inference-community/blob/main/api_inference_community/validation.py) に追加します。このコードは、推論の入力が特定のタスクに対して有効であることを保証します。PR の例をいくつか示します:
    * [テキストから画像への生成を追加](https://github.com/huggingface/huggingface_hub/commit/5f040a117cf2a44d704621012eb41c01b103cfca#diff-db8bbac95c077540d79900384cfd524d451e629275cbb5de7a31fc1cd5d6c189)
    * [audio-classification を追加](https://github.com/huggingface/huggingface_hub/commit/141e30588a2031d4d5798eaa2c1250d1d1b75905#diff-db8bbac95c077540d79900384cfd524d451e629275cbb5de7a31fc1cd5d6c189)
    * [tabular-classification を追加](https://github.com/huggingface/huggingface_hub/commit/dbea604a45df163d3f0b4b1d897e4b0fb951c650#diff-db8bbac95c077540d79900384cfd524d451e629275cbb5de7a31fc1cd5d6c189)
* PR 2: 新しいタスクをライブラリのDockerイメージに追加します。また、他のライブラリへのタスク統合を容易にするため、[`docker_images/common/app/pipelines`](https://github.com/huggingface/api-inference-community/tree/main/docker_images/common/app/pipelines)にテンプレートも追加する必要があります。PRの例を以下に示します。
    * [spaCyにテキスト分類を追加する](https://github.com/huggingface/huggingface_hub/commit/6926fd9bec23cb963ce3f58ec53496083997f0fa#diff-3f1083a92ca0047b50f9ad2d04f0fe8dfaeee0e26ab71eb8835e365359a1d0dc)

### クイックプロトタイプのためにコミュニティ推論APIを追加

**私のモデルはどのライブラリにもサポートされていません。もう終わりですか？😱**

これらのユースケースには、[Hugging Face Spaces](./spaces)の使用を推奨します。

### UI要素

Hubでは、ユーザーが特定のタスクでモデルをフィルタリングできます。これを行うには、タスクを複数の場所に追加する必要があります。また、タスク用のアイコンも選択できます!

1. `Types.ts`にタスクタイプを追加します。

[huggingface.js/packages/tasks/src/pipelines.ts](https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/src/pipelines.ts)では、いくつかの作業が必要です。

* `PIPELINE_DATA` に型を追加します。パイプラインの型は、NLP、Audio、Computer Vision、その他といった異なるカテゴリに分類されています。
* [huggingface.js/packages/tasks/src/tasks/index.ts](https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/src/tasks/index.ts) 内の軽微な変更も記入する必要があります。

2. アイコンを選択

[lib/Icons](https://github.com/huggingface/huggingface.js/tree/main/packages/widgets/src/lib/components/Icons) ディレクトリにアイコンを追加できます。通常は https://icones.js.org/collection/carbon からカーボンアイコンを選択します。また、[PipelineIcon](https://github.com/huggingface/huggingface.js/blob/main/packages/widgets/src/lib/components/PipelineIcon/PipelineIcon.svelte) にもアイコンを追加してください。

### ウィジェット

タスクが本番環境で稼働し始めたら、ユーザーがブラウザ上でモデルを直接操作できる仕組みを実装することほどエキサイティングなことはありません。🤩 すべてのウィジェットは[こちら](https://huggingface.co/spaces/huggingfacejs/inference-widgets)で確認できます。

ウィジェットへの貢献にご興味がある場合は、すべてのウィジェットの[実装](https://github.com/huggingface/huggingface.js/tree/main/packages/widgets)を確認できます。

