import os from pathlib import Path from httpx import AsyncClient import gradio as gr import numpy as np from dotenv import load_dotenv from fastrtc import ( AdditionalOutputs, ReplyOnPause, Stream, audio_to_bytes, get_turn_credentials_async, get_turn_credentials, ) from gradio.utils import get_space cur_dir = Path(__file__).parent load_dotenv() client = AsyncClient() async def transcribe(audio: tuple[int, np.ndarray], transcript: str): response = await client.post( url="https://douatiz8x2itm3yn.us-east-1.aws.endpoints.huggingface.cloud/api/v1/audio/transcriptions", headers={"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"}, files={"file": audio_to_bytes(audio)}, data={ "response_format": "text", }, ) yield AdditionalOutputs(transcript + " " + response.text) transcript = gr.Textbox(label="Transcript") stream = Stream( ReplyOnPause(transcribe), modality="audio", mode="send", additional_inputs=[transcript], additional_outputs=[transcript], additional_outputs_handler=lambda a, b: b, rtc_configuration=get_turn_credentials_async if get_space() else None, server_rtc_configuration=get_turn_credentials(ttl=604_800), concurrency_limit=20 if get_space() else None, time_limit=300, ui_args={"title": ""}, ) with gr.Blocks() as demo: gr.HTML( """