LLM 0.32: trace di ragionamento visibili, strumenti server-side e log in stile Git
LLM, il framework CLI e Python di Simon Willison per lavorare con i modelli, esce nella versione 0.32. Willison la descrive come la release più importante da quando il progetto è nato. Tre direzioni convergenti: trace di ragionamento ispezionabili, strumenti server-side e log content-addressable su SQLite.
Perché ti riguarda. Se costruisci agenti, queste feature chiudono problemi concreti. I modelli di reasoning mandano ora la trace del loro pensiero su stderr, separata dall’output: puoi pipeare il risultato in un altro tool senza portarti dietro il ragionamento. Gli strumenti server-side ti fanno delegare capability al provider invece di implementarle tu: OpenAI offre code execution e web search, il plugin llm-anthropic aggiunge web search, code execution e soprattutto AnthropicMCP, che fa eseguire chiamate MCP direttamente al provider dentro una singola richiesta. I log SQLite riscritti in stile Git salvano ogni messaggio una volta sola, referenziandolo per hash invece di duplicare l’intero storico a ogni turno di conversazione.
Il modello di default diventa GPT-5.6 Luna, la variante economica della famiglia GPT-5.6 che a fine luglio era già scesa a 0,20 dollari per milione di token. Il comando llm openai endpoint esegue prompt one-off contro qualsiasi API compatibile OpenAI, anche un modello locale in LM Studio, senza installare LLM.
Willison scrive che molte modifiche sono state guidate da Datasette Agent, il suo progetto di agente. «Immagino che LLM sia un framework per agenti ora», conclude il post.
Nel dettaglio
Cosa c’era prima. LLM nasce come wrapper CLI per chiamare modelli dal terminale e tenerne traccia in SQLite. Nei mesi il panorama è cambiato: i modelli fanno ragionamento interno prima di rispondere, restituiscono chiamate a strumenti invece di solo testo, e le conversazioni multi-turno sono diventate lo schema normale per gli agenti. LLM 0.32 riscrive l’architettura per seguire questa evoluzione.
Le trace di ragionamento. Quando chiami un modello di reasoning, questo produce un testo di “pensiero” prima della risposta. Prima, LLM non gestiva questo testo in modo distinto. Ora lo manda a stderr e tiene stdout pulito per la risposta. È una separazione che conta: se usi LLM dentro una pipeline di shell, il ragionamento non inquina il risultato. Il flag -R / --hide-reasoning lo sopprime del tutto.
Strumenti server-side. Fin qui gli strumenti in LLM giravano lato client: il tuo codice eseguiva la funzione e restituiva il risultato al modello. Ora LLM supporta strumenti che esegue direttamente il provider. L’esempio più interessante è AnthropicMCP: passi un endpoint MCP e Anthropic lo chiama dentro la stessa richiesta API, senza che il tuo codice faccia da intermediario.
Willison lo mostra con un comando che chiede a Claude quante righe ci sono in una tabella, facendo eseguire ad Anthropic le chiamate MCP contro un server Datasette. In una singola richiesta e risposta, il modello interroga il database e risponde.
Log content-addressable. Il problema: in una conversazione multi-turno, ogni richiesta porta con sé tutto lo storico dei messaggi precedenti. Se logghi ogni richiesta, duplichi lo stesso JSON a ogni turno. La nuova architettura salva ogni messaggio una volta sola, con un hash che lo identifica, come fa Git con i blob. I comandi llm logs e llm logs --json ricostruiscono la vista leggibile dal formato content-addressable. Per chi fa girare agenti con contesti lunghi, lo spazio su disco smette di crescere quadraticamente.
API Python. Due cambiamenti. Il parametro messages=[] permette di passare l’intero storico in una sola chiamata, invece di creare una conversazione e inviare messaggi uno alla volta. Il metodo stream_events() restituisce eventi tipizzati (reasoning, text, altri) invece di una sequenza di stringhe, perché i modelli oggi restituiscono contenuto eterogeneo: testo, ragionamento, chiamate a strumenti, allegati.
Compatibilità. I plugin esistenti continuano a funzionare, ma quelli che forniscono modelli extra devono essere aggiornati alla 0.32 per supportare il nuovo sistema di streaming events. llm-anthropic 0.26 è già pronto con i modelli Claude 5. llm-gemini, llm-openrouter e llm-mistral sono in arrivo.
Limiti. Il comando llm openai endpoint non logga le richieste: utile per prompt one-off, ma perdi la tracciabilità se lo usi in un flusso ripetitivo. Il plugin llm-chat-completions-server implementa l’API semi-standard di OpenAI, ma la parola “semi” è significativa: la compatibilità non è garantita su ogni client. Gli strumenti server-side dipendono da cosa il provider offre: niente portabilità fra OpenAI e Anthropic sulle stesse capability.