Skip to main content

SDK Bulletproof para integrar aplicaciones Django Ninja con el GGR AI Gateway vía MCP.

Project description

GGR AI SDK

SDK bulletproof para integrar aplicaciones Django Ninja (Spokes) con el GGR AI Gateway vía MCP (Vertex AI Function Calling).

Establece una comunicación bidireccional tolerante a fallos y previene alucinaciones de argumentos del LLM generando automáticamente esquemas JSON a partir de las firmas de tus funciones Python.

Características

  • Registro por decorador (@mcp_tool): inspecciona la firma de la función, genera el esquema Pydantic→Vertex y oculta el contexto estático al LLM.
  • Inyección de contexto Zero-Trust (MCPContext): las variables sensibles (user_id, tenant_id, …) nunca las decide el LLM; fluyen por el contexto estático.
  • Cliente HTTP resiliente: reintentos con backoff exponencial + jitter.
  • Manejo de errores estructurado: las herramientas devuelven {"error": ...} en lugar de provocar un 500, habilitando el reintento cognitivo del LLM.
  • Runs agénticos durables: cliente start_run / resume_run / approve_run / get_run
    • SSE stream_run, con webhook de resultado terminal y señales ai_run_completed/failed.
  • Multimodal y memoria: attachments (Base64) y session_id en el dispatch.
  • Idempotencia: deduplica reintentos de Cloud Tasks en /execute (caché de Django).
  • Módulo contrib (opcional): seguimiento persistente del ciclo de vida del chat en la BD del Spoke y actualizaciones en tiempo real al frontend vía Server-Sent Events (SSE).

Instalación

pip install ggr-ai-sdk

Uso mínimo

from ggr_ai_sdk import mcp_tool, MCPContext

@mcp_tool(name="cerrar_ticket", description="Cierra un ticket de soporte.")
async def cerrar_ticket(context: MCPContext, ticket_id: int, resolucion: str) -> str:
    user_id = context.user_id  # proviene del contexto estático, no del LLM
    if not user_id:
        return '{"error": "Usuario no identificado en el contexto estático."}'
    # ... lógica de negocio ...
    return f"Ticket {ticket_id} cerrado."

Registra el router del SDK en tu API de Django Ninja:

from ninja import NinjaAPI
from ggr_ai_sdk.routers import mcp_router

api = NinjaAPI()
# Verificados por firma HMAC del Gateway:
#   /execute          ejecución de herramientas MCP
#   /webhook          resultado de un dispatch
#   /webhook/run      resultado terminal de un run durable
api.add_router("/sdk", mcp_router)

Runs agénticos durables

from ggr_ai_sdk import AIGatewayClient, ai_run_completed

client = AIGatewayClient(base_url=settings.AI_GATEWAY_URL, api_key=settings.GGR_AI_SPOKE_API_KEY)

# Inicia un run; el resultado terminal llega por webhook a /sdk/webhook/run.
run = await client.start_run(
    goal="Reagenda todas las citas del cliente 42 a la próxima semana",
    callback_url="https://tu-spoke/api/sdk/webhook/run",
    session_id="conversacion-uuid",  # opcional: memoria entre runs
)

# Reacciona al resultado vía señal de Django.
def on_run_done(sender, payload, **kwargs):
    print(payload.run_id, payload.status, payload.result_text)

ai_run_completed.connect(on_run_done)

El Gateway envía el webhook de run a la callback_url tal cual: debe apuntar a /sdk/webhook/run (distinto del /sdk/webhook del dispatch, cuyo payload es diferente).

Configuración (settings.py del Spoke)

Variable Descripción
AI_GATEWAY_URL URL del GGR AI Gateway (local: http://localhost:8001).
AI_CALLBACK_URL URL del webhook del Spoke al que responde el Gateway.
GGR_AI_SPOKE_API_KEY API Key compartida con el Gateway (UUID de la ClientApp), usada saliente (X-API-Key al despachar). Obligatoria en producción.
GGR_AI_WEBHOOK_SECRET Secreto HMAC compartido (ClientApp.webhook_secret del Gateway). El SDK lo usa para verificar la firma (X-Timestamp + X-Signature) de las llamadas entrantes del Gateway a /execute y /webhook. Obligatoria en producción.
GGR_AI_IDEMPOTENCY_TTL_SECONDS (opcional, def. 86400) TTL del resultado deduplicado por idempotency_key. La deduplicación usa el framework de caché de Django: en producción configura un backend compartido (Redis) para que funcione entre procesos/instancias.

Seguridad entrante (HMAC): el Gateway firma cada llamada al Spoke con hmac_sha256(webhook_secret, f"{timestamp}." + raw_body) y la envía en X-Signature (sha256=…) junto con X-Timestamp. El SDK la verifica en tiempo constante y rechaza firmas inválidas o fuera de la ventana anti-replay (300 s). En DEBUG sin secreto configurado, la verificación se omite con un warning (solo para desarrollo local).

El contrato de payloads (AIRequestPayload / WebhookResponsePayload) y los estados (COMPLETED / FAILED) deben mantenerse en sincronía con el GGR AI Gateway.

Para la integración completa con persistencia y SSE, consulta el manual paso a paso en CLAUDE.md.

Desarrollo

.venv\Scripts\pytest.exe                       # pruebas
.venv\Scripts\ruff.exe check src/ tests/ --fix # lint + formato
.venv\Scripts\mypy.exe src/ tests/             # tipos (modo estricto)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ggr_ai_sdk-0.4.3.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ggr_ai_sdk-0.4.3-py3-none-any.whl (25.8 kB view details)

Uploaded Python 3

File details

Details for the file ggr_ai_sdk-0.4.3.tar.gz.

File metadata

  • Download URL: ggr_ai_sdk-0.4.3.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for ggr_ai_sdk-0.4.3.tar.gz
Algorithm Hash digest
SHA256 65475a576af75971a6e0eddb81117a2ce6f5a169c75299912c840d2b6bf7231e
MD5 3d434434d3c8bbabc2c2d1ef598b9e69
BLAKE2b-256 2e00cffdc086b0410c755921aed40009c9c0ff52ee71d37c0e770641ad1abe46

See more details on using hashes here.

File details

Details for the file ggr_ai_sdk-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: ggr_ai_sdk-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 25.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for ggr_ai_sdk-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0d3871f0cc3127d2c29cc1ea8de4e68bdbb45233f26afe167c95e44bf49def21
MD5 ab23cbdd4d223907e5cab342252437f0
BLAKE2b-256 51a2bec9f6213d8be42004ac96344cf1e5b68fe16031368cd24e6483633b620c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page