Skip to content

feat: ativar o prompt caching dormente (ganho maior que TOON) + telemetria de usage completa + fix de quoting lossy no toon.ts (follow-up #75) #77

Description

@wesleysimplicio

Contexto

Follow-up do rollout TOON (#75, PR #76 mergeada). Três achados verificados, em ordem de impacto:

  1. O maior ganho de tokens deste repo não é TOON — é o prompt caching que está wired e nunca dispara. cache_control: ephemeral está implementado em lib/providers/llm.ts:81-83 para opts.system, mas nenhum call site em lib/ passa system prompt — então o contexto estável por cliente (brand voice, regras de compliance, specs de plataforma) é re-enviado sem cache em cada peça. Caching Anthropic ≈ 90% de desconto no input cacheado, vs ~40% do TOON uma única vez.
  2. Telemetria calculada e jogada fora: resolveUsageWithFallback (lib/providers/cost.ts:98-130) computa tokens_in/tokens_out e o flag de proveniência used_estimate, mas UsageEntry (lib/router.ts:31-41) colapsa tudo num número e descarta o flag antes do data/llm-usage.jsonl. Além disso, lib/cli/generate.ts:476-477 rotula errado os tokens no manifest.
  3. Bug de round-trip lossy no codec: needsQuoting (lib/format/toon.ts:58-65) perde strings que começam e terminam com aspas — "\"quoted\"" round-tripa para quoted. Num pipeline de marketing (captions com citações!), isso é corrupção silenciosa de conteúdo.

Escopo

  1. Ativar o caching: mover o contexto estável por cliente (brand voice, compliance rules, platform specs de .marketing-engine/clients/<slug>/) para opts.system nos call sites de lib/cli/generate.ts, fazendo o cache_control já wired disparar. Verificar com os checks de cache-status existentes.
  2. Completar o UsageEntry (~30 linhas): tokens_in, tokens_out, used_estimate, prompt_format (toon|json), savings_tokens_est, piece_id — threading via logUsage (lib/router.ts:58-75). Alinhar campos com a spec simplicio.savings-event/v1 (issue-irmã no simplicio-runtime). Corrigir o rótulo do manifest em generate.ts:476-477.
  3. Fix do quoting em toon.ts:58-65 + fixture de regressão; adotar o corpus de conformidade (feat: TOON-CONTRACT — spec única + corpus de fixtures golden de conformidade para os 8 codecs (3 linguagens) simplicio-mapper#149 — este bug é um dos fixtures fundadores).
  4. Fallback logado (DoD do feat: converter dados estruturados para TOON no conteúdo dos prompts LLM (lib/providers/llm.ts) #75, hoje silencioso): motivo machine-readable quando fallbackLine dispara.
  5. Benchmark real (DoD do feat: converter dados estruturados para TOON no conteúdo dos prompts LLM (lib/providers/llm.ts) #75): estender e2e/toon-format.spec.ts de comprimento-de-chars para estimativa de tokens rotulada, e registrar savings por chamada no llm-usage.jsonl.

Critérios de Aceitação

  • opts.system populado nos call sites; evidência de cache hit registrada
  • data/llm-usage.jsonl carrega tokens_in/out, used_estimate, prompt_format, savings_tokens_est, piece_id
  • "\"quoted\"" round-tripa intacto (teste de regressão)
  • Fallback com motivo logado
  • Manifest com rótulo de tokens correto
  • Fixtures de conformidade passando; provider-agnostic mantido (nada hardcoded fora do router)

Aviso: partir de origin/main atualizado.

Refs: #75, PR #76, wesleysimplicio/simplicio-mapper#149, wesleysimplicio/simplicio-runtime#2775.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions