tdecae commited on
Commit
c3aaf4b
Β·
verified Β·
1 Parent(s): 687fccd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -20
app.py CHANGED
@@ -5,14 +5,15 @@ from langchain.document_loaders import PyPDFLoader, Docx2txtLoader, TextLoader
5
  from langchain.text_splitter import CharacterTextSplitter
6
  from langchain.vectorstores import Chroma
7
  from langchain.embeddings import HuggingFaceEmbeddings
 
8
  from transformers import pipeline
9
  import gradio as gr
10
 
11
- # Workaround for sqlite in HuggingFace Spaces & environments without sqlite3
12
  __import__('pysqlite3')
13
  sys.modules['sqlite3'] = sys.modules.pop('pysqlite3')
14
 
15
- # πŸ“„ Load documents from multiple_docs folder
16
  docs = []
17
  for f in os.listdir("multiple_docs"):
18
  if f.endswith(".pdf"):
@@ -29,11 +30,11 @@ for f in os.listdir("multiple_docs"):
29
  splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=10)
30
  docs = splitter.split_documents(docs)
31
 
32
- # 🧠 Prepare texts and metadata
33
  texts = [doc.page_content for doc in docs]
34
  metadatas = [{"id": i} for i in range(len(texts))]
35
 
36
- # 🧬 Embeddings
37
  embedding_function = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
38
 
39
  # πŸ—ƒοΈ Vectorstore
@@ -44,22 +45,12 @@ vectorstore = Chroma(
44
  vectorstore.add_texts(texts=texts, metadatas=metadatas)
45
  vectorstore.persist()
46
 
47
- # πŸ€– Load free LLM using pipeline
48
- model_name = "google/flan-t5-large" # or flan-t5-base if you prefer faster
49
- generator = pipeline("text2text-generation", model=model_name, device=-1) # -1 β†’ CPU
 
50
 
51
- # πŸ”— Wrap pipeline in a callable for LangChain
52
- class HuggingFaceLLMWrapper:
53
- def __init__(self, generator):
54
- self.generator = generator
55
-
56
- def __call__(self, prompt, **kwargs):
57
- result = self.generator(prompt, max_new_tokens=512, num_return_sequences=1)
58
- return result[0]['generated_text']
59
-
60
- llm = HuggingFaceLLMWrapper(generator)
61
-
62
- # πŸ”— Create Conversational QA chain
63
  chain = ConversationalRetrievalChain.from_llm(
64
  llm,
65
  retriever=vectorstore.as_retriever(search_kwargs={'k': 6}),
@@ -67,7 +58,7 @@ chain = ConversationalRetrievalChain.from_llm(
67
  verbose=False
68
  )
69
 
70
- # πŸ’¬ Gradio interface
71
  chat_history = []
72
 
73
  with gr.Blocks() as demo:
 
5
  from langchain.text_splitter import CharacterTextSplitter
6
  from langchain.vectorstores import Chroma
7
  from langchain.embeddings import HuggingFaceEmbeddings
8
+ from langchain.llms import HuggingFacePipeline
9
  from transformers import pipeline
10
  import gradio as gr
11
 
12
+ # workaround for sqlite in HF spaces
13
  __import__('pysqlite3')
14
  sys.modules['sqlite3'] = sys.modules.pop('pysqlite3')
15
 
16
+ # πŸ“„ Load documents from multiple_docs
17
  docs = []
18
  for f in os.listdir("multiple_docs"):
19
  if f.endswith(".pdf"):
 
30
  splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=10)
31
  docs = splitter.split_documents(docs)
32
 
33
+ # 🧬 Prepare texts and metadata
34
  texts = [doc.page_content for doc in docs]
35
  metadatas = [{"id": i} for i in range(len(texts))]
36
 
37
+ # 🧠 Embeddings
38
  embedding_function = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
39
 
40
  # πŸ—ƒοΈ Vectorstore
 
45
  vectorstore.add_texts(texts=texts, metadatas=metadatas)
46
  vectorstore.persist()
47
 
48
+ # πŸ€– Load free LLM using pipeline + wrap in HuggingFacePipeline
49
+ model_name = "google/flan-t5-large" # or flan-t5-base for faster
50
+ hf_pipeline = pipeline("text2text-generation", model=model_name, device=-1) # CPU
51
+ llm = HuggingFacePipeline(pipeline=hf_pipeline)
52
 
53
+ # πŸ”— Create conversational chain
 
 
 
 
 
 
 
 
 
 
 
54
  chain = ConversationalRetrievalChain.from_llm(
55
  llm,
56
  retriever=vectorstore.as_retriever(search_kwargs={'k': 6}),
 
58
  verbose=False
59
  )
60
 
61
+ # πŸ’¬ Gradio UI
62
  chat_history = []
63
 
64
  with gr.Blocks() as demo: