Untitled
unknown
python
2 years ago
5.5 kB
8
Indexable
from flask import Flask, request, jsonify from flask_sqlalchemy import SQLAlchemy from flask_marshmallow import Marshmallow from datetime import datetime import requests import os import json import redis import threading import time from flask_mongoengine import MongoEngine import mongoengine as me from bson.objectid import ObjectId from dotenv import load_dotenv from AI.openaiutil import * from cache import * import firebase_admin from firebase_admin import credentials, firestore load_dotenv() GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY") MONGO_CLUSTER = os.getenv("MONGO_CLUSTER") GOOGLE_NEARBY_SEARCH = "https://maps.googleapis.com/maps/api/place/nearbysearch/json" # Init app app = Flask(__name__) app.config['MONGODB_SETTINGS'] = { 'host': MONGO_CLUSTER } #db = MongoEngine(app) # Initialize Firebase cred = credentials.Certificate("./conciergebackburhan-firebase-adminsdk-8mn6k-4dbcc1b501.json") firebase_admin.initialize_app(cred) # Get a reference to the Firestore service db = firestore.client() # Listen for changes to the user's data users_ref = db.collection('users') #Trying to see what changed in the document. THis is copied from chatgpt and is wrong. TODO: Need to see how to implement this correctly for user_id in ['John Doe', 'Jane Doe', 'Alice', 'Bob']: doc_ref = users_ref.document(user_id) doc_watch = doc_ref.on_snapshot(lambda doc_snapshot, changes, read_time: [actions[change.field.path](user_id) for change in changes if change.field.path in actions] ) """ class Itinerary(db.EmbeddedDocument): city = db.StringField(required=True) latitude = db.StringField() longitude = db.StringField() currentItinerary = db.BooleanField() googleAttractionPlace_id = db.ListField() googleFoodPlace_id = db.ListField() class User(me.Document): name = me.StringField(required=True) cuisine = me.ListField() attractionType = me.ListField() userCatagory = me.ListField() itinerary = me.EmbeddedDocumentField(Itinerary) """ def get_nearby_places(userRequest): headers = {} response = requests.get(GOOGLE_NEARBY_SEARCH, params=userRequest) print(response.url) print(response.text) places = json.loads(response.text)['results'] return places def getLatLong(city): if city == "NewYork": return ("40.7831","-73.9712") messages = [] @app.route('/customerInput/start', methods=['POST']) def primeTheModel(): messages.append({"role": "system", "content": "Don't make assumptions about what values to plug into functions. Ask for clarification if a user request is ambiguous."}) messages.append({"role": "user", "content": "Create a 3 day itinerary including hiking"}) chat_response = chat_completion_request( messages, functions=functions ) assistant_message = chat_response.json()["choices"][0]["message"] messages.append(assistant_message) pretty_print_conversation(messages) messages.append({"role": "user", "content": "Create it for New York city"}) chat_response = chat_completion_request( messages, functions=functions ) assistant_message = chat_response.json()["choices"][0]["message"] messages.append(assistant_message) pretty_print_conversation(messages) return 'Primed successfully!', 200 @app.route('/customerInput', methods=['POST']) def openAIParseText(): customerText = request.json['data'] user_id = request.json['user_id'] print(customerText) messages.append({"role": "user", "content": customerText}) chat_response = chat_completion_request( messages, functions=functions ) assistant_message = chat_response.json()["choices"][0]["message"] messages.append(assistant_message) pretty_print_conversation(messages) parsed_data = assistant_message['function_call'] parsedKV = parsed_data["arguments"] #this is an encoded json string print(parsedKV) #convert to a json string parsedKVJsonStr = json.dumps(parsedKV) print(parsedKVJsonStr) #need to do json.loads twice to convert it to a dictionary. parsedKVObj = json.loads(json.loads(parsedKVJsonStr)) doc_ref = db.collection('users').document(user_id) doc_ref.set(parsedKVObj) return 'User updated successfully!', 200 # nearbyPlaces = get_nearby_places(userRequest) # Get All Products @app.route('/itinerary', methods=['POST']) def get_itinerary(): attractionCatagory = request.json['attractionCatagory'] foodCatagory = request.json['foodCatagory'] name = request.json['username'] userCatagory = request.json['userCatagory'] city = request.json['city'] user = User(name = name) user.attractionType.extend(attractionCatagory) user.cuisine.extend(foodCatagory) user.userCatagory.extend(userCatagory) latLong = getLatLong(city) itinerary = Itinerary(city = city, latitude =latLong[0], longitude=latLong[1]) user.itinerary = itinerary for cuisine in user.cuisine: userRequest = { 'location': ",".join(latLong), 'key': GOOGLE_API_KEY, 'keyword': cuisine, 'type': "restaurant", 'radius': 1500, 'minprice': 3, } nearbyPlaces = get_nearby_places(userRequest) for place in nearbyPlaces: itinerary.googleFoodPlace_id.append(place["place_id"]) user.save() return '<div>Hello</div>' # Run Server if __name__ == '__main__': app.run(debug=True)
Editor is loading...