{
 "nbformat": 4,
 "nbformat_minor": 5,
 "metadata": {
  "colab": {
   "name": "Ares_Xiphos_Training.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Ares & Xiphos \u2014 Colab training smoke run\n",
    "\n",
    "This notebook trains *from scratch*. It begins with a deliberately small validation model\u2014not a capable general model. Use only licensed, documented data. Ares and Xiphos receive separate weights and separate training runs.\n"
   ],
   "execution_count": null,
   "outputs": null
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# In Colab: Runtime \u2192 Change runtime type \u2192 T4 GPU, if available.\n",
    "!nvidia-smi || true\n",
    "!python --version\n"
   ],
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# Fetch public source. No token needed.\n",
    "!rm -rf ares-lab\n",
    "!git clone --depth 1 https://huggingface.co/spaces/jacmor64/Ares-Lab ares-lab\n",
    "%cd ares-lab\n",
    "!pip -q install torch tqdm\n"
   ],
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# Tiny licensed smoke corpus: validates plumbing only, not intelligence.\n",
    "from pathlib import Path\n",
    "Path('corpus').mkdir(exist_ok=True)\n",
    "Path('corpus/smoke.txt').write_text('''Ares is a research language model. Ares answers questions clearly.\\nXiphos drafts plans for review. A plan is not execution.\\nSafety, consent, tests, and rollback matter.\\n''' * 500)\n",
    "!python -m ares.tokenizer train --input corpus --out artifacts/tokenizer.json --vocab-size 512\n"
   ],
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# Tiny Ares run from random initialization.\n",
    "!python -m ares.train --role ares --tokenizer artifacts/tokenizer.json --data corpus --out runs/ares-smoke --steps 100 --batch-size 4 --seq-len 128 --dim 128 --layers 4 --heads 4 --kv-heads 2 --lr 0.0003\n"
   ],
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# Independently initialized Xiphos run. Production requires a separate reviewed planning/SFT corpus.\n",
    "!python -m ares.train --role xiphos --tokenizer artifacts/tokenizer.json --data corpus --out runs/xiphos-smoke --steps 100 --batch-size 4 --seq-len 128 --dim 128 --layers 4 --heads 4 --kv-heads 2 --lr 0.0003\n"
   ],
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# Check architecture tests. Smoke checkpoints remain unapproved: training_complete=false.\n",
    "!python -m unittest discover -s tests -v\n"
   ],
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "code",
   "metadata": {},
   "source": [
    "# Optional local-only runtime; do not expose it publicly without authentication, rate limits, and review.\n",
    "# !python -m ares.server --ares runs/ares-smoke/latest.pt --xiphos runs/xiphos-smoke/latest.pt --tokenizer artifacts/tokenizer.json\n"
   ],
   "execution_count": null,
   "outputs": []
  }
 ]
}