import gradio as gr import requests import os # FastAPI endpoint API_URL = "https://nexa-omni.nexa4ai.com/process-audio/" # Add this global variable to track the last valid audio file last_valid_audio = None def process_audio(audio_path, max_tokens): """ Send audio file to FastAPI backend for processing """ global last_valid_audio # Check audio file availability if audio_path and os.path.exists(audio_path): # New audio uploaded/recorded last_valid_audio = audio_path elif not audio_path and not last_valid_audio: # No audio provided and no previous valid audio return "Please upload or record an audio file first." # Use the appropriate audio path current_audio = last_valid_audio if last_valid_audio else audio_path try: # Only proceed if we have a valid audio file if current_audio and os.path.exists(current_audio): files = { 'file': ('audio.wav', open(current_audio, 'rb'), 'audio/wav') } data = {'max_tokens': max_tokens} response = requests.post(API_URL, files=files, data=data) response.raise_for_status() return response.json()['response'] else: return "No valid audio file available." except Exception as e: return f"Error processing audio: {str(e)}" # Create Gradio interface demo = gr.Interface( fn=process_audio, 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"), title="Nexa Omni", description="Upload an audio file and optionally provide a prompt to analyze the audio content.", examples=[ ["example_audios/example_1.wav", 50], ] ) def clear_output(audio, max_tokens): return "" demo.load_examples = clear_output if __name__ == "__main__": demo.launch()