Skip to main content

Simple CLI tool for AI text rewriting with Ollama

Project description

🔥 Redukon

Reduce Your Tokens. Keep Your Intent.

PyPI Python License Stars


📋 Table of Contents


✨ What is Redukon?

Redukon is a token-saving prompt rewriter that uses local small AI models to optimize your prompts — reducing token count while keeping the core intent intact.

No API keys needed. Runs entirely offline with Ollama.

💡 Perfect for:

  • Saving money on API calls
  • Fitting more context into LLM windows
  • Making prompts more efficient
  • Building into your own apps via API

🚀 Quick Start

# Install from PyPI
pip install redukon

# Or install latest from GitHub
pip install -e https://github.com/CharlesArea/Redukon.git

# One-time setup (installs Ollama + picks a model)
redukon onboard

📖 CLI Usage

redukon onboard

Interactive setup wizard:

  1. Checks if Ollama is installed
  2. Installs Ollama if needed
  3. Choose your model:
    Model Size Best For
    qwen2.5:0.5b 397MB Speed & minimal resources
    llama3.2:1b 1.9GB Balanced
    phi3:3.8b 2.3GB Better quality

redukon rewrite

Rewrite your prompts from command line:

# Basic
redukon rewrite -i "Please write a comprehensive Python function..."

# From file
redukon rewrite -i @long-prompt.txt -o optimized.txt

# Custom temperature (lower = more focused)
redukon rewrite -i "prompt" --temp 0.3

redukon serve

Start the API server:

# Default port 8000
redukon serve

# Custom port
redukon serve --port 9000
redukon serve --host 127.0.0.1 --port 8080

🌐 API Usage

Start Server

redukon serve

Endpoints

Endpoint Method Description
/rewrite POST Rewrite a prompt (non-streaming)
/rewrite/stream POST Rewrite a prompt (streaming)
/health GET Health check

Non-Streaming Example

curl -X POST http://localhost:8000/rewrite \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Please write a comprehensive Python function that takes a list of integers...",
    "model": "qwen2.5:0.5b",
    "temperature": 0.3
  }'

Streaming Example

curl -X POST http://localhost:8000/rewrite/stream \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Your prompt here"}'

Response (SSE format):

data: {"chunk": "Write a "}
data: {"chunk": "Python function..."}
data: {"done": true, "original_tokens": 87, "optimized_tokens": 42, "saved_tokens": 45, "saved_percent": 52}

Example Response

{
  "optimized_prompt": "Write a Python function that filters even numbers from a list...",
  "original_tokens": 87,
  "optimized_tokens": 42,
  "saved_tokens": 45,
  "saved_percent": 52
}

API Parameters

Parameter Type Required Description
prompt string Yes The prompt to optimize
model string No Model name (default: from config)
temperature float No Temperature 0.0-1.0 (default: 0.3)

📝 Logging

API requests are logged to log/api-YYYY-MM-DD.log:

[2026-03-10 12:00:00] [REQUEST] input_length=250, model=qwen2.5:0.5b
[2026-03-10 12:00:05] [RESPONSE] output_length=120, original_tokens=62, optimized_tokens=30, saved_tokens=32, saved_percent=51%
[2026-03-10 12:00:05] [ERROR] Generation failed: Ollama not running

🐳 Docker

Option 1: API Server Only (connects to Ollama on host)

# Build image
docker build -t redukon .

# Run (ensure Ollama is running on host)
docker run -d -p 8000:8000 --network host redukon

Option 2: Full Stack with docker-compose

# Start both Redukon API and Ollama
docker-compose up -d

# Stop
docker-compose down

📦 Batch Mode

Process multiple prompts at once!

CLI

# From file with multiple prompts (one per line)
redukon batch -i prompts.txt

# Multiple files
redukon batch -i @file1.txt @file2.txt

# With output
redukon batch -i prompts.txt -o results/
redukon batch -i prompts.txt -o results.json

API

curl -X POST http://localhost:8000/batch \
  -H "Content-Type: application/json" \
  -d '{
    "prompts": [
      "First prompt to optimize",
      "Second prompt to optimize",
      "Third prompt to optimize"
    ],
    "model": "qwen2.5:0.5b",
    "temperature": 0.3
  }'

Response:

{
  "results": [
    {"index": 0, "original": "...", "optimized_prompt": "...", "saved_tokens": 10, "saved_percent": 25},
    {"index": 1, "original": "...", "optimized_prompt": "...", "saved_tokens": 15, "saved_percent": 30}
  ],
  "summary": {
    "total": 2,
    "processed": 2,
    "total_original_tokens": 100,
    "total_saved_tokens": 25,
    "overall_saved_percent": 25
  }
}

⚡ Example

Before (87 tokens) After (42 tokens)
"Please write a comprehensive Python function that takes a list of integers as input and returns a new list containing only the even numbers from the original list. The function should handle edge cases like empty lists, lists with no even numbers, and lists with negative numbers. Please include proper type hints, docstrings, and error handling." "Write a Python function that filters even numbers from a list. Include type hints, error handling, and docstrings."

📉 Savings: ~52%


🔧 Options

Flag Description Default
-i, --input Prompt or @file.txt Required
-o, --output Output file Print to stdout
-m, --model Override model From config
-t, --temp Temperature (0.0-1.0) 0.3

🛠️ Requirements

  • Python 3.10+
  • Ollama (installed automatically during onboard)

📝 License

MIT © 2026 CharlesArea


Made with ❤️ for the AI community

GitHubPyPIReport Bug

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

redukon-3.3.0-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file redukon-3.3.0-py3-none-any.whl.

File metadata

  • Download URL: redukon-3.3.0-py3-none-any.whl
  • Upload date:
  • Size: 12.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for redukon-3.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7226295e6ac51e3d08f666601eb024e069e6efe993201c867094c61ed8308bd1
MD5 b0af6d01a5d2d96133b1d2669cdc0409
BLAKE2b-256 cfebace624f2c6aaa1d71b50eae9056315e9f24ae05ba340e4fae30435f51907

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page