AI-powered document analysis and query generation tool with RAG capabilities
Project description
LawFirm RAG Package
A comprehensive Python package for document analysis and query generation using Retrieval-Augmented Generation (RAG) with local AI models. Currently optimized for legal documents with support for Westlaw, LexisNexis, and Casetext query generation.
Features
- 📄 Document Processing: Extract and analyze text from various legal document formats
- 🤖 AI-Powered Analysis: Support for both Ollama and local GGUF models for document summarization and legal issue identification
- 🔍 Query Generation: Generate optimized search queries for legal databases (Westlaw, LexisNexis, Casetext)
- 🌐 Web Interface: Modern web UI for document upload and analysis
- 🔧 CLI Tools: Command-line interface for batch processing
- 💾 Model Management: Download, load, and manage AI models with progress tracking
- 🏗️ Pip Installable: Clean package structure for easy installation and distribution
- 🚀 Ollama Integration: Easy setup with Ollama for improved installation experience
Quick Start
Installation
From PyPI (Recommended)
# Install the package (Ollama backend only)
pip install rag-package
# Or install with GGUF backend support (requires compilation)
pip install rag-package[gguf]
From GitHub Repository
# Clone the repository
git clone https://github.com/DannyMExe/rag-package.git
cd rag-package
# Install the package in development mode
pip install -e .
AI Backend Setup
The package supports two AI backends:
Option 1: Ollama (Recommended - Easier Setup)
- Install Ollama: Download from ollama.ai
- Pull a model:
# For legal documents (recommended) ollama run hf.co/TheBloke/law-chat-GGUF:Q4_0 # Or use a general model ollama pull llama3.2
- Configure: The package will auto-detect Ollama and use it by default
Option 2: Local GGUF Models (Advanced)
- Install GGUF support:
pip install rag-package[gguf](requires compilation tools) - Download models: Place GGUF files in the
models/directory - Recommended: Law Chat GGUF (Q4_0 variant)
- Configure: Set
backend: "llama-cpp"in your config file
Basic Usage
Web Interface
# Start the web server
rag serve
# Or using Python module
python -m uvicorn lawfirm_rag.api.fastapi_app:app --reload
# Open http://localhost:8000/app in your browser
CLI Usage
# Analyze documents
rag analyze document.pdf --type summary
# Generate queries for legal databases
rag query document.pdf --database westlaw
# Process multiple files
rag analyze *.pdf --output results.json
# Additional options
rag serve --port 8080
rag analyze document.pdf --type summary
Git Bash Usage
If you're using Git Bash on Windows and the rag command isn't found, use one of these options:
Option 1: Use Python module syntax
# Run any command through the Python module
python -m lawfirm_rag.cli.main serve
python -m lawfirm_rag.cli.main analyze document.pdf
Option 2: Add Scripts directory to Git Bash PATH
Add this line to your ~/.bashrc file:
# Adjust the Python version in the path if needed
export PATH="$PATH:/c/Users/$USERNAME/AppData/Local/Packages/PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0/LocalCache/local-packages/Python311/Scripts"
Then restart Git Bash or run source ~/.bashrc
Option 3: Create an alias
Add this line to your ~/.bashrc file:
alias rag="python -m lawfirm_rag.cli.main"
Then restart Git Bash or run source ~/.bashrc
AI Model Setup
The package supports multiple AI backends for flexibility and ease of use:
Ollama Backend (Recommended)
- Easy Installation: No compilation required
- Model Management: Built-in model downloading and management
- Better Performance: Optimized for local inference
- Setup: Install Ollama and pull models as shown above
Local GGUF Backend (Advanced)
- Direct Model Loading: Load GGUF files directly
- Full Control: Manual model management
- Setup:
- Via Web Interface: Use the Model Management section to download models
- Manual Download: Place GGUF files in the
models/directory - Recommended Model: Law Chat GGUF (Q4_0 variant)
Backend Selection
The package automatically detects the best available backend:
- Ollama (if server is running and models are available)
- Local GGUF (if models are found in the models directory)
- Fallback (graceful degradation with limited functionality)
You can force a specific backend by creating a config.yaml file:
llm:
backend: ollama # or "llama-cpp" for GGUF files
ollama:
base_url: http://localhost:11434
default_model: law-chat
Architecture
lawfirm_rag/
├── core/ # Core processing modules
│ ├── ai_engine.py # GGUF model handling
│ ├── document_processor.py # Document text extraction
│ ├── query_generator.py # Legal database query generation
│ └── storage.py # Document storage layer
├── api/ # FastAPI web server
├── cli/ # Command-line interface
├── web/ # Frontend assets
└── utils/ # Utilities and configuration
Legal Database Support
Westlaw
- Syntax: Terms and Connectors
- Operators:
&,|,/s,/p,/n,!,% - Example:
negligen! /p \"motor vehicle\" /s injur! & damag!
LexisNexis
- Syntax: Boolean operators
- Operators:
AND,OR,NOT,W/n,PRE/n - Example:
negligence AND \"motor vehicle\" AND damages
Casetext
- Syntax: Natural language + Boolean
- Features: Supports both natural language and boolean queries
Development
Project Structure
This project uses Task Master for development workflow management:
# View current tasks
task-master list
# Get next task to work on
task-master next
# Mark task complete
task-master set-status --id=X --status=done
Running Tests
# Install development dependencies
pip install -e \".[dev]\"
# Run tests
pytest
# Run with coverage
pytest --cov=lawfirm_rag
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests for new functionality
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Configuration
Configuration is managed through multiple methods:
Configuration Files
config.yaml: Main configuration file (project root)~/.lawfirm-rag/config.yaml: User-level configuration.env: Environment variables and API keys
LLM Backend Configuration
# config.yaml
llm:
backend: ollama # "auto", "ollama", or "llama-cpp"
ollama:
base_url: http://localhost:11434
default_model: law-chat
default_embed_model: mxbai-embed-large
timeout: 30
max_retries: 3
llama_cpp:
model_path: ~/.lawfirm-rag/models/default.gguf
n_ctx: 4096
temperature: 0.7
Environment Variables
# Ollama Configuration
OLLAMA_BASE_URL=http://localhost:11434
# Legacy GGUF Model Settings (if using llama-cpp backend)
LAWFIRM_RAG_CONFIG_PATH=./config.yaml
# Optional: API keys for cloud models (future feature)
ANTHROPIC_API_KEY=your_key_here
OPENAI_API_KEY=your_key_here
API Reference
FastAPI Endpoints
POST /upload- Upload documents for analysisPOST /analyze- Analyze uploaded documentsPOST /query- Generate database queriesGET /health- Service health checkPOST /models/load- Load AI modelsGET /models/loaded- Get loaded model status
Python API
from lawfirm_rag.core import DocumentProcessor, AIEngine, QueryGenerator
from lawfirm_rag.core.ai_engine import create_ai_engine_from_config
from lawfirm_rag.utils.config import ConfigManager
# Initialize components with automatic backend detection
config_manager = ConfigManager()
config = config_manager.get_config()
processor = DocumentProcessor()
ai_engine = create_ai_engine_from_config(config) # Auto-detects Ollama or GGUF
query_gen = QueryGenerator(ai_engine)
# Manual backend selection
ai_engine = AIEngine(backend_type="ollama", model_name="law-chat")
# or
ai_engine = AIEngine(backend_type="llama-cpp", model_path="path/to/model.gguf")
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- Built with FastAPI for the web framework
- Uses llama-cpp-python for local AI model support
- Task management powered by Task Master AI
Support
For questions, issues, or contributions:
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
[project.urls] Homepage = "https://github.com/DannyMExe/rag-package" Documentation = "https://lawfirm-rag.readthedocs.io" Repository = "https://github.com/DannyMExe/rag-package" "Bug Tracker" = "https://github.com/DannyMExe/rag-package/issues" Changelog = "https://github.com/DannyMExe/rag-package/blob/main/CHANGELOG.md"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rag_package-0.1.4.tar.gz.
File metadata
- Download URL: rag_package-0.1.4.tar.gz
- Upload date:
- Size: 62.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32b6af8387379615df83251aa8c7a63c51fad1f047378a7b55fb70e24bc748b2
|
|
| MD5 |
0a094e64109bdf520d7d68d0b99128e1
|
|
| BLAKE2b-256 |
9dae7b392ac37a6d5b787066dd81cd5525b9308b55a15167461c4a1a13f56af3
|
Provenance
The following attestation bundles were made for rag_package-0.1.4.tar.gz:
Publisher:
publish-to-pypi.yml on DannyMExe/rag-package
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rag_package-0.1.4.tar.gz -
Subject digest:
32b6af8387379615df83251aa8c7a63c51fad1f047378a7b55fb70e24bc748b2 - Sigstore transparency entry: 221510579
- Sigstore integration time:
-
Permalink:
DannyMExe/rag-package@f4d21b6c3c7dac9c0ea17257d82ec6ed24e93c03 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/DannyMExe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@f4d21b6c3c7dac9c0ea17257d82ec6ed24e93c03 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rag_package-0.1.4-py3-none-any.whl.
File metadata
- Download URL: rag_package-0.1.4-py3-none-any.whl
- Upload date:
- Size: 70.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbb2db371a5386fddb139e83241480d017e9da289b3d03ff2b6fa36a12841f23
|
|
| MD5 |
e049a2c185c6bfdab86360b87bbb8042
|
|
| BLAKE2b-256 |
fd0786f734a9ca5e4cf2fd17c9b4426b8e37f8c9384c72e4f1c8410375db0596
|
Provenance
The following attestation bundles were made for rag_package-0.1.4-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on DannyMExe/rag-package
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rag_package-0.1.4-py3-none-any.whl -
Subject digest:
bbb2db371a5386fddb139e83241480d017e9da289b3d03ff2b6fa36a12841f23 - Sigstore transparency entry: 221510582
- Sigstore integration time:
-
Permalink:
DannyMExe/rag-package@f4d21b6c3c7dac9c0ea17257d82ec6ed24e93c03 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/DannyMExe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@f4d21b6c3c7dac9c0ea17257d82ec6ed24e93c03 -
Trigger Event:
release
-
Statement type: