GPT-Image 2.6 Flare e Sunburst chegaramA partir de $0.025 por imagem

MiniMax M3.1 Flash no OpenCode: configuração testada e chamadas de ferramenta

Uma configuração do OpenCode v2.2.3 testada com MiniMax M3.1 Flash: o JSON do provider, um registro real de chamadas de ferramenta e os erros que cortam a continuação.

Kiki, OmniaKey COO9 min de leitura
Nesta página

MiniMax M3.1 Flash funciona no OpenCode v2.2.3 por meio de um provider próprio compatível com OpenAI. O nome exato do modelo no OpenCode é omniakey/minimax-m3.1-flash, a Base URL é https://api.omniakey.com/v1, e a configuração abaixo concluiu uma tarefa real de repositório em 12 de novembro de 2026: cinco leituras, uma escrita, uma execução de node --test e 12 de 12 testes passando.

O OpenCode fala o formato OpenAI Chat Completions com um provider próprio, e a OmniaKey entrega esse formato em /v1. Cabe tudo em um arquivo de projeto, mas três detalhes decidem se funciona: o ID do modelo precisa seguir a grafia da OmniaKey, a chave precisa chegar ao processo do servidor do OpenCode e a configuração do provider precisa preservar o campo de raciocínio entre as chamadas de ferramenta.

O que você precisa antes de começar

Use o OpenCode V2. A versão testada foi a v2.2.3. O V2 coloca providers próprios em um objeto providers de primeiro nível; os exemplos do V1 têm outro formato. Confira a documentação de providers do V2 e opencode --version antes de copiar a configuração.

  • OpenCode: v2.2.3, testado em 12 de novembro de 2026.
  • ID do modelo na OmniaKey: minimax-m3.1-flash.
  • Referência no OpenCode: omniakey/minimax-m3.1-flash.

Crie uma chave da OmniaKey e coloque em OMNIAKEY_API_KEY. O JSON abaixo nomeia a variável e nunca contém o segredo. Escolha um repositório pequeno com um comando de teste já existente; o teste usou um exemplo Node com src/normalize.js, um arquivo de teste e um script de teste.

A API própria da MiniMax usa o ID com maiúsculas misturadas MiniMax-M3.1-Flash. A OmniaKey usa a forma minúscula minimax-m3.1-flash. No opencode.jsonc, use o ID minúsculo da OmniaKey nos dois lugares, a chave do mapa models e o modelID; outra caixa não bate com o ID da OmniaKey.

Se você ainda está escolhendo modelo, a análise do MiniMax M3.1 Flash reúne benchmarks, informações de lançamento e o raciocínio sempre ativo.

A configuração do OpenCode V2 que testamos

Coloque este arquivo na raiz do projeto como opencode.jsonc. É a forma pública da configuração usada na execução.

json
{
  "$schema": "https://opencode.ai/config.json",
  "model": "omniakey/minimax-m3.1-flash",
  "share": "disabled",
  "update": "disable",
  "warming": false,
  "snapshots": false,
  "enabled_providers": ["omniakey"],
  "providers": {
    "omniakey": {
      "name": "OmniaKey",
      "env": ["OMNIAKEY_API_KEY"],
      "package": "@opencode/ai/providers/openai-compatible",
      "settings": {
        "baseURL": "https://api.omniakey.com/v1"
      },
      "models": {
        "minimax-m3.1-flash": {
          "modelID": "minimax-m3.1-flash",
          "name": "MiniMax M3.1 Flash",
          "body": {
            "reasoning_effort": "medium",
            "max_tokens": 4096,
            "stream_options": {"include_usage": true}
          },
          "limit": {
            "context": 1000000,
            "output": 4096
          },
          "capabilities": {
            "tools": true,
            "input": ["text"],
            "output": ["text"],
            "freeform": [],
            "reasoning": {
              "supported": true,
              "effort": ["low", "medium", "high", "xhigh", "max"]
            }
          },
          "compatibility": {
            "reasoningField": "reasoning_content",
            "requireReasoning": true,
            "maxTokensField": "max_tokens"
          }
        }
      }
    }
  },
  "permissions": [
    {"action": "*", "resource": "*", "effect": "deny"},
    {"action": "read", "resource": "*", "effect": "allow"},
    {"action": "glob", "resource": "*", "effect": "allow"},
    {"action": "grep", "resource": "*", "effect": "allow"},
    {"action": "edit", "resource": "src/normalize.js", "effect": "allow"},
    {"action": "shell", "resource": "node --test", "effect": "allow"},
    {"action": "shell", "resource": "git diff *", "effect": "allow"},
    {"action": "external_directory", "resource": "*", "effect": "deny"}
  ]
}

O array env diz ao OpenCode qual variável de credencial ler: OMNIAKEY_API_KEY vem do ambiente do processo do servidor. modelID é o ID enviado à OmniaKey, enquanto a chave do mapa models é o ID que o OpenCode usa nas referências provider/model. Manter os dois como minimax-m3.1-flash evita uma busca ambígua.

Os blocos limit e capabilities substituem os padrões do OpenCode para um modelo desconhecido. Sem eles, o OpenCode supõe contexto de 200.000 tokens e entrada de imagens. A página do modelo na OmniaKey informa contexto de 1M tokens e nenhuma entrada de visão, então a configuração define o limite em 1000000 e a entrada apenas como texto. O 1M é a janela publicada, não um tamanho que esta tarefa pequena tenha esgotado.

O bloco body traz os dois valores testados: esforço de raciocínio medium e teto de max_tokens em 4096. A lista de effort em capabilities reúne os cinco níveis descritos no guia da MiniMax; o usado no teste foi medium.

O bloco permissions é estreito de propósito para o repositório de demonstração. Ele nega tudo e depois libera leitura, glob e grep, uma edição em src/normalize.js, o comando node --test e git diff. Também nega diretórios externos. Troque o caminho e os comandos pelas regras do seu projeto. Uma liberação ampla de edição ou de shell dá ao agente muito mais acesso do que uma tarefa delimitada exige.

Rode com a chave no shell do servidor

O OpenCode normalmente inicia ou encontra um servidor compartilhado em segundo plano. Esse servidor guarda sessões, configuração e execução de ferramentas, e lê as variáveis env do provider no próprio ambiente. Uma chave exportada em outro terminal não chega até ele. A documentação da CLI do OpenCode descreve o servidor compartilhado e a opção --standalone.

Para uma primeira execução previsível, use um servidor privado a partir de um shell que tenha a chave:

bash
export OMNIAKEY_API_KEY="your-omniakey-api-key"
opencode --standalone models

O comando models testado não leva argumento de provider. Ele lista omniakey/minimax-m3.1-flash. Depois rode uma tarefa. O teste usou este argumento de modelo e o bloco de prompt abaixo; troque o marcador pelo texto exato:

bash
# Replace <task prompt> with the text from the prompt block below.
opencode --standalone run --model omniakey/minimax-m3.1-flash '<task prompt>'

A opção --standalone inicia um servidor privado a partir desse shell, então ele herda a chave e lê a configuração do projeto. Um servidor compartilhado iniciado antes vê apenas o próprio ambiente. A linha da chave acima é um marcador; o arquivo de configuração continua sem segredo.

Se você já tem um servidor compartilhado em um ambiente com OMNIAKEY_API_KEY, pode usá-lo. Quando esse ambiente não está claro, o servidor privado é o caminho reproduzível.

Confira o ciclo de leitura, escrita e teste

Um exemplo pequeno em Node basta para ver se as chamadas de ferramenta funcionam. O exemplo tinha src/normalize.js com um stub que só ordenava, um arquivo de teste com 12 casos e um script node --test. Antes da correção, 3 testes passavam e 9 falhavam.

Este é o prompt usado na execução, sem alterações:

prompt
Fix src/normalize.js in this small JavaScript repository. Read the source and existing tests, then implement normalizeIntervals: accept valid half-open numeric intervals [start,end], drop empty intervals, sort them, and merge overlapping or touching ranges. Return fresh arrays without mutating the input. Do not change tests or configuration. Run `node --test` and summarize the result. Work only in this repository; do not read any credentials, network resources or files outside it. Use at most 8 tool calls.

A execução fez sete operações de ferramenta em seis requisições HTTP, todas com resposta 200:

FerramentaVezesO que cobriu
read5Lista do repositório, fonte, pasta de teste, package.json, arquivo de teste
write1src/normalize.js
shell1node --test

O primeiro turno enviou duas leituras em paralelo, uma da lista do repositório e outra da fonte. Os dois turnos seguintes leram a pasta de teste, o arquivo de pacote e o arquivo de teste. A escrita substituiu a fonte. A chamada de shell rodou os testes. A execução levou 70,172 segundos.

A chamada de teste dentro do ciclo reportou:

text
ℹ tests 12
ℹ suites 0
ℹ pass 12
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 52.316459

A resposta final nomeou o arquivo alterado e o resultado 12/12. Os seis blocos de usage somam 20.739 tokens de entrada, incluindo as leituras de prefixo em cache, e 803 tokens de saída. A maior completion teve 363 tokens, então o teto de 4096 nunca foi alcançado.

Um processo local de encaminhamento mandou o corpo da requisição e a resposta em streaming para a OmniaKey sem alteração. É uma tarefa pequena: confirma que o ciclo de ler, escrever e testar funciona neste repositório, não que o modelo seja rápido ou limpo em qualquer código.

Ajuste esforço, contexto e saída

O raciocínio é obrigatório no M3.1 Flash. O guia de geração de texto da MiniMax diz que o modelo sempre pensa, e a referência da API compatível com OpenAI devolve HTTP 400 se um cliente enviar thinking: {"type": "disabled"} ou reasoning_effort: "none". Deixe o raciocínio ligado e baixe o esforço quando quiser um turno mais curto.

AjusteValor testadoO que controla
reasoning_effortmediumQuanto o modelo pensa antes de responder
max_tokens4096Teto de saída do cliente por chamada
limit.context1000000Janela de contexto publicada

reasoning_effort aceita low, medium, high, xhigh e max; quando omitido, o guia da MiniMax diz que o padrão é max. Medium bastou para esta tarefa delimitada. Baixar o esforço encurta o raciocínio, mas não o desliga.

