HassenE22's picture
Upload folder using huggingface_hub
7eb17c5 verified
Raw
History Blame Contribute Delete
2.82 kB
# Welcome to Cloud Functions for Firebase for Python!
# To get started, simply uncomment the below code or create your own.
# Deploy with `firebase deploy`
from firebase_functions import https_fn
from firebase_admin import initialize_app
import io # Ensure this import is added to handle BytesIO
import tempfile
import os
from backend.ai_processing.gpt import ai_language_detector
from backend.ai_processing.transcription import transcribe_audio_file_with_language
initialize_app()
@https_fn.on_request()
def detect_language(req: https_fn.Request) -> https_fn.Response:
"""
Cloud Function to detect language from an uploaded audio file.
- Accepts POST requests with an audio file.
- Validates the file format (assumes WAV for this example).
- Reads the audio file content.
- Transcribes the audio content and detects the language.
- Returns the detected language as JSON.
"""
if req.method != 'POST':
return https_fn.Response("Method Not Allowed", status=405)
# Check if there is a file in the request
if 'file' not in req.files:
return https_fn.Response("No file part in the request", status=400)
file = req.files['file']
# Enforce a specific file format here, e.g., WAV
if not file or not file.filename or not file.filename.endswith(('.mp3', '.mp4', '.mpeg', '.mpga', '.m4a', '.wav', '.webm')):
return https_fn.Response("File format not supported.", status=400)
try:
# Save the file to a temporary file
with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(file.filename)[1]) as tmp_file:
file_content = file.read() # Read file content
tmp_file.write(file_content) # Write content to temporary file
tmp_file_path = tmp_file.name # Get the path of the temporary file
# Process the audio file and detect language
transcription = transcribe_audio_file_with_language(tmp_file_path)
# Clean up the temporary file
os.remove(tmp_file_path)
# Detect the language from the transcription
predicted_language = ai_language_detector(transcription)
if predicted_language is None:
raise ValueError("Language could not be detected.")
# Return the detected language as JSON
return https_fn.Response(f"{predicted_language}", status=200, mimetype='application/json')
except ValueError as e:
# Handle specific errors, e.g., language not detected
return https_fn.Response(f"Error: {str(e)}", status=400)
except Exception as e:
# Handle errors (e.g., transcription failure, unsupported audio format)
return https_fn.Response(f"Error processing the audio file: {str(e)}", status=500)