全网最详细Gradio教程系列5——Gradio Client: curl

全网最详细Gradio教程系列5——Gradio Client: curl

  • 前言
  • 本篇摘要
  • 5. Gradio Client的三种使用方式
    • 5.3 Curl查询Gradio Apps
      • 5.3.1 安装
      • 5.3.2 获取Gradio程序的URL
      • 5.3.3 HF_TOKEN和身份认证
        • 1. POST/GET示例
        • 2. 整合命令:awk和read
        • 3. HF_TOKEN
        • 4. 身份认证
      • 5.3.4 POST:请求预测
        • 1. 基本语法
        • 2. 常用示例
      • 5.3.5 GET:获取结果
        • 1. 基本语法
        • 2. 常用示例
  • 参考文献

前言

本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的一个简易的webui开发框架,它基于FastAPI和svelte,便于部署人工智能模型,是当前热门的非常易于开发和展示机器大语言模型及扩散模型的UI框架。本系列文章不仅从概念上介绍Gradio的详细技术架构、历史、应用场景、与其他框架Gradio/NiceGui/StreamLit/Dash/PyWebIO的区别,还进行了大量实践讲解。实践部分先讲解了多种不同的安装、运行和部署方式,然后实践了基础类的Interfaces、Blocks和Custom Components,最后对详解Gradio的多种高级特性,比如Gradio-Lite、Gradio Client和Tabular Data Science And Plots等。

本系列文章目录如下:

  1. 《全网最详细Gradio教程系列1——Gradio简介》
  2. 《全网最详细Gradio教程系列2——Gradio的安装与运行》
  3. 《全网最详细Gradio教程系列3——Gradio的3+1种部署方式实践》
  4. 《全网最详细Gradio教程系列4——浏览器集成Gradio-Lite》
  5. 《全网最详细Gradio教程系列5——Gradio Client: python》
  6. 《全网最详细Gradio教程系列5——Gradio Client: javascript》
  7. 《全网最详细Gradio教程系列5——Gradio Client: curl》
  8. 《全网最详细Gradio教程系列6——Interfaces》
  9. 《全网最详细Gradio教程系列7——Blocks》
  10. 《全网最详细Gradio教程系列8——Custom Components》
  11. 《全网最详细Gradio教程系列9——Tabular Data Science And Plots 》

本篇摘要

本章讲解访问API的Gradio Client的三种使用方式:python、javascript和curl。受字数限制,所以分三篇博客发布。本篇讲解curl方式。

5. Gradio Client的三种使用方式

程序部署完成后,如何将Gradio App作为API访问使用呢,这就用到Gradio Client。本章讲解Gradio Client的三种使用方式:python、javascript和curl,以下分别讲解。

5.3 Curl查询Gradio Apps

当我们试图从Python或Javascript以外的环境查询Gradio应用程序,cURL就派上用场了。cURL是多数操作系统上预安装的命令行工具,它可以将任意Gradio程序作为API使用。本节将详细讲述curl的用法,包括curl的安装、获取Gradio程序的curl方式URL的两种途径:通过API使用和定位源码关键字、POST/GET示例及awk/red整合命令等。

5.3.1 安装

在多数操作系统中已预安装curl,只需要用以下命令查验版本即可:

$ curl --version
curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.17
Release-Date: 2022-01-05
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets zstd

当版本需要更新或确认需要安装时,可参考curl官网安装教程:https://curl.se/download.html。

5.3.2 获取Gradio程序的URL

为了查询相应的Gradio程序,需要获得其完整URL。Gradio的URL有两种形式:对于托管在Gradio官网的应用程序,其形式通常为:https://bec81a83-5b5c-471e.gradio.live;而托管在Hugging Face Spaces中的Gradio程序,则需使用Gradio嵌入式的URL,而不是Space网页的URL,如下所示:

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

而Gradio嵌入式URL的获取也有两种途径,以2024年5月发布的OpenGPT-4o为例,其Hugging Face地址为:https://huggingface.co/spaces/KingNish/OpenGPT-4o。

  • 第一种途径,通过API使用。我们可以点击Gradio程序页面底部的“通过API使用->Bash”,查看可用的URL及其API,如下图所示:
    在这里插入图片描述
  • 第二种途径,查看页面源码。可以右键单击程序页面,然后选择“View Frame Source”或“查看页面源代码”或其等效项,通过定位类似关键字如embedSrc来查看嵌入式Gradio应用程序的URL,但这种方式的缺点是无法查看可用API。通过查找,其嵌入式URL为https://kingnish-opengpt-4o.hf.space,如下所示:
{"embedSrc":"https://kingnish-opengpt-4o.hf.space","src":"https://kingnish-opengpt-4o.hf.space"}

