Empryoempryo.beta
← Providers
provider

Custom / OpenAI-compatible with Empryo

Empryo treats "custom" as the universal escape hatch: any API that speaks the OpenAI `/v1/chat/completions` format becomes a first-class provider with one block of JSON, no plugin and no code. Use it to wire up Together, Fireworks, Cerebras, DashScope, a corporate gateway, or a local vLLM/llama.cpp server, then drive it with Empryo's Genome, AST editing, and task router exactly like a built-in.

Popular models

meta-llama/Llama-3.3-70B-Instruct (Together, Fireworks)deepseek-ai/DeepSeek-V3deepseek-ai/DeepSeek-R1 (reasoning)Qwen/Qwen3-235B-A22B (DashScope / OpenAI-compatible mode)qwen-plus / qwen-max (DashScope)Qwen/Qwen2.5-Coder-32B-Instructmoonshotai/Kimi-K2-Instructmistralai/Mixtral-8x22B-Instructllama-3.3-70b (Cerebras, high-throughput)any local model served by vLLM / SGLang / llama.cpp on an OpenAI-compatible endpoint

Setup

Empryo has no separate "custom" key to set — you define one or more providers in config, then store each one's key by its id. There is no plugin and no code.

1. Add the provider to config

Edit ~/.empryo/config.json (global, applies everywhere) or .empryo/config.json in a repo (project scope wins on matching id):

{
  "providers": [
    {
      "id": "together",
      "name": "Together AI",
      "baseURL": "https://api.together.xyz/v1",
      "envVar": "TOGETHER_API_KEY",
      "models": ["meta-llama/Llama-3.3-70B-Instruct-Turbo"]
    }
  ]
}
FieldRequiredPurpose
idyesPrefix in model strings (together/...) and the name you store the key under
baseURLyesThe OpenAI-compatible endpoint (must accept /v1/chat/completions)
namenoDisplay name in the picker
envVarnoEnv var Empryo reads for the key — omit for auth-less local servers
modelsnoFallback model list (plain strings, or {id, name, contextWindow})
modelsAPInoURL returning OpenAI /v1/models JSON, for dynamic discovery
reasoningnoThinking config (see below)

2. Store the key and select a model

empryo --set-key together <your-key>
empryo --model together/meta-llama/Llama-3.3-70B-Instruct-Turbo

--set-key together writes to your OS keychain (Login Keychain on macOS, libsecret on Linux, DPAPI on Windows), keyed off the provider id. You can also pass it per-launch with the env var and persist nothing: TOGETHER_API_KEY=... empryo.

3. Local server (no key)

Drop envVar entirely for a server with no auth:

{
  "providers": [{
    "id": "local",
    "name": "Local LLM",
    "baseURL": "http://localhost:8080/v1",
    "models": ["llama-3.3-70b"]
  }]
}

(Ollama at localhost:11434 and LM Studio at localhost:1234 are already auto-detected as built-ins — only use a custom block to point at vLLM, SGLang, llama.cpp, or a non-default port.)

4. Dynamic model lists and gateways

For a corporate gateway, let Empryo pull the catalog instead of hardcoding it:

{
  "providers": [{
    "id": "corp",
    "name": "Corp Gateway",
    "baseURL": "https://llm.internal.corp.com/v1",
    "envVar": "CORP_LLM_KEY",
    "modelsAPI": "https://llm.internal.corp.com/v1/models"
  }]
}

5. Reasoning models

Add a reasoning block in the style your endpoint accepts — fields are injected into every request body:

{
  "id": "dashscope",
  "baseURL": "https://dashscope.aliyuncs.com/compatible-mode/v1",
  "envVar": "DASHSCOPE_API_KEY",
  "models": ["qwen-plus"],
  "reasoning": { "enabled": true, "budget": 8192 }
}
  • OpenAI-style: effort: "low" | "medium" | "high" | "xhigh" | "none"
  • DashScope-style: enabled: true, budget: 8192 (Qwen/Alibaba)
  • Raw: extraParams: { ... } forwarded verbatim, overriding other keys on collision

Notes

  • If your id collides with a built-in (e.g. anthropic), Empryo renames it {id}-custom rather than replacing the built-in. Custom providers always show [custom] in /keys and --list-providers.
  • Verify with empryo --list-providers and empryo --list-models together.
  • Inside the TUI, press Ctrl+L to switch models and /router to assign your custom model to specific task slots.