【Gradio】使用 Curl 查询 Gradio 应用程序

可以使用 cURL 这个预装在许多操作系统上的命令行工具,将任何 Gradio 应用作为 API 使用。如果您尝试从 Python 或 Javascript 以外的环境查询 Gradio 应用(因为 Python 和 Javascript 都有专门的 Gradio 客户端),这特别有用。

例如,考虑这个将英文翻译成法文的 Gradio 演示:https://abidlabs-en2fr.hf.space/。

使用 curl ,我们可以以编程方式翻译文本。

这是执行它的代码:

使用了curl工具向指定的URL发起一个POST请求,目标是调用一个部署在Hugging Face Spaces上的模型接口(例如翻译、语音识别等),并传递了一些需要处理的数据。

$ curl -X POST https://abidlabs-en2fr.hf.space/call/predict \
    -H "Content-Type: application/json" \
    -d '{
      "data": ["Hello, my friend."] 
    }'
    
>> {"event_id": $EVENT_ID}

d338ce42bbe5cf18a14088b8a4daad01.png

演示了如何使用curl工具从指定的URL检索特定事件ID的处理结果。在这个例子中,该命令主要用于从一个模型接口获取翻译结果。

$ curl -N https://abidlabs-en2fr.hf.space/call/predict/$EVENT_ID


>> event: complete
>> data: ["Bonjour, mon ami."]

0f417a17c032352afdd1904338364c34.png

注意:进行预测并获得结果需要两个 curl 请求:一个 POST 和一个 GET 。 POST 请求返回一个 EVENT_ID 并将其打印到控制台,这在第二个 GET 请求中用于获取结果。您可以使用 awk 和 read 将这些合并成一个命令,像这样解析第一个命令的结果并传递到第二个命令:

# 使用curl命令发送POST请求,请求目的是调用翻译服务,将"Hello, my friend."翻译成法语。
# 请求结果通过管道传递给awk命令用于解析JSON,提取事件ID。
$ curl -X POST https://abidlabs-en2fr.hf.space/call/predict -H "Content-Type: application/json" -d '{
  "data": ["Hello, my friend."] 
}' \
  # 使用awk命令和-F参数设置分隔符为双引号,'$4'表示提取第四个字段,即事件ID。
  | awk -F'"' '{ print $4}'  \
  # 将提取的事件ID赋值给EVENT_ID变量。
  | read EVENT_ID; 
  
# 使用赋值后的EVENT_ID变量作为参数,使用curl命令构造新的GET请求,查询之前请求的处理结果。
curl -N https://abidlabs-en2fr.hf.space/call/predict/$EVENT_ID

8e068503d7892cf8f5bcbed6f49951d0.png

在本指南的其余部分,我们将更详细地解释这两个步骤,并提供使用 curl 查询 Gradio 应用程序的额外示例。

先决条件:对于本指南,您不需要非常详细地了解如何构建 Gradio 应用程序。但是,熟悉 Gradio 的输入和输出组件概念会有所帮助。

安装 

通常,您不需要安装 cURL,因为它已预装在许多操作系统上。运行:

curl --version

确认 curl 是否已安装。如果尚未安装,您可以通过访问 https://curl.se/download.html 来安装它。

第 0 步:获取您的 Gradio 应用程序  的 URL

要查询 Gradio 应用程序,您需要其完整的 URL。这通常只是 Gradio 应用程序托管的 URL,例如:https://bec81a83-5b5c-471e.gradio.live

 Hugging Face 空间

但是,如果您在 Hugging Face 空间中查询 Gradio,您需要使用嵌入式 Gradio 应用程序的 URL,而不是空间网页的 URL。例如:

❌ Space URL: https://huggingface.co/spaces/abidlabs/en2fr
✅ Gradio app URL: https://abidlabs-en2fr.hf.space/

您可以通过点击页面底部的“查看 API”链接来获取 Gradio 应用程序的 URL。或者,您可以在页面上右键单击,然后单击“查看框架源”或浏览器中的等效项来查看嵌入式 Gradio 应用程序的 URL。

虽然您可以将任何公共空间作为 API 使用,但如果您的请求过多,您可能会受到 Hugging Face 的限制。为了无限制地使用空间,只需复制空间以创建一个私有空间,然后您就可以根据需要发出尽可能多的请求!

注意:要查询私人空间,您需要传入您的 Hugging Face(HF)令牌。您可以在此处获取您的 HF 令牌:https://huggingface.co/settings/tokens。在这种情况下,您需要在我们下面讨论的两个 curl 调用中都包含一个额外的头部:

-H "Authorization: Bearer $HF_TOKEN"

现在,我们准备发出两个 curl 请求。

第一步:进行预测(POST) 

两个 curl 请求中的第一个是 POST 请求,它将输入负载提交到 Gradio 应用程序。

POST 请求的语法如下:

$ curl -X POST $URL/call/$API_NAME -H "Content-Type: application/json" -d '{
  "data": $PAYLOAD
}'

 在这里:

  • $URL 是在步骤 0 中获得的 Gradio 应用程序的 URL

  • $API_NAME 是你正在运行的事件的 API 端点名称。你可以通过点击页面底部的“查看 API”链接来获取 API 端点名称。

  • $PAYLOAD 是一个有效的 JSON 数据列表,包含输入负载的每个输入组件的一个元素。

当你成功地发出这个 POST 请求时,你将获得一个事件 id,它将以这种格式打印到终端:

>> {"event_id": $EVENT_ID}

此 EVENT_ID 将在后续的 curl 请求中需要,以获取预测结果。

这里有一些如何发出 POST 请求的例子

 基本示例

回顾页面开头的示例,以下是如何为一个简单的 Gradio 应用程序发出 POST 请求,该应用程序接受单个输入文本组件:

$ curl -X POST https://abidlabs-en2fr.hf.space/call/predict -H "Content-Type: application/json" -d '{
  "data": ["Hello, my friend."] 
}'

多个输入组件

curl -X POST https://gradio-hello-world-3.hf.space/call/predict -H "Content-Type: application/json" -d '{
  "data": ["Hello", true, 5]
}'

私人空间

如前所述,如果您要向私人空间发出请求,您需要传入一个具有读取空间权限的 Hugging Face 令牌。请求将如下所示:

# 使用curl命令向指定的API接口发送POST请求。
$ curl -X POST https://private-space.hf.space/call/predict \
    # 添加一个Content-Type头部,说明请求体是JSON格式的。
    -H "Content-Type: application/json" \
    # 添加一个Authorization头部,使用Bearer令牌进行身份验证。
    # $HF_TOKEN是一个环境变量,存放着访问令牌。你需要将其替换成实际的令牌值。
    -H "Authorization: Bearer $HF_TOKEN" \
    # -d 参数用于指定请求的数据体,这里以JSON格式发送数据。
    -d '{
      "data": ["Hello, my friend."] 
    }'

 文件

如果您使用 curl 查询需要文件输入的 Gradio 应用程序,文件需要以 URL 的形式提供,URL 需要用这种格式封装在字典中:

{"path": $URL}

这是一个 POST 请求的例子:

$ curl -X POST https://gradio-image-mod.hf.space/call/predict -H "Content-Type: application/json" -d '{
  "data": [{"path": "https://raw.githubusercontent.com/gradio-app/gradio/main/test/test_files/bus.png"}] 
}'

有状态演示

如果您的 Gradio 演示在多次交互中保持用户状态(例如,是一个聊天机器人),您可以在 data 旁边传入一个 session_hash 。具有相同 session_hash 的请求被认为是同一用户会话的一部分。这可能是什么样子:

# 第一条命令:开始一个新的聊天会话
curl -X POST https://gradio-chatinterface-random-response.hf.space/call/chat \
  -H "Content-Type: application/json" \
  -d '{
    "data": ["Are you sentient?"],   # 聊天数据,即用户输入的问题
    "session_hash": "randomsequence1234" # 会话哈希值,用于标识会话
  }'


# 第二条命令:在同一会话中继续提问
curl -X POST https://gradio-chatinterface-random-response.hf.space/call/chat \
  -H "Content-Type: application/json" \
  -d '{
    "data": ["Really?"],   # 用户的后续提问
    "session_hash": "randomsequence1234" # 使用相同的会话哈希值来标识是同一会话
  }'


# 第三条命令:开始一个全新的会话
curl -X POST https://gradio-chatinterface-random-response.hf.space/call/chat \
  -H "Content-Type: application/json" \
  -d '{
    "data": ["Are you sentient?"],   # 聊天数据,即用户输入的问题
    "session_hash": "newsequence5678" # 使用不同的会话哈希值,标识这是一个新的会话
  }'

12471e43d2e8ca56a61f8a7e94623840.png

步骤 2:获取结果 

一旦您收到与您的预测相对应的 EVENT_ID ,您就可以流式传输结果。Gradio 将这些结果存储在 Gradio 应用程序中的最近最少使用缓存中。默认情况下,缓存可以存储 2,000 个结果(跨所有用户和应用程序的端点)。

要流式传输您的预测结果,请使用以下语法发出 GET 请求:

$ curl -N $URL/call/$API_NAME/$EVENT_ID

✍️ 提示:如果您正在从私人空间获取结果,请在`GET`请求中这样包含一个带有您的 HF 令牌的头部:`-H "Authorization: Bearer $HF_TOKEN"`。

这应该会产生这种格式的响应流:

event: ... 
data: ...
event: ... 
data: ...
...

这里: event 可以是以下之一:

  • generating :表示一个中间结果

  • complete :表示预测已完成并得出最终结果

  • error :表示预测未成功完成

  • heartbeat :每 15 秒发送一次以保持请求活跃

data 的格式与输入负载相同:有效的 JSON 数据列表,包含每个输出组件的输出结果。

如果请求成功完成,您应该期望的结果示例如下:

 基本示例

回顾页面开头的示例,我们期望结果看起来像这样:

event: complete
data: ["Bonjour, mon ami."]

多重输出

如果您的端点返回多个值,它们将作为 data 列表的元素出现:

event: complete
data: ["Good morning Hello. It is 5 degrees today", -15.0]

 流媒体示例

如果您的 Gradio 应用程序流式传输一系列值,那么它们将直接流式传输到您的终端,就像这样:

event: generating
data: ["Hello, w!"]
event: generating
data: ["Hello, wo!"]
event: generating
data: ["Hello, wor!"]
event: generating
data: ["Hello, worl!"]
event: generating
data: ["Hello, world!"]
event: complete
data: ["Hello, world!"]

 文件示例

如果您的 Gradio 应用程序返回一个文件,该文件将以这种格式(包括可能的一些额外键)表示为一个字典:

{
    "orig_name": "example.jpg",
    "path": "/path/in/server.jpg",
    "url": "https:/example.com/example.jpg",
    "meta": {"_type": "gradio.FileData"}
}

在您的终端,它可能会像这样显示:

event: complete
data: [{"path": "/tmp/gradio/359933dc8d6cfe1b022f35e2c639e6e42c97a003/image.webp", "url": "https://gradio-image-mod.hf.space/c/file=/tmp/gradio/359933dc8d6cfe1b022f35e2c639e6e42c97a003/image.webp", "size": null, "orig_name": "image.webp", "mime_type": null, "is_stream": false, "meta": {"_type": "gradio.FileData"}}]
  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值