5.3.3 HF_TOKEN和身份认证

本小节先通过一个简单例子演示POST/GET两类curl请求的使用方法,然后加入HF_TOKEN和帐密授权。在下一小节详细讲解POST/GET的细节。

1. POST/GET示例

获取到Gradio程序的URL后,我们就可以使用curl进行预测。还是以英转法翻译程序为例,先执行第一个POST请求,Gradio程序会返回一个EVENT_ID并将其打印到控制台,然后在第二个GET请求中使用EVENT_ID获取结果,如下所示:

$ curl -X POST https://abidlabs-en2fr.hf.space/call/predict -H "Content-Type: application/json" -d '{"data": ["Hello, my friend."] 
}'
>> {"event_id":"5e847ae0816844acaa7b0ecc956aec4d"}$ curl -N https://abidlabs-en2fr.hf.space/call/predict/5e847ae0816844acaa7b0ecc956aec4d
>> event: complete
>> data: ["Bonjour, mon ami."]
2. 整合命令:awk和read

我们也可以使用awk和read将这些命令组合成一个命令,awk解析第一个POST命令的结果,并使用read将解析的$4写入EVENT_ID,然后将其传入第二个GET命令,整个命令如下所示:

$ curl -X POST https://abidlabs-en2fr.hf.space/call/predict -H "Content-Type: application/json" -d '{"data": ["Hello, my friend."] 
}' \| awk -F'"' '{ print $4}'  \| read EVENT_ID; curl -N https://abidlabs-en2fr.hf.space/call/predict/$EVENT_ID
3. HF_TOKEN

当查询私有Spaces,需要用到Hugging Face (HF) token,这时需在两个curl调用中都包含一个额外的标头,其命令如下:

-H "Authorization: Bearer $HF_TOKEN"

完整命令如下:

$ curl -X POST https://private-space.hf.space/call/predict -H "Content-Type: application/json" -H "Authorization: Bearer $HF_TOKEN" -d '{"data": ["Hello, my friend."] 
}'
$ curl -N https://abidlabs-en2fr.hf.space/call/predict/$EVENT_ID -H "Authorization: Bearer $HF_TOKEN"
4. 身份认证

当Gradio应用程序启用了身份验证时,我们在进行任何查询之前,需要使用cURL发出额外的POST请求以进行身份验证。完整步骤如下:

首先,使用有效用户名和密码的POST请求进行登录:

curl -X POST $URL/login \-d "username=$USERNAME&password=$PASSWORD" \-c cookies.txt

如果凭据正确,我们将收到响应{“success”:true},Cookie将保存在cookies.txt中。

接下来,在发出原始POST请求时,需要将cookies.txt添加到命令中,如下所示:

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

最后,使用GET获取结果,同样需要cookies.txt提供Cookie,如下:

curl -N $URL/call/$API_NAME/$EVENT_ID -b cookies.txt

在获取Gradio程序的URL和连接方法后,接下来我们详细介绍curl的两个请求POST和GET,以实现更复杂的参数和命令。

5.3.4 POST:请求预测

两个curl请求中的第一个是POST请求,它将输入的有效载荷提交给Gradio应用程序,以便Gradio应用程序进行后续处理。

1. 基本语法

POST请求的语法如下:

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

各字段解释如下:

  • $URL:第5.3.2节获得的Gradio应用程序的URL;
  • $API_NAME:正在运行的事件的API端点,可通过页面底部“view API”获取;
  • $PAYLOAD:是一个包含输入的有效载荷的可用JSON数据列表,每个输入组件对应一个元素。

当我们成功发出此POST请求时,将获得一个事件id,该id以下面格式打印到终端:{"event_id": $EVENT_ID} ,在后续的curl请求GET中需要此EVENT_ID来获取预测结果。

2. 常用示例

以下是一些如何发出POST请求的示例:

  • 基本示例:与节5.3.3的示例类似,以下是如何向只接受一个输入文本组件的简单Gradio应用程序发出的POST请求:
$ curl -X POST https://abidlabs-en2fr.hf.space/call/predict -H "Content-Type: application/json" -d '{"data": ["Hello, my friend."] 
}'
  • 多输入组件:此Gradio演示接受三个输入:与gr.Textbox对应的字符串、与gr.Coheckbox对应的布尔值和与gr.Slider对应的数值。以下是POST请求:
curl -X POST https://gradio-hello-world-3.hf.space/call/predict -H "Content-Type: application/json" -d '{"data": ["Hello", true, 5]
}'
  • 文件:当curl查询需要文件输入的Gradio应用程序,需要以URL形式提供文件,并且URL需要以下面格式包含在字典中:{"path": $URL},示例如下:
