UI 服务器#
UI 服务器是一个控制器层,位于 Web UI 和 Tokkio App 管线的所有后端逻辑之间。通过这种方法,只要 Web UI 遵守 API 标准和要求,管线逻辑及其组件的未来演变应该只需要极少甚至不需要 Web UI 更改。
总体架构和管线组件都进行了模块化,彼此之间具有高效的连接。关于每个组件与 UI 服务器之间互连的更多细节,以及它们背后的逻辑和要求将在下面进行解释。
微服务和 UI 服务器之间的连接#
REST API 和 gRPC#
UI 服务器与 ACE Agent Chat Controller 建立 gRPC 连接,以接收 ASR 转录,并随后将此信息提供给 UI 进行渲染。
UI 服务器将调用转发到购物车管理器 API,以根据用户交互检索和操作购物车内容。
UI 服务器将调用转发到 Catalog RAG RAG,以处理所有目录相关的查询。
UI 服务器跟踪 UI 中当前显示的视图,以便在用户询问屏幕上显示的内容时为后端语言模型提供上下文。
Redis 消息(传入和传出)#
为了检测 FOV 进入/退出,UI 服务器监听 UMIM 发布的 “PresenceUserActionStarted” 和 “PresenceUserActionFinished” Redis 消息。将为发生 FOV 事件的相应流 ID 提供会话 ID。需要此会话 ID 才能对 UI 服务器进行后续 API 调用。
UI 服务器监听 VMS 摄像头移除事件,以清除其内部缓存中陈旧或断开连接的流。
UI 服务器订阅 SDR 错误报告事件,以监控 POD 故障并通知 UI 向用户渲染错误。
UI 服务器提供一个 API 以编程方式触发 FOV 进入/退出,一旦调用 API,UI 服务器将发布 FOV 事件 Redis 消息以模拟 FOV 事件。
UI 服务器监听 “AttentionUserActionStarted”、“AttentionUserActionUpdated” 和 “AttentionUserActionFinished” Redis 事件,并将这些事件中的用户注意力状态转发到 UI。
UI 和 UI 服务器 WebSocket 连接和 API 交互#
UI 调用 Ingress REST API 以获取会话令牌。在给定时间只允许设置数量的会话,会话管理由 Ingress 管理。Ingress 在验证会话令牌后,将所有从 UI 到 UI 服务器的 API 调用转发到 UI 服务器。UI 服务器提供的任何 REST API 都将以这种方式调用,以确保单点入口。
Tokkio UI 还将通过 Ingress 启动与 UI 服务器的 WebSocket 连接,以建立一个通道,用于将事件传达给 Tokkio UI。UI 提供其用于连接 VST 的相同流 ID,并发出 WebSocket 连接请求,Ingress 在验证会话令牌后,将来自 UI 的 WebSocket 连接请求转发到 UI 服务器。
当从 UMIM 的 Redis 消息中检测到 FOV 进入事件时,UI 服务器将收到此消息提供的会话 ID。然后,UI 服务器将通过 WebSocket 消息发送会话 ID 以及操作,以指示 UI 显示主视图并开始会话。
类似地,当从 UMIM 的 Redis 消息中检测到 FOV 退出事件时,UI 服务器将发送相应的 WebSocket 消息,以指示 UI 相应地更新渲染以结束会话。
所有 ASR 和 TTS 转录都通过 WebSocket 消息传输到 UI 进行渲染。语音控制的 UI 渲染也通过 WebSocket 进行通信。
有一个 API 可用,允许用户使用 API 调用中提供的 JSON 有效负载,使用预定义的自定义组件渲染自定义视图。
UI 服务器源代码#
Tokkio UI 服务器源代码可以从 NGC 下载。它也包括 UI 的源代码。
$ ngc registry resource download-version "nvidia/ace/tokkio_ui_server_source:5.0.1"
UI 服务器 API#
Tokkio UI 服务器 REST API 总共有五个部分
购物车(购物车管理器 MS 代理)
菜单(目录 RAG MS 代理)
视图(语音和 UI 交互,自定义视图)
健康(健康检查)
管理(FOV 进入/退出)
请注意,从 UI 到购物车管理器和目录 RAG 微服务的所有 API 通信都由 UI 服务器微服务控制,并且需要 UI 服务器进行预处理和后处理才能在 UI 中正常运行。UI 永远不会直接与目录 RAG 或购物车管理器微服务通信。
有关 API 的完整列表,请参阅 API 文档。
错误报告#
当后端出现问题时,SDR 代理通过 Web UI 向用户提供通知。当检测到问题(例如 POD 崩溃)时,会生成描述错误的 Redis 消息,该消息被 UI 服务器拾取,然后 UI 服务器构建消息并将其传达给 UI 进行渲染,以便向用户提供关于可以从客户端采取的可能操作的建议。
下面演示了 UI 页面上显示的错误消息通知示例
