pi-unigpt/README.md
Benjamin Hackl 46c1731a92
Some checks failed
CI / test (22) (push) Failing after 35s
CI / test (24) (push) Failing after 28s
Support pi 1.3 and newer
2026-11-03 21:07:18 +01:00

122 lines
3.6 KiB
Markdown

# 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)