This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.8.4 instead.
Marina — Sistema Metacognitivo Unificado
Marina (marinaedutlan) es un sistema metacognitivo bioinspirado y extensible, pensado para investigación, enseñanza y agentes autónomos. Su núcleo es la clase única MarinaAgent, que integra en un solo ciclo cognitivo:
- DMA (Dendritic Metacognitive Architecture): primitivas biofísicas de estabilidad-plasticidad.
- Meta-DNA: genoma regulatorio con Modelo del Yo (MoS), vías (pathways), trazas epigenéticas (χ) y una aproximación del Algoritmo 1 con costos de sobrecarga.
- MCP (Metacognitive Control Plane): ejecutivo teórico-decisional con acciones metacognitivas (
STOP,CONTINUE,VERIFY,SWITCH,REQUEST). - Sustrato cognitivo: memoria de trabajo multi-buffer, memoria episódica con engramas DMA, memoria semántica con activación y memoria procedimental con utilidades.
Se publica en npm y PyPI con la misma API (camelCase en JS, snake_case en Python) e incluye el mismo CLI (marina / marinaedutlan). Los dos paquetes son equivalentes: con la misma semilla producen exactamente los mismos números, y un perfil guardado con uno se puede cargar en el otro.
Documentación completa (arquitectura, investigación, pruebas, publicación y hoja de ruta): https://github.com/cristianmi24/Marina/tree/main/documentacion
Características
- Núcleo único
MarinaAgent(DMA + Meta-DNA + MCP + sustrato cognitivo). - Tareas enchufables (
Task): la memoria (sesgo de recuperación, problemas pasados) influye en las decisiones desde el primer paso. - Memoria episódica con engramas DMA, crecimiento dinámico y poda por importancia.
- Regulación Meta-DNA con aproximación del Algoritmo 1 (ε, co-expresión Rk, χ, η) y persistencia de "desarrollo cognitivo" entre sesiones.
- Auto-auditoría IM-Onto (KTP, DRFP, ADTP) y Mirror Test (MET-1 a MET-4) con puntaje
amsLike. - Perfiles cognitivos portables (
getCognitiveProfile) y persistencia (serialize/deserialize). - Harnesses de investigación: ablaciones, Monte Carlo, benchmark de recuperación ante reversión.
- Reproducibilidad con semillas (
seed), idéntica en JavaScript y Python. - Ablaciones en tiempo de ejecución (
setAblations:no_dma,frozen_memory,no_spreading, ...) para medir qué aporta cada componente.
Requisitos
| Plataforma | Versión mínima | Dependencias |
|---|---|---|
| Node.js (npm) | >= 18 | Ninguna en tiempo de ejecución |
| Python (PyPI) | >= 3.9 | Ninguna |
Instalación
npm install marinaedutlan # como librería
npm install -g marinaedutlan # CLI global
pip install marinaedutlan # Python
En PyPI el paquete se llama
marinaedutlan, pero se importa comomarina.
Uso básico
JavaScript / TypeScript
import { MarinaAgent } from "marinaedutlan/core";
const agente = new MarinaAgent("Planner", null, { seed: 42 });
agente.runEpisode(100);
console.log(agente.getSummary());
Python
from marina import MarinaAgent
agente = MarinaAgent(seed=42)
agente.run_episode(100)
print(agente.get_summary())
CLI (mismos comandos y misma salida en npm y en Python; en Python también python -m marina)
marina run --steps 100 # episodio de 100 pasos
marina run --steps 80 --json # salida JSON
marina run --steps 80 --seed 42 # ejecución reproducible
marina run --steps 60 --mirror # Mirror Test al final
marina run --steps 60 --save-profile
marina run --load-profile marina-profile-XXXX.json --steps 40
marina doctor # verificación de la instalación
marina examples # ejemplos de la API
marina help # ayuda
API principal
Constructor
| JS | Python | Descripción |
|---|---|---|
new MarinaAgent(backend, task, { seed, episodicCapacity, basalPlasticity }) |
MarinaAgent(backend="Planner", task=None, seed=None, episodic_capacity=50, basal_plasticity=0.15) |
backend: "Planner" o "RAG". task: null usa el bandit interno de 3 brazos (el mejor brazo cambia cada 40 pasos). |
Métodos
| JS / Python | Descripción |
|---|---|
step() / step() |
Avanza el ciclo cognitivo un paso. Devuelve dma, metaDna, mcp, outcome (recompensa) e info. |
runEpisode(n) / run_episode(n) |
Ejecuta N pasos. |
evaluate(task, steps, opts) / evaluate(task, steps, ...) |
Evalúa una tarea; devuelve avgOutcome, finalSummary, problemsDetected, ... |
runOnTask(task, steps) / run_on_task(...) |
Episodio en una tarea temporal. |
setTask(task) / set_task(task) |
Cambia la tarea en caliente. |
proposeAction(ctx) / propose_action(ctx) |
Acción que propondría ahora la memoria procedimental. |
reset() / reset() |
Reinicia el agente completo. |
getSummary() / get_summary() |
Resumen compacto (métricas clave). |
getCombinedState() / get_combined_state() |
Estado completo de todas las capas. |
getSubstrateStats() / get_substrate_stats() |
Estadísticas del sustrato. |
getSelfAudit() / get_self_audit() |
Auto-auditoría IM-Onto. |
getEpistemicMirrorSignals() / get_epistemic_mirror_signals() |
Señales MET-1 a MET-4. |
evaluateMirrorAMF(amf) / evaluate_mirror_amf(amf) |
Mirror Test ("full", "MET-1" … "MET-4"). |
getCognitiveProfile() / get_cognitive_profile() |
Perfil cognitivo portable (JSON). |
getMetacognitiveSnapshot() / get_metacognitive_snapshot() |
Perfil + auditoría + espejo. |
getAlgorithm1Details() / get_algorithm1_details() |
Desglose del Algoritmo 1 (ε/η/χ). |
applyMetacognitiveDirective(d, s) / apply_metacognitive_directive(d, s) |
Directivas externas (increase_introspection, ...). |
optimizeMemory() / optimize_memory() |
Crecimiento y poda de memoria por importancia. |
serialize() / deserialize(data) |
Guardar / restaurar estado. |
setSeed(n) / set_seed(n) |
Fija la semilla. |
setAblations([...]) / set_ablations([...]) |
Desactiva componentes durante la ejecución (no_dma, frozen_memory, no_spreading, no_compiled_prods, high_plasticity, low_plasticity). |
getHyperparameters() / get_hyperparameters() |
Hiperparámetros activos. |
getExperienceLessons(max) / get_experience_lessons(max) |
Lecciones compactas para agentes externos. |
getProblemHistorySummary() / get_problem_history_summary() |
Resumen de problemas recordados. |
retrievePastExperiences(q, n) / retrieve_past_experiences(q, n) |
Recupera experiencias pasadas. |
Métodos estáticos
| JS / Python | Descripción |
|---|---|
createSimpleTask(fn) / create_simple_task(fn) |
Crea una tarea desde una función de recompensa. |
runEpisodeWithProfile(profile, task, steps, seed) / run_episode_with_profile(...) |
Episodio reproducible desde un perfil guardado. |
runAblationCampaign(profile, task, steps, seed, ablations) / run_ablation_campaign(...) |
Compara condiciones (no_dma, no_spreading, frozen_memory, ...). |
runMonteCarloCampaign(profile, task, steps, seeds) / run_monte_carlo_campaign(...) |
N semillas con medias y desviaciones. |
runReversalRecoveryBenchmark(steps, seed, baseline) / run_reversal_recovery_benchmark(...) |
Recuperación ante cambio de régimen (una semilla) frente a no_dma y frozen_memory. |
runRecoveryStudy(steps, seeds) / run_recovery_study(...) |
El mismo benchmark sobre muchas semillas: media, desviación, mediana y fracción recuperada. |
runPaperReversalProtocol(runs, seed) / run_paper_reversal_protocol(...) |
Protocolo exacto del paper DMA (unidad DMA aislada frente a DQN y DQN+ER, 100 ejecuciones): latencias de recuperación y curvas. |
applyCognitiveModulations(...) / apply_cognitive_modulations(...) |
Modula una propuesta externa usando un perfil, sin agente vivo. |
Tarea personalizada
const tarea = MarinaAgent.createSimpleTask((ctx) =>
0.4 + (ctx.retrievalBias || 0) * 0.8 // la memoria favorece la decisión
);
const agente = new MarinaAgent("Planner", tarea, { seed: 42 });
const r = agente.evaluate(null, 20);
console.log(r.avgOutcome, r.finalSummary.lastRetrievalBias);
from marina import MarinaAgent
def tarea(ctx):
return {"reward": 0.4 + (ctx.get("retrievalBias") or 0) * 0.8}
agente = MarinaAgent(task=MarinaAgent.create_simple_task(tarea), seed=42)
r = agente.evaluate(steps=20)
print(r["avgOutcome"], r["finalSummary"]["lastRetrievalBias"])
El context que recibe la tarea incluye step, proposedAction (el brazo que elige el DMA), retrievalBias, pastProblems, recentProblemRate, recalledProblemsImpact (tasa reciente de fallos con esa misma acción) y dmaState. La tarea devuelve un número o { reward, info? }; si info.chosen indica la acción realmente tomada, el DMA aprende sobre esa acción.
Perfil portable y Mirror Test
agente = MarinaAgent(seed=42)
agente.run_episode(85)
mirror = agente.evaluate_mirror_amf("full")
print(mirror["overallMirrorScore"], mirror["amsLike"]["overall"])
perfil = agente.get_cognitive_profile() # JSON serializable
otro = MarinaAgent(seed=7)
otro.deserialize(perfil) # transfiere el "desarrollo cognitivo"
otro.run_episode(45)
Solución de problemas
| Problema | Solución |
|---|---|
marina: command not found |
npm install -g marinaedutlan (o npx marinaedutlan), o pip install marinaedutlan, y reabrir la terminal. |
ModuleNotFoundError: No module named 'marina' |
Instalar con pip install marinaedutlan e importar from marina import MarinaAgent. |
Cannot find module '...dist/core/MarinaAgent.js' |
Reinstalar el paquete; en el repo, npm run build:core. |
| Resultados distintos entre ejecuciones | Pasar seed (constructor, harnesses o --seed en el CLI). |
TypeError: Object of type ... is not JSON serializable (Python) |
Los métodos públicos ya devuelven datos planos; para estructuras internas usar marina.to_plain(obj). |
Licencia
MIT — Copyright (c) 2026 Manuel Fernando Caro Piñeres | Cristian Miguel Peñata Andrades. Ver LICENSE.
Metadata
Release files for marinaedutlan 0.8.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| marinaedutlan-0.8.3.tar.gz | 84.1 kB | Without provenance | Details for marinaedutlan-0.8.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| marinaedutlan-0.8.3-py3-none-any.whl | Python 3 | none | any | Details for marinaedutlan-0.8.3-py3-none-any.whl |
Total release size: 90.9 kB
Release files / marinaedutlan-0.8.3.tar.gz
| Download URL | marinaedutlan-0.8.3.tar.gz |
|---|---|
| Size | 84.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8b001ff296be2be9296dec36aeb1f9a70d56f51079402f68604f132ca78f52e0
|
|
BLAKE2b-256 checksum How to use checksums |
b761b7032c8b5d9a735f8edf9e94f2a91e0fdb2160d9c76fc25177f3e713777e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.3
|
Release files / marinaedutlan-0.8.3-py3-none-any.whl
| Download URL | marinaedutlan-0.8.3-py3-none-any.whl |
|---|---|
| Size | 6.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
09aaaa25f7e7b99cb9ea0dc08cd81bb7a65565ee0d55685c7e0aa3539bd123a0
|
|
BLAKE2b-256 checksum How to use checksums |
ece284608369cf2445954c83579d71708f12c5969bf3b250dea8b2ef1031b43a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.3
|
Security for marinaedutlan 0.8.3
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.