Source: https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/
Canonical: https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/
Language: sl

# Nemotron 3 Nano Omni 30B A3B Reasoning

[Markdown](https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/index.md) · [JSON](https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/facts.json)

## [Nemotron 3 Nano Omni 30B A3B Reasoning](https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/)

Nemotron 3 Nano Omni združuje razumevanje besedila, slik, videa in govora za analizo dokumentov, posnetkov sestankov in multimodalnih nalog.

- [**Ailoot · Anthropic Messages** `POST /v1/messages` `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/#method-0)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/#method-1)
- [**Ailoot · Anthropic Messages** `POST /v1/messages` `nemotron-3-nano-omni`](https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/#method-2)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `nemotron-3-nano-omni`](https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/#method-3)
- [**Ailoot · Anthropic Messages** `POST /v1/messages` `nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/#method-4)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/nvidia-nemotron-3-nano-omni-30b-a3b-reasoning/#method-5)

O modelu

Ta opis zajema zmožnosti modela. Vhodi, izhodi in možnosti, ki so na voljo v Ailoot, so spodaj navedeni za izbrano metodo.

#### Razumevanje različnih vrst gradiva

Nemotron 3 Nano Omni je družba NVIDIA ustvarila za vprašanja in odgovore, povzetke, prepisovanje govora in analizo dokumentov. Na ravni modela so združeni besedilo, slike, video in zvok. Rezultat je besedilen: model opisuje vsebino, odgovarja na vprašanja in oblikuje prepis.

Predvideni so analiza posnetka sestanka, iskanje in opisovanje dogodkov v videogradivu ter analiza poslovnih in znanstvenih dokumentov. Razumevanje vmesnika in prepoznavanje besedila na sliki omogočata njegovo uporabo pri agentskih nalogah z vizualnim delovnim okoljem.

#### Jezikovna osnova in kodirniki

Osnova je hibridni model Mamba-2 in Transformer z ekspertnimi plastmi: skupno približno 31 milijard parametrov in okoli 3 milijarde aktivnih na token. Ločen vizualni kodirnik obdeluje slike in kadre, govorni pa zvočni signal. Skupni kontekst dosega 256 tisoč tokenov. Navedena jezikovna podpora je angleščina.

#### Vhodni formati

Kartica proizvajalca navaja besedilne nize, slike RGB v PNG in JPEG, video MP4 ter zvok WAV ali MP3. Za video so opisani posnetki do dveh minut; frekvenca vzorčenja kadrov je odvisna od ločljivosti. Za 1080p je navedena možnost do ene sličice na sekundo in 128 sličic, za 720p pa do dveh sličic na sekundo in 256 sličic. Za zvok sta navedena trajanje do ene ure in frekvenca vzorčenja od 8 kHz.

Za analizo strani dokumenta jo lahko predstavite kot sliko: to se razlikuje od podajanja neobdelanega PDF. Podprte podatke konkretne zahteve določa izbrani vhodni način dostopa.

#### Sklepanje in besedilni rezultat

Predvidena sta način s sklepanjem in način neposrednega izvajanja navodila. Za dolge dokumente in zahtevno multimodalno analizo proizvajalec uporablja sklepanje z nadzorovanim proračunom. Za prepoznavanje govora priporoča neposredni način.

Model podpira besedilo v formatu JSON, klice orodij in prepis s časovnimi oznakami posameznih besed. Priporočene dolžine ustvarjanja veljajo za nastavitve nalog; ne določajo univerzalnega največjega števila izhodnih tokenov.

Praktična naloga

### Praktična naloga

Tehnični primer v angleščini

```
Summarize an English meeting transcript

Summarize this transcript for the project owner. Erin: “The test build passed, but the release checklist is incomplete.” Sam: “I will finish the checklist tomorrow; deployment still needs approval.” Return the completed fact, the promised action with owner and the remaining approval. Preserve the distinction between a test build and deployment.
```

#### Pričakovani rezultat

```
A three-part meeting note: completed work, owner action and unresolved approval.
```

#### Preverjanje rezultata

```
Check that a passed test build is not rewritten as a deployed release and that Sam’s promise remains future work.
```

**Ailoot · Anthropic Messages** `POST /v1/messages` `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`

[`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=messages)

NVIDIA /`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`

ID modela

- `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`
- `nemotron-3-nano-omni`
- `nemotron-3-nano-omni-latest`

### Začetek

Nemotron 3 Nano Omni združuje razumevanje besedila, slik, videa in govora za analizo dokumentov, posnetkov sestankov in multimodalnih nalog.

Dovoljeni vhodi

Besedilo

Rezultati

Besedilo

### Na voljo v Ailoot · vhodi in metode

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

Vhod

`text`

Izhod

`text`

Kontekst

262.144 tokens

Največji izhod

32.768 tokens

Izhodni format

json ali SSE

| Polje | Vrsta | Zahteva | Vrednosti in omejitve | Privzeto |
| --- | --- | --- | --- | --- |
| Polje`model` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve nvidia/nemotron-3-nano-omni-30b-a3b-reasoning | Privzeto— |
| Polje`messages` | Vrsta`message[]` | ZahtevaObvezno | Vrednosti in omejitve Najmanjše število elementov: 1 | Privzeto— |
| Polje`messages[].role` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve user, assistant | Privzeto— |
| Polje`messages[].content` | Vrsta`string\|content_block[]` | ZahtevaObvezno | Vrednosti in omejitve | Privzeto— |
| Polje`system` | Vrsta`string\|content_block[]` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`max_tokens` | Vrsta`integer` | ZahtevaObvezno | Vrednosti in omejitve Najmanj: 1 Omejitev velja za: natančna zgornja meja izbranega modela/kartice | Privzeto— |
| Polje`stream` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve | Privzetofalse |
| Polje`temperature` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`top_p` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`stop_sequences` | Vrsta`string[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools` | Vrsta`tool[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools[].name` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Velja, ko: podano je orodje | Privzeto— |
| Polje`tools[].description` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tools[].input_schema` | Vrsta`JSON_schema` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tool_choice` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`thinking.type` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`thinking.budget_tokens` | Vrsta`integer` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`output_config.effort` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`metadata` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`cache_control` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |

Kombinacije vhodnih gradiv

**Besedilo** · Besedilo UTF8

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

Parametri in življenjski cikel metode

| Parameter | Specifikacija |
| --- | --- |
| Parameter`material_types` | Specifikacijatext |
| Parameter`required` | Specifikacijamodel, messages, max\_tokens |
| Parameter`optional_controls` | Specifikacijanull |
| Parameter`content_type` | Specifikacijaapplication/json |
| Parameter`text_file_material` | Specifikacijadejanska vsebina UTF-8 je vstavljena kot besedilo; ID datotek in URLs potrebujejo ločeno, natančno določeno podporo |

Življenjski cikel: `exact retained published method`

Strukture metod in ID so natančno določeni; zmožnost ponudnika je ločena od sprejema zahteve.

### Cenik

#### Cene metod Ailoot

Vhod

0,0003 $ */ 1K*

Izhod

0,0011 $ */ 1K*

Branje predpomnilnika

0,0003 $ */ 1K*

Zapis v predpomnilnik

0,0003 $ */ 1K*

Zapis v predpomnilnik, 5 min

0,0003 $ */ 1K tokens*

Ailoot pred zahtevo rezervira ocenjeni znesek. Po rezultatu obračuna končni strošek na podlagi izmerjene porabe. Obračun pretakanja uporablja končni zapis porabe. [Kako delujeta rezervacija in obračun →](https://ailoot.ai/docs/sl/billing/reserve/)

### Primeri zahtev

#### Ailoot · Anthropic Messages

Primer besedilaPython SDKNode.js SDKTok 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": "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning", "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
```

```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="nvidia/nemotron-3-nano-omni-30b-a3b-reasoning",
    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: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning",
  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='nvidia/nemotron-3-nano-omni-30b-a3b-reasoning',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")
```

### Prejmi in shrani rezultate

#### Ailoot · Anthropic Messages

json ali SSE

##### Ohrani vse dokončane rezultate

Shranite vsak v celoti vrnjen odgovor, datoteko in del vsebine.

Ohranite vse vsebinske bloke, podpise sklepanja in dejanske ID uporabe orodij. Sestavite vse delne spremembe blokov SSE; prvi besedilni blok ni celoten izhod.

##### Če je treba preveriti izvirni odgovor

Ohranite ID zahtev/odgovorov in glave. Splošni URL za pridobivanje besedilne naloge ni podan.

Polja odgovora

| Polje | Vrsta |
| --- | --- |
| Polje`id` | Vrstastring |
| Polje`model` | Vrstastring |
| Polje`content[]` | Vrstatext\|thinking\|tool\_use\|other content block |
| Polje`stop_reason` | Vrstastring\|null |
| Polje`usage` | Vrstaobject |

Napake in naslednji koraki

| Odgovor | Pogoj | Naslednji korak |
| --- | --- | --- |
| Odgovor400 · `invalid_request_error` | PogojNeveljavna obvezna polja, predstavitev gradiva ali vrednost parametra | Naslednji korakPred novo zahtevo za ustvarjanje popravite navedena polja. |

### Druga imena

#### Druga imena modelov

**Ailoot** [`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=messages), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=messages), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=messages)

#### Druga imena poti metod

Uporabite zgoraj navedene poti metod.

#### Povezani ID-ji za klic

[`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=messages), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=messages), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=messages)

**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`

[`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=chat)

NVIDIA /`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`

ID modela

- `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`
- `nemotron-3-nano-omni`
- `nemotron-3-nano-omni-latest`

### Začetek

Nemotron 3 Nano Omni združuje razumevanje besedila, slik, videa in govora za analizo dokumentov, posnetkov sestankov in multimodalnih nalog.

Dovoljeni vhodi

Besedilo

Rezultati

Besedilo

### Na voljo v Ailoot · vhodi in metode

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

Vhod

`text`

Izhod

`text`

Kontekst

4096 tokens

Največji izhod

1024 tokens

Izhodni format

json ali SSE

| Polje | Vrsta | Zahteva | Vrednosti in omejitve | Privzeto |
| --- | --- | --- | --- | --- |
| Polje`model` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve nvidia/nemotron-3-nano-omni-30b-a3b-reasoning | Privzeto— |
| Polje`messages` | Vrsta`message[]` | ZahtevaObvezno | Vrednosti in omejitve Najmanjše število elementov: 1 | Privzeto— |
| Polje`messages[].role` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve Primeri: system, user, assistant, tool, function Pogoji: Te vloge so izrecno predstavljene s tipi združljivosti v izvorni kodi; natančen nabor vlog ostaja odvisen od modela. Odvisno od modela | Privzeto— |
| Polje`messages[].content` | Vrsta`string\|content_part[]\|null` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`messages[].tool_calls` | Vrsta`tool_call[]` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`messages[].tool_call_id` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Velja, ko: role=tool; uporabite dejansko vrnjeni ID | Privzeto— |
| Polje`messages[].name` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`messages[].reasoning_content` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Velja, ko: Pošljite nazaj dejansko vrnjeno sklepanje, kadar ga ta model uporablja | Privzeto— |
| Polje`messages[].reasoning_details` | Vrsta`object\|array` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`max_tokens` | Vrsta`integer` | ZahtevaIzbirno | Vrednosti in omejitve Najmanj: 1 Odvisno od modela | Privzeto— |
| Polje`max_completion_tokens` | Vrsta`integer` | ZahtevaIzbirno | Vrednosti in omejitve Najmanj: 1 Odvisno od modela | Privzeto— |
| Polje`stream` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve | Privzetofalse |
| Polje`stream_options.include_usage` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`temperature` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`top_p` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`stop` | Vrsta`string\|string[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools` | Vrsta`function_tool[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools[].type` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools[].function.name` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve Velja, ko: podano je funkcijsko orodje | Privzeto— |
| Polje`tools[].function.description` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tools[].function.parameters` | Vrsta`JSON_schema` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tool_choice` | Vrsta`string\|object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`parallel_tool_calls` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`response_format` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`reasoning_effort` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`reasoning` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`service_tier` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`instructions` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Polje združljivosti | Privzeto— |
| Polje`functions` | Vrsta`function[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`function_call` | Vrsta`string\|object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`prompt_cache_options` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |

Kombinacije vhodnih gradiv

**Besedilo** · Besedilo UTF8

`messages[].content`

Parametri in življenjski cikel metode

| Parameter | Specifikacija |
| --- | --- |
| Parameter`material_types` | Specifikacijatext |
| Parameter`required` | Specifikacijamodel, messages |
| Parameter`optional_controls` | Specifikacijanull |
| Parameter`content_type` | Specifikacijaapplication/json |
| Parameter`text_file_material` | Specifikacijadejanska vsebina UTF-8 je vstavljena kot besedilo; ID datotek in URLs potrebujejo ločeno, natančno določeno podporo |

Življenjski cikel: `exact retained published method`

Strukture metod in ID so natančno določeni; zmožnost ponudnika je ločena od sprejema zahteve.

### Cenik

#### Cene metod Ailoot

Vhod

0,0003 $ */ 1K*

Izhod

0,0011 $ */ 1K*

Branje predpomnilnika

0,0003 $ */ 1K*

Zapis v predpomnilnik

0,0003 $ */ 1K*

Zapis v predpomnilnik, 5 min

0,0003 $ */ 1K tokens*

Ailoot pred zahtevo rezervira ocenjeni znesek. Po rezultatu obračuna končni strošek na podlagi izmerjene porabe. Obračun pretakanja uporablja končni zapis porabe. [Kako delujeta rezervacija in obračun →](https://ailoot.ai/docs/sl/billing/reserve/)

### Primeri zahtev

#### Ailoot · OpenAI Chat

Primer besedilaPython SDKNode.js SDKTok 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": "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning", "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
```

```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="nvidia/nemotron-3-nano-omni-30b-a3b-reasoning",
    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: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning",
  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='nvidia/nemotron-3-nano-omni-30b-a3b-reasoning',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")
```

### Prejmi in shrani rezultate

#### Ailoot · OpenAI Chat

json ali SSE

##### Ohrani vse dokončane rezultate

Shranite vsak v celoti vrnjen odgovor, datoteko in del vsebine.

Ohranite vsako možnost odgovora ter njeno vsebino, klice orodij in sklepanje. V SSE sestavite delne spremembe po indeksu možnosti/orodja ter ohranite končni razlog zaključka in podatke o porabi.

##### Če je treba preveriti izvirni odgovor

Ohranite ID zahtev/odgovorov in glave. Splošni URL za pridobivanje besedilne naloge ni podan.

Polja odgovora

| Polje | Vrsta |
| --- | --- |
| Polje`choices[].index` | Vrstainteger |
| Polje`choices[].message.content` | Vrstastring\|null |
| Polje`choices[].message.tool_calls` | Vrstatool\_call\[\] |
| Polje`choices[].message.reasoning_content` | Vrstastring |
| Polje`choices[].message.reasoning_details` | Vrstaobject\|array |
| Polje`choices[].finish_reason` | Vrstastring\|null |
| Polje`usage` | Vrstaobject |

Napake in naslednji koraki

| Odgovor | Pogoj | Naslednji korak |
| --- | --- | --- |
| Odgovor400 · `invalid_request_error` | PogojNeveljavna obvezna polja, predstavitev gradiva ali vrednost parametra | Naslednji korakPred novo zahtevo za ustvarjanje popravite navedena polja. |

### Druga imena

#### Druga imena modelov

**Ailoot** [`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=chat), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=chat), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=chat)

