Skip to content

Repository files navigation

tokenfactory-pi

Nebius Token Factory provider extension for pi coding agent.

Fetches the current model catalog from the Token Factory API on startup and registers all tool-capable text models. No pi core changes required.

Prerequisites

# Install pi coding agent globally (required)
npm install -g --ignore-scripts @earendil-works/pi-coding-agent

Installation

# Install the extension using pi's built-in package manager
pi install npm:tokenfactory-pi

Setup

# Get an API key from https://tokenfactory.nebius.com/
export NEBIUS_API_KEY=your-key-here

# Optional: override catalog context metadata for all Nebius models
export NEBIUS_MODEL_CONTEXT=1048576

Some public model endpoints can contain broken metadata values, such as an 8K context length for a model with a 1M-token window. Set NEBIUS_MODEL_CONTEXT to a positive integer token count to override the catalog's context_length for models that do not have a saved per-model override.

Usage

# List available models to verify installation
pi --list-models | grep nebius

Once running in interactive mode, use Pi's built-in /model command to select a Nebius model.

Edit model parameters

Run the interactive submenu inside pi:

/nebius-model

You can also open a specific model directly:

/nebius-model moonshotai/Kimi-K3

The submenu provides these actions:

  • Edit context window — override the model's total context size
  • Edit max output tokens — override its maximum response size
  • Edit supported features — inherit, enable, or disable tools and reasoning independently
  • Edit reasoning effort — force reasoning_effort to none, minimal, low, medium, high, xhigh, or max
  • Edit temperature — force a value from 0 through 2; submit a blank value to inherit the request default
  • Reset saved overrides — remove every saved value for the model
  • Back to model list — choose another model

Models that the catalog does not mark as tool-capable appear as hidden in the submenu. Setting Tools to Enabled registers such a text-output model with pi. Setting it to Disabled removes the model from pi's Nebius model list; switch away from an active model before disabling it.

Reasoning effort and temperature are applied to matching Nebius requests as top-level reasoning_effort and temperature fields. These are raw Nebius API values, not additional pi thinking levels. They are forced values: saved fields replace values generated by pi, so a saved reasoning effort takes precedence over /thinking. Choose the reasoning inherit option or submit a blank temperature to restore pi and provider defaults.

Changes are applied immediately and saved across restarts in:

~/.pi/agent/extensions/tokenfactory-pi.json

The path follows PI_CODING_AGENT_DIR when that environment variable is set. The file stores sparse per-model overrides:

{
  "version": 1,
  "models": {
    "moonshotai/Kimi-K3": {
      "contextWindow": 1048576,
      "maxTokens": 32768,
      "supportedFeatures": {
        "tools": true,
        "reasoning": true
      },
      "reasoningEffort": "high",
      "temperature": 0.2
    }
  }
}

The file is sparse: only fields changed in the menu are saved. Per-model context values take precedence over NEBIUS_MODEL_CONTEXT, which takes precedence over the model catalog. Feature booleans take precedence over the catalog's supported_features. Use Reset saved overrides to remove every saved field for one model.

Development

For local development, export NEBIUS_API_KEY, then run:

# Build the TypeScript
npm run build

# Test locally from the project directory
cd path/to/tokenfactory-pi
./node_modules/.bin/pi --no-extensions -e . --provider nebius

# Then enter /nebius-model in pi

For a disposable interactive test that does not touch your normal pi settings:

PI_CODING_AGENT_DIR=/tmp/tokenfactory-pi-test \
  ./node_modules/.bin/pi --no-extensions -e . --provider nebius

This stores menu changes under /tmp/tokenfactory-pi-test/extensions/tokenfactory-pi.json.

How it works

On startup the extension:

  1. Reads NEBIUS_API_KEY from environment (no-op if missing)
  2. Fetches GET /v1/models?verbose=true from the Token Factory API
  3. Loads saved model overrides from the pi agent directory
  4. Applies per-model and NEBIUS_MODEL_CONTEXT overrides
  5. Filters for text-output models with effective tools support
  6. Registers them as the nebius provider via pi.registerProvider()
  7. Applies saved reasoning-effort and temperature values to matching requests

All models use the openai-completions API with compat: { supportsDeveloperRole: false, maxTokensField: "max_tokens" }. The registered provider resolves auth from $NEBIUS_API_KEY, matching pi's current custom-provider config syntax. This is important: a literal NEBIUS_API_KEY value would be sent as the bearer token and Token Factory returns 401.

About

Fetches the current model catalog from the Token Factory API on startup and registers all tool-capable models.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages