askyourdocs


Nameaskyourdocs JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/lincmba/askyourdocs
SummaryPrivacy-first, local-only CLI tool that transforms document collections into an intelligent Q&A system
upload_time2025-10-06 20:23:50
maintainerNone
docs_urlNone
authorLincoln Simba
requires_python<3.14,>=3.10
licenseMIT
keywords rag ai llm documents question-answering search privacy local cli llamaindex
VCS
bugtrack_url
requirements aiohappyeyeballs aiohttp aiosignal aiosqlite annotated-types anthropic anyio asgiref attrs azure-core azure-identity backoff banks bcrypt beautifulsoup4 boto3 botocore build cachetools certifi cffi charset-normalizer chroma-hnswlib chromadb click colorama coloredlogs cryptography dataclasses-json defusedxml Deprecated dirtyjson distro durationpy fastapi filelock filetype flatbuffers frozenlist fsspec google-auth googleapis-common-protos greenlet griffe grpcio h11 hf-xet httpcore httptools httpx huggingface-hub humanfriendly idna importlib_metadata importlib_resources iniconfig Jinja2 jiter jmespath joblib jsonschema jsonschema-specifications kubernetes llama-cloud llama-cloud-services llama-index llama-index-agent-openai llama-index-cli llama-index-core llama-index-embeddings-huggingface llama-index-embeddings-openai llama-index-indices-managed-llama-cloud llama-index-instrumentation llama-index-legacy llama-index-llms-anthropic llama-index-llms-azure-openai llama-index-llms-ollama llama-index-llms-openai llama-index-multi-modal-llms-openai llama-index-program-openai llama-index-question-gen-openai llama-index-readers-file llama-index-readers-llama-parse llama-index-vector-stores-chroma llama-index-workflows llama-parse lxml Markdown markdown-it-py MarkupSafe marshmallow mdurl mmh3 mpmath msal msal-extensions multidict mypy_extensions nest-asyncio networkx nltk numpy nvidia-cublas-cu12 nvidia-cuda-cupti-cu12 nvidia-cuda-nvrtc-cu12 nvidia-cuda-runtime-cu12 nvidia-cudnn-cu12 nvidia-cufft-cu12 nvidia-cufile-cu12 nvidia-curand-cu12 nvidia-cusolver-cu12 nvidia-cusparse-cu12 nvidia-cusparselt-cu12 nvidia-nccl-cu12 nvidia-nvjitlink-cu12 nvidia-nvtx-cu12 oauthlib ollama onnxruntime openai opentelemetry-api opentelemetry-exporter-otlp-proto-common opentelemetry-exporter-otlp-proto-grpc opentelemetry-instrumentation opentelemetry-instrumentation-asgi opentelemetry-instrumentation-fastapi opentelemetry-proto opentelemetry-sdk opentelemetry-semantic-conventions opentelemetry-util-http orjson overrides packaging pandas pillow platformdirs pluggy posthog propcache protobuf pyasn1 pyasn1_modules pybase64 pycparser pydantic pydantic_core Pygments PyJWT pypdf PyPika pyproject_hooks pytest python-dateutil python-docx python-dotenv python-pptx pytz PyYAML referencing regex requests requests-oauthlib rich rpds-py rsa s3transfer safetensors scikit-learn scipy sentence-transformers setuptools shellingham six sniffio soupsieve SQLAlchemy starlette striprtf sympy tenacity threadpoolctl tiktoken tokenizers torch tqdm transformers triton typer typing-inspect typing-inspection typing_extensions tzdata urllib3 uvicorn uvloop watchdog watchfiles websocket-client websockets wrapt xlsxwriter yarl zipp
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # AskYourDocs ๐Ÿ”๐Ÿ“š

