Skip to main content

LLM orchestrator - route prompts to any model via litellm

Project description

orcx

LLM orchestrator - route prompts to any model via litellm.

Alpha - Core functionality works, API may change.

Why orcx?

  • 100+ providers via litellm - OpenRouter, OpenAI, Anthropic, Google, etc.
  • Agent presets - Save model + system prompt + parameters as reusable configs
  • Conversations - Multi-turn with -c continue and --resume ID
  • OpenRouter routing - Control quantization, provider selection, sorting
  • Cost tracking - See what each request costs
  • Simple - Just route prompts, not a full agent framework

Install

uv tool install orcx
# or
pip install orcx

Quick Start

# Set your API key
export OPENROUTER_API_KEY=sk-or-...

# Run a prompt
orcx run -m openrouter/deepseek/deepseek-v3.2 "hello"

# With file context
orcx run -m openrouter/deepseek/deepseek-v3.2 -f code.py "review this"

# Show cost
orcx run -m openrouter/deepseek/deepseek-v3.2 "hello" --cost

Usage

# Direct model (provider/model format)
orcx run -m openrouter/deepseek/deepseek-v3.2 "hello"

# Using model alias (if configured)
orcx run -m deepseek "hello"

# Using agent preset
orcx run -a reviewer "review this code"

# With file context
orcx run -a reviewer -f src/main.py "review this"

# Multiple files
orcx run -m deepseek -f code.py -f tests.py "explain the tests"

# Pipe from stdin
cat code.py | orcx run -a reviewer "review this"

# JSON output (includes usage/cost)
orcx run -m deepseek "hello" --json

# Custom system prompt
orcx run -m deepseek -s "You are a pirate" "greet me"

# Save response to file
orcx run -m deepseek "explain async" -o response.md

Conversations

Conversations are saved automatically. Continue or resume them:

# Start a conversation (prints ID like [a1b2])
orcx run -m deepseek "explain python decorators"
# [a1b2]

# Continue last conversation
orcx run -c "show me an example"

# Resume specific conversation
orcx run --resume a1b2 "what about class decorators?"

# Don't save this exchange
orcx run --no-save -m deepseek "quick question"

# List recent conversations
orcx conversations

# Show full conversation
orcx conversations show a1b2

# Delete conversation
orcx conversations delete a1b2

# Clean old conversations (default: 30 days)
orcx conversations clean --days 7

Conversations are stored in ~/.config/orcx/conversations.db.

Configuration

Config location: ~/.config/orcx/

config.yaml

# Default model (used when no -m or -a specified)
default_model: openrouter/deepseek/deepseek-v3.2

# Model aliases for shorthand
aliases:
  deepseek: deepseek/deepseek-v3.2
  sonnet: anthropic/claude-4.5-sonnet

# Global provider preferences (OpenRouter only)
# Applied to all openrouter/* models, merged with agent-specific prefs
default_provider_prefs:
  min_bits: 8
  ignore: [SiliconFlow, DeepInfra]
  sort: price

# API keys (env vars take precedence)
keys:
  openrouter: sk-or-...

agents.yaml

agents:
  fast:
    model: openrouter/deepseek/deepseek-v3.2
    description: Fast, cheap reasoning
    temperature: 0.7
    max_tokens: 4096

  reviewer:
    model: anthropic/claude-4.5-sonnet
    system_prompt: You are a code reviewer. Be concise and actionable.

  # With OpenRouter provider preferences
  quality:
    model: openrouter/deepseek/deepseek-v3.2
    provider_prefs:
      min_bits: 8 # fp8+ only (excludes fp4)
      ignore: [DeepInfra] # blacklist providers
      prefer: [Together] # soft preference
      sort: throughput # or: price, latency

Provider Preferences

OpenRouter-specific routing options. Can be set globally in config.yaml (default_provider_prefs) or per-agent in agents.yaml (provider_prefs). Agent prefs are merged with global prefs (agent takes precedence).

Option Type Description
min_bits int Minimum quantization (8 = fp8+)
quantizations list Explicit whitelist: [fp8, fp16, bf16]
exclude_quants list Blacklist: [fp4, int4]
ignore list Blacklist providers
only list Whitelist providers (strict)
prefer list Soft preference (tries first, falls back)
order list Explicit order
sort str "price", "throughput", "latency"

Use --cost flag to see which prefs were applied to a request.

Commands

orcx run "prompt"        # Run prompt (uses default model/agent)
orcx run -m MODEL "..."  # Use specific model or alias
orcx run -a AGENT "..."  # Use agent preset
orcx run -c "..."        # Continue last conversation
orcx agents              # List configured agents
orcx models              # Show model format and examples
orcx conversations       # List/manage conversations
orcx --version           # Show version
orcx --debug             # Show full tracebacks on error

CLI Options

Option Short Description
--model -m Model or alias to use
--agent -a Agent preset to use
--system -s System prompt
--context Context to prepend
--file -f Files to include (repeatable)
--output -o Write response to file
--continue -c Continue last conversation
--resume Resume conversation by ID
--no-save Don't save conversation
--no-stream Disable streaming output
--cost Show cost after response
--json -j Output as JSON

Environment Variables

API keys loaded from env vars (take precedence over config file):

  • OPENROUTER_API_KEY
  • OPENAI_API_KEY
  • ANTHROPIC_API_KEY
  • DEEPSEEK_API_KEY
  • GOOGLE_API_KEY
  • MISTRAL_API_KEY
  • GROQ_API_KEY
  • TOGETHER_API_KEY

Model Format

Models use provider/model-name format. See your provider's docs for available models:

License

MIT

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

orcx-0.0.5.tar.gz (15.9 kB view details)

Uploaded Source

Built Distribution

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

orcx-0.0.5-py3-none-any.whl (19.6 kB view details)

Uploaded Python 3

File details

Details for the file orcx-0.0.5.tar.gz.

File metadata

  • Download URL: orcx-0.0.5.tar.gz
  • Upload date:
  • Size: 15.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for orcx-0.0.5.tar.gz
Algorithm Hash digest
SHA256 4677c5054a4bb5eef77e2d8a67f2a238c94efbd0be593ddb6998709aeae19630
MD5 df755b446b93af7ec4419b36d37f523a
BLAKE2b-256 89b1b50d144152650560e2b4bf73bf7331f76d8440d54c8f2d9965e99ebf1324

See more details on using hashes here.

Provenance

The following attestation bundles were made for orcx-0.0.5.tar.gz:

Publisher: release.yml on nijaru/orcx

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

File details

Details for the file orcx-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: orcx-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 19.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for orcx-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 028a555e44fa293330ee3e08a9decdc48d577a99cd222e027d98a49aa9a06f7b
MD5 e461795e30f6a0b0dcd59cceccbf2586
BLAKE2b-256 7ed31c61a59959faecfa808474a95db987c38c83412fd32e554b3908ef630125

See more details on using hashes here.

Provenance

The following attestation bundles were made for orcx-0.0.5-py3-none-any.whl:

Publisher: release.yml on nijaru/orcx

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