Os controles de amostragem não fazem nada neste modelo. A referência da API da MiniMax diz que o M3.1 Flash usa sempre 1 e 0,95, então remover temperature e top_p é mais limpo do que ajustar valores ignorados.

O contexto de 1M tokens vem da página do modelo na OmniaKey e do guia da MiniMax. O limite de saída de 4096 é um teto de segurança do cliente escolhido para esta execução, não um máximo publicado pelo provedor. Tokens de raciocínio contam dentro desse teto, então um turno longo de pensamento pode terminar com finish_reason: "length" e pouco ou nenhum texto final. Baixe o esforço primeiro e suba o teto depois, se a tarefa precisar de mais espaço.

Corrija erros de chave, ID e continuação

A execução bem-sucedida não gerou erros. Esta lista segue a documentação linkada do OpenCode e da MiniMax. A Base URL exata é https://api.omniakey.com/v1.

SintomaO que verificarCorreção
401 ou 403OMNIAKEY_API_KEY está no ambiente do servidor?Exporte no shell que inicia o OpenCode ou use --standalone; mantenha a chave fora do JSON.
Model unavailable ou modelo não encontradoA chave do mapa e modelID dizem minimax-m3.1-flash?Corrija grafia e caixa; não use o ID MiniMax-M3.1-Flash do provedor; confirme que o provider está ativo.
404 do gatewaysettings.baseURL é exatamente o endereço da OmniaKey?Use a Base URL exata acima e remova qualquer caminho extra.
400 sobre adaptive thinkingAlgum cliente enviou raciocínio desligado ou reasoning_effort: "none"?Remova e baixe o esforço.
Para após a primeira chamada de ferramentaO campo de raciocínio está configurado? O histórico o inclui?Defina reasoningField como "reasoning_content" e repita o mesmo prompt.
Conteúdo vazio, finish_reason: "length"O raciocínio consome o teto de saída?Baixe o esforço primeiro e depois suba max_tokens.
Erro de contexto em um prompt de 300KO OpenCode ainda usa o padrão de 200K?Defina limit.context como 1000000 e encurte o prompt.
Entrada de imagem ou PDF falhaA página da OmniaKey lista visão?Envie só texto e converta o arquivo antes.

A continuação pode falhar na configuração mesmo quando parece problema do modelo. A referência da API da MiniMax pede para anexar a resposta completa do assistant aos turnos seguintes, incluindo tool_calls e o raciocínio devolvido em reasoning_content. O ajuste reasoningField do OpenCode lê esse campo no stream e o restaura ao enviar o histórico.

Nesta execução, cada requisição de acompanhamento levou o campo reasoning_content nas mensagens de chamada de ferramenta do assistant, as seis requisições terminaram e cada resultado de ferramenta alimentou o turno seguinte.

Custo, permissões e próximos passos

A OmniaKey cobra por token conforme as tarifas atuais na página do modelo. As seis chamadas usaram 20.739 tokens de entrada, incluindo as leituras de prefixo em cache, e 803 tokens de saída. Para estimar uma tarefa parecida, separe o uso em entrada sem cache, entrada lida do cache e saída, e multiplique cada parte pela tarifa atual correspondente. O total de entrada não se multiplica por uma tarifa única.

No seu repositório, comece pela regra que nega tudo e acrescente só as pastas e comandos que a tarefa precisa. Mantenha a permissão de edição nos arquivos que a tarefa altera e a de shell no comando de teste. Essa é a parte que se reescreve em cada projeto; os blocos de provider e de modelo podem ficar como estão.

O mesmo padrão de chave e Base URL vale para outros clientes. O guia de configuração do Claude Code da OmniaKey cobre esse cliente, e a documentação de agentes de código lista os passos por ferramenta.

Perguntas frequentes

Esta configuração funciona no OpenCode V1?

A versão testada é o OpenCode v2.2.3 e a configuração usa o objeto providers no plural do V2. As páginas do V1 têm outro formato, então confira a versão antes de copiar para uma instalação antiga.

opencode --standalone models precisa de filtro de provider?

Não. O comando testado é exatamente opencode --standalone models, sem argumento de provider. Ele lista omniakey/minimax-m3.1-flash.

Posso enviar imagens ou PDFs para este modelo pela OmniaKey?

A página do modelo na OmniaKey não lista visão e a configuração testada declara apenas entrada de texto. Envie texto e converta imagens ou PDFs antes. O modelo original da MiniMax aceita imagens, mas isso não acrescenta entrada de imagem à página do modelo na OmniaKey.

Posso subir max_tokens acima de 4096?

Sim, o teto do cliente pode subir. 4096 foi o valor testado e as páginas atuais não indicam um máximo fixo para este modelo. O raciocínio conta dentro do teto, então fique atento a corte por tamanho ou conteúdo vazio; baixe o esforço primeiro e depois suba o teto.

Fontes verificadas

Modelos deste artigo

MiniMax M3.1 FlashOpenCodeagentes de códigochamadas de ferramentaOmniaKey

Artigos relacionados

Artigos recentes

Guias populares