$ 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"}] 
}'
  • 有状态会话:在聊天机器人等需要在多次交互保持用户状态的查询中,可以在数据后传递session_hash,具有相同session_hash的会话会被当作相同用户的session,示例如下:
# These two requests will share a session
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"
}'# This request will be treated as a new session
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"
}'

5.3.5 GET:获取结果

一旦我们收到与预测相对应的EVENT_ID,就可以stream流式传输结果。Gradio应用程序将这些结果存储在最近最少使用缓存(least-recently-used cache)中,缓存默认可以存储2000个跨用户和端点的结果。

1. 基本语法

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

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

字段解释请参考POST。这条会产生以下格式的响应流:event: ... data: [...],其中event有以下几种分类:

  • generating:表示数据是生成的中间结果;
  • complete:表示预测完成,产生最终结果;
  • error:错误,表示预测失败;
  • heartbeat:每15秒发送一次,以保持请求有效。

响应流中data的格式与输入的有效载荷相同,是包含输出结果的有效JSON数据列表,每个输出组件代表一个结果元素。

2. 常用示例

以下是一些示例,说明如果请求成功应该得到什么结果:

  • 基本示例:回顾5.3.3中的示例,我们发出GET请求,得到结果如下:
$ curl -N https://abidlabs-en2fr.hf.space/call/predict/5e847ae0816844acaa7b0ecc956aec4d
event: complete
data: ["Bonjour, mon ami."]
  • 多个输出:如果端点返回多个值,它们将显示为数据列表的元素(由于curl命令相同,这里不再重复):
event: complete
data: ["Good morning Hello. It is 5 degrees today", -15.0]
  • 流式传输系列值:当Gradio应用程序stream传输一系列值时,它们将直接流式传输到终端显示,如下所示:
event: generating
data: ["Hello, w"]
event: generating
data: ["Hello, wo"]
...
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"}}]

至此,Gradio Client的三种使用方式:python、javascript和curl已讲解完毕,后续我们将讲解gradio-tools工具包,请继续关注博主龙焰。

参考文献

  1. Querying Gradio Apps with Curl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3270094.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

21 Python常用内置函数——zip()

zip() 函数用来把多个可迭代对象中的元素压缩到一起,返回一个可迭代的 zip 对象,其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组,最终结果中包含的元素个数取决于所有参数序列或可迭代对象中最短的那个。 可以这样理解这个函…

WPF启动失败报System.Windows.Automation.Peers.AutomationPeer.Initialize()错误解决

问题描述 win10系统上WPF程序启动后就崩溃,通过查看崩溃日志如下: 应用程序: xxx.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常,进程终止。 异常信息: System.TypeLoadException 在 System.Windows.Automation.Peers.Automatio…

强者具备的三个思维

强者具备的三个思维,看看你占了几条? 一、不看自己需要什么,而是看环境和别人需要什么。满足他们,你就能把事情做成。 二、不追求稳定,而是享受不稳定。稳定的工作和生活,并不意味着你的技能已经娴熟。而…

SpringBoot上传超大文件导致Cannot read more than 2,147,483,647 into a byte array,问题解决办法

问题描述 报错: java.lang.IllegalArgumentException: Cannot read more than 2,147,483,647 into a byte array at org.apache.commons.io.IOUtils.lambda$toByteArray$0(IOUtils.java:2403) ~[commons-io-2.11.0.jar:2.11.0] at org.apache.commons.io.output.Thre…

C++学习日记 | LAB 10 运算符重载与友元函数

资料来源&#xff1a;南科大 于仕琪 C/C Program Design LINK&#xff1a;CPP/week10 at main ShiqiYu/CPP GitHub 一、本节内容 本节首先以一个例子具体演示和回顾操作符重载、友元函数以及重载<<操作符。习题部分则为各种运算符重载以及输入输出重载 1.1 Operator o…

支持向量机回归及其应用(附Python 案例代码)

使用支持向量机回归估计房价 让我们看看如何使用支持向量机&#xff08;SVM&#xff09;的概念构建一个回归器来估计房价。我们将使用sklearn中提供的数据集&#xff0c;其中每个数据点由13个属性定义。我们的目标是根据这些属性估计房价。 引言 支持向量回归&#xff08;SV…

WHAT - 一个 Github 仓库的 License 如何解读

目录 一、背景二、解读许可证说明的作用常见的开源许可证类型使用他人代码仓库时需要注意的事项结论 实践作为开发者1. 选择许可证类型2. 在 README 文件中编写许可证信息 作为使用者1. 确定权限2. 了解和遵守条款 总结 一、背景 我们经常在一些 Github 仓库里看到 License 部…

Cache 替换策略--PLRU算法详解

