Skip to main content

The two-faced AI routing gateway

Project description

Janus

The two-faced gateway for AI coding tools. Janus sits at the threshold of every AI call — facing the developer on one side and every provider on the other.

Janus is a local-first, single-user AI routing gateway. It exposes OpenAI/Anthropic-compatible HTTP endpoints that your coding tools (Claude Code, Codex, Cursor, Cline, ...) talk to, then translates and routes each request to 40+ AI providers — without either side needing to know the other exists.

Quickstart

# Install
pip install -e .

# Generate default config
janus config-init

# Start the server
janus serve --port 20128

Point your coding tool at http://localhost:20128/v1 and start routing.

📚 Documentation · Contributing · Changelog

Docker

# Create config in the persistent volume
mkdir -p janus-data
cp ~/.janus/config.yaml janus-data/config.yaml  # or create one with janus config-init

# Build and run
docker compose up -d

The SQLite database and config persist in ./janus-data/. Environment variables from .env are passed through for ${ENV_VAR} resolution in config.

Configuration

Janus reads YAML config from ~/.janus/config.yaml with ${ENV_VAR} token resolution. Generate a template with janus config-init.

server:
  port: 20128
  host: 127.0.0.1
  require_api_key: false

providers:
  - id: openai
    prefix: openai
    api_type: openai_compat
    base_url: https://api.openai.com/v1
    api_key: ${OPENAI_API_KEY}
    models: [gpt-4o, gpt-4o-mini, o3, o4-mini]

  - id: anthropic
    prefix: anthropic
    api_type: anthropic
    base_url: https://api.anthropic.com
    api_key: ${ANTHROPIC_API_KEY}
    models: [claude-sonnet-4-20250514, claude-opus-4-20250514]

combos:
  - name: best-effort
    models: [anthropic/claude-sonnet-4-20250514, openai/gpt-4o]

Supported Provider Types

api_type Use For
openai_compat Any OpenAI-compatible API (OpenAI, Groq, Together, DeepSeek, OpenRouter, Mistral, Fireworks, Perplexity, xAI, ...)
anthropic Direct Anthropic API
gemini Direct Google Gemini API
opencode_free OpenCode Zen free tier

Known Provider Base URLs

Provider base_url
OpenAI https://api.openai.com/v1
Groq https://api.groq.com/openai/v1
Together AI https://api.together.xyz/v1
DeepSeek https://api.deepseek.com/v1
OpenRouter https://openrouter.ai/api/v1
Mistral https://api.mistral.ai/v1
Fireworks https://api.fireworks.ai/inference/v1
Perplexity https://api.perplexity.ai
xAI (Grok) https://api.x.ai/v1
Qwen/DashScope https://dashscope.aliyuncs.com/compatible-mode/v1

Client Setup

Point your coding tools at Janus:

Claude Code / Anthropic tools:

export ANTHROPIC_BASE_URL=http://localhost:20128/v1

OpenAI tools (Codex, Cursor, etc.):

export OPENAI_BASE_URL=http://localhost:20128/v1
export OPENAI_API_KEY=sk-janus-yourkey  # if require_api_key is on

Features

  • Fallback routing — multi-account rotation with cooldowns (429->60s, 5xx->30s, auth->300s, network->15s)
  • Combos — named ordered model sequences (e.g., "model": "best-effort")
  • Token savers — RTK compression (default ON), Caveman terse prompt, Ponytail lazy-dev prompt
  • Budgets — daily spending limits per API key or global, with warn/block thresholds
  • Analytics — cost tracking, spend trends, success rates, per-model/provider/key breakdowns
  • Pricing — 28 builtin model prices, YAML-overridable, cache token rates
  • Dashboard — HTMX UI at /dashboard with charts, budget management, usage stats

CLI Reference

Command Description
janus serve Start the gateway server
janus config-init Generate default config YAML
janus config-path Print config file path
janus keys create/list/revoke Manage API keys
janus usage stats/cost/by-key Usage and cost reports
janus budgets list/set/delete Manage spending budgets
janus pricing list/show View model pricing

Development

git clone https://github.com/amanverasia/Janus.git
cd Janus
python -m venv .venv
pip install -e ".[dev]"

# Run tests
.venv/bin/python -m pytest

# Lint + typecheck
.venv/bin/ruff check src/janus/ tests/
.venv/bin/mypy src/janus/

# Start dev server
.venv/bin/janus serve --port 20128 --reload

Tech Stack

Python 3.11+ / FastAPI / httpx / Pydantic v2 / aiosqlite / Jinja2 / HTMX / Chart.js

License

GPL-3.0 © 2026 Aman Verasia

Project details


Download files

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

Source Distribution

janus_ai-0.2.2.tar.gz (220.0 kB view details)

Uploaded Source

Built Distribution

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

janus_ai-0.2.2-py3-none-any.whl (87.8 kB view details)

Uploaded Python 3

File details

Details for the file janus_ai-0.2.2.tar.gz.

File metadata

  • Download URL: janus_ai-0.2.2.tar.gz
  • Upload date:
  • Size: 220.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for janus_ai-0.2.2.tar.gz
Algorithm Hash digest
SHA256 391144cc88136f8b54d4a50f2b00e89014955d3b19a61b08b02747770376f877
MD5 3c552585807d2cea2601c3ed353247a8
BLAKE2b-256 1448519963ccf974d9258ff9c5cca6591b4131d3416410623a7d0688133ec3bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for janus_ai-0.2.2.tar.gz:

Publisher: publish.yml on amanverasia/Janus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file janus_ai-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: janus_ai-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 87.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for janus_ai-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e90075c3e494180c122241c4377819f1f8b3e410435907eb8c918aa950cdb641
MD5 e4041cebdfd5303cfd0781903238310c
BLAKE2b-256 01415720364ad99ebe8237bd3ad0abd61a7586d00521aff0900ed94c9a352a78

See more details on using hashes here.

Provenance

The following attestation bundles were made for janus_ai-0.2.2-py3-none-any.whl:

Publisher: publish.yml on amanverasia/Janus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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