pirag 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- app/main.py +4 -1
- app/rag/ask/__init__.py +2 -0
- app/rag/ask/config.py +9 -0
- app/rag/ask/router.py +4 -0
- app/rag/ask/service.py +0 -0
- app/rag/config.py +18 -17
- app/rag/doctor/__init__.py +2 -0
- app/rag/doctor/config.py +24 -0
- app/rag/doctor/router.py +7 -0
- app/rag/doctor/service.py +0 -0
- app/rag/test/__init__.py +2 -0
- app/rag/test/config.py +9 -0
- app/rag/test/router.py +15 -0
- app/rag/test/service.py +9 -0
- app/rag/train/__init__.py +2 -0
- app/rag/train/config.py +20 -0
- app/rag/train/router.py +4 -0
- app/rag/train/service.py +0 -0
- app/setup.py +1 -2
- {pirag-0.1.0.dist-info → pirag-0.1.2.dist-info}/METADATA +9 -4
- pirag-0.1.2.dist-info/RECORD +27 -0
- pirag-0.1.0.dist-info/RECORD +0 -11
- {pirag-0.1.0.dist-info → pirag-0.1.2.dist-info}/WHEEL +0 -0
- {pirag-0.1.0.dist-info → pirag-0.1.2.dist-info}/entry_points.txt +0 -0
- {pirag-0.1.0.dist-info → pirag-0.1.2.dist-info}/licenses/LICENSE +0 -0
- {pirag-0.1.0.dist-info → pirag-0.1.2.dist-info}/top_level.txt +0 -0
app/main.py
CHANGED
@@ -62,7 +62,10 @@ def main():
|
|
62
62
|
command_message = f"with command: {args.command}" if args.command else ""
|
63
63
|
logger.info(f"RAG Started {command_message}")
|
64
64
|
|
65
|
-
setup_logger(
|
65
|
+
setup_logger(
|
66
|
+
log_level = args.log_level,
|
67
|
+
log_dir = args.log_dir,
|
68
|
+
)
|
66
69
|
logger.debug(f"Parsed arguments: {args}")
|
67
70
|
|
68
71
|
if args.command == 'doctor':
|
app/rag/ask/__init__.py
ADDED
app/rag/ask/config.py
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
import argparse
|
2
|
+
|
3
|
+
help = "Ask a question to the RAG system."
|
4
|
+
|
5
|
+
parser = argparse.ArgumentParser(
|
6
|
+
description = f"{help} Queries the knowledge base with natural language questions, retrieves relevant context, and generates accurate, contextually-aware responses based on the retrieved information",
|
7
|
+
add_help = False,
|
8
|
+
formatter_class = argparse.ArgumentDefaultsHelpFormatter,
|
9
|
+
)
|
app/rag/ask/router.py
ADDED
app/rag/ask/service.py
ADDED
File without changes
|
app/rag/config.py
CHANGED
@@ -3,34 +3,35 @@ from pathlib import Path
|
|
3
3
|
from loguru import logger
|
4
4
|
|
5
5
|
# Logger format constants
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
LOG_TIME_FORMAT = "{time:YYYY-MM-DD HH:mm:ss.SSS!UTC}Z"
|
7
|
+
LOG_FILE_FORMAT = f"{LOG_TIME_FORMAT} | {{level: <8}} | {{name}}:{{function}}:{{line}} - {{message}}"
|
8
|
+
LOG_CONSOLE_FORMAT_FULL = f"<green>{LOG_TIME_FORMAT}</green> | <level>{{level: <8}}</level> | <cyan>{{name}}</cyan>:<cyan>{{function}}</cyan>:<cyan>{{line}}</cyan> - <level>{{message}}</level>\n"
|
9
|
+
LOG_CONSOLE_FORMAT_SIMPLE = f"<green>{LOG_TIME_FORMAT}</green> | <level>{{level: <8}}</level> | <level>{{message}}</level>\n"
|
10
10
|
|
11
11
|
# Initial logger setup before setup_logger()
|
12
12
|
logger.remove()
|
13
13
|
logger.add(
|
14
14
|
sink = sys.stderr,
|
15
15
|
level = "INFO",
|
16
|
-
format = lambda record:
|
16
|
+
format = lambda record: LOG_CONSOLE_FORMAT_SIMPLE if record["level"].name == "INFO" else LOG_CONSOLE_FORMAT_FULL,
|
17
17
|
colorize = True
|
18
18
|
)
|
19
19
|
|
20
|
-
def setup_logger(log_level: str):
|
20
|
+
def setup_logger(log_level: str, log_dir: str):
|
21
21
|
"""Configure logger with specified level and outputs"""
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
log_dir = Path("app/logs")
|
23
|
+
log_dir = Path(log_dir)
|
26
24
|
log_dir.mkdir(exist_ok=True, parents=True)
|
27
25
|
|
26
|
+
logger.remove()
|
27
|
+
|
28
28
|
# File handler
|
29
29
|
logger.add(
|
30
|
-
sink = log_dir / "
|
30
|
+
sink = log_dir / "{time:YYYYMMDD-HHmmss!UTC}Z.log",
|
31
31
|
level = log_level,
|
32
|
-
rotation = "
|
33
|
-
|
32
|
+
rotation = "100 MB",
|
33
|
+
retention = 0,
|
34
|
+
format = LOG_FILE_FORMAT,
|
34
35
|
serialize = False,
|
35
36
|
enqueue = True,
|
36
37
|
backtrace = True,
|
@@ -42,7 +43,7 @@ def setup_logger(log_level: str):
|
|
42
43
|
logger.add(
|
43
44
|
sink = sys.stderr,
|
44
45
|
level = log_level,
|
45
|
-
format = lambda record:
|
46
|
+
format = lambda record: LOG_CONSOLE_FORMAT_SIMPLE if record["level"].name == "INFO" else LOG_CONSOLE_FORMAT_FULL,
|
46
47
|
colorize = True
|
47
48
|
)
|
48
49
|
|
@@ -133,10 +134,10 @@ top_parser.add_argument(
|
|
133
134
|
)
|
134
135
|
|
135
136
|
top_parser.add_argument(
|
136
|
-
'--log-
|
137
|
-
envvar = '
|
138
|
-
help = 'Path to log
|
139
|
-
default = '.logs',
|
137
|
+
'--log-dir',
|
138
|
+
envvar = 'LOG_DIR',
|
139
|
+
help = 'Path to log directory',
|
140
|
+
default = '.pirag/logs',
|
140
141
|
type = str,
|
141
142
|
required = False,
|
142
143
|
action = EnvDefault,
|
app/rag/doctor/config.py
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
import argparse
|
2
|
+
|
3
|
+
from app.rag.config import top_parser, common_parser
|
4
|
+
|
5
|
+
help = "Diagnose the RAG system."
|
6
|
+
|
7
|
+
parser = argparse.ArgumentParser(
|
8
|
+
description = f"{help} Performs comprehensive health checks on all components, validates configurations, and reports issues to ensure optimal system operation",
|
9
|
+
add_help = False,
|
10
|
+
formatter_class = argparse.ArgumentDefaultsHelpFormatter,
|
11
|
+
)
|
12
|
+
|
13
|
+
subparsers = parser.add_subparsers(
|
14
|
+
title = "subcommands",
|
15
|
+
dest = "subcommand",
|
16
|
+
)
|
17
|
+
|
18
|
+
subparsers.add_parser(
|
19
|
+
"check",
|
20
|
+
help = "Check RAG System. Scan all components of the system and diagnose status",
|
21
|
+
description = "Check RAG System. Scan all components of the system and diagnose status",
|
22
|
+
parents = [top_parser, common_parser],
|
23
|
+
add_help = False,
|
24
|
+
)
|
app/rag/doctor/router.py
ADDED
File without changes
|
app/rag/test/__init__.py
ADDED
app/rag/test/config.py
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
import argparse
|
2
|
+
|
3
|
+
help = "Test the RAG system."
|
4
|
+
|
5
|
+
parser = argparse.ArgumentParser(
|
6
|
+
description = f"{help} Evaluates system performance by running predefined test cases, measuring accuracy, relevance, and latency metrics to validate retrieval and generation capabilities",
|
7
|
+
add_help = False,
|
8
|
+
formatter_class = argparse.ArgumentDefaultsHelpFormatter,
|
9
|
+
)
|
app/rag/test/router.py
ADDED
app/rag/test/service.py
ADDED
app/rag/train/config.py
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
import argparse
|
2
|
+
|
3
|
+
help = "Train the RAG system."
|
4
|
+
|
5
|
+
parser = argparse.ArgumentParser(
|
6
|
+
description = f"{help} Processes documents, extracts knowledge, generates embeddings, and builds a searchable vector database for efficient semantic retrieval and contextual responses",
|
7
|
+
add_help = False,
|
8
|
+
formatter_class = argparse.ArgumentDefaultsHelpFormatter,
|
9
|
+
)
|
10
|
+
|
11
|
+
subparsers = parser.add_subparsers(
|
12
|
+
title = "subcommands",
|
13
|
+
dest = "subcommand",
|
14
|
+
)
|
15
|
+
|
16
|
+
subparsers.add_parser(
|
17
|
+
"check",
|
18
|
+
help = "Check RAG System. Scan all components of the system and diagnose status",
|
19
|
+
description = "Check RAG System. Scan all components of the system and diagnose status",
|
20
|
+
)
|
app/rag/train/router.py
ADDED
app/rag/train/service.py
ADDED
File without changes
|
app/setup.py
CHANGED
@@ -16,8 +16,7 @@ APP_NAME = "pirag"
|
|
16
16
|
setup(
|
17
17
|
name = APP_NAME,
|
18
18
|
version = version,
|
19
|
-
packages =
|
20
|
-
package_dir = {"": ".", "rag": "rag"},
|
19
|
+
packages = find_packages(),
|
21
20
|
include_package_data = True,
|
22
21
|
install_requires = requirements,
|
23
22
|
entry_points = {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: pirag
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.2
|
4
4
|
Summary: CLI Projects of On-Premise RAG. You can use your own LLM and vector DB. Or just add remote LLM servers and vector DB.
|
5
5
|
Author-email: semir4in <semir4in@gmail.com>, jyje <jyjeon@outlook.com>
|
6
6
|
Project-URL: Homepage, https://github.com/jyje/pilot-onpremise-rag
|
@@ -46,15 +46,20 @@ Dynamic: license-file
|
|
46
46
|
git clone https://github.com/jyje/pilot-onpremise-rag
|
47
47
|
cd pilot-onpremise-rag
|
48
48
|
|
49
|
-
docker compose -f docker/compose.yaml up
|
49
|
+
docker compose -f docker/compose.yaml up
|
50
50
|
```
|
51
51
|
|
52
|
-
### Install pirag
|
52
|
+
### Install pirag from source
|
53
53
|
```bash
|
54
54
|
git clone https://github.com/jyje/pilot-onpremise-rag
|
55
55
|
cd pilot-onpremise-rag
|
56
56
|
|
57
|
-
pip install --upgrade -e
|
57
|
+
pip install --upgrade -e .
|
58
|
+
```
|
59
|
+
|
60
|
+
### Install pirag from PyPI
|
61
|
+
```bash
|
62
|
+
pip install --upgrade pirag
|
58
63
|
```
|
59
64
|
|
60
65
|
## 📚 Usage
|
@@ -0,0 +1,27 @@
|
|
1
|
+
app/main.py,sha256=Zl9yGtnZqTH8-0ljdvsvvQ_7Nksv8_1wo-oZntmhbos,2241
|
2
|
+
app/requirements.txt,sha256=JFEWoQHN7hwDg0bDrWlN0vxZVR3oe8dYgv7mkHrQg1g,128
|
3
|
+
app/setup.py,sha256=j9qcfapv_jOW3jORYGfHzKDAcxNRItHcHA34_mMDGj4,744
|
4
|
+
app/rag/agent.py,sha256=u1ovyqALsmOMHDCW-hdlkMU72XdlTMiFJ-WRbLHHrYQ,2190
|
5
|
+
app/rag/config.py,sha256=KVDuJ8wVwgb9akMSxEl8cTJ3p7UHECZHlXKiyRopj10,5172
|
6
|
+
app/rag/ask/__init__.py,sha256=41lK4nmvWT2ZZ3G_FMtOiG-0JFJdDVT4zoxkoes8TaE,59
|
7
|
+
app/rag/ask/config.py,sha256=tRHOBrEAmTMBaBmYPKPsRJmSaVyKT8-TBSDJQXEndxc,386
|
8
|
+
app/rag/ask/router.py,sha256=5nuaaHzWVr2ltYqOuQ30ujmZ-GFyx-22OLVODILd5iE,76
|
9
|
+
app/rag/ask/service.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
|
+
app/rag/doctor/__init__.py,sha256=41lK4nmvWT2ZZ3G_FMtOiG-0JFJdDVT4zoxkoes8TaE,59
|
11
|
+
app/rag/doctor/config.py,sha256=CW0scwLkRykKLp15szu6Q9i3sG7n70ZJ0eYOtkjuS9Q,765
|
12
|
+
app/rag/doctor/router.py,sha256=ZP2q_aHaVz5kTjBPLX9Oc3NdLe8MdIqjRReHGBLgoW8,135
|
13
|
+
app/rag/doctor/service.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
|
+
app/rag/test/__init__.py,sha256=41lK4nmvWT2ZZ3G_FMtOiG-0JFJdDVT4zoxkoes8TaE,59
|
15
|
+
app/rag/test/config.py,sha256=tk-IM1VspaUPgwWKSwYWagkdYXfOjIAjU3-c0rxMBoc,361
|
16
|
+
app/rag/test/router.py,sha256=zfqLhfYwP3nvoZEJWtxGwKuYdEk7NmM83EYlL5wVy8w,259
|
17
|
+
app/rag/test/service.py,sha256=Znb-qEM5eM6-Y-tmSoBklsLGR6gEKeYqc1EW_yzYts0,164
|
18
|
+
app/rag/train/__init__.py,sha256=41lK4nmvWT2ZZ3G_FMtOiG-0JFJdDVT4zoxkoes8TaE,59
|
19
|
+
app/rag/train/config.py,sha256=PO4iRMmZXViFHOMBbOOhnFHqBu8hRfbI61zGCuksKhI,668
|
20
|
+
app/rag/train/router.py,sha256=5nuaaHzWVr2ltYqOuQ30ujmZ-GFyx-22OLVODILd5iE,76
|
21
|
+
app/rag/train/service.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
|
+
pirag-0.1.2.dist-info/licenses/LICENSE,sha256=gBUmwRyDQYI4Q4Ju5S88urvB-B-nqsXN45n8oQ3DZ3Y,1079
|
23
|
+
pirag-0.1.2.dist-info/METADATA,sha256=Tbr20PW_FnjRcRXK1u3gDl-uVeunQtQGMlQM9tP5m10,5232
|
24
|
+
pirag-0.1.2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
25
|
+
pirag-0.1.2.dist-info/entry_points.txt,sha256=1tHs5rP66AVq5SMEWRRIWRf_XqJo2Gb1TJl9-Kw_MSo,40
|
26
|
+
pirag-0.1.2.dist-info/top_level.txt,sha256=io9g7LCbfmTG1SFKgEOGXmCFB9uMP2H5lerm0HiHWQE,4
|
27
|
+
pirag-0.1.2.dist-info/RECORD,,
|
pirag-0.1.0.dist-info/RECORD
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
app/main.py,sha256=CRpnMBACO2446xoGbgN6mz9QH2_EM-Ibi017x3WoJiE,2182
|
2
|
-
app/requirements.txt,sha256=JFEWoQHN7hwDg0bDrWlN0vxZVR3oe8dYgv7mkHrQg1g,128
|
3
|
-
app/setup.py,sha256=Ku79YGHGZL6N7m4mOtXq96y8jrhzf4R5OPGu0fHCRq8,784
|
4
|
-
app/rag/agent.py,sha256=u1ovyqALsmOMHDCW-hdlkMU72XdlTMiFJ-WRbLHHrYQ,2190
|
5
|
-
app/rag/config.py,sha256=SNVJF7zEuClG818W9Ot_ecOqVdy2390hzxe73hD0jzg,5057
|
6
|
-
pirag-0.1.0.dist-info/licenses/LICENSE,sha256=gBUmwRyDQYI4Q4Ju5S88urvB-B-nqsXN45n8oQ3DZ3Y,1079
|
7
|
-
pirag-0.1.0.dist-info/METADATA,sha256=uqWodH_r0zaoiEhLuuq-7ga86qYa_vjJbTB09jPa7T0,5158
|
8
|
-
pirag-0.1.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
9
|
-
pirag-0.1.0.dist-info/entry_points.txt,sha256=1tHs5rP66AVq5SMEWRRIWRf_XqJo2Gb1TJl9-Kw_MSo,40
|
10
|
-
pirag-0.1.0.dist-info/top_level.txt,sha256=io9g7LCbfmTG1SFKgEOGXmCFB9uMP2H5lerm0HiHWQE,4
|
11
|
-
pirag-0.1.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|