【原创】Gradio RTC 流式返回音频和对话框内容

核心需求: 用 gradio 和 RTC 演示语音端到端, 需要同时生成语音对话内容和结构化数据.

需要用到 AdditionalOutputs , 并给WebRTC设置on_additional_outputs.

正常情况, 返回音频需要 (rate, audio_data) , 改成 (rate, audio_data), AdditionalOutputs(***) .

代码大致示例

from gradio_webrtc import AsyncStreamHandler, WebRTC, async_aggregate_bytes_to_16bit, AdditionalOutputs
import gradio as gr

class StreamHandler(AsyncStreamHandler):
    def __init__(self, *args, **kwargs):
        self.convo = []
        self.gradio_convo = []

    async def emit(self):
        msg = 'hello world ~~'
    	message = {'role': 'assistant', 'content': msg}
        self.convo.append(message)
        self.gradio_convo.append(message)
     return (self.output_sample_rate, audio_array), AdditionalOutputs(self.convo, self.gradio_convo)

with gr.Row(visible=False) as row:
    convo = gr.State(value=[])
    webrtc = WebRTC(
        label="Conversation",
        modality="audio",
        mode="send-receive",
    )
    with gr.Column():
        transcript = gr.Chatbot(label="transcript", type="messages")

    webrtc.stream(
        StreamHandler(),
        inputs=[webrtc],
        outputs=[webrtc, webrtc],
        time_limit=90,
        concurrency_limit=2,
    )
    def update_transcript(convo, transcript):
        #convo.append(msg)
        #transcript.append(msg)
        return convo, transcript
    webrtc.on_additional_outputs(
    	update_transcript, 
    	outputs=[convo, transcript],
    	queue=True, show_progress="hidden"
    )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值