@danielmeneses/pi-llama-swap

Pi extension: llama-swap provider with dynamic model discovery

Packages

Package details

extension

Install @danielmeneses/pi-llama-swap from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@danielmeneses/pi-llama-swap
Package
@danielmeneses/pi-llama-swap
Version
0.1.1
Published
Jun 22, 2026
Downloads
440/mo · 63/wk
Author
danielmeneses
License
Apache-2.0
Types
extension
Size
41.4 KB
Dependencies
1 dependency · 0 peers
Pi manifest JSON
{
  "extensions": [
    "./index.ts"
  ]
}

Security note

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

README

pi-llama-swap

Pi coding agent extension that registers a llama-swap provider and discovers models from a running llama-swap instance.

What it does

  • Injects provider llama-swap with models from GET /v1/models
  • Resolves per-model context from llama-swap APIs (/v1/models, /running) with 256K default — see Context window
  • Uses OpenAI Chat Completions API (openai-completions) for streaming
  • Reads optional config from ~/.pi/agent/pi-llama-swap.json to override defaults

Requirements

  • pi coding agent (@earendil-works/pi-coding-agent)
  • llama-swap running and reachable
  • Node.js 18+ (for fetch)

Quick start

# Terminal 1: start llama-swap (example)
llama-swap --config ~/llama-swap/config.yaml --listen 127.0.0.1:8080

# Terminal 2: load extension
cd /path/to/pi-llama-swap
pi -e .

In pi: /model → pick llama-swap/your-model-id.

Commands

Command Args Description
/llama-swap-set-context-length <number> or auto Override context window for the current model (auto removes override and uses auto-detection)

Verify from CLI:

pi -e . --list-models | grep llama-swap
curl http://127.0.0.1:8080/v1/models

Configuration

Defaults

Setting Default
Origin http://127.0.0.1
Port 8080
Base URL http://127.0.0.1:8080/v1

No config file needed when llama-swap runs on the defaults above.

Config file

Create ~/.pi/agent/pi-llama-swap.json to override defaults:

{
  "origin": "http://127.0.0.1",
  "port": 8080,
  "apiKey": "optional-key",
  "contextOverrides": {
    "my-model": 32768
  }
}
Field Description
origin Scheme + host (e.g. http://192.168.1.10)
port TCP port (1–65535)
basePath API path prefix (default /v1; normalized to end with /v1)
apiKey Bearer token when llama-swap uses apiKeys
contextOverrides Per-model context overrides (model id → tokens). Use /llama-swap-set-context-length instead of editing manually.

Load order: defaults → ~/.pi/agent/pi-llama-swap.json → environment variables.

Context window (per model)

Context size is auto-detected from llama-swap's /v1/models and /running endpoints at startup, with a default of 256K when nothing reports a value. User overrides set via /llama-swap-set-context-length take precedence over all auto-detected values.

# Restrict permissions when storing API keys
chmod 600 ~/.pi/agent/pi-llama-swap.json

Environment variables

Optional runtime overrides (highest precedence):

Variable Purpose
LLAMA_SWAP_URL Origin URL (scheme + host, optional port/path)
LLAMA_SWAP_PORT Port override
LLAMA_SWAP_API_KEY API key override

Auth

If llama-swap uses apiKeys in its config, set "apiKey" in pi-llama-swap.json or LLAMA_SWAP_API_KEY.

Without a key, extension uses placeholder local-no-auth so models appear in /model. Pi may send Authorization: Bearer local-no-auth; most unsecured local installs ignore it.

Troubleshooting

Symptom What to try
Cannot reach llama-swap Start llama-swap; check origin/port in config file
HTTP 401 Set apiKey in config or LLAMA_SWAP_API_KEY
0 models Ensure models in llama-swap config; curl http://127.0.0.1:8080/v1/models
Extension loads but chat fails Confirm model id; first request may load model (slow)
Config ignored File must be ~/.pi/agent/pi-llama-swap.json; restart pi after edits

Project layout

pi-llama-swap/
├── index.ts          # Extension entry
├── lib/
│   ├── config.ts     # Load ~/.pi/agent/pi-llama-swap.json
│   ├── url.ts        # URL building
│   ├── client.ts     # GET /v1/models
│   ├── context.ts    # Context window from llama-swap APIs
│   ├── provider.ts   # registerProvider
│   └── types.ts
├── package.json
└── README.md

License

MIT (see repository if published).