GPT-Image 2.6 Flare e Sunburst sono disponibiliDa $0.025 per immagine

MiniMax M3.1 Flash in OpenCode: configurazione testata e chiamate tool

Una configurazione di OpenCode v2.2.3 provata con MiniMax M3.1 Flash: il JSON completo del provider, una traccia reale di chiamate tool e gli errori che interrompono la continuazione.

Kiki, OmniaKey COO9 min di lettura
In questa pagina

MiniMax M3.1 Flash funziona in OpenCode v2.2.3 tramite un provider personalizzato compatibile OpenAI. Il nome esatto del modello in OpenCode è omniakey/minimax-m3.1-flash, la Base URL è https://api.omniakey.com/v1, e la configurazione qui sotto ha completato un compito reale su un repository il 12 novembre 2026: cinque letture, una scrittura, un'esecuzione di node --test e 12 test su 12 superati.

OpenCode parla il formato OpenAI Chat Completions con un provider personalizzato, e OmniaKey serve quel formato su /v1. Tutto sta in un file di progetto, ma tre dettagli decidono se funziona: l'ID del modello deve seguire la grafia di OmniaKey, la chiave deve arrivare al processo del server OpenCode e la configurazione del provider deve conservare il campo di ragionamento tra una chiamata tool e l'altra.

Cosa serve prima di iniziare

Usa OpenCode V2. La versione testata è la v2.2.3. La V2 mette i provider personalizzati in un oggetto providers di primo livello; gli esempi della V1 usano un'altra forma. Controlla la documentazione dei provider V2 e opencode --version prima di copiare la configurazione.

  • OpenCode: v2.2.3, testato il 12 novembre 2026.
  • ID del modello in OmniaKey: minimax-m3.1-flash.
  • Riferimento in OpenCode: omniakey/minimax-m3.1-flash.

Crea una chiave OmniaKey e mettila in OMNIAKEY_API_KEY. Il JSON qui sotto nomina la variabile e non contiene mai il segreto. Scegli un repository piccolo con un comando di test già pronto; il test ha usato un esempio Node con src/normalize.js, un file di test e uno script di test.

L'API proprietaria di MiniMax usa l'ID con maiuscole miste MiniMax-M3.1-Flash. OmniaKey usa la forma minuscola minimax-m3.1-flash. In opencode.jsonc scrivi l'ID minuscolo di OmniaKey in entrambi i punti, la chiave della mappa models e modelID; una capitalizzazione diversa non corrisponde all'ID di OmniaKey.

Se stai ancora scegliendo il modello, la recensione di MiniMax M3.1 Flash raccoglie benchmark, informazioni sul rilascio e il ragionamento sempre attivo.

La configurazione OpenCode V2 che abbiamo testato

Metti questo file nella radice del progetto come opencode.jsonc. È la forma pubblica della configurazione usata nell'esecuzione.

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"}
  ]
}

L'array env dice a OpenCode quale variabile di credenziale leggere: OMNIAKEY_API_KEY arriva dall'ambiente del processo server. modelID è l'ID inviato a OmniaKey, mentre la chiave nella mappa models è l'ID che OpenCode usa nei riferimenti provider/model. Tenere entrambi su minimax-m3.1-flash evita una ricerca ambigua.

I blocchi limit e capabilities sostituiscono le impostazioni predefinite di OpenCode per un modello sconosciuto. Senza di essi OpenCode presuppone un contesto di 200.000 token e input di immagini. La pagina del modello su OmniaKey indica un contesto di 1M token e nessun input visivo, quindi la configurazione fissa il limite a 1.000.000 di token e l'input solo a testo. Il valore 1M è la finestra pubblicata, non una dimensione che questo compito piccolo abbia esaurito.

Il blocco body porta i due valori provati: effort di ragionamento medium e tetto max_tokens a 4096. L'elenco effort in capabilities sono i cinque livelli descritti nella guida MiniMax; nel test è stato usato medium.

Il blocco permissions è volutamente stretto per il repository di prova. Nega tutto, poi consente lettura, glob e grep, una modifica a src/normalize.js, il comando node --test e git diff. Nega anche le directory esterne. Sostituisci il percorso e i comandi con le regole del tuo progetto. Un permesso ampio di modifica o di shell dà all'agente molto più accesso di quanto richieda un compito delimitato.

Avvio con la chiave nella shell del server

