import json import logging import sys import tempfile from threading import Lock import openai from flask import Flask, request from flask_socketio import SocketIO, emit, join_room, leave_room, \ rooms from jarvis.utils import chat_utils, whisper_utils, chatgpt_utils, faster_whisper_utils # Set this variable to "threading", "eventlet" or "gevent" to test the # different async modes, or leave it set to None for the application to choose # the best option based on installed packages. async_mode = None app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' socketio = SocketIO(app, async_mode=async_mode) thread = None thread_lock = Lock() openai.api_key = sys.argv[1] @app.route('/') def index(): return "Welcome to Jarvis Server API !" @socketio.event def process_message(message): message = json.loads(message) logging.info("New PROCESS request from room " + message['uuid']) logging.info("Message : " + message['data']) if message['uuid'] not in rooms(): logging.warning("Room not found, creating it") join_room(message['uuid']) # TODO: maybe implement grammar check and correction ? # intent_manager.recognise(message['data'], message['uuid']) if message['data'] != "": response = chatgpt_utils.chatgpt_recognise(message['data'], message['uuid']) text_response = chatgpt_utils.get_answer_from_response(response) # response = "Tokens are expensive ya know?" chat_utils.send_jarvis_message_to_room(text_response, message['uuid']) @socketio.event def join(message): message = json.loads(message) logging.info("New client joined room " + message['uuid']) join_room(message['uuid']) @socketio.event def leave(message): leave_room(message['uuid']) @socketio.event def connect(): global thread emit('my_response', {'data': 'Connected', 'count': 0}) @socketio.event def clear_chat(message): message = json.loads(message) emit('clear_chat', {}, to=message['uuid']) chatgpt_utils.clear_chat(message['uuid']) # .WAV (i.e.) FILE REQUEST @app.route("/get_text_from_audio", methods=['POST']) def get_text_from_audio(): logging.info("New STT request from " + request.remote_addr) audio_temp_file = tempfile.NamedTemporaryFile(prefix='jarvis-audio_', suffix='_client') audio_temp_file.write(request.data) # text = whisper_utils.whisper_cpp_stt(audio_temp_file.name) text = faster_whisper_utils.faster_whisper_stt(audio_temp_file.name) logging.info("STT result for " + request.remote_addr + " : " + text) return {"data": text} """ @app.route("/process_text", methods=['POST']) def process_text(): print("[" + request.remote_addr + "] - New TXT request") text = request.values['text'] answer = intent_manager.recognise(text, request.headers.get('Client-Ip'), request.headers.get('Client-Port')) return {"transcription": text, "answer": answer}""" def start_api(): logging.info("Starting Jarvis Server API...") socketio.run(app, host='0.0.0.0', port=6000)