{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Getting Values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Hidden states are exposed by accessing the desired module and calling its `.input` or `.output` attributes.\n",
    "\n",
    "Once accessed, you call `.save()` on it so it's value is populated and not deleted after."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "You're using a GPT2TokenizerFast tokenizer. Please note that with a fast tokenizer, using the `__call__` method is faster than using a method to encode the text followed by a call to the `pad` method to get a padded encoding.\n"
     ]
    }
   ],
   "source": [
    "from nnsight import LanguageModel\n",
    "\n",
    "model = LanguageModel('openai-community/gpt2', device_map='cuda')\n",
    "\n",
    "with model.trace(\"The Eiffel Tower is in the city of\") as tracer:\n",
    "\n",
    "    hidden_states = model.transformer.h[-1].output[0].save()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After exiting the tracing context, the `.value` attribute of the `hidden_states` object will be populated."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[[ 0.0505, -0.1728, -0.1690,  ..., -1.0096,  0.1280, -1.0687],\n",
      "         [ 8.7494,  2.9057,  5.3024,  ..., -8.0418,  1.2964, -2.8677],\n",
      "         [ 0.2960,  4.6686, -3.6642,  ...,  0.2391, -2.6064,  3.2263],\n",
      "         ...,\n",
      "         [ 2.1537,  6.8917,  3.8651,  ...,  0.0588, -1.9866,  5.9188],\n",
      "         [-0.4460,  7.4285, -9.3065,  ...,  2.0528, -2.7946,  0.5556],\n",
      "         [ 6.6286,  1.7258,  4.7969,  ...,  7.6714,  3.0683,  2.0481]]],\n",
      "       device='cuda:0', grad_fn=<AddBackward0>)\n"
     ]
    }
   ],
   "source": [
    "print(hidden_states)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ndif",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