Di solito OpenCode avvia o trova un server condiviso in background. Quel server conserva sessioni, configurazione ed esecuzione degli strumenti, e legge le variabili env del provider dal proprio ambiente. Una chiave esportata in un altro terminale non arriva fin lì. La documentazione della CLI di OpenCode descrive il server condiviso e l'opzione --standalone.

Per una prima esecuzione prevedibile usa un server privato da una shell che ha la chiave:

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

Il comando models testato non accetta un argomento provider. Elenca omniakey/minimax-m3.1-flash. Poi esegui un compito. Il test ha usato questo argomento di modello e il blocco prompt qui sotto; sostituisci il segnaposto con il testo esatto:

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

L'opzione --standalone avvia un server privato da quella shell, così eredita la chiave e legge la configurazione del progetto. Un server condiviso avviato prima vede solo il proprio ambiente. La riga della chiave qui sopra è un segnaposto; il file di configurazione resta senza segreti.

Se hai già un server condiviso in un ambiente con OMNIAKEY_API_KEY, puoi usarlo. Quando quell'ambiente non è chiaro, il server privato è la via riproducibile.

Verifica del ciclo lettura, scrittura e test

Un piccolo esempio Node basta per vedere se le chiamate tool funzionano. L'esempio aveva src/normalize.js con uno stub che si limitava a ordinare, un file di test con 12 casi e uno script node --test. Prima della correzione passavano 3 test e 9 fallivano.

Questo è il prompt usato nell'esecuzione, senza modifiche:

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.

L'esecuzione ha prodotto sette operazioni tool in sei richieste HTTP, tutte con risposta 200:

StrumentoVolteCosa ha coperto
read5Elenco del repository, sorgente, cartella di test, package.json, file di test
write1src/normalize.js
shell1node --test

Il primo turno ha inviato due letture in parallelo, una per l'elenco del repository e una per il sorgente. I due turni successivi hanno letto la cartella di test, il file di pacchetto e il file di test. La scrittura ha sostituito il sorgente. La chiamata shell ha eseguito i test. L'esecuzione è durata 70,172 secondi.

La chiamata di test dentro il ciclo ha riportato:

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

La risposta finale ha indicato il file modificato e il risultato 12/12. I sei blocchi usage sommano 20.739 token di input, comprese le letture di prefisso dalla cache, e 803 token di output. Il completion più lungo ha 363 token, quindi il tetto di 4096 non è mai stato raggiunto.

Un processo locale di inoltro ha inviato il corpo della richiesta e la risposta in streaming a OmniaKey senza modifiche. È un compito piccolo: conferma che il ciclo di lettura, scrittura e test funziona in questo repository, non che il modello sia veloce o pulito su qualsiasi codice.

Impostare effort, contesto e limite di output

Il ragionamento è obbligatorio su M3.1 Flash. La guida MiniMax alla generazione di testo dice che il modello pensa sempre, e il riferimento all'API compatibile OpenAI restituisce HTTP 400 se un client invia thinking: {"type": "disabled"} o reasoning_effort: "none". Lascia attivo il ragionamento e abbassa l'effort quando vuoi un turno più breve.

ImpostazioneValore testatoCosa controlla
reasoning_effortmediumQuanto il modello pensa prima di rispondere
max_tokens4096Tetto di output del client per chiamata
limit.context1000000Finestra di contesto pubblicata

reasoning_effort accetta low, medium, high, xhigh e max; se omesso, la guida MiniMax indica max come predefinito. Medium è bastato per questo compito delimitato. Abbassare l'effort accorcia il ragionamento, ma non lo spegne.

I controlli di campionamento non fanno nulla su questo modello. Il riferimento API MiniMax dice che M3.1 Flash usa sempre 1 e 0,95, quindi togliere temperature e top_p è più pulito che impostare valori ignorati.

Il contesto di 1M token viene dalla pagina del modello OmniaKey e dalla guida MiniMax. Il limite di output di 4096 è un tetto di sicurezza del client scelto per questa esecuzione, non un massimo pubblicato dal fornitore. I token di ragionamento contano dentro quel tetto, quindi un turno di pensiero lungo può finire con finish_reason: "length" e poco o nessun testo finale. Abbassa prima l'effort, alza il tetto solo se il compito ha bisogno di più spazio.

Correggere errori di chiave, ID e continuazione

