Prathamesh Sable commited on
Commit
0c9476c
·
1 Parent(s): 010eea9

Modulation and logging to console

Browse files
Files changed (6) hide show
  1. .gitignore +1 -0
  2. app.py +21 -33
  3. db.py +5 -4
  4. env_vars.py +19 -0
  5. logger.py +6 -0
  6. utils.py +3 -5
.gitignore CHANGED
@@ -7,5 +7,6 @@ chroma
7
  uploads/
8
  /flask_session
9
  log.txt
 
10
  *.db
11
  __pycache__
 
7
  uploads/
8
  /flask_session
9
  log.txt
10
+ *.log
11
  *.db
12
  __pycache__
app.py CHANGED
@@ -1,41 +1,18 @@
1
- from flask import Flask, request, jsonify
2
  from flask import render_template
3
  from werkzeug.utils import secure_filename
4
- from apscheduler.schedulers.background import BackgroundScheduler
5
 
6
  from langchain_community.embeddings import HuggingFaceInferenceAPIEmbeddings
7
  import google.generativeai as genai
8
- from langchain.text_splitter import RecursiveCharacterTextSplitter
9
- from utils import add_file_to_chroma, remove_file_from_chroma, generate_query_response
10
 
 
11
  from db import init_db,add_file_to_db,remove_file_from_db,get_all_files
 
 
12
 
13
- from langchain_chroma import Chroma
14
  import os
15
- from dotenv import load_dotenv
16
- import logging
17
- from flask_cors import CORS
18
-
19
- logging.basicConfig(filename='log.txt', filemode='w', level=logging.DEBUG,
20
- format='%(asctime)s - %(levelname)s - %(message)s')
21
- logger = logging.getLogger()
22
-
23
- load_dotenv()
24
-
25
- HF_TOKEN = os.getenv('HF_TOKEN')
26
- GOOGLE_API_KEY = os.getenv('GOOGLE_API_KEY')
27
- CHROMA_PATH = "chroma"
28
- UPLOAD_FOLDER = "uploads"
29
- DB_PATH = "files.db"
30
- PROMPT_TEMPLATE = """
31
- Answer the given query based only on the context given below.
32
- context:
33
- {context}
34
-
35
- ---
36
- based on the context above answer the following query:
37
- {query}
38
- """
39
 
40
  # make required folder for files to upload
41
  os.makedirs(UPLOAD_FOLDER, exist_ok=True)
@@ -58,7 +35,18 @@ db = Chroma(persist_directory=CHROMA_PATH, embedding_function=hugging_face_ef)
58
 
59
 
60
  # Initialize database
61
- init_db()
 
 
 
 
 
 
 
 
 
 
 
62
 
63
  @app.route('/')
64
  def index():
@@ -68,7 +56,7 @@ def index():
68
  def get_files():
69
  """Get list of all files."""
70
  try:
