Hub documentation

Spaces dưới dạng điểm cuối API

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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.json

Ví 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 parameters

Python 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 ready

Xử 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ảnHạn mức GPU hàng ngày được bao gồm
Chưa xác thực2 phút
Tài khoản miễn phí5 phút
Tài khoản PRO40 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

Update on GitHub