prollama
Intelligent LLM Execution Layer for developer teams.
Anonymize code → route to the cheapest capable model → solve tickets autonomously.
AI Cost Tracking
This project uses AI-generated code. Total cost: $1.2000 with 8 AI commits.
Generated on 2026-04-02 using openrouter/qwen/qwen3-coder-next
Why prollama?
AI coding tools send your code — secrets, business logic, customer names — to cloud LLMs. prollama sits between your tools and the LLM, stripping sensitive data before it leaves your machine.
Three layers of anonymization:
- Regex — API keys, tokens, connection strings, emails, IPs (70+ patterns, <1ms)
- NLP — Person names in comments, addresses, SSNs (heuristic or Presidio, ~5ms)
- AST — Class/function/variable names via tree-sitter (business logic hidden, ~20ms)
# BEFORE (what you write) # AFTER (what the LLM sees)
class StripePaymentProcessor: class Class_001:
def charge_customer(self, amount): def var_001(self, var_002):
key = "sk_live_4eC39HqL..." key = "[SECRET_001]"
return self.stripe.charge(amount) return self.var_003.var_004(var_002)
After the LLM responds, prollama reverses the mapping and returns code with your original names.
Quick Start
pip install prollama
prollama init # Create config
prollama solve "Fix the TypeError in auth.py" --file src/auth.py --dry-run
prollama anonymize src/payment.py --level full
prollama shell # Interactive REPL
Installation
pip install prollama # Core CLI + shell
pip install prollama[ast] # + tree-sitter AST anonymization (recommended)
pip install prollama[proxy] # + FastAPI proxy server
pip install prollama[nlp] # + Presidio ML-based PII detection
pip install prollama[all] # Everything
pip install prollama[dev] # + pytest, ruff, mypy
Features
CLI
| Command | Description |
|---|---|
prollama init |
Create config at ~/.prollama/config.yaml |
prollama start |
Start OpenAI-compatible proxy with anonymization |
prollama status |
Show config and provider status |
prollama solve DESC |
Solve a coding task via LLM orchestration |
prollama anonymize FILE |
Anonymize source code and show report |
prollama config show |
Show full config as JSON |
prollama shell |
Interactive REPL with tab-completion |
Interactive Shell
$ prollama shell
╭─ prollama shell v0.1.0 ──────────────────────────────────╮
│ Privacy: full │ Routing: cost-optimized │ Providers: ollama│
│ Type help for commands or describe a task to solve it. │
╰──────────────────────────────────────────────────────────╯
prollama ▸ Fix missing type hints in utils.py
Task: Fix missing type hints in utils.py
Type: fix Complexity: simple Model: qwen2.5-coder:7b
Solving...
✓ Solved in 1 iter, 2.3s, $0.0000
prollama ▸ history
prollama ▸ models
prollama ▸ cost
Proxy Server
prollama start
export OPENAI_BASE_URL=http://localhost:8741/v1
# Now every request from any OpenAI-compatible tool is anonymized automatically
Endpoints: /v1/chat/completions, /v1/models, /v1/anonymize, /health, /metrics
Model Routing
Cost-optimized escalation: cheap model → mid → premium → top.
| Tier | Examples | When |
|---|---|---|
| CHEAP | qwen2.5-coder:7b (local) | Typos, lint, formatting |
| MID | qwen2.5-coder:32b, DeepSeek | Bug fixes, error handling |
| PREMIUM | GPT-4o-mini, Claude Haiku | Refactors, new endpoints |
| TOP | GPT-4o, Claude Sonnet | Architecture, multi-file |
~60-80% of tasks resolve on cheap models, keeping costs minimal.
Architecture
┌───────────────────────────────────────────────────┐
│ prollama │
├──────────┬──────────────┬────────────┬────────────┤
│ Anonymizer│ Model Router │ Executor │ Proxy │
│ ┌────────┐│ ┌───────────┐│ ┌────────┐ │ ┌────────┐│
│ │ Regex ││ │ Classify ││ │ Solve │ │ │ /v1/ ││
│ │ NLP ││ │ Select ││ │ Iterate│ │ │ chat/ ││
│ │ AST ││ │ Escalate ││ │ Test │ │ │ compl. ││
│ └────────┘│ └───────────┘│ └────────┘ │ └────────┘│
└──────────┴──────────────┴────────────┴────────────┘
↕ ↕ ↕
tree-sitter LLM providers pytest/ruff
Presidio (Ollama, OpenAI, Anthropic)
Docker
docker compose up -d # prollama + Ollama
Development
git clone https://github.com/softreck/prollama.git
cd prollama
pip install -e ".[dev,ast]"
make test # 124 tests
make lint # ruff
make coverage # pytest-cov
make check # all of the above
Project Structure
prollama/
├── src/prollama/
│ ├── anonymizer/ # Three-layer anonymization pipeline
│ │ ├── regex_layer.py # Layer 1: 70+ secret/PII patterns
│ │ ├── nlp_layer.py # Layer 2: PII in comments (heuristic/Presidio)
│ │ ├── ast_layer.py # Layer 3: tree-sitter identifier renaming
│ │ └── pipeline.py # Orchestrator: regex → NLP → AST
│ ├── router/
│ │ └── model_router.py # Cost-optimized model selection + escalation
│ ├── executor/
│ │ └── task_executor.py # Full solve loop with test validation
│ ├── cli.py # Click CLI (8 commands)
│ ├── shell.py # Interactive REPL (prompt-toolkit)
│ ├── proxy.py # FastAPI OpenAI-compatible proxy
│ ├── config.py # YAML config with Pydantic
│ └── models.py # Domain models and enums
├── tests/ # 124 tests across 8 test files
├── examples/ # Sample code + runnable scripts
├── docs/ # Full documentation (10 pages)
├── .github/workflows/ci.yml # CI: Python 3.10-3.13 matrix
├── Dockerfile # Container image
├── docker-compose.yml # prollama + Ollama
├── Makefile # Development commands
├── CHANGELOG.md
├── CONTRIBUTING.md
└── LICENSE # Apache 2.0
Part of the pyqual Ecosystem
prollama is the fix provider for pyqual quality gate loops.
# pyqual.yaml
stages:
- name: fix
provider: prollama
strategy: auto
when: metrics_fail
License
Licensed under Apache-2.0.
Metadata
Release files for prollama 0.2.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| prollama-0.2.8.tar.gz | 240.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| prollama-0.2.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 305.9 kB
Release files / prollama-0.2.8.tar.gz
| Download URL | prollama-0.2.8.tar.gz |
|---|---|
| Size | 240.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d58be6c645f745b2b956f00db2358cb95e980844c45c3d3da8f385c7d5571a82
|
|
BLAKE2b-256 checksum How to use checksums |
dc5054984c4e1c475c80a817e8e3fb9c0bcf8d5369fd7d90171cc099379c4e0f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / prollama-0.2.8-py3-none-any.whl
| Download URL | prollama-0.2.8-py3-none-any.whl |
|---|---|
| Size | 65.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4cd7605ee58676257ec3c7182dbaeca715fbdc9750931886d6a0021b8513208d
|
|
BLAKE2b-256 checksum How to use checksums |
be7fe25c5684e53a52e2ea9007ee8817cdeeab951bb98e2b66fcbf3775c50d0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|