PAMPAr-Coder / AGENTS.md
lucas-mella's picture
feat: upload PAMPAr-Coder code and documentation
a2d6a0d verified
|
Raw
History Blame Contribute Delete
15.6 kB
# PAMPAr — Repository Guidelines
> **PAMPAr** = Procesador Autónomo Modular de Patrones y Razonamiento
> Para AI agents: Claude Code, Codex, Gemini CLI, GitHub Copilot.
---
## Visión
PAMPAr es un **motor de razonamiento puro** de 108M parámetros. No memoriza respuestas — aprende a **pensar con información de referencia**.
La analogía: un físico que entiende termodinámica puede resolver problemas de química, ingeniería o biología. No memorizó cada campo — tiene los axiomas correctos.
- Los **pesos** (108M params) contienen la capacidad de **razonar**: leer documentación, entender un problema, derivar una solución step-by-step.
- El **dispositivo** (PC, móvil, servidor) provee el **conocimiento**: docs de Python, MDN, man pages, archivos del usuario — vía RAG local.
- El modelo no necesita "saber Python". Necesita saber **usar la referencia que tiene disponible** para resolver cualquier problema.
**Objetivo**: un modelo local que razona con la misma metodología que los mejores modelos, usando la información del dispositivo como RAG.
---
## Estado actual
- **Modelo activo**: `PamparV3`**108.3M params**, vocab 48K, 4 streams × 5 niveles
- **Mejor checkpoint**: `v3_ghidra_v9.pt` — Routing Score 89, eval 6/16 (38%)
- **Tokenizer**: `data/tokenizer/pampar_48k.model` (48K, bilingüe ES+código)
- **Runtime**: Agente + RAGResidual + Scanner + BootProtocol — funcional
- **Classroom**: Mentor conversacional con Qwen-plus — lecciones dinámicas, 21 conceptos adaptativos, absorción + práctica + corrección
- **Bio-Mechanisms**: Neuromodulación, LTP, Sleep Consolidation, Neurogenesis, Synaptic Pruning — `bio_mechanisms.py`
- **Teacher API**: Qwen-plus via DashScope (principal), GitHub Models gpt-4o-mini (alternativa)
- **Training data**: `master_sft.jsonl` — 1,253 ejemplos (en expansión vía Classroom)
---
## Quick Reference
| Area | Convention |
| ---------- | ------------------------------------------------------ |
| Language | Python 3.13+ |
| Framework | PyTorch 2.6+ |
| Tokenizer | SentencePiece BPE — **48K** (`pampar_48k.model`) |
| Type hints | Always required |
| Docstrings | Google style |
| Training | Local GTX 1650 (4 GB) + RunPod A100 para fases pesadas |
| Budget | $300-500 USD total |
---
## Arquitectura — PamparV3
### Grilla 2D: 4 streams × 5 niveles
```
tok_emb [48K × 640]
→ TalamoInicial → terr_acts [B, L, 4] / zona_acts [B, L, 52]
→ 4 streams paralelos (dim=640)
Cada NivelProfundo (×5):
1. GQA Atención compartida (8 Q heads / 2 KV heads, head_dim=80)
2. Re-routing ligero del Tálamo (Linear dim→52, sin bias)
3. 4 × StreamFFN SwiGLU independientes (uno por stream)
4. Lateral gates por stream (bottleneck=128, fibras blancas)
→ norm_f (RMSNorm) → lm_head (weight-tied, vocab=48K)
```
### Streams ↔ Capas lingüísticas
| Stream | Territorio | Zonas | Especialización | Capa lingüística |
| ------ | ----------- | ------- | ----------------------------------------- | ---------------- |
| 0 | SINTAXIS | B01-B15 | Keywords, delimitadores, puntuación | Sintaxis |
| 1 | SEMANTICA | B16-B30 | Variables, tipos, literales | Semántica |
| 2 | LOGICO | B31-B42 | Operadores, flujo de control, excepciones | Pragmática |
| 3 | ESTRUCTURAL | B43-B52 | Indentación, bloques, patrones | Discurso |
### PRESET_V3
| Parámetro | Valor |
| ---------------- | ----------- |
| `dim` | 640 |
| `n_streams` | 4 |
| `n_levels` | 5 |
| `n_heads` | 8 |
| `n_kv_heads` | 2 (GQA 4:1) |
| `vocab_size` | 48 000 |
| `max_seq_len` | 4096 |
| **Total params** | **108.3M** |
---
## Subsistemas
### 1. Modelo (`pampar/coder/v3/`)
| Archivo | Líneas | Propósito |
| ------------------- | ------ | ------------------------------------------------------------------------------- |
| `modelo.py` | 310 | PamparV3: forward, generate (nucleus sampling) |
| `config.py` | 226 | ConfigV3, 3 presets (V3/SMALL/LARGE) |
| `bloques.py` | 395 | RMSNorm, RoPE, BloqueAttn (GQA), StreamFFN (SwiGLU), LateralGate, NivelProfundo |
| `talamo.py` | 133 | TalamoInicial: LLAVES 80% + attn_proj 20% + context_conv |
| `llaves.py` | 266 | LlavesV2: clasificar_token(), tabla INT8, agregar_zonas_a_territorios |
| `zonas.py` | 265 | Territorio(IntEnum), Zona(IntEnum), ZONAS dict, ZONA_TERRITORIO |
| `ghidra_probe.py` | 343 | GhidraProbe: 36 forward hooks, diagnosis/debugging |
| `engrama_stream.py` | 359 | BancoEngrama: O(1) activation memory, cosine-gated injection |
### 2. Memoria (`pampar/memoria/`)
| Archivo | Propósito |
| ------------------ | ----------------------------------------------------------------------------- |
| `clasificador.py` | ClasificadorPareto: scoring L0-L3 por densidad, novedad, loss, frecuencia |
| `rag.py` | RAGResidual: FAISS + sentence-transformers (fallback TF-IDF), 5K entradas max |
| `cola_finetune.py` | ColaFinetune: acumula L3, exporta JSONL, propone mini-SFT |
### 3. Runtime (`pampar/runtime/`)
| Archivo | Propósito |
| ------------------- | ------------------------------------------------------------------ |
| `agente.py` | Orquestador: prompt→RAG→generar→skills→retry→auto-SFT |
| `scanner.py` | Inspección del dispositivo: OS, GPU, paquetes, servicios, archivos |
| `boot.py` | BootProtocol: CONCIENCIA.md (L3) → Scanner (L2) → Workspace (L1) |
| `generar_agents.py` | Genera AGENTS.md contextual desde ResultadoScan |
### 4. Skills (`pampar/skills/`)
| Archivo | Propósito |
| -------------------- | --------------------------------------------------------- |
| `lector_archivos.py` | Lee archivos del dispositivo (30+ extensiones, sandboxed) |
| `ejecutar_codigo.py` | Ejecuta código en subprocess con timeout y blocklist |
### 5. Inference (`pampar/inference.py`)
Servidor JSON-lines stdin/stdout para extensión VS Code. Commands: `infer`, `boot`.
### 6. Classroom — Mentor Conversacional + Bio-Mechanisms
Sistema donde Qwen-plus actúa como mentor conversacional — genera explicaciones, ejemplos y ejercicios dinámicos. PamparV3 absorbe el conocimiento via gradient descent en 3 phases por lección.
**Flujo**: StudentProfile → Mentor genera lección → Phase A (absorber explicación+ejemplo) → Phase B (alumno intenta ejercicio) → Phase C (mentor corrige, entrenar en solución+replay) → actualizar perfil.
| Módulo | Líneas | Responsabilidad |
| -------------------------- | ------ | ------------------------------------------------------------------------------ |
| `classroom.py` | ~608 | ClassroomEngine — motor conversacional (orquestador) |
| `classroom_curriculum.py` | ~433 | ClassroomConfig + CONCEPT_TREE (21 conceptos) + StudentProfile + concept_level |
| `classroom_teacher.py` | ~252 | Mentor API (Qwen/GitHub/OpenRouter) + parse de lecciones |
| `classroom_training.py` | ~211 | Tokenización + LR diferencial + train_step |
| `classroom_memory.py` | ~187 | EWC + ReplayBuffer + LessonResult + compute_ewc_baseline |
| `classroom_events.py` | ~104 | Formateo dict-based de eventos para consola |
| `classroom_persistence.py` | ~123 | Guardado de checkpoints, sesiones JSONL, grabaciones HTML |
| `classroom_server.py` | ~255 | HTTP SSE server + CLI entry point |
| `bio_mechanisms.py` | ~497 | 5 bio-mechanisms coordinados por BioOrchestrator |
**CONCEPT_TREE**: 21 conceptos en 5 niveles con prerequisitos (arithmetic → algorithms).
**StudentProfile**: mastery tracking adaptativo — prioriza refuerzo, luego nuevos, luego repaso.
| Mecanismo | Propósito |
| ------------------ | ----------------------------------------------------------------- |
| **EWC** | Elastic Weight Consolidation — penaliza cambios en pesos críticos |
| **Replay Buffer** | Mezcla ejemplos nuevos con anteriores (consolidación tipo sueño) |
| **LR Diferencial** | LLAVES 0.01x, atención 0.1x, embed 0.1x, FFN 1.0x |
| **Curriculum** | 5 niveles progresivos: básico → avanzado |
| **Grabación** | Genera HTML con replay interactivo de cada sesión |
**Bio-Mechanisms** (5 mecanismos de neurociencia en `bio_mechanisms.py`):
| Mecanismo | Implementación |
| ----------------------- | -------------------------------------------------------------------- |
| **Neuromodulación** | Dopamina/Norepinefrina modulan LR dinámicamente (×0.3 a ×3.0) |
| **LTP** | Fortalece `LateralGate.scale` de streams activos (Hebb rule, cada 5) |
| **Sleep Consolidation** | REM (aleatorio) + SWS (ordenado por dificultad), cada 15 lecciones |
| **Neurogenesis** | LoRA adapters (rank=8) en StreamFFN cuando loss > 4.0, max 8 |
| **Synaptic Pruning** | Poda `LateralGate.scale < 0.03` cada 30 lecciones (decay ×0.5) |
Coordinados por `BioOrchestrator.after_lesson()`. Desactivables con `--no-bio`.
**Resultados piloto mentor conversacional (5 lecciones)**: Loss absorción ~7-8, loss ejercicios 5.89→3.94 (mejora), brain score 88.24% estable.
**APIs soportadas**: `qwen` (Qwen-plus via DashScope, principal), `github` (gpt-4o-mini), `openrouter` (requiere créditos).
---
## Estructura del proyecto
```
PAMPAr-Coder/
├── AGENTS.md # Este archivo — guía para AI agents
├── README.md # Documentación pública
├── PLAN.md # Plan de training y evolución
├── pampar/
│ ├── CONCIENCIA.md # Identidad invariante del modelo
│ ├── coder/
│ │ └── v3/ # ARQUITECTURA ACTIVA (108M)
│ │ ├── modelo.py # PamparV3 — forward, generate
│ │ ├── config.py # ConfigV3, presets
│ │ ├── talamo.py # TalamoInicial — routing
│ │ ├── bloques.py # GQA, SwiGLU, LateralGate, NivelProfundo
│ │ ├── llaves.py # LlavesV2 — lookup INT8
│ │ ├── zonas.py # 52 Zonas de Brodmann
│ │ ├── ghidra_probe.py # Instrumentación read-only
│ │ └── engrama_stream.py# Memoria de activaciones
│ ├── memoria/
│ │ ├── clasificador.py # ClasificadorPareto — niveles L0-L3
│ │ ├── rag.py # RAGResidual — vector store local
│ │ └── cola_finetune.py # ColaFinetune — buffer auto-SFT
│ ├── skills/
│ │ ├── lector_archivos.py # Lee archivos (sandboxed)
│ │ └── ejecutar_codigo.py # Ejecuta código (subprocess)
│ ├── runtime/
│ │ ├── agente.py # Orquestador principal
│ │ ├── scanner.py # Inspección del dispositivo
│ │ ├── boot.py # Secuencia de arranque
│ │ └── generar_agents.py # Generador de AGENTS.md
│ └── inference.py # Servidor JSON-lines para VS Code
├── scripts/
│ ├── classroom.py # ClassroomEngine — motor conversacional (~608 líneas)
│ ├── classroom_curriculum.py # ClassroomConfig + CONCEPT_TREE + StudentProfile + concept_level
│ ├── classroom_teacher.py # Mentor API — Qwen/GitHub/OpenRouter + parse de lecciones
│ ├── classroom_training.py # Tokenización + LR diferencial + train_step
│ ├── classroom_events.py # Formateo dict-based de eventos para consola
│ ├── classroom_memory.py # EWC + ReplayBuffer + LessonResult + compute_ewc_baseline
│ ├── classroom_persistence.py # Guardado de checkpoints, sesiones, grabaciones HTML
│ ├── classroom_server.py # HTTP SSE server + CLI entry point
│ ├── bio_mechanisms.py # 5 bio-mechanisms (Neuromod, LTP, Sleep, Neurogenesis, Pruning)
│ └── classroom_replay.html # Player HTML para replays
├── sessions/ # Grabaciones de sesiones classroom
├── data/
│ ├── tokenizer/
│ │ └── pampar_48k.model # Vocab 48K bilingüe
│ └── *.jsonl # Datasets de training
├── checkpoints/
│ └── v3_ghidra_v9.pt # Mejor checkpoint actual
├── _archive/ # Backups de archivos antes de refactorizar
└── tests/
```
---
## Critical Rules
- **vocab_size = 48K** → DEBE coincidir con `pampar_48k.model`
- **Tokenizer path**: usar `PRESET_V3.tokenizer_path` o constante compartida — no hardcodear
- LLAVES son INT8 pre-computadas — **nunca** en el grafo de gradientes
- Los 4 streams procesan en **paralelo** — sin secuencialidad entre streams
- `targets.reshape(-1)` siempre, nunca `.view(-1)` (tensores no-contiguos)
- `generate()` usa `max_tokens`, NO `max_new_tokens`
- Imports: `pampar.memoria.*`, `pampar.skills.*`, `pampar.runtime.*`
- **Backups**: antes de borrar/refactorizar, mover el original a `_archive/`
## Naming Conventions
- **Español** para conceptos del dominio: `Talamo`, `Territorio`, `Zona`, `LLAVES`, `Agente`, `Scanner`
- **Inglés** para ML estándar: `forward`, `embedding`, `hidden_states`, `loss`, `generate`
## Paradigma de inferencia
```
1. Usuario hace una pregunta/pedido
2. Scanner provee contexto del dispositivo (OS, paquetes, archivos)
3. RAGResidual busca referencia relevante (docs, código, memoria)
4. Prompt se arma: [SYSTEM] + [REFERENCIA RAG] + [CONTEXTO DISPOSITIVO] + [PREGUNTA]
5. Modelo RAZONA sobre la referencia y genera solución step-by-step
6. Skills ejecutan la solución si aplica (código, lectura, tests)
7. Si falla → retry con error como contexto → ColaFinetune acumula patrones
```
---
## Instructions Files
Detailed instructions in `.github/instructions/`:
- `global-profile.instructions.md` — perfil del desarrollador
- `testing.instructions.md` — reglas de testing (pytest)
- `git-workflow.instructions.md` — commits convencionales
- `docker-devops.instructions.md` — Docker, CI/CD