OPEN SOURCE · MULTI-PROVIDER GATEWAY

Many models.
One way forward.

Bring your model providers into one OpenAI-compatible API. Manage them on your desktop. Run them from your CLI. Keep your attention on what comes next.

MIT licensedRun locally or on your server
freelance / gatewayOpenAI-compatible API

GATEWAY / OVERVIEW

Your model gateway, at a glance.

Gateway ready

Connect the models you choose. Keep control of how you call them.

Configured providers03
O
OpenRouteropenrouter.ai
Available
N
NVIDIAintegrate.api.nvidia.com
Available
◉
Ollama Cloudollama.com
Available
One API endpoint
POST /v1/chat/completions
Automatic routingmodel: "auto"
# OpenAI-compatible
client = OpenAI(
  base_url="http://localhost:8000/v1",
  api_key="YOUR_GATEWAY_KEY"
)

response = client.chat.completions.create(
  model="auto",
  messages=[...]
)
CLIENTFREELANCEMODEL
Your application does not need a separate integration for every provider./v1/models

Interactive product illustration · Sample data, not a live service

ONE INTERFACE. MORE CHOICE.

OpenRouterNVIDIAOllamaGroqGeminiMistral

And other OpenAI-compatible providers

BUILT FOR EVERYDAY USE

Less integration. More possibilities.

Keep provider differences in the gateway. Keep your familiar tools working.

01

Fits your existing client

Connect through unified chat, model discovery, and SSE streaming endpoints. With the OpenAI SDK, change your Base URL and key to get connected.

/v1/chat/completions
02

A way around failures

Switch candidates according to error policies. Apply cooldowns to keys, models, and providers, with multiple-key rotation within a provider.

retry → fallback → cooldown
03

Independent answers to compare

Call provider defaults in parallel or in sequence. Connect through HTTP or MCP, then let your client compare and summarize the answers.

HTTP + MCP

01 / MODEL ROUTING

Choose what goes first.

Put your preferred models at the front. If every custom candidate fails, the gateway continues with default candidates. Clear the list to restore default ordering.

Applies to auto / free / best-free routing. Explicit single-model calls are unchanged. These route names do not guarantee free upstream usage.

config.yaml
auto_routing:
  custom_ranking:
    - provider: openrouter
      model: model-a
    - provider: nvidia
      model: model-b
    - provider: ollama
      model: model-c

Try the calling order

DEMO

Interactive demo · No API requests

#Provider / example model↕
  1. 01
    OpenRoutermodel-a
    ↑ ↓
  2. 02
    NVIDIAmodel-b
    ↑ ↓
  3. 03
    Ollama Cloudmodel-c
    ↑ ↓
Change the order, then try a demo request.
{ "model": "auto", "demo": true }

02 / DESKTOP & CLI

Easy on your desktop. At home on your server.

Manage a local gateway with the Windows portable client, or connect to a remote one. Your server keeps its existing CLI. The desktop is another way into the same service.

  • Configure providers, keys, and model priorities in one place
  • Start, stop, restart, and connect automatically when ready
  • Inspect runtime status and test single or multiple models
Build for Windows Read the desktop guide ↗
Freelance Gateway

Local gateway · Interactive illustration

Gateway stopped

Base URLhttp://127.0.0.1:8000/v1
Providers & prioritiesconfig.yaml
01OpenRoutermodel-a
02NVIDIAmodel-b

Configuration lives beside the program

These controls illustrate the UI. They do not start a real service.

On first launch, missing default configuration is created beside the EXE. Keep the whole program folder when sharing or moving it.

MAKE THE CONNECTION

Start with your first request.

Get the source and choose your entry point. Python 3.11 is recommended. Portable app users do not need Python.

01

Get the project

git clone https://gitee.com/relatex/freelance.git
cd freelance
02

Choose your entry point

WINDOWS / POWERSHELL

Build from the project root

The output is dist/FreelanceDesktop. Open the EXE, configure your providers and keys, then start the gateway. Back up configuration and close the app before rebuilding.

PowerShell
python -m pip install -e ".[desktop,desktop-build]"
python scripts/build_desktop.py
python scripts/verify_desktop_bundle.py

A FEW COMMON QUESTIONS

Before you begin.

Can I keep my existing OpenAI client?

Yes. Point its Base URL to the gateway’s /v1 path and use your gateway API key. The API is OpenAI-compatible; upstream support for tools and parameters still depends on each provider.

Can the desktop and server CLI work independently?

Yes. The server CLI needs no desktop dependencies. The desktop can start its own local backend or connect to a running remote gateway for debugging without editing remote configuration. It does not stop CLI-owned processes.

Where does configuration live?

The portable app uses config.yaml and .env beside its EXE and creates missing defaults. The source desktop uses the project root. Restart the gateway to apply changes.

Does open source mean free model calls?

The gateway is MIT licensed. Upstream providers determine model pricing, quotas, and free tiers. Automatic route names such as auto, free, and best-free do not guarantee free usage.

Does this website connect to my gateway?

No. All status displays, model orders, and controls here are local illustrations. This site sends no model requests and collects no keys. Your deployed gateway forwards actual calls to the upstream providers you configure.

Tools that fit your workflow. Models that do their best work.

Get started with Freelance