Spaces:
Runtime error
Runtime error
File size: 7,812 Bytes
d7762a9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
import json
from transformers import AutoTokenizer, AutoModel
from langchain_community.chat_models import ChatOpenAI
import pandas as pd
from config import settings
from langchain_core.utils.function_calling import convert_to_openai_function
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.memory import ConversationBufferWindowMemory
from langchain.schema.runnable import RunnablePassthrough
from langchain.agents.format_scratchpad import format_to_openai_functions
from langchain.agents.output_parsers import OpenAIFunctionsAgentOutputParser
from langchain.agents import AgentExecutor
from langchain_mongodb.chat_message_histories import MongoDBChatMessageHistory
from tools import moxicast, my_calender, my_journal, my_rewards, my_rituals, my_vibecheck, peptalks, sactury, power_zens, affirmations, horoscope, mentoring, influencer_post, recommand_podcast, set_chatbot_name
def get_last_session(user_id="user_1"):
mongodb_chatbot_message_collection = settings.mongodb_db.get_collection(
settings.MONGODB_DB_USER_SESSIONS_COLLECTION_NAME)
sessions_cursor = mongodb_chatbot_message_collection.find_one(
{"user_id": user_id})
print(sessions_cursor)
sessions_list = sessions_cursor['session_id']
second_last_session_id = None
if len(sessions_list) >= 2:
second_last_session_id = sessions_list[-2]
return {"last_session_id": sessions_list[-1], "second_last_session_id": second_last_session_id if second_last_session_id else None}
def get_mood_summary(data='''"35","27","mood_tracker","[{""question_id"":1,""question"":""my vibe rn is\u2026"",""answer"":[""Sad""],""time"":""5:12 PM""},{""question_id"":2,""question"":""I feel this way bc of\u2026 "",""answer"":[""SCHOOL""],""time"":""5:12 PM""}]","2022-11-02 17:12:42","2024-03-28 07:27:13"'''):
system_prompt = """You are an descripting assistant that provides the breif description of the user data which is related to their mood tracking activity. Properly descibe the reason for their mood.Avoid times and dates in description
Here is the user data: {data}"""
llm = ChatOpenAI(model=settings.OPENAI_MODEL,
openai_api_key=settings.OPENAI_KEY, temperature=0.7)
return llm.invoke(system_prompt.format(data=data)).content
def get_chat_history(session_id="bmoxinew"):
# Set up MongoDB for storing chat history
chat_history = MongoDBChatMessageHistory(
connection_string=settings.MONGODB_CONNECTION_STRING,
database_name=settings.MONGODB_DB_NAME, # Specify the database name here
collection_name=settings.MONGODB_DB_CHAT_COLLECTION_NAME,
session_id=session_id,
)
return chat_history
def deanonymizer(input, anonymizer):
input = anonymizer.deanonymize(input)
map = anonymizer.deanonymizer_mapping
if map:
for k in map["PERSON"]:
names = k.split(" ")
for i in names:
input = input.replace(i, map["PERSON"][k])
return input
def get_chat_bot_name(user_id="user_1"):
print(settings.MONGODB_CONNECTION_STRING)
print(settings.mongodb_chatbot_name_collection)
result = settings.mongodb_chatbot_name_collection.find_one(
{"user_id": user_id})
print("CHATBOT RESULT", result, type(result))
if result:
print(result)
return result['chat_bot_name']
return settings.CHATBOT_NAME
def get_last_session_summary(last_session_id, second_last_session_id):
mongodb_chatbot_message_collection = settings.mongodb_db.get_collection(
settings.MONGODB_DB_CHAT_COLLECTION_NAME)
collection_count = mongodb_chatbot_message_collection.count_documents({"SessionId": last_session_id})
print("******************************** data********************888")
print(collection_count)
print(last_session_id)
print("*********************************")
if collection_count <=2:
sessions_cursor = mongodb_chatbot_message_collection.find({"SessionId": second_last_session_id}) # Sort by timestamp descending and limit to 2 results
print(sessions_cursor)
sessions_list = list(sessions_cursor)
print(sessions_list)
conversation = """"""
for document in sessions_list:
print("MY document")
print(document)
if "History" in document:
history = json.loads(document['History'])
print(history)
print(history['type'])
print(history['data'])
print(history['data']['content'])
conversation += f"""{history['type']}: {history['data']['content']}\n"""
print(conversation)
system_prompt = """You are an descripting assistant that provides that analyze user conversation with AI bot and gives problem user was facing and weather that problem was solved or not and give response in below format.
conversation: {conversation}
problem:
is_problem_solved: YES/NO
"""
llm = ChatOpenAI(model=settings.OPENAI_MODEL,
openai_api_key=settings.OPENAI_KEY, temperature=0.7)
response = llm.invoke(system_prompt.format(conversation=conversation)).content
print("********************************* PREVIOUS PROBLEM *******************************************")
print(response)
return response
else:
return ""
def set_chat_bot_name(name, user_id):
# Insert document into collection
insert_result = settings.mongodb_chatbot_name_collection.update_one({"user_id": user_id}, { "$set": { "chat_bot_name": name } }, upsert=True)
print("done successfully...")
return name
def create_agent(user_id):
print("get user Id**********************",user_id)
tools = [moxicast, my_calender, my_journal, my_rewards, my_rituals, my_vibecheck, peptalks, sactury, power_zens, affirmations, horoscope, mentoring, influencer_post, recommand_podcast, set_chatbot_name]
# tools = [moxicast]
functions = [convert_to_openai_function(f) for f in tools]
model = ChatOpenAI(model_name=settings.OPENAI_MODEL,
openai_api_key=settings.OPENAI_KEY, frequency_penalty= 1, temperature=settings.TEMPERATURE).bind(functions=functions)
chat_bot_name = get_chat_bot_name(user_id)
print("CHABT NAME", chat_bot_name)
mood_summary = get_mood_summary()
previous_session_id = get_last_session(user_id)
print(previous_session_id)
prevous_problem_summary = None
if previous_session_id['second_last_session_id']:
prevous_problem_summary = get_last_session_summary(previous_session_id['last_session_id'], previous_session_id['second_last_session_id'])
print("**************************************** SUMMARY ***********************************************")
print(prevous_problem_summary)
prompt = ChatPromptTemplate.from_messages([("system", settings.SYSTEM_PROMPT.format(name = chat_bot_name, mood=mood_summary, previous_summary=prevous_problem_summary)),
MessagesPlaceholder(variable_name="chat_history"), ("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad")])
memory = ConversationBufferWindowMemory(memory_key="chat_history", chat_memory=get_chat_history(
previous_session_id['last_session_id']), return_messages=True, k=5)
print("memory created")
chain = RunnablePassthrough.assign(agent_scratchpad=lambda x: format_to_openai_functions(x["intermediate_steps"])) | prompt | model | OpenAIFunctionsAgentOutputParser()
agent_executor = AgentExecutor(
agent=chain, tools=tools, memory=memory, verbose=True)
return agent_executor
|