Gradio全解5——Interface:高级抽象界面类(上)
前言
本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的简易WebUI开发框架,它基于FastAPI和svelte,可以使用机器学习模型、python函数或API开发多功能界面,并可部署人工智能模型,是当前非常热门且易于展示机器学习大语言模型LLM及扩散模型DM的WebUI框架。
本系列文章分为三部分:Gradio介绍、Gradio基础功能实战和Gradio高级功能实战。第一部分Gradio介绍,方便读者对Gradio整体把握,包括三章内容:第一章先介绍Gradio的概念,包括详细技术架构、历史、应用场景、与其他框架Gradio/NiceGui/StreamLit/Dash/PyWebIO的区别,然后详细讲述Gradio的安装与运行,安装包括Linux/Win/Mac三类系统安装,运行包括普通方式和热重载方式;第二章介绍Gradio的4种部署方式,包括本地部署launch()、huggingface托管、FastAPI挂载和Gradio-Lite浏览器集成;第三章介绍Gradio的三种客户端(Client),包括python客户端、javascript客户端和curl客户端。第二部分实战Gradio基础功能,进入本系列文章的核心,包括四章内容:第四章讲解Gradio库的模块架构和环境变量,第五章讲解Gradio高级抽象界面类Interface,第六章讲解Gradio底层区块类Blocks,第七章讲解补充特性Additional Features。第三部分讲解并实战Gradio的高级功能,包括五章内容:第八章讲解融合大模型的多模态聊天机器人组件Chatbot,第九章讲解Gradio Tools工具库的使用及构建方法,第十章讲述讲述数据科学与绘图Data Science And Plots;第十一章讲述流式传输Streaming的多模态应用;第十二章讲述由Gradio App创建Discord Bot/Slack Bot/Website Widget。
本系列文章讲解细致,涵盖Gradio及相关框架的大部分组件和功能,代码均可运行并附有大量运行截图,方便读者理解并应用到开发中,Gradio一定会成为每个技术人员实现各种奇思妙想的最称手工具。
本系列文章目录如下:
- 《Gradio全解1——Gradio简介:大模型WebUI框架(上)》
- 《Gradio全解1——Gradio简介:大模型WebUI框架(下)》
- 《Gradio全解2——Gradio的四种部署方式(上)》
- 《Gradio全解2——Gradio的四种部署方式(下)》
- 《Gradio全解3——Gradio三种客户端:Python、JavaScript与Curl(一)——python》
- 《Gradio全解3——Gradio三种客户端:Python、JavaScript与Curl(二)——javascript》
- 《Gradio全解3——Gradio三种客户端:Python、JavaScript与Curl(三)——curl》
- 《Gradio全解4——Gradio库的模块架构和环境变量》
- 《Gradio全解5——Interface:高级抽象界面类(上)》
- 《Gradio全解5——Interface:高级抽象界面类(下)》
- 《Gradio全解6——Blocks:底层区块类(上)》
- 《Gradio全解6——Blocks:底层区块类(下)》
- 《Gradio全解7——Additional Features:补充特性(上)》
- 《Gradio全解7——Additional Features:补充特性(下)》
- 《Gradio全解8——Chatbot:融合大模型的多模态聊天机器人》
- 《Gradio全解9——Data Science And Plots:数据科学与绘图》
- 《Gradio全解10——Streaming:流式传输的多模态应用》
- 《Gradio全解11——Gradio Tools:工具库》
- 《Gradio全解12——由Gradio App创建Discord Bot/Slack Bot/Website Widget》
- 《Gradio全解13——使用Gradio构建MCP的客户端与服务器》
第5章 Interface:高级抽象界面类
本章介绍Gradio的高级抽象类:Interfaces,即界面类,它非常简单易用,是整个Gradio的最基础最常用的类。按照惯例,先详细介绍Interface类的简介、各种构造参数和成员函数,然后进行实践。实践分为基础类演示和高级类演示,基础类演示包括不同数量输入输出组件的演示、组件属性、Interface类的描述性内容和使用Accordion折叠式的附加输入;高级类演示包括多媒体输入输出、Flagging标记数据、Examples示例和Interface状态,下面逐一讲述。
5.1 Interface类详解
本节首先简单介绍Interface类的作用。gr.Interface是Gradio的主要高级抽象类,它仅需几行代码即可为机器学习模型或任何python函数创建基于Web的GUI或Demo。使用gr.Interface必须指定三个参数:①需创建GUI的函数;②所需输入组件;③所需输出组件,其他参数可用于控制demo的外观和行为。下面通过一个例子来了解Interface的用法。官方资料见Gradio - Building Demos - Interface🖇️链接5-1。
5.1.1 Interface示例
我们可以在习惯使用的代码编辑器Jupyter notebook、Google Colab等任何编写Python的地方运行Gradio。
1. 代码及运行
第一个Interface示例程序如下:
import gradio as gr
def image_classifier(inp):
return {'cat': 0.3, 'dog': 0.7}
demo = gr.Interface(fn=image_classifier, inputs="image", outputs="label")
demo.launch()
运行界面如图5-1:
2. 代码解析
首先引入gradio模块,然后定义用于图像分类的Python伪函数image_classifier,第三步创建基于函数的gr.Interface的实例demo,最后启动demo。从中可以看到Interface类有三个核心参数:
- fn:包裹于用户界面(UI)的函数。它非常灵活,可以传递任何你想用UI包装的Python函数,从音乐生成器到税务计算器,再到预训练机器学习模型的预测函数等都可以。
- inputs:用于输入的Gradio组件,组件的数量应与函数输入参数数量相匹配。
- outputs:用于输出的Gradio组件,组件的数量应与函数返回值的数量相匹配。
关于Gradio组件:可以看出,示例中输入和输出参数采用一个或多个Gradio组件,Gradio包括30多个为机器学习应用程序设计的内置组件,如gr.Textbox()、gr.Image()和gr.HTML()等。对于“inputs”和“outputs”参数,我们可以通过字符串(“textbox”)或类的实例(gr.textbox())传递这些组件。如果函数接受多个参数,请按顺序向输入传递一个输入组件列表,每个输入组件对应于函数的一个参数。如果函数返回多个值,情况也是如此:只需向输出传递一个组件列表。
这种灵活性使Interface类成为创建演示的一种非常强大的方法。在初步了解Interface的用法后,我们接下来更全面深入地探讨gr.Interface,看看其内部的构造参数和成员函数。
5.1.2 Interface构造参数
在使用界面类gr.Interface之前,我们先详细了解下它的构造参数,才能做到需要时物尽其用,表5-1只陈列较为重要的构造参数,更详细信息请参考官方文档:
参数 | 类型 | 默认值 | 作用描述 |
---|---|---|---|
fn | Callable | necessary | 包裹于界面的函数,通常用于机器学习模型的预测功能。函数的每个参数对应一个输入组件,函数应该返回单个值或单个元组,元组中的每个元素对应一个输出组件。 |
inputs | str | Component | list[str | Component] | None | 输入为单个Gradio组件或Gradio组件列表。它既可以是实例化对象(如gr.textbox())也可以是对象的字符串简写(如"textbox"),输入组件的数量应与fn中的参数数量相匹配。如果设置为None,则仅显示输出组件。 | |
outputs | str | Component | list[str | Component] | None | 输出为单个Gradio组件或Gradio组件列表。它既可以是实例化对象(如gr.textbox())也可以是对象的字符串简写(如"textbox"),输出组件的数量应与fn中的参数数量相匹配。如果设置为None,则仅显示输入组件。 | |
live | bool | False | 当输入发生任何变化时,界面是否应自动更新运行。 |
additional_inputs | str | Component | list[str | Component] | None | None | 单个Gradio组件或Gradio组件列表的附加输入。它既可以是实例化对象(如gr.textbox())也可以是对象的字符串简写(如"textbox"),这些组件将在主输入组件下方以折叠形式呈现。默认情况下,不会显示附加输入组件。 |
additional_inputs_accordion | str | Accordion | None | None | 它用于设置additional_inputs的标签及是否展开,默认为gr.Accordion(label="Additional Inputs", open=False) ,它还可以用来配置包含additional_inputs容器的其他属性,如visible、elem_id等,此参数仅在additional_inputs不空时使用。 |
title | str | None | None | Interface界面的标题,非空时以大字体显示在输入和输出组件上方。在浏览器窗口中打开时也用作选项卡tab的标题。 |
description | str | None | None | Interface界面的描述,非空时以常规字体显示在标题下方和输入与输出组件上方之间,接受Markdown和HTML格式内容。 |
article | str | None | None | 解释说明Interface的扩展文本,非空时以常规字体显示在输入与输出组件下方。接受Markdown和HTML格式内容,如果是指向可下载远程文件的HTTP(S)链接,则显示此文件的内容。 |
theme | str | None | None | 主题对象或表示主题的字符串。非空时将使用该名称在内置主题中查找(例如“soft”或“default”),或尝试从HuggingFace Hub加载主题(例如“gradio/monochrome”)。如果为None,将使用默认主题。 |
api_name | str | Literal[False] | None | “predict” | 定义端点在API文档中的显示方式,可以是String、None或False。如果设置为String,则端点将以给定的名称在API文档中公开显示。如果为None,则预测函数的名称将用作API端点名称。如果为False,则端点将不会在API文档中公开,下游应用程序(包括使用gr.load加载此函数的应用程序)将无法使用此功能。 |
api_description | str | None | Literal[False] | None | API端点的描述信息,可接受字符串、None或False。设置值字符串:在API文档中显示指定的描述内容;None:使用函数的docstring作为API端点描述;False:不在API文档中显示描述信息。 |
allow_duplication | bool | False | 如果为True,则将在Hugging Face Spaces上显示“Duplicate Spaces”按钮。 |
examples | list[Any] | list[list[Any]] | str | None | None | 函数的输入样本,非空时显示在UI组件下方,可以单击以填充界面。输入样本应是嵌套列表,其中外部列表由单个样本组成,每个内部列表由函数对应的输入组件组成。输入样本也可以是示例所在的目录路径,但目录应和运行Gradio程序的Python文件在同一父目录。如果有多个输入组件且包含目录时,则可以使用log.csv文件将它们合并在一起作为输入样本。 |
cache_examples | bool | None | None | 是否缓存示例,默认值为None。如果为None,将使用GRADIO_CACHE_EXPAMPLES环境变量(“true”或“false”)。在HuggingFace Spaces中,当"fn"和“output"非空时GRADIO_CACHE_EXPAMPLES为True,否则为False。如果为True,则将示例缓存在服务器中,以便被选中时快速运行。如果为False,则示例将在Gradio程序的任意用户首次使用后缓存,且示例可被用于程序的所有用户。 |
cache_mode | Literal[‘eager’, ‘lazy’] | None | None | 缓存模式,如果为“lazy”,则示例在首次使用后会被缓存。如果为“eager”,所有示例都会在应用程序启动时缓存。如果为None,将使用环境变量GRADIO_CACHE_MODE(如果已定义),其默认为“eager”。 |
examples_per_page | int | 10 | 如果设置了示例,每页显示多少。 |
example_labels | list[str] | None | None | 每个示例的标签列表。如果非空,此列表的长度应与示例的数量相同,这些标签将在UI中呈现,而不会呈现示例值。请注意,示例与Gradio的queue()分开缓存,因此某些功能,如gr.Progress()、gr.Info()、gr.Warning()等,将不会显示在Gradio的缓存示例UI中。 |
preload_example | int | Literal[False] | False | 当提供整数值时(且启用了示例缓存):Gradio应用首次加载时将预加载examples列表中对应索引的示例;如果为Fals则不预加载任何示例。 |
flagging_mode | Literal[‘never’] | Literal[‘auto’] | Literal[‘manual’] | None | None | 标记模式,取值为"never", “auto”, or “manual”。如果为“auto”或“never”将不显示flag按钮,为"manual“显示flag按钮。如果为“auto”,则用户提交的每个输入都将与生成的输出一起被自动标记。如果为“manual”,当用户点击flag按钮时标记输入和输出。它可以通过环境变量GRADIO_FLAGGING_MODE设置,其默认为“manual”。 |
flagging_options | list[str] | list[tuple[str, str]] | None | None | 标记选项,仅在flagging_mode为“manual”时启用。非空时,允许用户在标记时从选项列表中选择。它即可以是形式为(label, value)的元组列表,其中label是button显示的字符串,value是标记的csv文件中的存储值;也可以是字符串列表[“X”, “Y”],此时labels显示为[“Flag as X”, “Flag as Y”],而values则是字符串列表。 |
flagging_dir | str | “.gradio/flagged” | 存储标记数据的目录路径。如果目录不存在,将创建它。 |
flagging_callback | FlaggingCallback | None | None | 标记回调,值为None或FlaggingCallback子类的实例,当样本被标记时将调用该子类。如果设置为None,则表示gradio.flaging的实例,此时将创建CSVLogger,并将日志保存到flagging_dir中的本地CSV文件中。 |
allow_flagging | Literal[‘never’] | Literal[‘auto’] | Literal[‘manual’] | None | None | 允许标记API的标志列表,根据需要可选择never、auto和manual三种。 |
css | str | None | None | 定制css代码字符串,将包含在演示网页中。 |
css_paths | str | Path | list[str | Path] | None | None | 定制CSS为pathlib模块,它的值为指向CSS文件的Path或此类Path的列表。CSS文件将被读入、连结并包含在demo网页中。如果CSS参数也被设置,则它将被优先引入。 |
js | str | None | None | 定制JS代码字符串,它应采用单个JS函数的形式,当页面加载时,此js函数将自动执行。为了更灵活,使用参数head将JS代码插入标签<script>中。 |
head | str | None | None | 定制Html代码并插入到Demo网页的head中,它可用于向页面添加自定义元标记、多脚本、样式表等。 |
head_paths | str | Path | list[str | Path] | None | None | 定制Html为pathlib模块,它的值为指向Html文件的Path或此类Path的列表。Html文件将被读入、连结并包含在Demo网页中。如果head参数也被设置,则它将被优先引入。 |
batch | bool | False | 如果为True,则函数应处理一批输入,这意味着它应接受每个参数对应的输入值列表,单个列表的长度应该相等(对应输入参数个数),列表最大长度为max_batch_size。然后,函数fn处理后应返回一个列表元组(即使只有一个输出组件),元组中的每个列表对应一个输出元素。 |
max_batch_size | int | 4 | 最大批处理数,当任务从队列中调用时,一批可以处理的最大输入量(仅当batch=True时有效)。 |
concurrency_limit | int | None | Literal[‘default’] | “default” | 如果设置,表示可以同时运行的此event的最大数量。设置为None表示没有并发限制(可以同时运行任意数量的当前事件)。设置为“default”以使用默认并发限制,这时由.queue()中的default_concurrency_limit参数定义,默认情况下该参数为1。 |
time_limit | int | None | 30 | Stream流运行的时间限制,默认为30秒。仅当Interface的参数live=True且输入组件的参数“streaming=True”时适用,该参数可用于流式传输图像或音频。 |
stream_every | float | 0.5 | 流块(stream chunks)发送到后端的延迟(秒),默认为0.5秒。仅当Interface的参数live=True且输入组件的参数“streaming=True”时适用,该参数可用于流式传输图像或音频。 |
submit_btn | str | Button | “Submit” | 用于提交输入的按钮,默认值为gr.Button("Submit", variant="primary") 。如果Interface仅有输出,则此参数不适用,此时提交按钮始终显示“Generate”。设置为str时,显示为按钮标签;设置为gr.Button时,可以自定义更多属性。 |
stop_btn | str | Button | “Stop” | 用于停止界面的按钮,默认值为“gr.Button("Stop", variant="stop", visible=False) 。设置为str时,显示为按钮标签;设置为gr.Button时,可以自定义更多属性。 |
clear_btn | str | Button | None | “Clear” | 用于清除输入的按钮。默认值为gr.Button("Clear", variant="secondary") 。设置为str时,显示为按钮标签;设置为gr.Button时,可以自定义更多属性;设置为None时,将隐藏按钮。 |
show_progress | Literal[‘full’, ‘minimal’, ‘hidden’] | “full” | 如何在事件event运行时显示进度动画:“full”显示一个覆盖输出组件区域的旋转器Spinner,同时在右上角显示一个运行时展示Display,“minimal”仅显示运行时展示Display,“hidden”不显示任何进度动画。 |
delete_cache | tuple[int, int] | None | None | 删除缓存的频率,取值形式对应于[frequency, age],均以秒计。每过frequency秒,如果自文件创建以来已超过age秒,则此Interface实例创建的临时文件将被删除。例如将其设置为 (86400, 86400) ,将每天删除临时文件,服务器重新启动时,缓存将被完全删除。如果为None,缓存将不会被删除。 |
fill_width | bool | False | 是否水平膨胀以完全填充容器Container。如果为False,则将应用程序居中并限制到最大宽度。 |
analytics_enabled | bool | None | None | 是否允许基本遥测(Telemetry)。设置为None时,如果GRADIO_ANALYTICS_ENABLED环境变量已定义,则使用它的取值,其默认为True。 |
deep_link | str | DeepLinkButton | bool | None | False | 一个字符串或gr.DeepLinkButton对象,用于生成唯一URL,可将您的应用及其所有组件按当前状态分享给他人。除非显式设置为False,否则在HuggingFace Spaces上默认自动启用。 |
本小节几乎罗列Interface所有的API参数,为减少篇幅,其参数在后续类出现时将不再重复介绍。读者在实践时遇到不懂的API参数,可返回本小节查找其说明。下面介绍Interface类的成员函数。
5.1.3 Interface的成员函数
Interface类包含5个成员函数:launch()、load()、from_pipeline()、integrate()和queue(),它们是Interface界面运行的关键,下面逐一介绍。
1. launch()
函数的调用形式为gradio.Interface.launch(···)
,它启动一个为演示demo提供服务的简易web服务器,还可以通过设置参数share=True来创建公共链接,即允许任何人从浏览器访问演示。
在前面文章Gradio的部署方式之一的本地部署launch()中,已对launch()函数做了较为详细的介绍,读者可参考其例程。本章着重讲解launch()函数的API参数,其示例伪代码如下:
import gradio as gr
def reverse(text):
return text[::-1]
demo = gr.Interface(reverse, "text", "text")
demo.launch(share=True, auth=("username", "password"))
表5-2只展示较为重要的API参数,更详细的API信息请参考官方文档:
参数 | 类型 | 默认值 | 作用描述 |
---|---|---|---|
inline | bool | None | None | 在iframe中的Gradio App是否内联显示。在Python类Notebook中默认为True,其它情况为False。 |
height | int | None | 500 | 包含Gradio应用程序的iframe元素的像素高度(在inline=True时可用) |
width | int | str | “100%” | 包含Gradio应用程序的iframe元素的像素宽度(在inline=True时可用) |
inbrowser | bool | False | 在默认浏览器的新标签中是否自动启动Gradio App。 |
share | bool | None | None | 是否为Gradio App创建可公开共享的链接。当为True时,会创建SSH通道,使此UI可以从任何地方访问。如果未提供,则每次默认情况下都将其设置为False,但在Google Colab中除外。因为当本地主机不可访问时(例如Google Colab),不支持设置share=False。它可以通过环境变量GRADIO_SHARE=True进行设置。 |
share_server_address | str | None | None | 共享服务器地址,仅在share=True时适用。它指定用于共享Gradio应用程序的自定义Fast Reverse Proxy (FRP)服务器和端口。如果没有设置,将使用默认的FRP服务器地址https://xxx.gradio.live,更多信息请参阅Gradio Share Server🖇️链接5-2。 |
share_server_protocol | Literal[‘http’, ‘https’] | None | None | 它指定用于共享链接的协议,默认为“https”。但如果设置了自定义的share_server_address,此时默认为“http”。如果设置了自定义share_server_address并希望使用HTTPS,则必须将share_server_protocol设置为“https”。 |
share_server_tls_certificate | str | None | None | 连接自定义共享服务器时使用的TLS证书文件路径。该参数不适用于默认的位于https://gradio.live的FRP服务器,若使用其他服务器,必须提供相对于当前工作目录的有效TLS证书文件(如"cert.pem"),否则连接将不会使用TLS加密,存在安全隐患。 |
debug | bool | False | 如果为True,则阻塞主线程运行。如果在Google Colab中运行,则需要在输出单元格打印出错误信息。 |
show_error | bool | False | 如果为True,Gradio应用程序中的任何错误都将显示在alert模式中,并打印在浏览器控制台日志中。 |
quiet | bool | False | 如果为True,则阻止大多数打印语句。 |
show_api | bool | True | 如果为True,则在应用程序的页脚中显示API文档,默认值为True。 |
auth | Callable[[str, str], bool] | tuple[str, str] | list[tuple[str, str]] | None | None | 如果非空,则在访问App时,需要提供Username和Password(或username-password元组列表)。还可以设置为验证username-password的函数,当账户名密码有效时返回True即可访问App。 |
auth_message | str | None | None | 如果非空,则在登录页面上显示HTML授权提示信息。 |
auth_dependency | Callable[[fastapi.Request], str | None] | None | None | 授权依赖函数,它接受FastAPI请求并返回字符串形式的用户ID或None。如果该函数对某个特定请求返回None,则该用户无权访问该App(将显示401未授权响应)。它一般用于OAuth等外部身份验证系统,且不能与参数auth一起使用。 |
max_threads | int | 40 | Gradio应用程序可以并发执行的最大线程总数,默认值继承自starlette库,目前为40。 |
prevent_thread_lock | bool | False | 默认情况下,Gradio应用程序会在服务器运行时阻塞主线程。如果设置为True,Gradio应用程序将不会阻塞,并且Gradio服务器在脚本执行完成后才会终止。 |
state_session_capacity | int | 10000 | 要在内存中存储Session信息的最大会话数,默认值为10000。如果会话数超过此数,则将删除最早的会话。在使用gradio.State或从函数返回更新组件时,可通过减少会话存储数量以减少内存使用。 |
max_file_size | str | int | None | None | 它是“<value><unit>”形式的字符串,其中value是任意正整数,unit是“b”、“kb”、“mb”、“gb”、“tb”中之一。如果为None,则不设置大小限制。 |
server_name | str | None | None | 服务器地址,为了使App在本地网络上可访问,将其设置为“0.0.0.0”。它也可以通过环境变量GRADIO_SERVER_NAME进行设置。如果为None,将使用“127.0.0.1”。 |
server_port | int | None | None | 服务器端口,在此端口可用时启动Gradio App。它也可以通过环境变量GRADIO_SERVER_PORT设置。如果为None,将搜索从7860开始的可用端口。 |
favicon_path | str | None | None | 如果设置了图像文件(.png、.gif或.ico)的路径,它将被用作网页的favicon,favicon是标签中的网页图标。 |
ssl_keyfile | str | None | None | 如果设置了密钥文件的路径,将用它作为私钥文件来创建在HTTPS上运行的本地服务器。 |
ssl_certfile | str | None | None | 如果设置了签名证书文件的路径,将用它作为HTTPS的签名证书。当设置了ssl_keyfile时,必须提供ssl_certfile。 |
ssl_keyfile_password | str | None | None | 如果设置了密钥文件的密码,它将与SSL证书一起用于HTTPS验证。 |
ssl_verify | bool | True | 如果为False,则跳过使用自签名(self-signed)证书的签名证书验证。 |
allowed_paths | list[str] | False | 允许Gradio使用的完整文件路径或父目录列表,必须是绝对路径。这些文件通常被认为是安全的,并将在可能的情况下显示在浏览器中。也可以使用环境变量GRADIO_ALLOWED_PATHS通过逗号分隔的方式进行设置。警告:如果设置了此目录,则应用程序的所有用户都可以访问这些目录或其子目录中的任何文件。 |
blocked_paths | list[str] | False | Gradio不允许使用的完整文件路径或父目录列表(即应用程序的用户不允许访问),必须是绝对路径。可以使用环境变量GRADIO_BLOCKED_PATH通过逗号分隔的方式进行设置。警告:默认情况下,优先于参与allowed_paths和Gradio公开的所有其他目录。 |
root_path | str | None | None | 当App的服务不是从域的根目录 (“/”)提供时,通过root_path设置App的根路径或“装载点”,通常在设置了反向代理(它将请求转发给应用程序)的应用程序中使用。例如,如果app的服务地址为“https://example.com/myapp“,则参数root_path应设置为”/myapp“,也可以设置为以http://或https://开头的完整URL,该URL将全部用作根路径。它可以通过环境变量GRADIO_ROOT_PATH设置,其默认值为""。 |
app_kwargs | dict[str, Any] | None | None | 附加关键字参数,它以参数键和参数值的字典的形式传递给底层FastAPI应用程序。例如,{“docs_url”:“/docs”} |
enable_monitoring | bool | None | None | 通过端点/monitoring启用应用程序的流量监控。默认下为None,此时将启用此端点。如果显式为True,还将向控制台打印监控URL。如果为False,将完全禁用监控。 |
strict_cors | bool | True | 如果为True,则阻止外部域向在LocalHost上运行的Gradio服务器发出请求。如果为False,则允许来自LocalHost的请求,但至关重要的是,也允许来自“null”的请求。此参数通常应为True以防止CSRF攻击,但在嵌入一个使用Web组件的本地运行的Gradio应用程序时可能需要设为False。 |
ssr_mode | bool | None | 如果为True,Gradio应用程序将使用服务器端渲染模式进行渲染,这通常能获得更高性能,并提供更好的SEO,但这需要在系统上安装Node 20+。如果为False,则应用程序将使用客户端渲染模式进行渲染。如果为None,将使用GRADIO_SSR_MODE环境变量进行设置,其默认值为False。 |
pwa | bool | None | None | 若为True,Gradio应用将被配置为可安装的渐进式网络应用PWA(Progressive Web App)。若设置为None(默认值),则当该Gradio应用在Spaces平台上启动时启用PWA功能,否则不启用。 |
mcp_server | bool | None | None | 若为True,Gradio应用将被配置为MCP服务器,且已文档化的函数将作为MCP工具添加。若为None(默认值),则通过GRADIO_MCP_SERVER环境变量决定是否启用MCP服务器(在HuggingFace Spaces平台上,该变量值为"True")。 |
i18n | I18n | None | None | 包含自定义翻译的I18n实例,用于翻译组件中的字符串(如组件标签或Markdown文本)。此功能仅能用于翻译前端静态文本,不能翻译后端数值。 |
此外还有node_server_name,node_port等,官方未作详细说明,需要的读者可时刻关注官方更新。
2. load()
当界面Interface最初加载到浏览器中时,会触发此侦听器,它的调用形式为:gradio.Interface.load(block, ···)
表5-3只展示较为重要的API参数,更详细的API信息请参考官方文档:
参数 | 类型 | 默认值 | 作用描述 |
---|---|---|---|
fn | Callable | None | Literal[‘decorator’] | “decorator” | 触发此事件时调用的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应该返回一个值或一个值元组,元组中的每个元素对应一个输出组件。 |
inputs | Component | BlockContext | list[Component | BlockContext] | Set[Component | BlockContext] | None | None | 用作输入的gradio.components组件列表。如果函数不接受任何输入,则这应该是一个空列表。 |
outputs | Component | BlockContext | list[Component | BlockContext] | Set[Component | BlockContext] | None | None | 用作输出的gradio.components组件列表。如果函数没有返回任何输出,则应该是一个空列表。 |
api_name | str | None | Literal[False] | None | 定义端点在API文档中的显示方式,可以是String、None或False,默认值为None。如果设置为String,则端点将以给定的名称在API文档中公开展示。如果为None,则函数的名称将用作API端点。如果为False,则端点将不会在API文档中公开,下游应用程序(包括使用“gr.load”加载此app的应用程序)也无法使用此事件。 |
api_description | str | None | Literal[False] | None | API端点的描述信息,可接受字符串、None或False。设置值字符串:在API文档中显示指定的描述内容;None:使用函数的docstring作为API端点描述;False:不在API文档中显示描述信息。 |
scroll_to_output | bool | False | 如果为True,将在fn完成时滚动到输出组件。 |
show_progress | Literal[‘full’, ‘minimal’, ‘hidden’] | “full” | 在事件event运行时,如何显示进度动画:“full”显示一个覆盖输出组件区域的旋转器Spinner,同时在右上角显示一个运行时展示Display,“minimal”仅显示运行时展示Display,“hidden”不显示任何进度动画。 |
show_progress_on | Component | list[Component] | None | None | 要显示进度动画的组件或组件列表。如果为“None”,将在所有输出组件上显示进度动画。 |
queue | bool | True | 如果为True,则将请求放入队列(如果队列已启用)。如果为False,即使队列已启用,也不会将此事件放入队列。如果为None,将使用gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应处理一批输入,这意味着它应接受每个参数对应的输入值列表,单个列表的长度应该相等(对应输入参数个数),列表最大长度为max_batch_size。然后,函数fn处理后应返回一个列表元组(即使只有一个输出组件),元组中的每个列表对应一个输出元素。 |
max_batch_size | int | 4 | 最大批处理数,当任务从队列中调用时,一批可以处理的最大输入量(仅当batch=True时有效)。 |
preprocess | bool | True | 如果为False,则在运行“fn”之前不会对组件数据进行预处理。例如,如果使用Image组件调用此方法,则将保留组件数据为base64字符串)。 |
postprocess | bool | True | 如果为False,则在将“fn”输出返回到浏览器之前,不会对组件数据进行后处理。 |
cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 当触发此监听器时,需要取消的其他事件列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件.click()方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 |
trigger_mode | Literal[‘once’, ‘multiple’, ‘always_last’] | None | None | 如果为“once”(所有事件的默认值,除了.change()),在事件挂起时不允许任何提交;如果为“multiple”,则在挂起时允许无限制的提交;如果为“always_last”(.change()和.key_up()事件的默认值),将允许在挂起事件完成后进行第二次提交。 |
js | str | Literal[True] | None | None | 在运行“fn”之前运行可选的前端js方法。JS方法的输入参数可以是’inputs’和’outputs’的值,返回值应该是输出组件的值列表。 |
concurrency_limit | int | None | Literal[‘default’] | “default” | 如果设置,表示可以同时运行的此event的最大数量。设置为None表示没有并发限制(可以同时运行任意数量的当前事件)。设置为“default”使用默认并发限制,这时由.queue()中的default_concurrency_limit参数定义,默认情况下该参数为1。 |
concurrency_id | str | None | None | 如果已设置,则这是并发组的ID。具有相同concurrency_id的事件将受到最低设置concurrency_limit的限制。 |
show_api | bool | True | 是否在Gradio App的“查看API”页面或Client的view_api()方法中显示此事件。与将api_name设置为False不同,将show_api设置为False仍将允许下游应用程序和客户端使用此事件。如果fn为None,show_api将自动设置为False。 |
key | int | str | tuple[int | str, …] | None | None | 在@gr.render()中使用此事件侦听器。如果设置了此值,则当键相同时,此值将在重新渲染时将事件标识为相同。 |
此外还有block、time_limit、stream_every、like_user_message等参数,其中time_limit、stream_every可参考上一节的同名参数,block、like_user_message官方未作详细说明,需要的读者可时刻关注官方更新。
3. from_pipeline()
from_pipeline()是类方法,它用于从HuggingFace的对象transformers.Pipeline或diffusers.DiffusionPipeline中构造Interface,此时输入和输出组件由pipeline中的大模型自动确定。它的调用形式为gradio.Interface.from_pipeline(pipeline, ···)
,示例如下:
import gradio as gr
from transformers import pipeline
pipe = pipeline("text-classification", model="uer/roberta-base-finetuned-dianping-chinese")
gr.Interface.from_pipeline(pipe).launch()
运行过程中需要加载一个400MB的模型,启动后界面如图5-2:
API参数如表5-4:
参数 | 类型 | 默认值 | 作用描述 |
---|---|---|---|
pipeline | Pipeline | DiffusionPipeline | 用到的Pipeline对象。 |
4. integrate()
integrate()是一种用于与其他库集成的笼统(catch-all)的方法,应在launch()后运行,其调用形式为gradio.Interface.integrate(···)
,API参数如表5-5:
参数 | 类型 | 默认值 | 作用描述 |
---|---|---|---|
comet_ml | <class ‘inspect._empty’> | None | 如果设置了comet_ml实验对象,它将与实验集成并显示在Comet仪表板上。 |
wandb | ModuleType | None | None | 如果设置了wandb模块,将与之集成并显示在WandB仪表板上。 |
mlflow | ModuleType | None | None | 如果设置了mlflow模块,它将与实验集成并显示在ML Flow仪表板上。 |
5. queue()
通过启用队列queue(),我们可以控制用户何时知道他们在队列中的位置,并设置允许的最大事件数限制。其调用形式为gradio.Interface.queue(···)
示例如下:
demo = gr.Interface(image_generator, gr.Textbox(), gr.Image())
demo.queue(max_size=20)
demo.launch()
API参数如表5-6:
参数 | 类型 | 默认值 | 作用描述 |
---|---|---|---|
status_update_rate | float | Literal[‘auto’] | “auto” | 如果为"auto",则队列将在作业完成时向所有客户端发送状态估计。否则,队列将按此参数设置的秒数间隔定期发送状态。 |
api_open | bool | None | None | 如果为True,后端的REST路由将打开,允许请求Request跳过队列直接到达这些端点。 |
max_size | int | None | None | 在任意时刻,队列能存储的最大事件数。如果队列已满,则不会添加新事件,用户将收到队列已满的提示消息。如果为None,队列大小将不受限制。 |
default_concurrency_limit | int | None | Literal[‘not_set’] | “not_set” | 它是参数concurrency_limit的默认值,可以用于未指定值的事件监听器。default_concurrency_limit可以通过环境变量GRADIO_DEFAULT_CONCURRENCY_LIMIT设置,如果未另行设置,则默认为1。 |
在讲解完Interface的API参数和成员函数后,让我们用示例代码进行实践以便加深理解。