Skip to main content

Synthelium SDK

Cliente oficial para la API de Aletheox — gobernanza verificable de agentes de IA. HTTP puro: solo habla con https://api.aletheox.com.

Instalación

Instálalo desde PyPI:

pip install synthelium-sdk

Alternativa offline / distribución privada — desde el archivo .whl que recibiste:

pip install ./synthelium_sdk-2.2.2-py3-none-any.whl

Única dependencia: httpx.

Uso en 3 líneas

from synthelium_sdk import SyntheliumClient, Agent

client = SyntheliumClient(api_key="sk-synthelium-...")
report = client.run_evaluation(Agent(mi_funcion_llm), sector="banking")
report.print_report()

Por defecto el cliente apunta a producción. La key se envía en cada llamada protegida; consíguela en directiva@aletheox.com.

Campo de Riesgos

Evalúa tu agente contra los seis vectores adversariales de tu sector (banking, clinical, telecom).

Atajo — todo de una:

report = client.run_evaluation(Agent(mi_funcion_llm), sector="banking")
print(report.summary())

Granular — cuando necesitas control fino. Tu agente corre en tu máquina; el SDK solo envía la acción propuesta:

s = client.start_session("banking")
sid = s["session_id"]
while True:
    step = client.probe(sid)
    if step.get("done"):
        break
    accion = mi_agente(step["system"], step["user"])
    client.act(sid, step["vector_id"], accion)
result = client.finalize(sid)

Otros métodos: client.get_certificates(sid), client.verify_certificate(cert), client.session_status(sid), client.list_sectors(), client.list_vectors(), client.health().

Constructor de Procesos

Define tu propio proceso en lenguaje natural mediante client.builder:

proceso = client.builder.parse(
    "El proceso comienza con el registro. Luego se verifica la póliza. "
    "El pago se aprueba tras el dictamen.")
val = client.builder.validate(proceso)
if val["valid"]:
    built = client.builder.build(proceso)
    print(built["stability_report"]["tipo_estructura"])

Plantillas:

client.builder.list_templates()
plantilla = client.builder.get_template("reclamacion_seguros")
clon = client.builder.clone_template("reclamacion_seguros", "Mi proceso")

Procesos guardados: list_processes(), get_process(id), rebuild_process(id), delete_process(id). Atajo: client.builder.build_from_text(texto).

Capa de Consecuencias (gate)

Convierte el veredicto en control activo: antes de una acción crítica, tu agente consulta el gate y solo procede si Synthelium lo permite. Si se bloquea, queda pendiente de resolución humana — el interventor aprueba, rechaza o escala, y cada resolución queda certificada.

r = client.gate(sid, action="disbursement")
if r["proceed"]:
    ejecutar_accion()
else:
    # Bloqueado: el agente se detiene. El interventor decide en su panel.
    cert_id = r["cert_id"]
    client.approve_gate(sid, cert_id, intervenor="ana@banco.com")
    # o: client.reject_gate(...) / client.escalate_gate(...)

Consulta: client.gate_status(sid, cert_id), client.list_gates(sid), client.latest_resolution(sid).

Contención activa (guard)

Para impedir que una acción fuera de la estructura llegue a ejecutarse, envuelve tu proceso con un guard y llama check(...) antes de cada acción. Si está bloqueada, check() lanza ActionBlocked y la acción no corre:

from synthelium_sdk import ActionBlocked

g = client.guard(process_id="proc-1", session="run-42")
try:
    g.check("disbursement", payload={"monto": {"value": 6000, "unit": "COP"}})
    ejecutar_accion()                      # solo se ejecuta si el gate lo permitió
except ActionBlocked as e:
    # e.enforced=True  -> corte VINCULANTE (nodo sellado): no se ejecuta, sin humano.
    # e.requires_human -> bloqueo advisory: el interventor decide en su panel.
    # e.authorized_by  -> hash del cert de config que autorizó el corte (Ed25519);
    #                     prueba verificable offline de que el bloqueo estuvo autorizado.
    manejar_bloqueo(e)

Advisory con espera al interventor: g.check("disbursement", payload=..., wait_human=True) (devuelve cuando se aprueba; lanza si se rechaza/escala/vence).

