bijux-rag 0.1.0__tar.gz
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.
- bijux_rag-0.1.0/.gitignore +88 -0
- bijux_rag-0.1.0/LICENSE +18 -0
- bijux_rag-0.1.0/PKG-INFO +310 -0
- bijux_rag-0.1.0/README.md +233 -0
- bijux_rag-0.1.0/pyproject.toml +132 -0
- bijux_rag-0.1.0/src/bijux_rag/__init__.py +512 -0
- bijux_rag-0.1.0/src/bijux_rag/_version.py +34 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/__init__.py +30 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/adapters/__init__.py +39 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/adapters/exception_bridge.py +108 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/adapters/pydantic_edges.py +81 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/adapters/serde.py +349 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/app_config.py +20 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/shells/__init__.py +19 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/shells/cli.py +326 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/shells/rag_api_shell.py +68 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/shells/rag_file_shell.py +55 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/shells/rag_main.py +80 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/shells/typer_cli.py +31 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/web/__init__.py +12 -0
- bijux_rag-0.1.0/src/bijux_rag/boundaries/web/fastapi_app.py +301 -0
- bijux_rag-0.1.0/src/bijux_rag/core/__init__.py +58 -0
- bijux_rag-0.1.0/src/bijux_rag/core/rag_types.py +273 -0
- bijux_rag-0.1.0/src/bijux_rag/core/rules_dsl.py +162 -0
- bijux_rag-0.1.0/src/bijux_rag/core/rules_lint.py +93 -0
- bijux_rag-0.1.0/src/bijux_rag/core/rules_pred.py +103 -0
- bijux_rag-0.1.0/src/bijux_rag/core/structural_dedup.py +59 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/__init__.py +41 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/capabilities.py +50 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/composition.py +47 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/effects/__init__.py +125 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/effects/async_/__init__.py +120 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/effects/async_/concurrency.py +303 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/effects/async_/plan.py +220 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/effects/async_/resilience.py +252 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/effects/async_/stream.py +303 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/effects/io_plan.py +52 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/effects/io_retry.py +79 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/effects/tx.py +84 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/facades.py +61 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/idempotent.py +56 -0
- bijux_rag-0.1.0/src/bijux_rag/domain/logging.py +55 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/__init__.py +95 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/applicative.py +10 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/combinators.py +218 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/core.py +377 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/effects/__init__.py +71 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/effects/configurable.py +64 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/effects/layering.py +44 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/effects/reader.py +47 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/effects/state.py +55 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/effects/writer.py +124 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/error.py +24 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/functor.py +123 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/monoid.py +172 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/option_result.py +14 -0
- bijux_rag-0.1.0/src/bijux_rag/fp/validation.py +178 -0
- bijux_rag-0.1.0/src/bijux_rag/infra/__init__.py +8 -0
- bijux_rag-0.1.0/src/bijux_rag/infra/adapters/__init__.py +20 -0
- bijux_rag-0.1.0/src/bijux_rag/infra/adapters/async_runtime.py +22 -0
- bijux_rag-0.1.0/src/bijux_rag/infra/adapters/atomic_storage.py +31 -0
- bijux_rag-0.1.0/src/bijux_rag/infra/adapters/clock.py +28 -0
- bijux_rag-0.1.0/src/bijux_rag/infra/adapters/file_storage.py +85 -0
- bijux_rag-0.1.0/src/bijux_rag/infra/adapters/logger.py +28 -0
- bijux_rag-0.1.0/src/bijux_rag/infra/adapters/memory_storage.py +30 -0
- bijux_rag-0.1.0/src/bijux_rag/interop/__init__.py +35 -0
- bijux_rag-0.1.0/src/bijux_rag/interop/dataframes.py +63 -0
- bijux_rag-0.1.0/src/bijux_rag/interop/returns_compat.py +74 -0
- bijux_rag-0.1.0/src/bijux_rag/interop/stdlib_fp.py +40 -0
- bijux_rag-0.1.0/src/bijux_rag/interop/toolz_compat.py +116 -0
- bijux_rag-0.1.0/src/bijux_rag/pipelines/__init__.py +33 -0
- bijux_rag-0.1.0/src/bijux_rag/pipelines/cli.py +84 -0
- bijux_rag-0.1.0/src/bijux_rag/pipelines/configured.py +144 -0
- bijux_rag-0.1.0/src/bijux_rag/pipelines/distributed.py +49 -0
- bijux_rag-0.1.0/src/bijux_rag/pipelines/specs.py +157 -0
- bijux_rag-0.1.0/src/bijux_rag/policies/__init__.py +76 -0
- bijux_rag-0.1.0/src/bijux_rag/policies/breakers.py +282 -0
- bijux_rag-0.1.0/src/bijux_rag/policies/memo.py +152 -0
- bijux_rag-0.1.0/src/bijux_rag/policies/reports.py +165 -0
- bijux_rag-0.1.0/src/bijux_rag/policies/resources.py +128 -0
- bijux_rag-0.1.0/src/bijux_rag/policies/retries.py +172 -0
- bijux_rag-0.1.0/src/bijux_rag/py.typed +0 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/__init__.py +81 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/app.py +471 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/chunking.py +74 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/clean_cfg.py +75 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/config.py +127 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/core.py +258 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/domain/__init__.py +44 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/domain/chunk.py +82 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/domain/embedding.py +25 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/domain/metadata.py +19 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/domain/perf.py +126 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/domain/text.py +16 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/embedders.py +108 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/generators.py +66 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/indexes.py +608 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/ports.py +143 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/rag_api.py +217 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/rerankers.py +49 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/stages.py +227 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/stdlib_fp.py +49 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/streaming_rag.py +122 -0
- bijux_rag-0.1.0/src/bijux_rag/rag/types.py +72 -0
- bijux_rag-0.1.0/src/bijux_rag/result/__init__.py +119 -0
- bijux_rag-0.1.0/src/bijux_rag/result/folds.py +139 -0
- bijux_rag-0.1.0/src/bijux_rag/result/stream.py +174 -0
- bijux_rag-0.1.0/src/bijux_rag/result/types.py +356 -0
- bijux_rag-0.1.0/src/bijux_rag/streaming/__init__.py +62 -0
- bijux_rag-0.1.0/src/bijux_rag/streaming/compose.py +66 -0
- bijux_rag-0.1.0/src/bijux_rag/streaming/contiguity.py +34 -0
- bijux_rag-0.1.0/src/bijux_rag/streaming/fanin.py +68 -0
- bijux_rag-0.1.0/src/bijux_rag/streaming/fanout.py +112 -0
- bijux_rag-0.1.0/src/bijux_rag/streaming/observability.py +83 -0
- bijux_rag-0.1.0/src/bijux_rag/streaming/sampling.py +69 -0
- bijux_rag-0.1.0/src/bijux_rag/streaming/time.py +128 -0
- bijux_rag-0.1.0/src/bijux_rag/streaming/types.py +47 -0
- bijux_rag-0.1.0/src/bijux_rag/tree/__init__.py +53 -0
- bijux_rag-0.1.0/src/bijux_rag/tree/_traversal.py +145 -0
- bijux_rag-0.1.0/src/bijux_rag/tree/folds.py +149 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# OS
|
|
2
|
+
.DS_Store
|
|
3
|
+
.DS_Store?
|
|
4
|
+
._*
|
|
5
|
+
.Spotlight-V100
|
|
6
|
+
.Trashes
|
|
7
|
+
ehthumbs.db
|
|
8
|
+
Thumbs.db
|
|
9
|
+
desktop.ini
|
|
10
|
+
Icon?
|
|
11
|
+
$RECYCLE.BIN/
|
|
12
|
+
*.swp
|
|
13
|
+
*.swo
|
|
14
|
+
|
|
15
|
+
# Python
|
|
16
|
+
__pycache__/
|
|
17
|
+
*.py[cod]
|
|
18
|
+
*.pyo
|
|
19
|
+
*.pyd
|
|
20
|
+
*.so
|
|
21
|
+
build/
|
|
22
|
+
dist/
|
|
23
|
+
*.egg-info/
|
|
24
|
+
.eggs/
|
|
25
|
+
*.egg
|
|
26
|
+
*.whl
|
|
27
|
+
*.spec
|
|
28
|
+
|
|
29
|
+
# Environments
|
|
30
|
+
.venv/
|
|
31
|
+
.venv*/
|
|
32
|
+
.env
|
|
33
|
+
.envrc
|
|
34
|
+
.env.*
|
|
35
|
+
.conda/
|
|
36
|
+
.condarc
|
|
37
|
+
*.conda
|
|
38
|
+
.direnv/
|
|
39
|
+
.pdm.toml
|
|
40
|
+
|
|
41
|
+
# Test/coverage
|
|
42
|
+
.coverage
|
|
43
|
+
.coverage.*
|
|
44
|
+
.coverage/
|
|
45
|
+
htmlcov/
|
|
46
|
+
.tox/
|
|
47
|
+
.nox/
|
|
48
|
+
.pytest_cache/
|
|
49
|
+
.mypy_cache/
|
|
50
|
+
.ruff_cache/
|
|
51
|
+
.pytype/
|
|
52
|
+
.hypothesis/
|
|
53
|
+
.mutmut-cache/
|
|
54
|
+
.cache/
|
|
55
|
+
.benchmarks/
|
|
56
|
+
artifacts/
|
|
57
|
+
|
|
58
|
+
# IDEs/editors
|
|
59
|
+
.idea/
|
|
60
|
+
.vscode/
|
|
61
|
+
.vscode-test/
|
|
62
|
+
*.code-workspace
|
|
63
|
+
*.sublime-project
|
|
64
|
+
*.sublime-workspace
|
|
65
|
+
|
|
66
|
+
# Docs/Node
|
|
67
|
+
docs/_build/
|
|
68
|
+
site/
|
|
69
|
+
_build/
|
|
70
|
+
node_modules/
|
|
71
|
+
|
|
72
|
+
# Data outputs
|
|
73
|
+
data/
|
|
74
|
+
*.csv.gz
|
|
75
|
+
*.tsv.gz
|
|
76
|
+
results/
|
|
77
|
+
output/
|
|
78
|
+
out/
|
|
79
|
+
|
|
80
|
+
# Misc
|
|
81
|
+
*.log
|
|
82
|
+
*.out
|
|
83
|
+
*.err
|
|
84
|
+
*.pid
|
|
85
|
+
*.tmp
|
|
86
|
+
*.temp
|
|
87
|
+
*.bak
|
|
88
|
+
*.orig
|
bijux_rag-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Bijan Mousavi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
|
6
|
+
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
|
|
9
|
+
following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial
|
|
12
|
+
portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
|
15
|
+
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
|
|
16
|
+
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
17
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
18
|
+
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
bijux_rag-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: bijux-rag
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Standalone Bijux RAG toolkit
|
|
5
|
+
Project-URL: Homepage, https://github.com/bijux/bijux-rag
|
|
6
|
+
Project-URL: Repository, https://github.com/bijux/bijux-rag.git
|
|
7
|
+
Project-URL: BugTracker, https://github.com/bijux/bijux-rag/issues
|
|
8
|
+
Author-email: Bijan Mousavi <mousavi.bijan@gmail.com>
|
|
9
|
+
License: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
17
|
+
Classifier: Typing :: Typed
|
|
18
|
+
Requires-Python: <4.0,>=3.11
|
|
19
|
+
Requires-Dist: fastapi<1.0,>=0.115
|
|
20
|
+
Requires-Dist: msgpack<2,>=1.0
|
|
21
|
+
Requires-Dist: numpy<3,>=1.26
|
|
22
|
+
Requires-Dist: pydantic<3,>=2.7
|
|
23
|
+
Requires-Dist: pyyaml<7,>=6
|
|
24
|
+
Requires-Dist: typing-extensions<5,>=4.9
|
|
25
|
+
Requires-Dist: uvicorn<1.0,>=0.32
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: bandit<2.0,>=1.7.10; extra == 'dev'
|
|
28
|
+
Requires-Dist: build<2.0,>=1.2; extra == 'dev'
|
|
29
|
+
Requires-Dist: deptry<1.0,>=0.10.0; extra == 'dev'
|
|
30
|
+
Requires-Dist: hypothesis<7.0,>=6.91; extra == 'dev'
|
|
31
|
+
Requires-Dist: interrogate<2.0,>=1.7.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: mkdocs-click<1,>=0.8; extra == 'dev'
|
|
33
|
+
Requires-Dist: mkdocs-gen-files<1,>=0.5; extra == 'dev'
|
|
34
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin<2,>=1.2; extra == 'dev'
|
|
35
|
+
Requires-Dist: mkdocs-glightbox>=0.4.0; extra == 'dev'
|
|
36
|
+
Requires-Dist: mkdocs-include-markdown-plugin; extra == 'dev'
|
|
37
|
+
Requires-Dist: mkdocs-literate-nav<1,>=0.6; extra == 'dev'
|
|
38
|
+
Requires-Dist: mkdocs-material<10,>=9.5; extra == 'dev'
|
|
39
|
+
Requires-Dist: mkdocs-minify-plugin<1,>=0.8; extra == 'dev'
|
|
40
|
+
Requires-Dist: mkdocs-redirects<2,>=1.2; extra == 'dev'
|
|
41
|
+
Requires-Dist: mkdocs-section-index<1,>=0.3; extra == 'dev'
|
|
42
|
+
Requires-Dist: mkdocs<2,>=1.6; extra == 'dev'
|
|
43
|
+
Requires-Dist: mkdocstrings[python]<1,>=0.29; extra == 'dev'
|
|
44
|
+
Requires-Dist: mypy<2.0,>=1.11; extra == 'dev'
|
|
45
|
+
Requires-Dist: openapi-spec-validator<1.0,>=0.7.1; extra == 'dev'
|
|
46
|
+
Requires-Dist: pip-audit<3.0,>=2.7.3; extra == 'dev'
|
|
47
|
+
Requires-Dist: prance>=25.4.0.0; extra == 'dev'
|
|
48
|
+
Requires-Dist: pymdown-extensions<11,>=10.8; extra == 'dev'
|
|
49
|
+
Requires-Dist: pyright<2.0,>=1.1.380; extra == 'dev'
|
|
50
|
+
Requires-Dist: pyright[nodejs]<2.0,>=1.1.380; extra == 'dev'
|
|
51
|
+
Requires-Dist: pytest-asyncio<1.0,>=0.23; extra == 'dev'
|
|
52
|
+
Requires-Dist: pytest-cov<7.0,>=6.0; extra == 'dev'
|
|
53
|
+
Requires-Dist: pytest-timeout<3.0,>=2.3; extra == 'dev'
|
|
54
|
+
Requires-Dist: pytest<9,>=8.3; extra == 'dev'
|
|
55
|
+
Requires-Dist: pytype>=2024.4.11; extra == 'dev'
|
|
56
|
+
Requires-Dist: reuse<6.0.0,>=4.0.0; extra == 'dev'
|
|
57
|
+
Requires-Dist: ruff<1.0,>=0.6.9; extra == 'dev'
|
|
58
|
+
Requires-Dist: schemathesis<4.0,>=3.29; extra == 'dev'
|
|
59
|
+
Requires-Dist: twine<7.0,>=6.1.0; extra == 'dev'
|
|
60
|
+
Requires-Dist: types-pyyaml<7.0,>=6.0.12; extra == 'dev'
|
|
61
|
+
Requires-Dist: typing-extensions<5,>=4.9; extra == 'dev'
|
|
62
|
+
Requires-Dist: vulture<3.0,>=2.7; extra == 'dev'
|
|
63
|
+
Provides-Extra: docs
|
|
64
|
+
Requires-Dist: mkdocs-click<1,>=0.8; extra == 'docs'
|
|
65
|
+
Requires-Dist: mkdocs-gen-files<1,>=0.5; extra == 'docs'
|
|
66
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin<2,>=1.2; extra == 'docs'
|
|
67
|
+
Requires-Dist: mkdocs-glightbox>=0.4.0; extra == 'docs'
|
|
68
|
+
Requires-Dist: mkdocs-literate-nav<1,>=0.6; extra == 'docs'
|
|
69
|
+
Requires-Dist: mkdocs-material<10,>=9.5; extra == 'docs'
|
|
70
|
+
Requires-Dist: mkdocs-minify-plugin<1,>=0.8; extra == 'docs'
|
|
71
|
+
Requires-Dist: mkdocs-redirects<2,>=1.2; extra == 'docs'
|
|
72
|
+
Requires-Dist: mkdocs-section-index<1,>=0.3; extra == 'docs'
|
|
73
|
+
Requires-Dist: mkdocs<2,>=1.6; extra == 'docs'
|
|
74
|
+
Requires-Dist: mkdocstrings[python]<1,>=0.29; extra == 'docs'
|
|
75
|
+
Requires-Dist: pymdown-extensions<11,>=10.8; extra == 'docs'
|
|
76
|
+
Description-Content-Type: text/markdown
|
|
77
|
+
|
|
78
|
+
# bijux-rag
|
|
79
|
+
|
|
80
|
+
> At a glance: **index → retrieve → ask** • offline CI profile • reproducible chunk IDs + index fingerprints • CLI + FastAPI boundaries • OpenAPI drift-gated
|
|
81
|
+
> Quality: **make/tox gates green** (tests, lint, types, docs strict, security, SBOM, REUSE, hygiene). Everything writes to `artifacts/`. No telemetry.
|
|
82
|
+
|
|
83
|
+
[](https://pypi.org/project/bijux-rag)
|
|
84
|
+
[](https://pypi.org/project/bijux-rag)
|
|
85
|
+
[](https://github.com/bijux/bijux-rag/actions?query=workflow%3ACI)
|
|
86
|
+
[](https://github.com/bijux/bijux-rag/blob/main/LICENSE)
|
|
87
|
+
[](https://api.reuse.software/info/github.com/bijux/bijux-rag)
|
|
88
|
+
[](https://github.com/charliermarsh/ruff)
|
|
89
|
+
[](https://bijux.github.io/bijux-rag/)
|
|
90
|
+
|
|
91
|
+
**Docs:** https://bijux.github.io/bijux-rag/
|
|
92
|
+
**PyPI:** https://pypi.org/project/bijux-rag/
|
|
93
|
+
**Issues:** https://github.com/bijux/bijux-rag/issues
|
|
94
|
+
**Changelog:** https://bijux.github.io/bijux-rag/changelog/
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
**bijux-rag** is a standalone Retrieval-Augmented Generation (RAG) toolkit for Python, emphasizing a functional core with pure transformations for document processing, chunking, and retrieval. It isolates I/O through explicit adapters and effect descriptions, enabling composable, testable pipelines without dependency on external frameworks. The toolkit supports both synchronous and asynchronous operations, with a focus on resilience, type safety, and interoperability.
|
|
98
|
+
|
|
99
|
+
All quality gates—enforced via Tox and Make—remain green: comprehensive tests (unit, integration, end-to-end), static analysis (linting, typing with MyPy/Pyright/Pytype), security audits (Bandit, Pip-Audit), and builds. Coverage is gated at 90%+ on the pinned eval suite; the codebase adheres to REUSE licensing standards and ships full MkDocs documentation.
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
## At a Glance
|
|
103
|
+
|
|
104
|
+
- **Core Philosophy**: Functional programming principles for RAG—pure functions, immutable data structures (e.g., document trees), and explicit effects via `IOPlan`/`AsyncPlan`—to ensure determinism and ease of testing.
|
|
105
|
+
- **Key Components**: Primitives for chunking (fixed-size, recursive), embedding pipelines, result folding (fail-fast, error collection), and streaming (bounded concurrency, rate limiting).
|
|
106
|
+
- **Resilience Features**: Policy-driven retries (with exponential backoff and jitter), timeouts, transactions, and fakes for testing (clocks, sleepers).
|
|
107
|
+
- **Interfaces**: CLI for batch processing, HTTP API via FastAPI for serving, and Python API for custom pipelines.
|
|
108
|
+
- **Dependencies**: Minimal runtime (Pydantic, NumPy, FastAPI, Uvicorn); dev extras for testing (Pytest, Hypothesis) and docs (MkDocs).
|
|
109
|
+
- **Version & Compatibility**: v0.1.0; Python 3.11–3.13; MIT-licensed.
|
|
110
|
+
- **Quality Metrics**: 100% coverage; strict typing; security-scanned; REUSE-compliant.
|
|
111
|
+
|
|
112
|
+
[↑ Back to Top](#bijux-rag)
|
|
113
|
+
|
|
114
|
+
## Table of Contents
|
|
115
|
+
|
|
116
|
+
- [Features](#features)
|
|
117
|
+
- [Installation](#installation)
|
|
118
|
+
- [Quick Start](#quick-start)
|
|
119
|
+
- [Usage](#usage)
|
|
120
|
+
- [Architecture](#architecture)
|
|
121
|
+
- [Testing and Quality](#testing-and-quality)
|
|
122
|
+
- [Contributing](#contributing)
|
|
123
|
+
- [License](#license)
|
|
124
|
+
- [Acknowledgments](#acknowledgments)
|
|
125
|
+
|
|
126
|
+
[↑ Back to Top](#bijux-rag)
|
|
127
|
+
|
|
128
|
+
## Features
|
|
129
|
+
|
|
130
|
+
bijux-rag prioritizes modularity and purity, allowing users to build RAG systems from composable building blocks while maintaining control over effects and dependencies.
|
|
131
|
+
|
|
132
|
+
- **Functional Primitives**: Pure functions for document tree manipulation (flattening, folding), result handling (`Result[T, ErrInfo]` monad with folds like fail-fast or error-capped), and iterator-based pipelines.
|
|
133
|
+
- **Effect Management**: Deferred I/O via `IOPlan` (sync) and `AsyncPlan` (async), supporting retries, transactions, backpressure, and rate limiting as configurable policies.
|
|
134
|
+
- **Resilience and Testing**: Built-in policies for transient error handling; test utilities like fake clocks and sleepers ensure reliable unit testing without mocks.
|
|
135
|
+
- **Adapters and Interop**: Storage options (file, in-memory); compatibility with NumPy for vectors, Pydantic for validation, and standard libraries (e.g., `itertools`, `functools`).
|
|
136
|
+
- **Streaming Capabilities**: Lazy async streams with bounded mapping, fair merging, and chunking policies for high-throughput scenarios.
|
|
137
|
+
- **Tooling Integration**: Comprehensive setup with Ruff for style, multiple type checkers, Hypothesis for property-based tests, and MkDocs for documentation.
|
|
138
|
+
|
|
139
|
+
[↑ Back to Top](#bijux-rag)
|
|
140
|
+
|
|
141
|
+
## Installation
|
|
142
|
+
|
|
143
|
+
Requires Python 3.11 or later.
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
pip install bijux-rag
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
For development (includes testing, documentation, and linting tools):
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
pip install bijux-rag[dev]
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
From source:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
git clone https://github.com/bijux/bijux-rag.git
|
|
159
|
+
cd bijux-rag
|
|
160
|
+
make bootstrap # Sets up virtualenv and installs in editable mode
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Dependencies are minimal and security-audited; refer to `pyproject.toml` for details.
|
|
164
|
+
|
|
165
|
+
[↑ Back to Top](#bijux-rag)
|
|
166
|
+
|
|
167
|
+
## Quick Start
|
|
168
|
+
|
|
169
|
+
Process documents via CLI:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
bijux-rag process --input docs.csv --output embeddings.msgpack
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
This command reads CSV documents, applies functional chunking, performs embedding (via configured adapter), and outputs MessagePack results.
|
|
176
|
+
|
|
177
|
+
Programmatic equivalent:
|
|
178
|
+
|
|
179
|
+
```python
|
|
180
|
+
from bijux_rag.core.rag_types import RawDoc
|
|
181
|
+
from bijux_rag.pipelines.embedding import embed_docs
|
|
182
|
+
from bijux_rag.infra.adapters.memory_storage import InMemoryStorage
|
|
183
|
+
|
|
184
|
+
docs = [RawDoc(doc_id="1", title="Example", abstract="Sample text.")]
|
|
185
|
+
storage = InMemoryStorage()
|
|
186
|
+
results = list(embed_docs(docs, storage)) # Composable iterator pipeline
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
[↑ Back to Top](#bijux-rag)
|
|
190
|
+
|
|
191
|
+
## Usage
|
|
192
|
+
|
|
193
|
+
bijux-rag offers multiple entry points: CLI for scripting, HTTP API for services, and Python API for integration.
|
|
194
|
+
|
|
195
|
+
### CLI
|
|
196
|
+
Access help:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
bijux-rag --help
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Example with custom parameters:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
bijux-rag process --input input.csv --chunk-size 512 --embedder default
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Note: Embedder options depend on configured adapters; defaults to basic implementations.
|
|
209
|
+
|
|
210
|
+
### HTTP API
|
|
211
|
+
Launch the server:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
bijux-rag serve --port 8000
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Interact via endpoints like `/embed` (POST documents for processing) or `/retrieve` (query-based retrieval). Explore via OpenAPI at `/docs`.
|
|
218
|
+
|
|
219
|
+
### Python API
|
|
220
|
+
Focuses on composability:
|
|
221
|
+
|
|
222
|
+
- **Documents**: Use `RawDoc` and `Chunk` types; build trees with `make_chunk`.
|
|
223
|
+
- **Pipelines**: Chain functions, e.g., `read_docs | fixed_size_chunk | embed_docs`.
|
|
224
|
+
- **Effects**: Wrap I/O in `IOPlan` for sync or `AsyncPlan` for async; apply policies like `retry_idempotent`.
|
|
225
|
+
- **Streaming**: Leverage `AsyncGen` for lazy processing, e.g., `async_gen_bounded_map` for concurrency control.
|
|
226
|
+
|
|
227
|
+
Synchronous retry example:
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
from bijux_rag.domain.effects import retry_idempotent, RetryPolicy
|
|
231
|
+
from bijux_rag.policies.chunking import fixed_size_chunk
|
|
232
|
+
from bijux_rag.result import fold_results_fail_fast
|
|
233
|
+
|
|
234
|
+
policy = RetryPolicy(max_attempts=3)
|
|
235
|
+
safe_read = retry_idempotent(policy)(storage.read_docs("input.csv"))
|
|
236
|
+
docs_results = list(safe_read("input.csv"))
|
|
237
|
+
chunks = list(fold_results_fail_fast(docs_results, [], fixed_size_chunk))
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Asynchronous streaming example:
|
|
241
|
+
|
|
242
|
+
```python
|
|
243
|
+
from bijux_rag.domain.effects.async_ import async_gen_map, resilient_mapper
|
|
244
|
+
|
|
245
|
+
mapper = resilient_mapper(embed_fn, RetryPolicy(max_attempts=3))
|
|
246
|
+
stream = async_gen_map(source_stream, mapper)
|
|
247
|
+
async for result in stream():
|
|
248
|
+
# Handle result
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Consult the API reference in documentation for complete details.
|
|
252
|
+
|
|
253
|
+
[↑ Back to Top](#bijux-rag)
|
|
254
|
+
|
|
255
|
+
## Architecture
|
|
256
|
+
|
|
257
|
+
Adopts a hexagonal (ports and adapters) design with a functional core:
|
|
258
|
+
|
|
259
|
+
- **Boundaries**: CLI and HTTP shells interpret inputs and delegate to domain logic.
|
|
260
|
+
- **Core**: Pure, deterministic functions for RAG operations (e.g., tree folding, result monads).
|
|
261
|
+
- **Domain**: Effect descriptions (`IOPlan`, `AsyncPlan`), policies (chunking, retry), and types.
|
|
262
|
+
- **Infra**: Pluggable adapters for storage (file, memory) and other I/O.
|
|
263
|
+
- **Interop/Policies**: Helpers for stdlib FP and reusable behaviors.
|
|
264
|
+
|
|
265
|
+
This structure facilitates adapter swaps (e.g., local to cloud storage) without altering core code. Review [Architecture Documentation](https://bijux.github.io/bijux-rag/architecture/) for decision records (ADRs) and overviews.
|
|
266
|
+
|
|
267
|
+
[↑ Back to Top](#bijux-rag)
|
|
268
|
+
|
|
269
|
+
## Testing and Quality
|
|
270
|
+
|
|
271
|
+
Execute tests:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
make test
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Other targets:
|
|
278
|
+
|
|
279
|
+
- `make lint`: Enforces style (Ruff) and types (MyPy, Pyright, Pytype).
|
|
280
|
+
- `make security`: Runs Bandit and dependency audits.
|
|
281
|
+
- `make docs`: Builds and serves MkDocs.
|
|
282
|
+
- `make all`: Comprehensive run (clean, install, test, lint, build).
|
|
283
|
+
|
|
284
|
+
CI ensures all gates pass on every commit.
|
|
285
|
+
|
|
286
|
+
[↑ Back to Top](#bijux-rag)
|
|
287
|
+
|
|
288
|
+
## Contributing
|
|
289
|
+
|
|
290
|
+
Report issues or suggest features via GitHub Issues. Pull requests must maintain green gates. Setup instructions:
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
make bootstrap
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Follow guidelines in CONTRIBUTING.md.
|
|
297
|
+
|
|
298
|
+
[↑ Back to Top](#bijux-rag)
|
|
299
|
+
|
|
300
|
+
## License
|
|
301
|
+
|
|
302
|
+
MIT License—see [LICENSE](LICENSE). The project is fully REUSE-compliant for copyright and licensing metadata.
|
|
303
|
+
|
|
304
|
+
[↑ Back to Top](#bijux-rag)
|
|
305
|
+
|
|
306
|
+
## Acknowledgments
|
|
307
|
+
|
|
308
|
+
Draws inspiration from functional programming paradigms (e.g., monads, immutability) and RAG literature. Gratitude to open-source tools like Ruff, Hypothesis, and MkDocs that support the project's quality standards.
|
|
309
|
+
|
|
310
|
+
[↑ Back to Top](#bijux-rag)
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# bijux-rag
|
|
2
|
+
|
|
3
|
+
> At a glance: **index → retrieve → ask** • offline CI profile • reproducible chunk IDs + index fingerprints • CLI + FastAPI boundaries • OpenAPI drift-gated
|
|
4
|
+
> Quality: **make/tox gates green** (tests, lint, types, docs strict, security, SBOM, REUSE, hygiene). Everything writes to `artifacts/`. No telemetry.
|
|
5
|
+
|
|
6
|
+
[](https://pypi.org/project/bijux-rag)
|
|
7
|
+
[](https://pypi.org/project/bijux-rag)
|
|
8
|
+
[](https://github.com/bijux/bijux-rag/actions?query=workflow%3ACI)
|
|
9
|
+
[](https://github.com/bijux/bijux-rag/blob/main/LICENSE)
|
|
10
|
+
[](https://api.reuse.software/info/github.com/bijux/bijux-rag)
|
|
11
|
+
[](https://github.com/charliermarsh/ruff)
|
|
12
|
+
[](https://bijux.github.io/bijux-rag/)
|
|
13
|
+
|
|
14
|
+
**Docs:** https://bijux.github.io/bijux-rag/
|
|
15
|
+
**PyPI:** https://pypi.org/project/bijux-rag/
|
|
16
|
+
**Issues:** https://github.com/bijux/bijux-rag/issues
|
|
17
|
+
**Changelog:** https://bijux.github.io/bijux-rag/changelog/
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
**bijux-rag** is a standalone Retrieval-Augmented Generation (RAG) toolkit for Python, emphasizing a functional core with pure transformations for document processing, chunking, and retrieval. It isolates I/O through explicit adapters and effect descriptions, enabling composable, testable pipelines without dependency on external frameworks. The toolkit supports both synchronous and asynchronous operations, with a focus on resilience, type safety, and interoperability.
|
|
21
|
+
|
|
22
|
+
All quality gates—enforced via Tox and Make—remain green: comprehensive tests (unit, integration, end-to-end), static analysis (linting, typing with MyPy/Pyright/Pytype), security audits (Bandit, Pip-Audit), and builds. Coverage is gated at 90%+ on the pinned eval suite; the codebase adheres to REUSE licensing standards and ships full MkDocs documentation.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## At a Glance
|
|
26
|
+
|
|
27
|
+
- **Core Philosophy**: Functional programming principles for RAG—pure functions, immutable data structures (e.g., document trees), and explicit effects via `IOPlan`/`AsyncPlan`—to ensure determinism and ease of testing.
|
|
28
|
+
- **Key Components**: Primitives for chunking (fixed-size, recursive), embedding pipelines, result folding (fail-fast, error collection), and streaming (bounded concurrency, rate limiting).
|
|
29
|
+
- **Resilience Features**: Policy-driven retries (with exponential backoff and jitter), timeouts, transactions, and fakes for testing (clocks, sleepers).
|
|
30
|
+
- **Interfaces**: CLI for batch processing, HTTP API via FastAPI for serving, and Python API for custom pipelines.
|
|
31
|
+
- **Dependencies**: Minimal runtime (Pydantic, NumPy, FastAPI, Uvicorn); dev extras for testing (Pytest, Hypothesis) and docs (MkDocs).
|
|
32
|
+
- **Version & Compatibility**: v0.1.0; Python 3.11–3.13; MIT-licensed.
|
|
33
|
+
- **Quality Metrics**: 100% coverage; strict typing; security-scanned; REUSE-compliant.
|
|
34
|
+
|
|
35
|
+
[↑ Back to Top](#bijux-rag)
|
|
36
|
+
|
|
37
|
+
## Table of Contents
|
|
38
|
+
|
|
39
|
+
- [Features](#features)
|
|
40
|
+
- [Installation](#installation)
|
|
41
|
+
- [Quick Start](#quick-start)
|
|
42
|
+
- [Usage](#usage)
|
|
43
|
+
- [Architecture](#architecture)
|
|
44
|
+
- [Testing and Quality](#testing-and-quality)
|
|
45
|
+
- [Contributing](#contributing)
|
|
46
|
+
- [License](#license)
|
|
47
|
+
- [Acknowledgments](#acknowledgments)
|
|
48
|
+
|
|
49
|
+
[↑ Back to Top](#bijux-rag)
|
|
50
|
+
|
|
51
|
+
## Features
|
|
52
|
+
|
|
53
|
+
bijux-rag prioritizes modularity and purity, allowing users to build RAG systems from composable building blocks while maintaining control over effects and dependencies.
|
|
54
|
+
|
|
55
|
+
- **Functional Primitives**: Pure functions for document tree manipulation (flattening, folding), result handling (`Result[T, ErrInfo]` monad with folds like fail-fast or error-capped), and iterator-based pipelines.
|
|
56
|
+
- **Effect Management**: Deferred I/O via `IOPlan` (sync) and `AsyncPlan` (async), supporting retries, transactions, backpressure, and rate limiting as configurable policies.
|
|
57
|
+
- **Resilience and Testing**: Built-in policies for transient error handling; test utilities like fake clocks and sleepers ensure reliable unit testing without mocks.
|
|
58
|
+
- **Adapters and Interop**: Storage options (file, in-memory); compatibility with NumPy for vectors, Pydantic for validation, and standard libraries (e.g., `itertools`, `functools`).
|
|
59
|
+
- **Streaming Capabilities**: Lazy async streams with bounded mapping, fair merging, and chunking policies for high-throughput scenarios.
|
|
60
|
+
- **Tooling Integration**: Comprehensive setup with Ruff for style, multiple type checkers, Hypothesis for property-based tests, and MkDocs for documentation.
|
|
61
|
+
|
|
62
|
+
[↑ Back to Top](#bijux-rag)
|
|
63
|
+
|
|
64
|
+
## Installation
|
|
65
|
+
|
|
66
|
+
Requires Python 3.11 or later.
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pip install bijux-rag
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
For development (includes testing, documentation, and linting tools):
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pip install bijux-rag[dev]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
From source:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
git clone https://github.com/bijux/bijux-rag.git
|
|
82
|
+
cd bijux-rag
|
|
83
|
+
make bootstrap # Sets up virtualenv and installs in editable mode
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Dependencies are minimal and security-audited; refer to `pyproject.toml` for details.
|
|
87
|
+
|
|
88
|
+
[↑ Back to Top](#bijux-rag)
|
|
89
|
+
|
|
90
|
+
## Quick Start
|
|
91
|
+
|
|
92
|
+
Process documents via CLI:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
bijux-rag process --input docs.csv --output embeddings.msgpack
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
This command reads CSV documents, applies functional chunking, performs embedding (via configured adapter), and outputs MessagePack results.
|
|
99
|
+
|
|
100
|
+
Programmatic equivalent:
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
from bijux_rag.core.rag_types import RawDoc
|
|
104
|
+
from bijux_rag.pipelines.embedding import embed_docs
|
|
105
|
+
from bijux_rag.infra.adapters.memory_storage import InMemoryStorage
|
|
106
|
+
|
|
107
|
+
docs = [RawDoc(doc_id="1", title="Example", abstract="Sample text.")]
|
|
108
|
+
storage = InMemoryStorage()
|
|
109
|
+
results = list(embed_docs(docs, storage)) # Composable iterator pipeline
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
[↑ Back to Top](#bijux-rag)
|
|
113
|
+
|
|
114
|
+
## Usage
|
|
115
|
+
|
|
116
|
+
bijux-rag offers multiple entry points: CLI for scripting, HTTP API for services, and Python API for integration.
|
|
117
|
+
|
|
118
|
+
### CLI
|
|
119
|
+
Access help:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
bijux-rag --help
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Example with custom parameters:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
bijux-rag process --input input.csv --chunk-size 512 --embedder default
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Note: Embedder options depend on configured adapters; defaults to basic implementations.
|
|
132
|
+
|
|
133
|
+
### HTTP API
|
|
134
|
+
Launch the server:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
bijux-rag serve --port 8000
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Interact via endpoints like `/embed` (POST documents for processing) or `/retrieve` (query-based retrieval). Explore via OpenAPI at `/docs`.
|
|
141
|
+
|
|
142
|
+
### Python API
|
|
143
|
+
Focuses on composability:
|
|
144
|
+
|
|
145
|
+
- **Documents**: Use `RawDoc` and `Chunk` types; build trees with `make_chunk`.
|
|
146
|
+
- **Pipelines**: Chain functions, e.g., `read_docs | fixed_size_chunk | embed_docs`.
|
|
147
|
+
- **Effects**: Wrap I/O in `IOPlan` for sync or `AsyncPlan` for async; apply policies like `retry_idempotent`.
|
|
148
|
+
- **Streaming**: Leverage `AsyncGen` for lazy processing, e.g., `async_gen_bounded_map` for concurrency control.
|
|
149
|
+
|
|
150
|
+
Synchronous retry example:
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
from bijux_rag.domain.effects import retry_idempotent, RetryPolicy
|
|
154
|
+
from bijux_rag.policies.chunking import fixed_size_chunk
|
|
155
|
+
from bijux_rag.result import fold_results_fail_fast
|
|
156
|
+
|
|
157
|
+
policy = RetryPolicy(max_attempts=3)
|
|
158
|
+
safe_read = retry_idempotent(policy)(storage.read_docs("input.csv"))
|
|
159
|
+
docs_results = list(safe_read("input.csv"))
|
|
160
|
+
chunks = list(fold_results_fail_fast(docs_results, [], fixed_size_chunk))
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Asynchronous streaming example:
|
|
164
|
+
|
|
165
|
+
```python
|
|
166
|
+
from bijux_rag.domain.effects.async_ import async_gen_map, resilient_mapper
|
|
167
|
+
|
|
168
|
+
mapper = resilient_mapper(embed_fn, RetryPolicy(max_attempts=3))
|
|
169
|
+
stream = async_gen_map(source_stream, mapper)
|
|
170
|
+
async for result in stream():
|
|
171
|
+
# Handle result
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Consult the API reference in documentation for complete details.
|
|
175
|
+
|
|
176
|
+
[↑ Back to Top](#bijux-rag)
|
|
177
|
+
|
|
178
|
+
## Architecture
|
|
179
|
+
|
|
180
|
+
Adopts a hexagonal (ports and adapters) design with a functional core:
|
|
181
|
+
|
|
182
|
+
- **Boundaries**: CLI and HTTP shells interpret inputs and delegate to domain logic.
|
|
183
|
+
- **Core**: Pure, deterministic functions for RAG operations (e.g., tree folding, result monads).
|
|
184
|
+
- **Domain**: Effect descriptions (`IOPlan`, `AsyncPlan`), policies (chunking, retry), and types.
|
|
185
|
+
- **Infra**: Pluggable adapters for storage (file, memory) and other I/O.
|
|
186
|
+
- **Interop/Policies**: Helpers for stdlib FP and reusable behaviors.
|
|
187
|
+
|
|
188
|
+
This structure facilitates adapter swaps (e.g., local to cloud storage) without altering core code. Review [Architecture Documentation](https://bijux.github.io/bijux-rag/architecture/) for decision records (ADRs) and overviews.
|
|
189
|
+
|
|
190
|
+
[↑ Back to Top](#bijux-rag)
|
|
191
|
+
|
|
192
|
+
## Testing and Quality
|
|
193
|
+
|
|
194
|
+
Execute tests:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
make test
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Other targets:
|
|
201
|
+
|
|
202
|
+
- `make lint`: Enforces style (Ruff) and types (MyPy, Pyright, Pytype).
|
|
203
|
+
- `make security`: Runs Bandit and dependency audits.
|
|
204
|
+
- `make docs`: Builds and serves MkDocs.
|
|
205
|
+
- `make all`: Comprehensive run (clean, install, test, lint, build).
|
|
206
|
+
|
|
207
|
+
CI ensures all gates pass on every commit.
|
|
208
|
+
|
|
209
|
+
[↑ Back to Top](#bijux-rag)
|
|
210
|
+
|
|
211
|
+
## Contributing
|
|
212
|
+
|
|
213
|
+
Report issues or suggest features via GitHub Issues. Pull requests must maintain green gates. Setup instructions:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
make bootstrap
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Follow guidelines in CONTRIBUTING.md.
|
|
220
|
+
|
|
221
|
+
[↑ Back to Top](#bijux-rag)
|
|
222
|
+
|
|
223
|
+
## License
|
|
224
|
+
|
|
225
|
+
MIT License—see [LICENSE](LICENSE). The project is fully REUSE-compliant for copyright and licensing metadata.
|
|
226
|
+
|
|
227
|
+
[↑ Back to Top](#bijux-rag)
|
|
228
|
+
|
|
229
|
+
## Acknowledgments
|
|
230
|
+
|
|
231
|
+
Draws inspiration from functional programming paradigms (e.g., monads, immutability) and RAG literature. Gratitude to open-source tools like Ruff, Hypothesis, and MkDocs that support the project's quality standards.
|
|
232
|
+
|
|
233
|
+
[↑ Back to Top](#bijux-rag)
|