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)
|