Metadata-Version: 2.4
Name: vectorless-qv
Version: 0.2.1
Summary: Reasoning-based RAG for Excel financial models — no vectors, no chunking. Supports all major LLM providers.
License: MIT
Requires-Python: >=3.11
Requires-Dist: formulas>=1.2
Requires-Dist: openpyxl>=3.1
Requires-Dist: pandas>=2.0
Provides-Extra: all
Requires-Dist: anthropic>=0.30; extra == 'all'
Requires-Dist: boto3>=1.28; extra == 'all'
Requires-Dist: google-genai>=1.0; extra == 'all'
Requires-Dist: groq>=0.4; extra == 'all'
Requires-Dist: openai>=1.0; extra == 'all'
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.30; extra == 'anthropic'
Provides-Extra: azure
Requires-Dist: openai>=1.0; extra == 'azure'
Provides-Extra: bedrock
Requires-Dist: boto3>=1.28; extra == 'bedrock'
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == 'dev'
Requires-Dist: ruff>=0.1; extra == 'dev'
Provides-Extra: google
Requires-Dist: google-genai>=1.0; extra == 'google'
Provides-Extra: groq
Requires-Dist: groq>=0.4; extra == 'groq'
Provides-Extra: ollama
Requires-Dist: openai>=1.0; extra == 'ollama'
Provides-Extra: openai
Requires-Dist: openai>=1.0; extra == 'openai'
Provides-Extra: together
Requires-Dist: openai>=1.0; extra == 'together'
Description-Content-Type: text/markdown

# Vectorless-QV

**Reasoning-based RAG for Excel financial models — no vectors, no chunking.**

