use gemini-embedding-model
Browse files- main.py +4 -2
- requirements.txt +0 -0
- 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 =
|
| 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
|
|
|
|
| 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=
|
| 18 |
metric="cosine",
|
| 19 |
spec=ServerlessSpec(cloud="aws", region="us-east-1")
|
| 20 |
)
|
| 21 |
|
| 22 |
def create_retriever(chunks, embeddings):
|
| 23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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})
|