mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-01 04:42:10 +03:00
Break out long-form README content into focused documentation pages for core onboarding and operations topics. Refresh the README navigation to point readers to the new guides while keeping high-level product sections easier to scan.
184 lines
5.9 KiB
Markdown
184 lines
5.9 KiB
Markdown
# 🗜️ Prompt Compression Guide — OmniRoute
|
|
|
|
> Save 15-75% on token costs automatically. For a quick overview, see the [README Compression section](../README.md#%EF%B8%8F-prompt-compression--save-15-75-tokens-automatically).
|
|
|
|
## Overview
|
|
|
|
OmniRoute implements a modular prompt compression pipeline that runs **proactively** before requests hit upstream providers. This means your token savings happen transparently — no changes needed to your workflow.
|
|
|
|
```
|
|
Client Request
|
|
→ Compression Strategy Selector
|
|
→ Combo override? → Use combo setting
|
|
→ Auto-trigger threshold? → Use auto mode
|
|
→ Default mode? → Use global setting
|
|
→ Off? → Skip compression
|
|
→ Selected Compression Mode
|
|
→ Off: No compression
|
|
→ Lite: Safe whitespace/formatting cleanup (~15%)
|
|
→ Standard: Caveman-speak filler removal (~30%)
|
|
→ Aggressive: History aging + summarization (~50%)
|
|
→ Ultra: Heuristic pruning + code-block thinning (~75%)
|
|
→ Compressed Request → Provider
|
|
```
|
|
|
|
---
|
|
|
|
## Compression Modes
|
|
|
|
### Off
|
|
|
|
No compression applied. All messages pass through unchanged.
|
|
|
|
### Lite Mode (~15% savings, <1ms latency)
|
|
|
|
The safest mode — zero semantic change, only formatting cleanup:
|
|
|
|
| Technique | Description |
|
|
| ------------------------ | ------------------------------------------------- |
|
|
| `collapseWhitespace` | Merge consecutive blank lines and trailing spaces |
|
|
| `dedupSystemPrompt` | Remove duplicate system messages |
|
|
| `compressToolResults` | Compress verbose tool/function outputs |
|
|
| `removeRedundantContent` | Strip repeated instructions |
|
|
| `replaceImageUrls` | Shorten base64 image data URIs |
|
|
|
|
**Best for:** Always-on usage, safety-critical workflows.
|
|
|
|
### Standard Mode (~30% savings)
|
|
|
|
Inspired by [Caveman](https://github.com/JuliusBrussee/caveman) — removes filler words and verbose phrasing while preserving meaning:
|
|
|
|
- Removes filler words ("please", "I think", "basically", "actually")
|
|
- Condenses verbose phrases ("in order to" → "to", "as a result of" → "because")
|
|
- Strips polite hedging ("Would you mind...", "If you could possibly...")
|
|
- 30+ regex rules tuned for coding prompts
|
|
|
|
**Best for:** Daily coding workflows, cost-conscious teams.
|
|
|
|
### Aggressive Mode (~50% savings)
|
|
|
|
Smart history management for long sessions:
|
|
|
|
- **Message Aging** — older messages get progressively compressed
|
|
- **Tool Result Summarization** — long tool outputs replaced with summaries
|
|
- **Structural Integrity Guards** — ensures `tool_use` + `tool_result` pairs stay consistent
|
|
- **Context Window Awareness** — respects per-model token limits
|
|
|
|
**Best for:** Extended debugging sessions, large codebases.
|
|
|
|
### Ultra Mode (~75% savings)
|
|
|
|
Maximum compression for token-critical scenarios:
|
|
|
|
- **Heuristic Pruning** — removes messages below relevance threshold
|
|
- **Code Block Thinning** — compresses repetitive code examples
|
|
- **Binary Search Truncation** — finds optimal cut point for context window
|
|
- All Aggressive mode features included
|
|
|
|
**Best for:** When you're hitting context limits repeatedly.
|
|
|
|
---
|
|
|
|
## Token Savings Visualization
|
|
|
|
```
|
|
Without compression: 47K tokens sent to LLM
|
|
With Lite: 40K tokens sent (15% saved — safe, always-on)
|
|
With Standard: 33K tokens sent (30% saved — caveman-speak rules)
|
|
With Aggressive: 24K tokens sent (50% saved — aging + summarization)
|
|
With Ultra: 12K tokens sent (75% saved — heuristic pruning)
|
|
```
|
|
|
|
---
|
|
|
|
## Configuration
|
|
|
|
### Dashboard
|
|
|
|
Navigate to `Dashboard → Settings → Compression`:
|
|
|
|
- **Default Mode** — sets the system-wide compression mode
|
|
- **Auto-Trigger Threshold** — automatically engage compression when token count exceeds threshold
|
|
- **Per-Combo Override** — each combo can have its own compression mode
|
|
|
|
### Per-Combo Override
|
|
|
|
In `Dashboard → Combos → [Your Combo] → Advanced`, set compression mode per combo:
|
|
|
|
```txt
|
|
Combo: "free-forever"
|
|
Mode: Standard
|
|
Targets:
|
|
1. gc/gemini-3-flash
|
|
2. if/kimi-k2-thinking
|
|
```
|
|
|
|
This lets you use aggressive compression on free providers while keeping lite mode on paid subscriptions.
|
|
|
|
### API
|
|
|
|
```bash
|
|
# Get compression settings
|
|
curl http://localhost:20128/api/settings/compression
|
|
|
|
# Update compression settings
|
|
curl -X PUT http://localhost:20128/api/settings/compression \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"defaultMode":"lite","autoTriggerThreshold":32000}'
|
|
```
|
|
|
|
---
|
|
|
|
## What Gets Protected
|
|
|
|
The compression engine **always preserves:**
|
|
|
|
- ✅ Code blocks (fenced and inline)
|
|
- ✅ URLs and file paths
|
|
- ✅ JSON structures and structured data
|
|
- ✅ API keys, tokens, and identifiers
|
|
- ✅ Mathematical expressions
|
|
- ✅ Tool/function call definitions
|
|
- ✅ System prompts (in lite mode)
|
|
|
|
---
|
|
|
|
## Compression Stats
|
|
|
|
Every compressed request includes stats in the server logs:
|
|
|
|
```json
|
|
{
|
|
"originalTokens": 47200,
|
|
"compressedTokens": 40120,
|
|
"savingsPercent": 15.0,
|
|
"techniquesUsed": ["collapseWhitespace", "dedupSystemPrompt"],
|
|
"mode": "lite",
|
|
"latencyMs": 0.8
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Phase Roadmap
|
|
|
|
| Phase | Modes | Status |
|
|
| ------- | ------------------------------------ | ---------- |
|
|
| Phase 1 | Off, Lite | ✅ Shipped |
|
|
| Phase 2 | Standard, Aggressive, Ultra | ✅ Shipped |
|
|
| Phase 3 | Per-model adaptive, ML-based pruning | 🗓️ Planned |
|
|
|
|
---
|
|
|
|
## Acknowledgments
|
|
|
|
Standard mode compression rules are inspired by **[Caveman](https://github.com/JuliusBrussee/caveman)** by **[JuliusBrussee](https://github.com/JuliusBrussee)** (⭐ 51K+) — the viral "why use many token when few token do trick" project.
|
|
|
|
---
|
|
|
|
## See Also
|
|
|
|
- [Environment Config](ENVIRONMENT.md) — Compression environment variables
|
|
- [Architecture Guide](ARCHITECTURE.md) — Compression pipeline internals
|
|
- [User Guide](USER_GUIDE.md) — Getting started with compression
|