# Görevler

## Görev nedir?

Görevler, yani pipeline türleri, her modelin API'sinin "şeklini" (girdiler ve çıktıları) tanımlar ve herhangi bir model için hangi Inference API'sinin ve widget'ın görüntülenmek istendiğini belirlemek için kullanılır.

Bu sınıflandırma nispeten kaba tanelidir (model etiketlerinizde her zaman daha ince taneli görev adları ekleyebilirsiniz), bu nedenle **yeni bir görev oluşturmanız nadiren gerekir**. Yeni bir görev için destek eklemek istiyorsanız, bu belge gerekli adımları açıklar.

## Genel Bakış

Hub'a yeni bir görevin entegre edilmesi şu anlama gelir:
* Kullanıcılar, belirli bir görevin tüm modellerini – ve veri kümelerini – arayabilir.
* Inference API bu görevi destekler.
* Kullanıcılar, modelleri doğrudan widget ile deneyebilir. 🏆

Tüm adımları kendinizin uygulaması gerekmediğini unutmayın. Yeni bir görev eklemek topluluk çabasıdır ve birden fazla kişi katkıda bulunabilir. 🧑‍🤝‍🧑

Süreci başlatmak için [huggingface_hub](https://github.com/huggingface/huggingface_hub/issues) deposunda yeni bir sorun (issue) açın. Lütfen "Adding a new task" şablonunu kullanın. ⚠️Herhangi bir kod yazmadan önce bu belgeyi gözden geçirmeniz önerilir. ⚠️

İlk adım, önerdiğiniz görev için bir model yüklemektir. Yeni görev için Hub'da bir modeliniz olduğunda, bir sonraki adım onu Inference API'de etkinleştirmektir. Seçebileceğiniz üç tür destek vardır:

* 🤗 `transformers` modeli kullanma
* 🐳 [resmi olarak desteklenen bir kütüphaneden](./models-libraries) bir model kullanma
* 🖨️ özel çıkarım koduna sahip bir model kullanma. Bu deneysel seçeneğin dezavantajları vardır, bu nedenle diğer yaklaşımlardan birini kullanmanızı öneririz.

Son olarak, Hub'daki entegrasyonu tamamlayan görev simgesi ve widget gibi birkaç kullanıcı arayüzü öğesi ekleyebilirsiniz. 📷

Bazı adımlar birbirinden bağımsızdır; belirli bir sırayla yapılması gerekmez. **Simge eklemek için Inference API'ye ihtiyacınız yoktur.** Bu, henüz tam bir entegrasyon olmasa bile kullanıcıların belirli bir görevin modellerini aramaya devam edebileceği anlamına gelir.

## Hub'a yeni görevler ekleme

### Hugging Face transformers kütüphanesini kullanma

Modeliniz `transformers`-tabanlı bir modelse, Inference API görevi ile `pipeline` sınıfı arasında 1:1 bir eşleme vardır. `transformers` kütüphanesinden bazı örnek PR'ler şunlardır:
* [ImageClassificationPipeline Ekleme](https://github.com/huggingface/transformers/pull/11598)
* [AudioClassificationPipeline Ekleme](https://github.com/huggingface/transformers/pull/13342)

Pipeline gönderilip dağıtıldıktan sonra, modeliniz için Inference API'yi kullanabileceksiniz.

### Desteklenen bir kitaplıkla Topluluk Çıkarım API'sini kullanma

Hub, [Community Inference API](https://github.com/huggingface/api-inference-community) kapsamında 10'dan fazla açık kaynak kütüphaneyi de destekler.

**Yeni bir görev eklemek nispeten basittir ve 2 PR gerektirir:**
* PR 1: Yeni görevi API [doğrulama](https://github.com/huggingface/api-inference-community/blob/main/api_inference_community/validation.py)sına ekleyin. Bu kod, çıkarım girdisinin belirli bir görev için geçerli olduğunu garanti eder. Bazı PR örnekleri:
    * [Metinden görüntüye dönüştürme ekle](https://github.com/huggingface/huggingface_hub/commit/5f040a117cf2a44d704621012eb41c01b103cfca#diff-db8bbac95c077540d79900384cfd524d451e629275cbb5de7a31fc1cd5d6c189)
    * [audio-classification ekle](https://github.com/huggingface/huggingface_hub/commit/141e30588a2031d4d5798eaa2c1250d1d1b75905#diff-db8bbac95c077540d79900384cfd524d451e629275cbb5de7a31fc1cd5d6c189)
    * [tablolu-sınıflandırma](https://github.com/huggingface/huggingface_hub/commit/dbea604a45df163d3f0b4b1d897e4b0fb951c650#diff-db8bbac95c077540d79900384cfd524d451e629275cbb5de7a31fc1cd5d6c189)
* PR 2: Yeni görevi bir kitaplık docker imajına ekleyin. Diğer kitaplıklara entegrasyonu kolaylaştırmak için [`docker_images/common/app/pipelines`](https://github.com/huggingface/api-inference-community/tree/main/docker_images/common/app/pipelines) dizinine bir şablon da eklemelisiniz. Örnek bir PR:
    * [spaCy'ye text-classification ekle](https://github.com/huggingface/huggingface_hub/commit/6926fd9bec23cb963ce3f58ec53496083997f0fa#diff-3f1083a92ca0047b50f9ad2d04f0fe8dfaeee0e26ab71eb8835e365359a1d0dc)

### Hızlı bir prototip için Topluluk Çıkarım API'si Ekleme

**Modelim hiçbir kütüphane tarafından desteklenmiyor. Çaresiz miyim? 😱**

Bu kullanım senaryoları için [Hugging Face Spaces](./spaces) kullanmanızı öneririz.

### Arayüz öğeleri

Hub, kullanıcıların modelleri belirli bir göreve göre filtrelemesine olanak tanır. Bunu yapmak için görevi birkaç yere eklemeniz gerekir. Ayrıca görev için bir simge de seçebilirsiniz!

1. Görev türünü `Types.ts` dosyasına ekleyin

[huggingface.js/packages/tasks/src/pipelines.ts](https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/src/pipelines.ts) dosyasında birkaç şey yapmanız gerekiyor

* Tipi `PIPELINE_DATA` içine ekleyin. Not: pipeline tipleri farklı kategorilere (NLP, Ses, Bilgisayarlı Görü ve diğerleri) ayrılmıştır.
* Ayrıca [huggingface.js/packages/tasks/src/tasks/index.ts](https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/src/tasks/index.ts) dosyasındaki küçük değişiklikleri de doldurmanız gerekecektir.

2. Bir simge seçin

[lib/Icons](https://github.com/huggingface/huggingface.js/tree/main/packages/widgets/src/lib/components/Icons) dizinine bir simge ekleyebilirsiniz. Genellikle https://icones.js.org/collection/carbon adresinden carbon simgeleri seçeriz. Ayrıca simgeyi [PipelineIcon](https://github.com/huggingface/huggingface.js/blob/main/packages/widgets/src/lib/components/PipelineIcon/PipelineIcon.svelte) bileşenine de ekleyin.

### Widget

Görev üretim ortamına alındığında, kullanıcıların tarayıcılarında modellerle doğrudan oynayabilmelerini sağlayacak bir yöntem uygulamaktan daha heyecan verici ne olabilir? 🤩 Tüm widget'ları [burada](https://huggingface.co/spaces/huggingfacejs/inference-widgets) bulabilirsiniz.

Bir widget ile katkıda bulunmak isterseniz, tüm widget'ların [uygulamasına](https://github.com/huggingface/huggingface.js/tree/main/packages/widgets) göz atabilirsiniz.

