Salta al contenuto
openplate

L'app

Condividere un'unica spesa AI con tutta la famiglia

Condividere un unico conto per l'IA in famiglia, con limite di spesa e revoca per persona

Questa pagina è tradotta automaticamente dalla documentazione in inglese.

openplate adotta il modello bring-your-own-key: ogni persona punta l'app verso un provider AI e paga per le scansioni dei propri piatti. All'interno della stessa famiglia non ha senso. Nessuno vuole quattro account su un provider, e una chiave condivisa è persino peggio: non puoi sapere chi ha speso cosa, e revocare una persona significa revocarla a tutti.

Non ti serve un server per questo. La soluzione è offerta direttamente dal provider: un account, una chiave per persona, un limite di spesa per chiave. Leggi prima quella sezione; le due soluzioni basate su server descritte più avanti servono per i casi non coperti.

Niente di tutto questo condivide un diario. Il registro dei pasti di ciascuna persona rimane nell'archiviazione del rispettivo browser sul proprio dispositivo. Ciò che viaggia in rete è una foto in uscita e una stima in entrata. Chi paga la fattura può vedere quante richieste ha effettuato ciascuna persona e quanto sono costate. Non può vedere cosa ha mangiato nessuno.

La versione breve, con OpenRouter

OpenRouter può generare qualsiasi numero di chiavi API all'interno di un unico account, ciascuna con il proprio limite di credito e la propria riga di utilizzo. È esattamente la funzionalità che serve a un nucleo familiare.

  1. Una persona crea l'account su openrouter.ai e aggiunge credito. Solo quella persona effettua l'accesso; a nessun altro serve un account.
  2. Apri la pagina Keys e crea una chiave per persona. Assegna a ogni chiave il nome della persona corrispondente: vedrai quel nome nel dettaglio dei consumi più avanti, quindi "Sam" è preferibile a "key 3".
  3. Imposta un limite di credito su ogni chiave quando la crei. Questo è il tetto massimo. Una chiave senza limite può spendere l'intero saldo dell'account, quindi considera "illimitato" come l'opzione da evitare.
  4. Invia a ogni persona la propria chiave. Inviala come invieresti una password, non in una chat di gruppo che resta per sempre.
  5. Ciascuno incolla la propria chiave. In openplate: Impostazioni → IA, scegli OpenRouter e usa il pannello "incolla manualmente una chiave API". La chiave viene salvata solo in quel browser. Viene esclusa dall'esportazione JSON e non raggiunge mai il server openplate.

La configurazione finisce qui. Cinque minuti, nessun container, nessuna manutenzione.

Funzionamento

  • Chi ha speso cosa: la dashboard di OpenRouter suddivide i consumi per chiave. Poiché ogni chiave ha il nome di una persona, hai direttamente il conto per ciascuno.
  • Revocare l'accesso a una persona: elimina la sua chiave. Nessun altro subisce conseguenze, nessun altro deve modificare impostazioni e la persona revocata non ha alternative: quella chiave era la sua unica credenziale. Il suo diario resta intatto, perché non è mai stato sulla chiave.
  • Dare più credito a qualcuno: aumenta il limite di quella chiave. Ha effetto immediato, senza riavviare nulla.
  • Se la chiave di qualcuno smette di funzionare: ha raggiunto il proprio limite oppure hai eliminato la chiave. openplate mostrerà l'errore del provider; la soluzione si applica nella pagina Keys, non nell'app.

Imposta un tetto anche all'account, non solo alle chiavi. I limiti per chiave vincolano ciascuna persona, ma è il saldo dell'account a venire scalato. Mantieni il saldo a una cifra che puoi permetterti di perdere e ricaricalo intenzionalmente.

Automatizzare la gestione. OpenRouter mette a disposizione anche un'API per creare e gestire le chiavi a livello programmatico, utile da conoscere se configuri l'accesso per più di qualche persona. Per una famiglia, la dashboard è più veloce della scrittura di uno script.

L'altra alternativa: un'istanza openplate-core gestita

Se il tuo provider non emette sotto-chiavi con un tetto di spesa (Mistral, la maggior parte delle API dirette dei provider), la procedura descritta sopra non si può applicare. Serve proprio a questo un'istanza openplate-core gestita: imposta INSTANCE_MODE=managed (richiede CORE_URL) e il servizio account già usato per la sincronizzazione dalla tua famiglia diventa anche il proxy per l'IA, con una quota giornaliera di richieste per account.

Scegli questa opzione rispetto alle sotto-chiavi del provider se:

  • Il tuo provider non prevede un limite di spesa per chiave, quindi il tetto deve trovarsi in un punto sotto il tuo controllo.
  • Vuoi un tetto di richieste giornaliere a persona anziché un saldo di credito per ciascuno.
  • Metti a disposizione della famiglia la tua macchina openplate-inference, priva di qualsiasi dashboard del provider; un'istanza gestita aggiunge la quota a persona e il monitoraggio dei consumi assenti nella allowlist API_KEYS descritta sotto.
  • Vuoi che la revoca sia una singola azione nella schermata di amministrazione, invece di usare una chiave condivisa che tutti devono incollare di nuovo.

