Metadata-Version: 2.5
Name: genial-capa
Version: 0.1.0
Summary: SDK Cliente Oficial de Gen.IA.L CAPA — Gobernanza de Privacidad y Cumplimiento Normativo (Ley 21.719)
Author-email: "Gen.IA.L Team" <soporte@genial.ia>
License: MIT
Keywords: data-protection,gdpr,ley-21719,llm-security,opa,presidio,privacy
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Security
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Requires-Dist: httpx>=0.27.0
Requires-Dist: pydantic>=2.0.0
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: respx>=0.21.0; extra == 'dev'
Description-Content-Type: text/markdown

# Gen.IA.L CAPA Python SDK 🛡️

SDK cliente oficial para integrar el motor de gobernanza de privacidad y cumplimiento normativo (Ley 21.719 - Chile) de **Gen.IA.L CAPA** en tus aplicaciones, CRMs y agentes de Inteligencia Artificial.

---

## 📦 Instalación

```bash
uv add genial-capa
# o con pip
pip install genial-capa
```

---

## 🚀 Uso Rápido

### 1. Cliente Asíncrono (`AsyncCapaClient`)

```python
import asyncio
from genial_capa import AsyncCapaClient

async def main():
    async with AsyncCapaClient(api_key="sk_capa_tu_api_key_aqui") as capa:
        decision = await capa.evaluate(
            text="El paciente Juan Pérez, RUT 12.345.678-5, presenta hipertensión.",
            destination="ExternalLLM",
            operation="PROMPT_ANALYSIS",
        )
        print("Veredicto:", decision.verdict) # ALLOW, MASK, DENY
        print("Texto seguro:", decision.sanitized_text)

asyncio.run(main())
```

### 2. Decorador `@enforce` (Intercepción Automática)

```python
from genial_capa import enforce

@enforce(operation="CUSTOMER_SUPPORT", destination="ExternalLLM")
async def consultar_ia(prompt: str) -> str:
    # Si la política es MASK, 'prompt' llega automáticamente anonimizado
    # Si la política es DENY, la función nunca se ejecuta y lanza CapaPolicyViolationError
    return f"Respuesta para: {prompt}"
```
