tokenfactory-pi

Nebius Token Factory provider extension for pi coding agent. Requires `npm install -g --ignore-scripts @earendil-works/pi-coding-agent`. Install with `pi install npm:tokenfactory-pi`

Packages

Package details

extension

Install tokenfactory-pi from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:tokenfactory-pi
Package
tokenfactory-pi
Version
0.3.0
Published
Aug 18, 2026
Downloads
309/mo · 16/wk
Author
aes0in
License
MIT
Types
extension
Size
44.4 KB
Dependencies
0 dependencies · 1 peer
Pi manifest JSON
{
  "extensions": [
    "./dist/index.js"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

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.