omni-audio-demo / app.py
PerryCheng614's picture
update delete audio file logic
ff9e518
raw
history blame
2.44 kB
import gradio as gr
import requests
import os
# FastAPI endpoint
API_URL = "https://nexa-omni.nexa4ai.com/process-audio/"
def process_audio(audio_path, prompt=""):
"""
Send audio file to FastAPI backend for processing
"""
# Clear any previous audio files before processing new one
clear_previous_audio_files(audio_path)
try:
# Prepare the file for upload
files = {
'file': ('audio.wav', open(audio_path, 'rb'), 'audio/wav')
}
# Send prompt as form data
data = {'prompt': prompt}
# Make the request to FastAPI
response = requests.post(API_URL, files=files, data=data)
response.raise_for_status()
return response.json()['response']
except Exception as e:
return f"Error processing audio: {str(e)}"
def clear_previous_audio_files(current_file):
"""
Clear previous audio files in the same directory as the current file,
except for the current file and example files
"""
if not current_file:
return
directory = os.path.dirname(current_file)
if not directory:
directory = "."
for file in os.listdir(directory):
file_path = os.path.join(directory, file)
# Skip if it's the current file, example files, or not a file
if (file_path == current_file or
'example' in file_path or
not os.path.isfile(file_path) or
not file.endswith(('.wav', '.mp3'))):
continue
try:
os.remove(file_path)
except:
pass # Silently ignore deletion errors
# Create Gradio interface
demo = gr.Interface(
fn=process_audio,
inputs=[
gr.Audio(
type="filepath",
label="Upload or Record Audio",
sources=["upload", "microphone"]
),
gr.Textbox(
placeholder="Enter prompt (optional)",
label="Prompt",
value="Summarize this audio in English."
)
],
outputs=gr.Textbox(label="Response"),
title="Nexa Omni",
description="Upload an audio file and optionally provide a prompt to analyze the audio content.",
examples=[
["example_audios/example_1.wav", "transcribe this audio in English"],
]
)
def clear_output(audio, prompt):
return ""
demo.load_examples = clear_output
if __name__ == "__main__":
demo.launch()