Spaces:
Running
Running
File size: 1,966 Bytes
cfb4e8c 22c5bdb cfb4e8c 22c5bdb de76a17 22c5bdb de76a17 22c5bdb 1bccd9f de76a17 22c5bdb 1bccd9f 22c5bdb 1bccd9f 22c5bdb de76a17 22c5bdb ff9e518 de76a17 22c5bdb de76a17 1bccd9f de76a17 22c5bdb 7bd2b9b de76a17 502958f de76a17 1bccd9f 7bd2b9b de76a17 22c5bdb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
import gradio as gr
import websockets
import asyncio
import json
async def process_audio_stream(audio_path, max_tokens):
"""
Process audio with streaming response via WebSocket
"""
if not audio_path:
return "Please upload or record an audio file first."
try:
# Read audio file
with open(audio_path, 'rb') as f:
audio_data = f.read()
# Connect to WebSocket
async with websockets.connect('ws://localhost:8330/ws/process-audio/') as websocket:
# Send audio data
await websocket.send(audio_data)
# Send parameters
await websocket.send(json.dumps({
"prompt": "",
"max_tokens": max_tokens
}))
# Initialize response
response = ""
# Receive streaming tokens
async for message in websocket:
if message == "[DONE]":
break
response += message
yield response
except Exception as e:
yield f"Error processing audio: {str(e)}"
# Create Gradio interface
demo = gr.Interface(
fn=process_audio_stream,
inputs=[
gr.Audio(
type="filepath",
label="Upload or Record Audio",
sources=["upload", "microphone"]
),
gr.Slider(
minimum=50,
maximum=200,
value=50,
step=1,
label="Max Tokens"
)
],
outputs=gr.Textbox(label="Response", interactive=False),
title="Nexa Omni",
description="Upload an audio file and optionally provide a prompt to analyze the audio content.",
examples=[
["example_audios/example_1.wav", 200],
]
)
def clear_output(audio, max_tokens):
return ""
demo.load_examples = clear_output
if __name__ == "__main__":
demo.queue().launch()
|