Política ante caída del gate (por nodo): un nodo con corte sellado es fail-closed (si no se puede verificar, no se ejecuta); el resto es fail-open (procede). El guard cachea qué nodos están sellados al crearse; refréscalo con g.refresh().

Esa política solo se aplica si el guard alcanzó a leer los sellos. Si el gate ya estaba caído al crear el guard (no se sabe qué nodos están sellados), todo es fail-closed: no se puede descartar que la acción tenga corte sellado, y ante lo desconocido se corta. Antes se asumía "ninguno sellado" y el proceso entero procedía sin control — un fail-open silencioso.

Sellar el corte de un nodo (qué nodos cortan de verdad):

client.set_enforce("proc-1", "disbursement", True)   # sella el corte vinculante
client.get_enforce("proc-1")                          # {node_id: enforce}

Shadow mode (observe)

Para validar la política en producción sin riesgo: tu IA opera normal y, en paralelo, observe() registra qué decisión habría tomado Synthelium (con su cert Ed25519 OBSERVADO) sin bloquear ni interrumpir nunca. observe() NO lanza: ante un fallo de red retorna y tu agente sigue.

g = client.guard(process_id="proc-1", session="run-42")
r = g.observe("disbursement", payload={"monto": {"value": 6000, "unit": "COP"}})
ejecutar_accion()                          # tu IA ejecuta SIEMPRE; observe solo registra
# r["would_block"]       -> la política HABRÍA bloqueado esta acción
# r["would_be_binding"]  -> el corte real HABRÍA sido vinculante (nodo sellado)
# r["cert_id"]           -> registro de la decisión; KPI: "decisiones auditadas"

Monitoreo 24/7

Recibe alertas en tiempo real (bloqueos, gates vencidos, patrones de ataque) en tu propio webhook, y consulta el Panel del Interventor:

client.monitoring.subscribe("https://tu-servidor/webhook")
client.monitoring.panel()     # gates pendientes, bloqueos 24h, alertas activas
client.monitoring.health()

Eventos disponibles: blocked, gate_pending, gate_expired, pattern_detected.

Manejo de errores

Todas heredan de SyntheliumError:

Excepción Cuándo
AuthenticationError API key ausente o inválida (401)
RateLimitError Límite de uso alcanzado (429), tras reintentos
ServerError Error del servidor (5xx), tras reintentos
SyntheliumConnectionError No se pudo conectar (red/DNS)
SyntheliumError Base — captura cualquier fallo del SDK

El SDK reintenta con backoff ante 429 y timeouts (hasta 3 intentos).

Privacidad

Tu agente se ejecuta siempre en tu propia máquina. El SDK pide cada escenario al servidor, corre tu función localmente y solo envía la acción propuesta. Tu código nunca sale de tu host.

Acceso

directiva@aletheox.com

Metadata

Release files for synthelium-sdk 2.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for synthelium-sdk 2.3.0
File Size Uploaded Provenance Actions
synthelium_sdk-2.3.0.tar.gz 23.7 kB Without provenance Details for synthelium_sdk-2.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for synthelium-sdk 2.3.0
File Interpreter ABI Platform Actions
synthelium_sdk-2.3.0-py3-none-any.whl Python 3 none any Details for synthelium_sdk-2.3.0-py3-none-any.whl

Total release size: 48.3 kB

Release files / synthelium_sdk-2.3.0.tar.gz

Download URL synthelium_sdk-2.3.0.tar.gz
Size 23.7 kB
Tags Source
SHA-256 checksum
How to use checksums
90ce14478d6c78e5cc51163e91feb5763559ac7d7f5a94ab06cc741ccd130002
BLAKE2b-256 checksum
How to use checksums
a902a8d8cf3b985dd0062bb0ff193af8150ad2b31585a3e64702df837637cdd3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Release files / synthelium_sdk-2.3.0-py3-none-any.whl

Download URL synthelium_sdk-2.3.0-py3-none-any.whl
Size 24.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
36eb683dc61f1d98eeb0c0d57f9c1efbfcddd9fc00ada9ed6fb3db68ed1196aa
BLAKE2b-256 checksum
How to use checksums
81cf0c45daf3349999b5f370ec7e62e9bd41ac97b5becd57bec8fb1beb1c6fc5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Security for synthelium-sdk 2.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page