Hub 文件
Webhooks
並獲得增強的文件體驗
開始使用
Webhooks
Webhooks 現已公開!
Webhooks 是 MLOps 相關功能的基礎。它們允許您監聽特定倉庫或屬於特定使用者/組織集的所有倉庫(不僅僅是您的倉庫,而是任何倉庫)的新更改。
您可以使用它們自動轉換模型、構建社群機器人,或為您的模型、資料集和 Spaces 構建 CI/CD(以及更多!)。
Webhooks 的文件在下方 – 您也可以瀏覽我們的 指南,其中展示了 Webhooks 的一些可能用例。
建立您的 Webhook
您可以在 Webhooks 設定中建立新的 Webhooks 並編輯現有的 Webhooks。
Webhooks 可以監視倉庫更新、Pull Requests、討論和新評論。甚至可以建立一個 Space 來響應您的 Webhooks!
Webhook 有效載荷
註冊 Webhook 後,您將透過指定目標 URL 上的 HTTP POST
呼叫收到新事件通知。有效載荷以 JSON 格式編碼。
您可以在 webhook 設定頁面的活動選項卡中檢視傳送的有效載荷歷史記錄,也可以重播過去的 webhooks 以便更輕鬆地除錯。
例如,這是一個 Pull Request 開啟時的完整有效載荷:
{
"event": {
"action": "create",
"scope": "discussion"
},
"repo": {
"type": "model",
"name": "openai-community/gpt2",
"id": "621ffdc036468d709f17434d",
"private": false,
"url": {
"web": "https://huggingface.co/openai-community/gpt2",
"api": "https://huggingface.co/api/models/openai-community/gpt2"
},
"owner": {
"id": "628b753283ef59b5be89e937"
}
},
"discussion": {
"id": "6399f58518721fdd27fc9ca9",
"title": "Update co2 emissions",
"url": {
"web": "https://huggingface.co/openai-community/gpt2/discussions/19",
"api": "https://huggingface.co/api/models/openai-community/gpt2/discussions/19"
},
"status": "open",
"author": {
"id": "61d2f90c3c2083e1c08af22d"
},
"num": 19,
"isPullRequest": true,
"changes": {
"base": "refs/heads/main"
}
},
"comment": {
"id": "6399f58518721fdd27fc9caa",
"author": {
"id": "61d2f90c3c2083e1c08af22d"
},
"content": "Add co2 emissions information to the model card",
"hidden": false,
"url": {
"web": "https://huggingface.co/openai-community/gpt2/discussions/19#6399f58518721fdd27fc9caa"
}
},
"webhook": {
"id": "6390e855e30d9209411de93b",
"version": 3
}
}
事件
頂層屬性 event
始終指定並用於確定事件的性質。
它有兩個子屬性:event.action
和 event.scope
。
event.scope
將是以下值之一:
"repo"
- 倉庫上的全域性事件。關聯action
的可能值:"create"
,"delete"
,"update"
,"move"
。"repo.content"
- 倉庫內容上的事件,例如新的提交或標籤。由於新建立的引用/提交,它也會觸發新的 Pull Requests。關聯action
始終為"update"
。"repo.config"
- 配置上的事件:更新 Space 金鑰,更新設定,更新 DOI,啟用或停用等。關聯action
始終為"update"
。"discussion"
- 建立討論或 Pull Request,更新標題或狀態,以及合併。關聯action
的可能值:"create"
,"delete"
,"update"
。"discussion.comment"
- 建立、更新和隱藏評論。關聯action
的可能值:"create"
,"update"
。
未來可能會新增更多範圍。為了處理未知事件,您的 webhook 處理程式可以將縮小範圍內的任何操作視為擴大範圍內的 "update"
操作。
例如,如果未來添加了 "repo.config.dois"
範圍,則您的 webhook 處理程式可以將具有該範圍的任何事件視為 "repo.config"
範圍上的 "update"
操作。
倉庫
在當前版本的 webhooks 中,頂級屬性 repo
始終被指定,因為事件始終可以與倉庫關聯。例如,考慮以下值:
"repo": {
"type": "model",
"name": "some-user/some-repo",
"id": "6366c000a2abcdf2fd69a080",
"private": false,
"url": {
"web": "https://huggingface.co/some-user/some-repo",
"api": "https://huggingface.co/api/models/some-user/some-repo"
},
"headSha": "c379e821c9c95d613899e8c4343e4bfee2b0c600",
"tags": [
"license:other",
"has_space"
],
"owner": {
"id": "61d2000c3c2083e1c08af22d"
}
}
repo.headSha
是倉庫 main
分支上最新提交的 sha。它僅在 event.scope
以 "repo"
開頭時傳送,而不傳送給討論和評論等社群事件。
程式碼變更
在程式碼變更時,頂層屬性 updatedRefs
在倉庫事件中指定。它是一個包含已更新引用的陣列。以下是示例值:
"updatedRefs": [
{
"ref": "refs/heads/main",
"oldSha": "ce9a4674fa833a68d5a73ec355f0ea95eedd60b7",
"newSha": "575db8b7a51b6f85eb06eee540738584589f131c"
},
{
"ref": "refs/tags/test",
"oldSha": null,
"newSha": "575db8b7a51b6f85eb06eee540738584589f131c"
}
]
新建立的引用將把 oldSha
設定為 null
。已刪除的引用將把 newSha
設定為 null
。
您可以對特定 pull request 中的新提交、新標籤或新分支作出反應。
配置更改
當頂級屬性 event.scope
為 "repo.config"
時,會指定 updatedConfig
屬性。它是一個包含更新配置的物件。以下是示例值:
"updatedConfig": {
"private": false
}
或者
"updatedConfig": {
"xetEnabled": true,
}
或者,當更新的配置鍵不受 webhook 支援時:
"updatedConfig": {}
目前只支援 private
和 xetEnabled
。如果您需要更多配置鍵,請透過 website@huggingface.co 告知我們。
討論和 Pull Requests
頂級屬性 discussion
在社群事件(討論和 Pull Requests)中指定。discussion.isPullRequest
屬性是一個布林值,指示討論是否也是 Pull Request(在 Hub 上,PR 是一種特殊型別的討論)。以下是示例值:
"discussion": {
"id": "639885d811ae2bad2b7ba461",
"title": "Hello!",
"url": {
"web": "https://huggingface.co/some-user/some-repo/discussions/3",
"api": "https://huggingface.co/api/models/some-user/some-repo/discussions/3"
},
"status": "open",
"author": {
"id": "61d2000c3c2083e1c08af22d"
},
"isPullRequest": true,
"changes": {
"base": "refs/heads/main"
}
"num": 3
}
評論
當評論被建立(包括在討論建立時)或更新時,頂級屬性 comment
會被指定。以下是示例值:
"comment": {
"id": "6398872887bfcfb93a306f18",
"author": {
"id": "61d2000c3c2083e1c08af22d"
},
"content": "This adds an env key",
"hidden": false,
"url": {
"web": "https://huggingface.co/some-user/some-repo/discussions/4#6398872887bfcfb93a306f18"
}
}
Webhook 金鑰
設定 Webhook 金鑰有助於確保傳送到您的 Webhook 處理程式 URL 的有效負載確實來自 Hugging Face。
如果您為 Webhook 設定了金鑰,它將作為 X-Webhook-Secret
HTTP 標頭隨每個請求傳送。僅支援 ASCII 字元。
如果您的 Webhook 處理程式訪問請求的 HTTP 標頭很複雜,這會很有幫助。
速率限制
每個 Webhook 每天(24 小時)限制 1,000 次觸發。您可以在 Webhook 設定頁面的“活動”選項卡中檢視您的使用情況。
如果您需要增加 Webhook 的觸發次數,請透過 website@huggingface.co 聯絡我們。
開發您的 Webhooks
如果您沒有 HTTPS 端點/URL,可以嘗試使用公共工具進行 webhook 測試。這些工具充當捕獲所有傳送給它們的請求的萬能(捕獲所有請求)工具,並返回 200 OK 狀態碼。Beeceptor 是一個可以用來建立臨時 HTTP 端點並檢視傳入有效載荷的工具。另一個類似的工具是 Webhook.site。
此外,您可以在開發過程中將真實的 Webhook 有效負載路由到您本地機器上執行的程式碼。這是測試和除錯以實現更快整合的好方法。您可以透過將本地主機埠暴露到 Internet 來實現此目的。為此,您可以使用 ngrok 或 localtunnel。
除錯 Webhooks
您可以輕鬆找到最近為您的 webhook 生成的事件。開啟 webhook 的活動選項卡。在那裡您將看到最近事件的列表。
您可以在此處檢視生成的事件的 HTTP 狀態程式碼和有效負載。此外,您可以透過單擊 Replay
按鈕來重播這些事件!
注意:當更改 Webhook 的目標 URL 或金鑰時,重播事件會將有效負載傳送到更新後的 URL。
常見問題
我可以在我的組織而非我的使用者帳戶上定義 webhook 嗎?
不,目前不支援。
我如何訂閱 HF 上的所有事件(或整個倉庫型別,例如所有模型)?
此功能目前不向終端使用者開放,但如果您傳送電子郵件至 website@huggingface.co,我們可以為您開啟。
< > 在 GitHub 上更新