OpenAI: GPT-6 Astra
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Ailoot · Messages Anthropic
POST /v1/messagesgpt-6-astra - Ailoot · OpenAI Responses
POST /v1/responsesgpt-6-astra - Ailoot · Chat OpenAI
POST /v1/chat/completionsgpt-6-astra - Ailoot Ultra · Chat OpenAI
POST /v1/chat/completionsgpt-6-astra - Ailoot Ultra · Messages Anthropic
POST /v1/messagesgpt-6-astra - Ailoot · Messages Anthropic
POST /v1/messagesgpt - Ailoot · OpenAI Responses
POST /v1/responsesgpt - Ailoot · Chat OpenAI
POST /v1/chat/completionsgpt - Ailoot · Messages Anthropic
POST /v1/messagesgpt-latest - Ailoot · OpenAI Responses
POST /v1/responsesgpt-latest - Ailoot · Chat OpenAI
POST /v1/chat/completionsgpt-latest - Ailoot Ultra · OpenAI Responses
POST /v1/responsesgpt-6-astra - Ailoot Ultra · Chat OpenAI
POST /v1/chat/completionsopenai/gpt-6-astra - Ailoot Ultra · Messages Anthropic
POST /v1/messagesopenai/gpt-6-astra - Ailoot Ultra · OpenAI Responses
POST /v1/responsesopenai/gpt-6-astra - Ailoot Ultra · Chat OpenAI
POST /v1/chat/completions~openai/gpt-astra-latest - Ailoot Ultra · Messages Anthropic
POST /v1/messages~openai/gpt-astra-latest - Ailoot Ultra · OpenAI Responses
POST /v1/responses~openai/gpt-astra-latest
À propos du modèle
Cette description présente les capacités du modèle. Les entrées, sorties et options disponibles dans Ailoot pour la méthode sélectionnée figurent ci-dessous.
La recherche, le développement et la création de documents
GPT-6 Astra est un modèle d’OpenAI pour les tâches exigeantes de raisonnement, de programmation, de recherche et de travail professionnel. Le fabricant met particulièrement en avant la création de documents et l’interaction avec une interface informatique. Le modèle vise les séquences d’actions où il faut réunir des informations, accomplir le travail et tenir compte des résultats des étapes précédentes.
Selon OpenAI, Astra conserve l’intention générale lorsque les exigences évoluent : il tient compte des ajouts, ajuste le déroulement du travail et répond aux questions liées. Lorsque les informations se prêtent à différentes interprétations, il est utile de lui définir les limites de la tâche, les critères d’achèvement et la règle pour demander des précisions. Le ton et la structure du résultat peuvent également être décrits explicitement : le modèle tend à produire des réponses détaillées et mises en forme.
Le raisonnement comme partie du travail
Les niveaux low, medium, high, xhigh et max sont pris en charge. La désactivation du raisonnement par none n’est pas prévue. Le niveau d’effort règle le processus de résolution, tandis que le volume du texte final est défini séparément. Un raisonnement complexe peut aboutir à une réponse brève si c’est le résultat souhaité.
OpenAI prévoit deux modes d’exécution indépendants de la profondeur d’analyse : standard et étendu. Le mode standard s’applique par défaut. Le mode étendu vise les tâches difficiles où du temps supplémentaire et une utilisation accrue de tokens sont acceptables. Le mode détermine la façon d’exécuter, et le niveau d’effort la profondeur du raisonnement à l’intérieur de ce mode. Ce choix est décrit pour Responses et nécessite une prise en charge par l’application ; la capacité publiée par le fabricant ne confirme pas son activation dans la méthode Ailoot actuelle.
La famille GPT-6 prévoit la modification du niveau de raisonnement entre les continuations du dialogue, avec conservation du préfixe de requête antérieur. La poursuite du travail nécessite la transmission de l’état correspondant. Les fonctions de pilotage d’une tâche longue dépendent du format d’interaction et de la prise en charge de ces opérations par l’application.
Les contenus textuels et visuels
Le modèle accepte du texte et des images, renvoie du texte et prend en charge la sortie en streaming et le résultat structuré. OpenAI indique un contexte de 1 050 000 tokens, une entrée maximale de 922 000 et une sortie maximale de 128 000 tokens. La limite des connaissances est le 30 avril 2026.
L’image sert à analyser le contenu visible, à lire le texte et à poser des questions sur les détails. Différents niveaux de détail sont prévus pour une analyse approfondie. La taille du contexte et la limite de réponse diffèrent : un long contenu source ne devient pas automatiquement un résultat aussi long.
Plusieurs actions dans une même tâche
L’ensemble officiel des fonctions comprend les appels de fonctions, la recherche dans les fichiers et sur Internet, l’exécution de code et de commandes, la modification de fichiers, les actions sur ordinateur et la recherche de l’outil nécessaire. Les appels d’outils utilisent Responses ; Chat Completions prend en charge les échanges textuels sans outils.
Avec une connexion adaptée, le fabricant prévoit aussi un outil distinct de génération d’images, le travail avec des compétences et des moyens externes via MCP. La réponse directe du modèle reste textuelle ; le résultat de la génération d’une image est créé par un outil distinct. Sa présence chez le fabricant ne signifie pas que ces fonctions sont connectées dans chaque méthode Ailoot.
La documentation de la famille décrit les appels asynchrones : pendant que l’application exécute une fonction, le modèle peut poursuivre une partie indépendante du travail. Elle prévoit aussi la précision de la tâche pendant l’exécution et sa poursuite avec les actions déjà achevées. Pour ces usages, l’application doit prendre en charge l’interaction correspondante et restituer les résultats des appels.
La forme du résultat et le contexte répété
La sortie structurée aide à préparer le résultat selon un schéma fourni, par exemple des données avec des champs et des types définis. Le schéma organise le résultat, tandis que l’exactitude des informations nécessite une vérification du contenu. Pour un travail long, la conservation de l’état de raisonnement disponible et la réduction du contexte accumulé sont prévues.
La mise en cache vise le préfixe d’entrée répété. La prise en charge de la recherche, des commandes ou des actions sur ordinateur décrit les capacités du modèle lorsque les outils nécessaires sont connectés ; l’ensemble des fonctions d’une requête précise dépend de la méthode choisie et des connexions disponibles.
Cas pratique
Cas pratique
Exemple technique en anglais
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.Résultat attendu
A memo with recommendation, evidence references, unresolved data issue and acceptance criteria for a later full migration.Vérifier le résultat
Check that the 40-record result is not reported as a completed 50-record migration and that missing owner_id remains a blocker.Ailoot · Messages Anthropic POST /v1/messages gpt-6-astra
gpt-6-astragpt-6-astragptgpt-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte · Images
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot · Messages Anthropic POST /v1/messages
- Types d’entrée
text,image- Types de sortie
text- Contexte
- 1 050 000 tokens
- Sortie maximale
- 128 000 tokens
- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt-6-astra | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites user, assistant | Par défaut— |
Champmessages[].content | Typestring|content_block[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champsystem | Typestring|content_block[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceObligatoire | Valeurs et limites Minimum: 1 La limite s’applique à: plafond exact du modèle ou de la fiche sélectionnés | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstop_sequences | Typestring[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typetool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].name | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: outil fourni | Par défaut— |
Champtools[].description | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtools[].input_schema | TypeJSON_schema | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtool_choice | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champthinking.type | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champthinking.budget_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champoutput_config.effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmetadata | Typeobject | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champcache_control | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
messages[].content ou bloc type=text
Texte + image
{type:image,source:{type:base64,media_type,data}} ou source type=url
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratmodel, messages, max_tokens |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | Contratcontenu UTF-8 réel inséré sous forme de texte ; les identifiants de fichiers et les URLs nécessitent une prise en charge exacte distincte |
Cycle de vie : exact retained published method
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/messages- Entrée
- 0,01 USD / 1K
- Sortie
- 0,05 USD / 1K
- Lecture du cache
- 0,001 USD / 1K
- Écriture dans le cache
- 0,0125 USD / 1K
- Écriture dans le cache, 5 min
- 0,0125 USD / 1K tokens
- Multiplicateur fast
- ×2
- Multiplicateur flex
- ×0.5
Prix selon la longueur de la requête · Messages Anthropic
| Taille de la requête, en tokens | Entrée | Sortie | Lecture du cache | Écriture dans le cache | Cache 5 min | Cache 1 h |
|---|---|---|---|---|---|---|
| Taille de la requête, en tokens(0; 272 000] | Entrée0,01 USD | Sortie0,05 USD | Lecture du cache0,001 USD | Écriture dans le cache0,0125 USD | Cache 5 min0,0125 USD | Cache 1 hTarif de base : — |
| Taille de la requête, en tokens(272 000; ∞) | Entrée0,02 USD | Sortie0,075 USD | Lecture du cache0,002 USD | Écriture dans le cache0,025 USD | Cache 5 min0,025 USD | Cache 1 hTarif de base : — |
Tarifs en USD par 1K tokens. Si aucun tarif n’est défini, le tarif de base de cette méthode est hérité ; «—» signifie qu’aucun tarif de base n’est défini.
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Détails du tarif de référence
Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.
Barèmes de référence du modèle
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationOpenAI Chat · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Exemples de requêtes
Ailoot · Messages Anthropic
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
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
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"))
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);
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")
Recevoir et enregistrer les résultats
Ailoot · Messages Anthropic
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez tous les blocs de contenu, les signatures de raisonnement et les identifiants réels d’utilisation d’outils. Assemblez tous les deltas de blocs SSE ; un premier bloc de texte ne constitue pas la sortie complète.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champmodel | Typestring |
Champcontent[] | Typetext|thinking|tool_use|other content block |
Champstop_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot · OpenAI Responses POST /v1/responses gpt-6-astra
gpt-6-astragpt-6-astragptgpt-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte · Images
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot · OpenAI Responses POST /v1/responses
- Types d’entrée
text,image- Types de sortie
text- Contexte
- 1 050 000 tokens
- Sortie maximale
- 128 000 tokens
- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt-6-astra | Par défaut— |
Champinput | Typestring|input_item[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].type | Typestring | ExigenceFacultatif | Valeurs et limites message, reasoning, function_call, function_call_output | Par défaut— |
Champinput[].content | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output ; conservez le call_id réellement renvoyé | Par défaut— |
Champinput[].output | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output | Par défaut— |
Champmax_output_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typetool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.summary | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.verbosity | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinclude | Typestring[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstore | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprevious_response_id | Typestring | ExigenceFacultatif | Valeurs et limites Exigence relative à l’ID: Uniquement un identifiant de réponse réel issu d’une continuation prise en charge Selon le modèle | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_key | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
texte d’entrée ou partie input_text
Texte + image
{type:input_image,image_url}
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratmodel, input |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | Contratcontenu UTF-8 réel inséré sous forme de texte ; les identifiants de fichiers et les URLs nécessitent une prise en charge exacte distincte |
Cycle de vie : exact retained published method
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/responses- Entrée
- 0,01 USD / 1K
- Sortie
- 0,05 USD / 1K
- Lecture du cache
- 0,001 USD / 1K
- Écriture dans le cache
- 0,0125 USD / 1K
- Écriture dans le cache, 5 min
- 0,0125 USD / 1K tokens
- Multiplicateur fast
- ×2
- Multiplicateur flex
- ×0.5
Prix selon la longueur de la requête · OpenAI Responses
| Taille de la requête, en tokens | Entrée | Sortie | Lecture du cache | Écriture dans le cache | Cache 5 min | Cache 1 h |
|---|---|---|---|---|---|---|
| Taille de la requête, en tokens(0; 272 000] | Entrée0,01 USD | Sortie0,05 USD | Lecture du cache0,001 USD | Écriture dans le cache0,0125 USD | Cache 5 min0,0125 USD | Cache 1 hTarif de base : — |
| Taille de la requête, en tokens(272 000; ∞) | Entrée0,02 USD | Sortie0,075 USD | Lecture du cache0,002 USD | Écriture dans le cache0,025 USD | Cache 5 min0,025 USD | Cache 1 hTarif de base : — |
Tarifs en USD par 1K tokens. Si aucun tarif n’est défini, le tarif de base de cette méthode est hérité ; «—» signifie qu’aucun tarif de base n’est défini.
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Détails du tarif de référence
Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.
Barèmes de référence du modèle
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationOpenAI Chat · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Exemples de requêtes
Ailoot · OpenAI Responses
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
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
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"))
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);
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")
Recevoir et enregistrer les résultats
Ailoot · OpenAI Responses
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque élément de sortie et chaque partie de contenu, le call_id réel de l’appel de fonction, le raisonnement chiffré et les données d’utilisation. En streaming, conservez l’identité complète des événements et des éléments.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champstatus | Typestring |
Champoutput[] | Typemessage|reasoning|function_call|other item |
Champoutput[].content[] | Typecontent part |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot · Chat OpenAI POST /v1/chat/completions gpt-6-astra
gpt-6-astragpt-6-astragptgpt-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte · Images
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot · Chat OpenAI POST /v1/chat/completions
- Types d’entrée
text,image- Types de sortie
text- Contexte
- 1 050 000 tokens
- Sortie maximale
- 128 000 tokens
- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt-6-astra | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites Exemples : system, user, assistant, tool, function Conditions: Ces rôles sont explicitement représentés par les types de compatibilité du code source ; l’ensemble exact des rôles reste propre à chaque modèle. Selon le modèle | Par défaut— |
Champmessages[].content | Typestring|content_part[]|null | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].tool_calls | Typetool_call[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].tool_call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: role=tool ; utilisez l’identifiant réellement renvoyé | Par défaut— |
Champmessages[].name | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].reasoning_content | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: Réinjectez le raisonnement réellement renvoyé lorsque ce modèle l’utilise | Par défaut— |
Champmessages[].reasoning_details | Typeobject|array | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champmax_completion_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champstream_options.include_usage | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstop | Typestring|string[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typefunction_tool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].type | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].function.name | Typestring | ExigenceObligatoire | Valeurs et limites S’applique lorsque: outil de fonction fourni | Par défaut— |
Champtools[].function.description | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtools[].function.parameters | TypeJSON_schema | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champresponse_format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning_effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites Champ de compatibilité | Par défaut— |
Champfunctions | Typefunction[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champfunction_call | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
messages[].content
Texte + image
{type:image_url,image_url:{url,detail}}
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratmodel, messages |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | Contratcontenu UTF-8 réel inséré sous forme de texte ; les identifiants de fichiers et les URLs nécessitent une prise en charge exacte distincte |
Cycle de vie : exact retained published method
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/chat/completions- Entrée
- 0,01 USD / 1K
- Sortie
- 0,05 USD / 1K
- Lecture du cache
- 0,001 USD / 1K
- Écriture dans le cache
- 0,0125 USD / 1K
- Écriture dans le cache, 5 min
- 0,0125 USD / 1K tokens
- Multiplicateur fast
- ×2
- Multiplicateur flex
- ×0.5
Prix selon la longueur de la requête · Chat OpenAI
| Taille de la requête, en tokens | Entrée | Sortie | Lecture du cache | Écriture dans le cache | Cache 5 min | Cache 1 h |
|---|---|---|---|---|---|---|
| Taille de la requête, en tokens(0; 272 000] | Entrée0,01 USD | Sortie0,05 USD | Lecture du cache0,001 USD | Écriture dans le cache0,0125 USD | Cache 5 min0,0125 USD | Cache 1 hTarif de base : — |
| Taille de la requête, en tokens(272 000; ∞) | Entrée0,02 USD | Sortie0,075 USD | Lecture du cache0,002 USD | Écriture dans le cache0,025 USD | Cache 5 min0,025 USD | Cache 1 hTarif de base : — |
Tarifs en USD par 1K tokens. Si aucun tarif n’est défini, le tarif de base de cette méthode est hérité ; «—» signifie qu’aucun tarif de base n’est défini.
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Détails du tarif de référence
Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.
Barèmes de référence du modèle
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationOpenAI Chat · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Exemples de requêtes
Ailoot · Chat OpenAI
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
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
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"))
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);
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")
Recevoir et enregistrer les résultats
Ailoot · Chat OpenAI
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque choix avec son contenu, ses appels d’outils et son raisonnement. En SSE, assemblez les deltas par index de choix et d’outil, puis conservez le motif final de terminaison et les données d’utilisation.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champchoices[].index | Typeinteger |
Champchoices[].message.content | Typestring|null |
Champchoices[].message.tool_calls | Typetool_call[] |
Champchoices[].message.reasoning_content | Typestring |
Champchoices[].message.reasoning_details | Typeobject|array |
Champchoices[].finish_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot Ultra · Chat OpenAI POST /v1/chat/completions gpt-6-astra
gpt-6-astragpt-6-astraopenai/gpt-6-astra~openai/gpt-astra-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · Chat OpenAI POST /v1/chat/completions
- Types d’entrée
text- Types de sortie
text- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt-6-astra | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites Selon le modèle | Par défaut— |
Champmessages[].content | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: Conversation textuelle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
messages[].content
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrecontent_type | Contratapplication/json |
Paramètrerequired | Contratmodel, messages |
Paramètrematerial_types | Contrattext |
Paramètremessages | Contrattableau de messages avec une structure role/content |
Paramètrefile_material | Contratdocument UTF-8 réel inséré sous forme de texte littéral ; aucun identifiant de fichier déduit |
Paramètreoptional_controls | Contratstream |
Paramètrecontrol_scope | ContratConversation textuelle ; stream est un booléen dont la valeur par défaut est false. |
Paramètreoutput_modalities | Contrattext |
Paramètrehosted_operations | Contratfalse |
Paramètremultimodal_input_binding | Contratnull |
Alias de méthode : /chat/completions
Cycle de vie : synchronous_or_streamed
Envoyez l’identifiant exact du modèle avec messages.
La longueur du contexte n’est pas un plafond de sortie.
Un fichier texte peut fournir du texte littéral ; les entrées image/audio/objets fichier nécessitent une liaison exacte.
Tarifs
Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.
- Mode rapide
- Tarif standard Lorsque le mode rapide est sélectionné
- Mode Flex
- Tarif standard Lorsque le mode flex est sélectionné
- Effort de raisonnement maximal
- Tarif standard Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)
- Effort de raisonnement · élevé
- Tarif standard Lorsque l’effort de raisonnement est élevé
- Effort de raisonnement · faible
- Tarif standard Lorsque l’effort de raisonnement est faible
- Effort de raisonnement · maximal
- Tarif standard Lorsque l’effort de raisonnement est maximal
- Effort de raisonnement · moyen
- Tarif standard Lorsque l’effort de raisonnement est moyen
- Effort de raisonnement · xhigh
- Tarif standard Lorsque l’effort de raisonnement vaut xhigh
Tarifs Ailoot
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationTarifs de base des tokens | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 1 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 2 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot Ultra · Chat OpenAI
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
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"))
Recevoir et enregistrer les résultats
Ailoot Ultra · Chat OpenAI
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque choix avec son contenu, ses appels d’outils et son raisonnement. En SSE, assemblez les deltas par index de choix et d’outil, puis conservez le motif final de terminaison et les données d’utilisation.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champchoices[].index | Typeinteger |
Champchoices[].message.content | Typestring|null |
Champchoices[].message.tool_calls | Typetool_call[] |
Champchoices[].message.reasoning_content | Typestring |
Champchoices[].message.reasoning_details | Typeobject|array |
Champchoices[].finish_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot Ultra · Messages Anthropic POST /v1/messages gpt-6-astra
gpt-6-astragpt-6-astraopenai/gpt-6-astra~openai/gpt-astra-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte
- Résultats
- json · sse
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · Messages Anthropic POST /v1/messages
- Types d’entrée
text- Types de sortie
json,sse- Format de sortie
- JSON ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt-6-astra | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites user, assistant | Par défaut— |
Champmessages[].content | Typestring | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Combinaisons d’éléments d’entrée
Texte · Texte UTF-8
chaîne messages[].content
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrecontent_type | Contratapplication/json |
Paramètrerequired | Contratmodel, messages, max_tokens |
Paramètreoptional_controls | Contratstream |
Paramètrematerial_types | Contrattext |
Paramètretext_file_material | ContratLisez le document UTF-8 réel et placez son texte dans l’entrée indiquée ou dans la chaîne de contenu du message. |
Cycle de vie : synchronous_or_streamed
Tarifs
Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.
- Mode rapide
- Tarif standard Lorsque le mode rapide est sélectionné
- Mode Flex
- Tarif standard Lorsque le mode flex est sélectionné
- Effort de raisonnement maximal
- Tarif standard Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)
- Effort de raisonnement · élevé
- Tarif standard Lorsque l’effort de raisonnement est élevé
- Effort de raisonnement · faible
- Tarif standard Lorsque l’effort de raisonnement est faible
- Effort de raisonnement · maximal
- Tarif standard Lorsque l’effort de raisonnement est maximal
- Effort de raisonnement · moyen
- Tarif standard Lorsque l’effort de raisonnement est moyen
- Effort de raisonnement · xhigh
- Tarif standard Lorsque l’effort de raisonnement vaut xhigh
Tarifs Ailoot
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationTarifs de base des tokens | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 1 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 2 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot Ultra · Messages Anthropic
{
"model": "gpt-6-astra",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}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
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))
Recevoir et enregistrer les résultats
Ailoot Ultra · Messages Anthropic
JSON ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez tous les blocs de contenu, les signatures de raisonnement et les identifiants réels d’utilisation d’outils. Assemblez tous les deltas de blocs SSE ; un premier bloc de texte ne constitue pas la sortie complète.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champmodel | Typestring |
Champcontent[] | Typetext|thinking|tool_use|other content block |
Champstop_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot · Messages Anthropic POST /v1/messages gpt
gptgpt-6-astragptgpt-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte · Images
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot · Messages Anthropic POST /v1/messages
- Types d’entrée
text,image- Types de sortie
text- Contexte
- 1 050 000 tokens
- Sortie maximale
- 128 000 tokens
- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites user, assistant | Par défaut— |
Champmessages[].content | Typestring|content_block[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champsystem | Typestring|content_block[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceObligatoire | Valeurs et limites Minimum: 1 La limite s’applique à: plafond exact du modèle ou de la fiche sélectionnés | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstop_sequences | Typestring[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typetool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].name | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: outil fourni | Par défaut— |
Champtools[].description | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtools[].input_schema | TypeJSON_schema | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtool_choice | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champthinking.type | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champthinking.budget_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champoutput_config.effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmetadata | Typeobject | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champcache_control | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
messages[].content ou bloc type=text
Texte + image
{type:image,source:{type:base64,media_type,data}} ou source type=url
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratmodel, messages, max_tokens |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | Contratcontenu UTF-8 réel inséré sous forme de texte ; les identifiants de fichiers et les URLs nécessitent une prise en charge exacte distincte |
Cycle de vie : exact retained published method
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/messages- Entrée
- 0,01 USD / 1K
- Sortie
- 0,05 USD / 1K
- Lecture du cache
- 0,001 USD / 1K
- Écriture dans le cache
- 0,0125 USD / 1K
- Écriture dans le cache, 5 min
- 0,0125 USD / 1K tokens
- Multiplicateur fast
- ×2
- Multiplicateur flex
- ×0.5
Prix selon la longueur de la requête · Messages Anthropic
| Taille de la requête, en tokens | Entrée | Sortie | Lecture du cache | Écriture dans le cache | Cache 5 min | Cache 1 h |
|---|---|---|---|---|---|---|
| Taille de la requête, en tokens(0; 272 000] | Entrée0,01 USD | Sortie0,05 USD | Lecture du cache0,001 USD | Écriture dans le cache0,0125 USD | Cache 5 min0,0125 USD | Cache 1 hTarif de base : — |
| Taille de la requête, en tokens(272 000; ∞) | Entrée0,02 USD | Sortie0,075 USD | Lecture du cache0,002 USD | Écriture dans le cache0,025 USD | Cache 5 min0,025 USD | Cache 1 hTarif de base : — |
Tarifs en USD par 1K tokens. Si aucun tarif n’est défini, le tarif de base de cette méthode est hérité ; «—» signifie qu’aucun tarif de base n’est défini.
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Détails du tarif de référence
Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.
Barèmes de référence du modèle
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationOpenAI Chat · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Exemples de requêtes
Ailoot · Messages Anthropic
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
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
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"))
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);
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")
Recevoir et enregistrer les résultats
Ailoot · Messages Anthropic
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez tous les blocs de contenu, les signatures de raisonnement et les identifiants réels d’utilisation d’outils. Assemblez tous les deltas de blocs SSE ; un premier bloc de texte ne constitue pas la sortie complète.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champmodel | Typestring |
Champcontent[] | Typetext|thinking|tool_use|other content block |
Champstop_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot · OpenAI Responses POST /v1/responses gpt
gptgpt-6-astragptgpt-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte · Images
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot · OpenAI Responses POST /v1/responses
- Types d’entrée
text,image- Types de sortie
text- Contexte
- 1 050 000 tokens
- Sortie maximale
- 128 000 tokens
- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt | Par défaut— |
Champinput | Typestring|input_item[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].type | Typestring | ExigenceFacultatif | Valeurs et limites message, reasoning, function_call, function_call_output | Par défaut— |
Champinput[].content | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output ; conservez le call_id réellement renvoyé | Par défaut— |
Champinput[].output | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output | Par défaut— |
Champmax_output_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typetool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.summary | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.verbosity | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinclude | Typestring[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstore | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprevious_response_id | Typestring | ExigenceFacultatif | Valeurs et limites Exigence relative à l’ID: Uniquement un identifiant de réponse réel issu d’une continuation prise en charge Selon le modèle | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_key | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
texte d’entrée ou partie input_text
Texte + image
{type:input_image,image_url}
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratmodel, input |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | Contratcontenu UTF-8 réel inséré sous forme de texte ; les identifiants de fichiers et les URLs nécessitent une prise en charge exacte distincte |
Cycle de vie : exact retained published method
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/responses- Entrée
- 0,01 USD / 1K
- Sortie
- 0,05 USD / 1K
- Lecture du cache
- 0,001 USD / 1K
- Écriture dans le cache
- 0,0125 USD / 1K
- Écriture dans le cache, 5 min
- 0,0125 USD / 1K tokens
- Multiplicateur fast
- ×2
- Multiplicateur flex
- ×0.5
Prix selon la longueur de la requête · OpenAI Responses
| Taille de la requête, en tokens | Entrée | Sortie | Lecture du cache | Écriture dans le cache | Cache 5 min | Cache 1 h |
|---|---|---|---|---|---|---|
| Taille de la requête, en tokens(0; 272 000] | Entrée0,01 USD | Sortie0,05 USD | Lecture du cache0,001 USD | Écriture dans le cache0,0125 USD | Cache 5 min0,0125 USD | Cache 1 hTarif de base : — |
| Taille de la requête, en tokens(272 000; ∞) | Entrée0,02 USD | Sortie0,075 USD | Lecture du cache0,002 USD | Écriture dans le cache0,025 USD | Cache 5 min0,025 USD | Cache 1 hTarif de base : — |
Tarifs en USD par 1K tokens. Si aucun tarif n’est défini, le tarif de base de cette méthode est hérité ; «—» signifie qu’aucun tarif de base n’est défini.
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Détails du tarif de référence
Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.
Barèmes de référence du modèle
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationOpenAI Chat · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Exemples de requêtes
Ailoot · OpenAI Responses
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
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
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"))
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);
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")
Recevoir et enregistrer les résultats
Ailoot · OpenAI Responses
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque élément de sortie et chaque partie de contenu, le call_id réel de l’appel de fonction, le raisonnement chiffré et les données d’utilisation. En streaming, conservez l’identité complète des événements et des éléments.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champstatus | Typestring |
Champoutput[] | Typemessage|reasoning|function_call|other item |
Champoutput[].content[] | Typecontent part |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot · Chat OpenAI POST /v1/chat/completions gpt
gptgpt-6-astragptgpt-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte · Images
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot · Chat OpenAI POST /v1/chat/completions
- Types d’entrée
text,image- Types de sortie
text- Contexte
- 1 050 000 tokens
- Sortie maximale
- 128 000 tokens
- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites Exemples : system, user, assistant, tool, function Conditions: Ces rôles sont explicitement représentés par les types de compatibilité du code source ; l’ensemble exact des rôles reste propre à chaque modèle. Selon le modèle | Par défaut— |
Champmessages[].content | Typestring|content_part[]|null | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].tool_calls | Typetool_call[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].tool_call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: role=tool ; utilisez l’identifiant réellement renvoyé | Par défaut— |
Champmessages[].name | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].reasoning_content | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: Réinjectez le raisonnement réellement renvoyé lorsque ce modèle l’utilise | Par défaut— |
Champmessages[].reasoning_details | Typeobject|array | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champmax_completion_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champstream_options.include_usage | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstop | Typestring|string[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typefunction_tool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].type | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].function.name | Typestring | ExigenceObligatoire | Valeurs et limites S’applique lorsque: outil de fonction fourni | Par défaut— |
Champtools[].function.description | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtools[].function.parameters | TypeJSON_schema | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champresponse_format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning_effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites Champ de compatibilité | Par défaut— |
Champfunctions | Typefunction[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champfunction_call | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
messages[].content
Texte + image
{type:image_url,image_url:{url,detail}}
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratmodel, messages |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | Contratcontenu UTF-8 réel inséré sous forme de texte ; les identifiants de fichiers et les URLs nécessitent une prise en charge exacte distincte |
Cycle de vie : exact retained published method
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/chat/completions- Entrée
- 0,01 USD / 1K
- Sortie
- 0,05 USD / 1K
- Lecture du cache
- 0,001 USD / 1K
- Écriture dans le cache
- 0,0125 USD / 1K
- Écriture dans le cache, 5 min
- 0,0125 USD / 1K tokens
- Multiplicateur fast
- ×2
- Multiplicateur flex
- ×0.5
Prix selon la longueur de la requête · Chat OpenAI
| Taille de la requête, en tokens | Entrée | Sortie | Lecture du cache | Écriture dans le cache | Cache 5 min | Cache 1 h |
|---|---|---|---|---|---|---|
| Taille de la requête, en tokens(0; 272 000] | Entrée0,01 USD | Sortie0,05 USD | Lecture du cache0,001 USD | Écriture dans le cache0,0125 USD | Cache 5 min0,0125 USD | Cache 1 hTarif de base : — |
| Taille de la requête, en tokens(272 000; ∞) | Entrée0,02 USD | Sortie0,075 USD | Lecture du cache0,002 USD | Écriture dans le cache0,025 USD | Cache 5 min0,025 USD | Cache 1 hTarif de base : — |
Tarifs en USD par 1K tokens. Si aucun tarif n’est défini, le tarif de base de cette méthode est hérité ; «—» signifie qu’aucun tarif de base n’est défini.
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Détails du tarif de référence
Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.
Barèmes de référence du modèle
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationOpenAI Chat · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Exemples de requêtes
Ailoot · Chat OpenAI
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
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
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"))
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);
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")
Recevoir et enregistrer les résultats
Ailoot · Chat OpenAI
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque choix avec son contenu, ses appels d’outils et son raisonnement. En SSE, assemblez les deltas par index de choix et d’outil, puis conservez le motif final de terminaison et les données d’utilisation.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champchoices[].index | Typeinteger |
Champchoices[].message.content | Typestring|null |
Champchoices[].message.tool_calls | Typetool_call[] |
Champchoices[].message.reasoning_content | Typestring |
Champchoices[].message.reasoning_details | Typeobject|array |
Champchoices[].finish_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot · Messages Anthropic POST /v1/messages gpt-latest
gpt-latestgpt-6-astragptgpt-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte · Images
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot · Messages Anthropic POST /v1/messages
- Types d’entrée
text,image- Types de sortie
text- Contexte
- 1 050 000 tokens
- Sortie maximale
- 128 000 tokens
- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt-latest | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites user, assistant | Par défaut— |
Champmessages[].content | Typestring|content_block[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champsystem | Typestring|content_block[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceObligatoire | Valeurs et limites Minimum: 1 La limite s’applique à: plafond exact du modèle ou de la fiche sélectionnés | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstop_sequences | Typestring[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typetool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].name | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: outil fourni | Par défaut— |
Champtools[].description | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtools[].input_schema | TypeJSON_schema | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtool_choice | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champthinking.type | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champthinking.budget_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champoutput_config.effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmetadata | Typeobject | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champcache_control | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
messages[].content ou bloc type=text
Texte + image
{type:image,source:{type:base64,media_type,data}} ou source type=url
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratmodel, messages, max_tokens |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | Contratcontenu UTF-8 réel inséré sous forme de texte ; les identifiants de fichiers et les URLs nécessitent une prise en charge exacte distincte |
Cycle de vie : exact retained published method
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/messages- Entrée
- 0,01 USD / 1K
- Sortie
- 0,05 USD / 1K
- Lecture du cache
- 0,001 USD / 1K
- Écriture dans le cache
- 0,0125 USD / 1K
- Écriture dans le cache, 5 min
- 0,0125 USD / 1K tokens
- Multiplicateur fast
- ×2
- Multiplicateur flex
- ×0.5
Prix selon la longueur de la requête · Messages Anthropic
| Taille de la requête, en tokens | Entrée | Sortie | Lecture du cache | Écriture dans le cache | Cache 5 min | Cache 1 h |
|---|---|---|---|---|---|---|
| Taille de la requête, en tokens(0; 272 000] | Entrée0,01 USD | Sortie0,05 USD | Lecture du cache0,001 USD | Écriture dans le cache0,0125 USD | Cache 5 min0,0125 USD | Cache 1 hTarif de base : — |
| Taille de la requête, en tokens(272 000; ∞) | Entrée0,02 USD | Sortie0,075 USD | Lecture du cache0,002 USD | Écriture dans le cache0,025 USD | Cache 5 min0,025 USD | Cache 1 hTarif de base : — |
Tarifs en USD par 1K tokens. Si aucun tarif n’est défini, le tarif de base de cette méthode est hérité ; «—» signifie qu’aucun tarif de base n’est défini.
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Détails du tarif de référence
Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.
Barèmes de référence du modèle
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationOpenAI Chat · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Exemples de requêtes
Ailoot · Messages Anthropic
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
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
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"))
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);
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")
Recevoir et enregistrer les résultats
Ailoot · Messages Anthropic
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez tous les blocs de contenu, les signatures de raisonnement et les identifiants réels d’utilisation d’outils. Assemblez tous les deltas de blocs SSE ; un premier bloc de texte ne constitue pas la sortie complète.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champmodel | Typestring |
Champcontent[] | Typetext|thinking|tool_use|other content block |
Champstop_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot · OpenAI Responses POST /v1/responses gpt-latest
gpt-latestgpt-6-astragptgpt-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte · Images
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot · OpenAI Responses POST /v1/responses
- Types d’entrée
text,image- Types de sortie
text- Contexte
- 1 050 000 tokens
- Sortie maximale
- 128 000 tokens
- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt-latest | Par défaut— |
Champinput | Typestring|input_item[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].type | Typestring | ExigenceFacultatif | Valeurs et limites message, reasoning, function_call, function_call_output | Par défaut— |
Champinput[].content | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output ; conservez le call_id réellement renvoyé | Par défaut— |
Champinput[].output | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output | Par défaut— |
Champmax_output_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typetool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.summary | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.verbosity | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinclude | Typestring[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstore | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprevious_response_id | Typestring | ExigenceFacultatif | Valeurs et limites Exigence relative à l’ID: Uniquement un identifiant de réponse réel issu d’une continuation prise en charge Selon le modèle | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_key | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
texte d’entrée ou partie input_text
Texte + image
{type:input_image,image_url}
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratmodel, input |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | Contratcontenu UTF-8 réel inséré sous forme de texte ; les identifiants de fichiers et les URLs nécessitent une prise en charge exacte distincte |
Cycle de vie : exact retained published method
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/responses- Entrée
- 0,01 USD / 1K
- Sortie
- 0,05 USD / 1K
- Lecture du cache
- 0,001 USD / 1K
- Écriture dans le cache
- 0,0125 USD / 1K
- Écriture dans le cache, 5 min
- 0,0125 USD / 1K tokens
- Multiplicateur fast
- ×2
- Multiplicateur flex
- ×0.5
Prix selon la longueur de la requête · OpenAI Responses
| Taille de la requête, en tokens | Entrée | Sortie | Lecture du cache | Écriture dans le cache | Cache 5 min | Cache 1 h |
|---|---|---|---|---|---|---|
| Taille de la requête, en tokens(0; 272 000] | Entrée0,01 USD | Sortie0,05 USD | Lecture du cache0,001 USD | Écriture dans le cache0,0125 USD | Cache 5 min0,0125 USD | Cache 1 hTarif de base : — |
| Taille de la requête, en tokens(272 000; ∞) | Entrée0,02 USD | Sortie0,075 USD | Lecture du cache0,002 USD | Écriture dans le cache0,025 USD | Cache 5 min0,025 USD | Cache 1 hTarif de base : — |
Tarifs en USD par 1K tokens. Si aucun tarif n’est défini, le tarif de base de cette méthode est hérité ; «—» signifie qu’aucun tarif de base n’est défini.
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Détails du tarif de référence
Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.
Barèmes de référence du modèle
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationOpenAI Chat · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Exemples de requêtes
Ailoot · OpenAI Responses
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
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
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"))
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);
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")
Recevoir et enregistrer les résultats
Ailoot · OpenAI Responses
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque élément de sortie et chaque partie de contenu, le call_id réel de l’appel de fonction, le raisonnement chiffré et les données d’utilisation. En streaming, conservez l’identité complète des événements et des éléments.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champstatus | Typestring |
Champoutput[] | Typemessage|reasoning|function_call|other item |
Champoutput[].content[] | Typecontent part |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot · Chat OpenAI POST /v1/chat/completions gpt-latest
gpt-latestgpt-6-astragptgpt-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte · Images
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot · Chat OpenAI POST /v1/chat/completions
- Types d’entrée
text,image- Types de sortie
text- Contexte
- 1 050 000 tokens
- Sortie maximale
- 128 000 tokens
- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt-latest | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites Exemples : system, user, assistant, tool, function Conditions: Ces rôles sont explicitement représentés par les types de compatibilité du code source ; l’ensemble exact des rôles reste propre à chaque modèle. Selon le modèle | Par défaut— |
Champmessages[].content | Typestring|content_part[]|null | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].tool_calls | Typetool_call[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].tool_call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: role=tool ; utilisez l’identifiant réellement renvoyé | Par défaut— |
Champmessages[].name | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].reasoning_content | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: Réinjectez le raisonnement réellement renvoyé lorsque ce modèle l’utilise | Par défaut— |
Champmessages[].reasoning_details | Typeobject|array | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champmax_completion_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champstream_options.include_usage | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstop | Typestring|string[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typefunction_tool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].type | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].function.name | Typestring | ExigenceObligatoire | Valeurs et limites S’applique lorsque: outil de fonction fourni | Par défaut— |
Champtools[].function.description | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtools[].function.parameters | TypeJSON_schema | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champresponse_format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning_effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites Champ de compatibilité | Par défaut— |
Champfunctions | Typefunction[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champfunction_call | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
messages[].content
Texte + image
{type:image_url,image_url:{url,detail}}
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext, image |
Paramètrerequired | Contratmodel, messages |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | Contratcontenu UTF-8 réel inséré sous forme de texte ; les identifiants de fichiers et les URLs nécessitent une prise en charge exacte distincte |
Cycle de vie : exact retained published method
Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.
Tarifs
Tarifs des méthodes Ailoot
POST /v1/chat/completions- Entrée
- 0,01 USD / 1K
- Sortie
- 0,05 USD / 1K
- Lecture du cache
- 0,001 USD / 1K
- Écriture dans le cache
- 0,0125 USD / 1K
- Écriture dans le cache, 5 min
- 0,0125 USD / 1K tokens
- Multiplicateur fast
- ×2
- Multiplicateur flex
- ×0.5
Prix selon la longueur de la requête · Chat OpenAI
| Taille de la requête, en tokens | Entrée | Sortie | Lecture du cache | Écriture dans le cache | Cache 5 min | Cache 1 h |
|---|---|---|---|---|---|---|
| Taille de la requête, en tokens(0; 272 000] | Entrée0,01 USD | Sortie0,05 USD | Lecture du cache0,001 USD | Écriture dans le cache0,0125 USD | Cache 5 min0,0125 USD | Cache 1 hTarif de base : — |
| Taille de la requête, en tokens(272 000; ∞) | Entrée0,02 USD | Sortie0,075 USD | Lecture du cache0,002 USD | Écriture dans le cache0,025 USD | Cache 5 min0,025 USD | Cache 1 hTarif de base : — |
Tarifs en USD par 1K tokens. Si aucun tarif n’est défini, le tarif de base de cette méthode est hérité ; «—» signifie qu’aucun tarif de base n’est défini.
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Détails du tarif de référence
Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.
Barèmes de référence du modèle
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationOpenAI Chat · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Chat · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationAnthropic Messages · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Tarifs de base par token | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 1 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationOpenAI Responses · Palier 2 selon la longueur de la requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Exemples de requêtes
Ailoot · Chat OpenAI
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
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
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"))
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);
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")
Recevoir et enregistrer les résultats
Ailoot · Chat OpenAI
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque choix avec son contenu, ses appels d’outils et son raisonnement. En SSE, assemblez les deltas par index de choix et d’outil, puis conservez le motif final de terminaison et les données d’utilisation.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champchoices[].index | Typeinteger |
Champchoices[].message.content | Typestring|null |
Champchoices[].message.tool_calls | Typetool_call[] |
Champchoices[].message.reasoning_content | Typestring |
Champchoices[].message.reasoning_details | Typeobject|array |
Champchoices[].finish_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot Ultra · OpenAI Responses POST /v1/responses gpt-6-astra
gpt-6-astragpt-6-astraopenai/gpt-6-astra~openai/gpt-astra-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · OpenAI Responses POST /v1/responses
- Types d’entrée
text- Types de sortie
text- Format de sortie
- json or SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites gpt-6-astra | Par défaut— |
Champinput | Typestring|input_item[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].type | Typestring | ExigenceFacultatif | Valeurs et limites message, reasoning, function_call, function_call_output | Par défaut— |
Champinput[].content | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output ; conservez le call_id réellement renvoyé | Par défaut— |
Champinput[].output | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output | Par défaut— |
Champmax_output_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typetool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.summary | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.verbosity | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinclude | Typestring[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstore | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprevious_response_id | Typestring | ExigenceNon pris en charge | Valeurs et limites Exigence relative à l’ID: Uniquement un identifiant de réponse réel issu d’une continuation prise en charge Conditions: Renvoyez l’historique réel de la conversation avec chaque requête. | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_key | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
input text or input_text part
Texte + image
{type:input_image,image_url}
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext |
Paramètrerequired | Contratmodel, input |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | ContratLisez le document UTF-8 réel et placez son texte dans l’entrée indiquée ou dans la chaîne de contenu du message. |
Cycle de vie : exact retained published method
Envoyez l’identifiant exact du modèle et les champs obligatoires.
Conservez chaque élément renvoyé et ses identifiants d’origine.
Tarifs
Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.
- Mode rapide
- Tarif standard Lorsque le mode rapide est sélectionné
- Mode Flex
- Tarif standard Lorsque le mode flex est sélectionné
- Effort de raisonnement maximal
- Tarif standard Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)
- Effort de raisonnement · élevé
- Tarif standard Lorsque l’effort de raisonnement est élevé
- Effort de raisonnement · faible
- Tarif standard Lorsque l’effort de raisonnement est faible
- Effort de raisonnement · maximal
- Tarif standard Lorsque l’effort de raisonnement est maximal
- Effort de raisonnement · moyen
- Tarif standard Lorsque l’effort de raisonnement est moyen
- Effort de raisonnement · xhigh
- Tarif standard Lorsque l’effort de raisonnement vaut xhigh
Tarifs Ailoot
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationTarifs de base par jeton | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 1 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 2 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot Ultra · OpenAI Responses
{
"model": "gpt-6-astra",
"input": [
{
"content": "Hello, how are you?",
"role": "user",
"type": "message"
}
]
}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
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))
Recevoir et enregistrer les résultats
Ailoot Ultra · OpenAI Responses
json or SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque élément de sortie et chaque partie de contenu, le call_id réel de l’appel de fonction, le raisonnement chiffré et les données d’utilisation. En streaming, conservez l’identité complète des événements et des éléments.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champstatus | Typestring |
Champoutput[] | Typemessage|reasoning|function_call|other item |
Champoutput[].content[] | Typecontent part |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot Ultra · Chat OpenAI POST /v1/chat/completions openai/gpt-6-astra
openai/gpt-6-astragpt-6-astraopenai/gpt-6-astra~openai/gpt-astra-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · Chat OpenAI POST /v1/chat/completions
- Types d’entrée
text- Types de sortie
text- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites openai/gpt-6-astra | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites Exemples : system, user, assistant, tool, function Conditions: Ces rôles sont explicitement représentés par les types de compatibilité du code source ; l’ensemble exact des rôles reste propre à chaque modèle. Selon le modèle | Par défaut— |
Champmessages[].content | Typestring|content_part[]|null | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].tool_calls | Typetool_call[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].tool_call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: role=tool ; utilisez l’identifiant réellement renvoyé | Par défaut— |
Champmessages[].name | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].reasoning_content | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: Réinjectez le raisonnement réellement renvoyé lorsque ce modèle l’utilise | Par défaut— |
Champmessages[].reasoning_details | Typeobject|array | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champmax_completion_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champstream_options.include_usage | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstop | Typestring|string[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typefunction_tool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].type | Typestring | ExigenceFacultatif | Valeurs et limites function Selon le modèle | Par défaut— |
Champtools[].function.name | Typestring | ExigenceObligatoire | Valeurs et limites S’applique lorsque: outil de fonction fourni | Par défaut— |
Champtools[].function.description | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtools[].function.parameters | TypeJSON_schema | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champresponse_format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning_effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites Champ de compatibilité | Par défaut— |
Champfunctions | Typefunction[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champfunction_call | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmodalities | Typestring[] | ExigenceFacultatif | Valeurs et limites text | Par défaut— |
Champprovider | Typeobject | ExigenceFacultatif | Valeurs et limites Conditions: provider.options est rejeté sur cette route textuelle Ultra | Par défaut— |
Champcache_control.ttl | Typestring | ExigenceFacultatif | Valeurs et limites Conditions: 1h est rejeté dans les emplacements réels du cache de prompt | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
messages[].content
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrecontent_type | Contratapplication/json |
Paramètrerequired | Contratmodel, messages |
Paramètrematerial_types | Contrattext |
Paramètremessages | Contrattableau de messages avec une structure role/content |
Paramètrefile_material | Contratdocument UTF-8 réel inséré sous forme de texte littéral ; aucun identifiant de fichier déduit |
Paramètreoptional_controls | Contratstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Paramètrecontrol_scope | Contratpropre au modèle ; les outils de fonctions de l’utilisateur diffèrent des outils hébergés |
Paramètreoutput_modalities | Contrattext |
Paramètrehosted_operations | Contratfalse |
Paramètremultimodal_input_binding | Contratnull |
Cycle de vie : synchronous_or_streamed
Envoyez l’identifiant exact du modèle avec messages.
La longueur du contexte n’est pas un plafond de sortie.
Un fichier texte peut fournir du texte littéral ; les entrées image/audio/objets fichier nécessitent une liaison exacte.
Tarifs
Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.
- Mode rapide
- Tarif standard Lorsque le mode rapide est sélectionné
- Mode Flex
- Tarif standard Lorsque le mode flex est sélectionné
- Effort de raisonnement maximal
- Tarif standard Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)
- Effort de raisonnement · élevé
- Tarif standard Lorsque l’effort de raisonnement est élevé
- Effort de raisonnement · faible
- Tarif standard Lorsque l’effort de raisonnement est faible
- Effort de raisonnement · maximal
- Tarif standard Lorsque l’effort de raisonnement est maximal
- Effort de raisonnement · moyen
- Tarif standard Lorsque l’effort de raisonnement est moyen
- Effort de raisonnement · xhigh
- Tarif standard Lorsque l’effort de raisonnement vaut xhigh
Tarifs Ailoot
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationTarifs de base des tokens | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 1 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 2 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot Ultra · Chat OpenAI
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
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"))
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")
Recevoir et enregistrer les résultats
Ailoot Ultra · Chat OpenAI
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque choix avec son contenu, ses appels d’outils et son raisonnement. En SSE, assemblez les deltas par index de choix et d’outil, puis conservez le motif final de terminaison et les données d’utilisation.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champchoices[].index | Typeinteger |
Champchoices[].message.content | Typestring|null |
Champchoices[].message.tool_calls | Typetool_call[] |
Champchoices[].message.reasoning_content | Typestring |
Champchoices[].message.reasoning_details | Typeobject|array |
Champchoices[].finish_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot Ultra · Messages Anthropic POST /v1/messages openai/gpt-6-astra
openai/gpt-6-astragpt-6-astraopenai/gpt-6-astra~openai/gpt-astra-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · Messages Anthropic POST /v1/messages
- Types d’entrée
text- Types de sortie
text- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites openai/gpt-6-astra | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites user, assistant | Par défaut— |
Champmessages[].content | Typestring|content_block[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champsystem | Typestring|content_block[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceObligatoire | Valeurs et limites Minimum: 1 La limite s’applique à: plafond exact du modèle ou de la fiche sélectionnés | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstop_sequences | Typestring[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typetool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].name | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: outil fourni | Par défaut— |
Champtools[].description | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtools[].input_schema | TypeJSON_schema | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtool_choice | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champthinking.type | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champthinking.budget_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champoutput_config.effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmetadata | Typeobject | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champcache_control | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
messages[].content ou bloc type=text
Texte + image
{type:image,source:{type:base64,media_type,data}} ou source type=url
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext |
Paramètrerequired | Contratmodel, messages, max_tokens |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | ContratLisez le document UTF-8 réel et placez son texte dans l’entrée indiquée ou dans la chaîne de contenu du message. |
Cycle de vie : exact retained published method
Envoyez l’identifiant exact du modèle et les champs obligatoires.
Conservez chaque élément renvoyé et ses identifiants d’origine.
Tarifs
Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.
- Mode rapide
- Tarif standard Lorsque le mode rapide est sélectionné
- Mode Flex
- Tarif standard Lorsque le mode flex est sélectionné
- Effort de raisonnement maximal
- Tarif standard Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)
- Effort de raisonnement · élevé
- Tarif standard Lorsque l’effort de raisonnement est élevé
- Effort de raisonnement · faible
- Tarif standard Lorsque l’effort de raisonnement est faible
- Effort de raisonnement · maximal
- Tarif standard Lorsque l’effort de raisonnement est maximal
- Effort de raisonnement · moyen
- Tarif standard Lorsque l’effort de raisonnement est moyen
- Effort de raisonnement · xhigh
- Tarif standard Lorsque l’effort de raisonnement vaut xhigh
Tarifs Ailoot
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationTarifs de base des tokens | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 1 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 2 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot Ultra · Messages Anthropic
{
"model": "openai/gpt-6-astra",
"max_tokens": 4096,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
]
}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
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))
Recevoir et enregistrer les résultats
Ailoot Ultra · Messages Anthropic
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez tous les blocs de contenu, les signatures de raisonnement et les identifiants réels d’utilisation d’outils. Assemblez tous les deltas de blocs SSE ; un premier bloc de texte ne constitue pas la sortie complète.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champmodel | Typestring |
Champcontent[] | Typetext|thinking|tool_use|other content block |
Champstop_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot Ultra · OpenAI Responses POST /v1/responses openai/gpt-6-astra
openai/gpt-6-astragpt-6-astraopenai/gpt-6-astra~openai/gpt-astra-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · OpenAI Responses POST /v1/responses
- Types d’entrée
text- Types de sortie
text- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites openai/gpt-6-astra | Par défaut— |
Champinput | Typestring|input_item[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].type | Typestring | ExigenceFacultatif | Valeurs et limites message, reasoning, function_call, function_call_output | Par défaut— |
Champinput[].content | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output ; conservez le call_id réellement renvoyé | Par défaut— |
Champinput[].output | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output | Par défaut— |
Champmax_output_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typetool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.summary | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.verbosity | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinclude | Typestring[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstore | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprevious_response_id | Typestring | ExigenceNon pris en charge | Valeurs et limites Exigence relative à l’ID: Uniquement un identifiant de réponse réel issu d’une continuation prise en charge Conditions: Renvoyez l’historique réel de la conversation avec chaque requête. | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_key | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
texte d’entrée ou partie input_text
Texte + image
{type:input_image,image_url}
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext |
Paramètrerequired | Contratmodel, input |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | ContratLisez le document UTF-8 réel et placez son texte dans l’entrée indiquée ou dans la chaîne de contenu du message. |
Cycle de vie : exact retained published method
Envoyez l’identifiant exact du modèle et les champs obligatoires.
Conservez chaque élément renvoyé et ses identifiants d’origine.
Tarifs
Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.
- Mode rapide
- Tarif standard Lorsque le mode rapide est sélectionné
- Mode Flex
- Tarif standard Lorsque le mode flex est sélectionné
- Effort de raisonnement maximal
- Tarif standard Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)
- Effort de raisonnement · élevé
- Tarif standard Lorsque l’effort de raisonnement est élevé
- Effort de raisonnement · faible
- Tarif standard Lorsque l’effort de raisonnement est faible
- Effort de raisonnement · maximal
- Tarif standard Lorsque l’effort de raisonnement est maximal
- Effort de raisonnement · moyen
- Tarif standard Lorsque l’effort de raisonnement est moyen
- Effort de raisonnement · xhigh
- Tarif standard Lorsque l’effort de raisonnement vaut xhigh
Tarifs Ailoot
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationTarifs de base des tokens | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 1 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 2 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot Ultra · OpenAI Responses
{
"model": "openai/gpt-6-astra",
"input": [
{
"content": "Hello, how are you?",
"role": "user",
"type": "message"
}
]
}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
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))
Recevoir et enregistrer les résultats
Ailoot Ultra · OpenAI Responses
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque élément de sortie et chaque partie de contenu, le call_id réel de l’appel de fonction, le raisonnement chiffré et les données d’utilisation. En streaming, conservez l’identité complète des événements et des éléments.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champstatus | Typestring |
Champoutput[] | Typemessage|reasoning|function_call|other item |
Champoutput[].content[] | Typecontent part |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot Ultra · Chat OpenAI POST /v1/chat/completions ~openai/gpt-astra-latest
~openai/gpt-astra-latestgpt-6-astraopenai/gpt-6-astra~openai/gpt-astra-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · Chat OpenAI POST /v1/chat/completions
- Types d’entrée
text- Types de sortie
text- Format de sortie
- json ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites ~openai/gpt-astra-latest | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites Nombre minimal d’éléments: 1 | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites Exemples : system, user, assistant, tool, function Conditions: Ces rôles sont explicitement représentés par les types de compatibilité du code source ; l’ensemble exact des rôles reste propre à chaque modèle. Selon le modèle | Par défaut— |
Champmessages[].content | Typestring|content_part[]|null | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].tool_calls | Typetool_call[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].tool_call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: role=tool ; utilisez l’identifiant réellement renvoyé | Par défaut— |
Champmessages[].name | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champmessages[].reasoning_content | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: Réinjectez le raisonnement réellement renvoyé lorsque ce modèle l’utilise | Par défaut— |
Champmessages[].reasoning_details | Typeobject|array | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champmax_completion_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champstream_options.include_usage | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstop | Typestring|string[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typefunction_tool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools[].type | Typestring | ExigenceFacultatif | Valeurs et limites function Selon le modèle | Par défaut— |
Champtools[].function.name | Typestring | ExigenceObligatoire | Valeurs et limites S’applique lorsque: outil de fonction fourni | Par défaut— |
Champtools[].function.description | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtools[].function.parameters | TypeJSON_schema | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champresponse_format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning_effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites Champ de compatibilité | Par défaut— |
Champfunctions | Typefunction[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champfunction_call | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champmodalities | Typestring[] | ExigenceFacultatif | Valeurs et limites text | Par défaut— |
Champprovider | Typeobject | ExigenceFacultatif | Valeurs et limites Conditions: provider.options est rejeté sur cette route textuelle Ultra | Par défaut— |
Champcache_control.ttl | Typestring | ExigenceFacultatif | Valeurs et limites Conditions: 1h est rejeté dans les emplacements réels du cache de prompt | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
messages[].content
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrecontent_type | Contratapplication/json |
Paramètrerequired | Contratmodel, messages |
Paramètrematerial_types | Contrattext |
Paramètremessages | Contrattableau de messages avec une structure role/content |
Paramètrefile_material | Contratdocument UTF-8 réel inséré sous forme de texte littéral ; aucun identifiant de fichier déduit |
Paramètreoptional_controls | Contratstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Paramètrecontrol_scope | Contratpropre au modèle ; les outils de fonctions de l’utilisateur diffèrent des outils hébergés |
Paramètreoutput_modalities | Contrattext |
Paramètrehosted_operations | Contratfalse |
Paramètremultimodal_input_binding | Contratnull |
Cycle de vie : synchronous_or_streamed
Envoyez l’identifiant exact du modèle avec messages.
La longueur du contexte n’est pas un plafond de sortie.
Un fichier texte peut fournir du texte littéral ; les entrées image/audio/objets fichier nécessitent une liaison exacte.
Tarifs
Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.
- Mode rapide
- Tarif standard Lorsque le mode rapide est sélectionné
- Mode Flex
- Tarif standard Lorsque le mode flex est sélectionné
- Effort de raisonnement maximal
- Tarif standard Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)
- Effort de raisonnement · élevé
- Tarif standard Lorsque l’effort de raisonnement est élevé
- Effort de raisonnement · faible
- Tarif standard Lorsque l’effort de raisonnement est faible
- Effort de raisonnement · maximal
- Tarif standard Lorsque l’effort de raisonnement est maximal
- Effort de raisonnement · moyen
- Tarif standard Lorsque l’effort de raisonnement est moyen
- Effort de raisonnement · xhigh
- Tarif standard Lorsque l’effort de raisonnement vaut xhigh
Tarifs Ailoot
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationTarifs de base des tokens | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 1 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 2 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot Ultra · Chat OpenAI
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
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"))
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")
Recevoir et enregistrer les résultats
Ailoot Ultra · Chat OpenAI
json ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque choix avec son contenu, ses appels d’outils et son raisonnement. En SSE, assemblez les deltas par index de choix et d’outil, puis conservez le motif final de terminaison et les données d’utilisation.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champchoices[].index | Typeinteger |
Champchoices[].message.content | Typestring|null |
Champchoices[].message.tool_calls | Typetool_call[] |
Champchoices[].message.reasoning_content | Typestring |
Champchoices[].message.reasoning_details | Typeobject|array |
Champchoices[].finish_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot Ultra · Messages Anthropic POST /v1/messages ~openai/gpt-astra-latest
~openai/gpt-astra-latestgpt-6-astraopenai/gpt-6-astra~openai/gpt-astra-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte
- Résultats
- json · sse
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · Messages Anthropic POST /v1/messages
- Types d’entrée
text- Types de sortie
json,sse- Format de sortie
- JSON ou SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites ~openai/gpt-astra-latest | Par défaut— |
Champmessages | Typemessage[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champmessages[].role | Typestring | ExigenceObligatoire | Valeurs et limites user, assistant | Par défaut— |
Champmessages[].content | Typestring | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champmax_tokens | Typeinteger | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Combinaisons d’éléments d’entrée
Texte · Texte UTF-8
chaîne messages[].content
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrecontent_type | Contratapplication/json |
Paramètrerequired | Contratmodel, messages, max_tokens |
Paramètreoptional_controls | Contratstream |
Paramètrematerial_types | Contrattext |
Paramètretext_file_material | ContratLisez le document UTF-8 réel et placez son texte dans l’entrée indiquée ou dans la chaîne de contenu du message. |
Cycle de vie : synchronous_or_streamed
Tarifs
Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.
- Mode rapide
- Tarif standard Lorsque le mode rapide est sélectionné
- Mode Flex
- Tarif standard Lorsque le mode flex est sélectionné
- Effort de raisonnement maximal
- Tarif standard Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)
- Effort de raisonnement · élevé
- Tarif standard Lorsque l’effort de raisonnement est élevé
- Effort de raisonnement · faible
- Tarif standard Lorsque l’effort de raisonnement est faible
- Effort de raisonnement · maximal
- Tarif standard Lorsque l’effort de raisonnement est maximal
- Effort de raisonnement · moyen
- Tarif standard Lorsque l’effort de raisonnement est moyen
- Effort de raisonnement · xhigh
- Tarif standard Lorsque l’effort de raisonnement vaut xhigh
Tarifs Ailoot
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationTarifs de base des tokens | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 1 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 2 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot Ultra · Messages Anthropic
{
"model": "~openai/gpt-astra-latest",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}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
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))
Recevoir et enregistrer les résultats
Ailoot Ultra · Messages Anthropic
JSON ou SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez tous les blocs de contenu, les signatures de raisonnement et les identifiants réels d’utilisation d’outils. Assemblez tous les deltas de blocs SSE ; un premier bloc de texte ne constitue pas la sortie complète.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champmodel | Typestring |
Champcontent[] | Typetext|thinking|tool_use|other content block |
Champstop_reason | Typestring|null |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
Ailoot Ultra · OpenAI Responses POST /v1/responses ~openai/gpt-astra-latest
~openai/gpt-astra-latestgpt-6-astraopenai/gpt-6-astra~openai/gpt-astra-latest
Premiers pas
GPT-6 Astra est conçu pour le raisonnement complexe, la programmation, la recherche et la préparation de documents. Il travaille avec du texte, des images et des outils dans les tâches en plusieurs étapes.
- Entrées acceptées
- Texte
- Résultats
- Texte
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · OpenAI Responses POST /v1/responses
- Types d’entrée
text- Types de sortie
text- Format de sortie
- json or SSE
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites ~openai/gpt-astra-latest | Par défaut— |
Champinput | Typestring|input_item[] | ExigenceObligatoire | Valeurs et limites | Par défaut— |
Champinstructions | Typestring | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].type | Typestring | ExigenceFacultatif | Valeurs et limites message, reasoning, function_call, function_call_output | Par défaut— |
Champinput[].content | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites | Par défaut— |
Champinput[].call_id | Typestring | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output ; conservez le call_id réellement renvoyé | Par défaut— |
Champinput[].output | Typestring|content_part[] | ExigenceFacultatif | Valeurs et limites S’applique lorsque: function_call_output | Par défaut— |
Champmax_output_tokens | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Selon le modèle | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
Champtemperature | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtop_p | Typenumber | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtools | Typetool[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtool_choice | Typestring|object | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champparallel_tool_calls | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.effort | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champreasoning.summary | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.format | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champtext.verbosity | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champinclude | Typestring[] | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champstore | Typeboolean | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprevious_response_id | Typestring | ExigenceNon pris en charge | Valeurs et limites Exigence relative à l’ID: Uniquement un identifiant de réponse réel issu d’une continuation prise en charge Conditions: Renvoyez l’historique réel de la conversation avec chaque requête. | Par défaut— |
Champservice_tier | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_key | Typestring | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Champprompt_cache_options | Typeobject | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
Combinaisons d’éléments d’entrée
Texte · Texte UTF8
input text or input_text part
Texte + image
{type:input_image,image_url}
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrematerial_types | Contrattext |
Paramètrerequired | Contratmodel, input |
Paramètreoptional_controls | Contratnull |
Paramètrecontent_type | Contratapplication/json |
Paramètretext_file_material | ContratLisez le document UTF-8 réel et placez son texte dans l’entrée indiquée ou dans la chaîne de contenu du message. |
Cycle de vie : exact retained published method
Envoyez l’identifiant exact du modèle et les champs obligatoires.
Conservez chaque élément renvoyé et ses identifiants d’origine.
Tarifs
Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.
- Mode rapide
- Tarif standard Lorsque le mode rapide est sélectionné
- Mode Flex
- Tarif standard Lorsque le mode flex est sélectionné
- Effort de raisonnement maximal
- Tarif standard Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)
- Effort de raisonnement · élevé
- Tarif standard Lorsque l’effort de raisonnement est élevé
- Effort de raisonnement · faible
- Tarif standard Lorsque l’effort de raisonnement est faible
- Effort de raisonnement · maximal
- Tarif standard Lorsque l’effort de raisonnement est maximal
- Effort de raisonnement · moyen
- Tarif standard Lorsque l’effort de raisonnement est moyen
- Effort de raisonnement · xhigh
- Tarif standard Lorsque l’effort de raisonnement vaut xhigh
Tarifs Ailoot
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Tokens de contexte, plus de | Tokens de contexte, jusqu’à la limite incluse | Coût |
|---|---|---|---|---|
| ConfigurationTarifs de base par jeton | Barème tarifaireTarif de base | Tokens de contexte, plus de— | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 1 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de0 | Tokens de contexte, jusqu’à la limite incluse272 000 | Coût Entrée · Tokens en entrée $0.02 / 1K tokens Sortie · Tokens en sortie $0.1 / 1K tokens Entrée · Lecture du cache $0.002 / 1K tokens Entrée · Écriture dans le cache $0.025 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
| ConfigurationPalier 2 de longueur de requête | Barème tarifaire— | Tokens de contexte, plus de272 000 | Tokens de contexte, jusqu’à la limite incluseSans borne supérieure | Coût Entrée · Tokens en entrée $0.04 / 1K tokens Sortie · Tokens en sortie $0.15 / 1K tokens Entrée · Lecture du cache $0.004 / 1K tokens Entrée · Écriture dans le cache $0.05 / 1K tokens Entrée · Écriture dans le cache, 1 h — / 1K tokens |
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Exemples de requêtes
Ailoot Ultra · OpenAI Responses
{
"model": "~openai/gpt-astra-latest",
"input": [
{
"content": "Hello, how are you?",
"role": "user",
"type": "message"
}
]
}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
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))
Recevoir et enregistrer les résultats
Ailoot Ultra · OpenAI Responses
json or SSE
Conserver tous les résultats terminés
Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.
Conservez chaque élément de sortie et chaque partie de contenu, le call_id réel de l’appel de fonction, le raisonnement chiffré et les données d’utilisation. En streaming, conservez l’identité complète des événements et des éléments.
Si la réponse d’origine doit être vérifiée
Conservez les identifiants de requête et de réponse ainsi que les en-têtes. Aucune URL générique de récupération des tâches textuelles n’est fournie.
Champs de la réponse
| Champ | Type |
|---|---|
Champid | Typestring |
Champstatus | Typestring |
Champoutput[] | Typemessage|reasoning|function_call|other item |
Champoutput[].content[] | Typecontent part |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Alias
Alias du modèle
Ailoot gpt-6-astra, gpt, gpt-latest
Ailoot Ultra gpt-6-astra, openai/gpt-6-astra, ~openai/gpt-astra-latest
Alias des chemins de méthode
/chat/completions
ID d’appel associés
openai/gpt-6-astra, gpt, gpt-latest, ~openai/gpt-astra-latest, gpt-6-astra, gpt-6-astra
FAQ · OpenAI: GPT-6 Astra
- Quelles entrées et quels résultats sont disponibles ?
POST /v1/messages·gpt-6-astra:text,image→textPOST /v1/responses·gpt-6-astra:text,image→textPOST /v1/chat/completions·gpt-6-astra:text,image→textPOST /v1/chat/completions·gpt-6-astra:text→textPOST /v1/messages·gpt-6-astra:text→json,ssePOST /v1/messages·gpt:text,image→textPOST /v1/responses·gpt:text,image→textPOST /v1/chat/completions·gpt:text,image→textPOST /v1/messages·gpt-latest:text,image→textPOST /v1/responses·gpt-latest:text,image→textPOST /v1/chat/completions·gpt-latest:text,image→textPOST /v1/responses·gpt-6-astra:text→textPOST /v1/chat/completions·openai/gpt-6-astra:text→textPOST /v1/messages·openai/gpt-6-astra:text→textPOST /v1/responses·openai/gpt-6-astra:text→textPOST /v1/chat/completions·~openai/gpt-astra-latest:text→textPOST /v1/messages·~openai/gpt-astra-latest:text→json,ssePOST /v1/responses·~openai/gpt-astra-latest:text→text- Quels champs la requête utilise-t-elle ?
POST /v1/messages·gpt-6-astra:model,messages,system,max_tokens,stream,metadataPOST /v1/responses·gpt-6-astra:model,input,instructions,streamPOST /v1/chat/completions·gpt-6-astra:model,messages,streamPOST /v1/chat/completions·gpt-6-astra:model,messages,streamPOST /v1/messages·gpt-6-astra:model,messages,max_tokens,streamPOST /v1/messages·gpt:model,messages,system,max_tokens,stream,metadataPOST /v1/responses·gpt:model,input,instructions,streamPOST /v1/chat/completions·gpt:model,messages,streamPOST /v1/messages·gpt-latest:model,messages,system,max_tokens,stream,metadataPOST /v1/responses·gpt-latest:model,input,instructions,streamPOST /v1/chat/completions·gpt-latest:model,messages,streamPOST /v1/responses·gpt-6-astra:model,input,instructions,streamPOST /v1/chat/completions·openai/gpt-6-astra:model,messages,stream,modalities,providerPOST /v1/messages·openai/gpt-6-astra:model,messages,system,max_tokens,stream,metadataPOST /v1/responses·openai/gpt-6-astra:model,input,instructions,streamPOST /v1/chat/completions·~openai/gpt-astra-latest:model,messages,stream,modalities,providerPOST /v1/messages·~openai/gpt-astra-latest:model,messages,max_tokens,streamPOST /v1/responses·~openai/gpt-astra-latest:model,input,instructions,stream- Quelles limites s’appliquent ?
POST /v1/messages·gpt-6-astra:ctx:1050000;max_out:128000;messages.min_items:1;max_tokens.minimum:1POST /v1/responses·gpt-6-astra:ctx:1050000;max_out:128000POST /v1/chat/completions·gpt-6-astra:ctx:1050000;max_out:128000;messages.min_items:1POST /v1/chat/completions·gpt-6-astra:messages.min_items:1POST /v1/messages·gpt:ctx:1050000;max_out:128000;messages.min_items:1;max_tokens.minimum:1POST /v1/responses·gpt:ctx:1050000;max_out:128000POST /v1/chat/completions·gpt:ctx:1050000;max_out:128000;messages.min_items:1POST /v1/messages·gpt-latest:ctx:1050000;max_out:128000;messages.min_items:1;max_tokens.minimum:1POST /v1/responses·gpt-latest:ctx:1050000;max_out:128000POST /v1/chat/completions·gpt-latest:ctx:1050000;max_out:128000;messages.min_items:1POST /v1/chat/completions·openai/gpt-6-astra:messages.min_items:1POST /v1/messages·openai/gpt-6-astra:messages.min_items:1;max_tokens.minimum:1POST /v1/chat/completions·~openai/gpt-astra-latest:messages.min_items:1