{ "cells": [ { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "# LLM model", "id": "600e0b3c5b14c2b3" }, { "metadata": { "collapsed": true, "ExecuteTime": { "end_time": "2025-04-26T19:28:53.649925Z", "start_time": "2025-04-26T19:28:53.644536Z" } }, "cell_type": "code", "source": [ "from typing_extensions import TypedDict\n", "\n", "class State(TypedDict):\n", " graph_state: str" ], "id": "initial_id", "outputs": [], "execution_count": 2 }, { "metadata": { "ExecuteTime": { "end_time": "2025-04-26T19:28:53.782161Z", "start_time": "2025-04-26T19:28:53.778525Z" } }, "cell_type": "code", "source": [ "def node_1(state):\n", " print(\"---Node 1---\")\n", " return {\"graph_state\": state['graph_state'] +\" I am\"}\n", "\n", "def node_2(state):\n", " print(\"---Node 2---\")\n", " return {\"graph_state\": state['graph_state'] +\" happy!\"}\n", "\n", "def node_3(state):\n", " print(\"---Node 3---\")\n", " return {\"graph_state\": state['graph_state'] +\" sad!\"}" ], "id": "69149c677dbbd143", "outputs": [], "execution_count": 3 }, { "metadata": { "ExecuteTime": { "end_time": "2025-04-26T19:28:53.954984Z", "start_time": "2025-04-26T19:28:53.949523Z" } }, "cell_type": "code", "source": [ "import random\n", "from typing import Literal\n", "\n", "def decide_mood(state) -> Literal[\"node_2\", \"node_3\"]:\n", "\n", " # Often, we will use state to decide on the next node to visit\n", " user_input = state['graph_state']\n", "\n", " # Here, let's just do a 50 / 50 split between nodes 2, 3\n", " if random.random() < 0.5:\n", "\n", " # 50% of the time, we return Node 2\n", " return \"node_2\"\n", "\n", " # 50% of the time, we return Node 3\n", " return \"node_3\"" ], "id": "fdda0402eb744e22", "outputs": [], "execution_count": 4 }, { "metadata": { "ExecuteTime": { "end_time": "2025-04-26T19:28:54.423804Z", "start_time": "2025-04-26T19:28:54.098033Z" } }, "cell_type": "code", "source": [ "from IPython.display import Image, display\n", "\n", "from langgraph.graph import MessagesState, START, END, StateGraph\n", "\n", "# Build graph\n", "builder = StateGraph(State)\n", "builder.add_node(\"node_1\", node_1)\n", "builder.add_node(\"node_2\", node_2)\n", "builder.add_node(\"node_3\", node_3)\n", "\n", "# Logic\n", "builder.add_edge(START, \"node_1\")\n", "builder.add_conditional_edges(\"node_1\", decide_mood)\n", "builder.add_edge(\"node_2\", END)\n", "builder.add_edge(\"node_3\", END)\n", "\n", "# Add\n", "graph = builder.compile()" ], "id": "c36263817c0e369f", "outputs": [], "execution_count": 5 }, { "metadata": { "ExecuteTime": { "end_time": "2025-04-26T19:28:55.442847Z", "start_time": "2025-04-26T19:28:55.271978Z" } }, "cell_type": "code", "source": [ "from IPython.display import Image, display\n", "\n", "display(Image(graph.get_graph().draw_mermaid_png()))" ], "id": "d7410440dcfac3d0", "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 6 }, { "metadata": { "ExecuteTime": { "end_time": "2025-04-26T19:17:49.705656Z", "start_time": "2025-04-26T19:17:49.694242Z" } }, "cell_type": "code", "source": "", "id": "a027a884dcb0979b", "outputs": [], "execution_count": 7 }, { "metadata": { "ExecuteTime": { "end_time": "2025-04-26T19:29:53.954345Z", "start_time": "2025-04-26T19:29:53.915031Z" } }, "cell_type": "code", "source": [ "import os\n", "from dotenv import load_dotenv\n", "from agent import *\n", "\n", "load_dotenv()\n", "\n", "llm = get_llm()" ], "id": "a27867479371d346", "outputs": [ { "ename": "NameError", "evalue": "name 'os' is not defined", "output_type": "error", "traceback": [ "\u001B[31m---------------------------------------------------------------------------\u001B[39m", "\u001B[31mNameError\u001B[39m Traceback (most recent call last)", "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[10]\u001B[39m\u001B[32m, line 7\u001B[39m\n\u001B[32m 3\u001B[39m \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01magent\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mimport\u001B[39;00m *\n\u001B[32m 5\u001B[39m load_dotenv()\n\u001B[32m----> \u001B[39m\u001B[32m7\u001B[39m llm = \u001B[43mget_llm\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n", "\u001B[36mFile \u001B[39m\u001B[32m~/PycharmProjects/Final_Assignment/agent.py:13\u001B[39m, in \u001B[36mget_llm\u001B[39m\u001B[34m()\u001B[39m\n\u001B[32m 12\u001B[39m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34mget_llm\u001B[39m():\n\u001B[32m---> \u001B[39m\u001B[32m13\u001B[39m \u001B[43mos\u001B[49m.getenv(\u001B[33m\"\u001B[39m\u001B[33mGROQ_API_KEY\u001B[39m\u001B[33m\"\u001B[39m)\n\u001B[32m 14\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m init_chat_model(\u001B[33m\"\u001B[39m\u001B[33mllama-3.3-70b-versatile\u001B[39m\u001B[33m\"\u001B[39m, model_provider=\u001B[33m\"\u001B[39m\u001B[33mgroq\u001B[39m\u001B[33m\"\u001B[39m)\n", "\u001B[31mNameError\u001B[39m: name 'os' is not defined" ] } ], "execution_count": 10 }, { "metadata": { "ExecuteTime": { "end_time": "2025-04-26T19:23:39.149221Z", "start_time": "2025-04-26T19:23:38.656230Z" } }, "cell_type": "code", "source": [ "res = llm(\"Hello, how are you?\")\n", "print(res.content)" ], "id": "e4ef9bf9d59e87b", "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/mf/9y254h_17lg1x86hptmcd4v80000gn/T/ipykernel_81627/3192806303.py:1: LangChainDeprecationWarning: The method `BaseChatModel.__call__` was deprecated in langchain-core 0.1.7 and will be removed in 1.0. Use :meth:`~invoke` instead.\n", " res = llm(\"Hello, how are you?\")\n" ] }, { "ename": "AttributeError", "evalue": "'str' object has no attribute 'content'", "output_type": "error", "traceback": [ "\u001B[31m---------------------------------------------------------------------------\u001B[39m", "\u001B[31mAttributeError\u001B[39m Traceback (most recent call last)", "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[11]\u001B[39m\u001B[32m, line 1\u001B[39m\n\u001B[32m----> \u001B[39m\u001B[32m1\u001B[39m res = \u001B[43mllm\u001B[49m\u001B[43m(\u001B[49m\u001B[33;43m\"\u001B[39;49m\u001B[33;43mHello, how are you?\u001B[39;49m\u001B[33;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\n\u001B[32m 2\u001B[39m \u001B[38;5;28mprint\u001B[39m(res.content)\n", "\u001B[36mFile \u001B[39m\u001B[32m~/PycharmProjects/Final_Assignment_Template/.venv/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:191\u001B[39m, in \u001B[36mdeprecated..deprecate..warning_emitting_wrapper\u001B[39m\u001B[34m(*args, **kwargs)\u001B[39m\n\u001B[32m 189\u001B[39m warned = \u001B[38;5;28;01mTrue\u001B[39;00m\n\u001B[32m 190\u001B[39m emit_warning()\n\u001B[32m--> \u001B[39m\u001B[32m191\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mwrapped\u001B[49m\u001B[43m(\u001B[49m\u001B[43m*\u001B[49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n", "\u001B[36mFile \u001B[39m\u001B[32m~/PycharmProjects/Final_Assignment_Template/.venv/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py:1190\u001B[39m, in \u001B[36mBaseChatModel.__call__\u001B[39m\u001B[34m(self, messages, stop, callbacks, **kwargs)\u001B[39m\n\u001B[32m 1168\u001B[39m \u001B[38;5;129m@deprecated\u001B[39m(\u001B[33m\"\u001B[39m\u001B[33m0.1.7\u001B[39m\u001B[33m\"\u001B[39m, alternative=\u001B[33m\"\u001B[39m\u001B[33minvoke\u001B[39m\u001B[33m\"\u001B[39m, removal=\u001B[33m\"\u001B[39m\u001B[33m1.0\u001B[39m\u001B[33m\"\u001B[39m)\n\u001B[32m 1169\u001B[39m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34m__call__\u001B[39m(\n\u001B[32m 1170\u001B[39m \u001B[38;5;28mself\u001B[39m,\n\u001B[32m (...)\u001B[39m\u001B[32m 1174\u001B[39m **kwargs: Any,\n\u001B[32m 1175\u001B[39m ) -> BaseMessage:\n\u001B[32m 1176\u001B[39m \u001B[38;5;250m \u001B[39m\u001B[33;03m\"\"\"Call the model.\u001B[39;00m\n\u001B[32m 1177\u001B[39m \n\u001B[32m 1178\u001B[39m \u001B[33;03m Args:\u001B[39;00m\n\u001B[32m (...)\u001B[39m\u001B[32m 1188\u001B[39m \u001B[33;03m The model output message.\u001B[39;00m\n\u001B[32m 1189\u001B[39m \u001B[33;03m \"\"\"\u001B[39;00m\n\u001B[32m-> \u001B[39m\u001B[32m1190\u001B[39m generation = \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43mgenerate\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 1191\u001B[39m \u001B[43m \u001B[49m\u001B[43m[\u001B[49m\u001B[43mmessages\u001B[49m\u001B[43m]\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstop\u001B[49m\u001B[43m=\u001B[49m\u001B[43mstop\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcallbacks\u001B[49m\u001B[43m=\u001B[49m\u001B[43mcallbacks\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mkwargs\u001B[49m\n\u001B[32m 1192\u001B[39m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m.generations[\u001B[32m0\u001B[39m][\u001B[32m0\u001B[39m]\n\u001B[32m 1193\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(generation, ChatGeneration):\n\u001B[32m 1194\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m generation.message\n", "\u001B[36mFile \u001B[39m\u001B[32m~/PycharmProjects/Final_Assignment_Template/.venv/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py:746\u001B[39m, in \u001B[36mBaseChatModel.generate\u001B[39m\u001B[34m(self, messages, stop, callbacks, tags, metadata, run_name, run_id, **kwargs)\u001B[39m\n\u001B[32m 732\u001B[39m inheritable_metadata = {\n\u001B[32m 733\u001B[39m **(metadata \u001B[38;5;129;01mor\u001B[39;00m {}),\n\u001B[32m 734\u001B[39m **\u001B[38;5;28mself\u001B[39m._get_ls_params(stop=stop, **kwargs),\n\u001B[32m 735\u001B[39m }\n\u001B[32m 737\u001B[39m callback_manager = CallbackManager.configure(\n\u001B[32m 738\u001B[39m callbacks,\n\u001B[32m 739\u001B[39m \u001B[38;5;28mself\u001B[39m.callbacks,\n\u001B[32m (...)\u001B[39m\u001B[32m 744\u001B[39m \u001B[38;5;28mself\u001B[39m.metadata,\n\u001B[32m 745\u001B[39m )\n\u001B[32m--> \u001B[39m\u001B[32m746\u001B[39m messages_to_trace = \u001B[43m[\u001B[49m\n\u001B[32m 747\u001B[39m \u001B[43m \u001B[49m\u001B[43m_format_for_tracing\u001B[49m\u001B[43m(\u001B[49m\u001B[43mmessage_list\u001B[49m\u001B[43m)\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mmessage_list\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mmessages\u001B[49m\n\u001B[32m 748\u001B[39m \u001B[43m\u001B[49m\u001B[43m]\u001B[49m\n\u001B[32m 749\u001B[39m run_managers = callback_manager.on_chat_model_start(\n\u001B[32m 750\u001B[39m \u001B[38;5;28mself\u001B[39m._serialized,\n\u001B[32m 751\u001B[39m messages_to_trace,\n\u001B[32m (...)\u001B[39m\u001B[32m 756\u001B[39m batch_size=\u001B[38;5;28mlen\u001B[39m(messages),\n\u001B[32m 757\u001B[39m )\n\u001B[32m 758\u001B[39m results = []\n", "\u001B[36mFile \u001B[39m\u001B[32m~/PycharmProjects/Final_Assignment_Template/.venv/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py:747\u001B[39m, in \u001B[36m\u001B[39m\u001B[34m(.0)\u001B[39m\n\u001B[32m 732\u001B[39m inheritable_metadata = {\n\u001B[32m 733\u001B[39m **(metadata \u001B[38;5;129;01mor\u001B[39;00m {}),\n\u001B[32m 734\u001B[39m **\u001B[38;5;28mself\u001B[39m._get_ls_params(stop=stop, **kwargs),\n\u001B[32m 735\u001B[39m }\n\u001B[32m 737\u001B[39m callback_manager = CallbackManager.configure(\n\u001B[32m 738\u001B[39m callbacks,\n\u001B[32m 739\u001B[39m \u001B[38;5;28mself\u001B[39m.callbacks,\n\u001B[32m (...)\u001B[39m\u001B[32m 744\u001B[39m \u001B[38;5;28mself\u001B[39m.metadata,\n\u001B[32m 745\u001B[39m )\n\u001B[32m 746\u001B[39m messages_to_trace = [\n\u001B[32m--> \u001B[39m\u001B[32m747\u001B[39m \u001B[43m_format_for_tracing\u001B[49m\u001B[43m(\u001B[49m\u001B[43mmessage_list\u001B[49m\u001B[43m)\u001B[49m \u001B[38;5;28;01mfor\u001B[39;00m message_list \u001B[38;5;129;01min\u001B[39;00m messages\n\u001B[32m 748\u001B[39m ]\n\u001B[32m 749\u001B[39m run_managers = callback_manager.on_chat_model_start(\n\u001B[32m 750\u001B[39m \u001B[38;5;28mself\u001B[39m._serialized,\n\u001B[32m 751\u001B[39m messages_to_trace,\n\u001B[32m (...)\u001B[39m\u001B[32m 756\u001B[39m batch_size=\u001B[38;5;28mlen\u001B[39m(messages),\n\u001B[32m 757\u001B[39m )\n\u001B[32m 758\u001B[39m results = []\n", "\u001B[36mFile \u001B[39m\u001B[32m~/PycharmProjects/Final_Assignment_Template/.venv/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py:124\u001B[39m, in \u001B[36m_format_for_tracing\u001B[39m\u001B[34m(messages)\u001B[39m\n\u001B[32m 122\u001B[39m \u001B[38;5;28;01mfor\u001B[39;00m message \u001B[38;5;129;01min\u001B[39;00m messages:\n\u001B[32m 123\u001B[39m message_to_trace = message\n\u001B[32m--> \u001B[39m\u001B[32m124\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(\u001B[43mmessage\u001B[49m\u001B[43m.\u001B[49m\u001B[43mcontent\u001B[49m, \u001B[38;5;28mlist\u001B[39m):\n\u001B[32m 125\u001B[39m \u001B[38;5;28;01mfor\u001B[39;00m idx, block \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28menumerate\u001B[39m(message.content):\n\u001B[32m 126\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m (\n\u001B[32m 127\u001B[39m \u001B[38;5;28misinstance\u001B[39m(block, \u001B[38;5;28mdict\u001B[39m)\n\u001B[32m 128\u001B[39m \u001B[38;5;129;01mand\u001B[39;00m block.get(\u001B[33m\"\u001B[39m\u001B[33mtype\u001B[39m\u001B[33m\"\u001B[39m) == \u001B[33m\"\u001B[39m\u001B[33mimage\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 129\u001B[39m \u001B[38;5;129;01mand\u001B[39;00m is_data_content_block(block)\n\u001B[32m 130\u001B[39m ):\n", "\u001B[31mAttributeError\u001B[39m: 'str' object has no attribute 'content'" ] } ], "execution_count": 11 }, { "metadata": { "ExecuteTime": { "end_time": "2025-04-26T19:28:51.451989Z", "start_time": "2025-04-26T19:28:51.368687Z" } }, "cell_type": "code", "source": "res", "id": "98d30f6eee7b2908", "outputs": [ { "ename": "NameError", "evalue": "name 'res' is not defined", "output_type": "error", "traceback": [ "\u001B[31m---------------------------------------------------------------------------\u001B[39m", "\u001B[31mNameError\u001B[39m Traceback (most recent call last)", "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[1]\u001B[39m\u001B[32m, line 1\u001B[39m\n\u001B[32m----> \u001B[39m\u001B[32m1\u001B[39m \u001B[43mres\u001B[49m\n", "\u001B[31mNameError\u001B[39m: name 'res' is not defined" ] } ], "execution_count": 1 }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "", "id": "28dae3f2d9a4220d" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }