Gemma 4 con Ollama e .NET Aspire: LLM in locale con il visualizzatore GenAI completo
Se hai già usato l’integrazione Azure Foundry o Azure OpenAI in .NET Aspire, conosci già quella funzionalità: il visualizzatore GenAI che mostra le conversazioni con il modello all’interno del dashboard di tracing. Fai clic su una traccia, scorri fino alla chiamata LLM, e appare una piccola icona “sparkles”. Cliccandola, si apre un pannello con il log completo: system prompt, messaggio utente, risposta del modello, tool call, conteggio token e finish reason.
A prima vista sembra una funzionalità esclusiva di Azure Foundry. Non lo è. Il dashboard Aspire non controlla se gen_ai.system == "openai" né fa chiamate ad Azure. Si basa sulle OpenTelemetry GenAI semantic conventions: qualsiasi backend che emette span gen_ai.* con la forma corretta ottiene lo stesso trattamento. Ollama, LM Studio, llama.cpp — se espone un’API compatibile con OpenAI Chat Completions, può illuminare lo stesso popup.
Questo articolo mostra come configurare Ollama con il modello Gemma 4 in locale e ottenere il visualizzatore GenAI completo nel dashboard Aspire, senza Azure e senza costi cloud.
Perché eseguire LLM in locale?
I motivi sono diversi a seconda del contesto:
- Compliance e data privacy: i dati non escono dall’infrastruttura aziendale.
- Costi prevedibili: niente fatture cloud che raddoppiano durante i picchi di sviluppo AI.
- Sviluppo offline: il modello funziona anche senza connessione Internet.
- Iterazione rapida: nessun rate limit durante i test intensivi.
Il meccanismo: OpenTelemetry GenAI conventions
Il dashboard Aspire renderizza il visualizzatore GenAI quando trova span con questi attributi OpenTelemetry:
gen_ai.operation.name (es. chat, embedding)gen_ai.request.model — il modello richiestogen_ai.response.model — il modello che ha rispostogen_ai.input.messages — il prompt, serializzato in JSONgen_ai.output.messages — la risposta, serializzata in JSONgen_ai.usage.input_tokens / gen_ai.usage.output_tokensgen_ai.response.finish_reasons
Quando uno span con questi attributi appare nella vista traces sull’activity source Experimental.Microsoft.Extensions.AI, il dashboard aggiunge l’icona sparkles e mostra il popup.
IChatClient è l’astrazione di Microsoft.Extensions.AI per qualsiasi cosa a cui si possano inviare messaggi chat. Azure OpenAI, Ollama e i modelli locali la implementano direttamente o si adattano ad essa. Il wrapper OpenTelemetry che ci interessa sa solo come tracciare oggetti con la forma di IChatClient.
Le quattro cose da configurare
Per ottenere il visualizzatore GenAI con un modello locale servono esattamente quattro elementi:
- Un’integrazione di hosting che esegue il backend del modello come risorsa Aspire e produce una connection string.
- Un
IChatClient nel servizio consumer, decorato con UseOpenTelemetry() e content capture abilitato. - La registrazione della sorgente di tracing in
ServiceDefaults per far fluire gli span GenAI nel tracer provider. - Il toggle di content capture, tramite variabile d’ambiente o via
UseOpenTelemetry. Senza di esso il popup appare ma i messaggi sono vuoti.
Mancarne anche solo uno produce output silenziosamente degradato: senza il punto 3 gli span non escono dal processo; senza il punto 4 il popup è vuoto; senza il punto 2 si ottengono solo span HTTP generici.
1. Integrazione hosting: Ollama come risorsa Aspire
Aspire non include un’integrazione Ollama out of the box. Il Community Toolkit ne ha una, ma costruirla da zero mostra il pattern applicabile a qualsiasi backend OpenAI-compatible.
In una nuova class library referenziata dall’AppHost (con il package Aspire.Hosting):
public sealed class OllamaResource(string name)
: ContainerResource(name), IResourceWithConnectionString
{
internal const string PrimaryEndpointName = "http";
private EndpointReference? _primaryEndpoint;
public EndpointReference PrimaryEndpoint =>
_primaryEndpoint ??= new EndpointReference(this, PrimaryEndpointName);
public ReferenceExpression ConnectionStringExpression =>
ReferenceExpression.Create(
$"Endpoint={PrimaryEndpoint.Property(EndpointProperty.Url)}");
}
public static class OllamaResourceBuilderExtensions
{
public static IResourceBuilder<OllamaResource> AddOllama(
this IDistributedApplicationBuilder builder,
string name,
int? port = null)
{
var resource = new OllamaResource(name);
return builder.AddResource(resource)
.WithImage("ollama/ollama", "latest")
.WithHttpEndpoint(port: port ?? 11434, targetPort: 11434,
name: OllamaResource.PrimaryEndpointName)
.WithVolume("ollama-data", "/root/.ollama");
}
}
Nell’AppHost si aggiunge la risorsa Ollama e si collega al servizio che la usa:
var ollama = builder.AddOllama("ollama")
.WithModel("gemma4:e2b");
var api = builder.AddProject<Projects.ScrumSummary_Api>("api")
.WithReference(ollama)
.WaitFor(ollama);
2. IChatClient con OpenTelemetry nel servizio consumer
Nel servizio che usa il modello, si registra il client con la catena di decoratori corretta:
builder.Services.AddSingleton(sp =>
{
var connectionString = builder.Configuration.GetConnectionString("ollama")!;
var endpoint = new Uri(connectionString.Replace("Endpoint=", ""));
return new OllamaApiClient(endpoint)
.AsChatClient("gemma4:e2b")
.AsBuilder()
.UseOpenTelemetry(configure: options =>
{
// Abilita la cattura del contenuto dei messaggi
options.EnableSensitiveData = true;
})
.Build();
});
Il flag EnableSensitiveData = true è il toggle critico. Senza di esso, il popup nel dashboard compare ma non mostra i messaggi (per motivi di privacy è disabilitato di default).
3. Registrazione della sorgente di tracing in ServiceDefaults
Nel progetto ServiceDefaults, aggiungere la sorgente activity di Microsoft.Extensions.AI:
builder.Services.AddOpenTelemetry()
.WithTracing(tracing =>
{
tracing
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
// Questa è la riga chiave
.AddSource("Experimental.Microsoft.Extensions.AI");
});
Senza questa riga gli span GenAI vengono emessi ma non raggiungono l’exporter e non appaiono nel dashboard.
4. Alternative al flag EnableSensitiveData
In ambienti dove non si vuole abilitare il flag nel codice (ad esempio per motivi di compliance), si può usare la variabile d’ambiente:
DOTNET_EXTENSIONS_AI_TELEMETRY_ENABLE_SENSITIVE_DATA=true
Oppure impostarla nell’AppHost solo per i progetti in development:
var api = builder.AddProject<Projects.ScrumSummary_Api>("api")
.WithReference(ollama)
.WithEnvironment("DOTNET_EXTENSIONS_AI_TELEMETRY_ENABLE_SENSITIVE_DATA", "true");
Il risultato nel dashboard
Una volta configurati tutti e quattro gli elementi, ogni chiamata al modello Ollama locale appare nelle traces di Aspire come span GenAI. Cliccando sull’icona sparkles si apre il pannello con il log completo della conversazione: system prompt, messaggi utente, risposta del modello con i token usati e il finish reason — esattamente come con Azure OpenAI o Azure Foundry, ma con il modello che gira sulla propria macchina.
Generalizzare ad altri backend
Il pattern si applica a qualsiasi backend compatibile con l’API OpenAI Chat Completions: LM Studio, llama.cpp con server HTTP, vLLM. L’unico requisito è che il client implementi o si adatti a IChatClient e che il wrapper UseOpenTelemetry() venga applicato. Il resto — la registrazione del tracing, il flag di content capture — rimane identico.
Conclusione
Il visualizzatore GenAI di .NET Aspire non è un’esclusiva di Azure. È un’interfaccia costruita sopra gli standard OpenTelemetry, accessibile a chiunque emetta gli span corretti. Quattro configurazioni, nessun servizio cloud obbligatorio, e si ottiene la stessa esperienza di debugging degli LLM che si avrebbe con Azure Foundry — con Gemma 4, Ollama e tutto in locale.
Fonte: Run Gemma 4 with Ollama locally, and keep the Aspire LLM Insights (sparkles and all) — Erik Lieben
Can't use Microsoft Foundry because of compliance or an Azure bill that doubles during an AI development spike, but still want the best AI debugging experience in Aspire? Here's how to keep the full GenAI chat-log sparkles while Ollama and Gemma 4 ru…
Erik Lieben
macfranc
in reply to Elena Brescacin • • •davvero un intervento molto interessante!
Ormai sei entrata nella triade delle Elene del Fediverso con @_elena e @valhalla
@fediverso @danielebesana
reshared this
Che succede nel Fediverso? e Oblomov reshared this.
Elena Brescacin
in reply to macfranc • • •reshared this
Che succede nel Fediverso? e macfranc reshared this.
Elena Rossini ⁂
in reply to macfranc • • •@macfranc bravissima Elena !!! Questo commento mi fa pensare che mi farebbe TANTISSIMO piacere incontrarvi dal vivo - il meeting delle 3 Elene! Si può fare a luglio?
@elettrona @valhalla
macfranc
in reply to Elena Rossini ⁂ • • •@_elena sarebbe fantastico.
PS: il video di @valhalla è stato uno dei primi mai pubblicati sul fediverso e la sua istanza Friendica è l'istanza più vecchia tra quelle esistenti oggi in Italia 😅
video.linux.it/videos/watch/91…
@elettrona
valhalla
2021-10-18 19:57:18
Oblomov reshared this.
macfranc
in reply to macfranc • • •Elena Brescacin
in reply to macfranc • • •Elena Rossini ⁂
in reply to Elena Brescacin • • •in che zona sei Elena? Magari si potrebbe venire dalle tue parti...
@macfranc @valhalla
Elena ``of Valhalla'' likes this.
Fabio
in reply to macfranc • • •macfranc reshared this.
Elena Rossini ⁂
in reply to macfranc • • •@macfranc grazie per il video!!!!! ❤️ e bravissima Elena!!!
@valhalla @elettrona
Luca Sironi
in reply to Elena Rossini ⁂ • • •@_elena
ma infatti vi seguiamo tutti tutte e tre, non lo sapevate ? 🙂
@macfranc @valhalla @elettrona
Elena ``of Valhalla''
in reply to macfranc • • •@macfranc @Elena Rossini ⁂ @Elena Brescacin tecnicamente non è “la mia istanza” ma l'istanza del LUG di cui faccio parte (sì, credo di essere l'utente che posta di più, ma non sono l'admin)
ma confermo che siamo sul fediverso all'incirca dai tempi di Adamo ed Eva
reshared this
rag. Gustavino Bevilacqua, Oblomov e macfranc reshared this.
Elena Brescacin
in reply to Elena ``of Valhalla'' • • •Elena ``of Valhalla'' likes this.
macfranc reshared this.
Elena ``of Valhalla''
in reply to Elena Brescacin • • •@Elena Brescacin @macfranc @Elena Rossini ⁂ tecnicamente identi.ca era del 2008, anche se all'epoca non c'erano molte istanze federate tra di loro, mentre friendica è del 2010 e quella non ha avuto il problema dell'istanza “ufficiale” che si prendeva tutti gli utenti, ma è sempre stata più distribuita
(anche perché non ha grandi strumenti per gestire grandi istanze, è molto più orientata alle istanze per piccole comunità)
ammetto che all'epoca (io ero su identi.ca, e poi su questa istanza friendica dal 2013) sul fediverso si parlava praticamente soltando di federazione, ogni tanto di linux, e di federazione, le persone normali sono arrivate qualche anno dopo
macfranc reshared this.
macfranc
in reply to Elena ``of Valhalla'' • • •@valhalla io sono approdato da queste parti a fine 2019, eh... ma ricordo che ancora per un paio di anni si è continuato a parlare molto di federazione e di quanto fossero futili le conversazioni in cui non si parlava di federazione 😅
@_elena @elettrona
Elena ``of Valhalla'' likes this.
Elena Rossini ⁂
in reply to Elena ``of Valhalla'' • • •Elena ``of Valhalla'' likes this.
Oblomov
in reply to Elena ``of Valhalla'' • • •va be' ma è comunque “tua” nel senso di quella su cui sei, dài 😎
Elena ``of Valhalla'' likes this.
macfranc
in reply to Oblomov • • •Elena ``of Valhalla'' likes this.
Elena ``of Valhalla''
in reply to Oblomov • • •Elena Brescacin
in reply to Elena ``of Valhalla'' • • •@valhalla @oblomov @macfranc @_elena conoscevo identi.ca ma non ci sono mai entrata. Diciamo che sperimentavo delicio.us, poi il primo diggita, oknotizie, friendfeed. Poi freeforumzone. Parlare di federazione, io ne sento parlare da mò...
. . . . . padania libera . . . . .
Mi spiace, non posso nascondere di avere familiari che la pensano opposto a come la penso io. Però seriamente, di federazione nel senso fediverso non ne avevo sentito mai parlare. E ancora adesso, faccio una enorme fatica a spiegarla ai non addetti ai lavori.
Elena ``of Valhalla'' likes this.
Elena ``of Valhalla''
in reply to Elena Brescacin • • •@Elena Brescacin @Oblomov @macfranc @Elena Rossini ⁂ eh, sì, all'epoca era veramente una cosa da fissati linuxari, una nicchia nella nicchia nella nicchia
non che non si provasse a farlo conoscere, è che non eravamo capaci
poi è arrivato mastodon e ha cambiato fortemente le cose, per fortuna
reshared this
Oblomov e macfranc reshared this.
Elena Brescacin
in reply to Elena ``of Valhalla'' • • •Elena ``of Valhalla'' likes this.
Elena Brescacin
in reply to Elena ``of Valhalla'' • • •@valhalla @oblomov @macfranc @_elena sono costretta ad ammetterne anche un'altra, in merito alla federazione e al concetto di "web aperto" in genere: è più facile che il messaggio venga colto da chi ha la nostra età (dai 40 in su) più dei nativi digitali cioè quelli "dagli anni 90 e dai 2000 in poi" [cit. dj matrix]...
Chi è diventato adulto in un'internet già mezza chiusa (youtube, facebook, instagram)... i forum neanche sa cosa sia. La mail, manco che manco. Come se a me spiegassero i colori. Sono nata senza vederli, che cavolo pretendi di spiegarmeli a fare? Con la differenza che a me i colori non servono, salvo le poche convenzioni "verde-ok, giallo-warning, rosso-errore" che poi fedle usa grigio/nero per indicare errore ma è un'altra faccenda... Là però il colore non è un colore ma è semantica.
Per il resto, potrebbero anche crearmi fraintendimenti "sei come il sole" di solito si intende "sei bello / sei di ispirazione / hai un aspetto piacevolmente degno di nota"...
Io per il sole potrei intenderlo come calore quindi "sei caldo / sei sexy" e il vaffambrodo là è garantito.
Noi che siamo più grandi di questi ragazzi generazione zzzzz (quelli che dormono?) abbiamo seriamente un'enorme responsabilità verso di loro. E anche verso gli over60. Dobbiamo entrare nel loro punto di vista, capire cosa gradiscono, come si muovono, perché allo stato attuale -WordPress a parte- non so il fediverso quanto possa attrarli.
Elena ``of Valhalla'' likes this.
reshared this
Oblomov e Ann(in)a reshared this.
Oblomov
in reply to Elena Brescacin • • •Elena Brescacin
in reply to Oblomov • • •Oblomov reshared this.
Oblomov
in reply to Elena Brescacin • • •@valhalla @macfranc @_elena
vero, questa è l'imperfezione delle attuali implementazioni (anche se ad esempio i boost da Mastodon mi pare contino come upvote su Lemmy). In generale ci sono piattaforme che hanno una gamma di funzioni piú vasta (friendica, notoriamente) con cui è possibile interagire con piú piattaforme in maniera piú completa, ma c'è ancora strada da fare …
macfranc reshared this.
macfranc
in reply to Oblomov • • •@oblomov questo è dovuto al fatto che per ragioni di scala nel Fediverso comanda Mastodon, ossia il più stupido della cucciolata 🤣 o, per riformulare senza dare un giudizio morale, l'app più semplice ma anche meno funzionale per interagire con tutte le altre piattaforme più evolute del Fediverso...
Tuttavia, non mi concentrerei troppo sul like che è qualcosa che generalmente non interessa all'utente del fediverso. Il fediverso infatti è focalizzato, e questo è il suo punto di forza, sulle interazioni verbali, sulle risposte. L'assenza di algoritmi troppo invasivi infatti consente di valorizzare l'importanza dell'interazione verbale.
I like possono tenerseli stretti Facebook, Instagram, X e Bluesky
Certamente l'interoperabilità delle funzionalità avanzate è un obiettivo importante, ma al momento possiamo anche dirci abbastanza soddisfatti. Certo,
Mi piacerebbe che fosse possibile creare un evento Mobilizon dal mio account Friendica o caricare, previa autorizzazione del proprietario del canale, un video su PeerTube dal mio account Mastodon. Gli sviluppatori di Lemmy, in fondo, sono stati i primi che hanno consentito la conversione di un post "nota" di Mastodon in un post "Articolo" di Lemmy; non vedo perché non dovrebbero provarci gli sviluppatori di Peertube e Mobilizon.
@elettrona @valhalla @_elena
Oblomov reshared this.
Oblomov
in reply to macfranc • • •@macfranc @valhalla @_elena
Mastodon è al contempo la cosa migliore e la cosa peggiore che potesse capitare al Fediverso. Ha il positivo di essere riuscito a “spuntarla”, a guadagnare trazione dove molte altre piattaforme, pure migliori da molti punti di vista, non erano riuscite.
Dall'altra questa sua predominanza, e le sue ridotte capacità, sono anche un enorme limite all'evoluzione del Fediverso verso quello che potrebbe davvero essere.
reshared this
macfranc, rag. Gustavino Bevilacqua e Joe Vinegar reshared this.
macfranc
in reply to Oblomov • • •@oblomov sottoscrivo. Ma sono ottimista: Fortunatamente, l'ingresso di attori importanti come WordPress, Flipboard e Ghost e l'intraprendenza di Pixelfed, Lemmy, Peertube e dei nuovi NodeBB e Wafrn, stanno ribilanciando il baricentro.
@elettrona @valhalla @_elena
Oblomov
in reply to macfranc • • •@macfranc @valhalla @_elena
Wafrn mi ispira veramente molto. Lo sto considerando seriamente per la mia prima esperienza di self-hosting (che spero sia anche l'ultima nel senso di non dover passare a cercare altro), ma aspetto che maturi un po'.
Joe Vinegar reshared this.
macfranc
in reply to Oblomov • • •@oblomov wafrn è fantastico e lo sviluppatore che c'è dietro è un soggetto brillante. Forse l'unico problema è che ho aspettative eccessive su Wafrn mentre, in fondo, vorrebbe essere solo un'alternativa a Tumblr ma con i capezzoli 😅
Però è oggettivamente molto promettente e, per me, la migliore novità del 2025
@elettrona @valhalla @_elena
Oblomov reshared this.
Elena Brescacin
in reply to macfranc • • •Elena Brescacin
in reply to macfranc • • •Oblomov
in reply to Elena Brescacin • • •Elena Brescacin
in reply to Oblomov • • •macfranc
in reply to Elena Brescacin • • •sai che Friendica è il mio software preferito, ma sono d'accordo con te; anzi, tecnicamente l'accessibilità è secondaria, perché il problema è l'ergonomia. Se venisse migliorata l'ergonomia, il sistema sarebbe già predisposto meglio Per consentire una maggiore accessibilità
@oblomov @valhalla @_elena
Elena Brescacin
in reply to macfranc • • •reshared this
Oblomov e macfranc reshared this.
Elena ``of Valhalla''
in reply to Elena Brescacin • • •@Elena Brescacin @Oblomov @macfranc @Elena Rossini ⁂ temo che gli sviluppatori friendica oltre ad essere quattro gatti siano tutti sviluppatori back end, che quindi sviluppano programmi con l'ergonomia che fa comodo alla forma mentale degli sviluppatori back end (e non alle persone normale)
infatti io mi ci trovo benissimo, ma riconosco di essere quella strana
reshared this
macfranc e Oblomov reshared this.
macfranc
in reply to Elena ``of Valhalla'' • • •@valhalla infatti è per questo che, se si vuole un pubblico più ampio, più che lavorare sull'interfaccia del sistema (come peraltro è stato fatto con l'interfaccia "BookFace") è molto più utile lavorare sull'ergonomia delle App.
È proprio a questo che Punta l'app Raccoon for Friendica sviluppata da @dieguitux8623 che recentemente sta per essere oggetto di una forte riscrittura ma che ha già presentato una buona ergonomia, sicuramente migliore sia dell'interfaccia web sia di quello che possono assicurare le altre app compatibili con mastodon.
@oblomov @_elena @elettrona
Release 1.0.0-beta02 · LiveFastEatTrashRaccoon/RaccoonForFriendica
GitHubElena ``of Valhalla'' likes this.
Oblomov reshared this.
Elena ``of Valhalla''
in reply to Oblomov • • •@Oblomov @macfranc @Elena Rossini ⁂ @Elena Brescacin c'è anche Christine Webber, una delle autrici dello standard Activity Pub, che lavora sul fatto di superare il modello una piattaforma / un tipo di contenuti, per passare ad un modello in cui c'è un'identità, e i vari tipi di contenuti che arrivano dalla stessa identità
però non so se ce ne si possa aspettare una soluzione pratica, o più facilmente una fonte di ispirazione per altro
Oblomov
in reply to Elena ``of Valhalla'' • • •si, ma qualunque sia la scelta “teorica” alla fine l'unica cosa che conta veramente è chi la implementa, e se Mastodon non lo fa rimane una fregatura.
Luca Sironi
in reply to Elena Brescacin • • •@oblomov @valhalla @macfranc @_elena
forse la risposta a quella domanda può essere anche si, o dipende.
Io non pubblicherò mai un video, o un podcast, o un articolo long form, ma mi piacciono, in quel senso non mi serve un account su peertube.
Elena ``of Valhalla''
in reply to Elena Rossini ⁂ • • •@Elena Rossini ⁂ @macfranc @Elena Brescacin al momento non riesco a prendere impegni sul lungo periodo
però sì, un incontro riuscendo ad organizzare sarebbe bellissimo!
Elena Brescacin
in reply to macfranc • • •Che succede nel Fediverso? reshared this.