Como a selecao de modelo funciona
O LLM Router (packages/core/src/ai/router.ts) resolve o provider e o modelo de cada chamada a partir do TenantTaskModelConfig, por tipo de tarefa:
| Tipo de tarefa | Default tipico |
|---|---|
| chat_tutor | classe Sonnet |
| chat_evaluation / summarization / supervisor | classe Haiku |
| content_generation | classe Haiku |
| course_review / course_agent / gamification_agent | classe Sonnet |
O admin institucional pode sobrepor qualquer tarefa para outro provider/modelo. Nenhum model ID e hardcoded nos agentes — o router e o unico ponto de decisao.
Metodos do router
stream()— chat com streaming (metered).generate()— agentes com tools (metered); as tools sao convertidas de JSON Schema para o formato AI SDK, entao funcionam em qualquer provider.generateDirect()— chamadas background fire-and-forget (evaluation, content, summarizer, supervisor) que rodam noafter()do Next.js sem o pipeline completo de metering.
Fallback chain + circuit breaker
Por tier: Claude → GPT → Grok → Gemini (LLMs); Voyage → OpenAI → Cohere (embeddings). Um circuit breaker no Redis abre apos um limite de falhas e e compartilhado entre instancias, entao um breaker aberto pula o provider problematico sem timeout. Incidentes sao registrados para observabilidade.
BYO keys + metering
- Chaves por tenant (
TenantApiKey) sao cifradas AES-256-GCM. Ordem de resolucao: chave do tenant → chave global do provider → variavel de ambiente. - Toda chamada LLM passa pelo metering middleware (rate limit → credit check → calculo de custo), registrando tokens de input e output separadamente. Precos vem de uma tabela no banco, nunca hardcoded.
Por que importa
Voce nao aposta a plataforma no preco, latencia ou disponibilidade de um unico laboratorio. Conforme os modelos melhoram, voce troca um dropdown — nao o seu codigo.