# AskYourDocs ๐๐
[](https://badge.fury.io/py/askyourdocs)
[](https://www.python.org/downloads/)
[](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[](https://badge.fury.io/py/askyourdocs)\n[](https://www.python.org/downloads/)\n[](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"
}