Skip to main content

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)

  1. Install Ollama: Download from ollama.ai
  2. 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
    
  3. Configure: The package will auto-detect Ollama and use it by default

Option 2: Local GGUF Models (Advanced)

  1. Install GGUF support: pip install rag-package[gguf] (requires compilation tools)
  2. Download models: Place GGUF files in the models/ directory
  3. Recommended: Law Chat GGUF (Q4_0 variant)
  4. 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:
    1. Via Web Interface: Use the Model Management section to download models
    2. Manual Download: Place GGUF files in the models/ directory
    3. Recommended Model: Law Chat GGUF (Q4_0 variant)

Backend Selection

The package automatically detects the best available backend:

  1. Ollama (if server is running and models are available)
  2. Local GGUF (if models are found in the models directory)
  3. 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

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Add tests for new functionality
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. 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 analysis
  • POST /analyze - Analyze uploaded documents
  • POST /query - Generate database queries
  • GET /health - Service health check
  • POST /models/load - Load AI models
  • GET /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

Support

For questions, issues, or contributions:

[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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rag_package-0.1.4.tar.gz (62.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rag_package-0.1.4-py3-none-any.whl (70.1 kB view details)

Uploaded Python 3

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

Hashes for rag_package-0.1.4.tar.gz
Algorithm Hash digest
SHA256 32b6af8387379615df83251aa8c7a63c51fad1f047378a7b55fb70e24bc748b2
MD5 0a094e64109bdf520d7d68d0b99128e1
BLAKE2b-256 9dae7b392ac37a6d5b787066dd81cd5525b9308b55a15167461c4a1a13f56af3

See more details on using hashes here.

Provenance

The following attestation bundles were made for rag_package-0.1.4.tar.gz:

Publisher: publish-to-pypi.yml on DannyMExe/rag-package

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for rag_package-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 bbb2db371a5386fddb139e83241480d017e9da289b3d03ff2b6fa36a12841f23
MD5 e049a2c185c6bfdab86360b87bbb8042
BLAKE2b-256 fd0786f734a9ca5e4cf2fd17c9b4426b8e37f8c9384c72e4f1c8410375db0596

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page