Parâmetros de geração e perfis por modelo
A jangada aceita nomes canônicos de parâmetros e cada adapter os traduz para o nome nativo do SDK, descartando os não suportados.
Parâmetros canônicos
| Canônico | OpenAI/Groq | Anthropic | Gemini |
|---|---|---|---|
temperature | temperature | temperature | temperature |
max_tokens | max_tokens | max_tokens | max_output_tokens |
top_p | top_p | top_p | top_p |
top_k | (descartado) | top_k | top_k |
stop | stop | stop_sequences | stop_sequences |
seed | seed | (descartado) | seed |
llm = LLM("anthropic", "claude-opus-4-8", temperature=0.2) # max_tokens=8192
# override por chamada
llm.complete("...", params={"temperature": 0.9, "max_tokens": 16384})
# clone com novos defaults
criativo = llm.with_params(temperature=1.0)Desde a v1.4.5, max_tokens tem default alto de 8192 em todos os
providers. Para modelos com outro limite ou extrações ainda maiores, ajuste o
valor explicitamente:
llm = LLM("openai", "gpt-5", max_tokens=16384)
# ou só nesta chamada:
llm.parse("Extraia todos os itens.", Itens, files=[...], params={"max_tokens": 16384})Parâmetros específicos de um SDK que não têm nome canônico vão via extra=.
Perfis automáticos (quirks por modelo)
Modelos do mesmo provider às vezes têm contratos diferentes. A jangada normaliza
isso em profiles.py, por modelo, sem você precisar saber:
gpt-5em diante (gpt-5.x,gpt-6-*…, exceto os*-chat-*) rejeitatemperature(HTTP 400) e exigemax_completion_tokens.gemini-3.xdescartatemperature/top_p/top_k.- Thinking do Gemini: você passa só
thinking_budget(outhinking_level) e a lib adapta — no 2.5 virathinking_budget, no 3.x virathinking_level—, empacotando nothinking_confignativo. Ver Gemini.
thinking_budget/thinking_level não são kwargs do construtor: um kwarg solto
cairia em client_kwargs (vai para o genai.Client, lugar errado). Passe por
extra= no construtor ou por params= na chamada:
# no construtor (vale para todas as chamadas deste LLM)
llm = LLM("gemini", "gemini-3.5", extra={"thinking_level": "LOW"})
# por chamada (sobrescreve só nesta)
llm.complete("...", params={"thinking_budget": 1024})Não misture as duas convenções no mesmo valor: thinking_level=500 é erro —
thinking_level é um enum (LOW/HIGH); 500 seria um thinking_budget.
Escolha uma e a lib traduz para o que o modelo aceita.
Ordem aplicada no adapter: _translate() (canônico → nativo) →
apply_profile() (quirks de modelo) → empacota thinking_config. Ao suportar um
modelo novo com contrato diferente, adicione uma regra em profiles.py em vez de
espalhar ifs.
Veja Providers e Estendendo.
O que mudou na 1.9.0
profile_model=: quando omodelnão é o nome real do modelo (ex.: o nome do deployment na Azure), diga qual é o modelo base para a lib aplicar as regras certas:LLM("azure", "meu-deploy", profile_model="gpt-5")tiratemperaturee usamax_completion_tokens, como no gpt-5. Não é enviado ao SDK.- Aliases de perfil:
vertexherda as regras dogeminieazureas doopenai. Para um provider seu:jangada_ai.profiles.register_alias("meu", "openai"). - Série o (o1/o3/o4):
max_tokensviramax_completion_tokense sampling é removido, como no gpt-5. thinking_budgetno Gemini 3.x é graduado: até 1024 →LOW, até 8192 →MEDIUM(só nos modelos Flash), acima →HIGH. Nogemini-2.5-pro,thinking_level="MINIMAL"vira 128 (o mínimo aceito), não 0.- Remover um parâmetro de um
LLMderivado:llm.with_params(temperature=REMOVE)(from jangada_ai import REMOVE);Nonecontinua sendo ignorado. max_retriesnegativo levantaValueErrorna criação doLLM.
Exemplo
examples/model_profiles_example.py — script executável.