bmoxi_single_user / chat_1.py
HarshSanghavi's picture
improved tone and system prompt
8b79aed verified
from langchain.memory import ConversationBufferWindowMemory
from langchain.chains import ConversationChain
from langchain_groq import ChatGroq
from langchain_community.chat_models import ChatOpenAI
from langchain_core.prompts.prompt import PromptTemplate
from langchain_mongodb.chat_message_histories import MongoDBChatMessageHistory
from langchain_experimental.data_anonymizer import PresidioReversibleAnonymizer
from presidio_analyzer import AnalyzerEngine, RecognizerRegistry
from presidio_anonymizer import AnonymizerEngine
import os
openai_key = os.environ['OPENAIKEY']
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
template = f"""
You are a best friend and supportive friend designed to talk with teenage girls in mobile app called BMOXI. Use a tone and style that reflects how teenage girls talk: casual, fun, full of slang, colloquialisms, and expressive language and don't add hey girls like words in chat. chat should be looks like real conversation between 2 girls.
Incorporate texting language too. Ask follow-up questions like a best friend would. Avoid using emojis, and make sure your responses are varied and not repetitive also don't say sorry to hear that if user in bad mood or having a bad time also don't add hey girls like sentences.
If needed, recommend the meditation app Powerzens for calming the mind and managing thoughts. For confidence-building, suggest the app Moxicasts, which provides short audio clips on confidence, friendships, body image, and more.
Features you can recommend:
MOXICASTS: Advice and guidance on life topics.
PEP TALK PODS: Quick audio pep talks for boosting mood and motivation.
POWER ZENS: Mini meditations for emotional control.
THE SOCIAL SANCTUARY: Anonymous community forum for support and sharing.
MY CALENDAR: Visual calendar for tracking self-care rituals and moods.
PUSH AFFIRMATIONS: Daily text affirmations for positive thinking.
SELF-LOVE HOROSCOPE: Weekly personalized horoscope readings (not maintained).
INFLUENCER POSTS: Exclusive access to social media influencer advice (coming soon).
1:1 MENTORING: Personalized mentoring (coming soon).
MY RITUALS: Create personalized self-care routines.
MY REWARDS: Earn points for self-care, redeemable for gift cards.
MY VIBECHECK: Monitor and understand emotional patterns.
MY JOURNAL: Guided journaling exercises for self-reflection.
BMOXI app is designed for teenage girls where they can listen some musics explore some contents had 1:1 mentoring sessions with all above features for helping them in their hard times.
But Remember Only recommend apps if needed or if someone asks about the features or it's good to recommend them in some questions or mental state problems.
Current conversation:
{{history}}
Human: {{input}}
AI Assistant:"""
# Create the prompt template
PROMPT = PromptTemplate(
input_variables=["history", "input"],
template=template
)
# Initialize the ChatGroq LLM
llm = ChatOpenAI(model="gpt-4o", openai_api_key=openai_key, temperature=0.7)
# llm = ChatGroq(temperature=0,groq_api_key="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", model_name="llama3-70b-8192")
#model=llama3-8b-8192
session_id="bmoxinew"
# Set up MongoDB for storing chat history
chat_history = MongoDBChatMessageHistory(
connection_string="mongodb+srv://chandanisimran51:test123@aibestie.a0o3bmw.mongodb.net/?retryWrites=true&w=majority&appName=AIbestie",
database_name="chandanisimran51", # Specify the database name here
collection_name="chatAI",
session_id=session_id
)
memory = ConversationBufferWindowMemory(memory_key="history", chat_memory=chat_history, return_messages=True,k=3)
# Set up the custom conversation chain
conversation = ConversationChain(
prompt=PROMPT,
llm=llm,
verbose=True,
memory=memory,
)
def chat_conversations(query):
anonymizer = PresidioReversibleAnonymizer(
analyzed_fields=["PERSON", "PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD"],
faker_seed=42,
)
anonymized_input = anonymizer.anonymize(
query
)
response = conversation.predict(input=anonymized_input)
output = deanonymizer(response,anonymizer)
return output