# @zerodawn/pi-litellm-discovery

Pi extension that fetches models from a LiteLLM gateway and registers them as a
custom provider at startup.

## Install

Pi package install:

```bash
pi install npm:@zerodawn/pi-litellm-discovery
```

Optional helper command install via npm:

```bash
npm install -g @zerodawn/pi-litellm-discovery
```

That exposes:

```bash
pi-litellm-devenv
```

Local development from this monorepo:

```bash
pi -e ./packages/litellm-discovery
```

Repo-local helper script:

```bash
./packages/litellm-discovery/bin/pi-litellm-devenv
```

## Required environment

- `PI_LITELLM_DISCOVERY_BASE_URL`: LiteLLM base URL, for example `https://litellm.example.com/v1`
- one of:
  - `PI_LITELLM_DISCOVERY_API_KEY`
  - `PI_LITELLM_DISCOVERY_API_KEY_CMD`

Optional:

- `PI_LITELLM_DISCOVERY_PROVIDER`: provider id shown in Pi, default `litellm-discovery`
- `PI_LITELLM_DISCOVERY_NAME`: provider label shown in Pi, default `LiteLLM Discovery`

## Example

Direct key:

```bash
export PI_LITELLM_DISCOVERY_BASE_URL='https://litellm.lan.kappen.io/v1'
export PI_LITELLM_DISCOVERY_API_KEY='...'
pi -e ./packages/litellm-discovery
```

Shell command for the key:

```bash
export PI_LITELLM_DISCOVERY_BASE_URL='https://litellm.lan.kappen.io/v1'
export PI_LITELLM_DISCOVERY_PROVIDER='litellm-devenv'
export PI_LITELLM_DISCOVERY_NAME='LiteLLM Devenv'
export PI_LITELLM_DISCOVERY_API_KEY_CMD='infisical run --log-level error --silent --project-config-dir=/data/private/devenv --env=prod --path=/devenv/litellm -- sh -c '\''printf %s "$LITELLM_MASTER_KEY"'\'''
pi -e ./packages/litellm-discovery
```

Helper script with the same defaults:

```bash
./packages/litellm-discovery/bin/pi-litellm-devenv
```

Installed helper command after `npm install -g`:

```bash
pi-litellm-devenv
```

Override the devenv repo path if needed:

```bash
DEVENV_REPO=/some/other/devenv pi-litellm-devenv
```

## Alias

If you want this as your normal shortcut, add this once to your shell profile:

```bash
alias pi-dev='pi-litellm-devenv'
```

Then use:

```bash
pi-dev
```

## Behavior

At startup the extension:

1. fetches `${PI_LITELLM_DISCOVERY_BASE_URL}/models`
2. reads `data[].id`
3. registers the result as an OpenAI-compatible Pi provider

If discovery fails, Pi continues to start and the extension prints a warning.

## Notes

- the discovered models are currently registered with `reasoning: false`
- model metadata falls back to conservative defaults when LiteLLM does not
  expose `context_window` or `max_tokens`
- reopen `/model` or restart/reload Pi after changing environment values
