SPRINT 13 · 19-MAI-2026v2.13 · OPEN SOURCEBATERIA E2EGEMINI PRO FULLSONNET REVIEWCITATIONS PERPLEXITYDIVERSITY DINÂMICO223/224 TESTES
Orquestrador multi-LLM em paralelo
Demandas complexas decompostas em waves paralelas entre 12 modelos canônicos em 6 providers. Sprint 13 (19-mai-2026) executou bateria E2E pós-Sprint 12 e fechou seis gaps em sequência: Gemini 2.5 Pro ativado em analysis, fact_check e data_processing (era Flash); Claude Sonnet 4.6 promovido a review primary (era Groq Heavy) garantindo Anthropic em planos COMPLEX; diversity guarantee dinâmico com target = min(plan_size, 5); Perplexity com return_citations=true e search_recency_filter=year; model_id e citations persistidos no audit; thinkingBudget reservado em 1/3 do max_tokens em Gemini Pro (corrige parts=[]) e UX em tempo real com preview por wave no stdout. Mantém Sprint 12: COPY PREMIUM ONLY (GPT-5.5 → Opus 4.7 → Gemini Pro) e cap Perplexity 0,50.
Gemini Pro guardthinkingBudget = max(512, min(2048, mt/3))
ResiliênciaCircuit breaker · 3 falhas → OPEN 90s
Health endpointGET /health 200/503 (6 providers)
Suite de testes223/224 verde · ~14s
Ping 6 LLMs$0,006/exec · 6/6 OK
Total de chamadas1.474 · $255.45
Painel executivo · pronto para apresentação
Maio 2026 em revisão
Snapshot do orquestrador: 4 sprints lançadas no mês (Sprint 10 → 13), 6 LLMs canônicos em 6 providers e dataset auditado em bateria E2E. Estilizado para captura de tela — copie a imagem direto para slides.
4
Sprints no mês
Sprint 10 · 11 · 12 · 13
223
Testes verde
+1 xfail · ~14s
6→6
LLMs canônicos
xAI Grok adicionado (Sprint 11)
23.478
LOC Python
70 arquivos · 14 módulos src
72
Commits totais
14 substantivos no mês
57%
Coverage global
módulos novos 70-98%
Sprint 10 · 13-mai
Bateria 360 + 6 bugs corrigidos
Ping + doctor + finops + plan + run + board executados em sequência. Bug crítico Sonnet 4.6 dependencies-as-dicts resolvido. AVG_COST_PER_CALL Perplexity recalibrado 6× (real $0,05/call). Cap Perplexity de 0,50 → 0,35 protegeu wall time. 218/220 verde.
Sprint 11 · 17-mai
xAI Grok 6º provider + diversity guarantee
Grok 4.3 / 4.20-multi-agent / 4.20-non-reasoning adicionados com busca live em X/Twitter via search_parameters. 6 task types exclusivos. Diversity guarantee 4/6 providers em planos COMPLEX 5+. Upgrades simultâneos: Opus 4.6 → 4.7, Llama 3.3 → Llama 4 Scout (5× barato).
Sprint 12 · 17-mai
COPY PREMIUM ONLY + Perplexity prioridade
writing/copywriting/seo agora só GPT-5.5 → Opus 4.7 → Gemini Pro (Sonnet/Haiku/Flash banidos de copy). Cap Perplexity 0,35 → 0,50 restaurado. FALLBACK_CHAINS['research']: perplexity → gemini Pro → claude Opus → gpt-5.5. OpenAI gpt-4o → gpt-5.5 canônico.
Sprint 13 · 19-mai
Bateria E2E + 6 gaps fechados
Gemini 2.5 Pro ativado em analysis/fact_check/data_processing (era Flash). Sonnet 4.6 promovido a review primary (era Groq Heavy). Diversity target dinâmico min(plan, 5). Perplexity com return_citations + recency=year. model_id + citations persistidos no audit. thinkingBudget guard. UX wave preview no stdout.
Roteamento canônico pós-Sprint 13 · papel por LLM
Catalog YAML v2.1 · atualizado 2026-05-17
Anthropiccap 40%
Opus 4.7
Architecture · Critical review · Copy fallback
Anthropiccap 40%
Sonnet 4.6
Review primary (S13) · Decompose · Wave 1
OpenAIcap 45%
GPT-5.5
Copy primary (S12) · Reasoning denso
Googlecap 45%
Gemini 2.5 Pro
Analysis · fact_check · code (S13)
Perplexitycap 50%
Sonar Deep
Research priority · citations + recency
Groqcap 65%
gpt-oss-120b
Code review · extraction · fast
Groqcap 65%
Llama 4 Scout
Classification · summarization
xAIcap 30%
Grok 4.3
Realtime · social listening · X live
xAIcap 30%
Grok Multi-Agent
Multi-perspective · 4 agents nativo
Googlecap 45%
Gemini 2.5 Flash
data_processing primary · cache barato
Anthropiccap 40%
Haiku 4.5
Tasks simples · ping · health
xAIcap 30%
Grok Fast
Non-reasoning · latência mínima
Entregas no repo geo-orchestrator · 27-abr → 27-mai
19 mai
Sprint 13 · Bateria E2E + 6 gaps
Gemini Pro full + Sonnet review + diversity dinâmico + citations + model audit
19 mai
fix · 3 bugs E2E identificados
Calibração pós-bateria. TaskResult.model='?' resolvido. Perplexity body params validados.
17 mai
Sprint 12 · COPY PREMIUM ONLY
writing/copywriting/seo só GPT-5.5/Opus 4.7/Gemini Pro. Sonnet/Haiku/Flash banidos de copy.
17 mai
Perplexity prioridade research
Cap restaurado 0,35 → 0,50. FALLBACK_CHAINS['research'] reordenado para perplexity primary.
17 mai
OpenAI gpt-4o → gpt-5.5 canônico
Catalog YAML v2.1 sincronizado. Drift Sprint 11 fechado. API compat fix. Pricing $5/$15 por Mtok.
17 mai
Sprint 11 · xAI Grok 6º provider
Grok 4.3 + Multi-Agent + Fast. Busca live em X/Twitter. Diversity guarantee 4/6 em COMPLEX.
17 mai
Upgrade canônico LLMs 2026-05-17
Opus 4.6 → 4.7. Llama 3.3 70B → Llama 4 Scout 17B 16E (5× mais barato). Groq Heavy gpt-oss-120b.
Recebe uma demanda em linguagem natural (PT-BR), decompõe em tasks tipadas com dependências, distribui entre 12 modelos canônicos em 6 providers respeitando o cap por família e a diversity guarantee dinâmica (target = min(plan_size, 5)) em planos COMPLEX, executa em waves paralelas com cache semântico e validação por rubrica, grava métricas + model_id + citations, e devolve um relatório estruturado. Pós-Sprint 13, Gemini 2.5 Pro é primary em analysis, Claude Sonnet 4.6 em review, Perplexity expõe citations array com URLs/DOIs e o pipeline emite preview por wave no stdout em tempo real.
Sprint atual
Sprint 13
Bateria E2E + Gemini Pro + Sonnet review
Suite de testes
223/224
verde · ~14s (+1 xfail)
Coverage global
57%
módulos novos 70-98%
Sprints lançadas
13
abr-mai 2026
Linhas Python
23.478+
72 commits · 70 arquivos
LLMs canônicos
12
6 providers
Calls totais
1.474
$255.45 gastos
Catalog SoT
v2.1
gpt-5.5 sincronizado
Stack técnico
Decisões priorizam zero dependência adicional quando possível, padrões da indústria quando necessário e tipagem forte em todas as camadas.
Modelos tipados Task/Plan/TaskResult/ExecutionReport. Validação runtime e serialização JSON. Sprint 10 ajustou _parse_plan para aceitar dependencies em list de dicts.
Click + Rich CLI
Interface com tabelas, spinners, timeline Gantt e output FinOps estruturado. 12 LLMs listados em cli.py models.
Catalog YAML SoT
model_catalog.yaml é a fonte única em runtime. Hot-reload via GEO_CATALOG_PATH. 6 providers documentados canonicamente.
Sprint 11 + Sprint 13: planos COMPLEX 5+ tasks têm target = min(len(tasks), 5) providers únicos (era fixo em 4). Baseado em Mixture of Agents (Wang 2024), DAAO (2509.11079), AdaptOrch (2602.16873).
Audit observability (model_id + citations)
Sprint 13: TaskResult ganha model: str e citations: list[str] (URLs/DOIs de Perplexity). Fim do model='?' no execution_*.json — correlação direta entre regressão de qualidade e upgrade de modelo upstream.
Da demanda em linguagem natural até o relatório estruturado. Cada fase tem responsabilidade única e pode ser substituída isoladamente. Fases determinísticas (sem LLM) reduzem custo e latência; LLMs entram apenas onde raciocínio é necessário. Sprint 13 explicitou a fase Diversity Guarantee como etapa separada entre Smart Router e Plan Rebalance.
01
01
Demanda em linguagem natural
INPUT
O usuário descreve a tarefa em PT-BR. Pode ser uma frase ou um briefing de 500 palavras com restrições, exemplos e referências.
02
02
Prompt Refiner
DETERMINÍSTICO
Pipeline de 3 etapas determinísticas (parse, enrich, optimize). Sem chamada de LLM. Inspirado em HALO (arXiv 2505.13516).
03
03
Decompose · Claude Sonnet 4.6
LLM CALL
Sprint 9 reverteu o decompose para Sonnet (wave 1 estável). Gera plano JSON com tasks tipadas e dependências. Fallback: Gemini → Opus.
04
04
Smart Router · classify_demand
LÓGICA
Classifica tier (SIMPLE/MODERATE/COMPLEX) com premium signals expandidos (Sprint 11). Define quantos LLMs participam e em qual tier.
05
05
Diversity Guarantee · target dinâmico
LÓGICA
Sprint 13: target = min(len(tasks), 5). _ensure_provider_diversity faz upgrades estratégicos quando rebalance inicial não cobre o alvo. Plano de 5 tasks busca 5 providers únicos, plano de 6+ capado em 5. Antes era fixo em 4.
06
06
Code-First Gate
DETERMINÍSTICO
Tasks determinísticas (slugify, JSON parse, regex) resolvidas sem LLM. Inspirado em Huryn/Medium. Economia ~30%.
07
07
Semantic Cache · Jaccard
DETERMINÍSTICO
Bag-of-words similarity sobre task description. Hit rate ~25%. TTL ajustado por Quality Judge.
08
08
Plan Rebalance · cap por provider (6 famílias)
LÓGICA
Pré-aloca cada task respeitando PROVIDER_SHARE_CAP. Anthropic ≤ 40%, OpenAI ≤ 45%, Google ≤ 45%, Perplexity ≤ 50% (Sprint 12 restaurou de 35%), Groq ≤ 65%, xAI ≤ 30%. Architecture/critical_review hard-pin. Copy (writing/copywriting/seo) tem hierarquia premium-only: gpt-5.5 → Opus 4.7 → Gemini Pro.
09
09
Waves paralelas · asyncio.gather + UX preview
PARALELO
Tasks independentes executam simultaneamente em waves topológicas. Speedup observado: 2-5x. Sprint 13 adicionou wave preview em tempo real no stdout (>>> Wave N + [OK] tN -> provider) e expôs model_id + citations no TaskResult.
10
10
Quality Judge · Claude Sonnet 4.6
LLM CALL
Rubrica de 5 dimensões (factual, completude, PT-BR, eficiência, fontes). Verdict APROVADO/RESSALVAS/REPROVADO. Sprint 13 promoveu Sonnet a review primary (era Groq Heavy) — supera em PT-BR e diversifica Anthropic em COMPLEX.
11
11
Report + Health + KPIs
OUTPUT
execution_*.json com model_id + citations gravado, .kpi_history.jsonl atualizado, /health pollable (6 providers). Auto-trigger de recalibração se drift.
Code-First Gate
Huryn/Medium
Tasks determinísticas (slugify, JSON parse, regex match) resolvidas sem LLM. Reduz ~30% das chamadas em demandas com componente operacional.
Prompt Refiner
HALO · arXiv 2505.13516
Pipeline de 3 etapas (parse, enrich, optimize) que enriquece a demanda antes de decompor. Aumenta ~25% a qualidade do plano gerado.
Semantic Cache
AFlow · arXiv 2410.10762
Jaccard similarity sobre bag-of-words da task description. Hit rate ~25% em runs repetidos. TTL ajustado pelo Quality Judge.
Smart Router
CASTER · arXiv 2601.19793
Classifica demand tier (SIMPLE/MODERATE/COMPLEX) e marca complexity por task. Define quantos LLMs participam e em qual tier.
Adaptive Decomposer
HALO · arXiv 2505.13516
Macro-plan inicial pode ser detalhado wave-a-wave por demanda complexa. Reduz over-decomposition em demandas simples.
Quality Judge
Anthropic Engineering
LLM-as-Judge com rubrica de 5 dimensões. Sprint 13 promoveu Claude Sonnet 4.6 a primary (era Groq Heavy) — supera em qualidade editorial PT-BR e diversifica Anthropic. Verdict APROVADO/RESSALVAS/REPROVADO ajusta TTL do cache e dispara retry.
Diversity Guarantee
MoA · Wang 2024 / DAAO 2509.11079 / AdaptOrch 2602.16873
Sprint 11 + Sprint 13: em planos COMPLEX 5+ tasks, _ensure_provider_diversity calcula target = min(plan_size, 5) providers únicos (Sprint 13 trocou o target fixo de 4 por esse alvo dinâmico). Ensemble heterogêneo bate homogêneo em +7-15% quality (GSM8K/MATH) e reduz single-point-of-failure de 12% para 2% em outage.
Algoritmo · classify_demand() scoring
O SmartRouter classifica cada demanda em SIMPLE / MODERATE / COMPLEX antes de rotear qualquer task. O score é a soma de 4 dimensões — Sprint 11 adicionou premium signalsque puxam demandas curtas com sinal crítico ("monitorar X agora", "debate de múltiplas perspectivas") direto pra COMPLEX.
Cada domínio detectado na demanda adiciona ao multi-domain score. Sprint 11 adicionou 3 domínios canônicos que invocam providers específicos: realtime (xAI Grok), multi_perspective (grok_multi com 4 agentes paralelos nativos) e premium_reasoning (Claude Opus 4.7).
Em planos COMPLEX com 5+ tasks, o router calcula o alvo de cobertura como target = min(len(tasks), 5) (Sprint 13 trocou o target fixo de 4 por esse cálculo). Se o rebalance inicial não atinge o alvo, o router faz upgrades estratégicos usando hints por provider ausente. Architecture e critical_review nunca são movidos (hard-pin). Baseado em Mixture of Agents (Wang 2024, +7-15% quality), RouteLLM (Ong 2024, single-point-of-failure 12% → 2%) e When Agents Disagree (mar/2026, 0,810 vs 0,512 win rate).
Anthropicordem de hint
1architecture → claude (Opus 4.7)
2critical_review → claude
3decomposition → claude_sonnet
4review → claude_sonnet (Sprint 13)
5code_review → claude_sonnet
OpenAIordem de hint
1writing → gpt4o
2copywriting → gpt4o
3seo → gpt4o
Googleordem de hint
1code → gemini (Pro)
2analysis → gemini (Sprint 13)
3fact_check fallback → gemini (Sprint 13)
4data_processing → gemini_flash
Perplexityordem de hint
1research → perplexity
2fact_check → perplexity
3citations + recency=year (Sprint 13)
Groqordem de hint
1classification → groq (Llama 4 Scout)
2summarization → groq
3translation → groq
4extraction → groq_heavy
5review fallback → groq_heavy
xAIordem de hint
1realtime_search → grok 4.3
2social_listening → grok
3current_events → grok
4multi_perspective_decomposition → grok_multi
5long_context_synthesis → grok_multi
Pipeline em pseudo-código
O caminho completo da demanda até o relatório, com os 4 pontos de decisão chave.
# 1. Refine + decompose
plan = Sonnet_4_6.decompose(refined_demand) # wave 1 estável
tier = classify_demand(demand, len(plan.tasks)) # SIMPLE/MODERATE/COMPLEX
# 2. Plan rebalance (cap por provider × 6 famílias)
assignments = rebalance_plan_assignments(plan) # anthropic ≤40%, google ≤45%,
# perplexity ≤50%, groq ≤65%,
# openai ≤45%, xai ≤30%
# 3. Diversity guarantee (Sprint 11 + Sprint 13)
if tier == COMPLEX and len(plan.tasks) >= 5:
target = min(len(plan.tasks), 5) # Sprint 13: era fixo em 4
assignments = _ensure_provider_diversity(
assignments, plan.tasks, tier, target,
)
# 4. Execute em waves com circuit breaker + health-aware + UX preview
for wave in topological_sort(plan.tasks):
print(f">>> Wave {wave.n} ({len(wave)} em paralelo):") # Sprint 13
results = await asyncio.gather(*[
llm_client.query( # 5xx → 1 retry curto
assignments[task.id], task, # 429 → backoff 2/4/8s
check_breaker=True, # provider OPEN → skip <100ms
# Sprint 13: thinking_budget=max(512, min(2048, max_tokens/3)) p/ Gemini Pro
# Sprint 13: return_citations=true p/ Perplexity → TaskResult.citations
) for task in wave
])
# 5. Quality Judge (Sprint 13: Sonnet 4.6, era Groq Heavy) + persist
verdict = ClaudeSonnet.judge(results, rubric_5_dims)
write(execution_id + ".json", report) # model_id + citations + KPIs
Multi-agente em paralelo · waves topológicas
O scheduler agrupa as tasks por dependências em waves e executa cada wave com asyncio.gather(). Tasks independentes na mesma wave rodam simultaneamente em LLMs diferentes — speedup observado em produção: 3-5×.
O fan-out é controlado pelo cap por provider (pré-alocação plan-level entre 6 famílias) e pela diversity guarantee dinâmica em planos COMPLEX (target = min(plan_size, 5) providers únicos). O fan-in passa pelo Quality Judge (Sprint 13: Claude Sonnet 4.6, era Groq Heavy), que valida e ajusta o TTL do cache.
Decompose gera N tasks. Plan rebalance pré-aloca respeitando o cap por provider; _ensure_provider_diversity garante target = min(plan_size, 5) providers únicos em planos COMPLEX 5+ (Sprint 13 trocou target fixo de 4 por esse alvo dinâmico). Anthropic ≤ 40%, OpenAI ≤ 45%, Google ≤ 45%, Perplexity ≤ 50% (Sprint 12 restaurou de 35%), Groq ≤ 65%, xAI ≤ 30%.
6 providers · min(plan, 5)
02
02
Waves topológicas + UX preview
DAG das dependências quebrado em níveis. Tasks no mesmo nível executam paralelo. Speedup = soma(durações)/wall_clock — KPI persistido. Sprint 13 adicionou preview por wave no stdout (>>> Wave N + [OK] tN -> provider) para acompanhamento em tempo real.
parallelism_efficiency
03
03
Fan-in com validação
Outputs consolidados passam pelo Quality Judge. Sprint 13 promoveu Claude Sonnet 4.6 a primary (era Groq Heavy) — supera em qualidade editorial PT-BR e diversifica Anthropic em COMPLEX. Verdict ajusta TTL do cache e pode disparar retry no próximo da fallback chain.
quality_judge_pass_rate
Sequencial vs paralelo · plano de 11 tasks (run #7 produção)
Cenário sequencial (hipotético)
~640s
soma de 11 task durations consecutivas
Paralelo em 4 waves (real)
204s
speedup ~3.2× · custo $0,07
−68% wall clock
12 LLMs canônicos · 6 providers
Cada LLM tem papel definido pelas suas forças. Pós-Sprint 13, GPT-5.5 + Opus 4.7 + Gemini 2.5 Pro formam o tier premium-only de copy (writing/copywriting/seo — Sonnet/Haiku/Flash banidos); Perplexity sonar-deep-research é prioridade em research com return_citations=true + search_recency_filter=year (Sprint 13); Opus 4.7 reservado a architecture, critical_review e fallback de copy; Sonnet 4.6 decompõe wave 1 + primary em review (Sprint 13 promoveu de Groq Heavy); Gemini 2.5 Pro protagonista em code, analysis e fallback de fact_check/data_processing (Sprint 13 ativou crédito Google Cloud em produção); Gemini 2.5 Flash em data_processing primary e fallback de analysis; Groq Heavy (gpt-oss-120b) primary em code_review e extraction, fallback de review; Groq Llama 4 Scout em classification/summarization; xAI Grok (com K) exclusivo em realtime_search, social_listening, current_events e brand_monitoring.
Sprint 12 · diretriz canônica: “COPY PREMIUM ONLY” — toda task de writing, copywriting ou SEO segue obrigatoriamente a hierarquia gpt-5.5 → claude-opus-4-7 → gemini-2.5-pro → perplexity. Sonnet, Haiku e Flash só entram como último recurso em outage simultâneo dos 4 flagships. Decisão editorial de Alexandre Caramaschi: voz PT-BR densa exige reasoning nativo + 1M ctx; downgrade automático para tiers menores gerou incidentes documentados (curso saude-mental-vibecoding 14-05-2026).
Atenção: xAI Grok (com K) ≠ Groq Inc (com Q). xAI tem modelos próprios (grok-4.3, grok-4.20-multi-agent, grok-4.20-non-reasoning) com busca live em X/Twitter; Groq Inc opera infra LPU para Llama 4 Scout e openai/gpt-oss-120b. Providers diferentes, mantidos como entidades canônicas distintas no orchestrator.
Anthropic
Claude Opus 4.7
PREMIUM
alias: claude
Context
200K
Input
$15.00
Output
$75.00
Arquiteto-chefe. Reservado a architecture e critical_review pós-rebalanceamento. Upgrade 4.6 → 4.7 em 17-05 mantém o tier $15/$75. Não roteado em code/review padrão.
Pontos fortes
architecturedeep_reasoningcritical_review
Primary em
architecturecritical_review
Anthropic
Claude Sonnet 4.6
STANDARD
alias: claude_sonnet
Context
200K
Input
$3.00
Output
$15.00
Tier intermediário Anthropic. Sprint 9 promoveu Sonnet a decomposer canônico (wave 1 estável). Sprint 13 oficializou Sonnet 4.6 como REVIEW PRIMARY (era Groq Heavy) — supera em qualidade editorial PT-BR e garante presença Anthropic em planos COMPLEX 5+. Sonnet 4.7 testado em 17-05 retornou 404 (modelo não-GA); 4.6 segue canônico. ~80% mais barato que Opus.
Analista profundo principal pós-Sprint 13. Crédito Google Cloud carregado em produção habilitou Gemini 2.5 Pro como primary em analysis e code (era Pro só em code, Flash em analysis) e como fallback em fact_check e data_processing (era Flash). Sprint 13 também corrigiu bug de thinkingBudget — reserva 1/3 do max_tokens para thinking interno (mín 512, máx 2048) garantindo que parts[] não retorne vazio em respostas longas. 1M ctx mantido.
Tier Flash do Google · adicionado Sprint 10 pós-outage 02-mai. Mantém 1M context com latência ~3x menor e custo ~5x menor que Pro. Sprint 13 redefiniu papel: primary apenas em data_processing (lote massivo) e fallback de analysis quando Pro saturar; classification e summarization permanecem como fallback secundário.
Pesquisador profundo. Sprint 13 ativou return_citations=true + search_recency_filter=year no POST body — LLMResponse e TaskResult agora expõem citations: list[str] (URLs/DOIs verificáveis) persistidos no JSON de auditoria. Bateria E2E validou Aggarwal SIGIR 2024 e Reyes-Lillo 2025 com DOIs reais. Sprint 12 restaurou cap 0,35 → 0,50 (era restritivo pós-bateria 360); adaptive_decomposer decompõe research em sub-tasks naturalmente.
Modelo de raciocínio open-weights na infra Groq. 120B parâmetros, 56 reasoning tokens internos. Sprint 9 promoveu para review primary; Sprint 13 cedeu review primary para Claude Sonnet 4.6 (qualidade editorial PT-BR + diversifica Anthropic em COMPLEX) e manteve Groq Heavy como primary em code_review e extraction, e fallback de review com latência sub-segundo.
Flagship xAI · adicionado Sprint 11 como 6º provider canônico. search_parameters: auto dá busca live em X/Twitter (nenhum outro provider tem). 1M context, reasoning, function calling, vision. Canal exclusivo para realtime_search, social_listening, current_events e brand_monitoring. Tom edgy por padrão — exige prompt explícito de tom neutro quando preciso.
Multi-Agent xAI · 4 agentes paralelos nativos (Grok+Harper+Benjamin+Lucas) com 2M context em uma única chamada. Primary em multi_perspective_decomposition e long_context_synthesis. Não confundir com groq_heavy (Groq Inc, com Q) — providers diferentes apesar do nome similar.
Variante rápida sem CoT interno. Para classificação, extração e respostas curtas onde reasoning explícito não agrega. Mantém o canal live X/Twitter mas sem custo de reasoning tokens. Não substitui Groq (com Q) Llama 4 Scout em bulk — Scout mantém vantagem ~10x em throughput LPU.
O cap é aplicado por família de provider, não por alias. Anthropic (Opus 4.7 + Sonnet 4.6 + Haiku 4.5) compartilha o mesmo teto de share por run; Google (Pro + Flash); Groq (Llama 4 Scout + Heavy gpt-oss-120b); xAI (Grok 4.3 + Multi + Fast); Perplexity (sonar-deep-research) restaurada a 50% na Sprint 12, com return_citations=true ativado em Sprint 13. O método rebalance_plan_assignments() pré-aloca cada task respeitando esses limites antes da execução; em planos COMPLEX 5+ tasks, o _ensure_provider_diversity() garante cobertura mínima dinâmica de min(len(tasks), 5) providers únicos (Sprint 13 trocou o target fixo de 4 por esse alvo dinâmico).
Anthropic40%
Sprint 9 elevou de 30% → 40%. Sonnet/Haiku precisam de espaço para cobrir wave 1 (decomposition voltou para Sonnet) + reviews e fallbacks cross-provider. Inclui Opus 4.7 + Sonnet 4.6 + Haiku 4.5 somados.
OpenAI45%
Capacidade saudável para writing/copywriting/SEO ser primary sem dominar planos analíticos.
Google45%
Sprint 9 reduziu de 55% → 45%. Cap menor diminui o blast radius em outage do provider e força diversidade na fallback chain. Inclui Pro + Flash somados (Sprint 10 split runtime).
Perplexity50%
Sprint 12 RESTAUROU cap 0,35 → 0,50 pela diretriz canônica 'Perplexity como prioridade em research'. O cap de 0,35 (Sprint 10/bateria 360) sufocava deep research editorial; o adaptive_decomposer agora decompõe research em sub-tasks naturalmente, e o cap rígido não era mais necessário.
Groq65%
Cap mais alto reflete o custo ultra-baixo. Volume permitido é grande em classification/translation/summarization sem riscar o budget. Llama 4 Scout LPU ($0,11/$0,34) + Groq Heavy gpt-oss-120b ($0,15/$0,20).
xAI30%
Sprint 11 adicionou xAI Grok como 6º provider com cap conservador inicial. Pricing flat $1,25/$2,50 não tem tier barato; demanda multi-task pode estourar crédito rápido. Cap revisado quando houver baseline real de uso.
Mapa de roteamento · 23 task types canônicos
Cada tipo de task tem um primary (LLM padrão) e um fallback automático. Quando o primary falha, atinge timeout ou estoura o cap, a fallback chain assume sem perda de tarefa. Sprint 11 adicionou 6 task types exclusivos da família xAI (realtime_search, social_listening, current_events, brand_monitoring, multi_perspective_decomposition, long_context_synthesis). Sprint 13 (19-mai-2026) ativou Gemini 2.5 Pro em analysis (primary, era Flash) e nos fallbacks de fact_check e data_processing; Claude Sonnet 4.6 virou primary de review (era Groq Heavy), com Groq Heavy mantido como fallback sub-segundo.
Cada sprint resolveu uma tese específica: fundação CLI, otimização de custo, observabilidade, self-healing, reliability, enterprise readiness, rebalanceamento Gemini-first, resiliência em produção, hardening de bateria 360, xAI Grok como 6º provider com diversity guarantee, COPY PREMIUM ONLY + Perplexity prioridade na Sprint 12 e — última — Sprint 13 (19-mai-2026): bateria E2E pós-Sprint 12 fechou 6 gaps em sequência — Gemini 2.5 Pro ativado em analysis/fact_check/data_processing (era Flash), Claude Sonnet 4.6 promovido a review primary (era Groq Heavy), diversity guarantee target dinâmico min(plan_size, 5), Perplexity com return_citations=true + search_recency_filter=year, model_id e citations persistidos no TaskResult, Gemini 2.5 Pro thinkingBudget reservado em 1/3 do max_tokens, pipeline com UX em tempo real (wave preview no stdout). Próximas sprints implementam topology-first routing (AdaptOrch fev/2026), difficulty-conditional depth (DAAO set/2025) e confidence-based cascading (FrugalGPT). Roadmap atualizado em tempo real com origem de cada decisão.
Timeline · 13 sprints lançadas
De abril a maio de 2026, doze sprints entregaram desde a fundação do CLI até a bateria E2E pós-Sprint 12: Gemini 2.5 Pro ativado em analysis/fact_check/data_processing, Claude Sonnet 4.6 promovido a review primary, diversity target dinâmico, Perplexity com citations expostas, model_id no audit e UX wave preview.
1+2
FOUNDATION2026-04-07● LANÇADA
Sprints 1+2 — Refator CLI v2.0 + Cap 80% real
11 fixes P0/P1 cirúrgicos validados por bateria científica
11 fixes P0/P1 cirúrgicosCap 80% real (era vaporware)Tier interno Claude Opus/Sonnet/HaikuBateria científica com 3 runs comparativosSuite test_integration: 51/51 verde
3
COST OPTIMIZATION2026-04-07● LANÇADA
Sprint 3 — Tier interno em runtime
Claude Opus → Sonnet → Haiku acionado automaticamente por complexity
src/sanitize.py com path traversal blockDecomposer marca complexity variávelTier interno Claude acionou em runtime pela 1ª vezsrc/kpi_history.py persistido em jsonlDrift alert se 3 runs fora da banda 0.7-1.5x+1
AVG_COST_PER_CALL recalibrado para incluir tier internodecompose() do orchestrator usa Sonnet em vez de Opus (−80% por chamada)KPI tier_internal_engagement_rate persistidoKPI fallback_chain_save_rate cumulativocli.py dashboard --export csv|json+1
Loop FinOps fechado com aprendizado de custo a partir do histórico real
src/cost_calibrator.py aprende de execution_*.jsonKPI quality_judge_pass_rate (verdicts PT-BR)KPI parallelism_efficiency (speedup vs sequencial)Comando cli.py replay <execution_id>Comando dashboard --since 7d/24h/30d+3
6
RELIABILITY2026-04-08● LANÇADA
Sprint 6 — E2E mockado + Auto-trigger de drift + Doctor + CI
Cobertura ponta-a-ponta sem custo de LLM e health check pollable
tests/test_e2e.py com Pipeline mockadoAuto-trigger de calibração quando drift disparaComando cli.py doctor (6 health checks)GitHub Actions CI workflow (matriz 3.11/3.12)126/126 testes verde (era 117)
7
ENTERPRISE READY2026-04-08● LANÇADA
Sprint 7 — Catalog runtime + /health + Dashboard HTML
YAML como single source of truth, HTTP pollable e dashboard publicável
LLM_CONFIGS construído em runtime do catalog YAMLServidor HTTP /health + /metrics (stdlib, zero deps)Dashboard HTML estático com Chart.jsSafety threshold do calibrator (rejeita > 5x ou < 0.2x)Backup automático + comando finops calibrate-rollback+2
8
COST REBALANCE2026-05-02● LANÇADA
Sprint 8 — Rebalanceamento Gemini-first + Groq Heavy ativo
Opus reservado a architecture/critical_review · Gemini protagonista em code/review · Groq Heavy via gpt-oss-120b
TASK_TYPES: code/review primary claude → geminiNovos task types: architecture, critical_review, code_review, decomposition, extractionAlias groq_heavy ativo (default openai/gpt-oss-120b 120B)Cap por PROVIDER (não por nome): anthropic 30%, google 55%, groq 65%rebalance_plan_assignments() pré-aloca o plano respeitando os caps+2
9
RESILIENCE2026-05-02● LANÇADA
Sprint 9 — Resiliência & circuit breaker em produção
Outage de provider deixa de quebrar a wave · circuit breaker religado · backoff por classe · redistribuição cross-provider
CircuitBreaker integrado de fato no LLMClient (era módulo morto desde Round 3)Backoff por classe de erro: 503/timeout = 1 retry curto (1s); 429 mantém 2/4/8sRouter consulta circuit_breaker_registry e bloqueia providers OPENProvider degradation TTL local da sessão (mark_provider_degraded)Decomposition voltou para Claude Sonnet (wave 1 não pode depender de provider unstable)+5
218/220 verde → 223/224 pós-fix · cap Perplexity 50→35% · gemini_flash ativo em tasks medium
Bateria 360 completa: ping + doctor + finops + plan + run + board executados em sequência[CRÍTICO] _parse_plan: aceita dependencies em list de dicts ([{task_id:t1}]) além de list de stringsAVG_COST_PER_CALL[perplexity] $0,008 → $0,05 (5-9x acima da estimativa antiga)PROVIDER_SHARE_CAP[perplexity] 0,50 → 0,35 (Perplexity dominava 84% wall time em runs de research)cli.py: consolida gemini_flash em gemini e groq_heavy em groq no aggregator+4
xAI Grok como 6º provider canônico (3 entradas: grok 4.3, grok_multi 4.20-multi-agent, grok_fast 4.20-non-reasoning)API OpenAI-compatible em https://api.x.ai/v1 · conta team caramaschigeo6 task types novos exclusivos: realtime_search, social_listening, current_events, brand_monitoring, multi_perspective_decomposition, long_context_synthesissearch_parameters: auto — diferencial único de busca live em X/TwitterUpgrade Claude Opus 4.6 → 4.7 (GA desde 16-04, mesmo tier $15/$75)+7
Copy só usa GPT-5.5 → Opus 4.7 → Gemini Pro (Sonnet/Haiku/Flash banidos) · cap Perplexity 0,35 → 0,50 · catalog YAML v2.1 gpt-5.5 canônico
Diretriz canônica COPY PREMIUM ONLY: writing/copywriting/seo só em GPT-5.5 (primary) → Opus 4.7 (1º fallback) → Gemini 2.5 Pro (2º fallback)Sonnet 4.6, Haiku 4.5 e Gemini 2.5 Flash banidos de copy (incidente curso saude-mental-vibecoding 14-05-2026 motivou)FALLBACK_CHAINS reordenado: 4 primeiros slots todos premium-tier; Sonnet e Groq Heavy só como último recursoPROVIDER_SHARE_CAP[perplexity] restaurado 0,35 → 0,50 (era restritivo pós-bateria 360)FALLBACK_CHAINS['research'] reordenado para perplexity → gemini Pro → claude Opus → gpt-5.5+3
13
E2E HARDENING2026-05-19● LANÇADA
Sprint 13 — Bateria E2E + Gemini Pro full + diversity dinâmico + citations Perplexity
6 fixes pós-bateria E2E · Pro ativo em analysis/fact_check/data_processing · Sonnet em review primary · target=min(plan_size,5) · model_id + citations no audit · thinkingBudget guard · UX wave preview
thinkingBudget estendido ao Gemini 3.x Pro + code roteado para GPT-5.5
Cap de thinking aplicado a TODOS os Gemini *-pro (antes só 2.5 Pro)gemini-3.1-pro-preview (default atual) rodava sem cap — thinking ilimitadoTeto ajustável por env GEMINI_THINKING_BUDGET (vazio = cálculo dinâmico)Task code: primary Gemini Pro → GPT-5.5 (compensa carga na OpenAI)analysis profundo permanece em Gemini Pro, agora com thinking capado+1
Detalhe técnico por sprint
Cada item entregue com descrição, justificativa, métricas e arquivos tocados.
1+2
Foundation · 2026-04-07
Sprints 1+2 — Refator CLI v2.0 + Cap 80% real
11 fixes P0/P1 cirúrgicos validados por bateria científica
Highlights
11 fixes P0/P1 cirúrgicosCap 80% real (era vaporware)Tier interno Claude Opus/Sonnet/HaikuBateria científica com 3 runs comparativosSuite test_integration: 51/51 verde
Refator do CLI para Orchestrator v2.0
Religação completa do cli.py ao Orchestrator(smart=True).run(), removendo o caminho legado v1.0.
Por que esta decisão
A auditoria identificou que o CLI executava um caminho legacy v1.0 que ignorava SmartRouter, cap 80%, quality gates e semantic cache. Sintoma: 12/12 tarefas de uma execução foram para Claude (100% concentração) e o gasto diário Anthropic atingiu o limite.
−127 linhas20/20 testes verde11 gaps fechados
3
Cost Optimization · 2026-04-07
Sprint 3 — Tier interno em runtime
Claude Opus → Sonnet → Haiku acionado automaticamente por complexity
Highlights
src/sanitize.py com path traversal blockDecomposer marca complexity variávelTier interno Claude acionou em runtime pela 1ª vezsrc/kpi_history.py persistido em jsonlDrift alert se 3 runs fora da banda 0.7-1.5x75/75 testes verde (era 51/51)
Downgrade automático Opus → Sonnet → Haiku por complexity
O SmartRouter aplica downgrade dentro da família Claude com base em task.complexity (1-2 → Haiku, 3 → Sonnet, 4-5 → Opus).
Por que esta decisão
Antes desta sprint, toda tarefa Claude ia para Opus (15x mais caro que Haiku). O downgrade economiza até 95% por chamada para tarefas low-complexity (triagem, classificação) sem perda de qualidade perceptível.
Run #5 custo: $0.0727 vs $0.6653 baseline (−89%)Wall clock: 97.5s vs 240.8s (−60%)
AVG_COST_PER_CALL recalibrado para incluir tier internodecompose() do orchestrator usa Sonnet em vez de Opus (−80% por chamada)KPI tier_internal_engagement_rate persistidoKPI fallback_chain_save_rate cumulativocli.py dashboard --export csv|json97/97 testes verde (era 75/75)
KPI tier_internal_engagement_rate
Mede a percentagem de tarefas Claude que foram roteadas para Sonnet/Haiku em vez de Opus, validando a adoção do downgrade automático.
Por que esta decisão
Sem este KPI, era impossível saber se o tier interno estava de fato operando ou se permanecia adormecido. Run #6 atingiu 50% de adoção, confirmando que o decomposer marca complexity variável e o downgrade dispara.
Loop FinOps fechado com aprendizado de custo a partir do histórico real
Highlights
src/cost_calibrator.py aprende de execution_*.jsonKPI quality_judge_pass_rate (verdicts PT-BR)KPI parallelism_efficiency (speedup vs sequencial)Comando cli.py replay <execution_id>Comando dashboard --since 7d/24h/30dcatalog/model_catalog.yaml v2.0 sincronizadosrc/catalog_loader.py com validator de drift117/117 testes verde (era 97/97)
Auto-calibração adaptativa de AVG_COST_PER_CALL
Novo módulo cost_calibrator.py varre os últimos N execution_*.json, agrupa custos por LLM, filtra outliers e persiste a calibração em .cost_calibration.json.
Por que esta decisão
A Sprint 4 ajustou AVG_COST_PER_CALL manualmente após o drift detectado. Calibrar automaticamente fecha o loop: drift acima ou abaixo da banda saudável é corrigido sem intervenção humana.
Mede se a decomposição em waves está aproveitando a paralelização. Run #7 atingiu speedup ~3.2x com 11 tarefas em 4 waves.
src/kpi_history.py:compute_parallelism_efficiency
6
Reliability · 2026-04-08
Sprint 6 — E2E mockado + Auto-trigger de drift + Doctor + CI
Cobertura ponta-a-ponta sem custo de LLM e health check pollable
Highlights
tests/test_e2e.py com Pipeline mockadoAuto-trigger de calibração quando drift disparaComando cli.py doctor (6 health checks)GitHub Actions CI workflow (matriz 3.11/3.12)126/126 testes verde (era 117)
Comando cli.py doctor — 6 health checks
Verifica em uma chamada: api_keys, catalog_consistency, finops_daily, kpi_history freshness, cost_calibration age e drift_detector.
Por que esta decisão
Antes era preciso rodar finops status + dashboard + verificar cost_calibration manualmente. O doctor consolida tudo. Flag --strict faz exit 1 em ATENÇÃO ou CRÍTICO.
cli.py:doctor
7
Enterprise Ready · 2026-04-08
Sprint 7 — Catalog runtime + /health + Dashboard HTML
YAML como single source of truth, HTTP pollable e dashboard publicável
Highlights
LLM_CONFIGS construído em runtime do catalog YAMLServidor HTTP /health + /metrics (stdlib, zero deps)Dashboard HTML estático com Chart.jsSafety threshold do calibrator (rejeita > 5x ou < 0.2x)Backup automático + comando finops calibrate-rollbackpytest-cov + Codecov no CI140/140 testes verde, 53% coverage global
Catalog YAML como Single Source of Truth runtime
build_llm_configs_from_catalog() constrói o dict LLMConfig a partir de catalog/model_catalog.yaml em tempo de import.
Por que esta decisão
Antes o catalog YAML era apenas validador sidecar — drift entre código e documentação era possível. Agora a divergência é impossível.
Servidor http.server minimal expõe GET /health (200/503), GET /metrics e GET / (docs). Zero dependência adicional.
Por que esta decisão
O cli doctor é reativo. Para load balancers, k8s probes e monitores externos é preciso um endpoint HTTP pollable. stdlib em vez de FastAPI para zero dep.
src/health_server.pycli.py:serve
8
Cost Rebalance · 2026-05-02
Sprint 8 — Rebalanceamento Gemini-first + Groq Heavy ativo
Opus reservado a architecture/critical_review · Gemini protagonista em code/review · Groq Heavy via gpt-oss-120b
Highlights
TASK_TYPES: code/review primary claude → geminiNovos task types: architecture, critical_review, code_review, decomposition, extractionAlias groq_heavy ativo (default openai/gpt-oss-120b 120B)Cap por PROVIDER (não por nome): anthropic 30%, google 55%, groq 65%rebalance_plan_assignments() pré-aloca o plano respeitando os capsdecompose() migrou Sonnet → Gemini 2.5 Pro (1M ctx, ~5x mais barato)195/195 testes verde (era 140)
TASK_TYPES rebalanceadas — Gemini protagonista em code e review
code e review saíram de primary=claude para primary=gemini. Opus reservado exclusivamente a architecture e critical_review (raciocínio arquitetural ou validação final crítica).
Por que esta decisão
Diagnóstico nos 10 runs anteriores: Opus pegava só 3.7% das tasks por contagem mas concentrava 60% dos custos (single-task de $0,668). Gemini 2.5 Pro tem 1M context e raciocínio comparável a Opus por ~1/15 do custo. Em plano sintético típico (12 tasks), Anthropic caiu de 42% para 17% e Gemini subiu para 50%.
Groq Heavy — alias para modelo de raciocínio na infra Groq
Novo alias groq_heavy controlado via env var GROQ_HEAVY_MODEL. Default ativado: openai/gpt-oss-120b (120B parâmetros, 131K context, 56 reasoning tokens internos).
Por que esta decisão
O Groq Cloud tem modelos de raciocínio (gpt-oss-120b, qwen3-32b) com latência sub-segundo e custo ~100x menor que Opus. Smoke test code review: 0,88s end-to-end, $0,00099/call. Velocidade Groq + raciocínio open-weights = sweet spot para code_review e extraction.
Latência: 0,88sCusto: $0,00099/call~100x mais barato que Opus
Sprint 9 — Resiliência & circuit breaker em produção
Outage de provider deixa de quebrar a wave · circuit breaker religado · backoff por classe · redistribuição cross-provider
Highlights
CircuitBreaker integrado de fato no LLMClient (era módulo morto desde Round 3)Backoff por classe de erro: 503/timeout = 1 retry curto (1s); 429 mantém 2/4/8sRouter consulta circuit_breaker_registry e bloqueia providers OPENProvider degradation TTL local da sessão (mark_provider_degraded)Decomposition voltou para Claude Sonnet (wave 1 não pode depender de provider unstable)Review primary virou Groq Heavy (rápido + diversifica)Regra dura nas FALLBACK_CHAINS: top-2 de providers diferentesCaps revisados: anthropic 30→40%, google 55→45%Novo KPI provider_health no .kpi_history.jsonl213/213 testes verde (era 195) · 8 testes novos em test_resilience_outage.py
CircuitBreaker integrado de fato no LLMClient
src/circuit_breaker.py existia completo (310 linhas, CLOSED/OPEN/HALF_OPEN, registry singleton) desde o Round 3 mas nunca foi importado em pipeline.py nem llm_client.py — vaporware. Religado: 3 falhas seguidas em qualquer provider abrem o circuito por 90s; tasks subsequentes raise CircuitBreakerError em ~0ms e caem para o próximo da fallback chain.
Por que esta decisão
Diagnóstico do outage Google de 02-mai: cada task da wave perdia ~50s (rate limiter + 3 retries com backoff 2/4/8s + jitter) antes de descobrir o 503 sustentado. Em wave de 12 tasks paralelas, todas pagavam o custo do zero — overhead O(N) onde deveria ser O(1). Com circuit breaker, só as 3 primeiras descobrem o outage; o restante salta o provider em 0ms.
3 falhas → OPEN por 90sShort-circuit em <100msOutage cost: O(N×50s) → O(3×2s + N×0ms)
compute_provider_health() lê o CircuitBreakerRegistry e gera 3 campos novos por entry: provider_health (dict por provider com state, consecutive_failures, totals, health_score), min_provider_health_score (pior provider da run) e providers_open (quantos circuits ficaram OPEN).
Por que esta decisão
Sem KPI de saúde, era impossível rastrear historicamente quem derrubou o pipeline na semana. Agora é trivial: filtrar entries onde providers_open > 0 mostra todos os incidentes, e min_provider_health_score < 0.95 sinaliza degradação progressiva antes do outage explícito.
218/220 verde → 223/224 pós-fix · cap Perplexity 50→35% · gemini_flash ativo em tasks medium
Highlights
Bateria 360 completa: ping + doctor + finops + plan + run + board executados em sequência[CRÍTICO] _parse_plan: aceita dependencies em list de dicts ([{task_id:t1}]) além de list de stringsAVG_COST_PER_CALL[perplexity] $0,008 → $0,05 (5-9x acima da estimativa antiga)PROVIDER_SHARE_CAP[perplexity] 0,50 → 0,35 (Perplexity dominava 84% wall time em runs de research)cli.py: consolida gemini_flash em gemini e groq_heavy em groq no aggregatorGemini split runtime: GEMINI_MODEL=gemini-2.5-flash em janelas de outage 503 Proscripts/run_5llm_board.py honra DEMAND env var (board vira 5 experts gerais)test_no_deprecated_models: cap writing 8192 → 16384 (alinhado com max_tokens 32k Opus 4.6)223 passed + 1 xfailed = 100% effective · coverage 57% (4578 stmts)
[CRÍTICO] Normaliza dependencies em _parse_plan
Sonnet pós-rebalance 02-mai começou a devolver dependencies como list de dicts ({task_id:t1}) em vez de strings simples ([t1]). ValidationError quebrava cli.py plan totalmente. Agora _parse_plan aceita os dois formatos e formatos mistos.
Por que esta decisão
Mudança silenciosa de comportamento do Sonnet 4.6 invalidava todo o entry-point de planning. Sem normalização, o usuário batia com Pydantic ValidationError opaco em qualquer demanda. Bug encontrado pela bateria 360 antes de chegar em produção pública.
4 testes novos cobrindo formatos: lista de strings, lista de dicts, formato misto
Perplexity recalibrada: cap 35% + custo $0,05/call
Bateria 360 mostrou Perplexity sonar-deep-research consumindo 84% do wall time e 82% do custo em runs com 1 task de research profunda. AVG_COST_PER_CALL elevado de $0,008 para $0,05 (5-9x mais real). Cap reduzido de 50% para 35% força decomposição em sub-tasks ou downgrade para sonar-pro em queries simples.
Por que esta decisão
Calibrator rejeitava amostras reais por ratio 8,6x do limite saudável (0,7-1,5x). Cap antigo permitia 1 task de research dominar runs completos. Run accuracy pós-fix: 0,98x (era 2,16x).
GEMINI_MODEL e GEMINI_FLASH_MODEL controlam Pro/Flash em runtime. Flash ($0,30/$2,50 por Mtok) mantém 1M context com latência ~3x menor e custo ~5x menor que Pro. Pro reservado para code/architecture/decomposition; Flash entra em analysis, data_processing, fact_check fallback, classification, summarization, extraction.
Por que esta decisão
Probe direto na API Google em 02-mai retornou 60% de 503 em gemini-2.5-pro (saturação compartilhada do tier standard). gemini-2.5-flash 100% saudável na mesma chave. Split garante que tasks medium tenham fallback ativo no mesmo provider quando Pro saturar.
Grok é o único provider com busca live em X/Twitter via search_parameters: auto — nenhum outro alcança a timeline em tempo real. Para demandas de social_listening, brand_monitoring e current_events o canal é exclusivo. grok_multi com 4 agentes paralelos nativos (Grok+Harper+Benjamin+Lucas) é arquitetura única para multi_perspective_decomposition. Pricing flat $1,25/$2,50 em toda linha GA — diferenciação por capability, não preço.
Ping smoke: grok-4.3 OK 2,07s $0,00017112 LLMs no cli.py models (era 9)search_parameters opt-in automático por strength
realtime_search, social_listening, current_events, brand_monitoring (todos primary=grok, fallback=perplexity), multi_perspective_decomposition (primary=grok_multi, fallback=claude_sonnet), long_context_synthesis (primary=grok_multi, fallback=gemini). _infer_task_type do adaptive_decomposer reconhece keywords PT-BR/EN testadas ANTES das genéricas (research/analysis) — "monitorar Twitter agora" vira realtime_search em vez de research.
Por que esta decisão
Sem task types específicos, o decomposer roteava demandas live para perplexity ou gemini que não têm acesso a X/Twitter. Mapeamento explícito garante que tasks de timeline social ativem Grok. Multi-perspective decomposition usa 4 agentes paralelos nativos do grok_multi em vez de chamadas Claude sequenciais.
Novo método no SmartRouter garante cobertura mínima de 4/6 providers únicos em planos COMPLEX com 5+ tasks. Faz upgrades estratégicos quando rebalance_plan_assignments inicial não atinge o alvo, usando hints por provider ausente (architecture → claude opus, writing → gpt4o, research → perplexity, code → gemini pro, classification → groq, realtime_search → grok).
Por que esta decisão
Baseado em Mixture of Agents (Wang 2024, arXiv:2406.04692) — ensemble heterogêneo supera homogêneo em quality médio +7-15%. RouteLLM (Ong 2024, arXiv:2406.18665) — diversity reduz single-point-of-failure de 12% para 2% em outage scenarios. When Agents Disagree (arXiv:2603.20324 mar/2026) — MoA-diverso vence Self-MoA em raciocínio com judge (0,810 vs 0,512 win rate).
Cobertura alvo: 4/6 providers únicos (66%)Premium signals bonus: +1,5 ao score por sinal
Upgrade canônico: Opus 4.7 + Llama 4 Scout + gpt-oss-120b
Claude Opus 4.6 → 4.7 (GA desde 16-04-2026, mesmo tier $15/$75). Groq default Llama 3.3 70B → meta-llama/llama-4-scout-17b-16e-instruct ($0,59/$0,79 → $0,11/$0,34, 5x mais barato). Groq Heavy default consolidado em openai/gpt-oss-120b (era llama-3.3-70b por compatibilidade segura).
Por que esta decisão
Saúde 6/6 OK validou os 3 upgrades simultaneamente. Sonnet 4.7 e Gemini 3 Pro preview testados mas mantidos no tier anterior (Sonnet 4.7 retornou HTTP 404 not_found, Gemini 3 Pro preview HTTP 403 sem acesso na chave atual). Upgrades não-disruptivos (preservam pricing tier) viraram canônico imediato.
Groq pricing: $0,59/$0,79 → $0,11/$0,34 (5x cheaper)Opus 4.7 same tier ($15/$75)Health check: 6/6 OK $0,006/exec
Copy só usa GPT-5.5 → Opus 4.7 → Gemini Pro (Sonnet/Haiku/Flash banidos) · cap Perplexity 0,35 → 0,50 · catalog YAML v2.1 gpt-5.5 canônico
Highlights
Diretriz canônica COPY PREMIUM ONLY: writing/copywriting/seo só em GPT-5.5 (primary) → Opus 4.7 (1º fallback) → Gemini 2.5 Pro (2º fallback)Sonnet 4.6, Haiku 4.5 e Gemini 2.5 Flash banidos de copy (incidente curso saude-mental-vibecoding 14-05-2026 motivou)FALLBACK_CHAINS reordenado: 4 primeiros slots todos premium-tier; Sonnet e Groq Heavy só como último recursoPROVIDER_SHARE_CAP[perplexity] restaurado 0,35 → 0,50 (era restritivo pós-bateria 360)FALLBACK_CHAINS['research'] reordenado para perplexity → gemini Pro → claude Opus → gpt-5.5_ensure_provider_diversity prioriza Opus 4.7 para copy antes de Sonnet para decomposition em diversity upgradeCatalog YAML v2.1 sincronizado: gpt-4o → gpt-5.5 canônico (drift Sprint 11 fechado, pricing $5.00/$15.00 por Mtok)223/224 testes verde mantido (test_sprint7.py atualizado para refletir pricing GPT-5.5)
Diretriz canônica COPY PREMIUM ONLY
writing, copywriting e seo agora têm primary=gpt4o (GPT-5.5) e fallback=claude (Opus 4.7). FALLBACK_CHAINS começa com gpt4o → claude → gemini → perplexity — os 4 primeiros slots são todos premium-tier. Sonnet 4.6, Haiku 4.5 e Gemini 2.5 Flash banidos de copy.
Por que esta decisão
Voz editorial PT-BR de Alexandre exige reasoning nativo, 1M ctx e densidade lexical que tiers menores não entregam consistentemente em copy longa. Incidente curso saude-mental-vibecoding (14-05-2026, 3741 linhas sem acentos por sub-agente Sonnet) comprovou que o tier importa. Custo extra (~$10/run editorial) vence o retrabalho de QA.
PROVIDER_SHARE_CAP[perplexity] 0,35 → 0,50 + research priority
Cap restaurado ao valor pré-bateria 360. FALLBACK_CHAINS['research'] reordenado: perplexity → gemini Pro → claude Opus → gpt-5.5; groq só como último recurso.
Por que esta decisão
Cap 0,35 da Sprint 10 sufocava deep research editorial. adaptive_decomposer agora decompõe research em sub-tasks naturalmente, e o cap rígido não era mais necessário. Citações verificáveis vencem velocidade/custo em research.
catalog/model_catalog.yaml v2.1 substitui referências a gpt-4o por gpt-5.5 canônico (lançado 23-04-2026, 1M ctx + reasoning nativo + pt-BR otimizado). Pricing $5.00/$15.00 por Mtok refletido em test_sprint7.py.
Por que esta decisão
Drift entre LLM_CONFIGS (já em gpt-5.5 desde Sprint 11) e catalog YAML (ainda em gpt-4o) era invariante quebrado. Catalog é Single Source of Truth runtime — drift impossível agora.
catalog/model_catalog.yamltests/test_sprint7.py
13
E2E Hardening · 2026-05-19
Sprint 13 — Bateria E2E + Gemini Pro full + diversity dinâmico + citations Perplexity
6 fixes pós-bateria E2E · Pro ativo em analysis/fact_check/data_processing · Sonnet em review primary · target=min(plan_size,5) · model_id + citations no audit · thinkingBudget guard · UX wave preview
Highlights
Bateria E2E 19-mai pós-Sprint 12 expôs 6 gaps fechados em sequência (commit 0a6211e + fixes)TASK_TYPES: analysis primary gemini_flash → gemini (Pro); fallback groq_heavy → gemini_flashTASK_TYPES: review primary groq_heavy → claude_sonnet; fallback gemini_flash → groq_heavyTASK_TYPES: fact_check fallback gemini_flash → gemini (Pro); data_processing fallback groq → gemini (Pro)Diversity guarantee dinâmico: target = min(len(tasks), 5) — antes era fixo em 4Perplexity sonar-deep-research com return_citations=true + search_recency_filter=year no POST bodyTaskResult + LLMResponse expõem model: str e citations: list[str] (URLs/DOIs) — fim do ? no auditGemini 2.5 Pro thinkingBudget reservado em 1/3 do max_tokens (mín 512, máx 2048) — corrige parts=[]Pipeline ganha UX em tempo real: preview por wave no stdout, OK por task com latência+tokens+custoping 6/6 OK $0,006 · board 5/5 paralelo retornou Aggarwal SIGIR 2024 + Reyes-Lillo 2025 com DOIs reaisrun completo 5 tasks/3 waves $0,0885 · cobertura sobe para 5/5 ou 6/6 com Anthropic via Sonnet review
TASK_TYPES atualizado pós-bateria E2E
Quatro alterações cirúrgicas em src/config.py:296-321. analysis: primary=gemini (Pro, era gemini_flash), fallback=gemini_flash (era groq_heavy). review: primary=claude_sonnet (era groq_heavy), fallback=groq_heavy (era gemini_flash). fact_check: fallback=gemini (Pro, era gemini_flash). data_processing: fallback=gemini (Pro, era groq).
Por que esta decisão
Três motivações conectadas: (a) usuário tem crédito Google Cloud carregado em produção e Gemini 2.5 Pro precisa entrar como primary em analysis (não só Flash) — Pro tem reasoning nativo + 1M ctx, Flash mantido para lote massivo (data_processing primary) e fallback Pro→Flash em outage; (b) review é etapa crítica de qualidade editorial e Claude Sonnet 4.6 supera Groq Heavy em PT-BR + diversifica Anthropic em planos COMPLEX (antes da Sprint 13, Anthropic só entrava em writing/copy/seo fallback e architecture/critical_review, com cobertura frequente de 4/5); (c) Gemini Pro como fallback de fact_check e data_processing preserva 1M ctx em outage do primary.
4 task types alteradosAnthropic cobertura: 4/5 → 5/5Pro elevado a primary em 1 type + fallback em 2
src/smart_router.py:704 antes fixava target=4. Bateria E2E mostrou que plano de 5 tasks fechava com 4/5 providers porque o alvo já estava satisfeito em 4. Agora target = min(len(tasks), 5) — plano de 5 tasks busca 5 providers únicos, plano de 6+ busca 5 (capado pelo número viável dado os 6 providers disponíveis e os hard-pins).
Por que esta decisão
Cobertura efetiva sobe naturalmente quando plan_size cresce. Mantém o invariante de não promover diversity acima do número real de tasks (evita upgrade desnecessário em plano de 3 tasks). Limite superior de 5 preserva 1 slot livre para o provider apropriado por task type sem forçar todos os 6 simultaneamente.
target=4 fixo → target=min(len(tasks), 5)Cobertura 4/5 → 5/5 em plano 5 tasks
src/models.py: TaskResult ganhou model: str e citations: list[str]. src/pipeline.py:_call_llm popula ambos a partir da LLMResponse. Antes ficava model='?' no execution_*.json (impossível auditar qual versão do modelo respondeu). Citations array vem populada de Perplexity sonar-deep-research e ficará vazia para os demais providers.
Por que esta decisão
Sem model_id no audit não dá para correlacionar regressão de qualidade com upgrade de modelo upstream (Sonnet 4.6 → 4.7, GPT-5.5 → 5.6 etc). Sem citations expostas, fontes de Perplexity eram lidas só no markdown da resposta sem chave estruturada — não dava para gerar dashboards de citation freshness ou DOI coverage. Sprint 13 fecha esse buraco de observabilidade.
src/llm_client.py:_call_perplexity adiciona ao POST body: return_citations=true, return_related_questions=false, search_recency_filter='year'. citations expostas na resposta como list[str] de URLs/DOIs; recency filter limita o índice de busca a publicações do último ano.
Por que esta decisão
Citations sempre estiveram no payload do sonar-deep-research mas o body padrão não pedia return_citations explicitamente em todos os tiers — bateria E2E mostrou DOIs presentes inconsistentemente. recency filter='year' alinha com a doutrina editorial de Alexandre: fontes ≥ 2025 vencem fontes 2020-2023 em conteúdo HBR-grade. related_questions desligado reduz tokens de resposta (~10-15%).
return_citations=truesearch_recency_filter=yeartokens de resposta: -10/15%
src/llm_client.py:_call_perplexity
Gemini 2.5 Pro thinkingBudget guard
src/llm_client.py:_call_google reserva 1/3 do max_tokens para thinking interno (mínimo 512, máximo 2048), restando 2/3 para output visível. Em chamadas longas (>4096 tokens de output), Pro consumia todo o orçamento em thinking e devolvia HTTP 200 com parts=[] (resposta vazia).
Por que esta decisão
Bug silencioso descoberto em bateria E2E: plano com task de analysis de 8000 tokens em Pro recebia parts=[] e pipeline registrava task_result vazio sem erro. O guard divide o budget; se max_tokens=6144, thinking ganha 2048 (cap), output ganha 4096. Para max_tokens=1500, thinking ganha 512 (piso) e output ganha 988. Resolve parts=[] sem reduzir qualidade do reasoning (papers do time Google confirmam que thinking >2048 não traz ganho linear).
Thinking budget: max(512, min(2048, max_tokens/3))parts=[] em respostas longas: corrigido
src/llm_client.py:_call_google
Pipeline UX em tempo real · wave preview no stdout
src/pipeline.py imprime no stdout antes de cada wave: '>>> Wave N (X tarefa(s) em paralelo): t1→provider(task_type) | t2→...'. Depois de cada task: '[OK] tN -> provider (model_id) -> Xs | Y tok | $Z'. Antes era silêncio entre wave-start e relatório final.
Por que esta decisão
Bateria E2E em produção pode demorar 2-4 min sem feedback visual — operador ficava sem saber se estava em research deep (Perplexity ~110s) ou se algo travou. Preview por wave + OK por task com latência+tokens+custo permite acompanhar progresso linha-a-linha e identificar gargalos antes do relatório final.
src/pipeline.py:_execute_wave
14
Cost Optimization · 2026-06-05
Sprint 14 — Otimização FinOps do Gemini
thinkingBudget estendido ao Gemini 3.x Pro + code roteado para GPT-5.5
Highlights
Cap de thinking aplicado a TODOS os Gemini *-pro (antes só 2.5 Pro)gemini-3.1-pro-preview (default atual) rodava sem cap — thinking ilimitadoTeto ajustável por env GEMINI_THINKING_BUDGET (vazio = cálculo dinâmico)Task code: primary Gemini Pro → GPT-5.5 (compensa carga na OpenAI)analysis profundo permanece em Gemini Pro, agora com thinking capadoGemini é ~91% do custo LLM do pipeline de pesquisa — maior alavanca de economia
thinkingBudget estendido aos Gemini 3.x Pro
src/llm_client.py:_call_google_model passa a injetar thinkingConfig.thinkingBudget em qualquer modelo Gemini *-pro (não mais só gemini-2.5-pro), cobrindo o default atual gemini-3.1-pro-preview, que antes rodava com raciocínio interno ilimitado até o maxOutputTokens. Validado em 2026-06-05: o 3.1-pro-preview aceita o campo e responde finishReason=STOP (num probe usou ~503 tokens de thinking, bem abaixo do teto de 2048).
Por que esta decisão
O raciocínio interno do Gemini Pro é o maior custo do orchestrator (output billing). Sem cap, queries pesadas consomem milhares de tokens de thinking. O cap apara o tail caro sem afetar as queries normais (que pensam pouco). Reversível e ajustável por env, sem trocar o modelo nem degradar a qualidade percebida.
thinkingBudget: max(512, min(2048, max_tokens/3)) ou GEMINI_THINKING_BUDGET3.1-pro-preview: STOP OK com cap
src/llm_client.py:_call_google_model
Task code roteada para GPT-5.5 (compensa na OpenAI)
src/config.py:TASK_TYPES — a task code teve o primary trocado de gemini (Pro) para gpt4o (GPT-5.5), com gemini virando fallback. Distribui a carga de código para a OpenAI (forte em código) e reduz o consumo de Gemini Pro. analysis profundo permanece em Gemini Pro (agora com thinking capado).
Por que esta decisão
Rebalanceamento FinOps mantendo qualidade: GPT-5.5 é excelente em código e o cache automático de prompt da OpenAI reduz ainda mais o custo efetivo. O Gemini Pro deixa de ser o caminho primário das tarefas de código, mas segue disponível como fallback.
code: gemini → gpt4o (Pro vira fallback)
src/config.py:TASK_TYPES
Backlog priorizado · Sprints 12-14
Itens identificados pela literatura 2025-2026 (AdaptOrch, DAAO, FrugalGPT, RCR-Router, Mixture of Agents) + análise técnica dos próprios 6 LLMs em produção + revisão crítica das 11 sprints anteriores.
Decidir topology (parallel/sequential/hierarchical/hybrid) ANTES de escolher modelo. Hoje o pipeline decide modelo task-by-task; topology emerge do DAG implícito.
Justificativa
AdaptOrch (arXiv:2602.16873, fev/2026) reporta +12-23% sobre baselines com topology-first. Identificar pattern (fan-out, pipeline, debate, hierarchical-judge) antes de allocate model permite escolher também o número de réplicas e o critério de fan-in adequado. Sem isso, planos COMPLEX se beneficiam parcialmente da paralelização porque a topologia é implícita.
Critérios de aceitação
›src/topology_router.py classifica demanda em {parallel, sequential, hierarchical, hybrid}
›Decomposer recebe topology hint e gera plano alinhado
›5 demandas exemplo cobrindo cada topology + run real comparativo
›KPI topology_match_rate em .kpi_history.jsonl
P0Sprint 122 dias
origem: Paper DAAO 2509.11079
Difficulty-conditional depth (DAAO set/2025)
Substituir complexity score único (1-5) por tupla (difficulty ∈ [0,1], n_subtasks, needs_judge, evidence_required, realtime_data). Cada dimensão pondera independentemente o tier alocado.
Justificativa
DAAO (arXiv:2509.11079, set/2025) reporta +11,21% accuracy com 64% do custo. Score único cega o router para casos como "baixa difficulty + alto evidence_required" (research curto mas com fact-check rigoroso) que hoje vai indevidamente para Sonnet em vez de Perplexity + Haiku review.
Critérios de aceitação
›src/difficulty_dims.py extrai 5 dimensões da demanda
›SmartRouter consome tupla em vez de complexity int
Para task type T, tentar primeiro Scout/Flash; se a saída tem confidence < threshold, escalar para Pro/Opus. Hoje todas as tasks com tier alocado pagam o tier desde a primeira chamada.
Justificativa
FrugalGPT mostra que ~60% das tasks medium são respondíveis por modelos economy se aceitamos retry no caso de baixa confiança. Adicionando confidence_score ao return do LLMClient, podemos cortar custo significativo em tasks medium sem perder qualidade nos casos difíceis.
›Router._try_cascade: economy → standard → premium
›Threshold configurável via env CASCADE_CONFIDENCE_MIN
›Métrica cascade_save_rate em .kpi_history.jsonl
›5 testes cobrindo escala e custo total
P1Sprint 131,5 dia
origem: Paper RCR-Router
Role-aware context routing (RCR-Router)
Cada subagent recebe apenas o subset relevante da memória/contexto para seu papel. Hoje todas as tasks recebem o briefing completo, inflando tokens em ~30%.
Justificativa
RCR-Router (paper recente) reporta -30% tokens sem perda de qualidade quando cada role recebe contexto filtrado. Hoje uma task de classification recebe o mesmo briefing de 5KB que uma task de architecture — desperdício direto.
Critérios de aceitação
›src/context_filter.py: filtragem por task_type
›Filtros por role: research → references only, code → spec only
Sprint 13 executou bateria E2E manual contra APIs reais (ping + board + run completos, 6 providers, custo ~$0,09/run). Falta tornar essa bateria um workflow CI semanal gated por GEO_E2E_REAL=1 com artifact anexado.
Justificativa
Bateria E2E manual da Sprint 13 já validou os contratos de API e expôs os 6 fixes (TASK_TYPES, diversity target, model_id, citations Perplexity, thinkingBudget Gemini, UX wave preview). Falta automatizar para detecção contínua: regressões silenciosas em providers passam despercebidas entre baterias manuais.
Critérios de aceitação
›tests/test_e2e_real.py com marker pytest skip se GEO_E2E_REAL != 1
›Demanda mínima (~6 tarefas) com BUDGET_LIMIT=0.10
›Cobertura dos 6 providers em uma única run
›CI separado em workflow opcional rodando 1x por semana
›Relatório anexado como artifact
P1Sprint 120,5 dia
origem: Sprint 7 deferred
Deploy do dashboard HTML em alexandrecaramaschi.com
Pipeline diário que gera o dashboard HTML via cli.py dashboard --html e publica em alexandrecaramaschi.com/geo-orchestrator/dashboard.
Justificativa
O HTML já existe (Sprint 7) mas vive apenas localmente. Publicar dá visibilidade pública dos KPIs reais — substitui screenshots estáticos pelo estado vivo do sistema.
›Upload do HTML para public/geo-orchestrator/dashboard.html
›Link na página /geo-orchestrator
›Cache busting via timestamp na URL
P2Sprint 131 dia
origem: Roadmap empresarial
Endpoint /metrics no formato Prometheus
Adicionar GET /metrics?format=prometheus que serve as métricas em formato exposition compatível com Prometheus scraping.
Justificativa
Empresas que adotam o orchestrator em escala precisam plugar em sua stack de observabilidade existente. Prometheus é o padrão de facto. Custo de implementação é baixo porque os KPIs já existem em jsonl.
Critérios de aceitação
›Conversão de .kpi_history.jsonl para exposition format
Adicionar GEO_TENANT env var que prefixa output/, .kpi_history e .cost_calibration por tenant.
Justificativa
Para empacotar o orchestrator como produto SaaS Brasil GEO, precisamos isolar os dados por cliente. Multi-tenant é pré-requisito para a próxima fase comercial.
Critérios de aceitação
›GEO_TENANT define output/${tenant}/ como base
›FinOps limits por tenant
›doctor + dashboard --tenant flag
›Migração: tenant default 'main' para retro-compat
›Documentação de deploy multi-cliente
FinOps & integração
Loop de governança fechado sem intervenção humana: detecta drift, recalibra, aplica safety threshold, faz backup automático e segue. Quatro vias de health check (CLI, HTTP, HTML, recovery) para integrar a qualquer pipeline existente.
Loop FinOps fechado · 6 providers
Detecção → ação corretiva → próxima execução com valores ajustados. Sem dashboard manual. Pós-Sprint 10, AVG_COST_PER_CALL[perplexity] foi auto-recalibrado de $0,008 para $0,05 após a bateria 360. Pós-Sprint 11, FINOPS_DAILY_LIMITS inclui xAI ($15/dia) e PROVIDER_SHARE_CAP cobre 6 famílias.
1
Custo real persistido
Cada execution_*.json grava cost por LLM, latência, tokens e verdict.
2
Drift detector
Se 3 runs consecutivos saem da banda 0.7-1.5x, alerta dispara em .kpi_history.jsonl.
3
Auto-trigger recalibrate
Orchestrator chama recalibrate() varrendo os últimos 30 reports — sem intervenção humana.
4
Safety threshold
Calibrações > 5x ou < 0.2x do default são rejeitadas e logadas em safety_rejections[].
5
Backup automático
.cost_calibration.json copiado para .backup.json antes de persistir. cli.py finops calibrate-rollback restaura.
6
Próximo pre_check usa AVG calibrado
Loop fechado: o run seguinte aplica os custos atualizados sem ação humana.
Comandos de health check
Quatro vias de saúde: síncrona (CLI), assíncrona (HTTP), publicável (HTML) e recuperação manual.
$ cli.py doctor --strict --json
6 health checks (api_keys, catalog, finops, kpi, calibration, drift). Saída humana ou JSON. --strict faz exit 1 — pronto para CI gating.
$ cli.py serve --port 8080
Servidor HTTP stdlib. GET /health (200/503), /metrics (KPI timeseries), / (docs). Bearer token opcional via GEO_HEALTH_TOKEN.
$ cli.py dashboard --html public/dashboard.html
Gera HTML auto-contido com Chart.js. 5 gráficos + KPI cards + tabela dos 10 últimos runs. Deploy em qualquer servidor estático.
$ cli.py finops calibrate-rollback
Restaura .cost_calibration.backup.json se a recalibração mais recente apresentou drift suspeito. Recovery one-shot.
Perguntas frequentes
Dúvidas técnicas e conceituais sobre o geo-orchestrator pós-Sprint 13.
Sprint 13 (19-05-2026): o que a bateria E2E pós-Sprint 12 mudou no orquestrador?
A bateria E2E (ping 6/6 OK $0,006 + board 5/5 paralelo + run completo 5 tasks/3 waves $0,0885) expôs 6 gaps fechados em sequência. (1) TASK_TYPES: analysis agora tem primary=gemini Pro (era Flash) e fallback=gemini_flash (era groq_heavy); review primary=claude_sonnet (era groq_heavy) com fallback=groq_heavy; fact_check fallback=gemini Pro (era Flash); data_processing fallback=gemini Pro (era groq). Motivações: usuário tem crédito Google Cloud carregado, Gemini Pro precisa entrar em produção (não só Flash); Sonnet 4.6 supera Groq Heavy em qualidade editorial PT-BR e garante presença Anthropic em planos COMPLEX (cobertura 4/5 → 5/5). (2) Diversity guarantee dinâmico: target = min(len(tasks), 5) — antes fixo em 4; planos de 5 tasks agora buscam 5 providers únicos. (3) TaskResult + LLMResponse expõem model: str e citations: list[str]; antes ficava model='?' no execution_*.json. (4) Perplexity sonar-deep-research com return_citations=true + return_related_questions=false + search_recency_filter='year' no POST body — bateria validou Aggarwal SIGIR 2024 e Reyes-Lillo 2025 com DOIs reais. (5) Gemini 2.5 Pro thinkingBudget guard: reserva 1/3 do max_tokens para thinking (mín 512, máx 2048), 2/3 para output; corrige bug em que Pro consumia todo budget em thinking interno e retornava parts=[] silencioso. (6) UX em tempo real: pipeline imprime '>>> Wave N (X em paralelo)' antes de cada wave e '[OK] tN -> provider (model_id) -> Xs | Y tok | $Z' depois de cada task — fim do silêncio entre wave-start e relatório final.
Sprint 12 (17-05-2026): por que copy só pode usar modelos premium e por que Perplexity virou prioridade absoluta em research?
Duas diretrizes canônicas conectadas. (1) COPY PREMIUM ONLY: writing, copywriting e seo agora só rodam em GPT-5.5 (primary), Claude Opus 4.7 (1º fallback) ou Gemini 2.5 Pro (2º fallback). Sonnet/Haiku/Flash banidos de copy. Motivo: voz editorial PT-BR de Alexandre exige reasoning nativo, 1M ctx e densidade lexical que tiers menores não entregam consistentemente em copy longa. Incidente curso saude-mental-vibecoding (14-05-2026, 3741 linhas sem acentos por sub-agente Sonnet) comprovou que o tier importa. Custo extra (~$10/run editorial) vence o retrabalho de QA. (2) PERPLEXITY PRIORIDADE: cap por provider restaurado 0,35 → 0,50 (era de Sprint 10/bateria 360 quando 1 task dominava 84% do wall time, mas o adaptive_decomposer agora decompõe research em sub-tasks naturalmente). FALLBACK_CHAINS['research'] reordenado para perplexity → gemini Pro → claude Opus → gpt-5.5; groq só como último recurso. Citações verificáveis vencem velocidade/custo em research.
Como a hierarquia de copy se reflete tecnicamente no código?
Três pontos. (1) TASK_TYPES em src/config.py: writing/copywriting/seo têm primary=gpt4o (gpt-5.5) e fallback=claude (Opus 4.7) — antes eram gemini, claude_sonnet, perplexity respectivamente. (2) FALLBACK_CHAINS: ['gpt4o', 'claude', 'gemini', 'perplexity', 'claude_sonnet', 'groq_heavy'] — os 4 primeiros slots são todos premium-tier; sonnet e groq_heavy só como último recurso. (3) smart_router._ensure_provider_diversity: em planos COMPLEX 5+ tasks quando Anthropic está ausente, agora tenta promover writing/copywriting/seo → Opus 4.7 ANTES de promover decomposition → Sonnet. Garante que mesmo em diversity upgrade o tier de copy permaneça premium. Catalog YAML v2.1 sincronizado (gpt-4o → gpt-5.5, drift da Sprint 11 fechado); pricing $5.00/$15.00 por Mtok refletido em test_sprint7.py.
O que mudou na Sprint 11 (17-05-2026) e por que é importante?
Sprint 11 transformou o orquestrador em uma plataforma de 6 providers (era 5). Quatro entregas conectadas: (1) xAI Grok integrado como 6º provider canônico — 3 entradas LLMConfig (grok 4.3 flagship 1M ctx, grok_multi 4.20-multi-agent 2M ctx com 4 agentes paralelos nativos, grok_fast 4.20-non-reasoning) com API OpenAI-compatible em api.x.ai/v1; (2) 6 task types novos exclusivos do canal Grok — realtime_search, social_listening, current_events, brand_monitoring, multi_perspective_decomposition, long_context_synthesis — porque search_parameters: auto dá acesso live a X/Twitter que nenhum outro provider tem; (3) diversity guarantee em planos COMPLEX 5+ tasks garante cobertura mínima de 4/6 providers únicos (66%), baseado em Mixture of Agents (Wang 2024), DAAO (set/2025) e AdaptOrch (fev/2026); (4) upgrade simultâneo: Claude Opus 4.6 → 4.7, Groq default Llama 3.3 70B → Llama 4 Scout 17B 16E (5x mais barato), Groq Heavy default consolidado em openai/gpt-oss-120b. Bridge ping 6/6 OK $0,006/exec.
xAI Grok (com K) é a mesma coisa que Groq (com Q)?
Não. São 2 empresas e 2 stacks completamente diferentes que coincidentemente têm nomes parecidos. xAI Grok (com K) é a empresa de Elon Musk; modelos próprios (grok-4.3, grok-4.20-multi-agent, grok-4.20-non-reasoning) com diferencial único de busca live em X/Twitter via search_parameters. Groq Inc (com Q) é a empresa de chips LPU; opera infra de inferência ultra-rápida para Llama 4 Scout 17B 16E e openai/gpt-oss-120b. O orquestrador mantém os 2 como providers canônicos distintos (Provider.XAI e Provider.GROQ), com aliases grok/grok_multi/grok_fast vs groq/groq_heavy. Confusão de nome custa caro em ops — vale tratá-las sempre separadamente.
O que é a diversity guarantee e como ela funciona pós-Sprint 13?
Em planos COMPLEX (5+ tasks), o método _ensure_provider_diversity do SmartRouter garante que pelo menos target = min(len(tasks), 5) providers canônicos apareçam no plano. Sprint 13 trocou o target fixo de 4 por esse alvo dinâmico — plano de 5 tasks busca 5 providers únicos, plano de 6+ é capado em 5 (preserva 1 slot livre para o provider apropriado por task type). Quando rebalance_plan_assignments inicial não atinge o alvo, o router faz upgrades estratégicos usando hints por provider ausente: se Anthropic está faltando, promove a task com complexity mais alta para architecture/critical_review/review; se Grok está faltando e há sinal realtime/social, reclassifica para realtime_search. Baseado em 3 papers: Mixture of Agents (Wang 2024, arXiv:2406.04692) — ensemble heterogêneo supera homogêneo em quality médio +7-15% em GSM8K/MATH; RouteLLM (Ong 2024) — diversity reduz single-point-of-failure de 12% para 2% em outage scenarios; When Agents Disagree (mar/2026) — MoA-diverso vence Self-MoA em raciocínio com judge (0,810 vs 0,512 win rate).
Quando o Grok efetivamente entra em produção?
Grok é ativado quando o adaptive_decomposer classifica a task como realtime_search, social_listening, current_events, brand_monitoring, multi_perspective_decomposition ou long_context_synthesis. _infer_task_type tem keywords PT-BR/EN específicas — “monitorar Twitter agora”, “timeline X tempo real”, “trending”, “debate de múltiplas perspectivas”, “síntese de 500k tokens” — testadas ANTES das genéricas (research/analysis) para que a task certa caia no canal certo. Pricing flat $1,25/$2,50 por 1M tokens em toda linha GA (sem tier barato pós-15-mai-2026). FINOPS_DAILY_LIMITS[xai]=$15 e PROVIDER_SHARE_CAP[xai]=0,30 protegem o crédito inicial USD 25 da conta team caramaschigeo.
Como o circuit breaker funciona em produção?
Um breaker por provider (não por alias). Após 3 falhas consecutivas em qualquer task, o circuito abre por 90s — todas as próximas tasks da run que tentariam o provider raise CircuitBreakerError em <100ms e caem para o próximo da fallback chain instantaneamente. Após 90s, vai para HALF_OPEN: 1 sucesso fecha (CLOSED), 1 falha reabre. O registry é singleton, então o sinal é compartilhado cross-task na mesma run. Pós-Sprint 11, o breaker cobre os 6 providers (xAI incluído). Cada provider alimenta um KPI provider_health no .kpi_history.jsonl — auditoria histórica de quem derrubou o pipeline na semana.
Por que Opus saiu de primary em code e review, e por que review voltou para Anthropic na Sprint 13?
Diagnóstico nos 10 runs até a Sprint 8 mostrou que Opus pegava só 3,7% das tasks por contagem mas concentrava ~60% dos custos (uma única task crítica chegou a $0,668). Gemini 2.5 Pro tem 1M context, raciocínio comparável e custa ~1/15 de Opus. Para code padrão, Gemini venceu o trade-off. Para review, a Sprint 9 promoveu Groq Heavy a primary (sub-segundo + diversifica provider). Em 19-mai-2026 a Sprint 13 reavaliou review especificamente — bateria E2E mostrou que Claude Sonnet 4.6 supera Groq Heavy em qualidade editorial PT-BR (rubrica de 5 dimensões aplicada a copy denso) e que precisávamos garantir Anthropic em planos COMPLEX (cobertura subia de 4/5 para 5/5 quando review é Sonnet). Groq Heavy ficou como fallback de review com latência sub-segundo, e mantém primary em code_review e extraction onde a velocidade vence. Opus 4.7 (upgrade Sprint 11) segue primary em architecture e critical_review — onde cada ponto de qualidade extra justifica o custo, e o tier $15/$75 não mudou no upgrade.
O que mudou na Sprint 10 (bateria 360) e o que ela protege?
A bateria 360 executou ping + doctor + finops + plan + run + board em sequência e expôs 6 bugs entre crítico e baixo. O mais sério: Sonnet 4.6 começou a devolver dependencies como list de dicts ([{task_id:t1}]) em vez de strings, quebrando _parse_plan inteiro com Pydantic ValidationError. Outros: AVG_COST_PER_CALL[perplexity] $0,008 estava 6x abaixo da medição real ($0,05/call em sonar-deep-research), o calibrator rejeitava amostras boas; PROVIDER_SHARE_CAP[perplexity] 0,50 deixava research dominar 84% do wall time — reduzido para 0,35. Também: cli.py aggregator consolidou gemini_flash em gemini e groq_heavy em groq nas tabelas; Gemini split runtime via GEMINI_MODEL env permite cair para Flash em janelas de outage 503 sustentado do tier Pro. Resultado: 223 passed + 1 xfailed = 100% effective, coverage 57%.
O que é o cap por provider e como ele difere do cap por nome?
O cap antigo aplicava por alias (claude, claude_sonnet, claude_haiku contavam separadamente), o que deixava Anthropic somar facilmente 90%+ do plano. O novo cap é por família — Anthropic = Opus + Sonnet + Haiku somados, Google = Pro + Flash somados, Groq = Llama 4 Scout + gpt-oss-120b somados, xAI = grok + grok_multi + grok_fast somados. PROVIDER_SHARE_CAP em src/config.py pós-Sprint 11: anthropic 40%, openai 45%, google 45%, perplexity 35%, groq 65%, xai 30%. Cap conservador para xAI inicial porque pricing flat $1,25/$2,50 não tem tier barato; demanda multi-task pode estourar crédito rápido.
Posso usar o orquestrador em produção sem temer custos descontrolados nem outages?
Sim — cinco camadas de proteção: (1) pre_check de budget bloqueia antes de iniciar se a estimativa ultrapassa BUDGET_LIMIT (default $15); (2) cap por provider (6 famílias) impede concentração total mesmo quando o budget está disponível; (3) tier interno Claude (Opus → Sonnet → Haiku) e Gemini split Pro/Flash reduzem custo até 95% para tarefas low/medium-complexity; (4) circuit breaker + redistribuição cross-provider + diversity guarantee em COMPLEX tornam o pipeline resiliente a outage sustentado de qualquer provider individual; (5) FINOPS_DAILY_LIMITS por provider são teto absoluto diário. Run #7 com Anthropic em 102% do limite diário: 11/11 tasks completas, $0,07, sem falha — fallback chain redirecionou tudo automaticamente.
Como integro em CI/CD?
Três pontos nativos. (1) cli.py doctor --strict retorna exit 1 em qualquer check ATENÇÃO/CRÍTICO — ideal como gate de pipeline. (2) cli.py serve sobe HTTP /health (200/503) e /metrics — pollable por load balancers e k8s liveness probes. Reporta saúde dos 6 providers. (3) cli.py dashboard --html gera HTML auto-contido com Chart.js para deploy em qualquer servidor estático. Bearer token opcional via GEO_HEALTH_TOKEN protege os endpoints. Provider em circuit OPEN aparece em /health como degraded. Sprint 13 também adicionou UX em tempo real no stdout (wave preview + OK por task) — útil para logs estruturados em CI.
O que está no backlog imediato (Sprint 14+)?
Três P0 baseados em papers 2025-2026: (1) topology-first routing (AdaptOrch fev/2026 arXiv:2602.16873) — decidir parallel/sequential/hierarchical/hybrid ANTES de escolher modelo, +12-23% sobre baselines; (2) difficulty-conditional depth (DAAO set/2025 arXiv:2509.11079) — substituir complexity score único por tupla (difficulty, n_subtasks, needs_judge, evidence_required, realtime_data), +11,21% accuracy com 64% do custo; (3) automatizar a bateria E2E manual da Sprint 13 em workflow CI semanal com artifact anexado (já valida 6 providers, falta agendamento). P1: confidence-based cascading (FrugalGPT), role-aware context routing (RCR-Router), deploy do dashboard HTML em alexandrecaramaschi.com. P2: /metrics Prometheus, webhook de alerta, multi-tenant.
Pronto para orquestrar
12 LLMs canônicos em 6 providers, hierarquia premium-only em copy (GPT-5.5 → Opus 4.7 → Gemini Pro), Gemini 2.5 Pro em analysis, Claude Sonnet 4.6 em review, Perplexity com citations expostas (URLs/DOIs), diversity guarantee dinâmico min(plan_size, 5) em planos COMPLEX, cap por provider, audit com model_id e citations, governança FinOps automatizada e roadmap público atualizado a cada sprint. Open-source, sem lock-in.