kopia lustrzana https://github.com/kartoza/docker-osm
84 wiersze
3.0 KiB
Python
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)
|