from langchain_community.vectorstores import FAISS from langchain_community.embeddings import HuggingFaceEmbeddings from langchain.prompts import PromptTemplate from langchain_together import Together import os from langchain.memory import ConversationBufferWindowMemory from langchain.chains import ConversationalRetrievalChain import streamlit as st import time st.set_page_config(page_title="zhagaramGPT") col1, col2, col3 = st.columns([2,6,2]) with col2: st.image("logo.png") st.markdown( """ """, unsafe_allow_html=True, ) def reset_conversation(): st.session_state.messages = [] st.session_state.memory.clear() if "messages" not in st.session_state: st.session_state.messages = [] if "memory" not in st.session_state: st.session_state.memory = ConversationBufferWindowMemory(k=2, memory_key="chat_history",return_messages=True) embeddings = HuggingFaceEmbeddings(model_name="nomic-ai/nomic-embed-text-v1",model_kwargs={"trust_remote_code":True,"revision":"289f532e14dbbbd5a04753fa58739e9ba766f3c7"}) db = FAISS.load_local("ipc_vector_db", embeddings, allow_dangerous_deserialization=True) db_retriever = db.as_retriever(search_type="similarity",search_kwargs={"k": 4}) prompt_template = """[INST]This is a chat template and As a legal chat ai specializing in Sericultural related Queries!!. CONTEXT: {context} CHAT HISTORY: {chat_history} QUESTION: {question} ANSWER: [INST] """ prompt = PromptTemplate(template=prompt_template, input_variables=['context', 'question', 'chat_history']) # You can also use other LLMs options from https://python.langchain.com/docs/integrations/llms. Here I have used TogetherAI API TOGETHER_AI_API= os.environ['TOGETHER_AI']="2a7c5dcdbb1049a39117ac0865c4d04008d49db31aa85a3258603817af16dbd0" llm = Together( model="mistralai/Mistral-7B-Instruct-v0.2", temperature=0.5, max_tokens=1024, together_api_key=f"{TOGETHER_AI_API}" ) qa = ConversationalRetrievalChain.from_llm( llm=llm, memory=st.session_state.memory, retriever=db_retriever, combine_docs_chain_kwargs={'prompt': prompt} ) ## for message in st.session_state.messages: role = message.get("role") content = message.get("content") with st.chat_message(role, avatar="user.svg" if role == "human" else "ai"): st.write(content) input_prompt = st.chat_input("message ....") if input_prompt: with st.chat_message("human",avatar="user.svg"): st.write(input_prompt) st.session_state.messages.append({"role":"human","content":input_prompt}) full_response = " " with st.chat_message("ai"): with st.spinner("Thinking..."): result = qa.invoke(input=input_prompt) message_placeholder = st.empty() full_response = " \n" for chunk in result["answer"]: full_response+=chunk time.sleep(0.02) message_placeholder.markdown(full_response+" ▌") st.button('Reset All Chat 🗑️', on_click=reset_conversation) st.session_state.messages.append({"role": "ai", "content": result["answer"], "avatar": "ai"})