Inspired by the [PageIndex](https://github.com/VectifyAI/PageIndex) architecture, Vectorless builds a hierarchical tree index of an Excel workbook and uses an LLM reasoning loop to navigate it — just like a financial analyst would.

Supports **all major LLM providers**: AWS Bedrock, OpenAI, Anthropic, Google Gemini, Azure OpenAI, Ollama (local), Groq, and Together AI.

## Features

- **No vector database** — no embeddings, no similarity search
- **No chunking** — formulas and cell relationships stay intact
- **Hierarchical tree index** — sheets → tables → formulas → cells
- **LLM-driven reasoning** — parallel tool calls, search, drill-down
- **Formula tracing** — follows `=+PL!X118` across sheets
- **What-if analysis** — override cells and recalculate formulas
- **100% traceable** — every answer cites exact sheet, cell, and formula
- **Multi-provider LLM support** — swap providers with a single flag

## Installation

```bash
pip install vectorless-qv
```

Install with the LLM provider(s) you need:

```bash
pip install vectorless-qv[bedrock]     # AWS Bedrock (Claude, Titan, Llama, Mistral)
pip install vectorless-qv[openai]      # OpenAI (GPT-4o, o1, o3)
pip install vectorless-qv[anthropic]   # Anthropic direct API (Claude)
pip install vectorless-qv[google]      # Google Gemini
pip install vectorless-qv[azure]       # Azure OpenAI
pip install vectorless-qv[ollama]      # Ollama local models
pip install vectorless-qv[groq]        # Groq Cloud
pip install vectorless-qv[together]    # Together AI
pip install vectorless-qv[all]         # All providers
```

## Quick Start

### 1. Index a workbook

```bash
vectorless-qv index --file financials.xlsx
```

This creates two files:
- `financials.tree.json` — the hierarchical tree index
- `financials.parsed.json` — raw cell data for query-time lookups

### 2. Ask questions

```bash
# Single question (default: AWS Bedrock)
vectorless-qv query --file financials.xlsx -q "What is the gross margin?"

# Use a different provider
vectorless-qv query --file financials.xlsx --provider openai -q "What is the gross margin?"

# Use a specific model
vectorless-qv query --file financials.xlsx --provider anthropic --model claude-opus-4-20250514 -q "..."

# Local model via Ollama
vectorless-qv query --file financials.xlsx --provider ollama --model llama3.1 -q "..."

# Interactive mode
vectorless-qv query --file financials.xlsx --provider openai

# With reasoning trace
vectorless-qv query --file financials.xlsx -q "How is EBITDA calculated?" -v
```

### 3. Discover providers and models

```bash
# List all providers
vectorless-qv list-providers

# Show models for a specific provider
vectorless-qv list-providers --provider openai
```

### 4. Inspect the tree

```bash
# Full overview
vectorless-qv inspect --file financials.xlsx

# Specific node
vectorless-qv inspect --file financials.xlsx --node s1_t0
```

## Python API

```python
from vectorless_qv import parse_workbook, build_tree, VectorlessAgent

# Parse and index
data = parse_workbook("financials.xlsx")
tree = build_tree(data)

# Query with any provider
agent = VectorlessAgent(tree=tree, workbook_data=data, excel_path="financials.xlsx",
                        provider="openai", model_id="gpt-4o")
result = agent.query("What drives net income?")
print(result["answer"])
print(result["citations"])

# Switch to local Ollama
agent = VectorlessAgent(tree=tree, workbook_data=data, excel_path="financials.xlsx",
                        provider="ollama", model_id="llama3.1")

# Or use Bedrock (default)
agent = VectorlessAgent(tree=tree, workbook_data=data, excel_path="financials.xlsx")

# List available providers programmatically
from vectorless_qv import list_providers
for p in list_providers():
    print(f"{p['name']}: {p['default_model']} ({len(p['models'])} models)")
```

> **Note:** `BedrockAgent` is still available as a backward-compatible alias for `VectorlessAgent`.

## Supported Providers

| Provider | Install | Default Model | Env Variable |
|----------|---------|---------------|--------------|
| `bedrock` | `pip install vectorless-qv[bedrock]` | `global.anthropic.claude-sonnet-4-6` | `AWS_DEFAULT_REGION`, `AWS_ACCESS_KEY_ID` |
| `openai` | `pip install vectorless-qv[openai]` | `gpt-4o` | `OPENAI_API_KEY` |
| `anthropic` | `pip install vectorless-qv[anthropic]` | `claude-sonnet-4-20250514` | `ANTHROPIC_API_KEY` |
| `google` | `pip install vectorless-qv[google]` | `gemini-2.0-flash` | `GOOGLE_API_KEY` |
| `azure` | `pip install vectorless-qv[azure]` | `gpt-4o` | `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT` |
| `ollama` | `pip install vectorless-qv[ollama]` | `llama3.1` | `OLLAMA_BASE_URL` (default: `localhost:11434`) |
| `groq` | `pip install vectorless-qv[groq]` | `llama-3.3-70b-versatile` | `GROQ_API_KEY` |
| `together` | `pip install vectorless-qv[together]` | `Llama-3.3-70B-Instruct-Turbo` | `TOGETHER_API_KEY` |

## Architecture

```
Excel File
    │
    ▼
┌──────────┐     ┌──────────┐     ┌──────────┐
│  Parser  │────▶│ Indexer   │────▶│ Tree JSON│
│(openpyxl)│     │(hierarchy)│     │  (ToC)   │
└──────────┘     └──────────┘     └──────────┘
                                       │
                                       ▼
                               ┌───────────────┐
                               │VectorlessAgent│◀── User Question
                               │ (any LLM)     │
                               └──────┬────────┘
                                      │
                    ┌─────────────────┼─────────────────┐
                    ▼                 ▼                 ▼
              drill_down         get_cells         search_rows
              get_row            what_if            answer
                                      │
                    ┌─────────────────┼─────────────────┐
                    ▼                 ▼                 ▼
                Bedrock           OpenAI            Ollama
                Anthropic         Google            Groq
                Azure             Together          ...
```

## License

MIT
