# Webhooks Sunucusu

Webhooks, MLOps ile ilgili özelliklerin temelini oluşturur. Takip etmeye ilgi duyduğunuz belirli kullanıcıların/organizasyonların tüm depolarında veya belirli depolardaki yeni değişiklikleri dinlemenizi sağlar. Huggingface Hub'daki webhooks hakkında daha fazla bilgi edinmek için Webhooks [kılavuzunu](https://huggingface.co/docs/hub/webhooks) okuyabilirsiniz.

> [!TIP]
> Webhook sunucunuzu nasıl kuracağınızı ve bir Space olarak nasıl dağıtacağınızı adım adım anlatan bu [kılavuza](../guides/webhooks_server) göz atın.

> [!WARNING]
> Bu deneysel bir özelliktir. Bu, API'yi iyileştirmek için hâlâ çalıştığımız anlamına gelir. Gelecekte önceden haber verilmeden kırıcı değişiklikler (breaking changes) getirilebilir. Gereksinimlerinizde `huggingface_hub` sürümünü sabitlemeyi (pin) unutmayın. Deneysel bir özellik kullandığınızda bir uyarı tetiklenir. `HF_HUB_DISABLE_EXPERIMENTAL_WARNING=1` ortam değişkenini ayarlayarak bunu devre dışı bırakabilirsiniz.

## Sunucu

