Source: https://ailoot.ai/models/sk/minimax-m3/
Canonical: https://ailoot.ai/models/sk/minimax-m3/
Language: sk

# MiniMax: MiniMax M3

[Markdown](https://ailoot.ai/models/sk/minimax-m3/index.md) · [JSON](https://ailoot.ai/models/sk/minimax-m3/facts.json)

## [MiniMax: MiniMax M3](https://ailoot.ai/models/sk/minimax-m3/)

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

- [**Ailoot · Anthropic Messages** `POST /v1/messages` `MiniMax-M3`](https://ailoot.ai/models/sk/minimax-m3/#method-0)
- [**Ailoot · OpenAI Responses** `POST /v1/responses` `MiniMax-M3`](https://ailoot.ai/models/sk/minimax-m3/#method-1)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `MiniMax-M3`](https://ailoot.ai/models/sk/minimax-m3/#method-2)
- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `MiniMax-M3`](https://ailoot.ai/models/sk/minimax-m3/#method-3)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `MiniMax-M3`](https://ailoot.ai/models/sk/minimax-m3/#method-4)
- [**Ailoot · Anthropic Messages** `POST /v1/messages` `minimax`](https://ailoot.ai/models/sk/minimax-m3/#method-5)
- [**Ailoot · OpenAI Responses** `POST /v1/responses` `minimax`](https://ailoot.ai/models/sk/minimax-m3/#method-6)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `minimax`](https://ailoot.ai/models/sk/minimax-m3/#method-7)
- [**Ailoot · Anthropic Messages** `POST /v1/messages` `minimax-latest`](https://ailoot.ai/models/sk/minimax-m3/#method-8)
- [**Ailoot · OpenAI Responses** `POST /v1/responses` `minimax-latest`](https://ailoot.ai/models/sk/minimax-m3/#method-9)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `minimax-latest`](https://ailoot.ai/models/sk/minimax-m3/#method-10)
- [**Ailoot · Anthropic Messages** `POST /v1/messages` `minimax-text`](https://ailoot.ai/models/sk/minimax-m3/#method-11)
- [**Ailoot · OpenAI Responses** `POST /v1/responses` `minimax-text`](https://ailoot.ai/models/sk/minimax-m3/#method-12)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `minimax-text`](https://ailoot.ai/models/sk/minimax-m3/#method-13)
- [**Ailoot · Anthropic Messages** `POST /v1/messages` `minimax-text-latest`](https://ailoot.ai/models/sk/minimax-m3/#method-14)
- [**Ailoot · OpenAI Responses** `POST /v1/responses` `minimax-text-latest`](https://ailoot.ai/models/sk/minimax-m3/#method-15)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `minimax-text-latest`](https://ailoot.ai/models/sk/minimax-m3/#method-16)
- [**Ailoot · Anthropic Messages** `POST /v1/messages` `minimax/minimax-m3`](https://ailoot.ai/models/sk/minimax-m3/#method-17)
- [**Ailoot · OpenAI Responses** `POST /v1/responses` `minimax/minimax-m3`](https://ailoot.ai/models/sk/minimax-m3/#method-18)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `minimax/minimax-m3`](https://ailoot.ai/models/sk/minimax-m3/#method-19)
- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `minimax/minimax-m3`](https://ailoot.ai/models/sk/minimax-m3/#method-20)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `minimax/minimax-m3`](https://ailoot.ai/models/sk/minimax-m3/#method-21)

O modeli

Tento opis pokrýva možnosti modelu. Dostupné vstupy, výstupy a voľby v Ailoot sú uvedené nižšie pre vybranú metódu.

MiniMax M3 je multimodálny základný model MiniMax na sústavné úlohy pozostávajúce z viacerých krokov. Jeho zverejnený profil opisuje textový, obrazový a video vstup s textovým výstupom; uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede. Model je postavený na MiniMax Sparse Attention, ktorý vyberá bloky kľúčov a hodnôt namiesto uplatnenia plnej pozornosti na celý dlhý kontext. Jeho zverejnené určenie zahŕňa programovanie, používanie nástrojov a spoluprácu naprieč viacerými kolami.

#### Vneste podklady úlohy do konverzácie

Písomný cieľ spojte s písomnými pozorovaniami, ktoré preukazujú problém. Pri práci s rozhraním opíšte a označte skúmanú obrazovku a stav. Pri otázke o videu dodajte prepis alebo písomné poznámky, ktoré určujú relevantnú scénu alebo interval a viditeľnú sekvenciu na analýzu. Žiadajte konkrétny textový výsledok, napríklad opis, porovnanie alebo návrh implementácie, a zachovajte označenia zdrojov potrebné na jeho kontrolu.

Multimodálny tréning modelu používa striedajúce sa materiály a tréning spolupráce je zameraný na dlhšie interakcie. Užitočné pracovné zadanie ponecháva písomné pokyny blízko zdroja, ktorý opisujú. Oddeľte dôkazy od predpokladov, aby ďalšie kolo mohlo pokračovať zo skutočne pozorovaného stavu.

#### Programovanie a práca s nástrojmi

Pre programovaciu úlohu dodajte relevantný zdrojový kód, požadované správanie a podmienky preukazujúce dokončenie. Ak od výstupu príkazu alebo testu závisí ďalší krok, uchovajte jeho skutočný výstup v konverzácii. Aplikácia s nástrojmi môže vykonať navrhnutú operáciu a vrátiť jej výsledok modelu.

Zverejnený profil modelu dokumentuje volanie funkcií a štruktúrované výstupy podľa schémy JSON; uvedený kontrakt Ultra Chat považuje tools a response\_format za závislé od modelu. Operácie alebo polia výsledku určte podľa úlohy a potom overte vrátené údaje podľa ich zdrojov. Pred spojením záverov z viacerých krokov zachovajte priradenie každého pozorovania ku konkrétnej akcii nástroja.

#### Dlhý kontext a jasný konečný stav

Zverejnený profil modelu opisuje kontext s rozsahom približne jedného milióna tokenov. Každú požiadavku plánujte podľa skutočnej kapacity rozhrania, ktoré ju obsluhuje, a vyhraďte priestor na odpoveď. Dokončené rozhodnutia, najnovšie pozorovania a otvorené otázky uchovávajte v pomenovaných oddieloch namiesto opakovaného pripájania všetkých podkladových materiálov.

Užitočný výsledok M3 ponecháva výstup spolu s dôkazmi: konkrétnu zmenu s overením, analýzu naviazanú na vizuálny zdroj alebo ďalšiu akciu, ktorej výsledok vyrieši zostávajúcu otázku. Vďaka tomu môže dlhší pracovný postup pokračovať z kontrolovateľného stavu.

Praktická úloha

### Praktická úloha

Technický príklad v angličtine

```
Analyze a written video sequence

Analyze these written scene notes, using no video access. [00:03] Operator places a tray on a scale. [00:07] Display reads 2.4 kg. [00:10] A second tray is placed beside it, not on the scale. Summarize the sequence and state which tray has a recorded weight and what remains unknown.
```

#### Očakávaný výsledok

```
A source-labelled sequence summary and a clear known/unknown distinction for tray weights.
```

#### Overenie výsledku

```
Ensure the 2.4 kg reading is not assigned to the unweighed second tray.
```

**Ailoot · Anthropic Messages** `POST /v1/messages` `MiniMax-M3`

[`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages)

MiniMax /`MiniMax-M3`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · Anthropic Messages** `POST /v1/messages`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity MiniMax-M3 | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity user, assistant | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_block[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`system` | Typ`string\|content_block[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaPovinné | Hodnoty a limity Minimum: 1 Limit sa vzťahuje na: presná horná hranica zvoleného modelu/karty | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop_sequences` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: poskytnutý nástroj | Predvolené— |
| Pole`tools[].description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].input_schema` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.budget_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`output_config.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`metadata` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`cache_control` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content alebo blok type=text`

**Text + obrázok**

`{type:image,source:{type:base64,media_type,data}} alebo zdroj s type=url`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages, max\_tokens |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · Anthropic Messages

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · Anthropic Messages

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "MiniMax-M3", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "MiniMax-M3", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="MiniMax-M3",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
```

```js
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "MiniMax-M3",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
```

```python
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='MiniMax-M3',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · Anthropic Messages

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`model` | Typstring |
| Pole`content[]` | Typtext\|thinking\|tool\_use\|other content block |
| Pole`stop_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages)

**Ailoot · OpenAI Responses** `POST /v1/responses` `MiniMax-M3`

[`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses)

MiniMax /`MiniMax-M3`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Responses** `POST /v1/responses`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

1 000 000 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity MiniMax-M3 | Predvolené— |
| Pole`input` | Typ`string\|input_item[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity message, reasoning, function\_call, function\_call\_output | Predvolené— |
| Pole`input[].content` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output; zachovajte skutočne vrátený call\_id | Predvolené— |
| Pole`input[].output` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output | Predvolené— |
| Pole`max_output_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.summary` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.verbosity` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`include` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`store` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`previous_response_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Požiadavka na ID: Len skutočné ID odpovede z podporovaného pokračovania Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_key` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`vstupný text alebo časť input_text`

**Text + obrázok**

`{type:input_image,image_url}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, input |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Responses

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Responses

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "MiniMax-M3", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "MiniMax-M3", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="MiniMax-M3", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "MiniMax-M3", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="MiniMax-M3", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Responses

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každú výstupnú položku a časť obsahu, skutočný call\_id funkcie, šifrované uvažovanie a údaje o spotrebe. Pri streamovaní zachovajte úplné identifikačné údaje udalostí a položiek.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`status` | Typstring |
| Pole`output[]` | Typmessage\|reasoning\|function\_call\|other item |
| Pole`output[].content[]` | Typcontent part |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3)

**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `MiniMax-M3`

[`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat)

MiniMax /`MiniMax-M3`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Chat** `POST /v1/chat/completions`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity MiniMax-M3 | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Príklady: system, user, assistant, tool, function Podmienky: Tieto roly sú výslovne zastúpené typmi kompatibility v zdrojovom kóde; presný súbor rolí zostáva závislý od modelu. Závisí od modelu | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_part[]\|null` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_calls` | Typ`tool_call[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: role=tool; použite skutočne vrátené ID | Predvolené— |
| Pole`messages[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].reasoning_content` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: Posielajte späť skutočne vrátené uvažovanie, ak ho tento model používa | Predvolené— |
| Pole`messages[].reasoning_details` | Typ`object\|array` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`max_completion_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`stream_options.include_usage` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop` | Typ`string\|string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`function_tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].function.name` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Platí, keď: poskytnutý nástroj typu funkcia | Predvolené— |
| Pole`tools[].function.description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].function.parameters` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`response_format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning_effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Pole kompatibility | Predvolené— |
| Pole`functions` | Typ`function[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`function_call` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content`

**Text + obrázok**

`{type:image_url,image_url:{url,detail}}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Chat

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Chat

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "MiniMax-M3", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "MiniMax-M3", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="MiniMax-M3",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "MiniMax-M3",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='MiniMax-M3',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Chat

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každý variant odpovede a jeho obsah, volania nástrojov a uvažovanie. V SSE zostavujte čiastkové zmeny podľa indexu variantu/nástroja a zachovajte konečný dôvod ukončenia aj údaje o spotrebe.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`choices[].index` | Typinteger |
| Pole`choices[].message.content` | Typstring\|null |
| Pole`choices[].message.tool_calls` | Typtool\_call\[\] |
| Pole`choices[].message.reasoning_content` | Typstring |
| Pole`choices[].message.reasoning_details` | Typobject\|array |
| Pole`choices[].finish_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat)

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `MiniMax-M3`

[`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat)

MiniMax /`MiniMax-M3`

ID modelu

- `MiniMax-M3`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions`

Vstup

`text`

Výstup

`text`

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity MiniMax-M3 | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`messages[].content` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: Textová konverzácia | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`required` | Špecifikáciamodel, messages |
| Parameter`material_types` | Špecifikáciatext |
| Parameter`messages` | Špecifikáciapole správ so štruktúrou role/content |
| Parameter`file_material` | Špecifikáciaskutočný dokument UTF-8 vložený ako doslovný text; ID súboru sa neodvodzuje |
| Parameter`optional_controls` | Špecifikáciastream |
| Parameter`control_scope` | ŠpecifikáciaTextová konverzácia; stream je logická hodnota a predvolene má hodnotu false. |
| Parameter`output_modalities` | Špecifikáciatext |
| Parameter`hosted_operations` | Špecifikáciafalse |
| Parameter`multimodal_input_binding` | Špecifikácianull |

Aliasy metódy: `/chat/completions`

Životný cyklus: `synchronous_or_streamed`

Pošlite presné ID modelu spolu s messages.

Dĺžka kontextu nie je horná hranica výstupu.

Textový súbor môže poskytnúť doslovný text; obrazové a zvukové vstupy a vstupy so súborovými objektmi potrebujú presné naviazanie.

### Cenník

Tarifné údaje nepridávajú možnosti požiadavky. Podporované parametre sú uvedené pri vybranej metóde.

Rýchly režim

Štandardná sadzba Keď je zvolený rýchly režim

Režim Flex

Štandardná sadzba Keď je zvolený režim flex

Maximálna úroveň uvažovania

Štandardná sadzba Keď sa pri maximálnej úrovni uvažovania používa predvolená úprava (default)

#### Sadzby Ailoot

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaZákladné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaPásmo dĺžky požiadavky 1 | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

### Príklady požiadaviek

#### Ailoot Ultra · OpenAI Chat

curlPython SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"MiniMax-M3","messages":[{"role":"user","content":"hello"}],"stream":false}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="MiniMax-M3", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
```

### Prijať a uložiť výsledky

#### Ailoot Ultra · OpenAI Chat

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každý variant odpovede a jeho obsah, volania nástrojov a uvažovanie. V SSE zostavujte čiastkové zmeny podľa indexu variantu/nástroja a zachovajte konečný dôvod ukončenia aj údaje o spotrebe.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`choices[].index` | Typinteger |
| Pole`choices[].message.content` | Typstring\|null |
| Pole`choices[].message.tool_calls` | Typtool\_call\[\] |
| Pole`choices[].message.reasoning_content` | Typstring |
| Pole`choices[].message.reasoning_details` | Typobject\|array |
| Pole`choices[].finish_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `MiniMax-M3`

[`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages)

MiniMax /`MiniMax-M3`

ID modelu

- `MiniMax-M3`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text

Výsledky

json · sse

### Dostupné v Ailoot · vstupy a metódy

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages`

Vstup

`text`

Výstup

`json`, `sse`

Výstupný formát

JSON alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity MiniMax-M3 | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity user, assistant | Predvolené— |
| Pole`messages[].content` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |

Kombinácie vstupných podkladov

**Text** · Text UTF-8

`reťazec messages[].content`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`required` | Špecifikáciamodel, messages, max\_tokens |
| Parameter`optional_controls` | Špecifikáciastream |
| Parameter`material_types` | Špecifikáciatext |
| Parameter`text_file_material` | ŠpecifikáciaPrečítajte skutočný dokument UTF-8 a vložte jeho text do uvedeného vstupného reťazca alebo reťazca obsahu správy. |

Životný cyklus: `synchronous_or_streamed`

### Cenník

Tarifné údaje nepridávajú možnosti požiadavky. Podporované parametre sú uvedené pri vybranej metóde.

Rýchly režim

Štandardná sadzba Keď je zvolený rýchly režim

Režim Flex

Štandardná sadzba Keď je zvolený režim flex

Maximálna úroveň uvažovania

Štandardná sadzba Keď sa pri maximálnej úrovni uvažovania používa predvolená úprava (default)

#### Sadzby Ailoot

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaZákladné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaPásmo dĺžky požiadavky 1 | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

### Príklady požiadaviek

#### Ailoot Ultra · Anthropic Messages

Úplné minimálne telo požiadavky vo formáte JSONcurl · použite svoj dokument UTF-8Python · uložte úplný výsledok

```json
{
  "model": "MiniMax-M3",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'MiniMax-M3', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
```

```python
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'MiniMax-M3', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
```

### Prijať a uložiť výsledky

#### Ailoot Ultra · Anthropic Messages

JSON alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`model` | Typstring |
| Pole`content[]` | Typtext\|thinking\|tool\_use\|other content block |
| Pole`stop_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages)

**Ailoot · Anthropic Messages** `POST /v1/messages` `minimax`

[`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages)

MiniMax /`minimax`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · Anthropic Messages** `POST /v1/messages`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity user, assistant | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_block[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`system` | Typ`string\|content_block[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaPovinné | Hodnoty a limity Minimum: 1 Limit sa vzťahuje na: presná horná hranica zvoleného modelu/karty | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop_sequences` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: poskytnutý nástroj | Predvolené— |
| Pole`tools[].description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].input_schema` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.budget_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`output_config.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`metadata` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`cache_control` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content alebo blok type=text`

**Text + obrázok**

`{type:image,source:{type:base64,media_type,data}} alebo zdroj s type=url`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages, max\_tokens |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · Anthropic Messages

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · Anthropic Messages

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="minimax",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
```

```js
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "minimax",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
```

```python
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='minimax',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · Anthropic Messages

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`model` | Typstring |
| Pole`content[]` | Typtext\|thinking\|tool\_use\|other content block |
| Pole`stop_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages)

**Ailoot · OpenAI Responses** `POST /v1/responses` `minimax`

[`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses)

MiniMax /`minimax`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Responses** `POST /v1/responses`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

1 000 000 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax | Predvolené— |
| Pole`input` | Typ`string\|input_item[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity message, reasoning, function\_call, function\_call\_output | Predvolené— |
| Pole`input[].content` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output; zachovajte skutočne vrátený call\_id | Predvolené— |
| Pole`input[].output` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output | Predvolené— |
| Pole`max_output_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.summary` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.verbosity` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`include` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`store` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`previous_response_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Požiadavka na ID: Len skutočné ID odpovede z podporovaného pokračovania Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_key` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`vstupný text alebo časť input_text`

**Text + obrázok**

`{type:input_image,image_url}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, input |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Responses

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Responses

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="minimax", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "minimax", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="minimax", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Responses

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každú výstupnú položku a časť obsahu, skutočný call\_id funkcie, šifrované uvažovanie a údaje o spotrebe. Pri streamovaní zachovajte úplné identifikačné údaje udalostí a položiek.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`status` | Typstring |
| Pole`output[]` | Typmessage\|reasoning\|function\_call\|other item |
| Pole`output[].content[]` | Typcontent part |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3)

**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `minimax`

[`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat)

MiniMax /`minimax`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Chat** `POST /v1/chat/completions`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Príklady: system, user, assistant, tool, function Podmienky: Tieto roly sú výslovne zastúpené typmi kompatibility v zdrojovom kóde; presný súbor rolí zostáva závislý od modelu. Závisí od modelu | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_part[]\|null` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_calls` | Typ`tool_call[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: role=tool; použite skutočne vrátené ID | Predvolené— |
| Pole`messages[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].reasoning_content` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: Posielajte späť skutočne vrátené uvažovanie, ak ho tento model používa | Predvolené— |
| Pole`messages[].reasoning_details` | Typ`object\|array` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`max_completion_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`stream_options.include_usage` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop` | Typ`string\|string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`function_tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].function.name` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Platí, keď: poskytnutý nástroj typu funkcia | Predvolené— |
| Pole`tools[].function.description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].function.parameters` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`response_format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning_effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Pole kompatibility | Predvolené— |
| Pole`functions` | Typ`function[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`function_call` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content`

**Text + obrázok**

`{type:image_url,image_url:{url,detail}}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Chat

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Chat

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="minimax",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "minimax",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='minimax',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Chat

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každý variant odpovede a jeho obsah, volania nástrojov a uvažovanie. V SSE zostavujte čiastkové zmeny podľa indexu variantu/nástroja a zachovajte konečný dôvod ukončenia aj údaje o spotrebe.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`choices[].index` | Typinteger |
| Pole`choices[].message.content` | Typstring\|null |
| Pole`choices[].message.tool_calls` | Typtool\_call\[\] |
| Pole`choices[].message.reasoning_content` | Typstring |
| Pole`choices[].message.reasoning_details` | Typobject\|array |
| Pole`choices[].finish_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat)

**Ailoot · Anthropic Messages** `POST /v1/messages` `minimax-latest`

[`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages)

MiniMax /`minimax-latest`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · Anthropic Messages** `POST /v1/messages`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax-latest | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity user, assistant | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_block[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`system` | Typ`string\|content_block[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaPovinné | Hodnoty a limity Minimum: 1 Limit sa vzťahuje na: presná horná hranica zvoleného modelu/karty | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop_sequences` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: poskytnutý nástroj | Predvolené— |
| Pole`tools[].description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].input_schema` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.budget_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`output_config.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`metadata` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`cache_control` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content alebo blok type=text`

**Text + obrázok**

`{type:image,source:{type:base64,media_type,data}} alebo zdroj s type=url`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages, max\_tokens |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · Anthropic Messages

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · Anthropic Messages

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-latest", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-latest", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="minimax-latest",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
```

```js
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "minimax-latest",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
```

```python
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='minimax-latest',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · Anthropic Messages

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`model` | Typstring |
| Pole`content[]` | Typtext\|thinking\|tool\_use\|other content block |
| Pole`stop_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages)

**Ailoot · OpenAI Responses** `POST /v1/responses` `minimax-latest`

[`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses)

MiniMax /`minimax-latest`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Responses** `POST /v1/responses`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

1 000 000 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax-latest | Predvolené— |
| Pole`input` | Typ`string\|input_item[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity message, reasoning, function\_call, function\_call\_output | Predvolené— |
| Pole`input[].content` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output; zachovajte skutočne vrátený call\_id | Predvolené— |
| Pole`input[].output` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output | Predvolené— |
| Pole`max_output_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.summary` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.verbosity` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`include` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`store` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`previous_response_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Požiadavka na ID: Len skutočné ID odpovede z podporovaného pokračovania Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_key` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`vstupný text alebo časť input_text`

**Text + obrázok**

`{type:input_image,image_url}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, input |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Responses

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Responses

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-latest", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-latest", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="minimax-latest", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "minimax-latest", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="minimax-latest", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Responses

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každú výstupnú položku a časť obsahu, skutočný call\_id funkcie, šifrované uvažovanie a údaje o spotrebe. Pri streamovaní zachovajte úplné identifikačné údaje udalostí a položiek.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`status` | Typstring |
| Pole`output[]` | Typmessage\|reasoning\|function\_call\|other item |
| Pole`output[].content[]` | Typcontent part |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3)

**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `minimax-latest`

[`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat)

MiniMax /`minimax-latest`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Chat** `POST /v1/chat/completions`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax-latest | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Príklady: system, user, assistant, tool, function Podmienky: Tieto roly sú výslovne zastúpené typmi kompatibility v zdrojovom kóde; presný súbor rolí zostáva závislý od modelu. Závisí od modelu | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_part[]\|null` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_calls` | Typ`tool_call[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: role=tool; použite skutočne vrátené ID | Predvolené— |
| Pole`messages[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].reasoning_content` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: Posielajte späť skutočne vrátené uvažovanie, ak ho tento model používa | Predvolené— |
| Pole`messages[].reasoning_details` | Typ`object\|array` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`max_completion_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`stream_options.include_usage` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop` | Typ`string\|string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`function_tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].function.name` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Platí, keď: poskytnutý nástroj typu funkcia | Predvolené— |
| Pole`tools[].function.description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].function.parameters` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`response_format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning_effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Pole kompatibility | Predvolené— |
| Pole`functions` | Typ`function[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`function_call` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content`

**Text + obrázok**

`{type:image_url,image_url:{url,detail}}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Chat

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Chat

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-latest", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-latest", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="minimax-latest",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "minimax-latest",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='minimax-latest',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Chat

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každý variant odpovede a jeho obsah, volania nástrojov a uvažovanie. V SSE zostavujte čiastkové zmeny podľa indexu variantu/nástroja a zachovajte konečný dôvod ukončenia aj údaje o spotrebe.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`choices[].index` | Typinteger |
| Pole`choices[].message.content` | Typstring\|null |
| Pole`choices[].message.tool_calls` | Typtool\_call\[\] |
| Pole`choices[].message.reasoning_content` | Typstring |
| Pole`choices[].message.reasoning_details` | Typobject\|array |
| Pole`choices[].finish_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat)

**Ailoot · Anthropic Messages** `POST /v1/messages` `minimax-text`

[`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages)

MiniMax /`minimax-text`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · Anthropic Messages** `POST /v1/messages`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax-text | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity user, assistant | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_block[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`system` | Typ`string\|content_block[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaPovinné | Hodnoty a limity Minimum: 1 Limit sa vzťahuje na: presná horná hranica zvoleného modelu/karty | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop_sequences` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: poskytnutý nástroj | Predvolené— |
| Pole`tools[].description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].input_schema` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.budget_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`output_config.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`metadata` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`cache_control` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content alebo blok type=text`

**Text + obrázok**

`{type:image,source:{type:base64,media_type,data}} alebo zdroj s type=url`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages, max\_tokens |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · Anthropic Messages

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · Anthropic Messages

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="minimax-text",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
```

```js
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "minimax-text",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
```

```python
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='minimax-text',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · Anthropic Messages

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`model` | Typstring |
| Pole`content[]` | Typtext\|thinking\|tool\_use\|other content block |
| Pole`stop_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages)

**Ailoot · OpenAI Responses** `POST /v1/responses` `minimax-text`

[`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses)

MiniMax /`minimax-text`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Responses** `POST /v1/responses`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

1 000 000 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax-text | Predvolené— |
| Pole`input` | Typ`string\|input_item[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity message, reasoning, function\_call, function\_call\_output | Predvolené— |
| Pole`input[].content` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output; zachovajte skutočne vrátený call\_id | Predvolené— |
| Pole`input[].output` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output | Predvolené— |
| Pole`max_output_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.summary` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.verbosity` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`include` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`store` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`previous_response_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Požiadavka na ID: Len skutočné ID odpovede z podporovaného pokračovania Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_key` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`vstupný text alebo časť input_text`

**Text + obrázok**

`{type:input_image,image_url}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, input |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Responses

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Responses

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="minimax-text", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "minimax-text", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="minimax-text", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Responses

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každú výstupnú položku a časť obsahu, skutočný call\_id funkcie, šifrované uvažovanie a údaje o spotrebe. Pri streamovaní zachovajte úplné identifikačné údaje udalostí a položiek.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`status` | Typstring |
| Pole`output[]` | Typmessage\|reasoning\|function\_call\|other item |
| Pole`output[].content[]` | Typcontent part |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3)

**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `minimax-text`

[`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat)

MiniMax /`minimax-text`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Chat** `POST /v1/chat/completions`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax-text | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Príklady: system, user, assistant, tool, function Podmienky: Tieto roly sú výslovne zastúpené typmi kompatibility v zdrojovom kóde; presný súbor rolí zostáva závislý od modelu. Závisí od modelu | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_part[]\|null` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_calls` | Typ`tool_call[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: role=tool; použite skutočne vrátené ID | Predvolené— |
| Pole`messages[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].reasoning_content` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: Posielajte späť skutočne vrátené uvažovanie, ak ho tento model používa | Predvolené— |
| Pole`messages[].reasoning_details` | Typ`object\|array` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`max_completion_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`stream_options.include_usage` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop` | Typ`string\|string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`function_tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].function.name` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Platí, keď: poskytnutý nástroj typu funkcia | Predvolené— |
| Pole`tools[].function.description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].function.parameters` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`response_format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning_effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Pole kompatibility | Predvolené— |
| Pole`functions` | Typ`function[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`function_call` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content`

**Text + obrázok**

`{type:image_url,image_url:{url,detail}}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Chat

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Chat

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="minimax-text",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "minimax-text",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='minimax-text',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Chat

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každý variant odpovede a jeho obsah, volania nástrojov a uvažovanie. V SSE zostavujte čiastkové zmeny podľa indexu variantu/nástroja a zachovajte konečný dôvod ukončenia aj údaje o spotrebe.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`choices[].index` | Typinteger |
| Pole`choices[].message.content` | Typstring\|null |
| Pole`choices[].message.tool_calls` | Typtool\_call\[\] |
| Pole`choices[].message.reasoning_content` | Typstring |
| Pole`choices[].message.reasoning_details` | Typobject\|array |
| Pole`choices[].finish_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat)

**Ailoot · Anthropic Messages** `POST /v1/messages` `minimax-text-latest`

[`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages)

MiniMax /`minimax-text-latest`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · Anthropic Messages** `POST /v1/messages`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax-text-latest | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity user, assistant | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_block[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`system` | Typ`string\|content_block[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaPovinné | Hodnoty a limity Minimum: 1 Limit sa vzťahuje na: presná horná hranica zvoleného modelu/karty | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop_sequences` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: poskytnutý nástroj | Predvolené— |
| Pole`tools[].description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].input_schema` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.budget_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`output_config.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`metadata` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`cache_control` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content alebo blok type=text`

**Text + obrázok**

`{type:image,source:{type:base64,media_type,data}} alebo zdroj s type=url`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages, max\_tokens |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · Anthropic Messages

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · Anthropic Messages

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text-latest", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text-latest", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="minimax-text-latest",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
```

```js
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "minimax-text-latest",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
```

```python
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='minimax-text-latest',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · Anthropic Messages

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`model` | Typstring |
| Pole`content[]` | Typtext\|thinking\|tool\_use\|other content block |
| Pole`stop_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages)

**Ailoot · OpenAI Responses** `POST /v1/responses` `minimax-text-latest`

[`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses)

MiniMax /`minimax-text-latest`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Responses** `POST /v1/responses`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

1 000 000 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax-text-latest | Predvolené— |
| Pole`input` | Typ`string\|input_item[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity message, reasoning, function\_call, function\_call\_output | Predvolené— |
| Pole`input[].content` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output; zachovajte skutočne vrátený call\_id | Predvolené— |
| Pole`input[].output` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output | Predvolené— |
| Pole`max_output_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.summary` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.verbosity` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`include` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`store` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`previous_response_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Požiadavka na ID: Len skutočné ID odpovede z podporovaného pokračovania Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_key` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`vstupný text alebo časť input_text`

**Text + obrázok**

`{type:input_image,image_url}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, input |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Responses

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Responses

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text-latest", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text-latest", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="minimax-text-latest", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "minimax-text-latest", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="minimax-text-latest", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Responses

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každú výstupnú položku a časť obsahu, skutočný call\_id funkcie, šifrované uvažovanie a údaje o spotrebe. Pri streamovaní zachovajte úplné identifikačné údaje udalostí a položiek.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`status` | Typstring |
| Pole`output[]` | Typmessage\|reasoning\|function\_call\|other item |
| Pole`output[].content[]` | Typcontent part |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3)

**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `minimax-text-latest`

[`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat)

MiniMax /`minimax-text-latest`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Chat** `POST /v1/chat/completions`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax-text-latest | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Príklady: system, user, assistant, tool, function Podmienky: Tieto roly sú výslovne zastúpené typmi kompatibility v zdrojovom kóde; presný súbor rolí zostáva závislý od modelu. Závisí od modelu | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_part[]\|null` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_calls` | Typ`tool_call[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: role=tool; použite skutočne vrátené ID | Predvolené— |
| Pole`messages[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].reasoning_content` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: Posielajte späť skutočne vrátené uvažovanie, ak ho tento model používa | Predvolené— |
| Pole`messages[].reasoning_details` | Typ`object\|array` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`max_completion_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`stream_options.include_usage` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop` | Typ`string\|string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`function_tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].function.name` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Platí, keď: poskytnutý nástroj typu funkcia | Predvolené— |
| Pole`tools[].function.description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].function.parameters` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`response_format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning_effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Pole kompatibility | Predvolené— |
| Pole`functions` | Typ`function[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`function_call` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content`

**Text + obrázok**

`{type:image_url,image_url:{url,detail}}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Chat

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Chat

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text-latest", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-text-latest", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="minimax-text-latest",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "minimax-text-latest",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='minimax-text-latest',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Chat

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každý variant odpovede a jeho obsah, volania nástrojov a uvažovanie. V SSE zostavujte čiastkové zmeny podľa indexu variantu/nástroja a zachovajte konečný dôvod ukončenia aj údaje o spotrebe.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`choices[].index` | Typinteger |
| Pole`choices[].message.content` | Typstring\|null |
| Pole`choices[].message.tool_calls` | Typtool\_call\[\] |
| Pole`choices[].message.reasoning_content` | Typstring |
| Pole`choices[].message.reasoning_details` | Typobject\|array |
| Pole`choices[].finish_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat)

**Ailoot · Anthropic Messages** `POST /v1/messages` `minimax/minimax-m3`

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages)

MiniMax /`minimax/minimax-m3`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · Anthropic Messages** `POST /v1/messages`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax/minimax-m3 | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity user, assistant | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_block[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`system` | Typ`string\|content_block[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaPovinné | Hodnoty a limity Minimum: 1 Limit sa vzťahuje na: presná horná hranica zvoleného modelu/karty | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop_sequences` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: poskytnutý nástroj | Predvolené— |
| Pole`tools[].description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].input_schema` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`thinking.budget_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`output_config.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`metadata` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`cache_control` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content alebo blok type=text`

**Text + obrázok**

`{type:image,source:{type:base64,media_type,data}} alebo zdroj s type=url`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages, max\_tokens |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · Anthropic Messages

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · Anthropic Messages

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax/minimax-m3", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax/minimax-m3", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="minimax/minimax-m3",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
```

```js
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "minimax/minimax-m3",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
```

```python
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='minimax/minimax-m3',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · Anthropic Messages

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`model` | Typstring |
| Pole`content[]` | Typtext\|thinking\|tool\_use\|other content block |
| Pole`stop_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages)

**Ailoot · OpenAI Responses** `POST /v1/responses` `minimax/minimax-m3`

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses)

MiniMax /`minimax/minimax-m3`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Responses** `POST /v1/responses`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

1 000 000 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax/minimax-m3 | Predvolené— |
| Pole`input` | Typ`string\|input_item[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity message, reasoning, function\_call, function\_call\_output | Predvolené— |
| Pole`input[].content` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`input[].call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output; zachovajte skutočne vrátený call\_id | Predvolené— |
| Pole`input[].output` | Typ`string\|content_part[]` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: function\_call\_output | Predvolené— |
| Pole`max_output_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning.summary` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`text.verbosity` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`include` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`store` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`previous_response_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Požiadavka na ID: Len skutočné ID odpovede z podporovaného pokračovania Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_key` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`vstupný text alebo časť input_text`

**Text + obrázok**

`{type:input_image,image_url}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, input |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Responses

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Responses

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax/minimax-m3", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax/minimax-m3", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="minimax/minimax-m3", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "minimax/minimax-m3", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="minimax/minimax-m3", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Responses

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každú výstupnú položku a časť obsahu, skutočný call\_id funkcie, šifrované uvažovanie a údaje o spotrebe. Pri streamovaní zachovajte úplné identifikačné údaje udalostí a položiek.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`status` | Typstring |
| Pole`output[]` | Typmessage\|reasoning\|function\_call\|other item |
| Pole`output[].content[]` | Typcontent part |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=responses), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=responses), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=responses), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=responses), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=responses), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3)

**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `minimax/minimax-m3`

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat)

MiniMax /`minimax/minimax-m3`

ID modelu

- `MiniMax-M3`
- `minimax`
- `minimax-latest`
- `minimax-text`
- `minimax-text-latest`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text · Obrázky

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot · OpenAI Chat** `POST /v1/chat/completions`

Vstup

`text`, `image`

Výstup

`text`

Kontext

1 000 000 tokens

Maximálny výstup

524 288 tokens

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax/minimax-m3 | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Príklady: system, user, assistant, tool, function Podmienky: Tieto roly sú výslovne zastúpené typmi kompatibility v zdrojovom kóde; presný súbor rolí zostáva závislý od modelu. Závisí od modelu | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_part[]\|null` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_calls` | Typ`tool_call[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: role=tool; použite skutočne vrátené ID | Predvolené— |
| Pole`messages[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].reasoning_content` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: Posielajte späť skutočne vrátené uvažovanie, ak ho tento model používa | Predvolené— |
| Pole`messages[].reasoning_details` | Typ`object\|array` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`max_completion_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`stream_options.include_usage` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop` | Typ`string\|string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`function_tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].function.name` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Platí, keď: poskytnutý nástroj typu funkcia | Predvolené— |
| Pole`tools[].function.description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].function.parameters` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`response_format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning_effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Pole kompatibility | Predvolené— |
| Pole`functions` | Typ`function[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`function_call` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content`

**Text + obrázok**

`{type:image_url,image_url:{url,detail}}`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`material_types` | Špecifikáciatext, image |
| Parameter`required` | Špecifikáciamodel, messages |
| Parameter`optional_controls` | Špecifikácianull |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`text_file_material` | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |

Životný cyklus: `exact retained published method`

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

### Cenník

#### Sadzby metód Ailoot

Vstup

0,0003 USD */ 1K*

Výstup

0,0012 USD */ 1K*

Čítanie cache

≈0,00006 USD */ 1K*

Zápis do cache

0,0003 USD */ 1K*

Zápis do cache, 5 min

0,0003 USD */ 1K tokens*

#### Ceny podľa dĺžky požiadavky · OpenAI Chat

| Veľkosť požiadavky v tokenoch | Vstup | Výstup | Čítanie cache | Zápis do cache | Cache 5 min | Cache 1 hod |
| --- | --- | --- | --- | --- | --- | --- |
| Veľkosť požiadavky v tokenoch(0; 524 288\] | Vstup0,0003 USD | Výstup0,0012 USD | Čítanie cache≈0,00006 USD | Zápis do cache0,0003 USD | Cache 5 min0,0003 USD | Cache 1 hodZákladná: — |
| Veľkosť požiadavky v tokenoch(524 288; 1 000 000\] | Vstup0,0006 USD | Výstup0,0024 USD | Čítanie cache≈0,00012 USD | Zápis do cache0,0006 USD | Cache 5 min0,0006 USD | Cache 1 hodZákladná: — |

Sadzby v USD za 1K tokenov. Ak sadzba nie je nastavená, preberá sa základná sadzba tejto metódy; «—» znamená, že základná sadzba nie je nastavená.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

#### Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaOpenAI Chat · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaOpenAI Chat · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Základné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaAnthropic Messages · Pásmo 1 podľa dĺžky požiadavky | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

### Príklady požiadaviek

#### Ailoot · OpenAI Chat

Príklad textuVstup, obrázokPython SDKNode.js SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax/minimax-m3", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax/minimax-m3", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="minimax/minimax-m3",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
```

```js
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "minimax/minimax-m3",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='minimax/minimax-m3',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot · OpenAI Chat

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každý variant odpovede a jeho obsah, volania nástrojov a uvažovanie. V SSE zostavujte čiastkové zmeny podľa indexu variantu/nástroja a zachovajte konečný dôvod ukončenia aj údaje o spotrebe.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`choices[].index` | Typinteger |
| Pole`choices[].message.content` | Typstring\|null |
| Pole`choices[].message.tool_calls` | Typtool\_call\[\] |
| Pole`choices[].message.reasoning_content` | Typstring |
| Pole`choices[].message.reasoning_details` | Typobject\|array |
| Pole`choices[].finish_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat)

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `minimax/minimax-m3`

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat)

MiniMax /`minimax/minimax-m3`

ID modelu

- `MiniMax-M3`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text

Výsledky

Text

### Dostupné v Ailoot · vstupy a metódy

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions`

Vstup

`text`

Výstup

`text`

Výstupný formát

json alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax/minimax-m3 | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Príklady: system, user, assistant, tool, function Podmienky: Tieto roly sú výslovne zastúpené typmi kompatibility v zdrojovom kóde; presný súbor rolí zostáva závislý od modelu. Závisí od modelu | Predvolené— |
| Pole`messages[].content` | Typ`string\|content_part[]\|null` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_calls` | Typ`tool_call[]` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].tool_call_id` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: role=tool; použite skutočne vrátené ID | Predvolené— |
| Pole`messages[].name` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`messages[].reasoning_content` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: Posielajte späť skutočne vrátené uvažovanie, ak ho tento model používa | Predvolené— |
| Pole`messages[].reasoning_details` | Typ`object\|array` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`max_completion_tokens` | Typ`integer` | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
| Pole`stream_options.include_usage` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`temperature` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`top_p` | Typ`number` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`stop` | Typ`string\|string[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools` | Typ`function_tool[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`tools[].type` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity function Závisí od modelu | Predvolené— |
| Pole`tools[].function.name` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity Platí, keď: poskytnutý nástroj typu funkcia | Predvolené— |
| Pole`tools[].function.description` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tools[].function.parameters` | Typ`JSON_schema` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
| Pole`tool_choice` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`parallel_tool_calls` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`response_format` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning_effort` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`reasoning` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`service_tier` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`instructions` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Pole kompatibility | Predvolené— |
| Pole`functions` | Typ`function[]` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`function_call` | Typ`string\|object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`prompt_cache_options` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
| Pole`modalities` | Typ`string[]` | PožiadavkaVoliteľné | Hodnoty a limity text | Predvolené— |
| Pole`provider` | Typ`object` | PožiadavkaVoliteľné | Hodnoty a limity Podmienky: provider.options sa na tejto textovej trase Ultra odmieta | Predvolené— |
| Pole`cache_control.ttl` | Typ`string` | PožiadavkaVoliteľné | Hodnoty a limity Podmienky: Hodnota 1h sa v skutočne používaných poliach cache promptov odmieta | Predvolené— |

Kombinácie vstupných podkladov

**Text** · Text UTF8

`messages[].content`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`required` | Špecifikáciamodel, messages |
| Parameter`material_types` | Špecifikáciatext |
| Parameter`messages` | Špecifikáciapole správ so štruktúrou role/content |
| Parameter`file_material` | Špecifikáciaskutočný dokument UTF-8 vložený ako doslovný text; ID súboru sa neodvodzuje |
| Parameter`optional_controls` | Špecifikáciastream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parameter`control_scope` | Špecifikáciazávisí od modelu; používateľské nástroje typu funkcia sa líšia od nástrojov prevádzkovaných službou |
| Parameter`output_modalities` | Špecifikáciatext |
| Parameter`hosted_operations` | Špecifikáciafalse |
| Parameter`multimodal_input_binding` | Špecifikácianull |

Životný cyklus: `synchronous_or_streamed`

Pošlite presné ID modelu spolu s messages.

Dĺžka kontextu nie je horná hranica výstupu.

Textový súbor môže poskytnúť doslovný text; obrazové a zvukové vstupy a vstupy so súborovými objektmi potrebujú presné naviazanie.

### Cenník

Tarifné údaje nepridávajú možnosti požiadavky. Podporované parametre sú uvedené pri vybranej metóde.

Rýchly režim

Štandardná sadzba Keď je zvolený rýchly režim

Režim Flex

Štandardná sadzba Keď je zvolený režim flex

Maximálna úroveň uvažovania

Štandardná sadzba Keď sa pri maximálnej úrovni uvažovania používa predvolená úprava (default)

#### Sadzby Ailoot

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaZákladné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaPásmo dĺžky požiadavky 1 | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

### Príklady požiadaviek

#### Ailoot Ultra · OpenAI Chat

curlPython SDKStreamovanie v jazyku Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax/minimax-m3", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='minimax/minimax-m3',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='minimax/minimax-m3',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Prijať a uložiť výsledky

#### Ailoot Ultra · OpenAI Chat

json alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každý variant odpovede a jeho obsah, volania nástrojov a uvažovanie. V SSE zostavujte čiastkové zmeny podľa indexu variantu/nástroja a zachovajte konečný dôvod ukončenia aj údaje o spotrebe.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`choices[].index` | Typinteger |
| Pole`choices[].message.content` | Typstring\|null |
| Pole`choices[].message.tool_calls` | Typtool\_call\[\] |
| Pole`choices[].message.reasoning_content` | Typstring |
| Pole`choices[].message.reasoning_details` | Typobject\|array |
| Pole`choices[].finish_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=chat), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=chat), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=chat), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=chat), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=chat), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=chat)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `minimax/minimax-m3`

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages)

