Jangada AIJangada AI

Anthropic (Claude)

Provider anthropic. Adapter sobre o SDK anthropic.

pip install "jangada-ai[anthropic]"
  • provider=: "anthropic"
  • Variável de ambiente: ANTHROPIC_API_KEY
from jangada_ai import LLM
llm = LLM("anthropic", "claude-opus-4-8")

O que faz

  • Texto e streaming.
  • Structured output (parse): por tool-forcing — define uma ferramenta com o schema e fixa tool_choice, depois valida o tool_use.input contra o modelo Pydantic. (Claude não tem um response_format como a OpenAI.) Nos modelos que não aceitam forced tool use (Opus 5.5, Fable 5.1 e Mythos 5.1), o parse usa tool_choice="auto" + strict tool use automaticamente — transparente para você. Veja "O que mudou na 1.9.2".
  • Vision (images=): imagens viram bloco image com source base64.
  • Documentos (files=): extração de texto local.

O que NÃO faz

  • Transcrição de áudio: a API do Claude não aceita áudio — transcribe() levanta UnsupportedError. Use OpenAI, Groq ou Gemini para áudio (e, se quiser, mantenha o Claude como provider de texto com fallback de áudio em outro). Veja Transcrição de áudio.
  • Detecção de objetos: funciona mecanicamente (vision + structured), mas a precisão das coordenadas é menor que a do Gemini.

Estrutura e quirks

  • Parâmetros: temperature, max_tokens, top_p, top_k, stop (→ stop_sequences). Não tem seed (é descartado).
  • max_tokens é obrigatório na API do Claude — a jangada já usa um default alto (8192) quando você não informa.
  • System: vai no campo system da requisição (não como mensagem).
  • Resposta (Completion): usage de input_tokens/output_tokens nativos; raw com o objeto da SDK.
  • Erros: 529 (overloaded) vira OverloadedError (subtipo de ServerError), elegível a retry/fallback. Veja Erros.

Relacionado: Matriz de capacidades, Structured output.

O que mudou na 1.9.2

  • Compatível com Claude Opus 5.5, Fable 5.1 e Mythos 5.1 (lançados em 2026-09-22). Esses modelos trazem um breaking change: forced tool use não é mais aceito — tool_choice do tipo "tool"/"any" retorna 400. Como o structured output usava tool-forcing, o parse quebrava nesses modelos. Agora, só neles, o parse usa tool_choice="auto" + strict tool use (a migração recomendada pela Anthropic); os demais modelos Claude seguem no tool-forcing de sempre. É transparente: você chama LLM("anthropic", "claude-opus-5-5").parse(...) normalmente.
  • complete(tools=…, tool_choice="required" (ou "any"/nome) no Opus 5.5 / Fable 5.1 / Mythos 5.1 agora levanta UnsupportedError claro (a API rejeitaria com 400). Use tool_choice="auto" — se quiser garantir o schema dos argumentos, a lib já aplica strict tool use no caminho de parse.

O que mudou na 1.9.0

  • Compatível com anthropic>=1.0. O SDK 1.0 removeu temperature, top_p e top_k da assinatura de messages.create() — passá-los dava TypeError. A lib agora os envia pelo corpo (extra_body), então LLM("anthropic", ..., temperature=0.2) funciona em qualquer versão do SDK.
  • Extended thinking com tools em vários turnos: os blocos thinking/ redacted_thinking (com assinatura) são preservados e reenviados antes do tool_use, como a API exige. No parse, o thinking é desligado (o tool_choice forçado é incompatível com ele).
  • Tools nativas: web_search, web_fetch e code_execution (veja Tools nativas); os blocos com encrypted_content voltam intactos no histórico e pause_turn é continuado automaticamente.
  • Usage com cache: input_tokens inclui os tokens de cache; cache_read_tokens e cache_write_tokens aparecem quando há prompt caching, e o custo usa o preço de cache.
  • Recusa sem tool_use no parse levanta OutputValidationError (entra no failover); resposta sem conteúdo vira ServerError.

On this page