cryogenic22 commited on
Commit
7333afe
·
verified ·
1 Parent(s): 26ba544

Update utils/database.py

Browse files
Files changed (1) hide show
  1. utils/database.py +108 -1
utils/database.py CHANGED
@@ -1,7 +1,60 @@
1
- # src/utils/database.py
2
  import streamlit as st
3
  import sqlite3
 
4
  from datetime import datetime
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
6
  def get_documents(conn):
7
  """Retrieve documents from database"""
@@ -27,3 +80,57 @@ def insert_document(conn, doc_name, doc_content):
27
  except Exception as e:
28
  st.error(f"Error inserting document: {e}")
29
  return False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # utils/database.py
2
  import streamlit as st
3
  import sqlite3
4
+ from sqlite3 import Error
5
  from datetime import datetime
6
+ from langchain.chains.conversational_retrieval.base import ConversationalRetrievalChain
7
+ from langchain.memory import ConversationBufferMemory
8
+ from langchain.chat_models import ChatOpenAI
9
+ import os
10
+
11
+ def create_connection(db_file):
12
+ try:
13
+ conn = sqlite3.connect(db_file)
14
+ return conn
15
+ except Error as e:
16
+ st.error(f"Error: {e}")
17
+ return None
18
+
19
+ def create_tables(conn):
20
+ try:
21
+ sql_create_documents_table = """
22
+ CREATE TABLE IF NOT EXISTS documents (
23
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
24
+ name TEXT NOT NULL,
25
+ content TEXT NOT NULL,
26
+ upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
27
+ );
28
+ """
29
+
30
+ sql_create_queries_table = """
31
+ CREATE TABLE IF NOT EXISTS queries (
32
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
33
+ query TEXT NOT NULL,
34
+ response TEXT NOT NULL,
35
+ document_id INTEGER,
36
+ query_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
37
+ FOREIGN KEY (document_id) REFERENCES documents (id)
38
+ );
39
+ """
40
+
41
+ sql_create_annotations_table = """
42
+ CREATE TABLE IF NOT EXISTS annotations (
43
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
44
+ document_id INTEGER NOT NULL,
45
+ annotation TEXT NOT NULL,
46
+ page_number INTEGER,
47
+ annotation_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
48
+ FOREIGN KEY (document_id) REFERENCES documents (id)
49
+ );
50
+ """
51
+
52
+ c = conn.cursor()
53
+ c.execute(sql_create_documents_table)
54
+ c.execute(sql_create_queries_table)
55
+ c.execute(sql_create_annotations_table)
56
+ except Error as e:
57
+ st.error(f"Error: {e}")
58
 
59
  def get_documents(conn):
60
  """Retrieve documents from database"""
 
80
  except Exception as e:
81
  st.error(f"Error inserting document: {e}")
82
  return False
83
+
84
+ def initialize_qa_system(vector_store):
85
+ """Initialize QA system with proper chat handling"""
86
+ try:
87
+ llm = ChatOpenAI(
88
+ temperature=0,
89
+ model_name="gpt-4",
90
+ api_key=os.environ.get("OPENAI_API_KEY"),
91
+ )
92
+
93
+ memory = ConversationBufferMemory(
94
+ memory_key="chat_history",
95
+ return_messages=True
96
+ )
97
+
98
+ qa_chain = ConversationalRetrievalChain.from_llm(
99
+ llm=llm,
100
+ retriever=vector_store.as_retriever(search_kwargs={"k": 2}),
101
+ memory=memory,
102
+ return_source_documents=True,
103
+ verbose=True
104
+ )
105
+
106
+ return qa_chain
107
+
108
+ except Exception as e:
109
+ st.error(f"Error initializing QA system: {e}")
110
+ return None
111
+
112
+ def initialize_faiss(embeddings, documents, document_names):
113
+ """Initialize FAISS vector store"""
114
+ try:
115
+ from langchain.vectorstores import FAISS
116
+ vector_store = FAISS.from_texts(
117
+ documents,
118
+ embeddings,
119
+ metadatas=[{"source": name} for name in document_names]
120
+ )
121
+ return vector_store
122
+ except Exception as e:
123
+ st.error(f"Error initializing FAISS: {e}")
124
+ return None
125
+
126
+ @st.cache_resource
127
+ def get_embeddings_model():
128
+ """Get the embeddings model"""
129
+ try:
130
+ from langchain.embeddings import HuggingFaceEmbeddings
131
+ model_name = "sentence-transformers/all-MiniLM-L6-v2"
132
+ embeddings = HuggingFaceEmbeddings(model_name=model_name)
133
+ return embeddings
134
+ except Exception as e:
135
+ st.error(f"Error loading embeddings model: {e}")
136
+ return None