Ponga Sluis delante de sus llamadas a modelos.
Sluis es un proxy compatible con OpenAI. Cambie una sola línea, su base_url, y cada petición empieza a fluir por su política de residencia hacia el registro a prueba de manipulaciones. Sin SDK que aprender, sin payloads que reescribir. Cinco pasos a continuación; la referencia completa está en la barra lateral.
Tiempo hasta la primera llamada sellada: ~2 minutos. Si su código ya habla con OpenAI, conserva su cliente, sus modelos y su formato de mensajes exactamente como están.
Obtener una clave
Cree una clave en la Consola, en API keys. Cada clave lleva una política de residencia y un presupuesto, así que puede reservar eu-only para producción y eu-uk-us para un sandbox de investigación sin cambiar nada de código.
# keep it in your environment, never in source export SLUIS_KEY="sk_live_a91c…"
Apuntar base_url a Sluis
Cambie el host. Todo lo demás (modelos, streaming, herramientas, function calling) funciona igual, porque Sluis hace de proxy de la misma superficie de API.
from openai import OpenAI client = OpenAI( base_url="https://api.sluis.ai/v1", api_key=os.environ["SLUIS_KEY"], )
import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.sluis.ai/v1", apiKey: process.env.SLUIS_KEY, });
// no SDK required — reqwest = { version = "0.12", features = ["json"] } let client = reqwest::Client::new(); let base = "https://api.sluis.ai/v1"; // ← the only change let key = std::env::var("SLUIS_KEY")?;
curl https://api.sluis.ai/v1/chat/completions \ -H "Authorization: Bearer $SLUIS_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "mistral/mistral-large-latest", "messages": [...] }'
Enviar una petición
Llámelo exactamente como llamaría al proveedor. Sluis inspecciona la petición, la enruta según su política y devuelve la respuesta del modelo con dos cabeceras extra que indican dónde corrió y cómo se selló.
# Anthropic Claude, served from Google's EU multi-region resp = client.chat.completions.create( model="vertex/claude-opus-4-8", messages=[{"role": "user", "content": "Summarise this chart…"}], ) print(resp.choices[0].message.content)
// Anthropic Claude, served from Google's EU multi-region const resp = await client.chat.completions.create({ model: "vertex/claude-opus-4-8", messages: [{ role: "user", content: "Summarise this chart…" }], }); console.log(resp.choices[0].message.content);
// Anthropic Claude, served from Google's EU multi-region let resp: serde_json::Value = client .post(format!("{base}/chat/completions")) .bearer_auth(&key) .json(&serde_json::json!({ "model": "vertex/claude-opus-4-8", "messages": [{ "role": "user", "content": "Summarise this chart…" }] })) .send().await? .json().await?; println!("{}", resp["choices"][0]["message"]["content"]);
{
"x-sluis-region": "eu multi-region",
"x-sluis-provider": "vertex · claude-opus-4-8",
"x-sluis-decision": "in-region",
"x-sluis-seal": "#4f9c2a",
"x-sluis-prev": "#e1b7d9"
}Fijar la residencia por petición
La política de la clave es el valor por defecto. Anúlela para una sola llamada con una cabecera, útil cuando un endpoint maneja una clase de datos más estricta que el resto de la clave.
resp = client.chat.completions.create(
model="mistral/mistral-large-latest",
messages=msgs,
extra_headers={"X-Sluis-Residency": "eu-only"},
)
# PHI in the prompt? Sluis routes EU-only and
# blocks with 451 if no EU provider is available.const resp = await client.chat.completions.create( { model: "mistral/mistral-large-latest", messages }, { headers: { "X-Sluis-Residency": "eu-only" } }, ); // PHI in the prompt? Sluis routes EU-only and // blocks with 451 if no EU provider is available.
let resp = client .post(format!("{base}/chat/completions")) .bearer_auth(&key) .header("X-Sluis-Residency", "eu-only") .json(&body) .send().await?; // PHI in the prompt? Sluis routes EU-only and // blocks with 451 if no EU provider is available.
La cabecera solo puede hacer una petición más estricta que la política de la clave, nunca más laxa. Una petición jamás puede ampliar su propia residencia. Para ampliar adónde pueden ir los datos (por ejemplo permitir proveedores de EE. UU. o China) cambie la política base en la Consola.
¿Necesita mantener los datos personales completamente fuera del modelo, para usar cualquier modelo sin filtrar ni un solo nombre, número o secreto? Active Políticas → Protección de datos: Sluis reemplaza los PII y secretos detectados con tokens tipados estables (p. ej. «EMAIL_1»), reenvía solo los tokens al proveedor y restaura los valores originales en la respuesta. La correspondencia nunca se persiste. Eso es lo que hace seguro llamar a un modelo de EE. UU. o China. La biblioteca completa de detectores y la detección de nombres se tratan en la referencia de Protección de datos más abajo.
Verificar el sello
Cada llamada añade una entrada a la cadena de hashes. Descargue la cadena y vuelva a verificarla sin conexión, el hash de cada entrada es sha256(prev_hash + record), de modo que cualquier campo alterado rompe todos los eslabones posteriores.
curl https://api.sluis.ai/v1/audit/export?from=genesis \ -H "Authorization: Bearer $SLUIS_KEY" | sluis verify - # → 18,442 entries · chain intact · head #4f9c2a ✓