#!/usr/bin/env python3
"""Train MONIKA through conversation to engage self-learning systems."""

import sys
sys.path.insert(0, 'C:\\MONIKA')

from salience_os_seed.conversation.session import ConversationSession, ConversationConfig
from salience_os_seed.proto_lm.trainer import TrainingConfig
from pathlib import Path

# Configure for learning
lm_config = TrainingConfig()
lm_config.embed_dim = 768
lm_config.sequence_length = 512
lm_config.checkpoint_path = "storage/proto_lm/checkpoints/step00001500-20251021-111936/checkpoint.pt"
lm_config.device = "cuda"
lm_config.learning_rate = 1e-4

conv_config = ConversationConfig()
conv_config.lm = lm_config
conv_config.learning_enabled = True  # CRITICAL: Enable learning

print("=== Initializing Conversation Session with Learning ===")
session = ConversationSession(config=conv_config)

print(f"Proto-LM: step {session.proto_lm.step}, vocab {session.proto_lm.vocab.size()}")
print(f"Learning enabled: {session.config.learning_enabled}")
print(f"Proto-LM learning enabled: {session.proto_lm.learning_enabled}")

# Load literature corpus
corpus_file = Path("C:\\MONIKA\\datasets\\alice_wonderland.txt")
if corpus_file.exists():
    print(f"\nLoading corpus: {corpus_file.name}")
    text = corpus_file.read_text(encoding='utf-8', errors='ignore')
    
    # Clean Gutenberg header/footer
    if "*** START" in text:
        text = text.split("*** START", 1)[1]
    if "*** END" in text:
        text = text.split("*** END", 1)[0]
    
    # Split into paragraphs
    paragraphs = [p.strip() for p in text.split('\n\n') if len(p.strip()) > 100]
    
    print(f"Found {len(paragraphs)} paragraphs")
    print("\nFeeding through conversation system...")
    
    for i, para in enumerate(paragraphs[:100]):  # First 100 paragraphs
        # Process through conversation (engages full cognitive system)
        snapshot = session.generate_response(para[:200])  # First 200 chars as prompt
        
        if (i + 1) % 10 == 0:
            print(f"  Processed {i+1}/100, step={session.proto_lm.step}, vocab={session.proto_lm.vocab.size()}")
            print(f"    Response: {snapshot.response[:50]}...")
    
    print(f"\nFinal: step {session.proto_lm.step}, vocab {session.proto_lm.vocab.size()}")
    
    # Test generation
    print("\n=== Testing Generation ===")
    response = session.generate_response("Hello, I am learning to")
    print(f"Response: {response.response[:200]}")
    
    # Save
    checkpoint = session.proto_lm.save_checkpoint(
        reason="trained-through-conversation",
        tags=["conversation-learning", "cognitive-engaged"]
    )
    print(f"\nSaved: {checkpoint}")
