Jangada AIJangada AI

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ônicoOpenAI/GroqAnthropicGemini
temperaturetemperaturetemperaturetemperature
max_tokensmax_tokensmax_tokensmax_output_tokens
top_ptop_ptop_ptop_p
top_k(descartado)top_ktop_k
stopstopstop_sequencesstop_sequences
seedseed(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-5 em diante (gpt-5.x, gpt-6-*…, exceto os *-chat-*) rejeita temperature (HTTP 400) e exige max_completion_tokens.
  • gemini-3.x descarta temperature/top_p/top_k.
  • Thinking do Gemini: você passa só thinking_budget (ou thinking_level) e a lib adapta — no 2.5 vira thinking_budget, no 3.x vira thinking_level —, empacotando no thinking_config nativo. 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 o model nã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") tira temperature e usa max_completion_tokens, como no gpt-5. Não é enviado ao SDK.
  • Aliases de perfil: vertex herda as regras do gemini e azure as do openai. Para um provider seu: jangada_ai.profiles.register_alias("meu", "openai").
  • Série o (o1/o3/o4): max_tokens vira max_completion_tokens e sampling é removido, como no gpt-5.
  • thinking_budget no Gemini 3.x é graduado: até 1024 → LOW, até 8192 → MEDIUM (só nos modelos Flash), acima → HIGH. No gemini-2.5-pro, thinking_level="MINIMAL" vira 128 (o mínimo aceito), não 0.
  • Remover um parâmetro de um LLM derivado: llm.with_params(temperature=REMOVE) (from jangada_ai import REMOVE); None continua sendo ignorado.
  • max_retries negativo levanta ValueError na criação do LLM.

Exemplo

examples/model_profiles_example.py — script executável.

On this page