omp packages

pi-llama-server1.2.0

Pi extension for llama-server router - model discovery, auto-load, per-project config

am17an Published 4 days ago MIT ~311 downloads/mo

Untested on omp

This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.

Did it work for you?

Result

One report per person. A new report replaces your old one.

Reports 0

No reports yet.

Readme

Note: This is how I use pi.dev + llama.cpp on my local machine. I created a plugin so that I can update my setup quickly.

pi-llama-server

Pi extension that integrates a running llama-server instance with the Pi Coding Agent. Discovers llama-server models and automatically loads the selected model when you switch models in Pi.

Demo

Prerequisites

  • A running llama-server instance (from llama.cpp) in router-mode (the default if you don't mention -m)
  • Pi Coding Agent installed (@earendil-works/pi-coding-agent)

Install

pi install npm:pi-llama-server

Or from git:

pi install git:github.com/user/pi-llama-server

Pi auto-discovers the extension via pi.extensions in package.json. No additional setup needed.

Configuration

The llama-server URL is resolved in this order:

  1. Per-project config — create .pi/llama-server.json in your project root:
    { "url": "http://10.0.0.5:9090" }
    
  2. Environment variable — set globally:
    export LLAMA_SERVER_URL=http://10.0.0.5:9090
    
  3. Default — falls back to http://127.0.0.1:9931

API Key (optional)

If your llama-server endpoint requires authentication, set an API key:

  1. Per-project config — add apiKey to .pi/llama-server.json:
    { "url": "http://10.0.0.5:9090", "apiKey": "your-api-key" }
    
  2. Environment variable:
    export LLAMA_SERVER_API_KEY=your-api-key
    

The API key is sent as a Bearer token on all requests to the server.

Usage

Use Ctrl+P (or /model) in Pi to select any llama-server model for inference. Pi switches to that model, and the extension automatically tells llama-server to load it. While llama-server reports loading progress, Pi shows a progress bar in the footer status.

After each llama-server response, the footer also shows the speed of that request:

PP 965.1 t/s (465 tok) · TG 134.0 t/s (89 tok)
  • PP (prefill / prompt processing): uncached prompt tokens divided by the time from sending the request to the first streamed token. Prompt tokens served from llama-server's cache are not counted.
  • TG (token generation): output tokens after the first, divided by the time from the first to the last streamed token.

Both are measured on the client as the response streams in. TG closely matches llama-server's own predicted_per_second. PP also includes per-request overhead (chat templating, tokenization, HTTP), so on short prompts it reads well below llama-server's prompt_per_second; the gap shrinks as prompts grow.

How it works

When Pi starts, the extension:

  1. Resolves the llama-server URL from config/env/default
  2. Queries GET /models to discover available GGUF models
  3. Registers each model as an OpenAI-compatible provider under {url}/v1
  4. Listens for model switch events and calls POST /models/load on the server
  5. Listens to GET /models/sse while a selected model is loading to show footer progress

llama-server endpoints used

Endpoint Method Purpose
/models GET List all models
/models/load POST Load a model
/models/sse GET Stream model status/progress events
/v1/... POST OpenAI-compatible completions (via Pi provider)