46 lines
1.9 KiB
Markdown
46 lines
1.9 KiB
Markdown
# TensorX provider per pi-agent
|
|
|
|
Estensione pi che registra **TensorX** (https://api.tensorx.ai) come provider di modelli
|
|
OpenAI-compatible, con scoperta dinamica dei modelli e menù di gestione.
|
|
|
|
## Funzionamento
|
|
|
|
- All'avvio la factory async legge la config (`~/.pi/agent/tensorx.json`) e, se è presente
|
|
una API key, interroga:
|
|
- `GET /v1/models` — elenco modelli disponibili per la chiave
|
|
- `GET /v1/model/info` — metadati (best-effort): `max_input_tokens`, `max_output_tokens`,
|
|
`supports_reasoning`, `supports_vision`, `mode` (i modelli non-LLM vengono filtrati)
|
|
e registra il provider `tensorx` (`openai-completions`). Se la rete fallisce usa la cache locale.
|
|
- I modelli compaiono nel selettore `/model` come `tensorx/<id>`.
|
|
- Se non c'è una chiave, il provider non viene registrato: usa `/tensorx` per configurarla.
|
|
|
|
## Comando `/tensorx`
|
|
|
|
Menù interattivo:
|
|
|
|
- **Aggiorna elenco modelli** — fetch live + re-registrazione immediata (senza `/reload`)
|
|
- **Modifica API key** — input + validazione live contro `/v1/models`
|
|
- **Mostra stato** — endpoint, sorgente chiave, numero modelli, ultima sincronizzazione
|
|
- **Esci**
|
|
|
|
Sottocomandi diretti: `/tensorx refresh`, `/tensorx key`, `/tensorx status`.
|
|
|
|
## Config — `~/.pi/agent/tensorx.json`
|
|
|
|
```json
|
|
{
|
|
"apiKey": "la-tua-chiave",
|
|
"baseUrl": "https://api.tensorx.ai/v1",
|
|
"updatedAt": "2026-01-01T00:00:00.000Z",
|
|
"models": [ { "id": "z-ai/glm-5.2", "reasoning": true, "contextWindow": 1048576, "maxTokens": 131072 } ]
|
|
}
|
|
```
|
|
|
|
- File creato automaticamente con permessi `600` (contiene la chiave in chiaro, come `auth.json`).
|
|
- Precedenza chiave: config → variabile d'ambiente `TENSORX_API_KEY`.
|
|
- `baseUrl` opzionale (utile per test o endpoint self-hosted).
|
|
|
|
## Note
|
|
|
|
- I costi non sono pubblicati via API: rimangono a zero (nessun tracciamento costi).
|
|
- I modelli con `supports_reasoning: true` ricevono `reasoning_effort` quando il thinking è attivo. |