# pi-unigpt Use [uniGPT](https://unigpt.uni-graz.at), the University of Graz's AI assistant, inside the [pi](https://pi.dev) coding agent. Models exposed by your uniGPT API key appear in pi's model picker. Streaming and tool calls are supported; recognized vision models also support image input. ## What you need - **pi 1.3 or newer** ([installation guide](https://pi.dev)) - **A uniGPT API key** ## Setup **1. Install the extension** ```sh pi install git:imsc.uni-graz.at/git/behackl/pi-unigpt ``` **2. Log in** Start pi (or type `/reload` if it is already running), then type: ```text /login unigpt ``` A dialog asks for your API key. Paste it there, **not into the chat**. Pi checks the key and tells you how many models you can use. **3. Pick a model** Type `/model` and choose one of the models listed under **unigpt**. That's it. Pi remembers your key and your last model for next time. **Optional: start pi with uniGPT by default.** Add this to `~/.pi/agent/settings.json`, using any model from the list: ```json { "defaultProvider": "unigpt", "defaultModel": "gpt-5.4" } ``` ## Commands | Command | What it does | | --- | --- | | `/login unigpt` | Save your API key (or replace it with a new one) | | `/model` | Choose a model | | `/unigpt-refresh` | Reload the list of models, e.g. after uniGPT adds new ones | | `/logout` | Remove your key from pi | ## Updating ```sh pi update --extensions ``` ## Logging out and uninstalling **To remove your API key,** type `/logout` and choose uniGPT. The uniGPT models disappear from `/model` until you log in again. This only removes the key from pi; it does not revoke the key at uniGPT. **To uninstall the extension,** log out first (uninstalling does not delete the saved key), then run: ```sh pi remove git:imsc.uni-graz.at/git/behackl/pi-unigpt ``` If you made uniGPT your default, also remove `defaultProvider` and `defaultModel` from `~/.pi/agent/settings.json`. ## Things to know - **The thinking level setting has no effect.** uniGPT decides how much each model reasons; models that reason still do so. - **Costs are shown as zero.** Pi doesn't track uniGPT usage; this does not mean usage is unlimited. Your university's usage rules still apply. ## Troubleshooting - **No uniGPT models in `/model`:** type `/unigpt-refresh`. It tells you what is wrong, e.g. a rejected key or no network connection. - **One model always fails with an error:** that model may be unavailable on uniGPT's side. Pick another one. - **`pi -p "…"` says a uniGPT model was not found:** start pi normally once after logging in, so it can load the model list. - **Installation fails with `spawn npm ENOENT`:** you use pnpm instead of npm. Add `"npmCommand": ["pnpm"]` to `~/.pi/agent/settings.json` and try again. Still stuck? [Open an issue](https://imsc.uni-graz.at/git/behackl/pi-unigpt/issues) with the output of `/unigpt-refresh` and the model you used. **Never include your API key.** ## Advanced **Storing the key elsewhere.** Pi saves your key unencrypted in `~/.pi/agent/auth.json`, readable only by your user account. To keep it out of that file, change the `unigpt` entry there to read it from an environment variable or a password manager command: ```json { "unigpt": { "type": "api_key", "key": "${UNIGPT_API_KEY}" } } ``` ```json { "unigpt": { "type": "api_key", "key": "!op read op://Private/uniGPT/credential" } } ``` **Adjusting model limits.** Pi knows the context size and output limit of common models. For a model it doesn't recognize, it assumes 128k tokens of context and 16k of output. If you know better, override them in `~/.pi/agent/models.json`: ```json { "providers": { "unigpt": { "modelOverrides": { "gpt-5.4": { "contextWindow": 200000 } } } } } ``` **Pinning a version.** To stay on one release, install with its tag, e.g. `pi install git:imsc.uni-graz.at/git/behackl/pi-unigpt@v0.1.0`. ## Contributing See [DEVELOPMENT.md](DEVELOPMENT.md). ## License [MIT](LICENSE)