File size: 1,490 Bytes
ee00031
 
f367ea8
 
ee00031
 
 
 
 
 
 
 
 
 
 
 
 
f367ea8
ee00031
 
 
 
 
f367ea8
 
 
 
 
 
 
 
 
 
ee00031
f367ea8
ee00031
 
 
 
f367ea8
ee00031
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from langchain_pinecone import PineconeVectorStore
from pinecone import Pinecone, ServerlessSpec
from google import genai
from langchain.embeddings.base import Embeddings
import os
from dotenv import load_dotenv

load_dotenv()

# Init client (once)
pc = Pinecone(api_key=os.getenv("PINECONE_API_KEY"))
index_name = "rag-chatbot"  # Matches your dashboard name

# Create if not exists (idempotent; only runs first time)
if index_name not in pc.list_indexes().names():
    pc.create_index(
        name=index_name,
        dimension=3072,
        metric="cosine",
        spec=ServerlessSpec(cloud="aws", region="us-east-1")
    )

def create_retriever(chunks, embeddings):
    # Connect to the index
    index = pc.Index(index_name)

    # Get index stats to check for existing namespaces/vectors
    stats = index.describe_index_stats()

    # If there are any namespaces (indicating vectors exist somewhere), delete all in the default namespace
    if 'namespaces' in stats and len(stats['namespaces']) > 0:
        index.delete(delete_all=True, namespace="")

    vector_store = PineconeVectorStore.from_documents(
        chunks, embeddings, index_name=index_name, namespace=""
    )
    return vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 5})

def load_retriever(embeddings):
    vector_store = PineconeVectorStore.from_existing_index(index_name, embeddings, namespace="")
    return vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 5})