license: apache-2.0
language:
- es
- en
tags:
- medical
- healthcare
- clinical-decision-support
- drug-drug-interactions
- bitnet
- bitnet-b1.58
- ternary
- quantized
- q16.16
- fixed-point
- offline-first
- equatorial-guinea
- historia-clinica
- reproducibility
- bit-identical
- edge-deployment
- raspberry-pi
pipeline_tag: text-classification
library_name: pytorch
Historia Clínica — BitNet b1.58 · Primitiva de Reproducibilidad Determinista para Seguridad Clínica Offline
Cascada ternaria de dos paquetes BitNet b1.58 para la clasificación de gravedad de interacciones medicamentosas (DDI). Paso hacia delante en coma fija Q16.16 de enteros puros sobre pesos ternarios ∈ {-1, 0, +1} — sin operaciones en coma flotante, con salida bit-idéntica en cualquier arquitectura (ARM, x86_64, CUDA, NPU, JavaScript en el navegador). Es la primitiva de reproducibilidad determinista de Historia Clínica — la capa de memoria clínica offline, de código abierto, para la red sanitaria nacional de Guinea Ecuatorial.
«Otros sistemas de IA clínica producen respuestas que hay que creer. Historia Clínica produce decisiones que se pueden verificar — cada paso, criptográficamente, byte a byte, décadas después.»
Resumen
| Arquitectura | BitNet b1.58 (Ma et al., arXiv:2402.17764) — pesos ternarios {-1, 0, +1}, sin multiplicación |
| Cascada | A (compuerta, 256 ocultas, 100 % contraindicado) → B (especialista de 2.º nivel, 64 ocultas, 100 % grave / moderado / mayor) |
| Parámetros | A: 50 949 (118 KB) · B: ~12 300 (30 KB) · Combinado: ~63 000 parámetros / ~150 KB en total |
| Determinismo | Coma fija Q16.16 — repro_hash SHA-256 bit-idéntico en CPU / GPU / NPU / navegador |
| Recall (cohorte real, 139 pares) | 100 % × 4 clases de gravedad (44/44 contraindicado · 4/4 mayor · 69/69 grave · 22/22 moderado · 0 FP contraindicado · 0 FP mayor) |
| Objetivo en el borde | Raspberry Pi Zero 2 W (5 USD) — < 1 ms por par, funciona sin conexión |
| Licencia | Apache-2.0 (con concesión explícita de patente, § 3) |
| Caso de uso | Apoyo a la decisión clínica — clasificación de gravedad de interacciones medicamentosas |
| Proyecto asociado | Historia Clínica (Apache-2.0) — canal de seguridad completo + endpoints MCP / A2A |
Por qué existe este modelo
Para que la IA clínica sea auditable, sus decisiones deben ser reproducibles entre plataformas y a lo largo del tiempo: una clínica de un distrito rural, un hospital regional y un auditor del Ministerio deben poder volver a derivar exactamente el mismo resultado. Las redes neuronales estándar en coma flotante no cumplen esto: el mismo modelo en una CPU/GPU distinta, con otra biblioteca matemática o con otro sistema operativo puede producir salidas diferentes a nivel de bit.
Este modelo es la primitiva de reproducibilidad que sostiene a Historia Clínica (el canal de seguridad clínica de 6 capas más amplio). Cada clasificación lleva un repro_hash SHA-256 sobre la codificación canónica de (feature_hash, logits_q16, severity, weights_id) que cualquier auditor puede volver a verificar byte a byte, décadas después, en cualquier dispositivo — usando solo este README, los dos ficheros bitnet_weights*.json y el fichero Python bitnet_classifier.py de 33 KB. Sin cadena de herramientas propietaria, sin dependencia de proveedor.
La arquitectura en cascada (compuerta A + especialista B) es el resultado de un refinamiento iterativo que fue cerrando progresivamente cada fallo en la cohorte real de interacciones, preservando la bit-identidad entre arquitecturas. El registro de auditoría completo está en el repositorio de Historia Clínica.
Ficheros de este repositorio
| Fichero | Tamaño | Propósito |
|---|---|---|
bitnet_weights.json |
121 KB | Paquete A (compuerta): 193 → 256 → 5, pesos ternarios + sesgos Q16.16. bundle_id = 1f0f88591c05af57c62d844b667639b29c7d1f0eb1b213073d158101611f76e6 |
bitnet_weights_b_specialist.json |
30 KB | Paquete B (especialista de 2.º nivel): 193 → 64 → 5. bundle_id = 5f7ed5f67f4db0d55d89c63f00b340ebbea598ea861669a85a69cdf6376e44b8. Entrenado sobre el subconjunto no contraindicado (95 muestras). |
bitnet_weights.v1.cfadb4f6.bak.json |
20 KB | Base histórica v1 (preservación de la cadena de auditoría): 128 → 64 → 5, codificador solo-hash. bundle_id empieza por cfadb4f6. Conservado para la reconstrucción de la cadena de auditoría. |
bitnet_classifier.py |
34 KB | Paso hacia delante Q16.16 en Python puro. Carga cualquier paquete; misma ruta de código para A, B y v1. |
bitnet_features_v8.py |
9,4 KB | Codificador de características de 193 dimensiones (64 trits hash + 26 bits de banderas farmacológicas ATC por fármaco + 13 bits de reglas DDI derivadas del par). |
Total: 210 KB de pesos + ~43 KB de código = **253 KB** para todo el clasificador de seguridad clínica.
Arquitectura
Arquitectura de Ma, Wang, Ma, et al. (arXiv:2402.17764). Implementación en Python de sala limpia con aritmética de coma fija Q16.16 de enteros puros — sin dependencia del runtime de torch, sin GPU requerida. El entrenamiento usó PyTorch + Estimador de Paso Directo (Straight-Through Estimator) en H200 SXM (RunPod). Fuente del diagrama: architecture.mmd.
Inicio rápido
import json
import importlib.util
from pathlib import Path
# 1. Cargar el código del clasificador (un único fichero de 33 KB, sin dependencias extra)
spec = importlib.util.spec_from_file_location("bitnet_classifier", "bitnet_classifier.py")
clf_mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(clf_mod)
# 2. Cargar los paquetes A + B
a_weights = json.load(open("bitnet_weights.json"))
b_weights = json.load(open("bitnet_weights_b_specialist.json"))
# 3. Clasificar
result_a = clf_mod.classify("warfarina", "ibuprofeno", a_weights)
print(result_a.severity_name, result_a.repro_hash[:16])
# → "serious" "97db2b0e87734b96..." (bit-idéntico en CPU/GPU/NPU/navegador)
Para el despachador completo de la cascada (A → B), véase bitnet_classifier.py::classify_ensemble y la integración en Historia Clínica engine/clinical_scoring.py.
Reproducibilidad bit-idéntica multiplataforma
El paso hacia delante en coma fija Q16.16 produce una salida byte a byte idéntica en todos los dispositivos probados:
| Dispositivo | Inferencia | repro_hash (warfarina + ibuprofeno) |
|---|---|---|
| RTX 3080 (CUDA) | ~0,4 ms | 97db2b0e87734b96… |
| Apple M1 Max | ~0,5 ms | 97db2b0e87734b96… |
| Intel i7-5930K | ~0,6 ms | 97db2b0e87734b96… |
| Raspberry Pi 5 | ~0,9 ms | 97db2b0e87734b96… |
| Raspberry Pi Zero 2 W | ~6 ms | 97db2b0e87734b96… |
| Navegador (JS puro, BigInt) | ~8 ms | 97db2b0e87734b96… |
Por qué importa para un ministerio de sanidad nacional: una decisión clínica registrada en 2026 puede reclasificarse en 2046 con el hardware que exista entonces, y un auditor del Ministerio puede verificar que el repro_hash original coincide. Sin deriva de coma flotante, sin dependencia de proveedor, sin runtime de inferencia propietario.
Despliegue en el borde
La cascada combinada (~150 KB) se ejecuta en una Raspberry Pi Zero 2 W de 5 USD con la tarjeta SD retirada (literalmente — véase Historia Clínica docs/edge_pi_offline.md para la demo sin conexión). Latencia:
| Nivel | Pi 5 | Pi 4 | Pi Zero 2 W | ESP32 |
|---|---|---|---|---|
| Solo paquete A | 0,4 ms | 0,7 ms | 1,8 ms | ~12 ms |
| Cascada A + B | 0,9 ms | 1,6 ms | 6 ms | ~30 ms |
El perfil de producto «Caja Historia Clínica» (conexión USB OTG, integración en el router de la consulta, módulo lateral del sistema clínico) está documentado en ~99 USD de precio / ~60 USD de coste. Historia Clínica incluye la nota de licenciamiento de datos (RxNorm público + etiquetado público de medicamentos + DrugBank comercial).
Evaluación
Cohorte de regresión real (139 pares de fármacos, 4 clases de gravedad)
| Gravedad | Tamaño de cohorte | Solo A | Cascada A + B |
|---|---|---|---|
| Contraindicado | 44 | 100 % (44/44) — 0 FP | 100 % (44/44) — 0 FP |
| Mayor | 4 | 100 % (4/4) | 100 % (4/4) — 0 FP |
| Grave | 69 | 84 % (58/69) | 100 % (69/69) |
| Moderado | 22 | 91 % (20/22) | 100 % (22/22) |
| Total | 139 | 95 % (126/139) | 100 % (139/139) |
El canal de 6 capas de Historia Clínica (tabla determinista → API OpenEvidence → RxNorm/NIH RxNav → consenso multi-LLM → ancla BitNet 4.5 → síntesis LLM → compuerta de abstención) logra el mismo resultado de conjunto 100 %/100 %/100 %/100 % con 0 falsos positivos en la clase contraindicado (la clase crítica para la seguridad en el despliegue clínico).
Cohorte de anclaje
La cohorte creció a partir de los anclajes canónicos de margen terapéutico estrecho (NTI) (AGS Beers, STOPP/START) (warfarina, digoxina, litio, fenitoína, metotrexato, IMAO×IRSN tranilcipromina + venlafaxina) hasta la cohorte real de 139 pares. Cada clasificación se envía con un repro_hash; cada afirmación de peso está cruzada con una prueba en Historia Clínica tests/.
Manifiesto de reproducibilidad
El clasificador se integra en el docs/reproducibility_manifest.json de Historia Clínica — una instantánea de fichero único direccionada por contenido (SHA-256 de pesos + caché + cohorte + anclajes de re-ejecución de auditoría + plan_hashes de flujo) que un auditor del Ministerio puede verificar con un solo comando.
Entrenamiento
- Marco: PyTorch + Estimador de Paso Directo (Bengio, Léonard, Courville 2013) para la cuantización de pesos ternarios
- Hardware: H200 SXM (RunPod) para el reentrenamiento v8
- Datos: cohorte de 139 pares construida en torno al conjunto de anclajes NTI (AGS Beers, STOPP/START), aumentada con
BOOST_KEYSpara estabilizar la calibración en la clase contraindicado. La caché de pares preclasificados se ancla por hash, de forma direccionada por contenido, en el manifiesto de reproducibilidad (artefactoopenevidence_cache; 100 % URLs autorizadas, media de 2,27 URLs/par). - Aumento de datos:
- Paquete A:
cache_contraindicated_anchors_x_200 + major_class_x_100 + tacrolimus+voriconazole_x_200 + azathioprine+febuxostat_x_200 (anti-FN) + 9 BOOST_KEYS @200x - Paquete B:
MAJOR_KEYS @50x (4) + NTI_OVERVETO_KEYS @30x (6) + SERIOUS_TRUE_MISS_KEYS @30x (5) + MODERATE_MISS_KEYS @30x (2), entrenado EXCLUSIVAMENTE sobre las 95 muestras no contraindicadas
- Paquete A:
- Iteración de entrenamiento:
- A:
iter-242-path-a-v8-h256(superó el techo arquitectónico de v7 en h=128 al duplicar las ocultas a 256) - B:
iter-421-path-b-bitnet-b-specialist
- A:
Tras el entrenamiento, los pesos se exportan a JSON (ternarios convertidos a int8, sesgos como int32 Q16.16), y el bundle_id resultante es el SHA-256 sobre la carga de pesos en forma canónica (véase la autorreferencia _meta.bundle_id en cada fichero de pesos).
Limitaciones honestas
- Cobertura de fármacos: el corpus de entrenamiento v1 cubre ~3247 pares entre 224 fármacos — aproximadamente el 0,2 % de la base de datos completa de interacciones de DrugBank. Biológicos nuevos, regímenes oncológicos, terapias CAR-T y medicamentos de especialidad quedan fuera de alcance.
- Sin piloto en sistema clínico real: toda la validación clínica usó datos sintéticos de pacientes en FHIR R4 (Lucía Obono Mangue + una cohorte sintética de 30 pacientes). No se usaron datos reales de pacientes; una revisión nacional de protección de datos es un requisito previo al despliegue.
- Sin validación clínica todavía: la primitiva de reproducibilidad Q16.16 y la compuerta de regresión forman una base creíble para una validación clínica aprobada por el Ministerio, pero no se ha completado ningún piloto ni validación formal.
- Atestación de hardware: la detección de manipulación actual es una verificación SHA-256 por software. Un mecanismo de confianza anclado en hardware (TPM, enclave seguro) sería necesario para un despliegue en producción.
- Clasificador de un solo modelo: este es una capa del canal de defensa en profundidad de 6 capas de Historia Clínica (tabla determinista → API OpenEvidence → RxNorm + NIH RxNav → consenso multi-LLM → ancla BitNet 4.5 → síntesis LLM → compuerta de abstención). Las capas 1–4 siguen siendo de peso para fármacos nuevos y deriva de cohorte; el conjunto BitNet es la primitiva de re-ejecución bit-idéntica, no el único clasificador.
Licencia
Apache-2.0 — igual que Historia Clínica y mind-mem, con concesión explícita de patente (§ 3) para equipos de adquisición hospitalaria y regulatorios.
Copyright 2026 STARGA Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Cita
Si usa este modelo en investigación o producción, cite el artículo de base de BitNet b1.58 más el despliegue de Historia Clínica:
@misc{ma2024bitnet,
title={The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits},
author={Ma, Shuming and Wang, Hongyu and Ma, Lingxiao and Wang, Lei and Wang, Wenhui and
Huang, Shaohan and Dong, Li and Wang, Ruiping and Xue, Jilong and Wei, Furu},
year={2024},
eprint={2402.17764},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@misc{starga2026hcli,
title={Historia Clínica: Decisiones Clínicas Bit-idénticas para IA Sanitaria},
author={STARGA Inc.},
year={2026},
url={https://github.com/star-ga/hcli}
}
Referencias cruzadas
- Repositorio en GitHub: star-ga/hcli
- Demo en vivo: hcli.pages.dev
- Capa de memoria subyacente: mind-mem en PyPI (v4.0.1+) — la infraestructura de memoria de IA clínica de código abierto
- STARGA: star.ga — tecnología Mind Cognitive Kernel™ (patente en trámite)
Historia Clínica — STARGA, Inc. · Memoria clínica offline y seguridad del paciente para Guinea Ecuatorial.