import eventlet eventlet.monkey_patch() from flask import Flask, send_from_directory from flask_socketio import SocketIO from vosk import Model, KaldiRecognizer import json import os from dotenv import load_dotenv load_dotenv() app = Flask(__name__, static_folder='static') socketio = SocketIO(app, cors_allowed_origins="*", async_mode='eventlet') # Load the model model = Model("model") @app.route('/') def serve_index(): return send_from_directory('static', 'index.html') @socketio.on('audio_stream') def handle_audio_stream(audio_data): recognizer = KaldiRecognizer(model, 16000) recognizer.SetWords(True) if recognizer.AcceptWaveform(audio_data): result = json.loads(recognizer.Result()) socketio.emit('transcription', result.get('text', '')) else: partial = json.loads(recognizer.PartialResult()) socketio.emit('partial_transcription', partial.get('partial', '')) if __name__ == '__main__': os.makedirs('static', exist_ok=True) socketio.run(app, host='0.0.0.0', port=5000)