Commit
·
4e7b4ba
0
Parent(s):
Initial files
Browse files- .gitignore +2 -0
- .idea/.gitignore +8 -0
- .idea/inspectionProfiles/Project_Default.xml +17 -0
- .idea/inspectionProfiles/profiles_settings.xml +6 -0
- .idea/misc.xml +7 -0
- .idea/modules.xml +8 -0
- .idea/pdf-rag.iml +8 -0
- .idea/vcs.xml +6 -0
- requirements.txt +8 -0
- src/.env +1 -0
- src/main.ipynb +213 -0
.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 |
+
}
|