# pi-unigpt Use [uniGPT](https://unigpt.uni-graz.at), the University of Graz's AI assistant, inside the [pi](https://pi.dev) coding agent. Once set up, every model your uniGPT account offers appears in pi's model picker, including GPT-4o, GPT-4.1, and the GPT-5 and GPT-6 families. Tools, streaming responses, and image input all work. ## What you need - **pi 1.3 or newer** ([installation guide](https://pi.dev)) - **A uniGPT API key.** If you don't have one, ask the uniGPT team at the [IDea_Lab](https://idea-lab.uni-graz.at/en/digital-innovation-lab/unigpt-and-studigpt). ## 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 (the key itself stays valid) | ## Updating ```sh pi update --extensions ``` ## 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 and let the uniGPT team know. - **`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)