Rimani con le sottochiavi del provider quando puoi. Se usi OpenRouter, hai già finito da cinque minuti e non hai alcun servizio da mantenere attivo.

Configurazione: avvia openplate-core (vedi sync.md e topologies.md) e imposta INSTANCE_MODE=managed sull'app openplate. Punta il server centrale verso il tuo provider specificando UPSTREAM_BASE_URL, UPSTREAM_API_KEY e AI_ADVERTISED_MODEL in .env. L'ultima riga è obbligatoria. Senza un modello, l'app non eseguirà le scansioni. Genera il primo invito per te stesso sul server con ADMIN_TOKEN, come amministratore (self-hosting.md riporta il comando). Da lì, invita persone da /admin nell'app, assegnando a ciascun account una quota giornaliera. Se la posta è configurata sul server centrale, l'invito viene inviato via email alla persona. In assenza di posta, /admin ti mostra il link, che potrai inviare come faresti con una password. Il ripristino di una password dimenticata funziona nello stesso modo. Senza posta configurata, l'utente si rivolge a te e tu crei il link di reimpostazione da Persone in /admin. Ciascuna persona accede e il suo account include già la connessione all'AI. Non c'è alcun passaggio separato né nulla da incollare. La sospensione o la riattivazione di un account avviene dalla stessa schermata di amministrazione e ha effetto immediato.

Due cose utili da sapere prima di farci affidamento. La quota conta richieste, non valuta, quindi mantieni anche un limite massimo di spesa sulla chiave a monte presso il provider: solo il provider può bloccare il consumo di denaro. Inoltre, la quota di una persona viene impostata esplicitamente per account; non esiste un valore predefinito illimitato.

La sincronizzazione e il proxy IA adesso sono lo stesso servizio, quindi il server di un'istanza gestita vede più elementi rispetto a uno non gestito: un indirizzo email, testo cifrato di cui non possiede la chiave e, per una scansione, la foto, letta una sola volta e non archiviata. Continua comunque a non vedere mai una voce del diario in chiaro. Vedi architecture.md per il quadro completo di ciò che conserva ciascun componente.

L'alternativa: una macchina di inferenza condivisa

Se possiedi l'hardware, l'altro modo per condividere una spesa è non avere alcuna spesa. Esegui openplate-inference su una macchina a casa, e ogni scansione nell'abitazione viene elaborata localmente senza alcun provider cloud coinvolto. Vedi topologies.md per i requisiti in termini di hardware e lavoro operativo: è un impegno nettamente superiore rispetto a incollare cinque chiavi in una dashboard.

Supporta anche chiavi per persona, sebbene siano più approssimative. API_KEYS sul container di inferenza è un elenco separato da virgole di chiavi bearer accettate:

bash
-e API_KEYS="opk_alex_...,opk_sam_...,opk_robin_..."

Assegna a ogni persona una voce di tale elenco; ciascuno incolla la propria in openplate sotto Impostazioni → AI → Compatibile con OpenAI insieme all'URL di base dell'istanza (ad esempio http://openplate.example.lan:8300/v1) e al modello openplate-plate-1. Rimuovere una chiave dall'elenco e riavviare revoca l'accesso a quella specifica persona.

Due limiti oggettivi rispetto alle sottochiavi del provider:

  • Non esiste alcun limite di spesa o di frequenza per chiave. L'elenco è una semplice allowlist. Va bene quando la risorsa è la tua GPU inattiva e non c'è denaro associato a ogni richiesta.
  • La generazione e la distribuzione delle chiavi spettano a te. Qualsiasi stringa casuale funziona (openssl rand -base64 24); non c'è una dashboard, né un report di utilizzo per persona: hai a disposizione i log del container.

Elenco completo delle variabili: openplate-inference docs/configuration.md.

Non usare la scorciatoia dell'IA fornita dall'istanza per questo scopo. Impostare DEFAULT_INFERENCE_API_KEY su openplate consente a tutti l'accesso con un tocco e senza chiavi da incollare, ma quella chiave è incorporata nell'HTML della pagina e leggibile con "visualizza sorgente" da chiunque possa aprire l'app; si torna quindi a un'unica credenziale condivisa, con lo stesso problema iniziale. Va bene per una LAN o una tailnet in cui ti fidi di chiunque possa raggiungerla, ma è inadatto in qualsiasi altro contesto. Vedi configuration.md.

Account per la famiglia

La sincronizzazione e un'istanza gestita offrono entrambe a ogni persona un account sul servizio openplate-core che esegui.

  • Usa gli inviti. Crea il primo account per te sul server (self-hosting.md contiene il comando). In seguito, invita ciascuna persona da /admin nell'app.
  • Lascia spento OPEN_SIGNUP. Permette a chiunque trovi l'indirizzo di chiedere un account. A una famiglia non serve.
  • La posta è facoltativa. Senza posta, /admin mostra ogni link di invito e di reimpostazione, e lo trasmetti tu a mano. self-hosting.md spiega entrambe le modalità, e come configurare la posta se la desideri.

Modifica questa pagina su GitHub