Skip to main content
Add any OpenAI-compatible API as a provider. No code, no plugin.

Minimal example

Add this to ~/.soulforge/config.json (or .soulforge/config.json for project scope):
{
  "providers": [
    {
      "id": "together",
      "name": "Together AI",
      "baseURL": "https://api.together.xyz/v1",
      "envVar": "TOGETHER_API_KEY",
      "models": ["meta-llama/Llama-3-70b-chat-hf"]
    }
  ]
}
Set the key and use it:
soulforge --set-key together <your-key>
soulforge --model together/meta-llama/Llama-3-70b-chat-hf

Fields

FieldRequiredWhat it does
idyesUsed in model strings (together/llama-3)
baseURLyesOpenAI-compatible endpoint
nameDisplay name
envVarEnv var for the key (omit for auth-less servers)
modelsFallback model list (strings or {id, name, contextWindow})
modelsAPIURL returning OpenAI /v1/models format
reasoningThinking/reasoning config (see below)

More examples

{
  "providers": [{
    "id": "local",
    "name": "Local LLM",
    "baseURL": "http://localhost:8080/v1",
    "models": ["llama-3-70b"]
  }]
}
{
  "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"
  }]
}
{
  "providers": [
    { "id": "together", "baseURL": "https://api.together.xyz/v1", "envVar": "TOGETHER_API_KEY", "models": ["meta-llama/Llama-3-70b"] },
    { "id": "cerebras", "baseURL": "https://api.cerebras.ai/v1", "envVar": "CEREBRAS_API_KEY", "modelsAPI": "https://api.cerebras.ai/v1/models" }
  ]
}

Thinking / reasoning

For models that support reasoning over an OpenAI-compatible endpoint, add a reasoning block. Three styles are supported — use the one your provider accepts:
{
  "providers": [{
    "id": "dashscope",
    "baseURL": "https://dashscope.aliyuncs.com/compatible-mode/v1",
    "envVar": "DASHSCOPE_API_KEY",
    "models": ["qwen-plus"],
    "reasoning": {
      "enabled": true,
      "budget": 8192
    }
  }]
}
StyleFieldsWhen to use
OpenAI-styleeffort: "low" | "medium" | "high" | "xhigh" | "none"OpenAI-compatible reasoning models
DashScope-styleenabled: true, budget: 8192Alibaba Qwen, DashScope APIs
RawextraParams: { ... }Anything else — fields are forwarded verbatim
The fields are injected into every request body. Raw extraParams override all other keys on collision.

Scope

  • Global~/.soulforge/config.json applies everywhere.
  • Project.soulforge/config.json overrides global entries with the same id.

Conflicts

If your id matches a built-in (e.g. "anthropic"), SoulForge renames it to {id}-custom — the built-in is never replaced. Custom providers always show [custom] in /keys and --list-providers.