Sunucu bir [Gradio](https://gradio.app/) uygulamasıdır. Sizin veya kullanıcılarınızın talimatları görüntülemesi için bir arayüzü ve webhooks dinlemek için bir API'si vardır. Bir webhook uç noktası uygulamak, bir fonksiyonu süslemek (decorating) kadar basittir. Daha sonra, onu bir Space'e dağıtmadan önce Webhooks'u makinenize (bir Gradio tüneli kullanarak) yönlendirerek hata ayıklamasını yapabilirsiniz.

### WebhooksServer[[huggingface_hub.WebhooksServer]]

#### huggingface_hub.WebhooksServer[[huggingface_hub.WebhooksServer]]

```python
huggingface_hub.WebhooksServer(*args, **kwargs)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_server.py#L37)

**Parametreler:**

ui (`gradio.Blocks`, isteğe bağlı) : Space giriş sayfası olarak kullanılacak bir Gradio UI örneği. `None` ise, yapılandırılan webhooks hakkında talimatlar gösteren bir UI oluşturulur.

webhook_secret (`str`, isteğe bağlı) : Gelen webhook isteklerini doğrulamak için gizli bir anahtar. Bu değeri, [webhooks ayarlar panelinde](https://huggingface.co/settings/webhooks) de yapılandırdığınız sürece istediğiniz herhangi bir gizli anahtar olarak ayarlayabilirsiniz. Ayrıca bu değeri `WEBHOOK_SECRET` ortam değişkeni olarak da ayarlayabilirsiniz. Gizli anahtar sağlanmazsa, webhook uç noktaları herhangi bir güvenlik olmadan açılır.

[WebhooksServer()](/docs/huggingface_hub/v2.4.0/tr/package_reference/webhooks_server#huggingface_hub.WebhooksServer) sınıfı, Huggingface webhooks'larını alabilen bir Gradio uygulaması örneği oluşturmanızı sağlar. Bu webhooks'lar `add_webhook()` dekoratörü kullanılarak kaydedilebilir. Webhook uç noktaları, uygulamaya FastAPI yönlendiricisine bir POST uç noktası olarak eklenir. Tüm webhooks'lar kaydedildikten sonra, uygulamayı başlatmak için `launch` yönteminin çağrılması gerekir.

Webhook işlevinin ilk argümanı olarak [WebhookPayload](/docs/huggingface_hub/v2.4.0/tr/package_reference/webhooks_server#huggingface_hub.WebhookPayload) kabul etmeniz önerilir. Bu, webhook olayına dair tüm bilgileri içeren bir Pydantic modelidir. Veriler sizin için otomatik olarak ayrıştırılır.

WebhooksServer'ınızı nasıl kuracağınız ve bir Space üzerinde nasıl dağıtacağınız konusunda adım adım bir eğitim için [webhooks kılavuzuna](../guides/webhooks_server) göz atın.

> [!WARNING]
> `WebhooksServer` deneyseldir. API'si gelecekte değişiklik gösterebilir.

> [!WARNING]
> `WebhooksServer` kullanmak için `gradio` kurulu olmalıdır (`pip install --upgrade gradio`).

Örnek:

```python
import gradio as gr
from huggingface_hub import WebhooksServer, WebhookPayload

with gr.Blocks() as ui:
    ...

app = WebhooksServer(ui=ui, webhook_secret="my_secret_key")

@app.add_webhook("/say_hello")
async def hello(payload: WebhookPayload):
    return {"message": "hello"}

app.launch()
```

### @webhook_endpoint[[huggingface_hub.webhook_endpoint]]

#### huggingface_hub.webhook_endpoint[[huggingface_hub.webhook_endpoint]]

```python
huggingface_hub.webhook_endpoint(path: str | None = None)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_server.py#L221)

**Parametreler:**

path (`str`, isteğe bağlı) : Webhook işlevini kaydetmek için URL yolu. Sağlanmazsa, işlev adı yol olarak kullanılır. Her durumda, tüm webhook'lar `/webhooks` altında kaydedilir.

Bir [WebhooksServer()](/docs/huggingface_hub/v2.4.0/tr/package_reference/webhooks_server#huggingface_hub.WebhooksServer) başlatmak ve dekore edilen fonksiyonu bir webhook uç noktası olarak kaydetmek için dekoratör.

Bu, hızlı bir başlangıç yapmanızı sağlayan bir yardımcıdır. Daha fazla esnekliğe (özel bir açılış sayfası veya webhook gizli anahtarı gibi) ihtiyacınız varsa, [WebhooksServer()](/docs/huggingface_hub/v2.4.0/tr/package_reference/webhooks_server#huggingface_hub.WebhooksServer) sınıfını doğrudan kullanabilirsiniz. Bu dekoratörü birden fazla kez kullanarak aynı sunucuya birden çok webhook uç noktası kaydedebilirsiniz.

Sunucunuzu nasıl kuracağınız ve bir Space üzerinde nasıl dağıtacağınız konusunda adım adım bir eğitim için [webhooks kılavuzuna](../guides/webhooks_server) göz atın.

> [!WARNING]
> `webhook_endpoint` deneyseldir. API'si gelecekte değişiklik gösterebilir.

> [!WARNING]
> `webhook_endpoint` kullanmak için `gradio` kurulu olmalıdır (`pip install --upgrade gradio`).

Örnekler: Varsayılan kullanım, bir fonksiyonu webhook uç noktası olarak kaydetmektir. Fonksiyon adı, yol olarak kullanılacaktır. Sunucu, çıkışta (yani betiğin sonunda) otomatik olarak başlatılacaktır.

```python
from huggingface_hub import webhook_endpoint, WebhookPayload

@webhook_endpoint
async def trigger_training(payload: WebhookPayload):
    if payload.repo.type == "dataset" and payload.event.action == "update":
        # Trigger a training job if a dataset is updated
        ...

# Server is automatically started at the end of the script.
```

Gelişmiş kullanım: bir fonksiyonu webhook uç noktası olarak kaydedin ve sunucuyu manuel olarak başlatın. Bu, bir defterde çalıştırıyorsanız faydalıdır.

```python
from huggingface_hub import webhook_endpoint, WebhookPayload

@webhook_endpoint
async def trigger_training(payload: WebhookPayload):
    if payload.repo.type == "dataset" and payload.event.action == "update":
        # Trigger a training job if a dataset is updated
        ...

# Start the server manually
trigger_training.launch()
```

## Yük[[huggingface_hub.WebhookPayload]]

[WebhookPayload](/docs/huggingface_hub/v2.4.0/tr/package_reference/webhooks_server#huggingface_hub.WebhookPayload), Webhook'lerden gelen yükü (payload) içeren ana veri yapısıdır. Bu, `pydantic` sınıfıdır ve FastAPI ile kullanımını çok kolay hale getirir. Webhook uç noktasına parametre olarak geçirildiğinde, otomatik olarak doğrulanır ve bir Python nesnesi olarak ayrıştırılır.

Webhooks payload hakkında daha fazla bilgi için Webhooks Payload [kılavuzuna](https://huggingface.co/docs/hub/webhooks#webhook-payloads) başvurabilirsiniz.

#### huggingface_hub.WebhookPayload[[huggingface_hub.WebhookPayload]]

```python
huggingface_hub.WebhookPayload(event: WebhookPayloadEvent, repo: WebhookPayloadRepo, discussion: huggingface_hub._webhooks_payload.WebhookPayloadDiscussion | None = None, comment: huggingface_hub._webhooks_payload.WebhookPayloadComment | None = None, webhook: WebhookPayloadWebhook, movedTo: huggingface_hub._webhooks_payload.WebhookPayloadMovedTo | None = None, updatedRefs: list[huggingface_hub._webhooks_payload.WebhookPayloadUpdatedRef] | None = None)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_payload.py#L129)

### WebhookPayload[[huggingface_hub.WebhookPayload]]

#### huggingface_hub.WebhookPayload[[huggingface_hub.WebhookPayload]]

```python
huggingface_hub.WebhookPayload(event: WebhookPayloadEvent, repo: WebhookPayloadRepo, discussion: huggingface_hub._webhooks_payload.WebhookPayloadDiscussion | None = None, comment: huggingface_hub._webhooks_payload.WebhookPayloadComment | None = None, webhook: WebhookPayloadWebhook, movedTo: huggingface_hub._webhooks_payload.WebhookPayloadMovedTo | None = None, updatedRefs: list[huggingface_hub._webhooks_payload.WebhookPayloadUpdatedRef] | None = None)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_payload.py#L129)

### WebhookPayloadComment[[huggingface_hub.WebhookPayloadComment]]

#### huggingface_hub.WebhookPayloadComment[[huggingface_hub.WebhookPayloadComment]]

```python
huggingface_hub.WebhookPayloadComment(id: str, author: ObjectId, hidden: bool, content: str | None = None, url: WebhookPayloadUrl)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_payload.py#L94)

### WebhookPayloadDiscussion[[huggingface_hub.WebhookPayloadDiscussion]]

#### huggingface_hub.WebhookPayloadDiscussion[[huggingface_hub.WebhookPayloadDiscussion]]

```python
huggingface_hub.WebhookPayloadDiscussion(id: str, num: int, author: ObjectId, url: WebhookPayloadUrl, title: str, isPullRequest: bool, status: typing.Literal['closed', 'draft', 'open', 'merged'], changes: huggingface_hub._webhooks_payload.WebhookPayloadDiscussionChanges | None = None, pinned: bool | None = None)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_payload.py#L101)

### WebhookPayloadDiscussionChanges[[huggingface_hub.WebhookPayloadDiscussionChanges]]

#### huggingface_hub.WebhookPayloadDiscussionChanges[[huggingface_hub.WebhookPayloadDiscussionChanges]]

```python
huggingface_hub.WebhookPayloadDiscussionChanges(base: str, mergeCommitId: str | None = None)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_payload.py#L89)

### WebhookPayloadEvent[[huggingface_hub.WebhookPayloadEvent]]

#### huggingface_hub.WebhookPayloadEvent[[huggingface_hub.WebhookPayloadEvent]]

```python
huggingface_hub.WebhookPayloadEvent(action: typing.Literal['create', 'delete', 'move', 'update'], scope: str)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_payload.py#L84)

### WebhookPayloadMovedTo[[huggingface_hub.WebhookPayloadMovedTo]]

#### huggingface_hub.WebhookPayloadMovedTo[[huggingface_hub.WebhookPayloadMovedTo]]

```python
huggingface_hub.WebhookPayloadMovedTo(name: str, owner: ObjectId)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_payload.py#L75)

### WebhookPayloadRepo[[huggingface_hub.WebhookPayloadRepo]]

#### huggingface_hub.WebhookPayloadRepo[[huggingface_hub.WebhookPayloadRepo]]

```python
huggingface_hub.WebhookPayloadRepo(id: str, owner: ObjectId, head_sha: str | None = None, name: str, private: bool, subdomain: str | None = None, tags: list[str] | None = None, type: typing.Literal['dataset', 'model', 'space'], url: WebhookPayloadUrl)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_payload.py#L112)

### WebhookPayloadUrl[[huggingface_hub.WebhookPayloadUrl]]

#### huggingface_hub.WebhookPayloadUrl[[huggingface_hub.WebhookPayloadUrl]]

```python
huggingface_hub.WebhookPayloadUrl(web: str, api: str | None = None)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_payload.py#L70)

### WebhookPayloadWebhook[[huggingface_hub.WebhookPayloadWebhook]]

#### huggingface_hub.WebhookPayloadWebhook[[huggingface_hub.WebhookPayloadWebhook]]

```python
huggingface_hub.WebhookPayloadWebhook(id: str, version: typing.Literal[3])
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/_webhooks_payload.py#L80)

