Skip to main content

Marina — Sistema Metacognitivo Unificado

npm version PyPI version License

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 como marina.

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.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for marinaedutlan 0.8.4
File Size Uploaded Provenance Actions
marinaedutlan-0.8.4.tar.gz 51.1 kB Without provenance Details for marinaedutlan-0.8.4.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for marinaedutlan 0.8.4
File Interpreter ABI Platform Actions
marinaedutlan-0.8.4-py3-none-any.whl Python 3 none any Details for marinaedutlan-0.8.4-py3-none-any.whl

Total release size: 105.5 kB

Release files / marinaedutlan-0.8.4.tar.gz

Download URL marinaedutlan-0.8.4.tar.gz
Size 51.1 kB
Tags Source
SHA-256 checksum
How to use checksums
3bc039aafc1086e88ec4ae1e7878967dcca00d12d2d918345b967399805420ee
BLAKE2b-256 checksum
How to use checksums
626d39763abfc03bc18bd9a6d626bf89977fb077b3dcc314e951a64c8908260f
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.4-py3-none-any.whl

Download URL marinaedutlan-0.8.4-py3-none-any.whl
Size 54.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
778a585fd7f5df2112d86d3225a9db27ca06f4e9d06cb2dd55d036bfb6909915
BLAKE2b-256 checksum
How to use checksums
8caca67e9a403b0f6d2791f01ced5eca01dd572853f114ffb43ea805116a3d55
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.4

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page