OpenAI: GPT-6 Luna
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Ailoot · Anthropic Messages
POST /v1/messagesgpt-6-luna - Ailoot · OpenAI Responses
POST /v1/responsesgpt-6-luna - Ailoot · OpenAI Chat
POST /v1/chat/completionsgpt-6-luna - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgpt-6-luna - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgpt-6-luna - Ailoot Ultra · OpenAI Responses
POST /v1/responsesgpt-6-luna - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsopenai/gpt-6-luna - Ailoot Ultra · Anthropic Messages
POST /v1/messagesopenai/gpt-6-luna - Ailoot Ultra · OpenAI Responses
POST /v1/responsesopenai/gpt-6-luna - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completions~openai/gpt-luna-latest - Ailoot Ultra · Anthropic Messages
POST /v1/messages~openai/gpt-luna-latest - Ailoot Ultra · OpenAI Responses
POST /v1/responses~openai/gpt-luna-latest
Sobre el modelo
Esta descripción cubre las capacidades del modelo. Las entradas, salidas y opciones disponibles en Ailoot se indican a continuación para el método seleccionado.
Un gran volumen de tareas con un objetivo claro
GPT-6 Luna es un modelo de OpenAI para tareas concretas que se realizan en grandes cantidades. El fabricante lo presenta como la opción de la familia para procesar ese volumen de forma eficiente. El modelo acepta texto e imágenes, genera texto y permite controlar la profundidad del razonamiento.
La entrada puede contener instrucciones y materiales de trabajo, y el resultado puede ser una respuesta convencional o un objeto con una estructura definida. La salida en streaming permite recibir el texto de forma gradual. Una estructura de salida resulta útil cuando el siguiente paso espera determinados campos y tipos de datos.
Elección del esfuerzo y del modo de ejecución
Admite none, low, medium, high, xhigh y max; el valor predeterminado es medium. El valor none permite procesar sin razonamiento. El esfuerzo puede ajustarse a cada tarea, mientras que la longitud del texto final se define por separado.
El fabricante permite elegir entre el modo de ejecución normal y el ampliado, independientemente de la profundidad del razonamiento. El modo normal se aplica de forma predeterminada. El ampliado está pensado para tareas complejas a las que se puede dedicar más tiempo y más tokens. El modo determina cómo se procesa la tarea, y el nivel de esfuerzo regula el razonamiento dentro de ese modo. Esta elección está descrita para Responses y requiere que la aplicación la admita; no se considera activada en cualquier método de Ailoot.
Para trabajar con herramientas y razonamiento se utiliza Responses. En el formato Chat Completions, las llamadas a funciones solo se permiten con el nivel none. Por tanto, que las funciones tengan los mismos nombres no implica que se utilicen del mismo modo en todos los formatos.
Contexto y salida
OpenAI indica una ventana de contexto de 1 050 000 tokens, un límite de entrada de 922 000 y un límite de salida de 128 000 tokens. La fecha de corte de conocimientos es el 18 de mayo de 2026. El contexto amplio permite incluir materiales e historial, mientras que el límite de salida restringe por separado la generación del resultado.
Las imágenes forman parte de la entrada: el modelo analiza el material visual y responde con texto. El razonamiento interno consume parte del presupuesto de salida; la salida máxima permitida no garantiza una respuesta visible de esa misma longitud. Para obtener información nueva, se puede aportar en la solicitud o conectar una herramienta prevista para ello.
Información y acciones mediante herramientas conectadas
La ficha del fabricante incluye llamadas a funciones, búsqueda en Internet y en archivos, ejecución de código y comandos, modificación de archivos, interacción con la interfaz del ordenador y búsqueda de herramientas. El modelo elige una acción del conjunto proporcionado y utiliza la información devuelta para continuar la respuesta.
Con la conexión adecuada, el fabricante también contempla una herramienta independiente para generar imágenes, habilidades y medios externos mediante MCP. La respuesta directa sigue siendo texto; la imagen la crea una herramienta aparte. Que exista en el servicio del fabricante no implica que esté conectada en cualquier método de Ailoot.
El conjunto disponible lo determinan el método y la aplicación. Las funciones del usuario las ejecuta la aplicación: el modelo genera los argumentos y después recibe el resultado. Una respuesta estructurada define la forma de los datos; la exactitud de la información es una cuestión aparte.
Los prefijos de entrada repetidos admiten caché. Las instrucciones y los materiales que no cambian al principio de la solicitud pueden reutilizarse; cualquier condición nueva debe enviarse en la solicitud actual.
Tarea práctica
Tarea práctica
Ejemplo técnico en inglés
Normalize a simple order note
Convert this order note into a compact record: "PO-84: 3 packs of filters at 7 units per pack; delivery requested for Friday, not confirmed." Return order ID, pack count, units per pack, total units and delivery status as labelled lines. Retain the distinction between requested and confirmed delivery.Resultado esperado
Five labelled fields with total units calculated from the supplied counts and delivery marked requested, unconfirmed.Comprobar el resultado
Check the total equals packs times units per pack and Friday is not described as confirmed.Ailoot · Anthropic Messages POST /v1/messages gpt-6-luna
gpt-6-lunaPrimeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto · Imágenes
- Resultados
- Texto
Disponible en Ailoot · entradas y métodos
Ailoot · Anthropic Messages POST /v1/messages
- Tipos de entrada
text,image- Tipos de salida
text- Contexto
- 1.050.000 tokens
- Salida máxima
- 128.000 tokens
- Formato de salida
- json o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites gpt-6-luna | Predeterminado— |
Campomessages | Tipomessage[] | RequisitoObligatorio | Valores y límites Número mínimo de elementos: 1 | Predeterminado— |
Campomessages[].role | Tipostring | RequisitoObligatorio | Valores y límites user, assistant | Predeterminado— |
Campomessages[].content | Tipostring|content_block[] | RequisitoObligatorio | Valores y límites | Predeterminado— |
Camposystem | Tipostring|content_block[] | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomax_tokens | Tipointeger | RequisitoObligatorio | Valores y límites Mínimo: 1 El límite se aplica a: límite máximo exacto de la ficha del modelo seleccionado | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Campotemperature | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotop_p | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campostop_sequences | Tipostring[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools | Tipotool[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools[].name | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: herramienta proporcionada | Predeterminado— |
Campotools[].description | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campotools[].input_schema | TipoJSON_schema | RequisitoOpcional | Valores y límites | Predeterminado— |
Campotool_choice | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campothinking.type | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campothinking.budget_tokens | Tipointeger | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campooutput_config.effort | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campometadata | Tipoobject | RequisitoOpcional | Valores y límites | Predeterminado— |
Campocache_control | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Combinaciones de materiales de entrada
Texto · Texto UTF8
messages[].content o bloque type=text
Texto + imagen
{type:image,source:{type:base64,media_type,data}} o una fuente con type=url
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetromaterial_types | Contratotext, image |
Parámetrorequired | Contratomodel, messages, max_tokens |
Parámetrooptional_controls | Contratonull |
Parámetrocontent_type | Contratoapplication/json |
Parámetrotext_file_material | Contratocontenido real en UTF-8 insertado como texto; los ID de archivo y las URLs requieren compatibilidad específica e independiente |
Ciclo de vida: exact retained published method
Las estructuras e ID de los métodos son exactos; la capacidad del proveedor y la admisión son conceptos distintos.
Planes
Tarifas de métodos Ailoot
POST /v1/messages- Entrada
- 0,0001 US$ / 1K
- Salida
- 0,0005 US$ / 1K
- Lectura de caché
- 0,00001 US$ / 1K
- Escritura en caché
- 0,000125 US$ / 1K
- Escritura en caché, 5 min
- 0,000125 US$ / 1K tokens
- Multiplicador fast
- ×2
- Multiplicador flex
- ×0.5
Precios según la longitud de la solicitud · Anthropic Messages
| Tamaño de la solicitud, en tokens | Entrada | Salida | Lectura de caché | Escritura en caché | Caché de 5 min | Caché de 1 hora |
|---|---|---|---|---|---|---|
| Tamaño de la solicitud, en tokens(0; 272.000] | Entrada0,0001 US$ | Salida0,0005 US$ | Lectura de caché0,00001 US$ | Escritura en caché0,000125 US$ | Caché de 5 min0,000125 US$ | Caché de 1 horaBase: — |
| Tamaño de la solicitud, en tokens(272.000; ∞) | Entrada0,0002 US$ | Salida0,00075 US$ | Lectura de caché0,00002 US$ | Escritura en caché0,00025 US$ | Caché de 5 min0,00025 US$ | Caché de 1 horaBase: — |
Tarifas en USD por 1K tokens. Si no se define ninguna tarifa, se hereda la tarifa base de este método; «—» indica que no hay tarifa base definida.
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Detalles de la tarifa de referencia
Las tablas de referencia del modelo no cambian la selección del método, las estimaciones de coste ni los cargos. Los cargos aplicados usan las tarifas del método Ailoot seleccionado.
Tablas de referencia del modelo
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónOpenAI Chat · Tarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Chat · Nivel 1 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Chat · Nivel 2 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónAnthropic Messages · Tarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónAnthropic Messages · Nivel 1 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónAnthropic Messages · Nivel 2 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Responses · Tarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Responses · Nivel 1 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Responses · Nivel 2 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Solicitudes de ejemplo
Ailoot · Anthropic Messages
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-luna", "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-luna", "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-luna",
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-luna",
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-luna',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")
Recibir y guardar resultados
Ailoot · Anthropic Messages
json o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva todos los bloques de contenido, las firmas de razonamiento y los ID reales de uso de herramientas. Ensambla todos los fragmentos incrementales de los bloques SSE; el primer bloque de texto no constituye la salida completa.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campomodel | Tipostring |
Campocontent[] | Tipotext|thinking|tool_use|other content block |
Campostop_reason | Tipostring|null |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot · OpenAI Responses POST /v1/responses gpt-6-luna
gpt-6-lunaPrimeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto · Imágenes
- Resultados
- Texto
Disponible en Ailoot · entradas y métodos
Ailoot · OpenAI Responses POST /v1/responses
- Tipos de entrada
text,image- Tipos de salida
text- Contexto
- 1.050.000 tokens
- Salida máxima
- 128.000 tokens
- Formato de salida
- json o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites gpt-6-luna | Predeterminado— |
Campoinput | Tipostring|input_item[] | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campoinstructions | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campoinput[].type | Tipostring | RequisitoOpcional | Valores y límites message, reasoning, function_call, function_call_output | Predeterminado— |
Campoinput[].content | Tipostring|content_part[] | RequisitoOpcional | Valores y límites | Predeterminado— |
Campoinput[].call_id | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: function_call_output; conserva el call_id real devuelto | Predeterminado— |
Campoinput[].output | Tipostring|content_part[] | RequisitoOpcional | Valores y límites Se aplica cuando: function_call_output | Predeterminado— |
Campomax_output_tokens | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Depende del modelo | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Campotemperature | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotop_p | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools | Tipotool[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotool_choice | Tipostring|object | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoparallel_tool_calls | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning.effort | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning.summary | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotext.format | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotext.verbosity | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoinclude | Tipostring[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campostore | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprevious_response_id | Tipostring | RequisitoOpcional | Valores y límites Requisito de ID: Solo un ID real de respuesta de una continuación compatible Depende del modelo | Predeterminado— |
Camposervice_tier | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_key | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_options | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Combinaciones de materiales de entrada
Texto · Texto UTF8
texto en input o parte input_text
Texto + imagen
{type:input_image,image_url}
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetromaterial_types | Contratotext, image |
Parámetrorequired | Contratomodel, input |
Parámetrooptional_controls | Contratonull |
Parámetrocontent_type | Contratoapplication/json |
Parámetrotext_file_material | Contratocontenido real en UTF-8 insertado como texto; los ID de archivo y las URLs requieren compatibilidad específica e independiente |
Ciclo de vida: exact retained published method
Las estructuras e ID de los métodos son exactos; la capacidad del proveedor y la admisión son conceptos distintos.
Planes
Tarifas de métodos Ailoot
POST /v1/responses- Entrada
- 0,0001 US$ / 1K
- Salida
- 0,0005 US$ / 1K
- Lectura de caché
- 0,00001 US$ / 1K
- Escritura en caché
- 0,000125 US$ / 1K
- Escritura en caché, 5 min
- 0,000125 US$ / 1K tokens
- Multiplicador fast
- ×2
- Multiplicador flex
- ×0.5
Precios según la longitud de la solicitud · OpenAI Responses
| Tamaño de la solicitud, en tokens | Entrada | Salida | Lectura de caché | Escritura en caché | Caché de 5 min | Caché de 1 hora |
|---|---|---|---|---|---|---|
| Tamaño de la solicitud, en tokens(0; 272.000] | Entrada0,0001 US$ | Salida0,0005 US$ | Lectura de caché0,00001 US$ | Escritura en caché0,000125 US$ | Caché de 5 min0,000125 US$ | Caché de 1 horaBase: — |
| Tamaño de la solicitud, en tokens(272.000; ∞) | Entrada0,0002 US$ | Salida0,00075 US$ | Lectura de caché0,00002 US$ | Escritura en caché0,00025 US$ | Caché de 5 min0,00025 US$ | Caché de 1 horaBase: — |
Tarifas en USD por 1K tokens. Si no se define ninguna tarifa, se hereda la tarifa base de este método; «—» indica que no hay tarifa base definida.
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Detalles de la tarifa de referencia
Las tablas de referencia del modelo no cambian la selección del método, las estimaciones de coste ni los cargos. Los cargos aplicados usan las tarifas del método Ailoot seleccionado.
Tablas de referencia del modelo
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónOpenAI Chat · Tarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Chat · Nivel 1 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Chat · Nivel 2 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónAnthropic Messages · Tarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónAnthropic Messages · Nivel 1 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónAnthropic Messages · Nivel 2 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Responses · Tarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Responses · Nivel 1 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Responses · Nivel 2 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Solicitudes de ejemplo
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-luna", "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-luna", "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-luna", 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-luna", 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-luna", 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")
Recibir y guardar resultados
Ailoot · OpenAI Responses
json o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva todos los elementos de salida y partes de contenido, el call_id real de la función, el razonamiento cifrado y el uso. Durante la transmisión en flujo, conserva la identidad completa de cada evento y elemento.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campostatus | Tipostring |
Campooutput[] | Tipomessage|reasoning|function_call|other item |
Campooutput[].content[] | Tipocontent part |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot · OpenAI Chat POST /v1/chat/completions gpt-6-luna
gpt-6-lunaPrimeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto · Imágenes
- Resultados
- Texto
Disponible en Ailoot · entradas y métodos
Ailoot · OpenAI Chat POST /v1/chat/completions
- Tipos de entrada
text,image- Tipos de salida
text- Contexto
- 1.050.000 tokens
- Salida máxima
- 128.000 tokens
- Formato de salida
- json o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites gpt-6-luna | Predeterminado— |
Campomessages | Tipomessage[] | RequisitoObligatorio | Valores y límites Número mínimo de elementos: 1 | Predeterminado— |
Campomessages[].role | Tipostring | RequisitoObligatorio | Valores y límites Ejemplos: system, user, assistant, tool, function Condiciones: Estos roles están representados explícitamente por los tipos de compatibilidad del código fuente; el conjunto exacto de roles depende del modelo. Depende del modelo | Predeterminado— |
Campomessages[].content | Tipostring|content_part[]|null | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomessages[].tool_calls | Tipotool_call[] | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomessages[].tool_call_id | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: role=tool; utiliza el ID real devuelto | Predeterminado— |
Campomessages[].name | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomessages[].reasoning_content | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: Devuelve en los turnos siguientes el razonamiento realmente recibido cuando este modelo lo utilice | Predeterminado— |
Campomessages[].reasoning_details | Tipoobject|array | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campomax_tokens | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Depende del modelo | Predeterminado— |
Campomax_completion_tokens | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Depende del modelo | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Campostream_options.include_usage | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotemperature | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotop_p | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campostop | Tipostring|string[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools | Tipofunction_tool[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools[].type | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools[].function.name | Tipostring | RequisitoObligatorio | Valores y límites Se aplica cuando: herramienta de función proporcionada | Predeterminado— |
Campotools[].function.description | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campotools[].function.parameters | TipoJSON_schema | RequisitoOpcional | Valores y límites | Predeterminado— |
Campotool_choice | Tipostring|object | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoparallel_tool_calls | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporesponse_format | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning_effort | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camposervice_tier | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoinstructions | Tipostring | RequisitoOpcional | Valores y límites Campo de compatibilidad | Predeterminado— |
Campofunctions | Tipofunction[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campofunction_call | Tipostring|object | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_options | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Combinaciones de materiales de entrada
Texto · Texto UTF8
messages[].content
Texto + imagen
{type:image_url,image_url:{url,detail}}
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetromaterial_types | Contratotext, image |
Parámetrorequired | Contratomodel, messages |
Parámetrooptional_controls | Contratonull |
Parámetrocontent_type | Contratoapplication/json |
Parámetrotext_file_material | Contratocontenido real en UTF-8 insertado como texto; los ID de archivo y las URLs requieren compatibilidad específica e independiente |
Ciclo de vida: exact retained published method
Las estructuras e ID de los métodos son exactos; la capacidad del proveedor y la admisión son conceptos distintos.
Planes
Tarifas de métodos Ailoot
POST /v1/chat/completions- Entrada
- 0,0001 US$ / 1K
- Salida
- 0,0005 US$ / 1K
- Lectura de caché
- 0,00001 US$ / 1K
- Escritura en caché
- 0,000125 US$ / 1K
- Escritura en caché, 5 min
- 0,000125 US$ / 1K tokens
- Multiplicador fast
- ×2
- Multiplicador flex
- ×0.5
Precios según la longitud de la solicitud · OpenAI Chat
| Tamaño de la solicitud, en tokens | Entrada | Salida | Lectura de caché | Escritura en caché | Caché de 5 min | Caché de 1 hora |
|---|---|---|---|---|---|---|
| Tamaño de la solicitud, en tokens(0; 272.000] | Entrada0,0001 US$ | Salida0,0005 US$ | Lectura de caché0,00001 US$ | Escritura en caché0,000125 US$ | Caché de 5 min0,000125 US$ | Caché de 1 horaBase: — |
| Tamaño de la solicitud, en tokens(272.000; ∞) | Entrada0,0002 US$ | Salida0,00075 US$ | Lectura de caché0,00002 US$ | Escritura en caché0,00025 US$ | Caché de 5 min0,00025 US$ | Caché de 1 horaBase: — |
Tarifas en USD por 1K tokens. Si no se define ninguna tarifa, se hereda la tarifa base de este método; «—» indica que no hay tarifa base definida.
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Detalles de la tarifa de referencia
Las tablas de referencia del modelo no cambian la selección del método, las estimaciones de coste ni los cargos. Los cargos aplicados usan las tarifas del método Ailoot seleccionado.
Tablas de referencia del modelo
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónOpenAI Chat · Tarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Chat · Nivel 1 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Chat · Nivel 2 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónAnthropic Messages · Tarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónAnthropic Messages · Nivel 1 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónAnthropic Messages · Nivel 2 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Responses · Tarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Responses · Nivel 1 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónOpenAI Responses · Nivel 2 según la longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Solicitudes de ejemplo
Ailoot · OpenAI Chat
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-luna", "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-luna", "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-luna",
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-luna",
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-luna',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")
Recibir y guardar resultados
Ailoot · OpenAI Chat
json o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva cada alternativa y su contenido, llamadas de herramientas y razonamiento. En SSE, ensambla los fragmentos incrementales por índice de alternativa/herramienta y conserva el motivo final de terminación y el uso.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campochoices[].index | Tipointeger |
Campochoices[].message.content | Tipostring|null |
Campochoices[].message.tool_calls | Tipotool_call[] |
Campochoices[].message.reasoning_content | Tipostring |
Campochoices[].message.reasoning_details | Tipoobject|array |
Campochoices[].finish_reason | Tipostring|null |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions gpt-6-luna
gpt-6-lunagpt-6-lunaopenai/gpt-6-luna~openai/gpt-luna-latest
Primeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto
- Resultados
- Texto
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Tipos de entrada
text- Tipos de salida
text- Formato de salida
- json o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites gpt-6-luna | Predeterminado— |
Campomessages | Tipomessage[] | RequisitoObligatorio | Valores y límites Número mínimo de elementos: 1 | Predeterminado— |
Campomessages[].role | Tipostring | RequisitoObligatorio | Valores y límites Depende del modelo | Predeterminado— |
Campomessages[].content | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: Conversación textual | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Combinaciones de materiales de entrada
Texto · Texto UTF8
messages[].content
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetrocontent_type | Contratoapplication/json |
Parámetrorequired | Contratomodel, messages |
Parámetromaterial_types | Contratotext |
Parámetromessages | Contratomatriz de mensajes con estructura role/content |
Parámetrofile_material | Contratodocumento real en UTF-8 insertado como texto literal; no se deduce ningún ID de archivo |
Parámetrooptional_controls | Contratostream |
Parámetrocontrol_scope | ContratoConversación textual; stream es un booleano y su valor predeterminado es false. |
Parámetrooutput_modalities | Contratotext |
Parámetrohosted_operations | Contratofalse |
Parámetromultimodal_input_binding | Contratonull |
Alias de método: /chat/completions
Ciclo de vida: synchronous_or_streamed
Envía el ID exacto del modelo junto con messages.
La longitud del contexto no es un límite máximo de salida.
Un archivo de texto puede aportar texto literal; las entradas de imagen, audio u objetos de archivo requieren una vinculación exacta.
Planes
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo rápido
- Tarifa estándar Cuando se selecciona el modo rápido
- Modo flex
- Tarifa estándar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
- Esfuerzo de razonamiento · alto
- Tarifa estándar Cuando el esfuerzo de razonamiento es alto
- Esfuerzo de razonamiento · bajo
- Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
- Esfuerzo de razonamiento · máximo
- Tarifa estándar Cuando el esfuerzo de razonamiento es máximo
- Esfuerzo de razonamiento · medio
- Tarifa estándar Cuando el esfuerzo de razonamiento es medio
- Esfuerzo de razonamiento · ninguno
- Tarifa estándar Cuando no hay esfuerzo de razonamiento
- Esfuerzo de razonamiento · xhigh
- Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh
Tarifas de Ailoot
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 1 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 2 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · OpenAI Chat
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-luna","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-luna", 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"))
Recibir y guardar resultados
Ailoot Ultra · OpenAI Chat
json o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva cada alternativa y su contenido, llamadas de herramientas y razonamiento. En SSE, ensambla los fragmentos incrementales por índice de alternativa/herramienta y conserva el motivo final de terminación y el uso.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campochoices[].index | Tipointeger |
Campochoices[].message.content | Tipostring|null |
Campochoices[].message.tool_calls | Tipotool_call[] |
Campochoices[].message.reasoning_content | Tipostring |
Campochoices[].message.reasoning_details | Tipoobject|array |
Campochoices[].finish_reason | Tipostring|null |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot Ultra · Anthropic Messages POST /v1/messages gpt-6-luna
gpt-6-lunagpt-6-lunaopenai/gpt-6-luna~openai/gpt-luna-latest
Primeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto
- Resultados
- json · sse
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Tipos de entrada
text- Tipos de salida
json,sse- Formato de salida
- JSON o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites gpt-6-luna | Predeterminado— |
Campomessages | Tipomessage[] | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campomessages[].role | Tipostring | RequisitoObligatorio | Valores y límites user, assistant | Predeterminado— |
Campomessages[].content | Tipostring | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campomax_tokens | Tipointeger | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Combinaciones de materiales de entrada
Texto · Texto UTF-8
cadena messages[].content
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetrocontent_type | Contratoapplication/json |
Parámetrorequired | Contratomodel, messages, max_tokens |
Parámetrooptional_controls | Contratostream |
Parámetromaterial_types | Contratotext |
Parámetrotext_file_material | ContratoLee el documento real en UTF-8 y coloca su texto en el campo input indicado o en la cadena de contenido del mensaje. |
Ciclo de vida: synchronous_or_streamed
Planes
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo rápido
- Tarifa estándar Cuando se selecciona el modo rápido
- Modo flex
- Tarifa estándar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
- Esfuerzo de razonamiento · alto
- Tarifa estándar Cuando el esfuerzo de razonamiento es alto
- Esfuerzo de razonamiento · bajo
- Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
- Esfuerzo de razonamiento · máximo
- Tarifa estándar Cuando el esfuerzo de razonamiento es máximo
- Esfuerzo de razonamiento · medio
- Tarifa estándar Cuando el esfuerzo de razonamiento es medio
- Esfuerzo de razonamiento · ninguno
- Tarifa estándar Cuando no hay esfuerzo de razonamiento
- Esfuerzo de razonamiento · xhigh
- Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh
Tarifas de Ailoot
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 1 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 2 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · Anthropic Messages
{
"model": "gpt-6-luna",
"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-luna', '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-luna', '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))
Recibir y guardar resultados
Ailoot Ultra · Anthropic Messages
JSON o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva todos los bloques de contenido, las firmas de razonamiento y los ID reales de uso de herramientas. Ensambla todos los fragmentos incrementales de los bloques SSE; el primer bloque de texto no constituye la salida completa.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campomodel | Tipostring |
Campocontent[] | Tipotext|thinking|tool_use|other content block |
Campostop_reason | Tipostring|null |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot Ultra · OpenAI Responses POST /v1/responses gpt-6-luna
gpt-6-lunagpt-6-lunaopenai/gpt-6-luna~openai/gpt-luna-latest
Primeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto
- Resultados
- Texto
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · OpenAI Responses POST /v1/responses
- Tipos de entrada
text- Tipos de salida
text- Formato de salida
- json or SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites gpt-6-luna | Predeterminado— |
Campoinput | Tipostring|input_item[] | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campoinstructions | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campoinput[].type | Tipostring | RequisitoOpcional | Valores y límites message, reasoning, function_call, function_call_output | Predeterminado— |
Campoinput[].content | Tipostring|content_part[] | RequisitoOpcional | Valores y límites | Predeterminado— |
Campoinput[].call_id | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: function_call_output; conserva el call_id real devuelto | Predeterminado— |
Campoinput[].output | Tipostring|content_part[] | RequisitoOpcional | Valores y límites Se aplica cuando: function_call_output | Predeterminado— |
Campomax_output_tokens | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Depende del modelo | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Campotemperature | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotop_p | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools | Tipotool[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotool_choice | Tipostring|object | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoparallel_tool_calls | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning.effort | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning.summary | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotext.format | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotext.verbosity | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoinclude | Tipostring[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campostore | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprevious_response_id | Tipostring | RequisitoNo compatible | Valores y límites Requisito de ID: Solo un ID real de respuesta de una continuación compatible Condiciones: Vuelve a enviar el historial real de conversación con cada solicitud. | Predeterminado— |
Camposervice_tier | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_key | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_options | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Combinaciones de materiales de entrada
Texto · Texto UTF8
input text or input_text part
Texto + imagen
{type:input_image,image_url}
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetromaterial_types | Contratotext |
Parámetrorequired | Contratomodel, input |
Parámetrooptional_controls | Contratonull |
Parámetrocontent_type | Contratoapplication/json |
Parámetrotext_file_material | ContratoLee el documento real en UTF-8 y coloca su texto en el campo input indicado o en la cadena de contenido del mensaje. |
Ciclo de vida: exact retained published method
Envía el ID exacto del modelo y los campos obligatorios.
Conserva todos los elementos devueltos y sus identificadores originales.
Planes
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo rápido
- Tarifa estándar Cuando se selecciona el modo rápido
- Modo flex
- Tarifa estándar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
- Esfuerzo de razonamiento · alto
- Tarifa estándar Cuando el esfuerzo de razonamiento es alto
- Esfuerzo de razonamiento · bajo
- Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
- Esfuerzo de razonamiento · máximo
- Tarifa estándar Cuando el esfuerzo de razonamiento es máximo
- Esfuerzo de razonamiento · medio
- Tarifa estándar Cuando el esfuerzo de razonamiento es medio
- Esfuerzo de razonamiento · ninguno
- Tarifa estándar Cuando no hay esfuerzo de razonamiento
- Esfuerzo de razonamiento · xhigh
- Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh
Tarifas de Ailoot
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 1 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 2 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · OpenAI Responses
{
"model": "gpt-6-luna",
"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-luna', '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-luna', '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))
Recibir y guardar resultados
Ailoot Ultra · OpenAI Responses
json or SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva todos los elementos de salida y partes de contenido, el call_id real de la función, el razonamiento cifrado y el uso. Durante la transmisión en flujo, conserva la identidad completa de cada evento y elemento.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campostatus | Tipostring |
Campooutput[] | Tipomessage|reasoning|function_call|other item |
Campooutput[].content[] | Tipocontent part |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions openai/gpt-6-luna
openai/gpt-6-lunagpt-6-lunaopenai/gpt-6-luna~openai/gpt-luna-latest
Primeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto
- Resultados
- Texto
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Tipos de entrada
text- Tipos de salida
text- Formato de salida
- json o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites openai/gpt-6-luna | Predeterminado— |
Campomessages | Tipomessage[] | RequisitoObligatorio | Valores y límites Número mínimo de elementos: 1 | Predeterminado— |
Campomessages[].role | Tipostring | RequisitoObligatorio | Valores y límites Ejemplos: system, user, assistant, tool, function Condiciones: Estos roles están representados explícitamente por los tipos de compatibilidad del código fuente; el conjunto exacto de roles depende del modelo. Depende del modelo | Predeterminado— |
Campomessages[].content | Tipostring|content_part[]|null | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomessages[].tool_calls | Tipotool_call[] | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomessages[].tool_call_id | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: role=tool; utiliza el ID real devuelto | Predeterminado— |
Campomessages[].name | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomessages[].reasoning_content | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: Devuelve en los turnos siguientes el razonamiento realmente recibido cuando este modelo lo utilice | Predeterminado— |
Campomessages[].reasoning_details | Tipoobject|array | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campomax_tokens | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Depende del modelo | Predeterminado— |
Campomax_completion_tokens | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Depende del modelo | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Campostream_options.include_usage | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotemperature | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotop_p | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campostop | Tipostring|string[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools | Tipofunction_tool[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools[].type | Tipostring | RequisitoOpcional | Valores y límites function Depende del modelo | Predeterminado— |
Campotools[].function.name | Tipostring | RequisitoObligatorio | Valores y límites Se aplica cuando: herramienta de función proporcionada | Predeterminado— |
Campotools[].function.description | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campotools[].function.parameters | TipoJSON_schema | RequisitoOpcional | Valores y límites | Predeterminado— |
Campotool_choice | Tipostring|object | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoparallel_tool_calls | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporesponse_format | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning_effort | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camposervice_tier | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoinstructions | Tipostring | RequisitoOpcional | Valores y límites Campo de compatibilidad | Predeterminado— |
Campofunctions | Tipofunction[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campofunction_call | Tipostring|object | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_options | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campomodalities | Tipostring[] | RequisitoOpcional | Valores y límites text | Predeterminado— |
Campoprovider | Tipoobject | RequisitoOpcional | Valores y límites Condiciones: provider.options se rechaza en esta ruta de texto Ultra | Predeterminado— |
Campocache_control.ttl | Tipostring | RequisitoOpcional | Valores y límites Condiciones: 1h se rechaza en los campos reales de caché de instrucciones | Predeterminado— |
Combinaciones de materiales de entrada
Texto · Texto UTF8
messages[].content
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetrocontent_type | Contratoapplication/json |
Parámetrorequired | Contratomodel, messages |
Parámetromaterial_types | Contratotext |
Parámetromessages | Contratomatriz de mensajes con estructura role/content |
Parámetrofile_material | Contratodocumento real en UTF-8 insertado como texto literal; no se deduce ningún ID de archivo |
Parámetrooptional_controls | Contratostream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Parámetrocontrol_scope | Contratodepende del modelo; las herramientas de funciones del usuario difieren de las herramientas alojadas |
Parámetrooutput_modalities | Contratotext |
Parámetrohosted_operations | Contratofalse |
Parámetromultimodal_input_binding | Contratonull |
Ciclo de vida: synchronous_or_streamed
Envía el ID exacto del modelo junto con messages.
La longitud del contexto no es un límite máximo de salida.
Un archivo de texto puede aportar texto literal; las entradas de imagen, audio u objetos de archivo requieren una vinculación exacta.
Planes
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo rápido
- Tarifa estándar Cuando se selecciona el modo rápido
- Modo flex
- Tarifa estándar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
- Esfuerzo de razonamiento · alto
- Tarifa estándar Cuando el esfuerzo de razonamiento es alto
- Esfuerzo de razonamiento · bajo
- Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
- Esfuerzo de razonamiento · máximo
- Tarifa estándar Cuando el esfuerzo de razonamiento es máximo
- Esfuerzo de razonamiento · medio
- Tarifa estándar Cuando el esfuerzo de razonamiento es medio
- Esfuerzo de razonamiento · ninguno
- Tarifa estándar Cuando no hay esfuerzo de razonamiento
- Esfuerzo de razonamiento · xhigh
- Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh
Tarifas de Ailoot
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 1 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 2 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · OpenAI Chat
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-luna", "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-luna',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-luna',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")
Recibir y guardar resultados
Ailoot Ultra · OpenAI Chat
json o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva cada alternativa y su contenido, llamadas de herramientas y razonamiento. En SSE, ensambla los fragmentos incrementales por índice de alternativa/herramienta y conserva el motivo final de terminación y el uso.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campochoices[].index | Tipointeger |
Campochoices[].message.content | Tipostring|null |
Campochoices[].message.tool_calls | Tipotool_call[] |
Campochoices[].message.reasoning_content | Tipostring |
Campochoices[].message.reasoning_details | Tipoobject|array |
Campochoices[].finish_reason | Tipostring|null |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot Ultra · Anthropic Messages POST /v1/messages openai/gpt-6-luna
openai/gpt-6-lunagpt-6-lunaopenai/gpt-6-luna~openai/gpt-luna-latest
Primeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto
- Resultados
- Texto
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Tipos de entrada
text- Tipos de salida
text- Formato de salida
- json o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites openai/gpt-6-luna | Predeterminado— |
Campomessages | Tipomessage[] | RequisitoObligatorio | Valores y límites Número mínimo de elementos: 1 | Predeterminado— |
Campomessages[].role | Tipostring | RequisitoObligatorio | Valores y límites user, assistant | Predeterminado— |
Campomessages[].content | Tipostring|content_block[] | RequisitoObligatorio | Valores y límites | Predeterminado— |
Camposystem | Tipostring|content_block[] | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomax_tokens | Tipointeger | RequisitoObligatorio | Valores y límites Mínimo: 1 El límite se aplica a: límite máximo exacto de la ficha del modelo seleccionado | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Campotemperature | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotop_p | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campostop_sequences | Tipostring[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools | Tipotool[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools[].name | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: herramienta proporcionada | Predeterminado— |
Campotools[].description | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campotools[].input_schema | TipoJSON_schema | RequisitoOpcional | Valores y límites | Predeterminado— |
Campotool_choice | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campothinking.type | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campothinking.budget_tokens | Tipointeger | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campooutput_config.effort | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campometadata | Tipoobject | RequisitoOpcional | Valores y límites | Predeterminado— |
Campocache_control | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Combinaciones de materiales de entrada
Texto · Texto UTF8
messages[].content o bloque type=text
Texto + imagen
{type:image,source:{type:base64,media_type,data}} o una fuente con type=url
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetromaterial_types | Contratotext |
Parámetrorequired | Contratomodel, messages, max_tokens |
Parámetrooptional_controls | Contratonull |
Parámetrocontent_type | Contratoapplication/json |
Parámetrotext_file_material | ContratoLee el documento real en UTF-8 y coloca su texto en el campo input indicado o en la cadena de contenido del mensaje. |
Ciclo de vida: exact retained published method
Envía el ID exacto del modelo y los campos obligatorios.
Conserva todos los elementos devueltos y sus identificadores originales.
Planes
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo rápido
- Tarifa estándar Cuando se selecciona el modo rápido
- Modo flex
- Tarifa estándar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
- Esfuerzo de razonamiento · alto
- Tarifa estándar Cuando el esfuerzo de razonamiento es alto
- Esfuerzo de razonamiento · bajo
- Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
- Esfuerzo de razonamiento · máximo
- Tarifa estándar Cuando el esfuerzo de razonamiento es máximo
- Esfuerzo de razonamiento · medio
- Tarifa estándar Cuando el esfuerzo de razonamiento es medio
- Esfuerzo de razonamiento · ninguno
- Tarifa estándar Cuando no hay esfuerzo de razonamiento
- Esfuerzo de razonamiento · xhigh
- Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh
Tarifas de Ailoot
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 1 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 2 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · Anthropic Messages
{
"model": "openai/gpt-6-luna",
"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-luna', '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-luna', '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))
Recibir y guardar resultados
Ailoot Ultra · Anthropic Messages
json o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva todos los bloques de contenido, las firmas de razonamiento y los ID reales de uso de herramientas. Ensambla todos los fragmentos incrementales de los bloques SSE; el primer bloque de texto no constituye la salida completa.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campomodel | Tipostring |
Campocontent[] | Tipotext|thinking|tool_use|other content block |
Campostop_reason | Tipostring|null |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot Ultra · OpenAI Responses POST /v1/responses openai/gpt-6-luna
openai/gpt-6-lunagpt-6-lunaopenai/gpt-6-luna~openai/gpt-luna-latest
Primeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto
- Resultados
- Texto
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · OpenAI Responses POST /v1/responses
- Tipos de entrada
text- Tipos de salida
text- Formato de salida
- json o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites openai/gpt-6-luna | Predeterminado— |
Campoinput | Tipostring|input_item[] | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campoinstructions | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campoinput[].type | Tipostring | RequisitoOpcional | Valores y límites message, reasoning, function_call, function_call_output | Predeterminado— |
Campoinput[].content | Tipostring|content_part[] | RequisitoOpcional | Valores y límites | Predeterminado— |
Campoinput[].call_id | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: function_call_output; conserva el call_id real devuelto | Predeterminado— |
Campoinput[].output | Tipostring|content_part[] | RequisitoOpcional | Valores y límites Se aplica cuando: function_call_output | Predeterminado— |
Campomax_output_tokens | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Depende del modelo | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Campotemperature | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotop_p | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools | Tipotool[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotool_choice | Tipostring|object | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoparallel_tool_calls | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning.effort | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning.summary | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotext.format | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotext.verbosity | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoinclude | Tipostring[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campostore | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprevious_response_id | Tipostring | RequisitoNo compatible | Valores y límites Requisito de ID: Solo un ID real de respuesta de una continuación compatible Condiciones: Vuelve a enviar el historial real de conversación con cada solicitud. | Predeterminado— |
Camposervice_tier | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_key | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_options | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Combinaciones de materiales de entrada
Texto · Texto UTF8
texto en input o parte input_text
Texto + imagen
{type:input_image,image_url}
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetromaterial_types | Contratotext |
Parámetrorequired | Contratomodel, input |
Parámetrooptional_controls | Contratonull |
Parámetrocontent_type | Contratoapplication/json |
Parámetrotext_file_material | ContratoLee el documento real en UTF-8 y coloca su texto en el campo input indicado o en la cadena de contenido del mensaje. |
Ciclo de vida: exact retained published method
Envía el ID exacto del modelo y los campos obligatorios.
Conserva todos los elementos devueltos y sus identificadores originales.
Planes
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo rápido
- Tarifa estándar Cuando se selecciona el modo rápido
- Modo flex
- Tarifa estándar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
- Esfuerzo de razonamiento · alto
- Tarifa estándar Cuando el esfuerzo de razonamiento es alto
- Esfuerzo de razonamiento · bajo
- Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
- Esfuerzo de razonamiento · máximo
- Tarifa estándar Cuando el esfuerzo de razonamiento es máximo
- Esfuerzo de razonamiento · medio
- Tarifa estándar Cuando el esfuerzo de razonamiento es medio
- Esfuerzo de razonamiento · ninguno
- Tarifa estándar Cuando no hay esfuerzo de razonamiento
- Esfuerzo de razonamiento · xhigh
- Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh
Tarifas de Ailoot
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 1 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 2 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · OpenAI Responses
{
"model": "openai/gpt-6-luna",
"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-luna', '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-luna', '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))
Recibir y guardar resultados
Ailoot Ultra · OpenAI Responses
json o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva todos los elementos de salida y partes de contenido, el call_id real de la función, el razonamiento cifrado y el uso. Durante la transmisión en flujo, conserva la identidad completa de cada evento y elemento.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campostatus | Tipostring |
Campooutput[] | Tipomessage|reasoning|function_call|other item |
Campooutput[].content[] | Tipocontent part |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions ~openai/gpt-luna-latest
~openai/gpt-luna-latestgpt-6-lunaopenai/gpt-6-luna~openai/gpt-luna-latest
Primeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto
- Resultados
- Texto
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Tipos de entrada
text- Tipos de salida
text- Formato de salida
- json o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites ~openai/gpt-luna-latest | Predeterminado— |
Campomessages | Tipomessage[] | RequisitoObligatorio | Valores y límites Número mínimo de elementos: 1 | Predeterminado— |
Campomessages[].role | Tipostring | RequisitoObligatorio | Valores y límites Ejemplos: system, user, assistant, tool, function Condiciones: Estos roles están representados explícitamente por los tipos de compatibilidad del código fuente; el conjunto exacto de roles depende del modelo. Depende del modelo | Predeterminado— |
Campomessages[].content | Tipostring|content_part[]|null | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomessages[].tool_calls | Tipotool_call[] | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomessages[].tool_call_id | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: role=tool; utiliza el ID real devuelto | Predeterminado— |
Campomessages[].name | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campomessages[].reasoning_content | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: Devuelve en los turnos siguientes el razonamiento realmente recibido cuando este modelo lo utilice | Predeterminado— |
Campomessages[].reasoning_details | Tipoobject|array | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campomax_tokens | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Depende del modelo | Predeterminado— |
Campomax_completion_tokens | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Depende del modelo | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Campostream_options.include_usage | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotemperature | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotop_p | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campostop | Tipostring|string[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools | Tipofunction_tool[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools[].type | Tipostring | RequisitoOpcional | Valores y límites function Depende del modelo | Predeterminado— |
Campotools[].function.name | Tipostring | RequisitoObligatorio | Valores y límites Se aplica cuando: herramienta de función proporcionada | Predeterminado— |
Campotools[].function.description | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campotools[].function.parameters | TipoJSON_schema | RequisitoOpcional | Valores y límites | Predeterminado— |
Campotool_choice | Tipostring|object | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoparallel_tool_calls | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporesponse_format | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning_effort | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camposervice_tier | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoinstructions | Tipostring | RequisitoOpcional | Valores y límites Campo de compatibilidad | Predeterminado— |
Campofunctions | Tipofunction[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campofunction_call | Tipostring|object | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_options | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campomodalities | Tipostring[] | RequisitoOpcional | Valores y límites text | Predeterminado— |
Campoprovider | Tipoobject | RequisitoOpcional | Valores y límites Condiciones: provider.options se rechaza en esta ruta de texto Ultra | Predeterminado— |
Campocache_control.ttl | Tipostring | RequisitoOpcional | Valores y límites Condiciones: 1h se rechaza en los campos reales de caché de instrucciones | Predeterminado— |
Combinaciones de materiales de entrada
Texto · Texto UTF8
messages[].content
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetrocontent_type | Contratoapplication/json |
Parámetrorequired | Contratomodel, messages |
Parámetromaterial_types | Contratotext |
Parámetromessages | Contratomatriz de mensajes con estructura role/content |
Parámetrofile_material | Contratodocumento real en UTF-8 insertado como texto literal; no se deduce ningún ID de archivo |
Parámetrooptional_controls | Contratostream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Parámetrocontrol_scope | Contratodepende del modelo; las herramientas de funciones del usuario difieren de las herramientas alojadas |
Parámetrooutput_modalities | Contratotext |
Parámetrohosted_operations | Contratofalse |
Parámetromultimodal_input_binding | Contratonull |
Ciclo de vida: synchronous_or_streamed
Envía el ID exacto del modelo junto con messages.
La longitud del contexto no es un límite máximo de salida.
Un archivo de texto puede aportar texto literal; las entradas de imagen, audio u objetos de archivo requieren una vinculación exacta.
Planes
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo rápido
- Tarifa estándar Cuando se selecciona el modo rápido
- Modo flex
- Tarifa estándar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
- Esfuerzo de razonamiento · alto
- Tarifa estándar Cuando el esfuerzo de razonamiento es alto
- Esfuerzo de razonamiento · bajo
- Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
- Esfuerzo de razonamiento · máximo
- Tarifa estándar Cuando el esfuerzo de razonamiento es máximo
- Esfuerzo de razonamiento · medio
- Tarifa estándar Cuando el esfuerzo de razonamiento es medio
- Esfuerzo de razonamiento · ninguno
- Tarifa estándar Cuando no hay esfuerzo de razonamiento
- Esfuerzo de razonamiento · xhigh
- Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh
Tarifas de Ailoot
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 1 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 2 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · OpenAI Chat
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-luna-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-luna-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-luna-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")
Recibir y guardar resultados
Ailoot Ultra · OpenAI Chat
json o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva cada alternativa y su contenido, llamadas de herramientas y razonamiento. En SSE, ensambla los fragmentos incrementales por índice de alternativa/herramienta y conserva el motivo final de terminación y el uso.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campochoices[].index | Tipointeger |
Campochoices[].message.content | Tipostring|null |
Campochoices[].message.tool_calls | Tipotool_call[] |
Campochoices[].message.reasoning_content | Tipostring |
Campochoices[].message.reasoning_details | Tipoobject|array |
Campochoices[].finish_reason | Tipostring|null |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot Ultra · Anthropic Messages POST /v1/messages ~openai/gpt-luna-latest
~openai/gpt-luna-latestgpt-6-lunaopenai/gpt-6-luna~openai/gpt-luna-latest
Primeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto
- Resultados
- json · sse
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Tipos de entrada
text- Tipos de salida
json,sse- Formato de salida
- JSON o SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites ~openai/gpt-luna-latest | Predeterminado— |
Campomessages | Tipomessage[] | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campomessages[].role | Tipostring | RequisitoObligatorio | Valores y límites user, assistant | Predeterminado— |
Campomessages[].content | Tipostring | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campomax_tokens | Tipointeger | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Combinaciones de materiales de entrada
Texto · Texto UTF-8
cadena messages[].content
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetrocontent_type | Contratoapplication/json |
Parámetrorequired | Contratomodel, messages, max_tokens |
Parámetrooptional_controls | Contratostream |
Parámetromaterial_types | Contratotext |
Parámetrotext_file_material | ContratoLee el documento real en UTF-8 y coloca su texto en el campo input indicado o en la cadena de contenido del mensaje. |
Ciclo de vida: synchronous_or_streamed
Planes
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo rápido
- Tarifa estándar Cuando se selecciona el modo rápido
- Modo flex
- Tarifa estándar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
- Esfuerzo de razonamiento · alto
- Tarifa estándar Cuando el esfuerzo de razonamiento es alto
- Esfuerzo de razonamiento · bajo
- Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
- Esfuerzo de razonamiento · máximo
- Tarifa estándar Cuando el esfuerzo de razonamiento es máximo
- Esfuerzo de razonamiento · medio
- Tarifa estándar Cuando el esfuerzo de razonamiento es medio
- Esfuerzo de razonamiento · ninguno
- Tarifa estándar Cuando no hay esfuerzo de razonamiento
- Esfuerzo de razonamiento · xhigh
- Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh
Tarifas de Ailoot
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 1 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 2 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · Anthropic Messages
{
"model": "~openai/gpt-luna-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-luna-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-luna-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))
Recibir y guardar resultados
Ailoot Ultra · Anthropic Messages
JSON o SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva todos los bloques de contenido, las firmas de razonamiento y los ID reales de uso de herramientas. Ensambla todos los fragmentos incrementales de los bloques SSE; el primer bloque de texto no constituye la salida completa.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campomodel | Tipostring |
Campocontent[] | Tipotext|thinking|tool_use|other content block |
Campostop_reason | Tipostring|null |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
Ailoot Ultra · OpenAI Responses POST /v1/responses ~openai/gpt-luna-latest
~openai/gpt-luna-latestgpt-6-lunaopenai/gpt-6-luna~openai/gpt-luna-latest
Primeros pasos
GPT-6 Luna está diseñada para tareas habituales con un gran volumen de solicitudes. Acepta texto e imágenes y admite tanto el procesamiento sin razonamiento como varios niveles de profundidad de razonamiento.
- Entradas aceptadas
- Texto
- Resultados
- Texto
Disponible en Ailoot · entradas y métodos
Ailoot Ultra · OpenAI Responses POST /v1/responses
- Tipos de entrada
text- Tipos de salida
text- Formato de salida
- json or SSE
| Campo | Tipo | Requisito | Valores y límites | Predeterminado |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObligatorio | Valores y límites ~openai/gpt-luna-latest | Predeterminado— |
Campoinput | Tipostring|input_item[] | RequisitoObligatorio | Valores y límites | Predeterminado— |
Campoinstructions | Tipostring | RequisitoOpcional | Valores y límites | Predeterminado— |
Campoinput[].type | Tipostring | RequisitoOpcional | Valores y límites message, reasoning, function_call, function_call_output | Predeterminado— |
Campoinput[].content | Tipostring|content_part[] | RequisitoOpcional | Valores y límites | Predeterminado— |
Campoinput[].call_id | Tipostring | RequisitoOpcional | Valores y límites Se aplica cuando: function_call_output; conserva el call_id real devuelto | Predeterminado— |
Campoinput[].output | Tipostring|content_part[] | RequisitoOpcional | Valores y límites Se aplica cuando: function_call_output | Predeterminado— |
Campomax_output_tokens | Tipointeger | RequisitoOpcional | Valores y límites Mínimo: 1 Depende del modelo | Predeterminado— |
Campostream | Tipoboolean | RequisitoOpcional | Valores y límites | Predeterminadofalse |
Campotemperature | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotop_p | Tiponumber | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotools | Tipotool[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotool_choice | Tipostring|object | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoparallel_tool_calls | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning.effort | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Camporeasoning.summary | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotext.format | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campotext.verbosity | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoinclude | Tipostring[] | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campostore | Tipoboolean | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprevious_response_id | Tipostring | RequisitoNo compatible | Valores y límites Requisito de ID: Solo un ID real de respuesta de una continuación compatible Condiciones: Vuelve a enviar el historial real de conversación con cada solicitud. | Predeterminado— |
Camposervice_tier | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_key | Tipostring | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Campoprompt_cache_options | Tipoobject | RequisitoOpcional | Valores y límites Depende del modelo | Predeterminado— |
Combinaciones de materiales de entrada
Texto · Texto UTF8
input text or input_text part
Texto + imagen
{type:input_image,image_url}
Parámetros del método y ciclo de vida
| Parámetro | Contrato |
|---|---|
Parámetromaterial_types | Contratotext |
Parámetrorequired | Contratomodel, input |
Parámetrooptional_controls | Contratonull |
Parámetrocontent_type | Contratoapplication/json |
Parámetrotext_file_material | ContratoLee el documento real en UTF-8 y coloca su texto en el campo input indicado o en la cadena de contenido del mensaje. |
Ciclo de vida: exact retained published method
Envía el ID exacto del modelo y los campos obligatorios.
Conserva todos los elementos devueltos y sus identificadores originales.
Planes
Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.
- Modo rápido
- Tarifa estándar Cuando se selecciona el modo rápido
- Modo flex
- Tarifa estándar Cuando se selecciona el modo flex
- Esfuerzo máximo de razonamiento
- Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
- Esfuerzo de razonamiento · alto
- Tarifa estándar Cuando el esfuerzo de razonamiento es alto
- Esfuerzo de razonamiento · bajo
- Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
- Esfuerzo de razonamiento · máximo
- Tarifa estándar Cuando el esfuerzo de razonamiento es máximo
- Esfuerzo de razonamiento · medio
- Tarifa estándar Cuando el esfuerzo de razonamiento es medio
- Esfuerzo de razonamiento · ninguno
- Tarifa estándar Cuando no hay esfuerzo de razonamiento
- Esfuerzo de razonamiento · xhigh
- Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh
Tarifas de Ailoot
Precios por configuración
Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.
| Configuración | Tabla de tarifas | Tokens de contexto, más de | Tokens de contexto, hasta inclusive | Cargo |
|---|---|---|---|---|
| ConfiguraciónTarifas base por token | Tabla de tarifasTarifa base | Tokens de contexto, más de— | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 1 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de0 | Tokens de contexto, hasta inclusive272.000 | Cargo Entrada · Tokens de entrada $0.0002 / 1K tokens Salida · Tokens de salida $0.001 / 1K tokens Entrada · Lectura de caché $0.00002 / 1K tokens Entrada · Escritura en caché $0.00025 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
| ConfiguraciónTramo 2 por longitud de la solicitud | Tabla de tarifas— | Tokens de contexto, más de272.000 | Tokens de contexto, hasta inclusiveSin límite superior | Cargo Entrada · Tokens de entrada $0.0004 / 1K tokens Salida · Tokens de salida $0.0015 / 1K tokens Entrada · Lectura de caché $0.00004 / 1K tokens Entrada · Escritura en caché $0.0005 / 1K tokens Entrada · Escritura en caché, 1 hora — / 1K tokens |
Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →
Solicitudes de ejemplo
Ailoot Ultra · OpenAI Responses
{
"model": "~openai/gpt-luna-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-luna-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-luna-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))
Recibir y guardar resultados
Ailoot Ultra · OpenAI Responses
json or SSE
Conserva todos los resultados completados
Conserva todas las respuestas, archivos y partes de contenido completos recibidos.
Conserva todos los elementos de salida y partes de contenido, el call_id real de la función, el razonamiento cifrado y el uso. Durante la transmisión en flujo, conserva la identidad completa de cada evento y elemento.
Si es necesario revisar la respuesta original
Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.
Campos de respuesta
| Campo | Tipo |
|---|---|
Campoid | Tipostring |
Campostatus | Tipostring |
Campooutput[] | Tipomessage|reasoning|function_call|other item |
Campooutput[].content[] | Tipocontent part |
Campousage | Tipoobject |
Errores y siguientes pasos
| Respuesta | Condición | Siguiente paso |
|---|---|---|
Respuesta400 · invalid_request_error | CondiciónCampos obligatorios, representación del material o valor del parámetro no válidos | Siguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación. |
Alias
Alias del modelo
Ailoot gpt-6-luna
Ailoot Ultra gpt-6-luna, openai/gpt-6-luna, ~openai/gpt-luna-latest
Alias de rutas de métodos
/chat/completions
ID de modelo relacionados
openai/gpt-6-luna, ~openai/gpt-luna-latest, gpt-6-luna, gpt-6-luna
FAQ · OpenAI: GPT-6 Luna
- ¿Qué entradas y resultados están disponibles?
POST /v1/messages·gpt-6-luna:text,image→textPOST /v1/responses·gpt-6-luna:text,image→textPOST /v1/chat/completions·gpt-6-luna:text,image→textPOST /v1/chat/completions·gpt-6-luna:text→textPOST /v1/messages·gpt-6-luna:text→json,ssePOST /v1/responses·gpt-6-luna:text→textPOST /v1/chat/completions·openai/gpt-6-luna:text→textPOST /v1/messages·openai/gpt-6-luna:text→textPOST /v1/responses·openai/gpt-6-luna:text→textPOST /v1/chat/completions·~openai/gpt-luna-latest:text→textPOST /v1/messages·~openai/gpt-luna-latest:text→json,ssePOST /v1/responses·~openai/gpt-luna-latest:text→text- ¿Qué campos utiliza la solicitud?
POST /v1/messages·gpt-6-luna:model,messages,system,max_tokens,stream,metadataPOST /v1/responses·gpt-6-luna:model,input,instructions,streamPOST /v1/chat/completions·gpt-6-luna:model,messages,streamPOST /v1/chat/completions·gpt-6-luna:model,messages,streamPOST /v1/messages·gpt-6-luna:model,messages,max_tokens,streamPOST /v1/responses·gpt-6-luna:model,input,instructions,streamPOST /v1/chat/completions·openai/gpt-6-luna:model,messages,stream,modalities,providerPOST /v1/messages·openai/gpt-6-luna:model,messages,system,max_tokens,stream,metadataPOST /v1/responses·openai/gpt-6-luna:model,input,instructions,streamPOST /v1/chat/completions·~openai/gpt-luna-latest:model,messages,stream,modalities,providerPOST /v1/messages·~openai/gpt-luna-latest:model,messages,max_tokens,streamPOST /v1/responses·~openai/gpt-luna-latest:model,input,instructions,stream- ¿Qué límites se aplican?
POST /v1/messages·gpt-6-luna:ctx:1050000;max_out:128000;messages.min_items:1;max_tokens.minimum:1POST /v1/responses·gpt-6-luna:ctx:1050000;max_out:128000POST /v1/chat/completions·gpt-6-luna:ctx:1050000;max_out:128000;messages.min_items:1POST /v1/chat/completions·gpt-6-luna:messages.min_items:1POST /v1/chat/completions·openai/gpt-6-luna:messages.min_items:1POST /v1/messages·openai/gpt-6-luna:messages.min_items:1;max_tokens.minimum:1POST /v1/chat/completions·~openai/gpt-luna-latest:messages.min_items:1