Paquetes:
@carloscortezcloud/sayay-guard(npm) ·sayay(PyPI) — https://pypi.org/project/sayay/ · Repo: breakingthecloud/sayay · Python:sayay· Ejemplos:examples/+python/examples/
Última actualización: 2026-08-25 · v0.1.0 → v0.3.0 (+ v0.1.0-py) · Verificado git tag + npm view + PyPI.
Overview
| Versión | Git tag | Fecha (git) | Fecha (registry) | Registry | Resumen |
|---|---|---|---|---|---|
| 0.3.0 | v0.3.0 |
2026-08-14 | 2026-08-15 01:31 UTC | npm | SayayQhawayPlugin → Qhaway metrics |
| 0.2.0 | v0.2.0 |
2026-08-02 | 2026-08-02 21:30 UTC | npm | TokenBudgetExceededException + Dynamo + CloudWatch |
| 0.1.0 (PyPI) | v0.1.0-py |
2026-07-31 | 2026-07-31 ~19:15 UTC | PyPI | Python SDK sayay 0.1.0 · Memory/File/Redis |
| 0.1.1 | v0.1.1 |
2026-07-22 | 2026-07-22 23:36 UTC | npm | Fix ESM type: module |
| 0.1.0 | v0.1.0 |
2026-07-22 | 2026-07-22 23:31 UTC | npm | Initial: 308 líneas, zero deps, budgets por user |
Nota:
v0.2.0faltaba engit ls-remotehasta 2026-08-25 — pusheado conv0.1.1.
v0.3.0 — 2026-08-14 — Qhaway Plugin — De guardrail a observabilidad
Tag: v0.3.0 @ 0622e54 · npm: 0.3.0 @ 2026-08-15T01:31:49.694Z · 6 files, 39,690
Qué cambió:
src/qhaway.ts: SayayQhawayPlugin—onDecision({ action, userId, cost, budget }) → qhaway_sayay_decisions_total(zero hard deps)- Helper
sayayDecisionMetric+examples/sayay-qhaway.ts
import { SayayQhawayPlugin } from '@carloscortezcloud/sayay-guard/qhaway';
import { QhawayTracer } from '@carloscortezcloud/qhaway';
const plugin = new SayayQhawayPlugin(tracer);
const guard = new SayayGuard({ storage: new MemoryStorage(), budget: { dailyUsd: 5.0 }, onDecision: plugin.onDecision });
v0.2.0 — 2026-08-02 — DynamoStorage + CloudWatch + TokenBudgetExceededException
Tag: v0.2.0 @ 8738a33 · npm: 0.2.0 @ 2026-08-02T21:30:45.479Z · 4 files, 32,544
Qué cambió:
TokenBudgetExceededException extends BudgetExceededError+checkOrThrow()para Step FunctionsErrorEqualsDynamoStorage(lazy@aws-sdk/client-dynamodb) + CloudWatch metric emit
await guard.checkOrThrow('user-123', 0.01);
v0.1.0-py — 2026-07-31 — Python SDK sayay 0.1.0
Tag: v0.1.0-py @ ef89178 · PyPI: sayay 0.1.0 · whl + tar.gz
Qué cambió:
python/src/sayay/core.py+storage.py(Memory/File/Redis) +types.pypip install sayay(sayay[redis]opcional)
from sayay import SayayGuard, MemoryStorage
guard = SayayGuard(storage=MemoryStorage(), budget={"daily_usd": 5.0})
→ GitHub v0.1.0-py · → PyPI sayay 0.1.0
v0.1.1 — 2026-07-22 — ESM fix
Tag: v0.1.1 @ 01502ba · npm: 0.1.1 @ 2026-07-22T23:36:19.309Z
package.json: "type": "module"
v0.1.0 — 2026-07-22 — Initial — 308 líneas, zero deps
Tag: v0.1.0 @ f80f14d · npm: 0.1.0 @ 2026-07-22T23:31:34.147Z · 4 files, 17,176
const guard = new SayayGuard({ storage: new MemoryStorage(), budget: { dailyUsd: 5.0 } });
await guard.check('user-123', 0.003);
Verificación
git tag --list | sort -V
npm view @carloscortezcloud/sayay-guard versions --json
curl -s https://pypi.org/pypi/sayay/json | jq .info.version