#### Druga imena poti metod

Uporabite zgoraj navedene poti metod.

#### Povezani ID-ji za klic

[`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=chat), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=chat), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=chat)

**Ailoot · Anthropic Messages** `POST /v1/messages` `nemotron-3-nano-omni`

[`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=messages)

NVIDIA /`nemotron-3-nano-omni`

ID modela

- `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`
- `nemotron-3-nano-omni`
- `nemotron-3-nano-omni-latest`

### Začetek

Nemotron 3 Nano Omni združuje razumevanje besedila, slik, videa in govora za analizo dokumentov, posnetkov sestankov in multimodalnih nalog.

Dovoljeni vhodi

Besedilo

Rezultati

Besedilo

### Na voljo v Ailoot · vhodi in metode

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

Vhod

`text`

Izhod

`text`

Kontekst

262.144 tokens

Največji izhod

32.768 tokens

Izhodni format

json ali SSE

| Polje | Vrsta | Zahteva | Vrednosti in omejitve | Privzeto |
| --- | --- | --- | --- | --- |
| Polje`model` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve nemotron-3-nano-omni | Privzeto— |
| Polje`messages` | Vrsta`message[]` | ZahtevaObvezno | Vrednosti in omejitve Najmanjše število elementov: 1 | Privzeto— |
| Polje`messages[].role` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve user, assistant | Privzeto— |
| Polje`messages[].content` | Vrsta`string\|content_block[]` | ZahtevaObvezno | Vrednosti in omejitve | Privzeto— |
| Polje`system` | Vrsta`string\|content_block[]` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`max_tokens` | Vrsta`integer` | ZahtevaObvezno | Vrednosti in omejitve Najmanj: 1 Omejitev velja za: natančna zgornja meja izbranega modela/kartice | Privzeto— |
| Polje`stream` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve | Privzetofalse |
| Polje`temperature` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`top_p` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`stop_sequences` | Vrsta`string[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools` | Vrsta`tool[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools[].name` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Velja, ko: podano je orodje | Privzeto— |
| Polje`tools[].description` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tools[].input_schema` | Vrsta`JSON_schema` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tool_choice` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`thinking.type` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`thinking.budget_tokens` | Vrsta`integer` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`output_config.effort` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`metadata` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`cache_control` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |

Kombinacije vhodnih gradiv

**Besedilo** · Besedilo UTF8

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

Parametri in življenjski cikel metode

| Parameter | Specifikacija |
| --- | --- |
| Parameter`material_types` | Specifikacijatext |
| Parameter`required` | Specifikacijamodel, messages, max\_tokens |
| Parameter`optional_controls` | Specifikacijanull |
| Parameter`content_type` | Specifikacijaapplication/json |
| Parameter`text_file_material` | Specifikacijadejanska vsebina UTF-8 je vstavljena kot besedilo; ID datotek in URLs potrebujejo ločeno, natančno določeno podporo |

Življenjski cikel: `exact retained published method`

Strukture metod in ID so natančno določeni; zmožnost ponudnika je ločena od sprejema zahteve.

### Cenik

#### Cene metod Ailoot

Vhod

0,0003 $ */ 1K*

Izhod

0,0011 $ */ 1K*

Branje predpomnilnika

0,0003 $ */ 1K*

Zapis v predpomnilnik

0,0003 $ */ 1K*

Zapis v predpomnilnik, 5 min

0,0003 $ */ 1K tokens*

Ailoot pred zahtevo rezervira ocenjeni znesek. Po rezultatu obračuna končni strošek na podlagi izmerjene porabe. Obračun pretakanja uporablja končni zapis porabe. [Kako delujeta rezervacija in obračun →](https://ailoot.ai/docs/sl/billing/reserve/)

### Primeri zahtev

#### Ailoot · Anthropic Messages

Primer besedilaPython SDKNode.js SDKTok 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": "nemotron-3-nano-omni", "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
```

```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="nemotron-3-nano-omni",
    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: "nemotron-3-nano-omni",
  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='nemotron-3-nano-omni',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")
```

### Prejmi in shrani rezultate

#### Ailoot · Anthropic Messages

json ali SSE

##### Ohrani vse dokončane rezultate

Shranite vsak v celoti vrnjen odgovor, datoteko in del vsebine.

Ohranite vse vsebinske bloke, podpise sklepanja in dejanske ID uporabe orodij. Sestavite vse delne spremembe blokov SSE; prvi besedilni blok ni celoten izhod.

##### Če je treba preveriti izvirni odgovor

Ohranite ID zahtev/odgovorov in glave. Splošni URL za pridobivanje besedilne naloge ni podan.

Polja odgovora

| Polje | Vrsta |
| --- | --- |
| Polje`id` | Vrstastring |
| Polje`model` | Vrstastring |
| Polje`content[]` | Vrstatext\|thinking\|tool\_use\|other content block |
| Polje`stop_reason` | Vrstastring\|null |
| Polje`usage` | Vrstaobject |

Napake in naslednji koraki

| Odgovor | Pogoj | Naslednji korak |
| --- | --- | --- |
| Odgovor400 · `invalid_request_error` | PogojNeveljavna obvezna polja, predstavitev gradiva ali vrednost parametra | Naslednji korakPred novo zahtevo za ustvarjanje popravite navedena polja. |

### Druga imena

#### Druga imena modelov

**Ailoot** [`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=messages), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=messages), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=messages)

#### Druga imena poti metod

Uporabite zgoraj navedene poti metod.

#### Povezani ID-ji za klic

[`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=messages), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=messages), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=messages)

**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `nemotron-3-nano-omni`

[`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=chat)

NVIDIA /`nemotron-3-nano-omni`

ID modela

- `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`
- `nemotron-3-nano-omni`
- `nemotron-3-nano-omni-latest`

### Začetek

Nemotron 3 Nano Omni združuje razumevanje besedila, slik, videa in govora za analizo dokumentov, posnetkov sestankov in multimodalnih nalog.

Dovoljeni vhodi

Besedilo

Rezultati

Besedilo

### Na voljo v Ailoot · vhodi in metode

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

Vhod

`text`

Izhod

`text`

Kontekst

4096 tokens

Največji izhod

1024 tokens

Izhodni format

json ali SSE

| Polje | Vrsta | Zahteva | Vrednosti in omejitve | Privzeto |
| --- | --- | --- | --- | --- |
| Polje`model` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve nemotron-3-nano-omni | Privzeto— |
| Polje`messages` | Vrsta`message[]` | ZahtevaObvezno | Vrednosti in omejitve Najmanjše število elementov: 1 | Privzeto— |
| Polje`messages[].role` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve Primeri: system, user, assistant, tool, function Pogoji: Te vloge so izrecno predstavljene s tipi združljivosti v izvorni kodi; natančen nabor vlog ostaja odvisen od modela. Odvisno od modela | Privzeto— |
| Polje`messages[].content` | Vrsta`string\|content_part[]\|null` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`messages[].tool_calls` | Vrsta`tool_call[]` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`messages[].tool_call_id` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Velja, ko: role=tool; uporabite dejansko vrnjeni ID | Privzeto— |
| Polje`messages[].name` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`messages[].reasoning_content` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Velja, ko: Pošljite nazaj dejansko vrnjeno sklepanje, kadar ga ta model uporablja | Privzeto— |
| Polje`messages[].reasoning_details` | Vrsta`object\|array` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`max_tokens` | Vrsta`integer` | ZahtevaIzbirno | Vrednosti in omejitve Najmanj: 1 Odvisno od modela | Privzeto— |
| Polje`max_completion_tokens` | Vrsta`integer` | ZahtevaIzbirno | Vrednosti in omejitve Najmanj: 1 Odvisno od modela | Privzeto— |
| Polje`stream` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve | Privzetofalse |
| Polje`stream_options.include_usage` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`temperature` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`top_p` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`stop` | Vrsta`string\|string[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools` | Vrsta`function_tool[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools[].type` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools[].function.name` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve Velja, ko: podano je funkcijsko orodje | Privzeto— |
| Polje`tools[].function.description` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tools[].function.parameters` | Vrsta`JSON_schema` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tool_choice` | Vrsta`string\|object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`parallel_tool_calls` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`response_format` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`reasoning_effort` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`reasoning` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`service_tier` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`instructions` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Polje združljivosti | Privzeto— |
| Polje`functions` | Vrsta`function[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`function_call` | Vrsta`string\|object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`prompt_cache_options` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |

Kombinacije vhodnih gradiv

**Besedilo** · Besedilo UTF8

`messages[].content`

Parametri in življenjski cikel metode

| Parameter | Specifikacija |
| --- | --- |
| Parameter`material_types` | Specifikacijatext |
| Parameter`required` | Specifikacijamodel, messages |
| Parameter`optional_controls` | Specifikacijanull |
| Parameter`content_type` | Specifikacijaapplication/json |
| Parameter`text_file_material` | Specifikacijadejanska vsebina UTF-8 je vstavljena kot besedilo; ID datotek in URLs potrebujejo ločeno, natančno določeno podporo |

Življenjski cikel: `exact retained published method`

Strukture metod in ID so natančno določeni; zmožnost ponudnika je ločena od sprejema zahteve.

### Cenik

#### Cene metod Ailoot

Vhod

0,0003 $ */ 1K*

Izhod

0,0011 $ */ 1K*

Branje predpomnilnika

0,0003 $ */ 1K*

Zapis v predpomnilnik

0,0003 $ */ 1K*

Zapis v predpomnilnik, 5 min

0,0003 $ */ 1K tokens*

Ailoot pred zahtevo rezervira ocenjeni znesek. Po rezultatu obračuna končni strošek na podlagi izmerjene porabe. Obračun pretakanja uporablja končni zapis porabe. [Kako delujeta rezervacija in obračun →](https://ailoot.ai/docs/sl/billing/reserve/)

### Primeri zahtev

#### Ailoot · OpenAI Chat

Primer besedilaPython SDKNode.js SDKTok 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": "nemotron-3-nano-omni", "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
```

```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="nemotron-3-nano-omni",
    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: "nemotron-3-nano-omni",
  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='nemotron-3-nano-omni',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")
```

### Prejmi in shrani rezultate

#### Ailoot · OpenAI Chat

json ali SSE

##### Ohrani vse dokončane rezultate

Shranite vsak v celoti vrnjen odgovor, datoteko in del vsebine.

Ohranite vsako možnost odgovora ter njeno vsebino, klice orodij in sklepanje. V SSE sestavite delne spremembe po indeksu možnosti/orodja ter ohranite končni razlog zaključka in podatke o porabi.

##### Če je treba preveriti izvirni odgovor

Ohranite ID zahtev/odgovorov in glave. Splošni URL za pridobivanje besedilne naloge ni podan.

Polja odgovora

| Polje | Vrsta |
| --- | --- |
| Polje`choices[].index` | Vrstainteger |
| Polje`choices[].message.content` | Vrstastring\|null |
| Polje`choices[].message.tool_calls` | Vrstatool\_call\[\] |
| Polje`choices[].message.reasoning_content` | Vrstastring |
| Polje`choices[].message.reasoning_details` | Vrstaobject\|array |
| Polje`choices[].finish_reason` | Vrstastring\|null |
| Polje`usage` | Vrstaobject |

Napake in naslednji koraki

| Odgovor | Pogoj | Naslednji korak |
| --- | --- | --- |
| Odgovor400 · `invalid_request_error` | PogojNeveljavna obvezna polja, predstavitev gradiva ali vrednost parametra | Naslednji korakPred novo zahtevo za ustvarjanje popravite navedena polja. |

### Druga imena

#### Druga imena modelov

**Ailoot** [`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=chat), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=chat), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=chat)

#### Druga imena poti metod

Uporabite zgoraj navedene poti metod.

#### Povezani ID-ji za klic

[`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=chat), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=chat), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=chat)

**Ailoot · Anthropic Messages** `POST /v1/messages` `nemotron-3-nano-omni-latest`

[`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=messages)

NVIDIA /`nemotron-3-nano-omni-latest`

ID modela

- `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`
- `nemotron-3-nano-omni`
- `nemotron-3-nano-omni-latest`

### Začetek

Nemotron 3 Nano Omni združuje razumevanje besedila, slik, videa in govora za analizo dokumentov, posnetkov sestankov in multimodalnih nalog.

Dovoljeni vhodi

Besedilo

Rezultati

Besedilo

### Na voljo v Ailoot · vhodi in metode

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

Vhod

`text`

Izhod

`text`

Kontekst

262.144 tokens

Največji izhod

32.768 tokens

Izhodni format

json ali SSE

| Polje | Vrsta | Zahteva | Vrednosti in omejitve | Privzeto |
| --- | --- | --- | --- | --- |
| Polje`model` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve nemotron-3-nano-omni-latest | Privzeto— |
| Polje`messages` | Vrsta`message[]` | ZahtevaObvezno | Vrednosti in omejitve Najmanjše število elementov: 1 | Privzeto— |
| Polje`messages[].role` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve user, assistant | Privzeto— |
| Polje`messages[].content` | Vrsta`string\|content_block[]` | ZahtevaObvezno | Vrednosti in omejitve | Privzeto— |
| Polje`system` | Vrsta`string\|content_block[]` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`max_tokens` | Vrsta`integer` | ZahtevaObvezno | Vrednosti in omejitve Najmanj: 1 Omejitev velja za: natančna zgornja meja izbranega modela/kartice | Privzeto— |
| Polje`stream` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve | Privzetofalse |
| Polje`temperature` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`top_p` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`stop_sequences` | Vrsta`string[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools` | Vrsta`tool[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools[].name` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Velja, ko: podano je orodje | Privzeto— |
| Polje`tools[].description` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tools[].input_schema` | Vrsta`JSON_schema` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tool_choice` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`thinking.type` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`thinking.budget_tokens` | Vrsta`integer` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`output_config.effort` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`metadata` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`cache_control` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |

Kombinacije vhodnih gradiv

**Besedilo** · Besedilo UTF8

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

Parametri in življenjski cikel metode

| Parameter | Specifikacija |
| --- | --- |
| Parameter`material_types` | Specifikacijatext |
| Parameter`required` | Specifikacijamodel, messages, max\_tokens |
| Parameter`optional_controls` | Specifikacijanull |
| Parameter`content_type` | Specifikacijaapplication/json |
| Parameter`text_file_material` | Specifikacijadejanska vsebina UTF-8 je vstavljena kot besedilo; ID datotek in URLs potrebujejo ločeno, natančno določeno podporo |

Življenjski cikel: `exact retained published method`

Strukture metod in ID so natančno določeni; zmožnost ponudnika je ločena od sprejema zahteve.

### Cenik

#### Cene metod Ailoot

Vhod

0,0003 $ */ 1K*

Izhod

0,0011 $ */ 1K*

Branje predpomnilnika

0,0003 $ */ 1K*

Zapis v predpomnilnik

0,0003 $ */ 1K*

Zapis v predpomnilnik, 5 min

0,0003 $ */ 1K tokens*

Ailoot pred zahtevo rezervira ocenjeni znesek. Po rezultatu obračuna končni strošek na podlagi izmerjene porabe. Obračun pretakanja uporablja končni zapis porabe. [Kako delujeta rezervacija in obračun →](https://ailoot.ai/docs/sl/billing/reserve/)

### Primeri zahtev

#### Ailoot · Anthropic Messages

Primer besedilaPython SDKNode.js SDKTok 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": "nemotron-3-nano-omni-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
```

```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="nemotron-3-nano-omni-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: "nemotron-3-nano-omni-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='nemotron-3-nano-omni-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")
```

### Prejmi in shrani rezultate

#### Ailoot · Anthropic Messages

json ali SSE

##### Ohrani vse dokončane rezultate

Shranite vsak v celoti vrnjen odgovor, datoteko in del vsebine.

Ohranite vse vsebinske bloke, podpise sklepanja in dejanske ID uporabe orodij. Sestavite vse delne spremembe blokov SSE; prvi besedilni blok ni celoten izhod.

##### Če je treba preveriti izvirni odgovor

Ohranite ID zahtev/odgovorov in glave. Splošni URL za pridobivanje besedilne naloge ni podan.

Polja odgovora

| Polje | Vrsta |
| --- | --- |
| Polje`id` | Vrstastring |
| Polje`model` | Vrstastring |
| Polje`content[]` | Vrstatext\|thinking\|tool\_use\|other content block |
| Polje`stop_reason` | Vrstastring\|null |
| Polje`usage` | Vrstaobject |

Napake in naslednji koraki

| Odgovor | Pogoj | Naslednji korak |
| --- | --- | --- |
| Odgovor400 · `invalid_request_error` | PogojNeveljavna obvezna polja, predstavitev gradiva ali vrednost parametra | Naslednji korakPred novo zahtevo za ustvarjanje popravite navedena polja. |

### Druga imena

#### Druga imena modelov

**Ailoot** [`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=messages), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=messages), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=messages)

#### Druga imena poti metod

Uporabite zgoraj navedene poti metod.

#### Povezani ID-ji za klic

[`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=messages), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=messages), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=messages)

**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `nemotron-3-nano-omni-latest`

[`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=chat)

NVIDIA /`nemotron-3-nano-omni-latest`

ID modela

- `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`
- `nemotron-3-nano-omni`
- `nemotron-3-nano-omni-latest`

### Začetek

Nemotron 3 Nano Omni združuje razumevanje besedila, slik, videa in govora za analizo dokumentov, posnetkov sestankov in multimodalnih nalog.

Dovoljeni vhodi

Besedilo

Rezultati

Besedilo

### Na voljo v Ailoot · vhodi in metode

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

Vhod

`text`

Izhod

`text`

Kontekst

4096 tokens

Največji izhod

1024 tokens

Izhodni format

json ali SSE

| Polje | Vrsta | Zahteva | Vrednosti in omejitve | Privzeto |
| --- | --- | --- | --- | --- |
| Polje`model` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve nemotron-3-nano-omni-latest | Privzeto— |
| Polje`messages` | Vrsta`message[]` | ZahtevaObvezno | Vrednosti in omejitve Najmanjše število elementov: 1 | Privzeto— |
| Polje`messages[].role` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve Primeri: system, user, assistant, tool, function Pogoji: Te vloge so izrecno predstavljene s tipi združljivosti v izvorni kodi; natančen nabor vlog ostaja odvisen od modela. Odvisno od modela | Privzeto— |
| Polje`messages[].content` | Vrsta`string\|content_part[]\|null` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`messages[].tool_calls` | Vrsta`tool_call[]` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`messages[].tool_call_id` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Velja, ko: role=tool; uporabite dejansko vrnjeni ID | Privzeto— |
| Polje`messages[].name` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`messages[].reasoning_content` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Velja, ko: Pošljite nazaj dejansko vrnjeno sklepanje, kadar ga ta model uporablja | Privzeto— |
| Polje`messages[].reasoning_details` | Vrsta`object\|array` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`max_tokens` | Vrsta`integer` | ZahtevaIzbirno | Vrednosti in omejitve Najmanj: 1 Odvisno od modela | Privzeto— |
| Polje`max_completion_tokens` | Vrsta`integer` | ZahtevaIzbirno | Vrednosti in omejitve Najmanj: 1 Odvisno od modela | Privzeto— |
| Polje`stream` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve | Privzetofalse |
| Polje`stream_options.include_usage` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`temperature` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`top_p` | Vrsta`number` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`stop` | Vrsta`string\|string[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools` | Vrsta`function_tool[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools[].type` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`tools[].function.name` | Vrsta`string` | ZahtevaObvezno | Vrednosti in omejitve Velja, ko: podano je funkcijsko orodje | Privzeto— |
| Polje`tools[].function.description` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tools[].function.parameters` | Vrsta`JSON_schema` | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
| Polje`tool_choice` | Vrsta`string\|object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`parallel_tool_calls` | Vrsta`boolean` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`response_format` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`reasoning_effort` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`reasoning` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`service_tier` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`instructions` | Vrsta`string` | ZahtevaIzbirno | Vrednosti in omejitve Polje združljivosti | Privzeto— |
| Polje`functions` | Vrsta`function[]` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`function_call` | Vrsta`string\|object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
| Polje`prompt_cache_options` | Vrsta`object` | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |

Kombinacije vhodnih gradiv

**Besedilo** · Besedilo UTF8

`messages[].content`

Parametri in življenjski cikel metode

| Parameter | Specifikacija |
| --- | --- |
| Parameter`material_types` | Specifikacijatext |
| Parameter`required` | Specifikacijamodel, messages |
| Parameter`optional_controls` | Specifikacijanull |
| Parameter`content_type` | Specifikacijaapplication/json |
| Parameter`text_file_material` | Specifikacijadejanska vsebina UTF-8 je vstavljena kot besedilo; ID datotek in URLs potrebujejo ločeno, natančno določeno podporo |

Življenjski cikel: `exact retained published method`

Strukture metod in ID so natančno določeni; zmožnost ponudnika je ločena od sprejema zahteve.

### Cenik

#### Cene metod Ailoot

Vhod

0,0003 $ */ 1K*

Izhod

0,0011 $ */ 1K*

Branje predpomnilnika

0,0003 $ */ 1K*

Zapis v predpomnilnik

0,0003 $ */ 1K*

Zapis v predpomnilnik, 5 min

0,0003 $ */ 1K tokens*

Ailoot pred zahtevo rezervira ocenjeni znesek. Po rezultatu obračuna končni strošek na podlagi izmerjene porabe. Obračun pretakanja uporablja končni zapis porabe. [Kako delujeta rezervacija in obračun →](https://ailoot.ai/docs/sl/billing/reserve/)

### Primeri zahtev

#### Ailoot · OpenAI Chat

Primer besedilaPython SDKNode.js SDKTok 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": "nemotron-3-nano-omni-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
```

```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="nemotron-3-nano-omni-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: "nemotron-3-nano-omni-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='nemotron-3-nano-omni-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")
```

### Prejmi in shrani rezultate

#### Ailoot · OpenAI Chat

json ali SSE

##### Ohrani vse dokončane rezultate

Shranite vsak v celoti vrnjen odgovor, datoteko in del vsebine.

Ohranite vsako možnost odgovora ter njeno vsebino, klice orodij in sklepanje. V SSE sestavite delne spremembe po indeksu možnosti/orodja ter ohranite končni razlog zaključka in podatke o porabi.

##### Če je treba preveriti izvirni odgovor

Ohranite ID zahtev/odgovorov in glave. Splošni URL za pridobivanje besedilne naloge ni podan.

Polja odgovora

| Polje | Vrsta |
| --- | --- |
| Polje`choices[].index` | Vrstainteger |
| Polje`choices[].message.content` | Vrstastring\|null |
| Polje`choices[].message.tool_calls` | Vrstatool\_call\[\] |
| Polje`choices[].message.reasoning_content` | Vrstastring |
| Polje`choices[].message.reasoning_details` | Vrstaobject\|array |
| Polje`choices[].finish_reason` | Vrstastring\|null |
| Polje`usage` | Vrstaobject |

Napake in naslednji koraki

| Odgovor | Pogoj | Naslednji korak |
| --- | --- | --- |
| Odgovor400 · `invalid_request_error` | PogojNeveljavna obvezna polja, predstavitev gradiva ali vrednost parametra | Naslednji korakPred novo zahtevo za ustvarjanje popravite navedena polja. |

### Druga imena

#### Druga imena modelov

**Ailoot** [`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=chat), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=chat), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=chat)

#### Druga imena poti metod

Uporabite zgoraj navedene poti metod.

#### Povezani ID-ji za klic

[`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&fmt=chat), [`nemotron-3-nano-omni`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni&fmt=chat), [`nemotron-3-nano-omni-latest`](https://ailoot.ai/models/sl/#m=nvidia%2Fnemotron-3-nano-omni-30b-a3b-reasoning&route=Core&caller=nemotron-3-nano-omni-latest&fmt=chat)

FAQ · nvidia/nemotron-3-nano-omni-30b-a3b-reasoning

Kateri vhodi in rezultati so na voljo?

`POST /v1/messages` · `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`: `text` → `text` `POST /v1/chat/completions` · `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`: `text` → `text` `POST /v1/messages` · `nemotron-3-nano-omni`: `text` → `text` `POST /v1/chat/completions` · `nemotron-3-nano-omni`: `text` → `text` `POST /v1/messages` · `nemotron-3-nano-omni-latest`: `text` → `text` `POST /v1/chat/completions` · `nemotron-3-nano-omni-latest`: `text` → `text`

Katera polja uporablja zahteva?

`POST /v1/messages` · `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/chat/completions` · `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`: `model`, `messages`, `stream` `POST /v1/messages` · `nemotron-3-nano-omni`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/chat/completions` · `nemotron-3-nano-omni`: `model`, `messages`, `stream` `POST /v1/messages` · `nemotron-3-nano-omni-latest`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/chat/completions` · `nemotron-3-nano-omni-latest`: `model`, `messages`, `stream`

Katere omejitve veljajo?

`POST /v1/messages` · `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`: `ctx`: `262144`; `max_out`: `32768`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/chat/completions` · `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning`: `ctx`: `4096`; `max_out`: `1024`; `messages.min_items`: `1` `POST /v1/messages` · `nemotron-3-nano-omni`: `ctx`: `262144`; `max_out`: `32768`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/chat/completions` · `nemotron-3-nano-omni`: `ctx`: `4096`; `max_out`: `1024`; `messages.min_items`: `1` `POST /v1/messages` · `nemotron-3-nano-omni-latest`: `ctx`: `262144`; `max_out`: `32768`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/chat/completions` · `nemotron-3-nano-omni-latest`: `ctx`: `4096`; `max_out`: `1024`; `messages.min_items`: `1`

Ailoot povežite s Claude Code, OpenCode, Hermes ali svojo aplikacijo.

## Podjetje in njegov portfelj projektov

Podjetje in njegov portfelj projektov: milijoni strank; mesečna prodaja v milijardah.

## Žetone kupujte s popustom.

Naročniški popust za redno delo. Promocijske kode prinesejo do 50% popusta na nakup žetonov.

Naročnina

Za redne zahteve izberite paket s popustom.

Promocijska koda do 50%

Kodo vnesite ob nakupu. Cena se preračuna po veljavni akciji.

Poraba v zgodovini

Za vsako zahtevo se shranijo model, žetoni in znesek.

[Izberite naročnino](https://ailoot.ai/docs/sl/billing/subscriptions/) · [Oglejte si cene modelov](https://ailoot.ai/models/sl/)

## API povežite z izdelkom, ki ga prodajate.

SaaS, aplikacije in boti po ponudbi in licenčni pogodbi Ailoot. Za nadaljnjo prodajo zaprosite za preprodajno licenco.

Komercialna aplikacija

Ustvarjanje besedila, slik, videa in zvoka vključite v plačljive funkcije svoje storitve.

Licenca za preprodajalca

Pošljite opis projekta in shemo dostopa. Zahtevajte pisne pogoje uporabe in nadaljnje prodaje.

Dokumenti na strani

Ponudba, licenčna pogodba in politika obdelave podatkov so dostopne pred povezavo.

[Zaprosite za preprodajno licenco](mailto:support@ailoot.ai) · [Ponudba in licenčna pogodba](https://ailoot.ai/legal/offer?lang=sl)

## Ailoot · Podjetje in njegov portfelj projektov





Ailoot temelji na pridobljenih operativnih izkušnjah, široki bazi strank, stabilni storitvi in stalnem spremljanju KPI.





Podjetje in njegov portfelj projektov: milijoni strank; mesečna prodaja v milijardah.





Ailoot te operativne izkušnje uporablja za dostop prek API do funkcij umetne inteligence v izdelkih strank, agentih, aplikacijah in avtomatizacijah.
