122 lines
3.6 KiB
Markdown
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)
|