diff --git a/README.md b/README.md index 8a90199..7ed8ff4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Gamayun -![alt text](Gemini_Generated_Image_wv24iuwv24iuwv24.png) +![alt text](resources/title_image.png) ## Concept @@ -31,11 +31,73 @@ Client-Server Separation: Compute-intensive operations (embedding generation, LL - Deployment in air-gapped labs - Efficient resource utilization (centralized compute nodes can serve multiple investigators) +## Development Setup + +## 🛠 Development Setup + +This project uses [uv](https://github.com/astral-sh/uv) for fast dependency management and the modern "Src Layout" structure. + +### Prerequisites + +- Python 3.13+ +- [uv](https://github.com/astral-sh/uv) installed (`curl -LsSf https://astral.sh/uv/install.sh | sh`) + +### Installation Steps + +1. **Clone the repository** + + ```bash + git clone + cd gamayun + ``` + +2. **Create a virtual environment** + This project requires Python 3.13. + + ```bash + uv venv --python 3.13 + ``` + +3. **Activate the environment** + + - Linux/macOS: + + ```bash + source .venv/bin/activate + ``` + + - Windows: + + ```powershell + .venv\Scripts\activate + ``` + +4. **Install dependencies** + This command installs locked dependencies and links the local `gamayun` package in editable mode. + + ```bash + uv pip install -r requirements.txt -e . + ``` + +### Running the Application + +You can execute the module directly: + +```bash +python src/gamayun/main.py +``` + +### Running Tests + +```bash +pytest +``` + ## Data Flow ### Ingestion Pipeline -``` +```bash Raw Evidence Sources ├─ Forensic Images (E01, DD, AFF4) ├─ Timeline CSV (Timesketch format) @@ -94,7 +156,7 @@ This manifest allows exact reproduction of the index from the same source data. ### Query Execution Pipeline -``` +```bash Natural Language Query "bitcoin transaction after drug deal" │ diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..1b232c6 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,29 @@ +[project] +name = "gamayun" +version = "0.0.0" +description = "Scalable vector search engine with focus on post-mortem forensics" +authors = [ + {name = "Mario Stöckl", email = "mstoeck3@hs-mittweida.de"} +] +readme = "README.md" +requires-python = "~=3.13" + +dependencies = [ + "PySide6~=6.8.0", + "qdrant_client~=1.16.1", +] + +[project.optional-dependencies] +dev = [ + "pytest", +] + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +packages = ["src/gamayun"] + +[project.scripts] +gamayun-cli = "gamayun.main:main" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8d12b30 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,75 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile pyproject.toml --extra dev -o requirements.txt +annotated-types==0.7.0 + # via pydantic +anyio==4.11.0 + # via httpx +certifi==2025.11.12 + # via + # httpcore + # httpx +grpcio==1.76.0 + # via qdrant-client +h11==0.16.0 + # via httpcore +h2==4.3.0 + # via httpx +hpack==4.1.0 + # via h2 +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via qdrant-client +hyperframe==6.1.0 + # via h2 +idna==3.11 + # via + # anyio + # httpx +iniconfig==2.3.0 + # via pytest +numpy==2.3.5 + # via qdrant-client +packaging==25.0 + # via pytest +pluggy==1.6.0 + # via pytest +portalocker==3.2.0 + # via qdrant-client +protobuf==6.33.1 + # via qdrant-client +pydantic==2.12.4 + # via qdrant-client +pydantic-core==2.41.5 + # via pydantic +pygments==2.19.2 + # via pytest +pyside6==6.8.3 + # via gamayun (pyproject.toml) +pyside6-addons==6.8.3 + # via pyside6 +pyside6-essentials==6.8.3 + # via + # pyside6 + # pyside6-addons +pytest==9.0.1 + # via gamayun (pyproject.toml) +qdrant-client==1.16.1 + # via gamayun (pyproject.toml) +shiboken6==6.8.3 + # via + # pyside6 + # pyside6-addons + # pyside6-essentials +sniffio==1.3.1 + # via anyio +typing-extensions==4.15.0 + # via + # grpcio + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic +urllib3==2.5.0 + # via qdrant-client diff --git a/Gemini_Generated_Image_wv24iuwv24iuwv24.png b/resources/title_image.png similarity index 100% rename from Gemini_Generated_Image_wv24iuwv24iuwv24.png rename to resources/title_image.png diff --git a/src/gamayun/__init__.py b/src/gamayun/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gamayun/main.py b/src/gamayun/main.py new file mode 100644 index 0000000..e69de29