João Amaro Lagedo
engenheiro de software
EN PT

Ficino

App da barra de menus do macOS que comenta suas faixas do Apple Music.

Um app da barra de menus do macOS que entrega comentários gerados por IA sobre as faixas do Apple Music conforme elas tocam, rodando inteiramente no dispositivo via Apple Intelligence. O nome vem de Marsilio Ficino, o filósofo renascentista que defendia que a música é uma ponte entre o físico e o divino.

O que faz

Quando uma faixa muda, o Ficino capta com.apple.Music.playerInfo, consulta MusicKit e Genius em paralelo por gêneros, notas editoriais e referências de samples, monta um prompt estruturado e envia para a sessão FoundationModels 3B no dispositivo. Um painel flutuante desliza pelo canto superior direito com a capa do álbum e um parágrafo curto sobre a música — créditos, contexto, a história por trás daquele take. Nenhuma chamada de rede em tempo de execução; nada sai da máquina.

Stack

  • App: Swift 6, SwiftUI, FoundationModels, MusicKit, NSPanel customizado, zero dependências externas.
  • ML workspace: Python com uv, um pipeline de avaliação que espelha o PromptBuilder em Swift exatamente, Batch API da Anthropic para geração sintética de dados de treino, fine-tuning LoRA via o adapter toolkit da Apple.

O que é interessante

O modelo 3B on-device é pequeno o suficiente para alucinar. Sem ajustes, ele prefixava "Sure! Here is…" em metade das respostas, inventava vocalistas e confundia nomes de álbum com faixas. Um adapter LoRA treinado em 3.000 exemplos sintéticos — destilados de metadados reais de MusicKit + Genius e gerados pelo Claude Haiku — eliminou todos os padrões de falha num conjunto de avaliação de 81 faixas. Zero prefácios, zero alucinações, zero atribuições erradas. Custo de treino: cerca de duas horas numa H100, menos de dez dólares.

O pipeline é o objeto interessante. O prompt builder em Swift e o loop de avaliação em Python ficam em sincronia por um pequeno binário de CLI (FMPromptRunner) que os dois lados invocam — o comportamento de modelo que o usuário vê em produção é o mesmo comportamento que os scores de avaliação medem.

Código em github.com/jlagedo/Ficino.

Ver código →