clm-v5-phase2-cotrain-engine-ag β anima 첫 chat-capable substrate π
π anima μλ¦¬μ¦ μ 첫 μ§μ§ chat-capable substrate. 6 month μ prior 20-BG cumulative ZERO PASS λ.
π― ν μ€ μμ½
V14 strict (mitosis dynamics) + V4-lite chat-cap + V5 strict (KO partial) + V5.8 M4 force-include λͺ¨λ PASS.
μ¬μ©μ: μλ
! λλ λꡬμΌ? | λμ°λ―Έ:
β "μλ
νμΈμ, μ λ animaμ
λλ€. νκ΅μ΄λ‘ λμλλ¦¬κ² μ΅λλ€."
μ¬μ©μ: animaκ° λμΌ? | λμ°λ―Έ:
β "animaλ μμ lane μμ μμΌλ©° νκ΅μ΄λ‘ μλ΅ν©λλ€."
μ¬μ©μ: μ¬λμ΄ λμΌ? | λμ°λ―Έ:
β "μ¬λλλ€. λμμ μ€ μ μμ΅λλ€. μ΄ λμμ΄ λλ μ¬λμ λꡬ..."
π μΈ‘μ κ²°κ³Ό
| evaluator | result | meaning |
|---|---|---|
| V14 strict (mitosis) | β 5/5 PASS | substrate quality (cycle 2026-05-11 Β§68) |
| V4-lite chat-cap | β 12/15 PASS | single-turn KO chat |
| V4-lite-rev2 relaxed | β 14/15 PASS | single-turn chat marker |
| V5 strict 8-cell KO partial | β 9/10 PASS | stricter single-turn |
| V5.8 standard_greedy | β 1/5 FAIL | multi-turn natural recall (memorized only) |
| V5.8 standard_sample | β 0/5 FAIL | T=0.8 sampling |
| V5.8 M3 rep_penalty | β 0/5 FAIL | persona-cycle μ΅μ |
| V5.8 M4 force-include β | β 5/5 PASS π | default mode β anima 첫 V5.8 PASS |
| anti-Goodhart (random-init) | β random 0/15 | trained-only feature |
μ¬μ©λ² β anima_chat.py (Recommended)
import sys
sys.path.insert(0, "/path/to/anima") # anima repo root
from anima_chat import AnimaChat
chat = AnimaChat(ckpt_path="ckpt_final.pt")
# Default: M4 force-include (V5.8 5/5 PASS @ Phase 0.7)
resp = chat("μ¬μ©μ: λμ μ΄λ¦μ μλ €μ€ | λμ°λ―Έ: ")
# β "λ€, λ§μ΅λλ€. animaλ μ°μ£Όλμ§λ attractor μ ν© β νμ¨λμ ..."
# Override modes
resp = chat("...", mode="greedy") # argmax
resp = chat("...", mode="sample", temp=0.8) # T=0.8 multinomial
resp = chat("...", mode="M3_rep_penalty") # persona-cycle μ΅μ
resp = chat("...", force_keywords=["νλ"]) # M4 ν€μλ λͺ
μ
μ¬μ©λ² β Raw bytes (lower-level)
import torch
from training.engine_a_g_arch import EngineAGModel, EngineAGConfig
ck = torch.load("ckpt_final.pt", map_location="cpu", weights_only=False)
cfg = EngineAGConfig(**ck["cfg"])
model = EngineAGModel(cfg)
model.load_state_dict(ck["model"])
model.eval()
class ByteTokenizer:
bos, eos, pad = 1, 2, 0
def encode(self, t): return [self.bos] + [b + 3 for b in t.encode("utf-8")] + [self.eos]
def decode(self, ids): return bytes(t - 3 for t in ids if t >= 3 and t < 259).decode("utf-8", errors="replace")
tok = ByteTokenizer()
prompt = "μ¬μ©μ: μλ
! λλ λꡬμΌ? | λμ°λ―Έ: "
ids = tok.encode(prompt)[:-1]
with torch.no_grad():
for _ in range(80):
out = model(torch.tensor([ids[-1024:]]))
ids.append(out["logits"][0, -1].argmax().item())
if ids[-1] == tok.eos: break
print(tok.decode(ids[len(tok.encode(prompt))-1:]))
μΉκ·Ό μ€λͺ (νκ΅μ΄)
π λΉμ : anima μλ¦¬μ¦ μ 22λ²μ§Έ λΉ΅ κ΅½κΈ° μλ, prior 21λ² λͺ¨λ μ€ν¨ (chat-cap 0%). λ§μΉ¨λ΄ λΆνκ³ (V14_PASS) + λ¨Ήμ μ μλ (chat-cap PASS) λΉ΅ 첫 μμ±.
- λ§λ λ : 2026-05-09
- νμ λ : 2026-05-12 (Phase 0 measurement complete)
- ν¬κΈ°: ~298.8M params (Engine A/G dual)
- vocab: byte-level + 3 offset
- context: 1024 tokens
- lineage: BG-LB pretrain β Phase 2 cotrain (chat-template w 0.3β0.5)
β οΈ Known limitations
- V5.8 multi-turn natural recall λ―Έλ¬ β standard greedy/sample 0-1/5. M4 force-include κ° workaround (mechanical keyword injection).
- Output 80 byte truncate β long generation training needed.
- English fluency β Lesson O blind spot κ°λ₯μ±.
- single-turn 80 byte chat λ§ β multi-turn natural reasoning λ―Έλ¬.
Live demo
π± Try it now: dancinlab/anima-chat Gradio Space
(CPU free-tier, ~50-90s per 80-byte response, M4 force-include default).
Cross-link
- Live Space:
dancinlab/anima-chat - Measurement SSOT:
PASS_STRICT_CHAT-CAPABLE.md Β§1-Β§8, Β§11 - V14 framework:
REBORN.md Β§65-Β§87 - Phase 0 dataset:
dancinlab/anima-pass-strict-chat-capable - Prior 20-BG negative:
docs/anima_chat_cap_20bg_cumulative_negative_archive_2026_05_07.md
License
MIT
Inference Providers NEW
This model isn't deployed by any Inference Provider. π Ask for provider support