anakib1 commited on
Commit
4e7b4ba
·
0 Parent(s):

Initial files

Browse files
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ src/.env
2
+ .idea/
.idea/.gitignore ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
4
+ # Editor-based HTTP Client requests
5
+ /httpRequests/
6
+ # Datasource local storage ignored files
7
+ /dataSources/
8
+ /dataSources.local.xml
.idea/inspectionProfiles/Project_Default.xml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
5
+ <option name="ignoredPackages">
6
+ <value>
7
+ <list size="4">
8
+ <item index="0" class="java.lang.String" itemvalue="scikit-learn" />
9
+ <item index="1" class="java.lang.String" itemvalue="tensorflow" />
10
+ <item index="2" class="java.lang.String" itemvalue="tensorboard" />
11
+ <item index="3" class="java.lang.String" itemvalue="neptune" />
12
+ </list>
13
+ </value>
14
+ </option>
15
+ </inspection_tool>
16
+ </profile>
17
+ </component>
.idea/inspectionProfiles/profiles_settings.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <settings>
3
+ <option name="USE_PROJECT_PROFILE" value="false" />
4
+ <version value="1.0" />
5
+ </settings>
6
+ </component>
.idea/misc.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Black">
4
+ <option name="sdkName" value="pdf-rag" />
5
+ </component>
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="pdf-rag" project-jdk-type="Python SDK" />
7
+ </project>
.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/pdf-rag.iml" filepath="$PROJECT_DIR$/.idea/pdf-rag.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
.idea/pdf-rag.iml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="PYTHON_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$" />
5
+ <orderEntry type="inheritedJdk" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ </component>
8
+ </module>
.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ langchain
2
+ langchain-community
3
+ langchainhub
4
+ langchain-openai
5
+ chromadb
6
+ openai
7
+ sentence_transformers
8
+ pypdf
src/.env ADDED
@@ -0,0 +1 @@
 
 
1
+ OPENAI_API_KEY=
src/main.ipynb ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "initial_id",
7
+ "metadata": {
8
+ "collapsed": true,
9
+ "ExecuteTime": {
10
+ "end_time": "2024-04-09T12:19:57.209797Z",
11
+ "start_time": "2024-04-09T12:19:56.512881Z"
12
+ }
13
+ },
14
+ "outputs": [],
15
+ "source": [
16
+ "import openai\n",
17
+ "import os\n",
18
+ "from langchain.embeddings.openai import OpenAIEmbeddings\n",
19
+ "from langchain.vectorstores import Chroma\n",
20
+ "from langchain.text_splitter import RecursiveCharacterTextSplitter\n",
21
+ "from langchain.llms import OpenAI\n",
22
+ "from langchain.chains import RetrievalQA\n",
23
+ "from langchain.document_loaders import PyPDFLoader"
24
+ ]
25
+ },
26
+ {
27
+ "cell_type": "code",
28
+ "outputs": [],
29
+ "source": [
30
+ "from langchain_community.embeddings import HuggingFaceEmbeddings"
31
+ ],
32
+ "metadata": {
33
+ "collapsed": false,
34
+ "ExecuteTime": {
35
+ "end_time": "2024-04-09T12:20:42.829268Z",
36
+ "start_time": "2024-04-09T12:20:42.826653Z"
37
+ }
38
+ },
39
+ "id": "250fa66f6697db37",
40
+ "execution_count": 3
41
+ },
42
+ {
43
+ "cell_type": "code",
44
+ "outputs": [],
45
+ "source": [
46
+ "embeddings = HuggingFaceEmbeddings()"
47
+ ],
48
+ "metadata": {
49
+ "collapsed": false
50
+ },
51
+ "id": "60529ce6ea0b7805",
52
+ "execution_count": null
53
+ },
54
+ {
55
+ "cell_type": "code",
56
+ "outputs": [],
57
+ "source": [
58
+ "loader = PyPDFLoader(\"../data/book.pdf\")\n",
59
+ "documents = loader.load()\n",
60
+ "splitter = RecursiveCharacterTextSplitter(\n",
61
+ " chunk_size=1000,\n",
62
+ " chunk_overlap=100)\n",
63
+ "texts = splitter.split_documents(\n",
64
+ " documents\n",
65
+ ")\n",
66
+ "vectordb = Chroma.from_documents(\n",
67
+ " documents=texts,\n",
68
+ " embedding=embeddings,\n",
69
+ " persist_directory=\"db\"\n",
70
+ ")\n",
71
+ "vectordb.persist()"
72
+ ],
73
+ "metadata": {
74
+ "collapsed": false,
75
+ "ExecuteTime": {
76
+ "end_time": "2024-04-09T12:29:33.274721Z",
77
+ "start_time": "2024-04-09T12:28:17.211426Z"
78
+ }
79
+ },
80
+ "id": "8877d4cddc9e6685",
81
+ "execution_count": 18
82
+ },
83
+ {
84
+ "cell_type": "code",
85
+ "outputs": [
86
+ {
87
+ "data": {
88
+ "text/plain": "True"
89
+ },
90
+ "execution_count": 20,
91
+ "metadata": {},
92
+ "output_type": "execute_result"
93
+ }
94
+ ],
95
+ "source": [
96
+ "from dotenv import load_dotenv\n",
97
+ "load_dotenv()"
98
+ ],
99
+ "metadata": {
100
+ "collapsed": false,
101
+ "ExecuteTime": {
102
+ "end_time": "2024-04-09T12:31:43.284648Z",
103
+ "start_time": "2024-04-09T12:31:43.268116Z"
104
+ }
105
+ },
106
+ "id": "19215a11120d224a",
107
+ "execution_count": 20
108
+ },
109
+ {
110
+ "cell_type": "code",
111
+ "outputs": [],
112
+ "source": [
113
+ "from langchain_openai import ChatOpenAI\n",
114
+ "qa = RetrievalQA.from_chain_type(\n",
115
+ " llm=ChatOpenAI( model_name=\"gpt-3.5-turbo\", temperature=0), \n",
116
+ " chain_type=\"stuff\", \n",
117
+ " retriever=vectordb.as_retriever(),\n",
118
+ " return_source_documents=True,\n",
119
+ ")"
120
+ ],
121
+ "metadata": {
122
+ "collapsed": false,
123
+ "ExecuteTime": {
124
+ "end_time": "2024-04-09T12:33:07.391322Z",
125
+ "start_time": "2024-04-09T12:33:07.000452Z"
126
+ }
127
+ },
128
+ "id": "8e83a7e1daba629e",
129
+ "execution_count": 24
130
+ },
131
+ {
132
+ "cell_type": "code",
133
+ "outputs": [
134
+ {
135
+ "name": "stderr",
136
+ "output_type": "stream",
137
+ "text": [
138
+ "/Users/sviatoslavbidzilia/anaconda3/envs/pdf-rag/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.0 and will be removed in 0.2.0. Use invoke instead.\n",
139
+ " warn_deprecated(\n",
140
+ "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n",
141
+ "To disable this warning, you can either:\n",
142
+ "\t- Avoid using `tokenizers` before the fork if possible\n",
143
+ "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n"
144
+ ]
145
+ },
146
+ {
147
+ "name": "stdout",
148
+ "output_type": "stream",
149
+ "text": [
150
+ "Ця типологія поділяється за Максом Вебером.\n",
151
+ "[Document(page_content='традиціями, системою розділення праці, характером комунікацій тощо. Цей підхід дає змогу зіставляти', metadata={'page': 266, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'}), Document(page_content='харизматичні й раціональні системи.', metadata={'page': 201, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'}), Document(page_content='перші два типи притаманні стабільним соціальним спільнотам, то харизматична', metadata={'page': 331, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'}), Document(page_content='до того, що одні й ті ж самі терміни прихильниками різних політичних поглядів сприймаються', metadata={'page': 503, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'})]\n",
152
+ "-------------------\n",
153
+ "Стабілізуючі фактори функціонування політичної системи можуть включати в себе наявність демократичних інститутів, правову державу, ефективну систему регулювання конфліктів, належне функціонування економіки, соціальну стабільність, а також підтримку громадськості та довіру до політичних інститутів.\n",
154
+ "[Document(page_content='функції якого суто політичні.', metadata={'page': 232, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'}), Document(page_content='Функції політичної символіки.', metadata={'page': 510, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'}), Document(page_content='функціонування. \\nЯкщо розглядати процес формування ідеології як теорії в історичній', metadata={'page': 347, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'}), Document(page_content='який фактично допомагає функціонуванню існуючої політичної влади. Серед форм реалізації методу', metadata={'page': 383, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'})]\n",
155
+ "-------------------\n",
156
+ "Вибачте, я не можу відповісти на ваше питання, оскільки воно вимагає конкретних знань про конституційні засади сучасної політичної системи України, яких у мене немає.\n",
157
+ "[Document(page_content='те, що символіка взагалі й політична зокрема за своєю природою є конвенціональними, тобто їхній', metadata={'page': 511, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'}), Document(page_content='зовнішньої загрози існуючим політичним кордонам України та територіальній цілісності держави,', metadata={'page': 399, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'}), Document(page_content='система знань про політичну дійсність і якою завершується, констатуючи цим свої засади, єдинолюдина', metadata={'page': 19, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'}), Document(page_content=\"Звідси - здатність уловити зазначені очікування з боку суб'єкта політичної\", metadata={'page': 449, 'source': '/Users/sviatoslavbidzilia/PycharmProjects/pdf-rag/data/book.pdf'})]\n",
158
+ "-------------------\n"
159
+ ]
160
+ }
161
+ ],
162
+ "source": [
163
+ "queries = [\"Чия типологія поділяється на традиційні, харизматичні й раціональні системи?\", \n",
164
+ " \"Які існують стабілізуючі фактори функціонування політичної системи?\",\n",
165
+ " \"Які конституційні засади сучасної політичної системи України ви знаєте?\"]\n",
166
+ "for query in queries:\n",
167
+ " result = qa({\"query\": query})\n",
168
+ " print(result[\"result\"])\n",
169
+ " print(result[\"source_documents\"])\n",
170
+ " print(\"-------------------\")"
171
+ ],
172
+ "metadata": {
173
+ "collapsed": false,
174
+ "ExecuteTime": {
175
+ "end_time": "2024-04-09T12:33:32.604164Z",
176
+ "start_time": "2024-04-09T12:33:23.678319Z"
177
+ }
178
+ },
179
+ "id": "773ee487cedba406",
180
+ "execution_count": 25
181
+ },
182
+ {
183
+ "cell_type": "code",
184
+ "outputs": [],
185
+ "source": [],
186
+ "metadata": {
187
+ "collapsed": false
188
+ },
189
+ "id": "b34d3baaac8bc62a"
190
+ }
191
+ ],
192
+ "metadata": {
193
+ "kernelspec": {
194
+ "display_name": "Python 3",
195
+ "language": "python",
196
+ "name": "python3"
197
+ },
198
+ "language_info": {
199
+ "codemirror_mode": {
200
+ "name": "ipython",
201
+ "version": 2
202
+ },
203
+ "file_extension": ".py",
204
+ "mimetype": "text/x-python",
205
+ "name": "python",
206
+ "nbconvert_exporter": "python",
207
+ "pygments_lexer": "ipython2",
208
+ "version": "2.7.6"
209
+ }
210
+ },
211
+ "nbformat": 4,
212
+ "nbformat_minor": 5
213
+ }