[![PyPI version](https://badge.fury.io/py/askyourdocs.svg)](https://badge.fury.io/py/askyourdocs)
[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**AskYourDocs** is a privacy-first, local-only CLI tool that transforms your document collections into an intelligent Q&A system. Using advanced RAG (Retrieval Augmented Generation) technology, it allows you to ask natural language questions about your documents and get accurate, contextual answers with source citations.

## โœจ Key Features

- ๐Ÿ”’ **100% Privacy**: All processing happens locally, your documents never leave your machine
- ๐Ÿง  **Intelligent Q&A**: Ask natural language questions and get contextual answers
- ๐Ÿ“„ **Multi-Format Support**: PDF, Word, PowerPoint, Markdown, code files, and more
- โšก **Fast Retrieval**: Hybrid search combining semantic and keyword matching
- ๐ŸŽฏ **Source Attribution**: Every answer includes citations to source documents
- ๐Ÿ”„ **Incremental Updates**: Only processes changed files for efficiency
- ๐ŸŽจ **Beautiful CLI**: Rich terminal output with progress bars and colors
- โš™๏ธ **Highly Configurable**: YAML-based configuration for all settings

## ๐Ÿš€ Quick Start

### Installation

#### Option 1: Install from PyPI (Recommended)
```bash
# Basic installation (local models only)
pip install askyourdocs

# With remote LLM support
pip install askyourdocs[remote]

# With GPU acceleration
pip install askyourdocs[gpu]

# Full installation with all features
pip install askyourdocs[all]
```

#### Option 2: Install with Poetry (Development)
```bash
# Clone the repository
git clone https://github.com/lincmba/askyourdocs.git
cd askyourdocs

# Install Poetry if you haven't already
curl -sSL https://install.python-poetry.org | python3 -

# Install dependencies
poetry install

# Install with all extras for development
poetry install --extras "all"

# Run a basic command
poetry run askyourdocs --help
```

#### Option 3: Install from Source (Advanced)
```bash
# Clone the repository
git clone https://github.com/lincmba/askyourdocs.git
cd askyourdocs

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install in development mode
pip install -e .

# Or install with optional dependencies
pip install -e ".[gpu,remote,dev]"
```

### Setup Prerequisites

#### For Local Processing (Recommended)

1. **Install Ollama** (for local LLM inference):
   ```bash
   # macOS
   brew install ollama

   # Linux
   curl -fsSL https://ollama.ai/install.sh | sh

   # Windows (WSL)
   curl -fsSL https://ollama.ai/install.sh | sh
   ```

2. **Start Ollama and download the default model**:
   ```bash
   # Start Ollama service
   ollama serve

   # In another terminal, download the default lightweight model
   ollama pull tinyllama:1.1b

   # Or download a more capable model (larger download)
   ollama pull llama3.1:8b
   ```

#### For Remote Processing (Optional)

If you prefer to use remote LLM providers, you'll need API keys:

**OpenAI Setup:**
```bash
# Install with OpenAI support
pip install askyourdocs[openai]

# Set your API key
export OPENAI_API_KEY="your-api-key-here"

# Configure for OpenAI
askyourdocs config setup --provider openai
```

**Anthropic Setup:**
```bash
# 1. Install with remote provider support
pip install askyourdocs[remote]

# 2. Get your API key from https://console.anthropic.com/settings/keys
export ANTHROPIC_API_KEY="your-api-key-here"

# 3. Configure for Anthropic (recommended)
askyourdocs config setup --provider anthropic
```

**Azure OpenAI Setup:**
```bash
# 1. Install with remote provider support
pip install askyourdocs[remote]

# 2. Set your credentials
export AZURE_OPENAI_API_KEY="your-api-key"
export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"

# 3. Configure for Azure (recommended)
askyourdocs config setup --provider azure
```

### Basic Usage

1. **Index your documents**:
   ```bash
   # Index documents in current directory
   askyourdocs ingest

   # Index specific directory
   askyourdocs ingest ./my-documents

   # Index with progress and verbose output
   askyourdocs ingest ./docs --verbose
   ```

2. **Ask questions**:
   ```bash
   # Ask a question
   askyourdocs ask "What are the main conclusions in the research papers?"

   # Ask with specific number of sources
   askyourdocs ask "How does the API authentication work?" --top-k 5

   # Get detailed response with full sources
   askyourdocs ask "Summarize the project requirements" --verbose
   ```

3. **Interactive mode**:
   ```bash
   # Start interactive session
   askyourdocs interactive

   # In interactive mode:
   > What is the project timeline?
   > Can you explain the technical architecture?
   > exit
   ```

4. **Check system status**:
   ```bash
   # View system status and configuration
   askyourdocs status

   # Validate configuration
   askyourdocs config validate
   ```

5. **Configuration management**:
   ```bash
   # Interactive setup
   askyourdocs config setup

   # View configuration
   askyourdocs config show

   # Set specific values
   askyourdocs config set model.temperature 0.2
   askyourdocs config set retrieval.top_k 10
   ```

## ๐Ÿ“– Command Reference

### Core Commands

#### `ingest` - Index Documents
```bash
askyourdocs ingest [PATH] [OPTIONS]

# Examples:
askyourdocs ingest                          # Current directory
askyourdocs ingest ./documents             # Specific path
askyourdocs ingest --include "*.pdf,*.md"  # Filter file types
askyourdocs ingest --exclude "temp/*"      # Exclude patterns
askyourdocs ingest --force                 # Rebuild entire index
askyourdocs ingest --watch                 # Watch for changes
```

**Options:**
- `--include TEXT`: File patterns to include (e.g., "*.pdf,*.docx")
- `--exclude TEXT`: File patterns to exclude (e.g., "temp/*,*.log")
- `--force`: Force rebuild of entire index
- `--watch`: Watch directory for changes and auto-update
- `--chunk-size INTEGER`: Override chunk size for processing
- `--verbose`: Show detailed processing information

#### `ask` - Query Documents
```bash
askyourdocs ask "your question" [OPTIONS]

# Examples:
askyourdocs ask "What is the main thesis?"
askyourdocs ask "How do I configure the database?" --top-k 5
askyourdocs ask "Summarize key findings" --mode compact
askyourdocs ask "What are the requirements?" --stream
```

**Options:**
- `--top-k INTEGER`: Number of relevant chunks to retrieve (default: 5)
- `--mode TEXT`: Response mode (compact/tree_summarize/accumulate)
- `--stream`: Stream response as it's generated
- `--no-sources`: Don't show source citations
- `--threshold FLOAT`: Similarity threshold for retrieval (0.0-1.0)

#### `search` - Fast Keyword Search
```bash
askyourdocs search "keyword" [OPTIONS]

# Examples:
askyourdocs search "authentication"
askyourdocs search "machine learning" --limit 10
askyourdocs search "API" --format json
```

#### `refresh` - Rebuild Index
```bash
askyourdocs refresh [OPTIONS]

# Examples:
askyourdocs refresh                    # Rebuild current index
askyourdocs refresh --reset            # Delete and rebuild from scratch
askyourdocs refresh --optimize         # Optimize vector store
```

#### `status` - System Information
```bash
askyourdocs status

# Example output:
๐Ÿ“Š AskYourDocs Status
โ”œโ”€โ”€ ๐Ÿ“ Documents: 1,247 files indexed
โ”œโ”€โ”€ ๐Ÿงฉ Chunks: 5,834 text chunks
โ”œโ”€โ”€ ๐Ÿ’พ Storage: 156.7 MB vector data
โ”œโ”€โ”€ ๐Ÿง  Model: llama3.1:8b (Ollama)
โ”œโ”€โ”€ ๐Ÿ” Embeddings: BAAI/bge-small-en-v1.5
โ””โ”€โ”€ โš™๏ธ Config: ~/.config/askyourdocs/config.yaml
```

### Configuration Commands

#### `config` - Manage Configuration
```bash
askyourdocs config [COMMAND] [OPTIONS]

# View current configuration
askyourdocs config show
askyourdocs config show --format yaml
askyourdocs config show --section model

# Set configuration values
askyourdocs config set model.name llama3.1:8b
askyourdocs config set chunking.chunk_size 1500
askyourdocs config set embedding.model "sentence-transformers/all-MiniLM-L6-v2"

# Interactive setup
askyourdocs config setup
askyourdocs config setup --provider openai

# Validate configuration
askyourdocs config validate

# Reset to defaults
askyourdocs config reset

# Show configuration file location
askyourdocs config path
```

### Advanced Commands

#### `interactive` - Interactive Mode
```bash
askyourdocs interactive [OPTIONS]

# Start interactive session with custom settings
askyourdocs interactive --top-k 3 --stream
```

#### `export` - Backup Data
```bash
askyourdocs export --output backup.tar.gz
askyourdocs export --output backup.tar.gz --include-config
```

#### `import` - Restore Data
```bash
askyourdocs import --input backup.tar.gz
askyourdocs import --input backup.tar.gz --merge
```

## ๐Ÿ› ๏ธ Configuration

AskYourDocs uses a YAML configuration file located at `~/.config/askyourdocs/config.yaml`. You can customize all aspects of the tool:

### Local Models (Default - No API Key Required)
```yaml
model:
  provider: "ollama"           # Local Ollama server
  name: "tinyllama:1.1b"      # Lightweight model (fast, good for most tasks)
  base_url: "http://localhost:11434"
  temperature: 0.1            # Response creativity (0.0-2.0)
  max_tokens: 2048           # Maximum response length

embedding:
  provider: "huggingface"     # Local embeddings
  model: "BAAI/bge-small-en-v1.5"  # Fast, accurate embeddings
  device: "cpu"              # cpu/cuda/mps/auto
```

**Setup Command:** `askyourdocs config setup --provider ollama`

### Remote Models (API Key Required)

**OpenAI Configuration:**
```yaml
model:
  provider: "openai"
  name: "gpt-4"              # or gpt-3.5-turbo
  api_key: "sk-your-key-here"  # Or set OPENAI_API_KEY env var
  temperature: 0.1
  max_tokens: 2048

embedding:
  provider: "openai"         # Optional: use OpenAI embeddings
  model: "text-embedding-3-small"
  api_key: "sk-your-key-here"
```

**Setup Command:** `askyourdocs config setup --provider openai`

**Anthropic Configuration:**
```yaml
model:
  provider: "anthropic"
  name: "claude-3-5-sonnet-20241022"  # Latest Claude model
  api_key: "sk-ant-your-key-here"  # Or set ANTHROPIC_API_KEY env var
  temperature: 0.1
  max_tokens: 2048

embedding:
  provider: "huggingface"  # Keep local embeddings for privacy
  model: "BAAI/bge-small-en-v1.5"
```

**Setup Command:** `askyourdocs config setup --provider anthropic`

**Azure OpenAI Configuration:**
```yaml
model:
  provider: "azure"
  name: "gpt-4"
  api_key: "your-azure-key"
  azure_endpoint: "https://your-resource.openai.azure.com/"
  azure_deployment: "your-deployment-name"
```

**Setup Command:** `askyourdocs config setup --provider azure`
### Advanced Configuration

**Document Processing:**
```yaml
chunking:
  strategy: "sentence"        # sentence/recursive/semantic/fixed
  chunk_size: 1000           # Characters per chunk (100-8000)
  chunk_overlap: 200         # Overlap between chunks
  respect_boundaries: true   # Respect sentence/paragraph boundaries
  min_chunk_size: 100        # Minimum chunk size
```

**Retrieval Settings:**
```yaml
retrieval:
  top_k: 5                   # Number of chunks to retrieve (1-50)
  similarity_threshold: 0.7   # Minimum similarity score (0.0-1.0)
  rerank: true               # Re-rank results for better relevance
  retrieval_mode: "hybrid"   # vector/keyword/hybrid
  max_context_length: 4000   # Maximum context for LLM
```

**Storage Settings:**
```yaml
storage:
  backend: "chromadb"        # Vector database backend
  path: ".askyourdocs"       # Storage directory
  compression: true          # Enable compression
  collection_name: "documents"  # Collection name
```

## ๐ŸŽฏ Examples

### Quick Start with Local Models
```yaml
# 1. Install and setup
pip install askyourdocs
ollama serve  # In one terminal
ollama pull tinyllama:1.1b  # In another terminal

# 2. Index your documents
askyourdocs ingest ./my-documents

# 3. Ask questions
askyourdocs ask "What are the key findings?"
```

### Using with OpenAI
```bash
# 1. Install with remote provider support
pip install askyourdocs[remote]

# 2. Set up OpenAI API key
export OPENAI_API_KEY="your-api-key"

# 3. Configure for OpenAI
askyourdocs config setup --provider openai

# 4. Index and query documents
askyourdocs ingest ./documents
askyourdocs ask "What are the key findings in these documents?"

# 5. Verify setup
askyourdocs status
```

### Research Papers Analysis
```bash
# Index your research papers
askyourdocs ingest ./research-papers --include "*.pdf"

# Ask analytical questions
askyourdocs ask "What are the common methodologies across these studies?"
askyourdocs ask "Which papers mention transformer architecture?"
askyourdocs ask "Summarize the key findings about neural networks"
```

### Code Documentation
```bash
# Index your codebase documentation
askyourdocs ingest ./docs --include "*.md,*.rst"

# Query your docs
askyourdocs ask "How do I set up authentication?"
askyourdocs ask "What are the API rate limits?"
askyourdocs ask "Show me examples of database configuration"
```

### Legal Documents
```bash
# Index contracts and legal docs
askyourdocs ingest ./legal --include "*.pdf,*.docx"

# Ask specific questions
askyourdocs ask "What are the termination clauses?"
askyourdocs ask "What payment terms are specified?"
askyourdocs ask "Are there any liability limitations?"

# Query specific contract types
askyourdocs ask "What are the key terms?" --path ./employment-contracts
askyourdocs ask "What are the renewal conditions in ./service-agreements?"
```

### Path-Specific Querying

AskYourDocs supports querying specific paths, with automatic ingestion if needed:

```bash
# Method 1: Using --path option
askyourdocs ask "What are the main topics?" --path ./research-papers

# Method 2: Include path in question
askyourdocs ask "What are the key findings in ./data-analysis?"

# Auto-ingestion: If path isn't indexed, it will be ingested automatically
askyourdocs ask "Summarize the content" --path ./new-documents

# Multiple path queries
askyourdocs ask "Compare findings in ./study-a vs ./study-b"
```

## ๐Ÿ”ง Advanced Usage

### Custom Configuration
```bash
# Switch to different providers (recommended method)
askyourdocs config setup --provider ollama
askyourdocs config setup --provider openai
askyourdocs config setup --provider anthropic
askyourdocs config setup --provider azure

# Interactive setup (choose provider during setup)
askyourdocs config setup

# Advanced: Direct configuration (for automation/scripts)
askyourdocs config set chunking.chunk_size 1500
askyourdocs config set embedding.device "cuda"
askyourdocs config set retrieval.top_k 10

# View current configuration
askyourdocs config show

# Validate configuration
askyourdocs config validate
```

### Monitoring and Maintenance
```bash
# Check system status
askyourdocs status

# Refresh index (incremental)
askyourdocs refresh

# Full rebuild (when changing chunk settings)
askyourdocs refresh --reset

# Optimize vector store
askyourdocs refresh --optimize
```

### Backup and Migration
```bash
# Create backup
askyourdocs export --output documents-backup.tar.gz --include-config

# Restore from backup
askyourdocs import --input documents-backup.tar.gz

# Merge with existing index
askyourdocs import --input additional-docs.tar.gz --merge
```

## ๐Ÿ“ Supported File Formats

| Category | Formats | Extensions |
|----------|---------|------------|
| **Documents** | PDF, Word, PowerPoint, OpenDocument | `.pdf`, `.docx`, `.pptx`, `.odt`, `.odp` |
| **Text** | Plain text, Markdown, reStructuredText | `.txt`, `.md`, `.rst`, `.csv` |
| **Code** | Source code, configuration files | `.py`, `.js`, `.java`, `.cpp`, `.yaml`, `.json` |
| **Structured** | HTML, XML, LaTeX, Jupyter | `.html`, `.xml`, `.tex`, `.ipynb` |

## ๐Ÿ—๏ธ Architecture

AskYourDocs uses a modern RAG architecture:

1. **Document Ingestion**: Files are processed and split into semantic chunks
2. **Embedding Generation**: Text chunks are converted to vector embeddings
3. **Vector Storage**: ChromaDB stores embeddings with metadata for fast retrieval
4. **Query Processing**: User questions are embedded and matched against stored vectors
5. **Context Retrieval**: Most relevant chunks are retrieved based on similarity
6. **Response Generation**: Local LLM generates answers using retrieved context

## ๐Ÿ›ก๏ธ Privacy & Security

- **Local Processing**: All operations happen on your machine
- **No Data Transmission**: Documents never leave your environment
- **Secure Storage**: Vector data stored locally with optional encryption
- **No Telemetry**: Zero tracking or analytics
- **Open Source**: Full transparency with auditable code

## ๐Ÿ” Troubleshooting

### Common Issues

**"Configuration issues found"**
```bash
# Check what's wrong
askyourdocs status
askyourdocs config validate

# Fix with interactive setup (recommended)
askyourdocs config setup
```

**"Ollama connection failed"**
```bash
# Check if Ollama is running
ollama list

# Start Ollama if not running
ollama serve

# Test connection
curl http://localhost:11434/api/tags

# Download the default model
ollama pull tinyllama:1.1b

# List available models
ollama list
```

**"No documents found"**
```bash
# Check current directory
askyourdocs ingest --verbose

# Specify path explicitly
askyourdocs ingest /path/to/documents

# Check supported formats
askyourdocs ingest --include "*.pdf,*.docx,*.txt"
```

**"Embedding model download failed"**
```bash
# Check internet connection and try again
askyourdocs refresh

# Use different model
askyourdocs config set embedding.model "sentence-transformers/all-MiniLM-L6-v2"
```

**"API key not found" (for remote providers)**
```bash
# Set environment variable first
export ANTHROPIC_API_KEY="sk-ant-your-key-here"
export OPENAI_API_KEY="your-openai-key"
export AZURE_OPENAI_API_KEY="your-azure-key"

# Then configure provider (recommended)
askyourdocs config setup --provider anthropic
askyourdocs config setup --provider openai
askyourdocs config setup --provider azure

# Verify configuration
askyourdocs config validate
askyourdocs status
```

**Performance Issues**
```bash
# Reduce chunk size
askyourdocs config set chunking.chunk_size 800

# Reduce batch size
askyourdocs config set embedding.batch_size 16

# Optimize storage
askyourdocs refresh --optimize

# Switch to lighter model
askyourdocs config set model.name "tinyllama:1.1b"

# Use GPU acceleration (if available)
askyourdocs config set embedding.device "cuda"
```

### Getting Help

```bash
# Show general help
askyourdocs --help

# Show command-specific help
askyourdocs ask --help
askyourdocs ingest --help

# Show current configuration
askyourdocs config show

# Check system status
askyourdocs status
```

## ๐Ÿงช Development Setup

### Using Poetry (Recommended)

```bash
# Clone repository
git clone https://github.com/lincmba/askyourdocs.git
cd askyourdocs

# Install Poetry
curl -sSL https://install.python-poetry.org | python3 -

# Install dependencies
poetry install --extras "all"

# Run a basic command
 poetry run askyourdocs --help

# Install pre-commit hooks
pre-commit install
```

### Using pip (Alternative)

```bash
# Clone repository
git clone https://github.com/lincmba/askyourdocs.git
cd askyourdocs

# Create virtual environment
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# Install with development dependencies
pip install -e ".[dev,gpu,remote]"

# Install pre-commit hooks
pre-commit install
```

### Development Commands

```bash
# Run with coverage
poetry run pytest
# or: pytest

# Run with coverage
poetry run pytest --cov=askyourdocs
# or: pytest --cov=askyourdocs

# Format code
poetry run black src/ tests/
poetry run ruff check src/ tests/

# Type checking
poetry run mypy src/

# Run all quality checks
poetry run pre-commit run --all-files

# Build package
poetry build

# Install locally for testing
poetry install
```

*Note: Local models require initial download but then work offline. Remote models require internet and API costs.*

## ๐Ÿค Contributing

We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.

1. Fork the repository
2. Create a feature branch
3. Make your changes with tests
4. Run the test suite
5. Submit a pull request

## ๐Ÿ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## ๐Ÿ™ Acknowledgments

- **LlamaIndex**: For the excellent RAG framework
- **ChromaDB**: For fast vector storage
- **Ollama**: For local LLM inference
- **Rich**: For beautiful terminal output
- **Click**: For the CLI framework

## ๐Ÿ“ž Support
- ๐Ÿ“ง **Email**: lincolncmba@gmail.com

---

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/lincmba/askyourdocs",
    "name": "askyourdocs",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<3.14,>=3.10",
    "maintainer_email": null,
    "keywords": "rag, ai, llm, documents, question-answering, search, privacy, local, cli, llamaindex",
    "author": "Lincoln Simba",
    "author_email": "lincolncmba@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/7a/6b/5ffbb4185e36000caf6ab5ec909828af48f633f7b9ee4d9e53c951b864ab/askyourdocs-1.0.0.tar.gz",
    "platform": null,
    "description": "# AskYourDocs \ud83d\udd0d\ud83d\udcda\n\n[![PyPI version](https://badge.fury.io/py/askyourdocs.svg)](https://badge.fury.io/py/askyourdocs)\n[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**AskYourDocs** is a privacy-first, local-only CLI tool that transforms your document collections into an intelligent Q&A system. Using advanced RAG (Retrieval Augmented Generation) technology, it allows you to ask natural language questions about your documents and get accurate, contextual answers with source citations.\n\n## \u2728 Key Features\n\n- \ud83d\udd12 **100% Privacy**: All processing happens locally, your documents never leave your machine\n- \ud83e\udde0 **Intelligent Q&A**: Ask natural language questions and get contextual answers\n- \ud83d\udcc4 **Multi-Format Support**: PDF, Word, PowerPoint, Markdown, code files, and more\n- \u26a1 **Fast Retrieval**: Hybrid search combining semantic and keyword matching\n- \ud83c\udfaf **Source Attribution**: Every answer includes citations to source documents\n- \ud83d\udd04 **Incremental Updates**: Only processes changed files for efficiency\n- \ud83c\udfa8 **Beautiful CLI**: Rich terminal output with progress bars and colors\n- \u2699\ufe0f **Highly Configurable**: YAML-based configuration for all settings\n\n## \ud83d\ude80 Quick Start\n\n### Installation\n\n#### Option 1: Install from PyPI (Recommended)\n```bash\n# Basic installation (local models only)\npip install askyourdocs\n\n# With remote LLM support\npip install askyourdocs[remote]\n\n# With GPU acceleration\npip install askyourdocs[gpu]\n\n# Full installation with all features\npip install askyourdocs[all]\n```\n\n#### Option 2: Install with Poetry (Development)\n```bash\n# Clone the repository\ngit clone https://github.com/lincmba/askyourdocs.git\ncd askyourdocs\n\n# Install Poetry if you haven't already\ncurl -sSL https://install.python-poetry.org | python3 -\n\n# Install dependencies\npoetry install\n\n# Install with all extras for development\npoetry install --extras \"all\"\n\n# Run a basic command\npoetry run askyourdocs --help\n```\n\n#### Option 3: Install from Source (Advanced)\n```bash\n# Clone the repository\ngit clone https://github.com/lincmba/askyourdocs.git\ncd askyourdocs\n\n# Create virtual environment\npython -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\n\n# Install in development mode\npip install -e .\n\n# Or install with optional dependencies\npip install -e \".[gpu,remote,dev]\"\n```\n\n### Setup Prerequisites\n\n#### For Local Processing (Recommended)\n\n1. **Install Ollama** (for local LLM inference):\n   ```bash\n   # macOS\n   brew install ollama\n\n   # Linux\n   curl -fsSL https://ollama.ai/install.sh | sh\n\n   # Windows (WSL)\n   curl -fsSL https://ollama.ai/install.sh | sh\n   ```\n\n2. **Start Ollama and download the default model**:\n   ```bash\n   # Start Ollama service\n   ollama serve\n\n   # In another terminal, download the default lightweight model\n   ollama pull tinyllama:1.1b\n\n   # Or download a more capable model (larger download)\n   ollama pull llama3.1:8b\n   ```\n\n#### For Remote Processing (Optional)\n\nIf you prefer to use remote LLM providers, you'll need API keys:\n\n**OpenAI Setup:**\n```bash\n# Install with OpenAI support\npip install askyourdocs[openai]\n\n# Set your API key\nexport OPENAI_API_KEY=\"your-api-key-here\"\n\n# Configure for OpenAI\naskyourdocs config setup --provider openai\n```\n\n**Anthropic Setup:**\n```bash\n# 1. Install with remote provider support\npip install askyourdocs[remote]\n\n# 2. Get your API key from https://console.anthropic.com/settings/keys\nexport ANTHROPIC_API_KEY=\"your-api-key-here\"\n\n# 3. Configure for Anthropic (recommended)\naskyourdocs config setup --provider anthropic\n```\n\n**Azure OpenAI Setup:**\n```bash\n# 1. Install with remote provider support\npip install askyourdocs[remote]\n\n# 2. Set your credentials\nexport AZURE_OPENAI_API_KEY=\"your-api-key\"\nexport AZURE_OPENAI_ENDPOINT=\"https://your-resource.openai.azure.com/\"\n\n# 3. Configure for Azure (recommended)\naskyourdocs config setup --provider azure\n```\n\n### Basic Usage\n\n1. **Index your documents**:\n   ```bash\n   # Index documents in current directory\n   askyourdocs ingest\n\n   # Index specific directory\n   askyourdocs ingest ./my-documents\n\n   # Index with progress and verbose output\n   askyourdocs ingest ./docs --verbose\n   ```\n\n2. **Ask questions**:\n   ```bash\n   # Ask a question\n   askyourdocs ask \"What are the main conclusions in the research papers?\"\n\n   # Ask with specific number of sources\n   askyourdocs ask \"How does the API authentication work?\" --top-k 5\n\n   # Get detailed response with full sources\n   askyourdocs ask \"Summarize the project requirements\" --verbose\n   ```\n\n3. **Interactive mode**:\n   ```bash\n   # Start interactive session\n   askyourdocs interactive\n\n   # In interactive mode:\n   > What is the project timeline?\n   > Can you explain the technical architecture?\n   > exit\n   ```\n\n4. **Check system status**:\n   ```bash\n   # View system status and configuration\n   askyourdocs status\n\n   # Validate configuration\n   askyourdocs config validate\n   ```\n\n5. **Configuration management**:\n   ```bash\n   # Interactive setup\n   askyourdocs config setup\n\n   # View configuration\n   askyourdocs config show\n\n   # Set specific values\n   askyourdocs config set model.temperature 0.2\n   askyourdocs config set retrieval.top_k 10\n   ```\n\n## \ud83d\udcd6 Command Reference\n\n### Core Commands\n\n#### `ingest` - Index Documents\n```bash\naskyourdocs ingest [PATH] [OPTIONS]\n\n# Examples:\naskyourdocs ingest                          # Current directory\naskyourdocs ingest ./documents             # Specific path\naskyourdocs ingest --include \"*.pdf,*.md\"  # Filter file types\naskyourdocs ingest --exclude \"temp/*\"      # Exclude patterns\naskyourdocs ingest --force                 # Rebuild entire index\naskyourdocs ingest --watch                 # Watch for changes\n```\n\n**Options:**\n- `--include TEXT`: File patterns to include (e.g., \"*.pdf,*.docx\")\n- `--exclude TEXT`: File patterns to exclude (e.g., \"temp/*,*.log\")\n- `--force`: Force rebuild of entire index\n- `--watch`: Watch directory for changes and auto-update\n- `--chunk-size INTEGER`: Override chunk size for processing\n- `--verbose`: Show detailed processing information\n\n#### `ask` - Query Documents\n```bash\naskyourdocs ask \"your question\" [OPTIONS]\n\n# Examples:\naskyourdocs ask \"What is the main thesis?\"\naskyourdocs ask \"How do I configure the database?\" --top-k 5\naskyourdocs ask \"Summarize key findings\" --mode compact\naskyourdocs ask \"What are the requirements?\" --stream\n```\n\n**Options:**\n- `--top-k INTEGER`: Number of relevant chunks to retrieve (default: 5)\n- `--mode TEXT`: Response mode (compact/tree_summarize/accumulate)\n- `--stream`: Stream response as it's generated\n- `--no-sources`: Don't show source citations\n- `--threshold FLOAT`: Similarity threshold for retrieval (0.0-1.0)\n\n#### `search` - Fast Keyword Search\n```bash\naskyourdocs search \"keyword\" [OPTIONS]\n\n# Examples:\naskyourdocs search \"authentication\"\naskyourdocs search \"machine learning\" --limit 10\naskyourdocs search \"API\" --format json\n```\n\n#### `refresh` - Rebuild Index\n```bash\naskyourdocs refresh [OPTIONS]\n\n# Examples:\naskyourdocs refresh                    # Rebuild current index\naskyourdocs refresh --reset            # Delete and rebuild from scratch\naskyourdocs refresh --optimize         # Optimize vector store\n```\n\n#### `status` - System Information\n```bash\naskyourdocs status\n\n# Example output:\n\ud83d\udcca AskYourDocs Status\n\u251c\u2500\u2500 \ud83d\udcc1 Documents: 1,247 files indexed\n\u251c\u2500\u2500 \ud83e\udde9 Chunks: 5,834 text chunks\n\u251c\u2500\u2500 \ud83d\udcbe Storage: 156.7 MB vector data\n\u251c\u2500\u2500 \ud83e\udde0 Model: llama3.1:8b (Ollama)\n\u251c\u2500\u2500 \ud83d\udd0d Embeddings: BAAI/bge-small-en-v1.5\n\u2514\u2500\u2500 \u2699\ufe0f Config: ~/.config/askyourdocs/config.yaml\n```\n\n### Configuration Commands\n\n#### `config` - Manage Configuration\n```bash\naskyourdocs config [COMMAND] [OPTIONS]\n\n# View current configuration\naskyourdocs config show\naskyourdocs config show --format yaml\naskyourdocs config show --section model\n\n# Set configuration values\naskyourdocs config set model.name llama3.1:8b\naskyourdocs config set chunking.chunk_size 1500\naskyourdocs config set embedding.model \"sentence-transformers/all-MiniLM-L6-v2\"\n\n# Interactive setup\naskyourdocs config setup\naskyourdocs config setup --provider openai\n\n# Validate configuration\naskyourdocs config validate\n\n# Reset to defaults\naskyourdocs config reset\n\n# Show configuration file location\naskyourdocs config path\n```\n\n### Advanced Commands\n\n#### `interactive` - Interactive Mode\n```bash\naskyourdocs interactive [OPTIONS]\n\n# Start interactive session with custom settings\naskyourdocs interactive --top-k 3 --stream\n```\n\n#### `export` - Backup Data\n```bash\naskyourdocs export --output backup.tar.gz\naskyourdocs export --output backup.tar.gz --include-config\n```\n\n#### `import` - Restore Data\n```bash\naskyourdocs import --input backup.tar.gz\naskyourdocs import --input backup.tar.gz --merge\n```\n\n## \ud83d\udee0\ufe0f Configuration\n\nAskYourDocs uses a YAML configuration file located at `~/.config/askyourdocs/config.yaml`. You can customize all aspects of the tool:\n\n### Local Models (Default - No API Key Required)\n```yaml\nmodel:\n  provider: \"ollama\"           # Local Ollama server\n  name: \"tinyllama:1.1b\"      # Lightweight model (fast, good for most tasks)\n  base_url: \"http://localhost:11434\"\n  temperature: 0.1            # Response creativity (0.0-2.0)\n  max_tokens: 2048           # Maximum response length\n\nembedding:\n  provider: \"huggingface\"     # Local embeddings\n  model: \"BAAI/bge-small-en-v1.5\"  # Fast, accurate embeddings\n  device: \"cpu\"              # cpu/cuda/mps/auto\n```\n\n**Setup Command:** `askyourdocs config setup --provider ollama`\n\n### Remote Models (API Key Required)\n\n**OpenAI Configuration:**\n```yaml\nmodel:\n  provider: \"openai\"\n  name: \"gpt-4\"              # or gpt-3.5-turbo\n  api_key: \"sk-your-key-here\"  # Or set OPENAI_API_KEY env var\n  temperature: 0.1\n  max_tokens: 2048\n\nembedding:\n  provider: \"openai\"         # Optional: use OpenAI embeddings\n  model: \"text-embedding-3-small\"\n  api_key: \"sk-your-key-here\"\n```\n\n**Setup Command:** `askyourdocs config setup --provider openai`\n\n**Anthropic Configuration:**\n```yaml\nmodel:\n  provider: \"anthropic\"\n  name: \"claude-3-5-sonnet-20241022\"  # Latest Claude model\n  api_key: \"sk-ant-your-key-here\"  # Or set ANTHROPIC_API_KEY env var\n  temperature: 0.1\n  max_tokens: 2048\n\nembedding:\n  provider: \"huggingface\"  # Keep local embeddings for privacy\n  model: \"BAAI/bge-small-en-v1.5\"\n```\n\n**Setup Command:** `askyourdocs config setup --provider anthropic`\n\n**Azure OpenAI Configuration:**\n```yaml\nmodel:\n  provider: \"azure\"\n  name: \"gpt-4\"\n  api_key: \"your-azure-key\"\n  azure_endpoint: \"https://your-resource.openai.azure.com/\"\n  azure_deployment: \"your-deployment-name\"\n```\n\n**Setup Command:** `askyourdocs config setup --provider azure`\n### Advanced Configuration\n\n**Document Processing:**\n```yaml\nchunking:\n  strategy: \"sentence\"        # sentence/recursive/semantic/fixed\n  chunk_size: 1000           # Characters per chunk (100-8000)\n  chunk_overlap: 200         # Overlap between chunks\n  respect_boundaries: true   # Respect sentence/paragraph boundaries\n  min_chunk_size: 100        # Minimum chunk size\n```\n\n**Retrieval Settings:**\n```yaml\nretrieval:\n  top_k: 5                   # Number of chunks to retrieve (1-50)\n  similarity_threshold: 0.7   # Minimum similarity score (0.0-1.0)\n  rerank: true               # Re-rank results for better relevance\n  retrieval_mode: \"hybrid\"   # vector/keyword/hybrid\n  max_context_length: 4000   # Maximum context for LLM\n```\n\n**Storage Settings:**\n```yaml\nstorage:\n  backend: \"chromadb\"        # Vector database backend\n  path: \".askyourdocs\"       # Storage directory\n  compression: true          # Enable compression\n  collection_name: \"documents\"  # Collection name\n```\n\n## \ud83c\udfaf Examples\n\n### Quick Start with Local Models\n```yaml\n# 1. Install and setup\npip install askyourdocs\nollama serve  # In one terminal\nollama pull tinyllama:1.1b  # In another terminal\n\n# 2. Index your documents\naskyourdocs ingest ./my-documents\n\n# 3. Ask questions\naskyourdocs ask \"What are the key findings?\"\n```\n\n### Using with OpenAI\n```bash\n# 1. Install with remote provider support\npip install askyourdocs[remote]\n\n# 2. Set up OpenAI API key\nexport OPENAI_API_KEY=\"your-api-key\"\n\n# 3. Configure for OpenAI\naskyourdocs config setup --provider openai\n\n# 4. Index and query documents\naskyourdocs ingest ./documents\naskyourdocs ask \"What are the key findings in these documents?\"\n\n# 5. Verify setup\naskyourdocs status\n```\n\n### Research Papers Analysis\n```bash\n# Index your research papers\naskyourdocs ingest ./research-papers --include \"*.pdf\"\n\n# Ask analytical questions\naskyourdocs ask \"What are the common methodologies across these studies?\"\naskyourdocs ask \"Which papers mention transformer architecture?\"\naskyourdocs ask \"Summarize the key findings about neural networks\"\n```\n\n### Code Documentation\n```bash\n# Index your codebase documentation\naskyourdocs ingest ./docs --include \"*.md,*.rst\"\n\n# Query your docs\naskyourdocs ask \"How do I set up authentication?\"\naskyourdocs ask \"What are the API rate limits?\"\naskyourdocs ask \"Show me examples of database configuration\"\n```\n\n### Legal Documents\n```bash\n# Index contracts and legal docs\naskyourdocs ingest ./legal --include \"*.pdf,*.docx\"\n\n# Ask specific questions\naskyourdocs ask \"What are the termination clauses?\"\naskyourdocs ask \"What payment terms are specified?\"\naskyourdocs ask \"Are there any liability limitations?\"\n\n# Query specific contract types\naskyourdocs ask \"What are the key terms?\" --path ./employment-contracts\naskyourdocs ask \"What are the renewal conditions in ./service-agreements?\"\n```\n\n### Path-Specific Querying\n\nAskYourDocs supports querying specific paths, with automatic ingestion if needed:\n\n```bash\n# Method 1: Using --path option\naskyourdocs ask \"What are the main topics?\" --path ./research-papers\n\n# Method 2: Include path in question\naskyourdocs ask \"What are the key findings in ./data-analysis?\"\n\n# Auto-ingestion: If path isn't indexed, it will be ingested automatically\naskyourdocs ask \"Summarize the content\" --path ./new-documents\n\n# Multiple path queries\naskyourdocs ask \"Compare findings in ./study-a vs ./study-b\"\n```\n\n## \ud83d\udd27 Advanced Usage\n\n### Custom Configuration\n```bash\n# Switch to different providers (recommended method)\naskyourdocs config setup --provider ollama\naskyourdocs config setup --provider openai\naskyourdocs config setup --provider anthropic\naskyourdocs config setup --provider azure\n\n# Interactive setup (choose provider during setup)\naskyourdocs config setup\n\n# Advanced: Direct configuration (for automation/scripts)\naskyourdocs config set chunking.chunk_size 1500\naskyourdocs config set embedding.device \"cuda\"\naskyourdocs config set retrieval.top_k 10\n\n# View current configuration\naskyourdocs config show\n\n# Validate configuration\naskyourdocs config validate\n```\n\n### Monitoring and Maintenance\n```bash\n# Check system status\naskyourdocs status\n\n# Refresh index (incremental)\naskyourdocs refresh\n\n# Full rebuild (when changing chunk settings)\naskyourdocs refresh --reset\n\n# Optimize vector store\naskyourdocs refresh --optimize\n```\n\n### Backup and Migration\n```bash\n# Create backup\naskyourdocs export --output documents-backup.tar.gz --include-config\n\n# Restore from backup\naskyourdocs import --input documents-backup.tar.gz\n\n# Merge with existing index\naskyourdocs import --input additional-docs.tar.gz --merge\n```\n\n## \ud83d\udcc1 Supported File Formats\n\n| Category | Formats | Extensions |\n|----------|---------|------------|\n| **Documents** | PDF, Word, PowerPoint, OpenDocument | `.pdf`, `.docx`, `.pptx`, `.odt`, `.odp` |\n| **Text** | Plain text, Markdown, reStructuredText | `.txt`, `.md`, `.rst`, `.csv` |\n| **Code** | Source code, configuration files | `.py`, `.js`, `.java`, `.cpp`, `.yaml`, `.json` |\n| **Structured** | HTML, XML, LaTeX, Jupyter | `.html`, `.xml`, `.tex`, `.ipynb` |\n\n## \ud83c\udfd7\ufe0f Architecture\n\nAskYourDocs uses a modern RAG architecture:\n\n1. **Document Ingestion**: Files are processed and split into semantic chunks\n2. **Embedding Generation**: Text chunks are converted to vector embeddings\n3. **Vector Storage**: ChromaDB stores embeddings with metadata for fast retrieval\n4. **Query Processing**: User questions are embedded and matched against stored vectors\n5. **Context Retrieval**: Most relevant chunks are retrieved based on similarity\n6. **Response Generation**: Local LLM generates answers using retrieved context\n\n## \ud83d\udee1\ufe0f Privacy & Security\n\n- **Local Processing**: All operations happen on your machine\n- **No Data Transmission**: Documents never leave your environment\n- **Secure Storage**: Vector data stored locally with optional encryption\n- **No Telemetry**: Zero tracking or analytics\n- **Open Source**: Full transparency with auditable code\n\n## \ud83d\udd0d Troubleshooting\n\n### Common Issues\n\n**\"Configuration issues found\"**\n```bash\n# Check what's wrong\naskyourdocs status\naskyourdocs config validate\n\n# Fix with interactive setup (recommended)\naskyourdocs config setup\n```\n\n**\"Ollama connection failed\"**\n```bash\n# Check if Ollama is running\nollama list\n\n# Start Ollama if not running\nollama serve\n\n# Test connection\ncurl http://localhost:11434/api/tags\n\n# Download the default model\nollama pull tinyllama:1.1b\n\n# List available models\nollama list\n```\n\n**\"No documents found\"**\n```bash\n# Check current directory\naskyourdocs ingest --verbose\n\n# Specify path explicitly\naskyourdocs ingest /path/to/documents\n\n# Check supported formats\naskyourdocs ingest --include \"*.pdf,*.docx,*.txt\"\n```\n\n**\"Embedding model download failed\"**\n```bash\n# Check internet connection and try again\naskyourdocs refresh\n\n# Use different model\naskyourdocs config set embedding.model \"sentence-transformers/all-MiniLM-L6-v2\"\n```\n\n**\"API key not found\" (for remote providers)**\n```bash\n# Set environment variable first\nexport ANTHROPIC_API_KEY=\"sk-ant-your-key-here\"\nexport OPENAI_API_KEY=\"your-openai-key\"\nexport AZURE_OPENAI_API_KEY=\"your-azure-key\"\n\n# Then configure provider (recommended)\naskyourdocs config setup --provider anthropic\naskyourdocs config setup --provider openai\naskyourdocs config setup --provider azure\n\n# Verify configuration\naskyourdocs config validate\naskyourdocs status\n```\n\n**Performance Issues**\n```bash\n# Reduce chunk size\naskyourdocs config set chunking.chunk_size 800\n\n# Reduce batch size\naskyourdocs config set embedding.batch_size 16\n\n# Optimize storage\naskyourdocs refresh --optimize\n\n# Switch to lighter model\naskyourdocs config set model.name \"tinyllama:1.1b\"\n\n# Use GPU acceleration (if available)\naskyourdocs config set embedding.device \"cuda\"\n```\n\n### Getting Help\n\n```bash\n# Show general help\naskyourdocs --help\n\n# Show command-specific help\naskyourdocs ask --help\naskyourdocs ingest --help\n\n# Show current configuration\naskyourdocs config show\n\n# Check system status\naskyourdocs status\n```\n\n## \ud83e\uddea Development Setup\n\n### Using Poetry (Recommended)\n\n```bash\n# Clone repository\ngit clone https://github.com/lincmba/askyourdocs.git\ncd askyourdocs\n\n# Install Poetry\ncurl -sSL https://install.python-poetry.org | python3 -\n\n# Install dependencies\npoetry install --extras \"all\"\n\n# Run a basic command\n poetry run askyourdocs --help\n\n# Install pre-commit hooks\npre-commit install\n```\n\n### Using pip (Alternative)\n\n```bash\n# Clone repository\ngit clone https://github.com/lincmba/askyourdocs.git\ncd askyourdocs\n\n# Create virtual environment\npython -m venv venv\nsource venv/bin/activate  # Windows: venv\\Scripts\\activate\n\n# Install with development dependencies\npip install -e \".[dev,gpu,remote]\"\n\n# Install pre-commit hooks\npre-commit install\n```\n\n### Development Commands\n\n```bash\n# Run with coverage\npoetry run pytest\n# or: pytest\n\n# Run with coverage\npoetry run pytest --cov=askyourdocs\n# or: pytest --cov=askyourdocs\n\n# Format code\npoetry run black src/ tests/\npoetry run ruff check src/ tests/\n\n# Type checking\npoetry run mypy src/\n\n# Run all quality checks\npoetry run pre-commit run --all-files\n\n# Build package\npoetry build\n\n# Install locally for testing\npoetry install\n```\n\n*Note: Local models require initial download but then work offline. Remote models require internet and API costs.*\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes with tests\n4. Run the test suite\n5. Submit a pull request\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- **LlamaIndex**: For the excellent RAG framework\n- **ChromaDB**: For fast vector storage\n- **Ollama**: For local LLM inference\n- **Rich**: For beautiful terminal output\n- **Click**: For the CLI framework\n\n## \ud83d\udcde Support\n- \ud83d\udce7 **Email**: lincolncmba@gmail.com\n\n---\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Privacy-first, local-only CLI tool that transforms document collections into an intelligent Q&A system",
    "version": "1.0.0",
    "project_urls": {
        "Documentation": "https://github.com/lincmba/askyourdocs/blob/main/README.md",
        "Homepage": "https://github.com/lincmba/askyourdocs",
        "Repository": "https://github.com/lincmba/askyourdocs"
    },
    "split_keywords": [
        "rag",
        " ai",
        " llm",
        " documents",
        " question-answering",
        " search",
        " privacy",
        " local",
        " cli",
        " llamaindex"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cab4bfafd560c24d3f129be7f90aec666609221b46104c65d2c6ce9f9061afe1",
                "md5": "c8d2941452d8516d994b7b9e0de5b35f",
                "sha256": "50a9c37e7144bcbdb7e54bc22755ad1ccbe9759ec5938aef85a8355e8046f028"
            },
            "downloads": -1,
            "filename": "askyourdocs-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c8d2941452d8516d994b7b9e0de5b35f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.14,>=3.10",
            "size": 46100,
            "upload_time": "2025-10-06T20:23:48",
            "upload_time_iso_8601": "2025-10-06T20:23:48.670337Z",
            "url": "https://files.pythonhosted.org/packages/ca/b4/bfafd560c24d3f129be7f90aec666609221b46104c65d2c6ce9f9061afe1/askyourdocs-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7a6b5ffbb4185e36000caf6ab5ec909828af48f633f7b9ee4d9e53c951b864ab",
                "md5": "59a38d6d2de2208b1cf15df88a961f43",
                "sha256": "a0eefcb55ede3e8ded1f0aabb56347b9ffff9d8bbbba1ff43a9fd0030c242943"
            },
            "downloads": -1,
            "filename": "askyourdocs-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "59a38d6d2de2208b1cf15df88a961f43",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.14,>=3.10",
            "size": 44677,
            "upload_time": "2025-10-06T20:23:50",
            "upload_time_iso_8601": "2025-10-06T20:23:50.588683Z",
            "url": "https://files.pythonhosted.org/packages/7a/6b/5ffbb4185e36000caf6ab5ec909828af48f633f7b9ee4d9e53c951b864ab/askyourdocs-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-06 20:23:50",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "lincmba",
    "github_project": "askyourdocs",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "aiohappyeyeballs",
            "specs": [
                [
                    "==",
                    "2.6.1"
                ]
            ]
        },
        {
            "name": "aiohttp",
            "specs": [
                [
                    "==",
                    "3.12.15"
                ]
            ]
        },
        {
            "name": "aiosignal",
            "specs": [
                [
                    "==",
                    "1.4.0"
                ]
            ]
        },
        {
            "name": "aiosqlite",
            "specs": [
                [
                    "==",
                    "0.21.0"
                ]
            ]
        },
        {
            "name": "annotated-types",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "anthropic",
            "specs": [
                [
                    "==",
                    "0.67.0"
                ]
            ]
        },
        {
            "name": "anyio",
            "specs": [
                [
                    "==",
                    "4.10.0"
                ]
            ]
        },
        {
            "name": "asgiref",
            "specs": [
                [
                    "==",
                    "3.9.1"
                ]
            ]
        },
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "25.3.0"
                ]
            ]
        },
        {
            "name": "azure-core",
            "specs": [
                [
                    "==",
                    "1.35.1"
                ]
            ]
        },
        {
            "name": "azure-identity",
            "specs": [
                [
                    "==",
                    "1.25.0"
                ]
            ]
        },
        {
            "name": "backoff",
            "specs": [
                [
                    "==",
                    "2.2.1"
                ]
            ]
        },
        {
            "name": "banks",
            "specs": [
                [
                    "==",
                    "2.2.0"
                ]
            ]
        },
        {
            "name": "bcrypt",
            "specs": [
                [
                    "==",
                    "4.3.0"
                ]
            ]
        },
        {
            "name": "beautifulsoup4",
            "specs": [
                [
                    "==",
                    "4.13.5"
                ]
            ]
        },
        {
            "name": "boto3",
            "specs": [
                [
                    "==",
                    "1.40.29"
                ]
            ]
        },
        {
            "name": "botocore",
            "specs": [
                [
                    "==",
                    "1.40.29"
                ]
            ]
        },
        {
            "name": "build",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "cachetools",
            "specs": [
                [
                    "==",
                    "5.5.2"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2025.8.3"
                ]
            ]
        },
        {
            "name": "cffi",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    "==",
                    "3.4.3"
                ]
            ]
        },
        {
            "name": "chroma-hnswlib",
            "specs": [
                [
                    "==",
                    "0.7.6"
                ]
            ]
        },
        {
            "name": "chromadb",
            "specs": [
                [
                    "==",
                    "1.0.20"
                ]
            ]
        },
        {
            "name": "click",
            "specs": [
                [
                    "==",
                    "8.2.1"
                ]
            ]
        },
        {
            "name": "colorama",
            "specs": [
                [
                    "==",
                    "0.4.6"
                ]
            ]
        },
        {
            "name": "coloredlogs",
            "specs": [
                [
                    "==",
                    "15.0.1"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    "==",
                    "45.0.7"
                ]
            ]
        },
        {
            "name": "dataclasses-json",
            "specs": [
                [
                    "==",
                    "0.6.7"
                ]
            ]
        },
        {
            "name": "defusedxml",
            "specs": [
                [
                    "==",
                    "0.7.1"
                ]
            ]
        },
        {
            "name": "Deprecated",
            "specs": [
                [
                    "==",
                    "1.2.18"
                ]
            ]
        },
        {
            "name": "dirtyjson",
            "specs": [
                [
                    "==",
                    "1.0.8"
                ]
            ]
        },
        {
            "name": "distro",
            "specs": [
                [
                    "==",
                    "1.9.0"
                ]
            ]
        },
        {
            "name": "durationpy",
            "specs": [
                [
                    "==",
                    "0.10"
                ]
            ]
        },
        {
            "name": "fastapi",
            "specs": [
                [
                    "==",
                    "0.116.1"
                ]
            ]
        },
        {
            "name": "filelock",
            "specs": [
                [
                    "==",
                    "3.19.1"
                ]
            ]
        },
        {
            "name": "filetype",
            "specs": [
                [
                    "==",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "flatbuffers",
            "specs": [
                [
                    "==",
                    "25.2.10"
                ]
            ]
        },
        {
            "name": "frozenlist",
            "specs": [
                [
                    "==",
                    "1.7.0"
                ]
            ]
        },
        {
            "name": "fsspec",
            "specs": [
                [
                    "==",
                    "2025.9.0"
                ]
            ]
        },
        {
            "name": "google-auth",
            "specs": [
                [
                    "==",
                    "2.40.3"
                ]
            ]
        },
        {
            "name": "googleapis-common-protos",
            "specs": [
                [
                    "==",
                    "1.70.0"
                ]
            ]
        },
        {
            "name": "greenlet",
            "specs": [
                [
                    "==",
                    "3.2.4"
                ]
            ]
        },
        {
            "name": "griffe",
            "specs": [
                [
                    "==",
                    "1.14.0"
                ]
            ]
        },
        {
            "name": "grpcio",
            "specs": [
                [
                    "==",
                    "1.74.0"
                ]
            ]
        },
        {
            "name": "h11",
            "specs": [
                [
                    "==",
                    "0.16.0"
                ]
            ]
        },
        {
            "name": "hf-xet",
            "specs": [
                [
                    "==",
                    "1.1.9"
                ]
            ]
        },
        {
            "name": "httpcore",
            "specs": [
                [
                    "==",
                    "1.0.9"
                ]
            ]
        },
        {
            "name": "httptools",
            "specs": [
                [
                    "==",
                    "0.6.4"
                ]
            ]
        },
        {
            "name": "httpx",
            "specs": [
                [
                    "==",
                    "0.28.1"
                ]
            ]
        },
        {
            "name": "huggingface-hub",
            "specs": [
                [
                    "==",
                    "0.34.4"
                ]
            ]
        },
        {
            "name": "humanfriendly",
            "specs": [
                [
                    "==",
                    "10.0"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    "==",
                    "3.10"
                ]
            ]
        },
        {
            "name": "importlib_metadata",
            "specs": [
                [
                    "==",
                    "8.7.0"
                ]
            ]
        },
        {
            "name": "importlib_resources",
            "specs": [
                [
                    "==",
                    "6.5.2"
                ]
            ]
        },
        {
            "name": "iniconfig",
            "specs": [
                [
                    "==",
                    "2.1.0"
                ]
            ]
        },
        {
            "name": "Jinja2",
            "specs": [
                [
                    "==",
                    "3.1.6"
                ]
            ]
        },
        {
            "name": "jiter",
            "specs": [
                [
                    "==",
                    "0.10.0"
                ]
            ]
        },
        {
            "name": "jmespath",
            "specs": [
                [
                    "==",
                    "1.0.1"
                ]
            ]
        },
        {
            "name": "joblib",
            "specs": [
                [
                    "==",
                    "1.5.2"
                ]
            ]
        },
        {
            "name": "jsonschema",
            "specs": [
                [
                    "==",
                    "4.25.1"
                ]
            ]
        },
        {
            "name": "jsonschema-specifications",
            "specs": [
                [
                    "==",
                    "2025.9.1"
                ]
            ]
        },
        {
            "name": "kubernetes",
            "specs": [
                [
                    "==",
                    "33.1.0"
                ]
            ]
        },
        {
            "name": "llama-cloud",
            "specs": [
                [
                    "==",
                    "0.1.35"
                ]
            ]
        },
        {
            "name": "llama-cloud-services",
            "specs": [
                [
                    "==",
                    "0.6.54"
                ]
            ]
        },
        {
            "name": "llama-index",
            "specs": [
                [
                    "==",
                    "0.13.3"
                ]
            ]
        },
        {
            "name": "llama-index-agent-openai",
            "specs": [
                [
                    "==",
                    "0.3.4"
                ]
            ]
        },
        {
            "name": "llama-index-cli",
            "specs": [
                [
                    "==",
                    "0.5.0"
                ]
            ]
        },
        {
            "name": "llama-index-core",
            "specs": [
                [
                    "==",
                    "0.13.3"
                ]
            ]
        },
        {
            "name": "llama-index-embeddings-huggingface",
            "specs": [
                [
                    "==",
                    "0.6.0"
                ]
            ]
        },
        {
            "name": "llama-index-embeddings-openai",
            "specs": [
                [
                    "==",
                    "0.5.0"
                ]
            ]
        },
        {
            "name": "llama-index-indices-managed-llama-cloud",
            "specs": [
                [
                    "==",
                    "0.9.4"
                ]
            ]
        },
        {
            "name": "llama-index-instrumentation",
            "specs": [
                [
                    "==",
                    "0.4.0"
                ]
            ]
        },
        {
            "name": "llama-index-legacy",
            "specs": [
                [
                    "==",
                    "0.9.48.post4"
                ]
            ]
        },
        {
            "name": "llama-index-llms-anthropic",
            "specs": [
                [
                    "==",
                    "0.8.6"
                ]
            ]
        },
        {
            "name": "llama-index-llms-azure-openai",
            "specs": [
                [
                    "==",
                    "0.4.1"
                ]
            ]
        },
        {
            "name": "llama-index-llms-ollama",
            "specs": [
                [
                    "==",
                    "0.7.1"
                ]
            ]
        },
        {
            "name": "llama-index-llms-openai",
            "specs": [
                [
                    "==",
                    "0.5.4"
                ]
            ]
        },
        {
            "name": "llama-index-multi-modal-llms-openai",
            "specs": [
                [
                    "==",
                    "0.2.3"
                ]
            ]
        },
        {
            "name": "llama-index-program-openai",
            "specs": [
                [
                    "==",
                    "0.2.0"
                ]
            ]
        },
        {
            "name": "llama-index-question-gen-openai",
            "specs": [
                [
                    "==",
                    "0.2.0"
                ]
            ]
        },
        {
            "name": "llama-index-readers-file",
            "specs": [
                [
                    "==",
                    "0.5.4"
                ]
            ]
        },
        {
            "name": "llama-index-readers-llama-parse",
            "specs": [
                [
                    "==",
                    "0.5.1"
                ]
            ]
        },
        {
            "name": "llama-index-vector-stores-chroma",
            "specs": [
                [
                    "==",
                    "0.5.2"
                ]
            ]
        },
        {
            "name": "llama-index-workflows",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "llama-parse",
            "specs": [
                [
                    "==",
                    "0.6.54"
                ]
            ]
        },
        {
            "name": "lxml",
            "specs": [
                [
                    "==",
                    "5.3.0"
                ]
            ]
        },
        {
            "name": "Markdown",
            "specs": [
                [
                    "==",
                    "3.7"
                ]
            ]
        },
        {
            "name": "markdown-it-py",
            "specs": [
                [
                    "==",
                    "4.0.0"
                ]
            ]
        },
        {
            "name": "MarkupSafe",
            "specs": [
                [
                    "==",
                    "3.0.2"
                ]
            ]
        },
        {
            "name": "marshmallow",
            "specs": [
                [
                    "==",
                    "3.26.1"
                ]
            ]
        },
        {
            "name": "mdurl",
            "specs": [
                [
                    "==",
                    "0.1.2"
                ]
            ]
        },
        {
            "name": "mmh3",
            "specs": [
                [
                    "==",
                    "5.2.0"
                ]
            ]
        },
        {
            "name": "mpmath",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "msal",
            "specs": [
                [
                    "==",
                    "1.33.0"
                ]
            ]
        },
        {
            "name": "msal-extensions",
            "specs": [
                [
                    "==",
                    "1.3.1"
                ]
            ]
        },
        {
            "name": "multidict",
            "specs": [
                [
                    "==",
                    "6.6.4"
                ]
            ]
        },
        {
            "name": "mypy_extensions",
            "specs": [
                [
                    "==",
                    "1.1.0"
                ]
            ]
        },
        {
            "name": "nest-asyncio",
            "specs": [
                [
                    "==",
                    "1.6.0"
                ]
            ]
        },
        {
            "name": "networkx",
            "specs": [
                [
                    "==",
                    "3.5"
                ]
            ]
        },
        {
            "name": "nltk",
            "specs": [
                [
                    "==",
                    "3.9.1"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "2.3.2"
                ]
            ]
        },
        {
            "name": "nvidia-cublas-cu12",
            "specs": [
                [
                    "==",
                    "12.8.4.1"
                ]
            ]
        },
        {
            "name": "nvidia-cuda-cupti-cu12",
            "specs": [
                [
                    "==",
                    "12.8.90"
                ]
            ]
        },
        {
            "name": "nvidia-cuda-nvrtc-cu12",
            "specs": [
                [
                    "==",
                    "12.8.93"
                ]
            ]
        },
        {
            "name": "nvidia-cuda-runtime-cu12",
            "specs": [
                [
                    "==",
                    "12.8.90"
                ]
            ]
        },
        {
            "name": "nvidia-cudnn-cu12",
            "specs": [
                [
                    "==",
                    "9.10.2.21"
                ]
            ]
        },
        {
            "name": "nvidia-cufft-cu12",
            "specs": [
                [
                    "==",
                    "11.3.3.83"
                ]
            ]
        },
        {
            "name": "nvidia-cufile-cu12",
            "specs": [
                [
                    "==",
                    "1.13.1.3"
                ]
            ]
        },
        {
            "name": "nvidia-curand-cu12",
            "specs": [
                [
                    "==",
                    "10.3.9.90"
                ]
            ]
        },
        {
            "name": "nvidia-cusolver-cu12",
            "specs": [
                [
                    "==",
                    "11.7.3.90"
                ]
            ]
        },
        {
            "name": "nvidia-cusparse-cu12",
            "specs": [
                [
                    "==",
                    "12.5.8.93"
                ]
            ]
        },
        {
            "name": "nvidia-cusparselt-cu12",
            "specs": [
                [
                    "==",
                    "0.7.1"
                ]
            ]
        },
        {
            "name": "nvidia-nccl-cu12",
            "specs": [
                [
                    "==",
                    "2.27.3"
                ]
            ]
        },
        {
            "name": "nvidia-nvjitlink-cu12",
            "specs": [
                [
                    "==",
                    "12.8.93"
                ]
            ]
        },
        {
            "name": "nvidia-nvtx-cu12",
            "specs": [
                [
                    "==",
                    "12.8.90"
                ]
            ]
        },
        {
            "name": "oauthlib",
            "specs": [
                [
                    "==",
                    "3.3.1"
                ]
            ]
        },
        {
            "name": "ollama",
            "specs": [
                [
                    "==",
                    "0.5.3"
                ]
            ]
        },
        {
            "name": "onnxruntime",
            "specs": [
                [
                    "==",
                    "1.22.1"
                ]
            ]
        },
        {
            "name": "openai",
            "specs": [
                [
                    "==",
                    "1.102.0"
                ]
            ]
        },
        {
            "name": "opentelemetry-api",
            "specs": [
                [
                    "==",
                    "1.36.0"
                ]
            ]
        },
        {
            "name": "opentelemetry-exporter-otlp-proto-common",
            "specs": [
                [
                    "==",
                    "1.36.0"
                ]
            ]
        },
        {
            "name": "opentelemetry-exporter-otlp-proto-grpc",
            "specs": [
                [
                    "==",
                    "1.36.0"
                ]
            ]
        },
        {
            "name": "opentelemetry-instrumentation",
            "specs": [
                [
                    "==",
                    "0.57b0"
                ]
            ]
        },
        {
            "name": "opentelemetry-instrumentation-asgi",
            "specs": [
                [
                    "==",
                    "0.57b0"
                ]
            ]
        },
        {
            "name": "opentelemetry-instrumentation-fastapi",
            "specs": [
                [
                    "==",
                    "0.57b0"
                ]
            ]
        },
        {
            "name": "opentelemetry-proto",
            "specs": [
                [
                    "==",
                    "1.36.0"
                ]
            ]
        },
        {
            "name": "opentelemetry-sdk",
            "specs": [
                [
                    "==",
                    "1.36.0"
                ]
            ]
        },
        {
            "name": "opentelemetry-semantic-conventions",
            "specs": [
                [
                    "==",
                    "0.57b0"
                ]
            ]
        },
        {
            "name": "opentelemetry-util-http",
            "specs": [
                [
                    "==",
                    "0.57b0"
                ]
            ]
        },
        {
            "name": "orjson",
            "specs": [
                [
                    "==",
                    "3.11.3"
                ]
            ]
        },
        {
            "name": "overrides",
            "specs": [
                [
                    "==",
                    "7.7.0"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "25.0"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    "==",
                    "2.2.3"
                ]
            ]
        },
        {
            "name": "pillow",
            "specs": [
                [
                    "==",
                    "11.3.0"
                ]
            ]
        },
        {
            "name": "platformdirs",
            "specs": [
                [
                    "==",
                    "4.4.0"
                ]
            ]
        },
        {
            "name": "pluggy",
            "specs": [
                [
                    "==",
                    "1.6.0"
                ]
            ]
        },
        {
            "name": "posthog",
            "specs": [
                [
                    "==",
                    "5.4.0"
                ]
            ]
        },
        {
            "name": "propcache",
            "specs": [
                [
                    "==",
                    "0.3.2"
                ]
            ]
        },
        {
            "name": "protobuf",
            "specs": [
                [
                    "==",
                    "6.32.0"
                ]
            ]
        },
        {
            "name": "pyasn1",
            "specs": [
                [
                    "==",
                    "0.6.1"
                ]
            ]
        },
        {
            "name": "pyasn1_modules",
            "specs": [
                [
                    "==",
                    "0.4.2"
                ]
            ]
        },
        {
            "name": "pybase64",
            "specs": [
                [
                    "==",
                    "1.4.2"
                ]
            ]
        },
        {
            "name": "pycparser",
            "specs": [
                [
                    "==",
                    "2.23"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    "==",
                    "2.11.7"
                ]
            ]
        },
        {
            "name": "pydantic_core",
            "specs": [
                [
                    "==",
                    "2.33.2"
                ]
            ]
        },
        {
            "name": "Pygments",
            "specs": [
                [
                    "==",
                    "2.19.2"
                ]
            ]
        },
        {
            "name": "PyJWT",
            "specs": [
                [
                    "==",
                    "2.10.1"
                ]
            ]
        },
        {
            "name": "pypdf",
            "specs": [
                [
                    "==",
                    "6.0.0"
                ]
            ]
        },
        {
            "name": "PyPika",
            "specs": [
                [
                    "==",
                    "0.48.9"
                ]
            ]
        },
        {
            "name": "pyproject_hooks",
            "specs": [
                [
                    "==",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": [
                [
                    "==",
                    "8.4.2"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    "==",
                    "2.9.0.post0"
                ]
            ]
        },
        {
            "name": "python-docx",
            "specs": [
                [
                    "==",
                    "1.1.2"
                ]
            ]
        },
        {
            "name": "python-dotenv",
            "specs": [
                [
                    "==",
                    "1.1.1"
                ]
            ]
        },
        {
            "name": "python-pptx",
            "specs": [
                [
                    "==",
                    "0.6.23"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2025.2"
                ]
            ]
        },
        {
            "name": "PyYAML",
            "specs": [
                [
                    "==",
                    "6.0.2"
                ]
            ]
        },
        {
            "name": "referencing",
            "specs": [
                [
                    "==",
                    "0.36.2"
                ]
            ]
        },
        {
            "name": "regex",
            "specs": [
                [
                    "==",
                    "2025.9.1"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.32.5"
                ]
            ]
        },
        {
            "name": "requests-oauthlib",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": [
                [
                    "==",
                    "14.1.0"
                ]
            ]
        },
        {
            "name": "rpds-py",
            "specs": [
                [
                    "==",
                    "0.27.1"
                ]
            ]
        },
        {
            "name": "rsa",
            "specs": [
                [
                    "==",
                    "4.9.1"
                ]
            ]
        },
        {
            "name": "s3transfer",
            "specs": [
                [
                    "==",
                    "0.14.0"
                ]
            ]
        },
        {
            "name": "safetensors",
            "specs": [
                [
                    "==",
                    "0.6.2"
                ]
            ]
        },
        {
            "name": "scikit-learn",
            "specs": [
                [
                    "==",
                    "1.7.2"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    "==",
                    "1.16.1"
                ]
            ]
        },
        {
            "name": "sentence-transformers",
            "specs": [
                [
                    "==",
                    "5.1.0"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    "==",
                    "80.9.0"
                ]
            ]
        },
        {
            "name": "shellingham",
            "specs": [
                [
                    "==",
                    "1.5.4"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.17.0"
                ]
            ]
        },
        {
            "name": "sniffio",
            "specs": [
                [
                    "==",
                    "1.3.1"
                ]
            ]
        },
        {
            "name": "soupsieve",
            "specs": [
                [
                    "==",
                    "2.8"
                ]
            ]
        },
        {
            "name": "SQLAlchemy",
            "specs": [
                [
                    "==",
                    "2.0.43"
                ]
            ]
        },
        {
            "name": "starlette",
            "specs": [
                [
                    "==",
                    "0.47.3"
                ]
            ]
        },
        {
            "name": "striprtf",
            "specs": [
                [
                    "==",
                    "0.0.26"
                ]
            ]
        },
        {
            "name": "sympy",
            "specs": [
                [
                    "==",
                    "1.14.0"
                ]
            ]
        },
        {
            "name": "tenacity",
            "specs": [
                [
                    "==",
                    "9.1.2"
                ]
            ]
        },
        {
            "name": "threadpoolctl",
            "specs": [
                [
                    "==",
                    "3.6.0"
                ]
            ]
        },
        {
            "name": "tiktoken",
            "specs": [
                [
                    "==",
                    "0.11.0"
                ]
            ]
        },
        {
            "name": "tokenizers",
            "specs": [
                [
                    "==",
                    "0.22.0"
                ]
            ]
        },
        {
            "name": "torch",
            "specs": [
                [
                    "==",
                    "2.8.0"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    "==",
                    "4.67.1"
                ]
            ]
        },
        {
            "name": "transformers",
            "specs": [
                [
                    "==",
                    "4.56.0"
                ]
            ]
        },
        {
            "name": "triton",
            "specs": [
                [
                    "==",
                    "3.4.0"
                ]
            ]
        },
        {
            "name": "typer",
            "specs": [
                [
                    "==",
                    "0.17.4"
                ]
            ]
        },
        {
            "name": "typing-inspect",
            "specs": [
                [
                    "==",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "typing-inspection",
            "specs": [
                [
                    "==",
                    "0.4.1"
                ]
            ]
        },
        {
            "name": "typing_extensions",
            "specs": [
                [
                    "==",
                    "4.15.0"
                ]
            ]
        },
        {
            "name": "tzdata",
            "specs": [
                [
                    "==",
                    "2025.2"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "2.5.0"
                ]
            ]
        },
        {
            "name": "uvicorn",
            "specs": [
                [
                    "==",
                    "0.35.0"
                ]
            ]
        },
        {
            "name": "uvloop",
            "specs": [
                [
                    "==",
                    "0.21.0"
                ]
            ]
        },
        {
            "name": "watchdog",
            "specs": [
                [
                    "==",
                    "6.0.0"
                ]
            ]
        },
        {
            "name": "watchfiles",
            "specs": [
                [
                    "==",
                    "1.1.0"
                ]
            ]
        },
        {
            "name": "websocket-client",
            "specs": [
                [
                    "==",
                    "1.8.0"
                ]
            ]
        },
        {
            "name": "websockets",
            "specs": [
                [
                    "==",
                    "15.0.1"
                ]
            ]
        },
        {
            "name": "wrapt",
            "specs": [
                [
                    "==",
                    "1.17.3"
                ]
            ]
        },
        {
            "name": "xlsxwriter",
            "specs": [
                [
                    "==",
                    "3.2.5"
                ]
            ]
        },
        {
            "name": "yarl",
            "specs": [
                [
                    "==",
                    "1.20.1"
                ]
            ]
        },
        {
            "name": "zipp",
            "specs": [
                [
                    "==",
                    "3.23.0"
                ]
            ]
        }
    ],
    "lcname": "askyourdocs"
}
        
Elapsed time: 1.84222s