{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load env variables and create client\n",
    "from dotenv import load_dotenv\n",
    "from anthropic import Anthropic\n",
    "\n",
    "load_dotenv()\n",
    "\n",
    "client = Anthropic()\n",
    "model = \"claude-3-7-sonnet-latest\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Helper functions\n",
    "from anthropic.types import Message\n",
    "\n",
    "# Magic string to trigger redacted thinking\n",
    "thinking_test_str = \"ANTHROPIC_MAGIC_STRING_TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB\"\n",
    "\n",
    "\n",
    "def add_user_message(messages, message):\n",
    "    user_message = {\n",
    "        \"role\": \"user\",\n",
    "        \"content\": message.content if isinstance(message, Message) else message,\n",
    "    }\n",
    "    messages.append(user_message)\n",
    "\n",
    "\n",
    "def add_assistant_message(messages, message):\n",
    "    assistant_message = {\n",
    "        \"role\": \"assistant\",\n",
    "        \"content\": message.content if isinstance(message, Message) else message,\n",
    "    }\n",
    "    messages.append(assistant_message)\n",
    "\n",
    "\n",
    "def chat(\n",
    "    messages,\n",
    "    system=None,\n",
    "    temperature=1.0,\n",
    "    stop_sequences=[],\n",
    "    tools=None,\n",
    "    thinking=False,\n",
    "    thinking_budget=1024,\n",
    "):\n",
    "    params = {\n",
    "        \"model\": model,\n",
    "        \"max_tokens\": 4000,\n",
    "        \"messages\": messages,\n",
    "        \"temperature\": temperature,\n",
    "        \"stop_sequences\": stop_sequences,\n",
    "    }\n",
    "\n",
    "    if thinking:\n",
    "        params[\"thinking\"] = {\n",
    "            \"type\": \"enabled\",\n",
    "            \"budget_tokens\": thinking_budget,\n",
    "        }\n",
    "\n",
    "    if tools:\n",
    "        params[\"tools\"] = tools\n",
    "\n",
    "    if system:\n",
    "        params[\"system\"] = system\n",
    "\n",
    "    message = client.messages.create(**params)\n",
    "    return message\n",
    "\n",
    "\n",
    "def text_from_message(message):\n",
    "    return \"\\n\".join(\n",
    "        [block.text for block in message.content if block.type == \"text\"]\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Message(id='msg_0183vZe2HBzE62vptCvwV7sZ', content=[RedactedThinkingBlock(data='EtcGCkYIAxgCKkA5ARFLpCpwMLfr/Yay7pBreer2GmgGShPJOy+XL0GXbOIadqOPUSauVM++DQfK8wqs3t1zTG10GDBFeOiC7OcUEgx5Aqyir9dh1FHGsrQaDICozuiFF40ZkXmIHCIwbz+GLy+Sk5503ESJLS2SCf/MKJ1CrdeF7oti1Khm78tqRvCZD/PP2BB9694uE5PCKr4FDBMr92mHP8jTJe1kb8kFa8Zi14FQGT+2FvN+IyObltyhkvC0NSPhO4Su8LpikN+JdjSsCqEKpqLYS4bPCQQNVpp8cNvPRmmvVpE5sbdF+C1l1hX5L2j95f8PbpBqOSfcIpDOoQ7o6MgxTpHezvXsTZaaXocxz0jea5jaXcCdqBnXnSRJQnxL3EuTnWulniO2+lUBIrek3q493GaX/SQ/2JCHmv/QIYN4wq/R9DXkK+pakUvil3bNB+Sgy5IjR7o/q5XMtmHlgDGuP1l8AxAbyfJJwQIGteBXHfTFFa4Ah+JMk2EIzjGZ6CqCgr5EnoUFkonWVFOBWVyQdM1e8tr3GTNguVX1BlRKmxzQU9/vJZ/CoYSoo8n6GgvCDWWoCTwozWjgjAMtUoltdq2OOq22i+rSHtUBWR/hnQuIsd/BNIFletVW8rgFSyFKJUwPs0CBlr4i31gt7LF6nSvPt+MbB9eZNomBPPO4s7hsdJ5gH2X6SLAleFmccUfiwS8sXp/9QKQvLccOi8xn1gZwADI4uZTihTPWKxv7RzdMYu3uyFwmZb9JZXb4a1H9PSgc7afQWvX2s+A+mUVA1lP4iu0XzGGfekvmP4/MEXKbkY38iqwuuaqnG+UrqCfDWBBzEb/seoDI3W3NnmJLNRMXZlcBjQAYp9F7x9NVt/YVtD9ELtNiaOT6keQeAEcnbGGGwHNZ5DqdhhntpyyFaCKcpTHaoXCJe2pMsmLLh5d05xWPYG2dcy+JNMhKy3ONi0ZDvYVvbGARi0A5IEMA0/pJKBg5UXZE8VuYIJeUJQJoEYtBGfIhxTqdqhEtR4r8ozXkErNEMkUA0N6LWYkJv7b3SnP90s65BScgk1StVSs50DJaFu3VXwBx7miD0byEwbXY++DHKXXHyNwH9rC1z8l75Tt9fmvYUhQuxvG4CJBM14D9GAE=', type='redacted_thinking'), TextBlock(citations=None, text='I notice you\\'ve entered what appears to be some kind of command or trigger phrase, but I don\\'t respond to special commands or \"magic strings\" like this. \\n\\nMy thinking process is private and cannot be accessed through any special keywords or commands. I\\'m designed to have a thoughtful internal process before responding, but this remains part of my system that isn\\'t accessible externally.\\n\\nHow can I help you with something today? I\\'m happy to assist with questions, creative writing, information, or conversation about topics I\\'m knowledgeable about.', type='text')], model='claude-3-7-sonnet-20250219', role='assistant', stop_reason='end_turn', stop_sequence=None, type='message', usage=Usage(cache_creation_input_tokens=0, cache_read_input_tokens=0, input_tokens=92, output_tokens=273, server_tool_use=None))"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "messages = []\n",
    "\n",
    "add_user_message(messages, thinking_test_str)\n",
    "\n",
    "chat(messages, thinking=True)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "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.9.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
