Commit 2a14caf6 authored by Mirza Mohammed Baig's avatar Mirza Mohammed Baig

[RS-101] - Integrated Astradb into Ecom Review Sense

parent c068bacc
from functools import lru_cache
from pydantic.v1 import BaseSettings
class Settings(BaseSettings):
"""Application configuration settings"""
ASTRA_DB_API_ENDPOINT: str = "https://0c52512b-0c65-4e70-ac47-71edf5244a82-us-east-2.apps.astra.datastax.com"
ASTRA_DB_APPLICATION_TOKEN: str = "AstraCS:EvXpFFafufegdQJvhqlYxmxt:ef86b5996013b12140b69254bd554d7e8e10eb5a7137859b9c432f92a5a3b65c"
ASTRA_DB_NAMESPACE: str = "default_keyspace"
# Default settings
EMBEDDING_MODEL: str = "sentence-transformers/all-mpnet-base-v2"
class Config:
env_file = ".env"
env_file_encoding = "utf-8"
extra = "allow" # Allow extra fields
@lru_cache()
def get_settings():
"""
Cached settings retrieval to optimize performance
Returns:
Settings: Configured application settings
"""
return Settings()
...@@ -6,6 +6,7 @@ from pymongo import MongoClient ...@@ -6,6 +6,7 @@ from pymongo import MongoClient
from src.reviewsense_ecom.model.FeatureSentiment import FeatureSentiment from src.reviewsense_ecom.model.FeatureSentiment import FeatureSentiment
from src.reviewsense_ecom.model.Product import Product from src.reviewsense_ecom.model.Product import Product
from src.reviewsense_ecom.model.ProductReview import ProductReview from src.reviewsense_ecom.model.ProductReview import ProductReview
from src.reviewsense_ecom.service.review_adder import ReviewAdder
# def get_db_connection(collection_name: str): #LOCAL DB # def get_db_connection(collection_name: str): #LOCAL DB
...@@ -134,7 +135,14 @@ def add_review_features(input_data, reviews_by_feature): ...@@ -134,7 +135,14 @@ def add_review_features(input_data, reviews_by_feature):
inserted_result = collection.insert_one(new_review.__dict__) inserted_result = collection.insert_one(new_review.__dict__)
if inserted_result.inserted_id: if inserted_result.inserted_id:
print(f"Review successfully added with ID: {inserted_result.inserted_id}") print(f"Review successfully added Into MongoDB with ID: {inserted_result.inserted_id}")
# ✅ Add review to vector DB
try:
review_adder = ReviewAdder()
vector_id = review_adder.add_review_vector(input_data.product_id, input_data.new_review)
print(f"Review also added to Vector DB with ID: {vector_id} ")
except Exception as e:
print(f"Failed to add review to vector DB: {e}")
# Return the newly inserted review object # Return the newly inserted review object
return new_review.__dict__ return new_review.__dict__
......
# src/reviewsense/core/database.py
from functools import lru_cache
from langchain_community.embeddings import HuggingFaceInferenceAPIEmbeddings
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_astradb import AstraDBVectorStore
from src.reviewsense_ecom.core.config import get_settings
@lru_cache(maxsize=1)
def get_vector_store(
collection_name: str = "customer_reviews",
embedding_model: str = "sentence-transformers/all-mpnet-base-v2"
):
"""
Create a singleton vector store instance
Args:
collection_name (str): Database collection name
embedding_model (str): Embedding model to use
Returns:
AstraDBVectorStore: Configured vector store instance
"""
settings = get_settings()
# Initialize embeddings
embeddings = HuggingFaceInferenceAPIEmbeddings(api_key="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", model_name="BAAI/bge-base-en-v1.5")
# Create and return vector store
return AstraDBVectorStore(
collection_name=collection_name,
embedding=embeddings,
api_endpoint="https://9706ee0b-b3e8-4ee2-bb26-45e8a0db1586-us-east-2.apps.astra.datastax.com",
token="AstraCS:OEbpcggZbUjOvRiesULZkTnf:9d215d8d32c2ffb09081212208e474f81a0bcdde45e7b683cd67f4a1a936a8bf",
namespace="default_keyspace",
)
\ No newline at end of file
# services/review_adder.py
from langchain_community.docstore.document import Document
from .retrieval import get_vector_store
class ReviewAdder:
"""Class for adding reviews to the vector store"""
def __init__(self):
self.vector_store = get_vector_store()
def add_review_vector(self, product_id: str, review: str) -> str:
review_document = Document(page_content=review, metadata={"title": product_id})
return self.vector_store.add_documents([review_document])[0]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment