Skip to main content
Yanked

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

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

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.3
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)

Table of built distributions (wheels) for marinaedutlan 0.8.3
File Interpreter ABI Platform Actions
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.

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