Pushkar Niroula commited on
Commit
f25aecd
·
unverified ·
2 Parent(s): f24939c92329d2

Merge pull request #1 from Pushkar222-n/feature/GraphDB-search

Browse files
config.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pydantic_settings import BaseSettings
2
+ import os
3
+
4
+
5
+ class Settings(BaseSettings):
6
+ groq_api_key: str
7
+ neo4j_uri: str
8
+ neo4j_username: str
9
+ neo4j_password: str
10
+ neo4j_database: str
11
+ aura_instanceid: str
12
+ aura_instancename: str
13
+
14
+ class Config:
15
+ env_file = '.env'
16
+
17
+
18
+ settings = Settings() # type: ignore
src/api/main.py CHANGED
@@ -78,7 +78,7 @@ async def get_recommendations(request: RecommendationRequest):
78
  recommendations=result["recommendations"],
79
  retrieved_count=result["retrieved_count"],
80
  metadata={
81
- "model": "llama-3.3-70b-versatile",
82
  "retriever_k": rag_pipeline.retriever_k,
83
  "Time taken for LLM + vector search": str(end_time - start_time)
84
  }
@@ -97,7 +97,7 @@ async def get_stats():
97
  return {
98
  "total_anime": rag_pipeline.retriever.collection.count(),
99
  "embedding_model": "all-MiniLM-L6-v2",
100
- "llm_model": "llama-3.1-70b-versatile",
101
  "retrieval_k": rag_pipeline.retriever_k
102
  }
103
 
 
78
  recommendations=result["recommendations"],
79
  retrieved_count=result["retrieved_count"],
80
  metadata={
81
+ "model": "llama-3.1-8b-instant",
82
  "retriever_k": rag_pipeline.retriever_k,
83
  "Time taken for LLM + vector search": str(end_time - start_time)
84
  }
 
97
  return {
98
  "total_anime": rag_pipeline.retriever.collection.count(),
99
  "embedding_model": "all-MiniLM-L6-v2",
100
+ "llm_model": "llama-3.1-8b-instant",
101
  "retrieval_k": rag_pipeline.retriever_k
102
  }
103
 
src/data_ingestion/load_to_neo4j.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from neo4j import GraphDatabase
2
+ import pandas as pd
3
+ from src.utils.neo4j_client import Neo4j_Client
4
+
5
+ class AnimeGraphLoader:
6
+ """Loads anime into Neo4j Graph"""
7
+
8
+ def __init__(self):
9
+ self.client = Neo4j_Client()
10
+
11
+ def clear_database(self):
12
+ """Delete all nodes (use carefully !)"""
13
+ query = "MATCH (n) DETACH DELETE n"
14
+ self.client.run_query(query)
15
+
16
+ def create_constraints(self):
17
+ """Create uniqueness constraints for performance"""
18
+ queries = [
19
+ "CREATE CONSTRAINT anime_id IF NOT EXISTS FOR (a: Anime) REQUIRE a.mal_id IS UNIQUE",
20
+ "CREATE CONSTRAINT genre_name IF NOT EXISTS FOR (g:Genre) REQUIRE g.name IS UNIQUE",
21
+ "CREATE CONSTRAINT theme_name IF NOT EXISTS FOR (t:Theme) REQUIRE t.name IS UNIQUE",
22
+ "CREATE CONSTRAINT demographic_name IF NOT EXISTS FOR (d:Demographic) REQUIRE d.name IS UNIQUE",
23
+ "CREAE CONSTRAINT content_type IF NOT EXISTS FOR (t: Type) REQUIRE t.type IS UNIUE"
24
+ ]
src/llm/groq_client.py CHANGED
@@ -2,8 +2,8 @@ import os
2
  from groq import Groq
3
  from dotenv import load_dotenv
4
  import logging
 
5
 
6
- load_dotenv()
7
  logger = logging.getLogger(__name__)
8
 
9
 
@@ -19,7 +19,7 @@ class GroqLLM:
19
  - llama-3.1-8b-instant: Faster, good enough for most tasks
20
  """
21
 
22
- self.client = Groq()
23
  self.model = model
24
 
25
  logger.info(f"Initialized Groq with model {self.model}")
 
2
  from groq import Groq
3
  from dotenv import load_dotenv
4
  import logging
5
+ from config import settings
6
 
 
7
  logger = logging.getLogger(__name__)
8
 
9
 
 
19
  - llama-3.1-8b-instant: Faster, good enough for most tasks
20
  """
21
 
22
+ self.client = Groq(api_key=settings.groq_api_key)
23
  self.model = model
24
 
25
  logger.info(f"Initialized Groq with model {self.model}")
src/retrieval/rag_pipeline.py CHANGED
@@ -24,7 +24,7 @@ class AnimeRAGPipeline:
24
  recommendation_n: How many to recommend in final output
25
  """
26
  self.retriever = retriever or AnimeRetriever()
27
- self.llm = llm or GroqLLM(model="llama-3.3-70b-versatile")
28
  self.retriever_k = retriever_k
29
  self.recommendation_n = recommendation_n
30
 
 
24
  recommendation_n: How many to recommend in final output
25
  """
26
  self.retriever = retriever or AnimeRetriever()
27
+ self.llm = llm or GroqLLM(model="llama-3.1-8b-instant")
28
  self.retriever_k = retriever_k
29
  self.recommendation_n = recommendation_n
30
 
src/utils/neo4j_client.py CHANGED
@@ -1,17 +1,16 @@
1
- import os
2
  from dotenv import load_dotenv
3
  from neo4j import GraphDatabase
4
 
5
- load_dotenv()
6
 
7
 
8
  class Neo4j_Client:
9
  """Neo4j database client"""
10
 
11
  def __init__(self):
12
- uri = os.getenv("NEO4J_URI")
13
- user = os.getenv("NEO4J_USERNAME")
14
- password = os.getenv("NEO4J_PASSWORD")
15
  try:
16
  self.driver = GraphDatabase.driver(
17
  uri, auth=(user, password)) # type: ignore
 
 
1
  from dotenv import load_dotenv
2
  from neo4j import GraphDatabase
3
 
4
+ from config import settings
5
 
6
 
7
  class Neo4j_Client:
8
  """Neo4j database client"""
9
 
10
  def __init__(self):
11
+ uri = settings.neo4j_uri
12
+ user = settings.neo4j_username
13
+ password = settings.neo4j_password
14
  try:
15
  self.driver = GraphDatabase.driver(
16
  uri, auth=(user, password)) # type: ignore