docker-osm/flask_app/app.py

84 wiersze
3.0 KiB
Python

from flask import Flask, render_template, request, jsonify
from flask_cors import CORS
import os
import openai
from dotenv import load_dotenv
import json
import psycopg2
from psycopg2 import sql
from agents.marshall_agent import MarshallAgent
from agents.navigation_agent import NavigationAgent
from agents.style_agent import StyleAgent
from agents.map_info_agent import MapInfoAgent
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(name)s %(threadName)s : %(message)s',
handlers=[logging.StreamHandler()])
load_dotenv()
app = Flask(__name__)
CORS(app)
#openai.organization = os.getenv("OPENAI_ORGANIZATION")
openai.api_key = os.getenv("OPENAI_API_KEY")
model_version = os.getenv("OPENAI_MODEL_VERSION")
UPLOAD_FOLDER = 'uploads/audio'
navigation_agent = NavigationAgent(model_version=model_version)
marshall_agent = MarshallAgent(model_version=model_version)
style_agent = StyleAgent(model_version=model_version)
map_info_agent = MapInfoAgent(model_version=model_version)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/ask', methods=['POST'])
def ask():
message = request.json.get('message', '')
logging.info(f"Received message: {message}")
return jsonify(marshall_agent.listen(message))
@app.route('/navigate', methods=['POST'])
def navigate():
message = request.json.get('message', '')
logging.info(f"Received message: {message}")
return jsonify(navigation_agent.listen(message))
@app.route('/layer', methods=['POST'])
def layer():
message = request.json.get('message', '')
layer_names = request.json.get('layer_names', '')
logging.debug(f"In layer endpoint, layer_names are {layer_names} and message is {message}")
return jsonify(map_info_agent.listen(message, layer_names))
@app.route('/style', methods=['POST'])
def style():
message = request.json.get('message', '')
layer_name = request.json.get('layer_name', '')
logging.debug(f"In style endpoint, layer_name is {layer_name} and message is {message}")
prefixed_message = f"The following is referring to the layer {layer_name}."
prepended_message = prefixed_message + " " + message
logging.debug(f"In Style route, prepended_message is {prepended_message}")
return jsonify(style_agent.listen(prepended_message))
@app.route('/audio', methods=['POST'])
def upload_audio():
audio_file = request.files['audio']
audio_file.save(os.path.join(UPLOAD_FOLDER, "user_audio.webm"))
audio_file=open(os.path.join(UPLOAD_FOLDER, "user_audio.webm"), 'rb')
transcript = openai.Audio.transcribe("whisper-1", audio_file)
logging.info(f"Received transcript: {transcript}")
message = transcript['text']
#delete the audio
os.remove(os.path.join(UPLOAD_FOLDER, "user_audio.webm"))
return message
@app.route('/select', methods=['POST'])
def select():
return None
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)