harshith1411 commited on
Commit
71c0e20
·
verified ·
1 Parent(s): 1032940

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -11
app.py CHANGED
@@ -1,17 +1,19 @@
1
  import streamlit as st
2
  import os
3
- from langchain.document_loaders import TextLoader
4
  from langchain.text_splitter import CharacterTextSplitter
5
  from langchain_openai import OpenAIEmbeddings, ChatOpenAI
6
  from langchain.vectorstores import FAISS
7
  from langchain.prompts import ChatPromptTemplate
8
  from langchain_core.output_parsers import StrOutputParser
9
 
10
- os.environ["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"] = st.secrets["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"] # HF secrets
 
11
 
12
  @st.cache_resource
13
  def load_retriever():
14
  if not os.path.exists("faiss_index"):
 
15
  loader = TextLoader("knowledge.txt")
16
  docs = loader.load()
17
  splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
@@ -19,28 +21,45 @@ def load_retriever():
19
  embeddings = OpenAIEmbeddings()
20
  vectorstore = FAISS.from_documents(chunks, embeddings)
21
  vectorstore.save_local("faiss_index")
 
22
  embeddings = OpenAIEmbeddings()
23
  vectorstore = FAISS.load_local("faiss_index", embeddings, allow_dangerous_deserialization=True)
24
  return vectorstore.as_retriever(search_kwargs={"k": 3})
25
 
 
26
  retriever = load_retriever()
27
  llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
28
- prompt = ChatPromptTemplate.from_template("Context: {context}\nQuestion: {question}\nAnswer:")
 
 
29
 
30
  def get_response(query):
31
  context_docs = retriever.invoke(query)
32
  context = "\n".join([doc.page_content for doc in context_docs])
33
- chain = {"context": lambda _: context, "question": lambda _: query} | prompt | llm | StrOutputParser()
 
 
 
 
 
34
  return chain.invoke(query)
35
 
36
- st.title("🧠 RAG Chatbot on HF")
37
- if "messages" not in st.session_state: st.session_state.messages = []
 
 
 
38
  for msg in st.session_state.messages:
39
- with st.chat_message(msg["role"]): st.markdown(msg["content"])
40
- if prompt := st.chat_input():
 
 
41
  st.session_state.messages.append({"role": "user", "content": prompt})
42
- with st.chat_message("user"): st.markdown(prompt)
 
 
43
  with st.chat_message("assistant"):
44
- response = get_response(prompt)
45
- st.markdown(response)
 
46
  st.session_state.messages.append({"role": "assistant", "content": response})
 
1
  import streamlit as st
2
  import os
3
+ from langchain_community.document_loaders import TextLoader # ✅ FIXED
4
  from langchain.text_splitter import CharacterTextSplitter
5
  from langchain_openai import OpenAIEmbeddings, ChatOpenAI
6
  from langchain.vectorstores import FAISS
7
  from langchain.prompts import ChatPromptTemplate
8
  from langchain_core.output_parsers import StrOutputParser
9
 
10
+ # HF Spaces secrets
11
+ os.environ["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"] = st.secrets["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"]
12
 
13
  @st.cache_resource
14
  def load_retriever():
15
  if not os.path.exists("faiss_index"):
16
+ st.info("Creating vector index... (first run)")
17
  loader = TextLoader("knowledge.txt")
18
  docs = loader.load()
19
  splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
 
21
  embeddings = OpenAIEmbeddings()
22
  vectorstore = FAISS.from_documents(chunks, embeddings)
23
  vectorstore.save_local("faiss_index")
24
+
25
  embeddings = OpenAIEmbeddings()
26
  vectorstore = FAISS.load_local("faiss_index", embeddings, allow_dangerous_deserialization=True)
27
  return vectorstore.as_retriever(search_kwargs={"k": 3})
28
 
29
+ # Load components
30
  retriever = load_retriever()
31
  llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
32
+ prompt = ChatPromptTemplate.from_template(
33
+ "Use this context only: {context}\n\nQuestion: {question}\nAnswer:"
34
+ )
35
 
36
  def get_response(query):
37
  context_docs = retriever.invoke(query)
38
  context = "\n".join([doc.page_content for doc in context_docs])
39
+ chain = (
40
+ {"context": lambda _: context, "question": lambda _: query}
41
+ | prompt
42
+ | llm
43
+ | StrOutputParser()
44
+ )
45
  return chain.invoke(query)
46
 
47
+ # UI
48
+ st.title("🧠 RAG Chatbot")
49
+ if "messages" not in st.session_state:
50
+ st.session_state.messages = []
51
+
52
  for msg in st.session_state.messages:
53
+ with st.chat_message(msg["role"]):
54
+ st.markdown(msg["content"])
55
+
56
+ if prompt := st.chat_input("Ask about your documents..."):
57
  st.session_state.messages.append({"role": "user", "content": prompt})
58
+ with st.chat_message("user"):
59
+ st.markdown(prompt)
60
+
61
  with st.chat_message("assistant"):
62
+ with st.spinner("Thinking..."):
63
+ response = get_response(prompt)
64
+ st.markdown(response)
65
  st.session_state.messages.append({"role": "assistant", "content": response})