Hub documentation
Spaces dưới dạng điểm cuối API
Spaces dưới dạng điểm cuối API
Mọi Gradio Space trên Hugging Face đều tự động khả dụng dưới dạng một điểm cuối API. Bạn có thể gọi nó từ Python, JavaScript hoặc bất kỳ client HTTP nào. Nếu bạn có thể sử dụng một Space trong trình duyệt, bạn có thể gọi nó như một API.
Bắt đầu nhanh
Cài đặt client Python và gọi bất kỳ Space công khai nào:
pip install --upgrade gradio_client
from gradio_client import Client
client = Client("abidlabs/en2fr", token="hf_...")
result = client.predict("Hello, world!", api_name="/predict")
print(result) # "Bonjour, le monde!"Xem các điểm cuối API khả dụng
Mọi Gradio Space đều có liên kết “Use via API” ở phần chân trang. Nhấp vào để xem:
- Tất cả các endpoint khả dụng và tên của chúng
- Loại và mô tả tham số
- Các đoạn mã được tạo tự động cho Python và JavaScript
- Trình ghi API tạo mã từ các tương tác giao diện người dùng của bạn
Mọi Space cũng cung cấp một đặc tả OpenAPI tại:
https://<space-subdomain>.hf.space/gradio_api/openapi.jsonVí dụ: https://abidlabs-en2fr.hf.space/gradio_api/openapi.json
Điều này hữu ích để hiểu rõ sơ đồ API đầy đủ và tích hợp nó vào các ứng dụng của bạn.
Bạn cũng có thể kiểm tra các endpoint theo cách lập trình:
from gradio_client import Client
client = Client("abidlabs/whisper", token="hf_...")
client.view_api() # Prints all endpoints with parametersPython client
Cài đặt
pip install --upgrade gradio_client
Yêu cầu Python 3.10+.
Kết nối với một Space
from gradio_client import Client
# Public Space
client = Client("username/space-name")
# Private Space (requires token)
client = Client("username/private-space", token="hf_xxxxx")Lấy token Hugging Face của bạn tại https://huggingface.co/settings/tokens. Đối với Spaces riêng tư, bạn cần một token có quyền READ.
Thực hiện dự đoán
Đồng bộ (chặn):
result = client.predict("Hello", api_name="/predict")Bất đồng bộ (không chặn):
job = client.submit("Hello", api_name="/predict")
# Do other work...
result = job.result() # Get result when readyXử lý tệp
Sử dụng handle_file() cho mọi đầu vào tệp:
from gradio_client import Client, handle_file
client = Client("abidlabs/whisper", token="hf_...")
# From local file
result = client.predict(audio=handle_file("audio.wav"), api_name="/predict")
# From URL
result = client.predict(audio=handle_file("https://example.com/audio.wav"), api_name="/predict")Theo dõi trạng thái công việc
job = client.submit("Hello", api_name="/predict")
# Check status
status = job.status()
print(f"Queue position: {status.rank}, ETA: {status.eta}")
# Check if complete
if job.done():
result = job.result()
# Cancel a pending job
job.cancel()Điểm cuối Streaming/Generator
Đối với các endpoint trả về nhiều đầu ra:
job = client.submit(prompt="Write a story", api_name="/generate")
# Iterate over streaming outputs
for output in job:
print(output)JavaScript client
Cài đặt
npm i @gradio/client
Hoặc sử dụng qua CDN:
<script type="module">
import { Client } from "https://cdn.jsdelivr.net/npm/@gradio/client/dist/index.min.js";
</script>Kết nối và Dự đoán
import { Client } from "@gradio/client";
const app = await Client.connect("abidlabs/en2fr", { token: "hf_..." });
const result = await app.predict("/predict", ["Hello"]);
console.log(result.data);Xử lý tệp
import { Client, handle_file } from "@gradio/client";
const app = await Client.connect("abidlabs/whisper", { token: "hf_..." });
const result = await app.predict("/predict", [
handle_file("https://example.com/audio.wav")
]);Kết quả luồng
const job = app.submit("/predict", ["Hello"]);
for await (const message of job) {
if (message.type === "data") {
console.log("Result:", message.data);
}
if (message.type === "status") {
console.log("Queue position:", message.position);
}
}REST API (curl)
Bạn cũng có thể gọi trực tiếp Gradio Spaces qua HTTP mà không cần bất kỳ thư viện client nào.
API dựa trên hàng đợi (Được khuyến nghị)
Hầu hết các Spaces sử dụng quy trình hai bước:
Bước 1: Gửi yêu cầu của bạn
curl -X POST "https://abidlabs-en2fr.hf.space/gradio_api/call/predict" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $HF_TOKEN" \
-d '{"data": ["Hello, world"]}'Phản hồi:
{"event_id": "abc123"}Bước 2: Lấy kết quả
curl -N "https://abidlabs-en2fr.hf.space/gradio_api/call/predict/abc123" \
-H "Authorization: Bearer $HF_TOKEN"Phản hồi (Server-Sent Events):
event: complete
data: ["Bonjour, le monde!"]Tiêu đề Authorization là bắt buộc đối với các Spaces riêng tư và giúp cải thiện giới hạn tần suất truy cập trên các Spaces công khai.
ZeroGPU Spaces
Các Space ZeroGPU có hạn mức sử dụng dựa trên loại tài khoản của bạn:
| Loại tài khoản | Hạn mức GPU hàng ngày được bao gồm |
|---|---|
| Chưa xác thực | 2 phút |
| Tài khoản miễn phí | 5 phút |
| Tài khoản PRO | 40 phút |
Khi bạn xác thực bằng token, hạn mức GPU của tài khoản bạn sẽ bị tiêu thụ. Các yêu cầu không xác thực sẽ sử dụng một nhóm dùng chung với các giới hạn chặt chẽ hơn.
Người dùng PRO, Team và Enterprise có thể vượt quá hạn mức hàng ngày được bao gồm bằng cách sử dụng tín dụng trả trước với mức giá 1 đô la cho mỗi 10 phút thời gian GPU.
Bạn có thể đăng ký PRO để nhận 40 phút hạn mức GPU hàng ngày, ưu tiên hàng đợi cao hơn và khả năng mở rộng hạn mức bằng tín dụng.
Các mẫu phổ biến
Tích hợp FastAPI
from fastapi import FastAPI
from gradio_client import Client, handle_file
app = FastAPI()
client = Client("abidlabs/whisper", token="hf_...")
@app.post("/transcribe/")
async def transcribe(file_url: str):
result = client.predict(audio=handle_file(file_url), api_name="/predict")
return {"transcription": result}Xử lý lỗi với cơ chế thử lại
import time
from gradio_client import Client
def predict_with_retry(client, *args, max_retries=3, **kwargs):
for attempt in range(max_retries):
try:
return client.predict(*args, **kwargs)
except Exception as e:
if attempt < max_retries - 1:
time.sleep(2 ** attempt) # Exponential backoff
else:
raise
client = Client("username/space", token="hf_...")
result = predict_with_retry(client, "input", api_name="/predict")Gọi Spaces từ một Space khác
Khi gọi một ZeroGPU Space từ ứng dụng Gradio của bạn, hãy chuyển tiếp xác thực của người dùng:
import gradio as gr
from gradio_client import Client
def process(prompt, request: gr.Request):
x_ip_token = request.headers.get('x-ip-token', '')
client = Client("owner/zerogpu-space", headers={"x-ip-token": x_ip_token})
return client.predict(prompt, api_name="/predict")
demo = gr.Interface(fn=process, inputs="text", outputs="text")
demo.launch()Tìm Spaces bằng tìm kiếm ngữ nghĩa
Với hàng nghìn Gradio Spaces có sẵn, đôi khi bạn muốn tìm một Space cho một tác vụ cụ thể:
curl -s "https://huggingface.co/api/spaces/semantic-search?q=text+to+speech&sdk=gradio"Điều này trả về các Space được xếp hạng theo mức độ liên quan ngữ nghĩa, kèm theo metadata bao gồm ID của Space, số lượt thích và mô tả ngắn. Sử dụng tham số sdk=gradio để lọc các Space có API.
Tìm hiểu thêm
- Hướng dẫn Python Client của Gradio
- Hướng dẫn Client JavaScript của Gradio
- Truy vấn ứng dụng Gradio bằng curl
- Spaces ZeroGPU