71
- files = get_all_files()
72
  return jsonify({
73
  'status': 'success',
74
  'files': files
@@ -102,7 +90,7 @@ def upload_file():
102
  add_file_to_chroma(file_path, file_id, hugging_face_ef, db, logger)
103
 
104
  # Add file to SQLite database
105
- add_file_to_db(file_id, filename, file_type)
106
 
107
  return jsonify({
108
  'message': 'File uploaded successfully',
@@ -132,7 +120,7 @@ def remove_file():
132
  # Remove from ChromaDB
133
  if remove_file_from_chroma(file_id, db):
134
  # Remove from SQLite database
135
- remove_file_from_db(file_id)
136
  return jsonify({
137
  'message': 'File deleted successfully',
138
  'status': 'success'
 
1
+ from flask import Flask, Response, after_this_request, request, jsonify
2
  from flask import render_template
3
  from werkzeug.utils import secure_filename
4
+ from flask_cors import CORS
5
 
6
  from langchain_community.embeddings import HuggingFaceInferenceAPIEmbeddings
7
  import google.generativeai as genai
8
+ from langchain_chroma import Chroma
 
9
 
10
+ from utils import add_file_to_chroma, remove_file_from_chroma, generate_query_response
11
  from db import init_db,add_file_to_db,remove_file_from_db,get_all_files
12
+ from env_vars import HF_TOKEN,GOOGLE_API_KEY,CHROMA_PATH,UPLOAD_FOLDER,DB_PATH,PROMPT_TEMPLATE
13
+ from logger import logger
14
 
 
15
  import os
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  # make required folder for files to upload
18
  os.makedirs(UPLOAD_FOLDER, exist_ok=True)
 
35
 
36
 
37
  # Initialize database
38
+ init_db(DB_PATH)
39
+
40
+ # log requests
41
+ @app.before_request
42
+ def log_details():
43
+ method = request.method
44
+ url = request.url
45
+
46
+ @after_this_request
47
+ def log_details_callback(response: Response):
48
+ logger.info(f'method: {method}\n url: {url}\n status: {response.status}')
49
+ return response
50
 
51
  @app.route('/')
52
  def index():
 
56
  def get_files():
57
  """Get list of all files."""
58
  try:
59
+ files = get_all_files(DB_PATH)
60
  return jsonify({
61
  'status': 'success',
62
  'files': files
 
90
  add_file_to_chroma(file_path, file_id, hugging_face_ef, db, logger)
91
 
92
  # Add file to SQLite database
93
+ add_file_to_db(file_id, filename, file_type,DB_PATH)
94
 
95
  return jsonify({
96
  'message': 'File uploaded successfully',
 
120
  # Remove from ChromaDB
121
  if remove_file_from_chroma(file_id, db):
122
  # Remove from SQLite database
123
+ remove_file_from_db(file_id,DB_PATH)
124
  return jsonify({
125
  'message': 'File deleted successfully',
126
  'status': 'success'
db.py CHANGED
@@ -1,7 +1,8 @@
1
  import sqlite3
 
2
 
3
  # Initialize SQLite database for file tracking
4
- def init_db(DB_PATH = "files.db"):
5
  conn = sqlite3.connect(DB_PATH)
6
  c = conn.cursor()
7
  c.execute('''CREATE TABLE IF NOT EXISTS files
@@ -12,7 +13,7 @@ def init_db(DB_PATH = "files.db"):
12
  conn.commit()
13
  conn.close()
14
 
15
- def add_file_to_db(file_id, file_name, file_type,DB_PATH = "files.db"):
16
  conn = sqlite3.connect(DB_PATH)
17
  c = conn.cursor()
18
  c.execute('INSERT INTO files (file_id, file_name, file_type) VALUES (?, ?, ?)',
@@ -20,14 +21,14 @@ def add_file_to_db(file_id, file_name, file_type,DB_PATH = "files.db"):
20
  conn.commit()
21
  conn.close()
22
 
23
- def remove_file_from_db(file_id,DB_PATH = "files.db"):
24
  conn = sqlite3.connect(DB_PATH)
25
  c = conn.cursor()
26
  c.execute('DELETE FROM files WHERE file_id = ?', (file_id,))
27
  conn.commit()
28
  conn.close()
29
 
30
- def get_all_files(DB_PATH = "files.db"):
31
  conn = sqlite3.connect(DB_PATH)
32
  c = conn.cursor()
33
  c.execute('SELECT file_id, file_name, file_type, created_at FROM files ORDER BY created_at DESC')
 
1
  import sqlite3
2
+ from env_vars import DB_PATH
3
 
4
  # Initialize SQLite database for file tracking
5
+ def init_db(DB_PATH = DB_PATH):
6
  conn = sqlite3.connect(DB_PATH)
7
  c = conn.cursor()
8
  c.execute('''CREATE TABLE IF NOT EXISTS files
 
13
  conn.commit()
14
  conn.close()
15
 
16
+ def add_file_to_db(file_id, file_name, file_type,DB_PATH = DB_PATH):
17
  conn = sqlite3.connect(DB_PATH)
18
  c = conn.cursor()
19
  c.execute('INSERT INTO files (file_id, file_name, file_type) VALUES (?, ?, ?)',
 
21
  conn.commit()
22
  conn.close()
23
 
24
+ def remove_file_from_db(file_id,DB_PATH = DB_PATH):
25
  conn = sqlite3.connect(DB_PATH)
26
  c = conn.cursor()
27
  c.execute('DELETE FROM files WHERE file_id = ?', (file_id,))
28
  conn.commit()
29
  conn.close()
30
 
31
+ def get_all_files(DB_PATH = DB_PATH):
32
  conn = sqlite3.connect(DB_PATH)
33
  c = conn.cursor()
34
  c.execute('SELECT file_id, file_name, file_type, created_at FROM files ORDER BY created_at DESC')
env_vars.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from dotenv import load_dotenv
3
+
4
+ load_dotenv()
5
+
6
+ HF_TOKEN = os.getenv('HF_TOKEN')
7
+ GOOGLE_API_KEY = os.getenv('GOOGLE_API_KEY')
8
+ CHROMA_PATH = "chroma"
9
+ UPLOAD_FOLDER = "uploads"
10
+ DB_PATH = "files.db"
11
+ PROMPT_TEMPLATE = """
12
+ Answer the given query based only on the context given below.
13
+ context:
14
+ {context}
15
+
16
+ ---
17
+ based on the context above answer the following query:
18
+ {query}
19
+ """
logger.py ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ import logging
2
+
3
+ logging.basicConfig(level=logging.DEBUG,
4
+ format='%(asctime)s - %(levelname)s - %(message)s',
5
+ handlers=[logging.StreamHandler(),logging.FileHandler('logs.log')])
6
+ logger = logging.getLogger()
utils.py CHANGED
@@ -1,11 +1,7 @@
1
  from langchain.text_splitter import RecursiveCharacterTextSplitter
2
  from langchain_community.document_loaders import PyPDFLoader,UnstructuredWordDocumentLoader,TextLoader,UnstructuredHTMLLoader,UnstructuredMarkdownLoader
3
  import os
4
- import logging
5
-
6
- logging.basicConfig(filename='log.txt', filemode='w', level=logging.DEBUG,
7
- format='%(asctime)s - %(levelname)s - %(message)s')
8
- logger = logging.getLogger()
9
 
10
  def add_file_to_chroma(file_path, file_id, hugging_face_ef, db, logger):
11
  """Add file chunks to ChromaDB with advanced document handling."""
@@ -90,6 +86,8 @@ def generate_query_response(query, db, llm_model, PROMPT_TEMPLATE):
90
  prompt = PROMPT_TEMPLATE.format(context=context, query=query)
91
  answer = llm_model.generate_content(prompt).text
92
 
 
 
93
  # Prepare response with sources
94
  return {
95
  "is_relevant": is_relevant,
 
1
  from langchain.text_splitter import RecursiveCharacterTextSplitter
2
  from langchain_community.document_loaders import PyPDFLoader,UnstructuredWordDocumentLoader,TextLoader,UnstructuredHTMLLoader,UnstructuredMarkdownLoader
3
  import os
4
+ from logger import logger
 
 
 
 
5
 
6
  def add_file_to_chroma(file_path, file_id, hugging_face_ef, db, logger):
7
  """Add file chunks to ChromaDB with advanced document handling."""
 
86
  prompt = PROMPT_TEMPLATE.format(context=context, query=query)
87
  answer = llm_model.generate_content(prompt).text
88
 
89
+ logger.info(f"Query : {query}\nResponse:{answer}")
90
+
91
  # Prepare response with sources
92
  return {
93
  "is_relevant": is_relevant,