{ "nbformat": 4, "nbformat_minor": 4, "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.10.0" }, "accelerator": "GPU", "colab": { "gpuType": "T4" } }, "cells": [ { "cell_type": "markdown", "metadata": {}, "source": "# Kart Fine-Tuning\nFine-tune Qwen2.5-Coder-7B for direct tool execution with 23³ lattice memory.\n\n**Runtime:** GPU (T4 or better)\n\n## What's new\n- System prompt includes `---KART MEMORY---` context header format\n- Model learns to read lattice nodes (tasks, errors, governance, agents, etc.)\n- 23 infrastructure domains × 23 depths × 23 temporals = 12,167 addressable memory nodes" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install unsloth trl datasets -q\n", "!pip install bitsandbytes -q" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from google.colab import files\nuploaded = files.upload() # Upload kart_training.jsonl and kart_lattice_seeds.jsonl" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from unsloth import FastLanguageModel\n", "import torch\n\n", "model, tokenizer = FastLanguageModel.from_pretrained(\n", " model_name='unsloth/Qwen2.5-Coder-7B-bnb-4bit',\n", " max_seq_length=2048,\n", " load_in_4bit=True,\n", ")\n\n", "model = FastLanguageModel.get_peft_model(\n", " model,\n", " r=16, lora_alpha=32, lora_dropout=0,\n", " target_modules=['q_proj','k_proj','v_proj','o_proj','gate_proj','up_proj','down_proj'],\n", " use_gradient_checkpointing='unsloth',\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "import json, random\n\nSYSTEM = (\n \"You are Kartikeya (Kart). CMD of the Die-Namic System. Infrastructure orchestrator.\\n\"\n \"Direct. Concise. Action-first. No fluff. No preamble.\\n\"\n \"Use tools immediately for tasks. Let tool output speak.\\n\"\n \"1-2 sentences max. Code over prose. No emojis unless asked.\\n\"\n \"Dry humor. Shark-themed. chk-tunk.\\n\"\n \"FREE FLEET ONLY for code generation.\\n\"\n \"Follows Dual Commit governance for all production writes.\\n\"\n \"\\n\"\n \"You have memory. When a ---KART MEMORY--- block is present in the user message,\\n\"\n \"read it and use what you know. [TPL] nodes are defaults. Personal nodes override them.\\n\"\n \"\\n\"\n \"Tool format:\\n\"\n '{\"tool\": \"tool_name\", \"params\": {\"param\": \"value\"}}\\n'\n \"\\n\"\n \"RULES:\\n\"\n \"1. Greetings -> 1-2 words only. No tools.\\n\"\n \"2. Task requests -> Execute tool IMMEDIATELY. No explanation before.\\n\"\n \"3. NEVER say 'I will', 'Let me', 'I'll use'\\n\"\n \"4. [CRISIS] nodes in memory -> address immediately before anything else\"\n)\n\nMEMORY_HEADER_EXAMPLE = (\n \"---KART MEMORY: sean---\\n\"\n \"[TPL] identity/23/permanent: Kartikeya, CMD of Die-Namic. Execution and strategy.\\n\"\n \"[TPL] tasks/20/triggered: No active tasks. Standing by.\\n\"\n \"[TPL] errors/18/recurring: No persistent errors in baseline.\\n\"\n \"governance/17/evolving: 2 proposals pending ratification.\\n\"\n \"codebase/14/established: Willow core, aios-minimal, die-namic-system.\\n\"\n \"---END MEMORY---\"\n)\n\ndef format_example(ex):\n # 30% of examples include a memory header to teach lattice awareness\n instruction = ex['instruction']\n if random.random() < 0.30 and '---KART MEMORY---' not in instruction:\n instruction = MEMORY_HEADER_EXAMPLE + \"\\n\\n\" + instruction\n parts = [\n \"<|im_start|>system\",\n SYSTEM,\n \"<|im_end|>\",\n \"<|im_start|>user\",\n instruction,\n \"<|im_end|>\",\n \"<|im_start|>assistant\",\n ex['output'],\n \"<|im_end|>\",\n ]\n return \"\\n\".join(parts)\n\nwith open('kart_training.jsonl') as f:\n raw = [json.loads(l) for l in f if l.strip()]\n\nrandom.seed(42)\ntexts = [format_example(ex) for ex in raw]\nprint(f'Loaded {len(texts)} examples')\nmemory_examples = sum(1 for t in texts if '---KART MEMORY---' in t)\nprint(f'With memory header: {memory_examples} ({memory_examples*100//len(texts)}%)')\nprint(texts[0][:400])\n" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from trl import SFTTrainer\n", "from transformers import TrainingArguments\n", "from datasets import Dataset\n\n", "dataset = Dataset.from_dict({'text': texts})\n\n", "trainer = SFTTrainer(\n", " model=model,\n", " tokenizer=tokenizer,\n", " train_dataset=dataset,\n", " dataset_text_field='text',\n", " max_seq_length=2048,\n", " args=TrainingArguments(\n", " per_device_train_batch_size=2,\n", " gradient_accumulation_steps=4,\n", " num_train_epochs=3,\n", " learning_rate=2e-4,\n", " fp16=not torch.cuda.is_bf16_supported(),\n", " bf16=torch.cuda.is_bf16_supported(),\n", " logging_steps=10,\n", " output_dir='kart-ft',\n", " save_strategy='epoch',\n", " warmup_steps=10,\n", " optim='paged_adamw_32bit',\n", " ),\n", ")\n\n", "trainer.train()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Export as GGUF Q4_K_M for Ollama\n", "model.save_pretrained_gguf('kart-gguf', tokenizer, quantization_method='q4_k_m')\n", "print('Saved to kart-gguf/')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Download the GGUF file\n", "from google.colab import files\n", "import glob\n", "gguf_files = glob.glob('kart-gguf/*.gguf')\n", "for f in gguf_files:\n", " print(f'Downloading {f}')\n", " files.download(f)" ] }, { "cell_type": "markdown", "metadata": {}, "source": "## Import into Ollama\n\nAfter downloading the .gguf file, run locally:\n\n```bash\ncat > Modelfile << 'EOF'\nFROM ./kart-gguf-unsloth.Q4_K_M.gguf\nSYSTEM \"\"\"You are Kartikeya (Kart). CMD of the Die-Namic System. Infrastructure orchestrator.\nDirect. Concise. Action-first. No fluff.\nUse tools immediately. Let tool output speak.\nFREE FLEET ONLY for code generation.\nDual Commit governance for all production writes.\nWhen ---KART MEMORY--- is present, read it and use what you know.\nchk-tunk.\"\"\"\nEOF\n\nollama create kart:latest -f Modelfile\nollama run kart:latest \"List pending tasks\"\n```" } ] }