一、引言 LRU&#xff08;Least Recently Used&#xff09;是 cache 的经典替换策略之一&#xff0c;但当 Cache 的路数比较大时&#xff08;多路组相连结构&#xff09;&#xff0c;实现 LRU 的硬件开销就会变得很大。现代处理器一般会考虑使用 PLRU&#xff08;pseudo-LRU&a…

Vue.js 2 项目实战(八):小黑记事本组件版

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计初衷是通过采用简洁且强大的结构&#xff0c;使前端开发变得更简单和高效。以下是对 Vue.js 的详细介绍&#xff1a; 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面&#xff0c;通过数据绑…

用Swagger进行后端接口测试的实战操作

目录 一.什么是Swagger&#xff1f; 二.Swagger的使用操作流程&#xff1a; 1.在pom.xml配置文件导入 Knife4j 的依赖&#xff1a; 2.在config配置类中加入 Knife4j 的相关配置并设置静态资源映射&#xff08;否则接口文档无法访问&#xff09;&#xff1a; 三.Swagger的四个…

xctf--debug

第一眼看着给我吓了一跳 我还以为是什么很牛逼壳 结果就是dnspy打开 这个函数什么ID都没有 只能一个一个点 但是逻辑真的很清晰 之前BUU写的题太复杂了,感觉可以看看这些题静下心 这个时候看着 攻防世界逆向高手题之debug_攻防世界debug-CSDN博客 这个博主的(我好多东西…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 亲子游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

【轨物方案】电气设备数字档案解决方案

需求痛点 传统的电气设备铭牌只能显示固定的名称、日期、型号等信息&#xff0c;不能把与设备相关的其他重要信息展现出来&#xff0c;终端用户想要了解设备信息比较困难。尤其像项目资料类的文件查看&#xff0c;更是有很多不便之处&#xff0c;当设备出现问题后&#xff0c;找…

简要了解sql注入

sql注入安全测试中危害 数据库中的数据&#xff0c;对数据库数据进行操作&#xff08;查询、删除等&#xff09;&#xff1b;网站的权限&#xff0c;找到注入点后可后门写入&#xff1b; sql注入产生原理详细分析 可控变量&#xff0c;带入数据库查询&#xff0c;变量未存在…

前后端打包部署 虚拟机jdk安装及配置环境变量 +安装nginx

mkdir deploy ll mkdir gateway auth system file 去idea打包 不要先打gateway 上传上去 出现这个问题是因为你jdk环境不一样 我的是17 所以我现在去官网下载一个 官网 &#xff1a;Java Downloads | Oracle 中国 mkdir software cd software/ wget https://download.oracl…

橙单前端项目下载编译遇到的问题与解决

今天下载orange-admin前端项目&#xff0c;不过下载下来运行也出现一些问题。 1、运行出现下面一堆错误&#xff0c;如下&#xff1a; 2、对于下面这个错误 error Expected linebreaks to be LF but found CRLF linebreak-style 这就是eslint的报错了&#xff0c;可能是原作者…

目标检测自顶向下入门

最近在学习Yolo和OpenCV这些计算机视觉的相关领域&#xff0c;把深度学习啃了个大概&#xff0c;准备着手学习一下Yolov5&#xff0c;趁着这个机会入门一下目标检测这个领域&#xff0c;也算是自顶向下地学习一遍吧。 目标检测 什么是目标检测 物体识别&#xff08;Object de…

百川智能晋升200亿大模型独角兽

百川智能向创投日报记者确认&#xff0c;大模型创企百川智能已完成50亿元A轮融资&#xff1b;百川智能已成为国内第三家估值200亿元的大模型独角兽。 从包括百川智能在内的大模型创业企业的融资情况看&#xff0c;当前&#xff0c;选择出手大模型项目的资方出现从早期VC转向大…

如何穿透模糊,还原图片真实面貌

目录 图像清晰化的魔法棒&#xff1a;AI如何穿透模糊&#xff0c;还原图片真实面貌 前言 论文背景 论文思路 模型介绍 复现过程 演示视频 使用方式 本文所涉及所有资源均在传知代码平台可获取。 图像清晰化的魔法棒&#xff1a;AI如何穿透模糊&#xff0c;还原图片真实面貌 在我…

算法:[递归/搜索/回溯]二叉树的深搜

目录 题目一&#xff1a;计算布尔二叉树的值 题目二&#xff1a;求根节点到叶节点数字之和 题目三&#xff1a;二叉树剪枝 题目四&#xff1a;验证二叉搜索树 题目五&#xff1a;二叉搜索树中第k小的元素 题目六&#xff1a;二叉树的所有路径 题目一&#xff1a;计算布尔…