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.1.tar.gz (219.7 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.1-py3-none-any.whl (87.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: janus_ai-0.2.1.tar.gz
  • Upload date:
  • Size: 219.7 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.1.tar.gz
Algorithm Hash digest
SHA256 9aa35a3207b209a7818b8eeecca26c39b60b301e1a3bf54cd61e814bfdb64758
MD5 43dadbd460b72852a5e968812729c37a
BLAKE2b-256 2a0495b48b48175d28936ce66c4eb3ebdd92a44cc9082f70c375d4849cd2796d

See more details on using hashes here.

Provenance

The following attestation bundles were made for janus_ai-0.2.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: janus_ai-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 87.6 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5f667ec01e831f1d336106ab30a91262f6d2bda6564ca86aca092379f171d1fe
MD5 0485066da0530ef39941471c14eca240
BLAKE2b-256 c0cbda8e63a1db5cffe2c27f36ac0c29d133f9516faaf020526608f0b41e1bfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for janus_ai-0.2.1-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