#!/usr/bin/env python3 """ Generative CLI — IA générative interactive sans transformer. Modes: /reason — raisonnement (cognitive loop) /gen — génération libre token-par-token /story — écrit une histoire /poem — écrit un poème /essay — écrit un essai /summarize — résume un texte /explain — explique un sujet /teach — apprend un fait /train — entraîne sur un texte /stats — statistiques /help — aide /quit — quitter Sans commande: mode chat automatique (route selon l'input). """ import sys import os import argparse import time sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from generative import GenerativeBrain, GenerativeConfig BANNER = r""" ╔═══════════════════════════════════════════════════════════╗ ║ GenerativeBrain — Non-Transformer Generative AI ║ ║ Reasoning · Generation · Creative Writing · Analysis ║ ║ CPU-only · No GPU · No transformer · No external LLM ║ ╚═══════════════════════════════════════════════════════════╝ """ HELP = """ Commands: /reason Reason about a question (cognitive loop) /gen Generate text token-by-token /story [theme] Write a short story /poem Write a poem /essay Write an essay /summarize Summarize text /explain Explain a topic /teach Teach a fact (one-shot learning) /train Train on a text block /stats Show brain statistics /help Show this help /quit Exit Without a command, just type naturally — the brain will route automatically: - "Tell me about X" → reasoning - "Write a poem about X" → creative writing - "Summarize: ..." → analysis - "Why is X?" → reasoning - "X is Y" → teach """ def main(): parser = argparse.ArgumentParser(description="GenerativeBrain CLI") parser.add_argument("--no-pretrain", action="store_true", help="Skip default corpus pre-training") parser.add_argument("--verbose", action="store_true") args = parser.parse_args() print(BANNER) print("Initializing...\n") cfg = GenerativeConfig( pretrained=not args.no_pretrain, verbose=args.verbose, ) t0 = time.time() brain = GenerativeBrain(cfg) print(f"\nReady in {time.time()-t0:.1f}s. Type /help for commands.\n") while True: try: user = input("you> ").strip() except (EOFError, KeyboardInterrupt): print("\nBye!") break if not user: continue if user.startswith("/"): cmd, _, rest = user[1:].partition(" ") cmd = cmd.lower() rest = rest.strip() if cmd == "quit" or cmd == "exit": print("Bye!") break elif cmd == "help": print(HELP) elif cmd == "stats": brain.print_stats() elif cmd == "reason": if not rest: print("Usage: /reason ") continue t0 = time.time() r = brain.reason(rest) print(f"ai> {r} ({(time.time()-t0)*1000:.0f} ms)") elif cmd == "gen": if not rest: print("Usage: /gen ") continue t0 = time.time() r = brain.generate(rest, max_tokens=30) print(f"ai> {rest} {r} ({(time.time()-t0)*1000:.0f} ms)") elif cmd == "story": t0 = time.time() r = brain.write_story(rest or None) print(f"ai> {r.get('text', r)} ({(time.time()-t0)*1000:.0f} ms)") elif cmd == "poem": if not rest: print("Usage: /poem ") continue t0 = time.time() r = brain.write_poem(rest) print(f"ai> {r.get('text', r)} ({(time.time()-t0)*1000:.0f} ms)") elif cmd == "essay": if not rest: print("Usage: /essay ") continue t0 = time.time() r = brain.write_essay(rest) print(f"ai> {r.get('text', r)} ({(time.time()-t0)*1000:.0f} ms)") elif cmd == "summarize": if not rest: print("Usage: /summarize ") continue t0 = time.time() r = brain.summarize(rest) print(f"ai> {r} ({(time.time()-t0)*1000:.0f} ms)") elif cmd == "explain": if not rest: print("Usage: /explain ") continue t0 = time.time() r = brain.explain(rest) print(f"ai> {r} ({(time.time()-t0)*1000:.0f} ms)") elif cmd == "teach": if not rest: print("Usage: /teach ") continue r = brain.teach(rest) print(f"ai> [learned] {rest}") elif cmd == "train": if not rest: print("Usage: /train ") continue r = brain.train_on_text(rest) print(f"ai> [trained] {r}") else: print(f"Unknown command: /{cmd}. Type /help.") else: # Chat automatique t0 = time.time() r = brain.chat(user) print(f"ai> {r} ({(time.time()-t0)*1000:.0f} ms)") if __name__ == "__main__": main()