L'esecuzione riuscita non ha prodotto errori. Questo elenco segue la documentazione collegata di OpenCode e MiniMax. La Base URL esatta è https://api.omniakey.com/v1.

SintomoCosa verificareCorrezione
401 o 403OMNIAKEY_API_KEY è nell'ambiente del server?Esportala nella shell che avvia OpenCode o usa --standalone; tieni la chiave fuori dal JSON.
Model unavailable o modello non trovatoLa chiave della mappa e modelID dicono entrambi minimax-m3.1-flash?Correggi grafia e maiuscole; non usare l'ID MiniMax-M3.1-Flash del fornitore; verifica che il provider sia attivo.
404 dal gatewaysettings.baseURL è esattamente l'indirizzo OmniaKey?Usa la Base URL esatta qui sopra e togli qualsiasi percorso in più.
400 su adaptive thinkingUn client ha inviato ragionamento disattivato o reasoning_effort: "none"?Rimuovilo e abbassa l'effort.
Si ferma dopo la prima chiamata toolIl campo di ragionamento è configurato? La cronologia lo include?Imposta reasoningField su "reasoning_content" e ripeti lo stesso prompt.
Contenuto vuoto, finish_reason: "length"Il ragionamento consuma il tetto di output?Abbassa prima l'effort, poi alza max_tokens.
Errore di contesto su un prompt da 300KOpenCode usa ancora il valore predefinito di 200K?Imposta limit.context a 1000000 e accorcia il prompt.
Input immagine o PDF non riuscitoLa pagina OmniaKey elenca la visione?Invia solo testo e converti prima il file.

La continuazione può fallire per la configurazione anche quando sembra un problema del modello. Il riferimento API MiniMax chiede di aggiungere la risposta completa dell'assistant ai turni successivi, inclusi tool_calls e il ragionamento restituito in reasoning_content. L'impostazione reasoningField di OpenCode legge quel campo dallo stream e lo ripristina quando invia la cronologia.

In questa esecuzione ogni richiesta successiva ha portato il campo reasoning_content nei messaggi di chiamata tool dell'assistant, le sei richieste si sono chiuse e ogni risultato tool è entrato nel turno seguente.

Costo, permessi e passi successivi

OmniaKey fattura per token secondo le tariffe attuali nella pagina del modello. Le sei chiamate hanno usato 20.739 token di input, comprese le letture di prefisso dalla cache, e 803 token di output. Per stimare un compito simile, separa l'uso in input senza cache, input letto dalla cache e output, poi moltiplica ogni parte per la tariffa corrente. Il totale di input non si moltiplica per una tariffa unica.

Nel tuo repository parti dalla regola che nega tutto e aggiungi solo le cartelle e i comandi che il compito richiede. Tieni il permesso di modifica sui file che il compito cambia e quello di shell sul comando di test. Questa è la parte che si riscrive in ogni progetto; i blocchi provider e modello possono restare come sono.

Lo stesso schema di chiave e Base URL vale per altri client. La guida alla configurazione di Claude Code di OmniaKey copre quel client, e la documentazione sugli agenti di coding elenca i passaggi per strumento.

Domande frequenti

Questa configurazione funziona su OpenCode V1?

La versione testata è OpenCode v2.2.3 e la configurazione usa l'oggetto providers al plurale della V2. Le pagine della V1 hanno un'altra forma, quindi controlla la versione prima di copiarla su un'installazione vecchia.

opencode --standalone models richiede un filtro provider?

No. Il comando testato è esattamente opencode --standalone models, senza argomento provider. Elenca omniakey/minimax-m3.1-flash.

Posso inviare immagini o PDF a questo modello tramite OmniaKey?

La pagina del modello OmniaKey non elenca la visione e la configurazione testata dichiara solo input di testo. Invia testo e converti prima immagini o PDF. Il modello originale MiniMax accetta immagini, ma questo non aggiunge input di immagini alla pagina del modello OmniaKey.

Posso alzare max_tokens sopra 4096?

Sì, il tetto del client può salire. 4096 è il valore testato e le pagine attuali non indicano un massimo fisso per questo modello. Il ragionamento conta dentro il tetto, quindi attenzione a tagli per lunghezza o contenuto vuoto; abbassa prima l'effort, poi alza il tetto.

Fonti verificate

Modelli citati in questo articolo

MiniMax M3.1 FlashOpenCodeagenti di codingchiamate toolOmniaKey

Articoli correlati

Articoli recenti

Guide popolari