ngdwtrg commited on
Commit
f367ea8
·
1 Parent(s): bdc9720

use gemini-embedding-model

Browse files
Files changed (3) hide show
  1. main.py +4 -2
  2. requirements.txt +0 -0
  3. utils/vectorDB.py +15 -5
main.py CHANGED
@@ -5,7 +5,8 @@ from dotenv import load_dotenv
5
  from utils.uploadFilePDFtoMD import convert_pdf_to_md
6
  from utils.vectorDB import create_retriever, load_retriever
7
  from utils.chunking import split_text_by_markdown
8
- from langchain_community.embeddings import HuggingFaceEmbeddings
 
9
  from utils.llm import ask_question
10
  from pydantic import BaseModel
11
 
@@ -23,7 +24,7 @@ app.add_middleware(
23
  allow_headers=["*"],
24
  )
25
 
26
- embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/paraphrase-MiniLM-L12-v2")
27
 
28
  @app.post("/uploadfile/")
29
  async def upload_file(file: UploadFile = File(...)):
@@ -41,6 +42,7 @@ async def upload_file(file: UploadFile = File(...)):
41
  md = convert_pdf_to_md(temp_path)
42
  chunks = split_text_by_markdown(md)
43
  retriever = create_retriever(chunks, embeddings)
 
44
  os.remove(temp_path)
45
  return {"message": "File processed and vector store created successfully."}
46
  except Exception as e:
 
5
  from utils.uploadFilePDFtoMD import convert_pdf_to_md
6
  from utils.vectorDB import create_retriever, load_retriever
7
  from utils.chunking import split_text_by_markdown
8
+ # from langchain_community.embeddings import HuggingFaceEmbeddings
9
+ from langchain_google_genai import GoogleGenerativeAIEmbeddings
10
  from utils.llm import ask_question
11
  from pydantic import BaseModel
12
 
 
24
  allow_headers=["*"],
25
  )
26
 
27
+ embeddings = GoogleGenerativeAIEmbeddings(model="gemini-embedding-001", api_key=os.getenv("GOOGLE_API_KEY"))
28
 
29
  @app.post("/uploadfile/")
30
  async def upload_file(file: UploadFile = File(...)):
 
42
  md = convert_pdf_to_md(temp_path)
43
  chunks = split_text_by_markdown(md)
44
  retriever = create_retriever(chunks, embeddings)
45
+ # Clean up temp file
46
  os.remove(temp_path)
47
  return {"message": "File processed and vector store created successfully."}
48
  except Exception as e:
requirements.txt CHANGED
Binary files a/requirements.txt and b/requirements.txt differ
 
utils/vectorDB.py CHANGED
@@ -1,6 +1,7 @@
1
  from langchain_pinecone import PineconeVectorStore
2
  from pinecone import Pinecone, ServerlessSpec
3
- from langchain.embeddings import HuggingFaceEmbeddings
 
4
  import os
5
  from dotenv import load_dotenv
6
 
@@ -14,18 +15,27 @@ index_name = "rag-chatbot" # Matches your dashboard name
14
  if index_name not in pc.list_indexes().names():
15
  pc.create_index(
16
  name=index_name,
17
- dimension=384, # MiniLM dims
18
  metric="cosine",
19
  spec=ServerlessSpec(cloud="aws", region="us-east-1")
20
  )
21
 
22
  def create_retriever(chunks, embeddings):
23
- pc.Index(index_name).delete(delete_all=True)
 
 
 
 
 
 
 
 
 
24
  vector_store = PineconeVectorStore.from_documents(
25
- chunks, embeddings, index_name=index_name
26
  )
27
  return vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 5})
28
 
29
  def load_retriever(embeddings):
30
- vector_store = PineconeVectorStore.from_existing_index(index_name, embeddings)
31
  return vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 5})
 
1
  from langchain_pinecone import PineconeVectorStore
2
  from pinecone import Pinecone, ServerlessSpec
3
+ from google import genai
4
+ from langchain.embeddings.base import Embeddings
5
  import os
6
  from dotenv import load_dotenv
7
 
 
15
  if index_name not in pc.list_indexes().names():
16
  pc.create_index(
17
  name=index_name,
18
+ dimension=3072,
19
  metric="cosine",
20
  spec=ServerlessSpec(cloud="aws", region="us-east-1")
21
  )
22
 
23
  def create_retriever(chunks, embeddings):
24
+ # Connect to the index
25
+ index = pc.Index(index_name)
26
+
27
+ # Get index stats to check for existing namespaces/vectors
28
+ stats = index.describe_index_stats()
29
+
30
+ # If there are any namespaces (indicating vectors exist somewhere), delete all in the default namespace
31
+ if 'namespaces' in stats and len(stats['namespaces']) > 0:
32
+ index.delete(delete_all=True, namespace="")
33
+
34
  vector_store = PineconeVectorStore.from_documents(
35
+ chunks, embeddings, index_name=index_name, namespace=""
36
  )
37
  return vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 5})
38
 
39
  def load_retriever(embeddings):
40
+ vector_store = PineconeVectorStore.from_existing_index(index_name, embeddings, namespace="")
41
  return vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 5})