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()