feat: add prompt caching to generate_tests.py#106
feat: add prompt caching to generate_tests.py#106rviannaoliveira wants to merge 1 commit intomainfrom
Conversation
Move static system prompt to a cached `system` block using `cache_control: ephemeral`, so Claude caches project context and requirements across all API calls in a batch. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rviannaoliveira
left a comment
There was a problem hiding this comment.
Review — feat: add prompt caching to generate_tests.py
Regras arquiteturais ✅
Mudança restrita a .github/scripts/generate_tests.py (CI tooling). Não toca módulos da lib, nenhuma regra de dependência entre plataformas se aplica.
Completude ✅
Não é um novo componente — sem necessidade de registrar builder, cobrir onAction ou adicionar model no craftd-core.
Implementação ✅
A separação está correta:
_SYSTEM_PROMPTé constante de módulo (estática, compartilhada entre chamadas) → candidata ao cache.- Conteúdo dinâmico por arquivo (
package_name,class_name, source) permanece nomessages→ correto, não pode ser cacheado. cache_control: {"type": "ephemeral"}no blocosystemestá na posição certa.- Remoção de
build_promptlimpa o código sem perda de funcionalidade. - A assinatura de
call_claudemelhora: recebe os dados brutos em vez de uma string já montada, deixando a responsabilidade de formatação encapsulada na função.
Testes ✅
Script de automação de CI — sem expectativa de teste unitário para o próprio script.
Docs ✅
Sem mudança no comportamento público da lib. Nenhuma atualização de docs/how-to-use/ necessária.
Observação importante
O PR description menciona "~300 tokens" para o system prompt. O mínimo para ativar prompt caching com Haiku é 2 048 tokens (com Sonnet/Opus são 1 024). O prompt atual provavelmente não atinge esse limiar — o cache_control será aceito sem erro, mas o cache não será criado e não haverá economia real de custo.
Recomendo verificar o tamanho real (ex: client.beta.messages.count_tokens) e, se necessário, enriquecer o system prompt com mais contexto do projeto (convenções de nomenclatura, exemplos de testes existentes, etc.) até ultrapassar o mínimo de 2 048 tokens para que o caching seja efetivo.
Fora esse ponto, a implementação está correta, bem descrita e o diff é enxuto. LGTM com a ressalva acima.

Summary
systemblock withcache_control: ephemeralmessagesarraybuild_promptfunctionHow it works
With 8 files: ~70% cheaper on the cached tokens compared to the previous single-prompt approach.
Notes
🤖 Generated with Claude Code