Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
ecom-svc-reviewsense
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Bhargava Rellu
ecom-svc-reviewsense
Commits
81afdc4b
Commit
81afdc4b
authored
Apr 15, 2025
by
Bhargava Rellu
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'RS-101' into 'master'
[RS-101] - Integrate Astradb into Ecom Review Sense See merge request
!2
parents
c068bacc
54ef043f
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
79 additions
and
22 deletions
+79
-22
.env
.env
+16
-5
llm.py
src/reviewsense_ecom/llm/llm.py
+5
-1
mongo_db_config.py
src/reviewsense_ecom/mongo/mongo_db_config.py
+23
-5
retrieval.py
src/reviewsense_ecom/retriever/retrieval.py
+18
-9
FeatureExtractor.py
src/reviewsense_ecom/service/FeatureExtractor.py
+3
-2
review_adder.py
src/reviewsense_ecom/service/review_adder.py
+14
-0
No files found.
.env
View file @
81afdc4b
ASTRA_DB_API_ENDPOINT="https://0c52512b-0c65-4e70-ac47-71edf5244a82-us-east-2.apps.astra.datastax.com"
ASTRA_DB_APPLICATION_TOKEN="AstraCS:EvXpFFafufegdQJvhqlYxmxt:ef86b5996013b12140b69254bd554d7e8e10eb5a7137859b9c432f92a5a3b65c"
ASTRA_DB_NAMESPACE="default_keyspace"
HF_TOKEN="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"
GROQ_API_KEY="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"
GROQ_API_KEY="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"
GROQ_MODEL_NAME="llama-3.3-70b-versatile"
MONGODB_URL=mongodb+srv://genai:nisum@123@productrater.hpbsn.mongodb.net/?retryWrites=true&w=majority&appName=productRater
MONGODB_PASSWORD=nisum@123
MONGODB_USERNAME=genai
MONGODB_CLUSTER=productrater.hpbsn.mongodb.net
MONGODB_APPNAME=productRater
# Default settings
EMBEDDING_MODEL="sentence-transformers/all-mpnet-base-v2"
HUGGING_FACE_INTERFACE_API="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"
HUGGING_FACE_MODEL="BAAI/bge-base-en-v1.5"
ASTRA_DB_API_END_POINT="https://9706ee0b-b3e8-4ee2-bb26-45e8a0db1586-us-east-2.apps.astra.datastax.com"
ASTRA_DB_TOKEN="AstraCS:OEbpcggZbUjOvRiesULZkTnf:9d215d8d32c2ffb09081212208e474f81a0bcdde45e7b683cd67f4a1a936a8bf"
ASTRA_DB_NAME_SPACE="default_keyspace"
src/reviewsense_ecom/llm/llm.py
View file @
81afdc4b
from
functools
import
lru_cache
from
langchain_groq
import
ChatGroq
import
os
from
dotenv
import
load_dotenv
load_dotenv
()
groq_model_name
=
os
.
getenv
(
"GROQ_MODEL_NAME"
)
@
lru_cache
(
maxsize
=
1
)
# Cache only one instance (singleton behavior)
def
get_llm
(
groq_token
:
str
):
...
...
@@ -15,7 +19,7 @@ def get_llm(groq_token: str):
ChatGroq: A singleton instance of the ChatGroq LLM.
"""
return
ChatGroq
(
model_name
=
"llama-3.3-70b-versatile"
,
model_name
=
groq_model_name
,
temperature
=
1
,
groq_api_key
=
groq_token
# Pass the Groq token here
)
src/reviewsense_ecom/mongo/mongo_db_config.py
View file @
81afdc4b
...
...
@@ -6,7 +6,20 @@ from pymongo import MongoClient
from
src.reviewsense_ecom.model.FeatureSentiment
import
FeatureSentiment
from
src.reviewsense_ecom.model.Product
import
Product
from
src.reviewsense_ecom.model.ProductReview
import
ProductReview
from
src.reviewsense_ecom.service.review_adder
import
ReviewAdder
import
os
from
dotenv
import
load_dotenv
load_dotenv
()
mongo_db
=
os
.
getenv
(
"MONGODB_URL"
)
# Load environment variables
load_dotenv
()
# Read individual parts from .env
username
=
os
.
getenv
(
"MONGODB_USERNAME"
)
password
=
urllib
.
parse
.
quote_plus
(
os
.
getenv
(
"MONGODB_PASSWORD"
))
# escape special characters
cluster
=
os
.
getenv
(
"MONGODB_CLUSTER"
)
appname
=
os
.
getenv
(
"MONGODB_APPNAME"
)
# def get_db_connection(collection_name: str): #LOCAL DB
# client = MongoClient("mongodb://localhost:27017/") # Update with your MongoDB connection
...
...
@@ -15,10 +28,8 @@ from src.reviewsense_ecom.model.ProductReview import ProductReview
def
get_db_connection
(
collection_name
:
str
):
# get_db_cloud_connection
password
=
"nisum@123"
escaped_password
=
urllib
.
parse
.
quote_plus
(
password
)
client
=
MongoClient
(
f
"mongodb+srv://genai:{escaped_password}@productrater.hpbsn.mongodb.net/?retryWrites=true&w=majority&appName=productRater"
)
# Update with your MongoDB connection
mongo_uri
=
f
"mongodb+srv://{username}:{password}@{cluster}/?retryWrites=true&w=majority&appName={appname}"
client
=
MongoClient
(
mongo_uri
)
db
=
client
[
"productRater"
]
# Change to your database name
return
db
[
collection_name
]
...
...
@@ -134,7 +145,14 @@ def add_review_features(input_data, reviews_by_feature):
inserted_result
=
collection
.
insert_one
(
new_review
.
__dict__
)
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
new_review
.
__dict__
...
...
src/reviewsense_ecom/retriever/retrieval.py
View file @
81afdc4b
# src/reviewsense/core/database.py
from
functools
import
lru_cache
from
dotenv
import
load_dotenv
import
os
from
langchain_
astradb
import
AstraDBVectorStore
from
langchain_
community.embeddings
import
HuggingFaceInferenceAPIEmbeddings
from
langchain_huggingface
import
HuggingFaceEmbeddings
from
langchain_astradb
import
AstraDBVectorStore
load_dotenv
()
huggingface_inference_api
=
os
.
getenv
(
"HUGGING_FACE_INTERFACE_API"
)
huggingface_model
=
os
.
getenv
(
"HUGGING_FACE_MODEL"
)
astra_db_api_end_point
=
os
.
getenv
(
"ASTRA_DB_API_END_POINT"
)
astra_db_token
=
os
.
getenv
(
"ASTRA_DB_TOKEN"
)
astra_db_name_space
=
os
.
getenv
(
"ASTRA_DB_NAME_SPACE"
)
@
lru_cache
(
maxsize
=
1
)
def
get_vector_store
(
collection_name
:
str
=
"feature
_reviews"
,
embedding_model
:
str
=
"sentence-transformers/all-mpnet-base-v2"
collection_name
:
str
=
"customer
_reviews"
,
embedding_model
:
str
=
"sentence-transformers/all-mpnet-base-v2"
):
"""
Create a singleton vector store instance
...
...
@@ -22,13 +31,13 @@ def get_vector_store(
"""
# Initialize embeddings
embeddings
=
HuggingFace
Embeddings
(
model_name
=
embedding
_model
)
embeddings
=
HuggingFace
InferenceAPIEmbeddings
(
api_key
=
huggingface_inference_api
,
model_name
=
huggingface
_model
)
# Create and return vector store
return
AstraDBVectorStore
(
collection_name
=
collection_name
,
embedding
=
embeddings
,
api_endpoint
=
"https://19b6fcda-3fe8-4585-a5f5-6a464a382426-westus3.apps.astra.datastax.com"
,
token
=
"AstraCS:UaZmElcIDkRHzUmktguKwrnd:197d3e825510580f5f97cc749b00a94b685d54a5f1d4a755b75440fe2c29329b"
,
namespace
=
"default_keyspace"
,
)
api_endpoint
=
astra_db_api_end_point
,
token
=
astra_db_token
,
namespace
=
astra_db_name_space
,
)
\ No newline at end of file
src/reviewsense_ecom/service/FeatureExtractor.py
View file @
81afdc4b
from
typing
import
List
,
Dict
import
os
from
dotenv
import
load_dotenv
from
langchain.prompts
import
ChatPromptTemplate
from
langchain_core.output_parsers
import
JsonOutputParser
...
...
@@ -9,7 +10,7 @@ from src.reviewsense_ecom.llm.llm import get_llm
# Load environment variables from .env file
load_dotenv
()
groq_api_key
=
os
.
getenv
(
"GROQ_API_KEY"
)
class
FeatureReview
(
BaseModel
):
feature
:
str
...
...
@@ -24,7 +25,7 @@ class FeatureReviews(BaseModel):
class
FeatureExtractor
:
def
__init__
(
self
):
self
.
llm
=
get_llm
(
"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"
)
self
.
llm
=
get_llm
(
groq_api_key
)
self
.
parser
=
self
.
_create_reviews_parser
()
self
.
prompt
=
self
.
_create_extraction_prompt
()
...
...
src/reviewsense_ecom/service/review_adder.py
0 → 100644
View file @
81afdc4b
# services/review_adder.py
from
langchain_community.docstore.document
import
Document
from
src.reviewsense_ecom.retriever.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
]
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment