Source: https://ailoot.ai/models/ms/gpt-6-astra/
Canonical: https://ailoot.ai/models/ms/gpt-6-astra/
Language: ms

# OpenAI: GPT-6 Astra

[Markdown](https://ailoot.ai/models/ms/gpt-6-astra/index.md) · [JSON](https://ailoot.ai/models/ms/gpt-6-astra/facts.json)

## [OpenAI: GPT-6 Astra](https://ailoot.ai/models/ms/gpt-6-astra/)

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

- [**Ailoot · Anthropic Messages** `POST /v1/messages` `gpt-6-astra`](https://ailoot.ai/models/ms/gpt-6-astra/#method-0)
- [**Ailoot · OpenAI Responses** `POST /v1/responses` `gpt-6-astra`](https://ailoot.ai/models/ms/gpt-6-astra/#method-1)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `gpt-6-astra`](https://ailoot.ai/models/ms/gpt-6-astra/#method-2)
- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `gpt-6-astra`](https://ailoot.ai/models/ms/gpt-6-astra/#method-3)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `gpt-6-astra`](https://ailoot.ai/models/ms/gpt-6-astra/#method-4)
- [**Ailoot · Anthropic Messages** `POST /v1/messages` `gpt`](https://ailoot.ai/models/ms/gpt-6-astra/#method-5)
- [**Ailoot · OpenAI Responses** `POST /v1/responses` `gpt`](https://ailoot.ai/models/ms/gpt-6-astra/#method-6)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `gpt`](https://ailoot.ai/models/ms/gpt-6-astra/#method-7)
- [**Ailoot · Anthropic Messages** `POST /v1/messages` `gpt-latest`](https://ailoot.ai/models/ms/gpt-6-astra/#method-8)
- [**Ailoot · OpenAI Responses** `POST /v1/responses` `gpt-latest`](https://ailoot.ai/models/ms/gpt-6-astra/#method-9)
- [**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `gpt-latest`](https://ailoot.ai/models/ms/gpt-6-astra/#method-10)
- [**Ailoot Ultra · OpenAI Responses** `POST /v1/responses` `gpt-6-astra`](https://ailoot.ai/models/ms/gpt-6-astra/#method-11)
- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `openai/gpt-6-astra`](https://ailoot.ai/models/ms/gpt-6-astra/#method-12)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `openai/gpt-6-astra`](https://ailoot.ai/models/ms/gpt-6-astra/#method-13)
- [**Ailoot Ultra · OpenAI Responses** `POST /v1/responses` `openai/gpt-6-astra`](https://ailoot.ai/models/ms/gpt-6-astra/#method-14)
- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/gpt-6-astra/#method-15)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/gpt-6-astra/#method-16)
- [**Ailoot Ultra · OpenAI Responses** `POST /v1/responses` `~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/gpt-6-astra/#method-17)

Tentang model

Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.

#### Penyelidikan, pembangunan dan penciptaan dokumen

GPT-6 Astra ialah model OpenAI untuk tugasan penaakulan, pengaturcaraan, penyelidikan dan kerja profesional yang mencabar. Pengeluar mengetengahkan penciptaan dokumen dan interaksi dengan antara muka komputer secara khusus. Model ini direka untuk urutan tindakan yang memerlukan pengumpulan maklumat, pelaksanaan kerja dan pertimbangan terhadap hasil langkah terdahulu.

Menurut OpenAI, Astra mengekalkan tujuan keseluruhan apabila keperluan berubah: mengambil kira tambahan, menyesuaikan perjalanan kerja dan menjawab soalan berkaitan. Apabila maklumat boleh ditafsirkan dengan pelbagai cara, elok tetapkan batas tugasan, kriteria penyelesaian dan peraturan untuk meminta penjelasan. Nada dan struktur hasil juga boleh dinyatakan secara jelas: model cenderung menghasilkan jawapan yang terperinci dan tersusun.

#### Penaakulan sebagai sebahagian daripada kerja

Tahap yang disokong ialah `low`, `medium`, `high`, `xhigh` dan `max`. Penaakulan tidak boleh dimatikan melalui `none`. Tahap usaha mengawal proses penyelesaian, manakala jumlah teks akhir ditetapkan secara berasingan. Penaakulan yang rumit boleh berakhir dengan jawapan ringkas jika itulah hasil yang diperlukan.

OpenAI menyediakan dua mod pelaksanaan yang bebas daripada kedalaman analisis: biasa dan lanjutan. Mod biasa digunakan secara lalai. Mod lanjutan ditujukan untuk tugasan sukar yang membenarkan masa tambahan dan lebih banyak penggunaan token. Mod menentukan cara pelaksanaan, manakala tahap usaha menentukan kedalaman penaakulan di dalamnya. Pilihan ini diterangkan untuk `Responses` dan memerlukan sokongan aplikasi; keupayaan yang diterbitkan pengeluar tidak membuktikan bahawa mod ini diaktifkan dalam kaedah Ailoot semasa.

Keluarga GPT-6 membolehkan tahap penaakulan diubah antara sambungan dialog sambil mengekalkan awalan permintaan sebelumnya. Penyambungan kerja memerlukan keadaan yang berkenaan dihantar. Keupayaan mengawal tugasan berpanjangan bergantung pada format interaksi dan sokongan aplikasi terhadap operasi ini.

#### Bahan teks dan visual

Model menerima teks dan imej, mengembalikan teks serta menyokong output secara penstriman dan hasil berstruktur. OpenAI menyatakan konteks 1 050 000 token, input maksimum 922 000 dan output maksimum 128 000 token. Tarikh batas pengetahuan ialah 30 April 2026.

Imej digunakan untuk menganalisis kandungan yang kelihatan, membaca teks dan menjawab soalan tentang butiran. Tahap perincian yang berbeza disediakan untuk analisis terperinci. Saiz konteks dan had jawapan berbeza: bahan sumber yang panjang tidak bertukar secara automatik menjadi hasil yang sama panjang.

#### Beberapa tindakan dalam satu tugasan

Set keupayaan rasmi merangkumi panggilan fungsi, carian dalam fail dan di internet, pelaksanaan kod dan arahan, pengubahan fail, tindakan pada komputer dan pencarian alat yang diperlukan. `Responses` digunakan untuk panggilan alat; `Chat Completions` menyokong pertukaran teks tanpa alat.

Dengan sambungan yang sesuai, pengeluar turut menyediakan alat penjanaan imej yang berasingan, penggunaan kemahiran dan alat luaran melalui MCP. Jawapan langsung model kekal dalam bentuk teks; imej dijana oleh alat yang berasingan. Kewujudan keupayaan ini pada pihak pengeluar tidak bermaksud keupayaan tersebut dihubungkan dalam setiap kaedah Ailoot.

Dokumentasi keluarga ini menerangkan panggilan tak segerak: semasa aplikasi melaksanakan satu fungsi, model boleh meneruskan bahagian kerja lain yang bebas. Dokumentasi ini turut menyediakan penjelasan tugasan semasa pelaksanaan dan penyambungan kerja dengan tindakan yang telah selesai. Untuk senario ini, aplikasi perlu menyokong interaksi yang berkenaan dan mengembalikan hasil panggilan.

#### Bentuk hasil dan konteks berulang

Output berstruktur membantu menyediakan hasil mengikut skema yang ditetapkan, contohnya data dengan medan dan jenis tertentu. Skema menyusun hasil, manakala ketepatan maklumat memerlukan semakan kandungan. Dalam kerja berpanjangan, keadaan penaakulan yang tersedia boleh disimpan dan konteks terkumpul boleh dipendekkan.

Caching ditujukan untuk awalan input yang berulang. Sokongan carian, arahan atau tindakan pada komputer menerangkan keupayaan model apabila alat yang diperlukan dihubungkan; set fungsi dalam permintaan tertentu bergantung pada kaedah yang dipilih dan sambungan yang tersedia.

Tugas praktikal

### Tugas praktikal

Contoh teknikal dalam bahasa Inggeris

```
Prepare a source-backed decision memo

Prepare a one-page decision memo from these findings. F1: The legacy system exports CSV but has no audit log. F2: The replacement imports CSV and records changes. F3: A pilot imported 40 of 50 records; 10 failed because owner_id was missing. Recommend the next migration step, define acceptance criteria and preserve what the pilot has actually proved.
```

#### Hasil yang dijangka

```
A memo with recommendation, evidence references, unresolved data issue and acceptance criteria for a later full migration.
```

#### Semak hasil

```
Check that the 40-record result is not reported as a completed 50-record migration and that missing owner_id remains a blocker.
```

**Ailoot · Anthropic Messages** `POST /v1/messages` `gpt-6-astra`

[`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages)

OpenAI /`gpt-6-astra`

ID model

- `gpt-6-astra`
- `gpt`
- `gpt-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks · Imej

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`, `image`

Output

`text`

Konteks

1,050,000 tokens

Output maksimum

128,000 tokens

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt-6-astra | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had user, assistant | Lalai— |
| Medan`messages[].content` | Jenis`string\|content_block[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`system` | Jenis`string\|content_block[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanDiperlukan | Nilai & had Minimum: 1 Had terpakai pada: had maksimum tepat bagi model/kad yang dipilih | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`stop_sequences` | Jenis`string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].name` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: alat dibekalkan | Lalai— |
| Medan`tools[].description` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tools[].input_schema` | Jenis`JSON_schema` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tool_choice` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`thinking.type` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`thinking.budget_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`output_config.effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`metadata` | Jenis`object` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`cache_control` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

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

**Teks + imej**

`{type:image,source:{type:base64,media_type,data}} atau sumber dengan type=url`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontrakmodel, messages, max\_tokens |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |

Kitar hayat: `exact retained published method`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Input

USD 0.01 */ 1K*

Output

USD 0.05 */ 1K*

Bacaan cache

USD 0.001 */ 1K*

Penulisan cache

USD 0.0125 */ 1K*

Penulisan cache, 5 minit

USD 0.0125 */ 1K tokens*

Pengganda fast

×2

Pengganda flex

×0.5

#### Harga mengikut panjang permintaan · Anthropic Messages

| Saiz permintaan, token | Input | Output | Bacaan cache | Penulisan cache | Cache 5 minit | Cache 1 jam |
| --- | --- | --- | --- | --- | --- | --- |
| Saiz permintaan, token(0; 272,000\] | InputUSD 0.01 | OutputUSD 0.05 | Bacaan cacheUSD 0.001 | Penulisan cacheUSD 0.0125 | Cache 5 minitUSD 0.0125 | Cache 1 jamAsas: — |
| Saiz permintaan, token(272,000; ∞) | InputUSD 0.02 | OutputUSD 0.075 | Bacaan cacheUSD 0.002 | Penulisan cacheUSD 0.025 | Cache 5 minitUSD 0.025 | Cache 1 jamAsas: — |

Kadar dalam USD setiap 1K token. Jika tiada kadar ditetapkan, kadar asas kaedah ini diwarisi; «—» bermaksud tiada kadar asas ditetapkan.

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

#### Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

### Contoh permintaan

#### Ailoot · Anthropic Messages

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

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

```python
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="gpt-6-astra",
    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: "gpt-6-astra",
  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='gpt-6-astra',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")
```

### Terima dan simpan hasil

#### Ailoot · Anthropic Messages

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`model` | Jenisstring |
| Medan`content[]` | Jenistext\|thinking\|tool\_use\|other content block |
| Medan`stop_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages)

**Ailoot · OpenAI Responses** `POST /v1/responses` `gpt-6-astra`

[`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses)

OpenAI /`gpt-6-astra`

ID model

- `gpt-6-astra`
- `gpt`
- `gpt-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks · Imej

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`, `image`

Output

`text`

Konteks

1,050,000 tokens

Output maksimum

128,000 tokens

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt-6-astra | Lalai— |
| Medan`input` | Jenis`string\|input_item[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].type` | Jenis`string` | KeperluanPilihan | Nilai & had message, reasoning, function\_call, function\_call\_output | Lalai— |
| Medan`input[].content` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output; kekalkan call\_id sebenar yang dipulangkan | Lalai— |
| Medan`input[].output` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output | Lalai— |
| Medan`max_output_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.summary` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.verbosity` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`include` | Jenis`string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`store` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`previous_response_id` | Jenis`string` | KeperluanPilihan | Nilai & had Keperluan ID: Hanya ID respons sebenar daripada penerusan yang disokong Bergantung pada model | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_key` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`Teks input atau bahagian input_text`

**Teks + imej**

`{type:input_image,image_url}`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontrakmodel, input |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |

Kitar hayat: `exact retained published method`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Input

USD 0.01 */ 1K*

Output

USD 0.05 */ 1K*

Bacaan cache

USD 0.001 */ 1K*

Penulisan cache

USD 0.0125 */ 1K*

Penulisan cache, 5 minit

USD 0.0125 */ 1K tokens*

Pengganda fast

×2

Pengganda flex

×0.5

#### Harga mengikut panjang permintaan · OpenAI Responses

| Saiz permintaan, token | Input | Output | Bacaan cache | Penulisan cache | Cache 5 minit | Cache 1 jam |
| --- | --- | --- | --- | --- | --- | --- |
| Saiz permintaan, token(0; 272,000\] | InputUSD 0.01 | OutputUSD 0.05 | Bacaan cacheUSD 0.001 | Penulisan cacheUSD 0.0125 | Cache 5 minitUSD 0.0125 | Cache 1 jamAsas: — |
| Saiz permintaan, token(272,000; ∞) | InputUSD 0.02 | OutputUSD 0.075 | Bacaan cacheUSD 0.002 | Penulisan cacheUSD 0.025 | Cache 5 minitUSD 0.025 | Cache 1 jamAsas: — |

Kadar dalam USD setiap 1K token. Jika tiada kadar ditetapkan, kadar asas kaedah ini diwarisi; «—» bermaksud tiada kadar asas ditetapkan.

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

#### Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

### Contoh permintaan

#### Ailoot · OpenAI Responses

Contoh teksInput, imejPython SDKNode.js SDKPenstriman 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": "gpt-6-astra", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

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

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

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

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

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

```python
from openai import OpenAI
import os

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

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

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

```js
import OpenAI from "openai";

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

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

saveResult(resp);
```

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

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

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

### Terima dan simpan hasil

#### Ailoot · OpenAI Responses

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap item output dan bahagian kandungan, call\_id fungsi sebenar, penaakulan disulitkan serta data penggunaan. Semasa penstriman, kekalkan identiti peristiwa/item yang lengkap.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`status` | Jenisstring |
| Medan`output[]` | Jenismessage\|reasoning\|function\_call\|other item |
| Medan`output[].content[]` | Jeniscontent part |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses)

**Ailoot · OpenAI Chat** `POST /v1/chat/completions` `gpt-6-astra`

[`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat)

OpenAI /`gpt-6-astra`

ID model

- `gpt-6-astra`
- `gpt`
- `gpt-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks · Imej

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`, `image`

Output

`text`

Konteks

1,050,000 tokens

Output maksimum

128,000 tokens

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt-6-astra | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had Contoh: system, user, assistant, tool, function Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model. Bergantung pada model | Lalai— |
| Medan`messages[].content` | Jenis`string\|content_part[]\|null` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_calls` | Jenis`tool_call[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan | Lalai— |
| Medan`messages[].name` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].reasoning_content` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya | Lalai— |
| Medan`messages[].reasoning_details` | Jenis`object\|array` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`max_completion_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`stream_options.include_usage` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`stop` | Jenis`string\|string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`function_tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].type` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].function.name` | Jenis`string` | KeperluanDiperlukan | Nilai & had Terpakai apabila: alat fungsi dibekalkan | Lalai— |
| Medan`tools[].function.description` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tools[].function.parameters` | Jenis`JSON_schema` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`response_format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning_effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had Medan keserasian | Lalai— |
| Medan`functions` | Jenis`function[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`function_call` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`messages[].content`

**Teks + imej**

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

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontrakmodel, messages |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |

Kitar hayat: `exact retained published method`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Input

USD 0.01 */ 1K*

Output

USD 0.05 */ 1K*

Bacaan cache

USD 0.001 */ 1K*

Penulisan cache

USD 0.0125 */ 1K*

Penulisan cache, 5 minit

USD 0.0125 */ 1K tokens*

Pengganda fast

×2

Pengganda flex

×0.5

#### Harga mengikut panjang permintaan · OpenAI Chat

| Saiz permintaan, token | Input | Output | Bacaan cache | Penulisan cache | Cache 5 minit | Cache 1 jam |
| --- | --- | --- | --- | --- | --- | --- |
| Saiz permintaan, token(0; 272,000\] | InputUSD 0.01 | OutputUSD 0.05 | Bacaan cacheUSD 0.001 | Penulisan cacheUSD 0.0125 | Cache 5 minitUSD 0.0125 | Cache 1 jamAsas: — |
| Saiz permintaan, token(272,000; ∞) | InputUSD 0.02 | OutputUSD 0.075 | Bacaan cacheUSD 0.002 | Penulisan cacheUSD 0.025 | Cache 5 minitUSD 0.025 | Cache 1 jamAsas: — |

Kadar dalam USD setiap 1K token. Jika tiada kadar ditetapkan, kadar asas kaedah ini diwarisi; «—» bermaksud tiada kadar asas ditetapkan.

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

#### Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

### Contoh permintaan

#### Ailoot · OpenAI Chat

Contoh teksInput, imejPython SDKNode.js SDKPenstriman 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": "gpt-6-astra", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

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

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="gpt-6-astra",
    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: "gpt-6-astra",
  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='gpt-6-astra',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")
```

### Terima dan simpan hasil

#### Ailoot · OpenAI Chat

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`choices[].index` | Jenisinteger |
| Medan`choices[].message.content` | Jenisstring\|null |
| Medan`choices[].message.tool_calls` | Jenistool\_call\[\] |
| Medan`choices[].message.reasoning_content` | Jenisstring |
| Medan`choices[].message.reasoning_details` | Jenisobject\|array |
| Medan`choices[].finish_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat)

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `gpt-6-astra`

[`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat)

OpenAI /`gpt-6-astra`

ID model

- `gpt-6-astra`
- `openai/gpt-6-astra`
- `~openai/gpt-astra-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`

Output

`text`

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt-6-astra | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had Bergantung pada model | Lalai— |
| Medan`messages[].content` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: Perbualan teks | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |

Gabungan bahan input

**Teks** · Teks UTF8

`messages[].content`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, messages |
| Parameter`material_types` | Kontraktext |
| Parameter`messages` | Kontraktatasusunan mesej dengan struktur role/content |
| Parameter`file_material` | Kontrakdokumen UTF-8 sebenar dimasukkan sebagai teks literal; ID fail tidak diandaikan |
| Parameter`optional_controls` | Kontrakstream |
| Parameter`control_scope` | KontrakPerbualan teks; stream ialah nilai boolean dengan false sebagai lalai. |
| Parameter`output_modalities` | Kontraktext |
| Parameter`hosted_operations` | Kontrakfalse |
| Parameter`multimodal_input_binding` | Kontraknull |

Alias kaedah: `/chat/completions`

Kitar hayat: `synchronous_or_streamed`

Hantar ID model yang tepat bersama messages.

Panjang konteks bukan had output.

Fail teks boleh membekalkan teks literal; input imej/audio/objek fail memerlukan pengikatan tepat.

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · low

Kadar standard Apabila usaha penaakulan ditetapkan kepada low

Usaha penaakulan · max

Kadar standard Apabila usaha penaakulan ditetapkan kepada max

Usaha penaakulan · medium

Kadar standard Apabila usaha penaakulan ditetapkan kepada medium

Usaha penaakulan · xhigh

Kadar standard Apabila usaha penaakulan ditetapkan kepada xhigh

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 2 | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · OpenAI Chat

curlPython SDK

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

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

```python
from openai import OpenAI
import os

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

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

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

### Terima dan simpan hasil

#### Ailoot Ultra · OpenAI Chat

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`choices[].index` | Jenisinteger |
| Medan`choices[].message.content` | Jenisstring\|null |
| Medan`choices[].message.tool_calls` | Jenistool\_call\[\] |
| Medan`choices[].message.reasoning_content` | Jenisstring |
| Medan`choices[].message.reasoning_details` | Jenisobject\|array |
| Medan`choices[].finish_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `gpt-6-astra`

[`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages)

OpenAI /`gpt-6-astra`

ID model

- `gpt-6-astra`
- `openai/gpt-6-astra`
- `~openai/gpt-astra-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks

Hasil

json · sse

### Tersedia di Ailoot · input & kaedah

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

Input

`text`

Output

`json`, `sse`

Format output

JSON atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt-6-astra | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had user, assistant | Lalai— |
| Medan`messages[].content` | Jenis`string` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |

Gabungan bahan input

**Teks** · Teks UTF-8

`rentetan messages[].content`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, messages, max\_tokens |
| Parameter`optional_controls` | Kontrakstream |
| Parameter`material_types` | Kontraktext |
| Parameter`text_file_material` | KontrakBaca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan. |

Kitar hayat: `synchronous_or_streamed`

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · low

Kadar standard Apabila usaha penaakulan ditetapkan kepada low

Usaha penaakulan · max

Kadar standard Apabila usaha penaakulan ditetapkan kepada max

Usaha penaakulan · medium

Kadar standard Apabila usaha penaakulan ditetapkan kepada medium

Usaha penaakulan · xhigh

Kadar standard Apabila usaha penaakulan ditetapkan kepada xhigh

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 2 | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · Anthropic Messages

Badan JSON minimum yang lengkapcurl · gunakan dokumen UTF-8 andaPython · simpan hasil lengkap

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

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

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

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

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

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

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

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

### Terima dan simpan hasil

#### Ailoot Ultra · Anthropic Messages

JSON atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`model` | Jenisstring |
| Medan`content[]` | Jenistext\|thinking\|tool\_use\|other content block |
| Medan`stop_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages)

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

[`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages)

OpenAI /`gpt`

ID model

- `gpt-6-astra`
- `gpt`
- `gpt-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks · Imej

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`, `image`

Output

`text`

Konteks

1,050,000 tokens

Output maksimum

128,000 tokens

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had user, assistant | Lalai— |
| Medan`messages[].content` | Jenis`string\|content_block[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`system` | Jenis`string\|content_block[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanDiperlukan | Nilai & had Minimum: 1 Had terpakai pada: had maksimum tepat bagi model/kad yang dipilih | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`stop_sequences` | Jenis`string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].name` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: alat dibekalkan | Lalai— |
| Medan`tools[].description` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tools[].input_schema` | Jenis`JSON_schema` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tool_choice` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`thinking.type` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`thinking.budget_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`output_config.effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`metadata` | Jenis`object` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`cache_control` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

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

**Teks + imej**

`{type:image,source:{type:base64,media_type,data}} atau sumber dengan type=url`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontrakmodel, messages, max\_tokens |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |

Kitar hayat: `exact retained published method`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Input

USD 0.01 */ 1K*

Output

USD 0.05 */ 1K*

Bacaan cache

USD 0.001 */ 1K*

Penulisan cache

USD 0.0125 */ 1K*

Penulisan cache, 5 minit

USD 0.0125 */ 1K tokens*

Pengganda fast

×2

Pengganda flex

×0.5

#### Harga mengikut panjang permintaan · Anthropic Messages

| Saiz permintaan, token | Input | Output | Bacaan cache | Penulisan cache | Cache 5 minit | Cache 1 jam |
| --- | --- | --- | --- | --- | --- | --- |
| Saiz permintaan, token(0; 272,000\] | InputUSD 0.01 | OutputUSD 0.05 | Bacaan cacheUSD 0.001 | Penulisan cacheUSD 0.0125 | Cache 5 minitUSD 0.0125 | Cache 1 jamAsas: — |
| Saiz permintaan, token(272,000; ∞) | InputUSD 0.02 | OutputUSD 0.075 | Bacaan cacheUSD 0.002 | Penulisan cacheUSD 0.025 | Cache 5 minitUSD 0.025 | Cache 1 jamAsas: — |

Kadar dalam USD setiap 1K token. Jika tiada kadar ditetapkan, kadar asas kaedah ini diwarisi; «—» bermaksud tiada kadar asas ditetapkan.

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

#### Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

### Contoh permintaan

#### Ailoot · Anthropic Messages

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

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

```python
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="gpt",
    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: "gpt",
  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='gpt',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")
```

### Terima dan simpan hasil

#### Ailoot · Anthropic Messages

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`model` | Jenisstring |
| Medan`content[]` | Jenistext\|thinking\|tool\_use\|other content block |
| Medan`stop_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages)

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

[`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses)

OpenAI /`gpt`

ID model

- `gpt-6-astra`
- `gpt`
- `gpt-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks · Imej

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`, `image`

Output

`text`

Konteks

1,050,000 tokens

Output maksimum

128,000 tokens

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt | Lalai— |
| Medan`input` | Jenis`string\|input_item[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].type` | Jenis`string` | KeperluanPilihan | Nilai & had message, reasoning, function\_call, function\_call\_output | Lalai— |
| Medan`input[].content` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output; kekalkan call\_id sebenar yang dipulangkan | Lalai— |
| Medan`input[].output` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output | Lalai— |
| Medan`max_output_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.summary` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.verbosity` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`include` | Jenis`string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`store` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`previous_response_id` | Jenis`string` | KeperluanPilihan | Nilai & had Keperluan ID: Hanya ID respons sebenar daripada penerusan yang disokong Bergantung pada model | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_key` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`Teks input atau bahagian input_text`

**Teks + imej**

`{type:input_image,image_url}`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontrakmodel, input |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |

Kitar hayat: `exact retained published method`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Input

USD 0.01 */ 1K*

Output

USD 0.05 */ 1K*

Bacaan cache

USD 0.001 */ 1K*

Penulisan cache

USD 0.0125 */ 1K*

Penulisan cache, 5 minit

USD 0.0125 */ 1K tokens*

Pengganda fast

×2

Pengganda flex

×0.5

#### Harga mengikut panjang permintaan · OpenAI Responses

| Saiz permintaan, token | Input | Output | Bacaan cache | Penulisan cache | Cache 5 minit | Cache 1 jam |
| --- | --- | --- | --- | --- | --- | --- |
| Saiz permintaan, token(0; 272,000\] | InputUSD 0.01 | OutputUSD 0.05 | Bacaan cacheUSD 0.001 | Penulisan cacheUSD 0.0125 | Cache 5 minitUSD 0.0125 | Cache 1 jamAsas: — |
| Saiz permintaan, token(272,000; ∞) | InputUSD 0.02 | OutputUSD 0.075 | Bacaan cacheUSD 0.002 | Penulisan cacheUSD 0.025 | Cache 5 minitUSD 0.025 | Cache 1 jamAsas: — |

Kadar dalam USD setiap 1K token. Jika tiada kadar ditetapkan, kadar asas kaedah ini diwarisi; «—» bermaksud tiada kadar asas ditetapkan.

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

#### Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

### Contoh permintaan

#### Ailoot · OpenAI Responses

Contoh teksInput, imejPython SDKNode.js SDKPenstriman 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": "gpt", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

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

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

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

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

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

```python
from openai import OpenAI
import os

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

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

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

```js
import OpenAI from "openai";

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

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

saveResult(resp);
```

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

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

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

### Terima dan simpan hasil

#### Ailoot · OpenAI Responses

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap item output dan bahagian kandungan, call\_id fungsi sebenar, penaakulan disulitkan serta data penggunaan. Semasa penstriman, kekalkan identiti peristiwa/item yang lengkap.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`status` | Jenisstring |
| Medan`output[]` | Jenismessage\|reasoning\|function\_call\|other item |
| Medan`output[].content[]` | Jeniscontent part |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses)

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

[`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat)

OpenAI /`gpt`

ID model

- `gpt-6-astra`
- `gpt`
- `gpt-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks · Imej

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`, `image`

Output

`text`

Konteks

1,050,000 tokens

Output maksimum

128,000 tokens

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had Contoh: system, user, assistant, tool, function Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model. Bergantung pada model | Lalai— |
| Medan`messages[].content` | Jenis`string\|content_part[]\|null` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_calls` | Jenis`tool_call[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan | Lalai— |
| Medan`messages[].name` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].reasoning_content` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya | Lalai— |
| Medan`messages[].reasoning_details` | Jenis`object\|array` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`max_completion_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`stream_options.include_usage` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`stop` | Jenis`string\|string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`function_tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].type` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].function.name` | Jenis`string` | KeperluanDiperlukan | Nilai & had Terpakai apabila: alat fungsi dibekalkan | Lalai— |
| Medan`tools[].function.description` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tools[].function.parameters` | Jenis`JSON_schema` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`response_format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning_effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had Medan keserasian | Lalai— |
| Medan`functions` | Jenis`function[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`function_call` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`messages[].content`

**Teks + imej**

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

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontrakmodel, messages |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |

Kitar hayat: `exact retained published method`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Input

USD 0.01 */ 1K*

Output

USD 0.05 */ 1K*

Bacaan cache

USD 0.001 */ 1K*

Penulisan cache

USD 0.0125 */ 1K*

Penulisan cache, 5 minit

USD 0.0125 */ 1K tokens*

Pengganda fast

×2

Pengganda flex

×0.5

#### Harga mengikut panjang permintaan · OpenAI Chat

| Saiz permintaan, token | Input | Output | Bacaan cache | Penulisan cache | Cache 5 minit | Cache 1 jam |
| --- | --- | --- | --- | --- | --- | --- |
| Saiz permintaan, token(0; 272,000\] | InputUSD 0.01 | OutputUSD 0.05 | Bacaan cacheUSD 0.001 | Penulisan cacheUSD 0.0125 | Cache 5 minitUSD 0.0125 | Cache 1 jamAsas: — |
| Saiz permintaan, token(272,000; ∞) | InputUSD 0.02 | OutputUSD 0.075 | Bacaan cacheUSD 0.002 | Penulisan cacheUSD 0.025 | Cache 5 minitUSD 0.025 | Cache 1 jamAsas: — |

Kadar dalam USD setiap 1K token. Jika tiada kadar ditetapkan, kadar asas kaedah ini diwarisi; «—» bermaksud tiada kadar asas ditetapkan.

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

#### Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

### Contoh permintaan

#### Ailoot · OpenAI Chat

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

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

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="gpt",
    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: "gpt",
  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='gpt',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")
```

### Terima dan simpan hasil

#### Ailoot · OpenAI Chat

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`choices[].index` | Jenisinteger |
| Medan`choices[].message.content` | Jenisstring\|null |
| Medan`choices[].message.tool_calls` | Jenistool\_call\[\] |
| Medan`choices[].message.reasoning_content` | Jenisstring |
| Medan`choices[].message.reasoning_details` | Jenisobject\|array |
| Medan`choices[].finish_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat)

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

[`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages)

OpenAI /`gpt-latest`

ID model

- `gpt-6-astra`
- `gpt`
- `gpt-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks · Imej

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`, `image`

Output

`text`

Konteks

1,050,000 tokens

Output maksimum

128,000 tokens

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt-latest | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had user, assistant | Lalai— |
| Medan`messages[].content` | Jenis`string\|content_block[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`system` | Jenis`string\|content_block[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanDiperlukan | Nilai & had Minimum: 1 Had terpakai pada: had maksimum tepat bagi model/kad yang dipilih | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`stop_sequences` | Jenis`string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].name` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: alat dibekalkan | Lalai— |
| Medan`tools[].description` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tools[].input_schema` | Jenis`JSON_schema` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tool_choice` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`thinking.type` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`thinking.budget_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`output_config.effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`metadata` | Jenis`object` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`cache_control` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

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

**Teks + imej**

`{type:image,source:{type:base64,media_type,data}} atau sumber dengan type=url`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontrakmodel, messages, max\_tokens |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |

Kitar hayat: `exact retained published method`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Input

USD 0.01 */ 1K*

Output

USD 0.05 */ 1K*

Bacaan cache

USD 0.001 */ 1K*

Penulisan cache

USD 0.0125 */ 1K*

Penulisan cache, 5 minit

USD 0.0125 */ 1K tokens*

Pengganda fast

×2

Pengganda flex

×0.5

#### Harga mengikut panjang permintaan · Anthropic Messages

| Saiz permintaan, token | Input | Output | Bacaan cache | Penulisan cache | Cache 5 minit | Cache 1 jam |
| --- | --- | --- | --- | --- | --- | --- |
| Saiz permintaan, token(0; 272,000\] | InputUSD 0.01 | OutputUSD 0.05 | Bacaan cacheUSD 0.001 | Penulisan cacheUSD 0.0125 | Cache 5 minitUSD 0.0125 | Cache 1 jamAsas: — |
| Saiz permintaan, token(272,000; ∞) | InputUSD 0.02 | OutputUSD 0.075 | Bacaan cacheUSD 0.002 | Penulisan cacheUSD 0.025 | Cache 5 minitUSD 0.025 | Cache 1 jamAsas: — |

Kadar dalam USD setiap 1K token. Jika tiada kadar ditetapkan, kadar asas kaedah ini diwarisi; «—» bermaksud tiada kadar asas ditetapkan.

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

#### Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

### Contoh permintaan

#### Ailoot · Anthropic Messages

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

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

```python
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="gpt-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: "gpt-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='gpt-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")
```

### Terima dan simpan hasil

#### Ailoot · Anthropic Messages

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`model` | Jenisstring |
| Medan`content[]` | Jenistext\|thinking\|tool\_use\|other content block |
| Medan`stop_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages)

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

[`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses)

OpenAI /`gpt-latest`

ID model

- `gpt-6-astra`
- `gpt`
- `gpt-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks · Imej

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`, `image`

Output

`text`

Konteks

1,050,000 tokens

Output maksimum

128,000 tokens

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt-latest | Lalai— |
| Medan`input` | Jenis`string\|input_item[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].type` | Jenis`string` | KeperluanPilihan | Nilai & had message, reasoning, function\_call, function\_call\_output | Lalai— |
| Medan`input[].content` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output; kekalkan call\_id sebenar yang dipulangkan | Lalai— |
| Medan`input[].output` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output | Lalai— |
| Medan`max_output_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.summary` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.verbosity` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`include` | Jenis`string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`store` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`previous_response_id` | Jenis`string` | KeperluanPilihan | Nilai & had Keperluan ID: Hanya ID respons sebenar daripada penerusan yang disokong Bergantung pada model | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_key` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`Teks input atau bahagian input_text`

**Teks + imej**

`{type:input_image,image_url}`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontrakmodel, input |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |

Kitar hayat: `exact retained published method`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Input

USD 0.01 */ 1K*

Output

USD 0.05 */ 1K*

Bacaan cache

USD 0.001 */ 1K*

Penulisan cache

USD 0.0125 */ 1K*

Penulisan cache, 5 minit

USD 0.0125 */ 1K tokens*

Pengganda fast

×2

Pengganda flex

×0.5

#### Harga mengikut panjang permintaan · OpenAI Responses

| Saiz permintaan, token | Input | Output | Bacaan cache | Penulisan cache | Cache 5 minit | Cache 1 jam |
| --- | --- | --- | --- | --- | --- | --- |
| Saiz permintaan, token(0; 272,000\] | InputUSD 0.01 | OutputUSD 0.05 | Bacaan cacheUSD 0.001 | Penulisan cacheUSD 0.0125 | Cache 5 minitUSD 0.0125 | Cache 1 jamAsas: — |
| Saiz permintaan, token(272,000; ∞) | InputUSD 0.02 | OutputUSD 0.075 | Bacaan cacheUSD 0.002 | Penulisan cacheUSD 0.025 | Cache 5 minitUSD 0.025 | Cache 1 jamAsas: — |

Kadar dalam USD setiap 1K token. Jika tiada kadar ditetapkan, kadar asas kaedah ini diwarisi; «—» bermaksud tiada kadar asas ditetapkan.

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

#### Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

### Contoh permintaan

#### Ailoot · OpenAI Responses

Contoh teksInput, imejPython SDKNode.js SDKPenstriman 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": "gpt-latest", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

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

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

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

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

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

```python
from openai import OpenAI
import os

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

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

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

```js
import OpenAI from "openai";

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

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

saveResult(resp);
```

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

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

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

### Terima dan simpan hasil

#### Ailoot · OpenAI Responses

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap item output dan bahagian kandungan, call\_id fungsi sebenar, penaakulan disulitkan serta data penggunaan. Semasa penstriman, kekalkan identiti peristiwa/item yang lengkap.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`status` | Jenisstring |
| Medan`output[]` | Jenismessage\|reasoning\|function\_call\|other item |
| Medan`output[].content[]` | Jeniscontent part |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses)

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

[`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat)

OpenAI /`gpt-latest`

ID model

- `gpt-6-astra`
- `gpt`
- `gpt-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks · Imej

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`, `image`

Output

`text`

Konteks

1,050,000 tokens

Output maksimum

128,000 tokens

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt-latest | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had Contoh: system, user, assistant, tool, function Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model. Bergantung pada model | Lalai— |
| Medan`messages[].content` | Jenis`string\|content_part[]\|null` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_calls` | Jenis`tool_call[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan | Lalai— |
| Medan`messages[].name` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].reasoning_content` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya | Lalai— |
| Medan`messages[].reasoning_details` | Jenis`object\|array` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`max_completion_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`stream_options.include_usage` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`stop` | Jenis`string\|string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`function_tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].type` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].function.name` | Jenis`string` | KeperluanDiperlukan | Nilai & had Terpakai apabila: alat fungsi dibekalkan | Lalai— |
| Medan`tools[].function.description` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tools[].function.parameters` | Jenis`JSON_schema` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`response_format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning_effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had Medan keserasian | Lalai— |
| Medan`functions` | Jenis`function[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`function_call` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`messages[].content`

**Teks + imej**

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

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext, image |
| Parameter`required` | Kontrakmodel, messages |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |

Kitar hayat: `exact retained published method`

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

### Pelan harga

#### Kadar kaedah Ailoot

Input

USD 0.01 */ 1K*

Output

USD 0.05 */ 1K*

Bacaan cache

USD 0.001 */ 1K*

Penulisan cache

USD 0.0125 */ 1K*

Penulisan cache, 5 minit

USD 0.0125 */ 1K tokens*

Pengganda fast

×2

Pengganda flex

×0.5

#### Harga mengikut panjang permintaan · OpenAI Chat

| Saiz permintaan, token | Input | Output | Bacaan cache | Penulisan cache | Cache 5 minit | Cache 1 jam |
| --- | --- | --- | --- | --- | --- | --- |
| Saiz permintaan, token(0; 272,000\] | InputUSD 0.01 | OutputUSD 0.05 | Bacaan cacheUSD 0.001 | Penulisan cacheUSD 0.0125 | Cache 5 minitUSD 0.0125 | Cache 1 jamAsas: — |
| Saiz permintaan, token(272,000; ∞) | InputUSD 0.02 | OutputUSD 0.075 | Bacaan cacheUSD 0.002 | Penulisan cacheUSD 0.025 | Cache 5 minitUSD 0.025 | Cache 1 jamAsas: — |

Kadar dalam USD setiap 1K token. Jika tiada kadar ditetapkan, kadar asas kaedah ini diwarisi; «—» bermaksud tiada kadar asas ditetapkan.

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

#### Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Chat · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiAnthropic Messages · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiOpenAI Responses · Tahap 2 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

### Contoh permintaan

#### Ailoot · OpenAI Chat

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

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

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="gpt-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: "gpt-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='gpt-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")
```

### Terima dan simpan hasil

#### Ailoot · OpenAI Chat

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`choices[].index` | Jenisinteger |
| Medan`choices[].message.content` | Jenisstring\|null |
| Medan`choices[].message.tool_calls` | Jenistool\_call\[\] |
| Medan`choices[].message.reasoning_content` | Jenisstring |
| Medan`choices[].message.reasoning_details` | Jenisobject\|array |
| Medan`choices[].finish_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat)

**Ailoot Ultra · OpenAI Responses** `POST /v1/responses` `gpt-6-astra`

[`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses)

OpenAI /`gpt-6-astra`

ID model

- `gpt-6-astra`
- `openai/gpt-6-astra`
- `~openai/gpt-astra-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`

Output

`text`

Format output

json or SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had gpt-6-astra | Lalai— |
| Medan`input` | Jenis`string\|input_item[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].type` | Jenis`string` | KeperluanPilihan | Nilai & had message, reasoning, function\_call, function\_call\_output | Lalai— |
| Medan`input[].content` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output; kekalkan call\_id sebenar yang dipulangkan | Lalai— |
| Medan`input[].output` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output | Lalai— |
| Medan`max_output_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.summary` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.verbosity` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`include` | Jenis`string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`store` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`previous_response_id` | Jenis`string` | KeperluanTidak disokong | Nilai & had Keperluan ID: Hanya ID respons sebenar daripada penerusan yang disokong Syarat: Sertakan semula sejarah perbualan sebenar dengan setiap permintaan. | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_key` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`input text or input_text part`

**Teks + imej**

`{type:input_image,image_url}`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext |
| Parameter`required` | Kontrakmodel, input |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | KontrakBaca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan. |

Kitar hayat: `exact retained published method`

Hantar ID model yang tepat dan medan wajib.

Simpan setiap item yang dikembalikan dan pengecam asalnya.

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · low

Kadar standard Apabila usaha penaakulan ditetapkan kepada low

Usaha penaakulan · max

Kadar standard Apabila usaha penaakulan ditetapkan kepada max

Usaha penaakulan · medium

Kadar standard Apabila usaha penaakulan ditetapkan kepada medium

Usaha penaakulan · xhigh

Kadar standard Apabila usaha penaakulan ditetapkan kepada xhigh

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 2 | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · OpenAI Responses

Badan JSON minimum yang lengkapcurl · gunakan dokumen UTF-8 andaPython · simpan hasil lengkap

```json
{
  "model": "gpt-6-astra",
  "input": [
    {
      "content": "Hello, how are you?",
      "role": "user",
      "type": "message"
    }
  ]
}
```

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

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'gpt-6-astra', 'input': [{'content': 'Hello, how are you?', 'role': 'user', 'type': 'message'}]}
payload['input'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

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

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

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'gpt-6-astra', 'input': [{'content': 'Hello, how are you?', 'role': 'user', 'type': 'message'}]}
payload['input'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

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

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

### Terima dan simpan hasil

#### Ailoot Ultra · OpenAI Responses

json or SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap item output dan bahagian kandungan, call\_id fungsi sebenar, penaakulan disulitkan serta data penggunaan. Semasa penstriman, kekalkan identiti peristiwa/item yang lengkap.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`status` | Jenisstring |
| Medan`output[]` | Jenismessage\|reasoning\|function\_call\|other item |
| Medan`output[].content[]` | Jeniscontent part |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses)

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `openai/gpt-6-astra`

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat)

OpenAI /`openai/gpt-6-astra`

ID model

- `gpt-6-astra`
- `openai/gpt-6-astra`
- `~openai/gpt-astra-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`

Output

`text`

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had openai/gpt-6-astra | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had Contoh: system, user, assistant, tool, function Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model. Bergantung pada model | Lalai— |
| Medan`messages[].content` | Jenis`string\|content_part[]\|null` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_calls` | Jenis`tool_call[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan | Lalai— |
| Medan`messages[].name` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].reasoning_content` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya | Lalai— |
| Medan`messages[].reasoning_details` | Jenis`object\|array` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`max_completion_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`stream_options.include_usage` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`stop` | Jenis`string\|string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`function_tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].type` | Jenis`string` | KeperluanPilihan | Nilai & had function Bergantung pada model | Lalai— |
| Medan`tools[].function.name` | Jenis`string` | KeperluanDiperlukan | Nilai & had Terpakai apabila: alat fungsi dibekalkan | Lalai— |
| Medan`tools[].function.description` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tools[].function.parameters` | Jenis`JSON_schema` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`response_format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning_effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had Medan keserasian | Lalai— |
| Medan`functions` | Jenis`function[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`function_call` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`modalities` | Jenis`string[]` | KeperluanPilihan | Nilai & had text | Lalai— |
| Medan`provider` | Jenis`object` | KeperluanPilihan | Nilai & had Syarat: provider.options ditolak pada laluan teks Ultra ini | Lalai— |
| Medan`cache_control.ttl` | Jenis`string` | KeperluanPilihan | Nilai & had Syarat: 1h ditolak pada lokasi cache prompt yang digunakan | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`messages[].content`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, messages |
| Parameter`material_types` | Kontraktext |
| Parameter`messages` | Kontraktatasusunan mesej dengan struktur role/content |
| Parameter`file_material` | Kontrakdokumen UTF-8 sebenar dimasukkan sebagai teks literal; ID fail tidak diandaikan |
| Parameter`optional_controls` | Kontrakstream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parameter`control_scope` | Kontrakkhusus model; alat fungsi pengguna berbeza daripada alat yang dihoskan |
| Parameter`output_modalities` | Kontraktext |
| Parameter`hosted_operations` | Kontrakfalse |
| Parameter`multimodal_input_binding` | Kontraknull |

Kitar hayat: `synchronous_or_streamed`

Hantar ID model yang tepat bersama messages.

Panjang konteks bukan had output.

Fail teks boleh membekalkan teks literal; input imej/audio/objek fail memerlukan pengikatan tepat.

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · low

Kadar standard Apabila usaha penaakulan ditetapkan kepada low

Usaha penaakulan · max

Kadar standard Apabila usaha penaakulan ditetapkan kepada max

Usaha penaakulan · medium

Kadar standard Apabila usaha penaakulan ditetapkan kepada medium

Usaha penaakulan · xhigh

Kadar standard Apabila usaha penaakulan ditetapkan kepada xhigh

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 2 | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · OpenAI Chat

curlPython SDKPenstriman Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "openai/gpt-6-astra", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

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

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='openai/gpt-6-astra',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

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

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

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

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

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

with client.chat.completions.stream(model='openai/gpt-6-astra',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")
```

### Terima dan simpan hasil

#### Ailoot Ultra · OpenAI Chat

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`choices[].index` | Jenisinteger |
| Medan`choices[].message.content` | Jenisstring\|null |
| Medan`choices[].message.tool_calls` | Jenistool\_call\[\] |
| Medan`choices[].message.reasoning_content` | Jenisstring |
| Medan`choices[].message.reasoning_details` | Jenisobject\|array |
| Medan`choices[].finish_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `openai/gpt-6-astra`

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages)

OpenAI /`openai/gpt-6-astra`

ID model

- `gpt-6-astra`
- `openai/gpt-6-astra`
- `~openai/gpt-astra-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`

Output

`text`

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had openai/gpt-6-astra | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had user, assistant | Lalai— |
| Medan`messages[].content` | Jenis`string\|content_block[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`system` | Jenis`string\|content_block[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanDiperlukan | Nilai & had Minimum: 1 Had terpakai pada: had maksimum tepat bagi model/kad yang dipilih | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`stop_sequences` | Jenis`string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].name` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: alat dibekalkan | Lalai— |
| Medan`tools[].description` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tools[].input_schema` | Jenis`JSON_schema` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tool_choice` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`thinking.type` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`thinking.budget_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`output_config.effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`metadata` | Jenis`object` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`cache_control` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

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

**Teks + imej**

`{type:image,source:{type:base64,media_type,data}} atau sumber dengan type=url`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext |
| Parameter`required` | Kontrakmodel, messages, max\_tokens |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | KontrakBaca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan. |

Kitar hayat: `exact retained published method`

Hantar ID model yang tepat dan medan wajib.

Simpan setiap item yang dikembalikan dan pengecam asalnya.

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · low

Kadar standard Apabila usaha penaakulan ditetapkan kepada low

Usaha penaakulan · max

Kadar standard Apabila usaha penaakulan ditetapkan kepada max

Usaha penaakulan · medium

Kadar standard Apabila usaha penaakulan ditetapkan kepada medium

Usaha penaakulan · xhigh

Kadar standard Apabila usaha penaakulan ditetapkan kepada xhigh

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 2 | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · Anthropic Messages

Badan JSON minimum yang lengkapcurl · gunakan dokumen UTF-8 andaPython · simpan hasil lengkap

```json
{
  "model": "openai/gpt-6-astra",
  "max_tokens": 4096,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ]
}
```

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

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

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

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

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

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

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

### Terima dan simpan hasil

#### Ailoot Ultra · Anthropic Messages

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`model` | Jenisstring |
| Medan`content[]` | Jenistext\|thinking\|tool\_use\|other content block |
| Medan`stop_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages)

**Ailoot Ultra · OpenAI Responses** `POST /v1/responses` `openai/gpt-6-astra`

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses)

OpenAI /`openai/gpt-6-astra`

ID model

- `gpt-6-astra`
- `openai/gpt-6-astra`
- `~openai/gpt-astra-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`

Output

`text`

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had openai/gpt-6-astra | Lalai— |
| Medan`input` | Jenis`string\|input_item[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].type` | Jenis`string` | KeperluanPilihan | Nilai & had message, reasoning, function\_call, function\_call\_output | Lalai— |
| Medan`input[].content` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output; kekalkan call\_id sebenar yang dipulangkan | Lalai— |
| Medan`input[].output` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output | Lalai— |
| Medan`max_output_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.summary` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.verbosity` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`include` | Jenis`string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`store` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`previous_response_id` | Jenis`string` | KeperluanTidak disokong | Nilai & had Keperluan ID: Hanya ID respons sebenar daripada penerusan yang disokong Syarat: Sertakan semula sejarah perbualan sebenar dengan setiap permintaan. | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_key` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`Teks input atau bahagian input_text`

**Teks + imej**

`{type:input_image,image_url}`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext |
| Parameter`required` | Kontrakmodel, input |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | KontrakBaca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan. |

Kitar hayat: `exact retained published method`

Hantar ID model yang tepat dan medan wajib.

Simpan setiap item yang dikembalikan dan pengecam asalnya.

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · low

Kadar standard Apabila usaha penaakulan ditetapkan kepada low

Usaha penaakulan · max

Kadar standard Apabila usaha penaakulan ditetapkan kepada max

Usaha penaakulan · medium

Kadar standard Apabila usaha penaakulan ditetapkan kepada medium

Usaha penaakulan · xhigh

Kadar standard Apabila usaha penaakulan ditetapkan kepada xhigh

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 2 | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · OpenAI Responses

Badan JSON minimum yang lengkapcurl · gunakan dokumen UTF-8 andaPython · simpan hasil lengkap

```json
{
  "model": "openai/gpt-6-astra",
  "input": [
    {
      "content": "Hello, how are you?",
      "role": "user",
      "type": "message"
    }
  ]
}
```

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

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'openai/gpt-6-astra', 'input': [{'content': 'Hello, how are you?', 'role': 'user', 'type': 'message'}]}
payload['input'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

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

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

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'openai/gpt-6-astra', 'input': [{'content': 'Hello, how are you?', 'role': 'user', 'type': 'message'}]}
payload['input'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

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

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

### Terima dan simpan hasil

#### Ailoot Ultra · OpenAI Responses

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap item output dan bahagian kandungan, call\_id fungsi sebenar, penaakulan disulitkan serta data penggunaan. Semasa penstriman, kekalkan identiti peristiwa/item yang lengkap.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`status` | Jenisstring |
| Medan`output[]` | Jenismessage\|reasoning\|function\_call\|other item |
| Medan`output[].content[]` | Jeniscontent part |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses)

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `~openai/gpt-astra-latest`

[`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat)

OpenAI /`~openai/gpt-astra-latest`

ID model

- `gpt-6-astra`
- `openai/gpt-6-astra`
- `~openai/gpt-astra-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`

Output

`text`

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had ~openai/gpt-astra-latest | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had Contoh: system, user, assistant, tool, function Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model. Bergantung pada model | Lalai— |
| Medan`messages[].content` | Jenis`string\|content_part[]\|null` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_calls` | Jenis`tool_call[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan | Lalai— |
| Medan`messages[].name` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].reasoning_content` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya | Lalai— |
| Medan`messages[].reasoning_details` | Jenis`object\|array` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`max_completion_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`stream_options.include_usage` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`stop` | Jenis`string\|string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`function_tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].type` | Jenis`string` | KeperluanPilihan | Nilai & had function Bergantung pada model | Lalai— |
| Medan`tools[].function.name` | Jenis`string` | KeperluanDiperlukan | Nilai & had Terpakai apabila: alat fungsi dibekalkan | Lalai— |
| Medan`tools[].function.description` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tools[].function.parameters` | Jenis`JSON_schema` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`response_format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning_effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had Medan keserasian | Lalai— |
| Medan`functions` | Jenis`function[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`function_call` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`modalities` | Jenis`string[]` | KeperluanPilihan | Nilai & had text | Lalai— |
| Medan`provider` | Jenis`object` | KeperluanPilihan | Nilai & had Syarat: provider.options ditolak pada laluan teks Ultra ini | Lalai— |
| Medan`cache_control.ttl` | Jenis`string` | KeperluanPilihan | Nilai & had Syarat: 1h ditolak pada lokasi cache prompt yang digunakan | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`messages[].content`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, messages |
| Parameter`material_types` | Kontraktext |
| Parameter`messages` | Kontraktatasusunan mesej dengan struktur role/content |
| Parameter`file_material` | Kontrakdokumen UTF-8 sebenar dimasukkan sebagai teks literal; ID fail tidak diandaikan |
| Parameter`optional_controls` | Kontrakstream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parameter`control_scope` | Kontrakkhusus model; alat fungsi pengguna berbeza daripada alat yang dihoskan |
| Parameter`output_modalities` | Kontraktext |
| Parameter`hosted_operations` | Kontrakfalse |
| Parameter`multimodal_input_binding` | Kontraknull |

Kitar hayat: `synchronous_or_streamed`

Hantar ID model yang tepat bersama messages.

Panjang konteks bukan had output.

Fail teks boleh membekalkan teks literal; input imej/audio/objek fail memerlukan pengikatan tepat.

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · low

Kadar standard Apabila usaha penaakulan ditetapkan kepada low

Usaha penaakulan · max

Kadar standard Apabila usaha penaakulan ditetapkan kepada max

Usaha penaakulan · medium

Kadar standard Apabila usaha penaakulan ditetapkan kepada medium

Usaha penaakulan · xhigh

Kadar standard Apabila usaha penaakulan ditetapkan kepada xhigh

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 2 | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · OpenAI Chat

curlPython SDKPenstriman Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "~openai/gpt-astra-latest", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

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

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='~openai/gpt-astra-latest',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

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

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

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

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

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

with client.chat.completions.stream(model='~openai/gpt-astra-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")
```

### Terima dan simpan hasil

#### Ailoot Ultra · OpenAI Chat

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`choices[].index` | Jenisinteger |
| Medan`choices[].message.content` | Jenisstring\|null |
| Medan`choices[].message.tool_calls` | Jenistool\_call\[\] |
| Medan`choices[].message.reasoning_content` | Jenisstring |
| Medan`choices[].message.reasoning_details` | Jenisobject\|array |
| Medan`choices[].finish_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=chat), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=chat), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=chat), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=chat), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=chat)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `~openai/gpt-astra-latest`

[`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages)

OpenAI /`~openai/gpt-astra-latest`

ID model

- `gpt-6-astra`
- `openai/gpt-6-astra`
- `~openai/gpt-astra-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks

Hasil

json · sse

### Tersedia di Ailoot · input & kaedah

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

Input

`text`

Output

`json`, `sse`

Format output

JSON atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had ~openai/gpt-astra-latest | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had user, assistant | Lalai— |
| Medan`messages[].content` | Jenis`string` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |

Gabungan bahan input

**Teks** · Teks UTF-8

`rentetan messages[].content`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, messages, max\_tokens |
| Parameter`optional_controls` | Kontrakstream |
| Parameter`material_types` | Kontraktext |
| Parameter`text_file_material` | KontrakBaca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan. |

Kitar hayat: `synchronous_or_streamed`

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · low

Kadar standard Apabila usaha penaakulan ditetapkan kepada low

Usaha penaakulan · max

Kadar standard Apabila usaha penaakulan ditetapkan kepada max

Usaha penaakulan · medium

Kadar standard Apabila usaha penaakulan ditetapkan kepada medium

Usaha penaakulan · xhigh

Kadar standard Apabila usaha penaakulan ditetapkan kepada xhigh

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 2 | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · Anthropic Messages

Badan JSON minimum yang lengkapcurl · gunakan dokumen UTF-8 andaPython · simpan hasil lengkap

```json
{
  "model": "~openai/gpt-astra-latest",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

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

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

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

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

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

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

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

### Terima dan simpan hasil

#### Ailoot Ultra · Anthropic Messages

JSON atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`model` | Jenisstring |
| Medan`content[]` | Jenistext\|thinking\|tool\_use\|other content block |
| Medan`stop_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=messages), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=messages), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=messages), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=messages), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=messages)

**Ailoot Ultra · OpenAI Responses** `POST /v1/responses` `~openai/gpt-astra-latest`

[`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses)

OpenAI /`~openai/gpt-astra-latest`

ID model

- `gpt-6-astra`
- `openai/gpt-6-astra`
- `~openai/gpt-astra-latest`

### Pengenalan

GPT-6 Astra ditujukan untuk penaakulan yang rumit, pengaturcaraan, penyelidikan dan penyediaan dokumen. Menggunakan teks, imej dan alat dalam tugasan berbilang langkah.

Input yang diterima

Teks

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

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

Input

`text`

Output

`text`

Format output

json or SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had ~openai/gpt-astra-latest | Lalai— |
| Medan`input` | Jenis`string\|input_item[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].type` | Jenis`string` | KeperluanPilihan | Nilai & had message, reasoning, function\_call, function\_call\_output | Lalai— |
| Medan`input[].content` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`input[].call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output; kekalkan call\_id sebenar yang dipulangkan | Lalai— |
| Medan`input[].output` | Jenis`string\|content_part[]` | KeperluanPilihan | Nilai & had Terpakai apabila: function\_call\_output | Lalai— |
| Medan`max_output_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning.summary` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`text.verbosity` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`include` | Jenis`string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`store` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`previous_response_id` | Jenis`string` | KeperluanTidak disokong | Nilai & had Keperluan ID: Hanya ID respons sebenar daripada penerusan yang disokong Syarat: Sertakan semula sejarah perbualan sebenar dengan setiap permintaan. | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_key` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`input text or input_text part`

**Teks + imej**

`{type:input_image,image_url}`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`material_types` | Kontraktext |
| Parameter`required` | Kontrakmodel, input |
| Parameter`optional_controls` | Kontraknull |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`text_file_material` | KontrakBaca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan. |

Kitar hayat: `exact retained published method`

Hantar ID model yang tepat dan medan wajib.

Simpan setiap item yang dikembalikan dan pengecam asalnya.

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · low

Kadar standard Apabila usaha penaakulan ditetapkan kepada low

Usaha penaakulan · max

Kadar standard Apabila usaha penaakulan ditetapkan kepada max

Usaha penaakulan · medium

Kadar standard Apabila usaha penaakulan ditetapkan kepada medium

Usaha penaakulan · xhigh

Kadar standard Apabila usaha penaakulan ditetapkan kepada xhigh

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasuk272,000 | Caj Input · Token input **$0.02** / 1K token Output · Token output **$0.1** / 1K token Input · Bacaan cache **$0.002** / 1K token Input · Penulisan cache **$0.025** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |
| KonfigurasiTahap panjang permintaan 2 | Jadual kadar— | Token konteks, melebihi272,000 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.04** / 1K token Output · Token output **$0.15** / 1K token Input · Bacaan cache **$0.004** / 1K token Input · Penulisan cache **$0.05** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · OpenAI Responses

Badan JSON minimum yang lengkapcurl · gunakan dokumen UTF-8 andaPython · simpan hasil lengkap

```json
{
  "model": "~openai/gpt-astra-latest",
  "input": [
    {
      "content": "Hello, how are you?",
      "role": "user",
      "type": "message"
    }
  ]
}
```

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

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': '~openai/gpt-astra-latest', 'input': [{'content': 'Hello, how are you?', 'role': 'user', 'type': 'message'}]}
payload['input'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

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

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

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': '~openai/gpt-astra-latest', 'input': [{'content': 'Hello, how are you?', 'role': 'user', 'type': 'message'}]}
payload['input'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

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

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

### Terima dan simpan hasil

#### Ailoot Ultra · OpenAI Responses

json or SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap item output dan bahagian kandungan, call\_id fungsi sebenar, penaakulan disulitkan serta data penggunaan. Semasa penstriman, kekalkan identiti peristiwa/item yang lengkap.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`status` | Jenisstring |
| Medan`output[]` | Jenismessage\|reasoning\|function\_call\|other item |
| Medan`output[].content[]` | Jeniscontent part |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

<strong>Ailoot</strong> [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses)
**Ailoot Ultra** [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses), [`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses)

#### Alias laluan kaedah

`/chat/completions`

#### ID pemanggil berkaitan

[`openai/gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=openai%2Fgpt-6-astra&fmt=responses), [`gpt`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt&fmt=responses), [`gpt-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-latest&fmt=responses), [`~openai/gpt-astra-latest`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=~openai%2Fgpt-astra-latest&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Core&caller=gpt-6-astra&fmt=responses), [`gpt-6-astra`](https://ailoot.ai/models/ms/#m=openai%2Fgpt-6-astra&route=Ultra&caller=gpt-6-astra&fmt=responses)

FAQ · OpenAI: GPT-6 Astra

Apakah input dan hasil yang tersedia?

`POST /v1/messages` · `gpt-6-astra`: `text`, `image` → `text` `POST /v1/responses` · `gpt-6-astra`: `text`, `image` → `text` `POST /v1/chat/completions` · `gpt-6-astra`: `text`, `image` → `text` `POST /v1/chat/completions` · `gpt-6-astra`: `text` → `text` `POST /v1/messages` · `gpt-6-astra`: `text` → `json`, `sse` `POST /v1/messages` · `gpt`: `text`, `image` → `text` `POST /v1/responses` · `gpt`: `text`, `image` → `text` `POST /v1/chat/completions` · `gpt`: `text`, `image` → `text` `POST /v1/messages` · `gpt-latest`: `text`, `image` → `text` `POST /v1/responses` · `gpt-latest`: `text`, `image` → `text` `POST /v1/chat/completions` · `gpt-latest`: `text`, `image` → `text` `POST /v1/responses` · `gpt-6-astra`: `text` → `text` `POST /v1/chat/completions` · `openai/gpt-6-astra`: `text` → `text` `POST /v1/messages` · `openai/gpt-6-astra`: `text` → `text` `POST /v1/responses` · `openai/gpt-6-astra`: `text` → `text` `POST /v1/chat/completions` · `~openai/gpt-astra-latest`: `text` → `text` `POST /v1/messages` · `~openai/gpt-astra-latest`: `text` → `json`, `sse` `POST /v1/responses` · `~openai/gpt-astra-latest`: `text` → `text`

Apakah medan yang digunakan oleh permintaan?

`POST /v1/messages` · `gpt-6-astra`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/responses` · `gpt-6-astra`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `gpt-6-astra`: `model`, `messages`, `stream` `POST /v1/chat/completions` · `gpt-6-astra`: `model`, `messages`, `stream` `POST /v1/messages` · `gpt-6-astra`: `model`, `messages`, `max_tokens`, `stream` `POST /v1/messages` · `gpt`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/responses` · `gpt`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `gpt`: `model`, `messages`, `stream` `POST /v1/messages` · `gpt-latest`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/responses` · `gpt-latest`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `gpt-latest`: `model`, `messages`, `stream` `POST /v1/responses` · `gpt-6-astra`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `openai/gpt-6-astra`: `model`, `messages`, `stream`, `modalities`, `provider` `POST /v1/messages` · `openai/gpt-6-astra`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1/responses` · `openai/gpt-6-astra`: `model`, `input`, `instructions`, `stream` `POST /v1/chat/completions` · `~openai/gpt-astra-latest`: `model`, `messages`, `stream`, `modalities`, `provider` `POST /v1/messages` · `~openai/gpt-astra-latest`: `model`, `messages`, `max_tokens`, `stream` `POST /v1/responses` · `~openai/gpt-astra-latest`: `model`, `input`, `instructions`, `stream`

Apakah had yang terpakai?

`POST /v1/messages` · `gpt-6-astra`: `ctx`: `1050000`; `max_out`: `128000`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/responses` · `gpt-6-astra`: `ctx`: `1050000`; `max_out`: `128000` `POST /v1/chat/completions` · `gpt-6-astra`: `ctx`: `1050000`; `max_out`: `128000`; `messages.min_items`: `1` `POST /v1/chat/completions` · `gpt-6-astra`: `messages.min_items`: `1` `POST /v1/messages` · `gpt`: `ctx`: `1050000`; `max_out`: `128000`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/responses` · `gpt`: `ctx`: `1050000`; `max_out`: `128000` `POST /v1/chat/completions` · `gpt`: `ctx`: `1050000`; `max_out`: `128000`; `messages.min_items`: `1` `POST /v1/messages` · `gpt-latest`: `ctx`: `1050000`; `max_out`: `128000`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/responses` · `gpt-latest`: `ctx`: `1050000`; `max_out`: `128000` `POST /v1/chat/completions` · `gpt-latest`: `ctx`: `1050000`; `max_out`: `128000`; `messages.min_items`: `1` `POST /v1/chat/completions` · `openai/gpt-6-astra`: `messages.min_items`: `1` `POST /v1/messages` · `openai/gpt-6-astra`: `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1/chat/completions` · `~openai/gpt-astra-latest`: `messages.min_items`: `1`

Sambungkan Ailoot kepada Claude Code, OpenCode, Hermes atau aplikasi anda.

## Syarikat dan portfolio projeknya

Syarikat dan portfolio projeknya: jutaan pelanggan; jualan bernilai berbilion setiap bulan.

## Beli token dengan diskaun.

Diskaun langganan untuk penggunaan berkala. Kod promosi — sehingga 50% bagi pembelian token.

Langganan

Pilih pelan berdiskaun untuk permintaan berkala anda.

Kod promosi sehingga 50%

Masukkan kod semasa pembelian. Harga dikira semula mengikut promosi semasa.

Perbelanjaan dalam sejarah

Model, token dan jumlah disimpan bagi setiap permintaan.

[Pilih langganan](https://ailoot.ai/docs/ms/billing/subscriptions/) · [Lihat harga model](https://ailoot.ai/models/ms/)

## Sambungkan API kepada produk yang anda jual.

SaaS, aplikasi dan bot — di bawah tawaran rasmi serta perjanjian lesen Ailoot. Untuk jualan semula, mohon lesen penjual semula.

Aplikasi komersial

Tambahkan penjanaan teks, imej, video dan audio pada ciri berbayar perkhidmatan anda.

Lesen penjual semula

Hantar keterangan projek dan susunan akses. Minta terma penggunaan serta jualan semula secara bertulis.

Dokumen pada laman

Tawaran, perjanjian lesen dan dasar pemprosesan data tersedia sebelum sambungan.

[Mohon lesen penjual semula](mailto:support@ailoot.ai) · [Tawaran dan perjanjian lesen](https://ailoot.ai/legal/offer?lang=ms)

## Ailoot · Syarikat dan portfolio projeknya





Ailoot berteraskan pengalaman operasi yang mantap, pangkalan pelanggan yang besar, perkhidmatan yang stabil dan pemantauan KPI berterusan.





Syarikat dan portfolio projeknya: jutaan pelanggan; jualan bernilai berbilion setiap bulan.





Ailoot menggunakan pengalaman operasi ini untuk akses API kepada ciri AI dalam produk pelanggan, ejen, aplikasi dan automasi.
