docs
Conexión

OpenAI SDK

Markdown

Las bibliotecas oficiales de OpenAI para Python y Node.js funcionan con Ailoot sin cambios en el código; solo se cambian la URL y la clave.

Guía completa

Instalación

pip install openai

Conexión

Configura la URL base https://api.ailoot.ai/v1 en el código o mediante las variables OPENAI_BASE_URL y OPENAI_API_KEY , sin necesidad de modificar el código.

from openai import OpenAI
import os

client = OpenAI(max_retries=0, 
    base_url="https://api.ailoot.ai/v1",
    api_key=os.environ["AILOOT_API_KEY"],
)

resp = client.chat.completions.create(
    model="claude-sonnet-5-5",
    messages=[{"role": "user", "content": "Explica en dos frases qué es una API."}],
)
print(resp.choices[0].message.content)

Responses API

Nuevo formato OpenAI. Disponible en los modelos cuyo catálogo indica el formato Responses: 53 identificadores, incluidos Claude, GPT, DeepSeek, Qwen, Kimi y GLM.

resp = client.responses.create(
    model="gpt-6.1-sol",
    instructions="Responde de forma breve y directa.",
    input="¿En qué se diferencia TCP de UDP?",
)
print(resp.output_text)

Herramientas (function calling)

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "El tiempo en la ciudad",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

import json

messages = [{"role": "user", "content": "¿Qué tiempo hace en Kazán?"}]
# Desactiva los reintentos automáticos: tras un tiempo de espera agotado, consulta primero el Request ID en tu historial de uso.
client = client.with_options(max_retries=0)
for turn in range(4):
    resp = client.chat.completions.create(
        model="claude-sonnet-5-5", messages=messages, tools=tools,
    )
    message = resp.choices[0].message
    messages.append(message.model_dump(exclude_none=True))
    if not message.tool_calls:
        print(message.content)
        break
    for call in message.tool_calls:
        if call.function.name != "get_weather":
            raise ValueError("Unexpected function")
        arguments = json.loads(call.function.arguments)
        # Sustituye esto por tu propia función meteorológica; estos datos son expresamente de demostración.
        result = {"city": arguments["city"], "temperature_c": 20, "demo": True}
        messages.append({"role": "tool", "tool_call_id": call.id,
                         "content": json.dumps(result, ensure_ascii=False)})
else:
    raise RuntimeError("Tool loop limit reached")

Embeddings

emb = client.embeddings.create(
    model="nvidia/nemotron-3-embed-1b",
    input=["Primer documento", "Segundo documento"],
)
print(len(emb.data), len(emb.data[0].embedding))

Imágenes de entrada

resp = client.chat.completions.create(
    model="gpt-6.1-sol",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "¿Qué aparece en esta imagen?"},
            {"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}},
        ],
    }],
)

Gestión de errores

Los errores de Ailoot llegan en formato OpenAI, por lo que se capturan con las excepciones estándar del SDK. El mensaje incluye el Request ID.

import openai

try:
    resp = client.chat.completions.create(model="claude-sonnet-5-5", messages=[{"role": "user", "content": "Hola"}])
except openai.APIStatusError as e:
    print(e.status_code, e.response.json()["error"]["code"])
    print(e.response.headers.get("x-request-id"))
¿Tienes alguna pregunta? Envíanos el Request ID y una descripción; te ayudaremos a resolverla.Contactar con soporte