Test / app.py
Jekyll2000's picture
Create app.py
ed54ae1 verified
raw
history blame
4.31 kB
from langchain_community.chat_message_histories import StreamlitChatMessageHistory
import streamlit as st
from langchain.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
MessagesPlaceholder,
)
from more_itertools import chunked
from langserve import RemoteRunnable
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import os
from langchain import PromptTemplate
from langchain import LLMChain
from langchain_together import Together
import re
import pdfplumber
# Set the API key with double quotes
os.environ['TOGETHER_API_KEY'] = "5653bbfbaf1f7c1438206f18e5dfc2f5992b8f0b6aa9796b0131ea454648ccde"
text = ""
max_pages = 16
with pdfplumber.open("/content/AI Engineer Test.pdf") as pdf:
for i, page in enumerate(pdf.pages):
if i >= max_pages:
break
text += page.extract_text() + "\n"
def Bot(Questions):
chat_template = """
Based on the provided context: {text}
Please answer the following question: {Questions}
Only provide answers that are directly related to the context. If the question is unrelated, respond with "I don't know".
"""
prompt = PromptTemplate(
input_variables=['text', 'Questions'],
template=chat_template
)
llama3 = Together(model="meta-llama/Llama-3-70b-chat-hf", max_tokens=250)
Generated_chat = LLMChain(llm=llama3, prompt=prompt)
try:
response = Generated_chat.invoke({
"text": text,
"Questions": Questions
})
response_text = response['text']
response_text = response_text.replace("assistant", "")
# Post-processing to handle repeated words and ensure completeness
words = response_text.split()
seen = set()
filtered_words = [word for word in words if word.lower() not in seen and not seen.add(word.lower())]
response_text = ' '.join(filtered_words)
response_text = response_text.strip() # Ensuring no extra spaces at the ends
if not response_text.endswith('.'):
response_text += '.'
return response_text
except Exception as e:
return f"Error in generating response: {e}"
def ChatBot(Questions):
greetings = ["hi", "hello", "hey", "greetings", "what's up", "howdy"]
# Check if the input question is a greeting
question_lower = Questions.lower().strip()
if question_lower in greetings or any(question_lower.startswith(greeting) for greeting in greetings):
return "Hello! How can I assist you with the document today?"
else:
response=Bot(Questions)
return response.translate(str.maketrans('', '', '\n'))
# --- Logo ---
st.set_page_config(
page_title="AI Engineer Test Chatbot",
page_icon="/content/Insight Therapy Solutions.png",
layout="wide",
)
st.sidebar.image("/content/Insight Therapy Solutions.png", width=200)
st.sidebar.title("Navigation")
st.sidebar.write("Reclaim Your Mental Health")
st.sidebar.markdown("[Visit us at](https://www.insighttherapysolutions.com/)")
rag_chain = RemoteRunnable("http://69.61.24.171:8000/rag_chain/")
msgs = StreamlitChatMessageHistory(key="langchain_messages")
# --- Main Content ---
st.markdown("## πŸ” Chatbot For AI Engineer test:")
if len(msgs.messages) == 0:
msgs.add_ai_message("Hi! How can I assist you today?")
for msg in msgs.messages:
st.chat_message(msg.type).write(msg.content)
if prompt := st.chat_input():
st.chat_message("human").write(prompt)
with st.chat_message("assistant"):
message_placeholder = st.empty()
full_response = ""
try:
_chat_history = st.session_state.langchain_messages[1:40]
_chat_history_tranform = list(
chunked([msg.content for msg in _chat_history], n=2)
)
response = rag_chain.stream(
{"question": prompt, "chat_history": _chat_history_tranform}
)
for res in response:
full_response += res or ""
message_placeholder.markdown(full_response + "|")
message_placeholder.markdown(full_response)
msgs.add_user_message(prompt)
msgs.add_ai_message(full_response)
except Exception as e:
st.error(f"An error occured. {e}")