Skip to main content

Jarvis-Lab: um assistente de homelab via Telegram com Ollama

·524 words·3 mins
Asafe Felipe
Author
Asafe Felipe

Alt text
Jarvis

O Jarvis-Lab é um projeto em Python que conecta o Telegram ao meu homelab usando Ollama como camada de interpretação de linguagem natural. A ideia central é simples: enviar uma mensagem pelo Telegram, interpretar essa mensagem com um modelo local e responder a partir de uma camada de backend controlada.

O objetivo não é apenas conversar com um modelo. O foco é criar uma interface prática para consultar o ambiente, acionar ferramentas internas e manter controle sobre custos, latência e segurança.

Arquitetura atual
#

A arquitetura foi separada em blocos pequenos:

  • app/bot/ recebe mensagens e concentra a integração com o Telegram.
  • app/services/ faz a orquestração da mensagem, integra com o Ollama e executa ferramentas.
  • app/database/ isola modelos, conexão e persistência com SQLAlchemy.
  • tests/unit/ cobre as partes principais com testes unitários.

Hoje o fluxo principal é:

  1. O usuário envia uma mensagem no Telegram.
  2. O bot valida se o chat está autorizado.
  3. A mensagem é salva no banco.
  4. O backend chama o Ollama.
  5. Se o modelo pedir uma ferramenta, o backend executa essa ferramenta e faz uma segunda chamada ao modelo.
  6. A resposta final é enviada ao Telegram.

Decisões tomadas
#

Algumas decisões foram intencionais desde o início.

Python e arquitetura assíncrona
#

O projeto usa Python com asyncio porque a integração com Telegram, HTTP e banco é naturalmente I/O bound. Isso reduz bloqueios desnecessários e simplifica o fluxo do bot.

Ollama local
#

O Ollama foi escolhido para manter o processamento dentro do homelab. Isso melhora a privacidade, reduz a dependência de provedores externos e facilita testes com modelos diferentes.

SQLite com caminho para Postgres
#

O banco inicial é SQLite para manter a operação simples. Ao mesmo tempo, a persistência foi desenhada com SQLAlchemy para facilitar a migração futura para PostgreSQL sem reescrever a camada de acesso a dados.

Segredos em .env
#

Toda configuração sensível fica em .env, incluindo token do Telegram, modelo e URL do Ollama. Isso evita espalhar configuração no código e simplifica deploy local.

Observabilidade por mensagem
#

Uma decisão importante foi salvar métricas de geração do Ollama ligadas a cada mensagem. Agora o projeto registra tokens de prompt, tokens de resposta, tokens por segundo, durações e o payload bruto da geração. Isso permite medir quanto cada mensagem realmente custou em processamento.

Tool calling controlado
#

O modelo não executa nada diretamente. Ele apenas sugere o uso de ferramentas, e o backend decide o que realmente pode ser executado. Isso reduz risco e deixa a camada de automação mais previsível.

O que ja esta funcionando
#

  • Integração com Telegram via polling
  • Controle de acesso porchat_id
  • Integração com Ollama por HTTP
  • Persistência de usuários e mensagens
  • Persistência de métricas de geração por mensagem
  • Testes unitários para bot, serviços e repositório
  • Mascaramento do token do Telegram nos logs

Próximos passos
#

Os próximos passos mais relevantes sao:

  • Adicionar migração de banco para evitar recriar o SQLite a cada mudança de schema
  • Expandir o conjunto de ferramentas do homelab com foco em consultas seguras
  • Melhorar a observabilidade com consultas agregadas por usuário, mensagem e modelo
  • Adicionar endpoint de healthcheck e empacotamento com Docker Compose
Não se esqueça de me seguir no LinkedIn