MiniMax /`minimax/minimax-m3`

ID modelu

- `MiniMax-M3`
- `minimax/minimax-m3`

### Úvod

MiniMax M3 je multimodálny model na sústavné programovanie a prácu agentov, ktorý používa MiniMax Sparse Attention a návrh pre dlhý kontext. Jeho uvedené chatové rozhrania Ultra prijímajú text a vracajú textové odpovede.

Povolené vstupy

Text

Výsledky

json · sse

### Dostupné v Ailoot · vstupy a metódy

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages`

Vstup

`text`

Výstup

`json`, `sse`

Výstupný formát

JSON alebo SSE

| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
| --- | --- | --- | --- | --- |
| Pole`model` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity minimax/minimax-m3 | Predvolené— |
| Pole`messages` | Typ`message[]` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`messages[].role` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity user, assistant | Predvolené— |
| Pole`messages[].content` | Typ`string` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`max_tokens` | Typ`integer` | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
| Pole`stream` | Typ`boolean` | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |

Kombinácie vstupných podkladov

**Text** · Text UTF-8

`reťazec messages[].content`

Parametre a životný cyklus metódy

| Parameter | Špecifikácia |
| --- | --- |
| Parameter`content_type` | Špecifikáciaapplication/json |
| Parameter`required` | Špecifikáciamodel, messages, max\_tokens |
| Parameter`optional_controls` | Špecifikáciastream |
| Parameter`material_types` | Špecifikáciatext |
| Parameter`text_file_material` | ŠpecifikáciaPrečítajte skutočný dokument UTF-8 a vložte jeho text do uvedeného vstupného reťazca alebo reťazca obsahu správy. |

Životný cyklus: `synchronous_or_streamed`

### Cenník

Tarifné údaje nepridávajú možnosti požiadavky. Podporované parametre sú uvedené pri vybranej metóde.

Rýchly režim

Štandardná sadzba Keď je zvolený rýchly režim

Režim Flex

Štandardná sadzba Keď je zvolený režim flex

Maximálna úroveň uvažovania

Štandardná sadzba Keď sa pri maximálnej úrovni uvažovania používa predvolená úprava (default)

#### Sadzby Ailoot

#### Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

| Konfigurácia | Sadzobník | Počet tokenov kontextu väčší než | Tokeny kontextu, najviac (vrátane hranice) | Poplatok |
| --- | --- | --- | --- | --- |
| KonfiguráciaZákladné sadzby za tokeny | SadzobníkZákladná sadzba | Počet tokenov kontextu väčší než— | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |
| KonfiguráciaPásmo dĺžky požiadavky 1 | Sadzobník— | Počet tokenov kontextu väčší než0 | Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranice | Poplatok Vstup · Vstupné tokeny **$0.0006** / 1K tokenov Výstup · Výstupné tokeny **$0.0024** / 1K tokenov Vstup · Čítanie cache **$0.00012** / 1K tokenov Vstup · Zápis do cache **—** / 1K tokenov Vstup · Zápis do cache, 1 hod **—** / 1K tokenov |

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. [Ako funguje rezervácia a vyúčtovanie →](https://ailoot.ai/docs/sk/billing/reserve/)

### Príklady požiadaviek

#### Ailoot Ultra · Anthropic Messages

Úplné minimálne telo požiadavky vo formáte JSONcurl · použite svoj dokument UTF-8Python · uložte úplný výsledok

```json
{
  "model": "minimax/minimax-m3",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'minimax/minimax-m3', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
```

```python
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'minimax/minimax-m3', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
```

### Prijať a uložiť výsledky

#### Ailoot Ultra · Anthropic Messages

JSON alebo SSE

##### Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.

##### Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede

| Pole | Typ |
| --- | --- |
| Pole`id` | Typstring |
| Pole`model` | Typstring |
| Pole`content[]` | Typtext\|thinking\|tool\_use\|other content block |
| Pole`stop_reason` | Typstring\|null |
| Pole`usage` | Typobject |

Chyby a ďalšie kroky

| Odpoveď | Podmienka | Ďalší krok |
| --- | --- | --- |
| Odpoveď400 · `invalid_request_error` | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |

### Aliasy

#### Aliasy modelov

<strong>Ailoot</strong> [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages)
**Ailoot Ultra** [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages)

#### Aliasy ciest metód

`/chat/completions`

#### Súvisiace ID na volanie

[`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax/minimax-m3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=minimax%2Fminimax-m3&fmt=messages), [`minimax`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax&fmt=messages), [`minimax-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-latest&fmt=messages), [`minimax-text`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text&fmt=messages), [`minimax-text-latest`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=minimax-text-latest&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Core&caller=MiniMax-M3&fmt=messages), [`MiniMax-M3`](https://ailoot.ai/models/sk/#m=minimax%2Fminimax-m3&route=Ultra&caller=MiniMax-M3&fmt=messages)

FAQ · MiniMax: MiniMax M3

Aké vstupy a výsledky sú dostupné?

`POST /v1/messages` · `MiniMax-M3`: `text`, `image` → `text` `POST /v1/responses` · `MiniMax-M3`: `text`, `image` → `text` `POST /v1/chat/completions` · `MiniMax-M3`: `text`, `image` → `text` `POST /v1/chat/completions` · `MiniMax-M3`: `text` → `text` `POST /v1/messages` · `MiniMax-M3`: `text` → `json`, `sse` `POST /v1/messages` · `minimax`: `text`, `image` → `text` `POST /v1/responses` · `minimax`: `text`, `image` → `text` `POST /v1/chat/completions` · `minimax`: `text`, `image` → `text` `POST /v1/messages` · `minimax-latest`: `text`, `image` → `text` `POST /v1/responses` · `minimax-latest`: `text`, `image` → `text` `POST /v1/chat/completions` · `minimax-latest`: `text`, `image` → `text` `POST /v1/messages` · `minimax-text`: `text`, `image` → `text` `POST /v1/responses` · `minimax-text`: `text`, `image` → `text` `POST /v1/chat/completions` · `minimax-text`: `text`, `image` → `text` `POST /v1/messages` · `minimax-text-latest`: `text`, `image` → `text` `POST /v1/responses` · `minimax-text-latest`: `text`, `image` → `text` `POST /v1/chat/completions` · `minimax-text-latest`: `text`, `image` → `text` `POST /v1/messages` · `minimax/minimax-m3`: `text`, `image` → `text` `POST /v1/responses` · `minimax/minimax-m3`: `text`, `image` → `text` `POST /v1/chat/completions` · `minimax/minimax-m3`: `text`, `image` → `text` `POST /v1/chat/completions` · `minimax/minimax-m3`: `text` → `text` `POST /v1/messages` · `minimax/minimax-m3`: `text` → `json`, `sse`

Aké polia používa požiadavka?

`POST /v1/messages` · `MiniMax-M3`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/responses` · `MiniMax-M3`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `MiniMax-M3`: `model`, `messages`, `stream` `POST /v1/chat/completions` · `MiniMax-M3`: `model`, `messages`, `stream` `POST /v1/messages` · `MiniMax-M3`: `model`, `messages`, `max_tokens`, `stream` `POST /v1/messages` · `minimax`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/responses` · `minimax`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `minimax`: `model`, `messages`, `stream` `POST /v1/messages` · `minimax-latest`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/responses` · `minimax-latest`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `minimax-latest`: `model`, `messages`, `stream` `POST /v1/messages` · `minimax-text`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/responses` · `minimax-text`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `minimax-text`: `model`, `messages`, `stream` `POST /v1/messages` · `minimax-text-latest`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/responses` · `minimax-text-latest`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `minimax-text-latest`: `model`, `messages`, `stream` `POST /v1/messages` · `minimax/minimax-m3`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/responses` · `minimax/minimax-m3`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `minimax/minimax-m3`: `model`, `messages`, `stream` `POST /v1/chat/completions` · `minimax/minimax-m3`: `model`, `messages`, `stream`, `modalities`, `provider` `POST /v1/messages` · `minimax/minimax-m3`: `model`, `messages`, `max_tokens`, `stream`

Aké limity platia?

`POST /v1/messages` · `MiniMax-M3`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/responses` · `MiniMax-M3`: `ctx`: `1000000`; `max_out`: `1000000` `POST /v1/chat/completions` · `MiniMax-M3`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1` `POST /v1/chat/completions` · `MiniMax-M3`: `messages.min_items`: `1` `POST /v1/messages` · `minimax`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/responses` · `minimax`: `ctx`: `1000000`; `max_out`: `1000000` `POST /v1/chat/completions` · `minimax`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1` `POST /v1/messages` · `minimax-latest`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/responses` · `minimax-latest`: `ctx`: `1000000`; `max_out`: `1000000` `POST /v1/chat/completions` · `minimax-latest`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1` `POST /v1/messages` · `minimax-text`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/responses` · `minimax-text`: `ctx`: `1000000`; `max_out`: `1000000` `POST /v1/chat/completions` · `minimax-text`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1` `POST /v1/messages` · `minimax-text-latest`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/responses` · `minimax-text-latest`: `ctx`: `1000000`; `max_out`: `1000000` `POST /v1/chat/completions` · `minimax-text-latest`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1` `POST /v1/messages` · `minimax/minimax-m3`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/responses` · `minimax/minimax-m3`: `ctx`: `1000000`; `max_out`: `1000000` `POST /v1/chat/completions` · `minimax/minimax-m3`: `ctx`: `1000000`; `max_out`: `524288`; `messages.min_items`: `1` `POST /v1/chat/completions` · `minimax/minimax-m3`: `messages.min_items`: `1`

Pripojte Ailoot k Claude Code, OpenCode, Hermes alebo vlastnej aplikácii.

## Spoločnosť a jej portfólio projektov

Spoločnosť a jej portfólio projektov: milióny zákazníkov; mesačné tržby v miliardách.

## Nakupujte tokeny so zľavou.

Zľava predplatného na pravidelnú prácu. Promo kódy až 50% na nákup tokenov.

Predplatné

Na pravidelné požiadavky vyberte tarifu so zľavou.

Promo kód až 50%

Pri nákupe zadajte kód. Cena sa prepočíta podľa prebiehajúcej akcie.

Výdavky v histórii

Pri každej požiadavke sa uloží model, tokeny a suma.

[Vybrať predplatné](https://ailoot.ai/docs/sk/billing/subscriptions/) · [Zobraziť ceny modelov](https://ailoot.ai/models/sk/)

## Pripojte API k produktu, ktorý predávate.

SaaS, aplikácie a boti podľa ponuky a licenčnej zmluvy Ailoot. Na ďalší predaj požiadajte o licenciu predajcu.

Komerčná aplikácia

Začleňte generovanie textu, obrázkov, videa a zvuku do platených funkcií svojej služby.

Licencia pre predajcu

Pošlite popis projektu a spôsob poskytovania prístupu. Vyžiadajte písomné podmienky použitia a ďalšieho predaja.

Dokumenty na webe

Ponuka, licenčná zmluva a zásady spracovania dát sú dostupné pred pripojením.

[Požiadať o licenciu predajcu](mailto:support@ailoot.ai) · [Ponuka a licenčná zmluva](https://ailoot.ai/legal/offer?lang=sk)

## Ailoot · Spoločnosť a jej portfólio projektov





Ailoot stavia na dlhodobých prevádzkových skúsenostiach, širokej klientskej základni, stabilných službách a priebežnom sledovaní KPI.





Spoločnosť a jej portfólio projektov: milióny zákazníkov; mesačné tržby v miliardách.





Ailoot využíva tieto prevádzkové skúsenosti na poskytovanie prístupu cez API k funkciám AI v produktoch zákazníkov, agentoch, aplikáciách a automatizáciách.
