Spaces:
Runtime error
Runtime error
from flask import Flask , jsonify , request | |
from flask_cors import CORS | |
from pymongo import MongoClient | |
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder | |
from langchain_core.runnables.history import RunnableWithMessageHistory | |
from langchain_groq import ChatGroq | |
from langchain_mongodb.chat_message_histories import MongoDBChatMessageHistory | |
from passlib.hash import pbkdf2_sha256 | |
from uuid import uuid4 | |
import os | |
from dotenv import load_dotenv | |
import prompt | |
import json | |
app = Flask(__name__) | |
CORS(app) | |
# MongoDB Connection | |
load_dotenv() | |
username = os.getenv("MONGO_USERNAME") | |
password = os.getenv("MONGO_PASSWORD") | |
client = MongoClient(f"mongodb+srv://{username}:{password}@cluster0.hpg57sk.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0") | |
db=client['my_db'] | |
chat_collection=db["chat_histories"] | |
user_collection=db["user_data"] | |
system_prompt = prompt.system_prompt() | |
groq_api_key = os.getenv("GROQ_API_KEY") | |
chat = ChatGroq(temperature=0 ,groq_api_key=groq_api_key , model_name="llama3-70b-8192") | |
prompt = ChatPromptTemplate.from_messages( | |
[ | |
("system", system_prompt), | |
MessagesPlaceholder(variable_name="history"), | |
("human", "{question}"), | |
] | |
) | |
chain = prompt | chat | |
chain_with_history = RunnableWithMessageHistory( | |
chain, | |
lambda session_id: MongoDBChatMessageHistory( | |
session_id=session_id, | |
connection_string=f"mongodb+srv://{username}:{password}@cluster0.hpg57sk.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0", | |
database_name="my_db", | |
collection_name="chat_histories", | |
), | |
input_messages_key="question", | |
history_messages_key="history", | |
) | |
def main(): | |
return jsonify({'message' : 'API calls successfully'}) , 201 | |
def register(): | |
data = request.json | |
username = data.get("username") | |
password = data.get("password") | |
if user_collection.find_one({'username':username}): | |
return jsonify({'message':'Username already exists!'}) , 400 | |
hashed_password = pbkdf2_sha256.hash(password) | |
user_collection.insert_one({ | |
'username': username, | |
'password': hashed_password | |
}) | |
return jsonify({'message' : 'User registered successfully'}) , 201 | |
def login(): | |
data = request.json | |
username = data.get("username") | |
password = data.get("password") | |
user = user_collection.find_one({'username':username}) | |
if user: | |
if pbkdf2_sha256.verify(password , user["password"]): | |
return jsonify({ 'message' : 'Login Successful!'}) , 200 | |
return jsonify({ 'message' : 'Password is not correct'}) , 401 | |
else: | |
return jsonify({ 'message' : 'Invalid username' }) , 401 | |
def logout(): | |
data = request.json | |
username = data.get("username") | |
result = user_collection.delete_one({'username' : username}) | |
if result.deleted_count == 1: | |
return jsonify({ 'message' : 'Logout successfully' }) , 201 | |
else: | |
return jsonify({ 'message' : 'User not found in database' }) , 401 | |
def chat(): | |
data = request.json | |
SessionId = data.get('SessionId') | |
question = data.get('question') | |
if not SessionId: | |
SessionId = str(uuid4()) | |
config = {"configurable": {"session_id": SessionId}} | |
response = chain_with_history.invoke({"question": question}, config=config) | |
print(response) | |
return jsonify({ | |
'response' : str(response.content) , | |
'SessionId' : SessionId | |
}) , 200 | |
def history(): | |
user_chats = [] | |
data = request.json | |
SessionId = data.get('SessionId') | |
try : | |
cur = chat_collection.find({"SessionId":SessionId}) | |
for doc in cur: | |
role = json.loads(doc["History"])['type'] | |
content = json.loads(doc["History"])['data']['content'] | |
user_chats.append({'role':role , 'content':content}) | |
return jsonify({ | |
'response' : user_chats | |
}) , 200 | |
except: | |
return jsonify({ | |
'response' : 'error while fetching chat history' | |
}) , 400 | |
if __name__ == '__main__': | |
app.run(host='0.0.0.0', port=7860) |