Exemplos / Rede mesh

Credentialless GPU Sharing

O seu amigo tem GPU. Precisa de um modelo. Ele gera um invite. Digitaliza um QR. Sem partilhar API keys. Sem configurar servidores.

mesh (não precisa de config para guest)

O problema

Quer usar um LLM, mas não tem GPU. O seu colega tem uma máquina potente com llama.cpp em execução. Como usar o modelo dele?

  • Partilhar API keys → perigoso, difícil de revogar, sem rastro de auditoria
  • Levantar um servidor Ollama / vLLM → Docker, regras de firewall, configuração de endpoint, latência
  • Usar um proxy → mais um serviço para correr, mais um ponto de falha

Todas as opções existentes expõem credenciais ou exigem trabalho de infraestrutura. Tem que haver uma forma melhor.

A forma QueryMT

A rede mesh do QueryMT permite que os nós partilhem fornecedores LLM sem partilhar API keys. O host corre os seus fornecedores normalmente. O guest entra com um invite token assinado. Pela rede circulam mensagens de chat; credenciais, nunca.

HOST (servidor GPU)

qmtcode --mesh \
--mesh-invite="Team GPU" \
--invite-uses=5

Gera código QR + URL de invite.
A API key fica aqui.
GUEST (laptop)

qmtcode --mesh-join=TOKEN

Digitalize o QR ou cole a URL.
O agente descobre fornecedores automaticamente via DHT.
Não precisa de API key.

Modelo de segurança

Esta é a inovação central. Isto é exatamente o que acontece no nível do protocolo:

Máquina host

ProviderHostActor
Corre o LLM localmente. Guarda a API key.

API Key: bloqueada aqui
Invite: grant assinado com ed25519
Uso: registado por invite
ChatMessage →← Response
Máquina guest

MeshChatProvider
Reencaminha pedidos de chat para o host.

API Key: nenhuma
Token: verificado offline (sem rede)
Descoberta: DHT auto-find
Só mensagens de chat atravessam a rede

O agente do guest envia um ChatMessage ao host. O host corre com o seu fornecedor local (API key incluída). A resposta volta. Em nenhum momento o guest vê, toca ou precisa da API key. O token é verificado offline com assinaturas ed25519, sem chamada a um servidor central.

Ciclo de vida do invite

1. Gerar invite
O host corre: qmtcode --mesh --mesh-invite="Team GPU" --invite-uses=5 --invite-ttl=7d
Isso cria um grant assinado com ed25519 com 5 usos permitidos e expiração em 7 dias.
2. Partilhar invite
O terminal do host imprime:
• Um código QR (digitalizar com o telemóvel)
• Uma URL: qmt://mesh/join/BASE64TOKEN
• Partilhe qualquer um dos dois com o guest
3. O guest entra
O guest corre: qmtcode --mesh-join=qmt://mesh/join/BASE64TOKEN
O token é verificado offline com a chave pública do host. Sem chamada de rede a um servidor central.
4. Descoberta transparente
O agente do guest descobre o fornecedor llama_cpp via Kademlia DHT. O routing acontece de forma transparente: a config do guest não precisa indicar o endereço do host. Simplesmente funciona.
5. Acompanhamento de uso
O host vê estatísticas de uso no dashboard: quantas vezes cada invite foi usado, por quem e quando.
6. Revogação
Para revogar: apague o invite_id do InviteStore do host. Efeito imediato. Não é preciso rotacionar API keys.

Como funciona a descoberta

QueryMT usa libp2p para a camada mesh com dois modos de descoberta:

  • mDNS (LAN): Descobre peers automaticamente na mesma rede. Zero config. Funciona em escritórios, casas e cafés.
  • Kademlia DHT (internet): Descobre peers entre redes. Os invite tokens incluem o peer ID do host. A DHT resolve isso para um endereço.

O guest não precisa conhecer o IP nem a porta do host. Só precisa do invite token. O mesh cuida do routing.

Config do guest

O guest não precisa de uma config especial. Só precisa de auto_fallback = true na sua configuração mesh. Quando o agente do guest precisa de um fornecedor que não está localmente, consulta o mesh.

# Guest: just join and use
qmtcode --mesh-join=qmt://mesh/join/BASE64TOKEN

# That's it. The agent discovers remote providers automatically.
# No config file needed for the guest.

Funcionalidades-chave

  • ProviderHostActor / MeshChatProvider — o host corre LLMs, o guest proxifica de forma transparente
  • Grants de invite assinados — assinaturas ed25519, verificação offline
  • Codificação QR — partilha invites presencialmente com uma leitura
  • Autodescoberta DHT — sem configuração manual de endpoint
  • Limites de uso + TTL — cada invite tem máximo de usos e expiração
  • Revogação por invite — apague um invite sem afetar os demais
  • Isolamento de credenciais — as API keys nunca saem da máquina host

Experimente

# Terminal 1: Host (machine with GPU)
cargo run --example qmtcode --features dashboard -- \
  --mesh --mesh-invite="Demo" --invite-uses=5 --dashboard

# Terminal 2: Guest (any machine on same network)
cargo run --example qmtcode --features dashboard -- \
  --mesh-join=qmt://mesh/join/<TOKEN_FROM_HOST> --dashboard

# Guest's dashboard will show the host's llama_cpp provider
# Ask the guest's agent anything — it routes to the host's model