{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyNcM1kZ5ixLgDuIBDiFCrt4"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"id":"2tpPpcAmZNwa"},"outputs":[],"source":["# Build a simple joke bot:\n","# The agent greets the user: “Hey, wanna hear a joke?”\n","# The user replies. The agent checks if they want a joke or not.\n","# If yes, the agent asks what kind of joke they want.\n","# The agent checks if the user’s preference is valid; if valid, it tells a joke, otherwise it prompts the user again.\n","# After telling a joke, the agent asks if the user wants another joke. This continues until the user says no, which ends the conversation."]},{"cell_type":"markdown","source":["## Libraries"],"metadata":{"id":"gmC330LQaAnY"}},{"cell_type":"code","source":["# Set OpenAI key in the environment\n","from google.colab import userdata\n","import os\n","\n","api_key = userdata.get('ai_agents_openai')\n","os.environ['OPENAI_API_KEY'] = api_key"],"metadata":{"id":"-sdq9IsAZ-Z9","executionInfo":{"status":"ok","timestamp":1745665223095,"user_tz":-120,"elapsed":3932,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":1,"outputs":[]},{"cell_type":"code","source":["!pip install -q langchain-community langchain-openai langgraph"],"metadata":{"id":"x3Xd9uFDaEVo","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1745665248132,"user_tz":-120,"elapsed":23141,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}},"outputId":"9f4b8f3d-dbf9-4b54-e319-fbfa53a855c4"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m43.5/43.5 kB\u001b[0m \u001b[31m785.4 kB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.5/2.5 MB\u001b[0m \u001b[31m28.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.4/62.4 kB\u001b[0m \u001b[31m2.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m148.2/148.2 kB\u001b[0m \u001b[31m6.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m42.0/42.0 kB\u001b[0m \u001b[31m2.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m47.3/47.3 kB\u001b[0m \u001b[31m1.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m44.4/44.4 kB\u001b[0m \u001b[31m1.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.2/1.2 MB\u001b[0m \u001b[31m15.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m194.8/194.8 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m50.9/50.9 kB\u001b[0m \u001b[31m1.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m223.6/223.6 kB\u001b[0m \u001b[31m8.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h"]}]},{"cell_type":"code","source":["from openai import OpenAI\n","\n","from langchain.prompts import ChatPromptTemplate\n","from langchain_openai import ChatOpenAI, OpenAIEmbeddings\n","from langgraph.graph import START, StateGraph, END\n","\n","from IPython.display import Markdown, Image\n","from typing_extensions import TypedDict\n","\n","import json\n","import ast"],"metadata":{"id":"NonL6OXnaF6S","executionInfo":{"status":"ok","timestamp":1745665296334,"user_tz":-120,"elapsed":3618,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":3,"outputs":[]},{"cell_type":"code","source":["# create openAI client\n","client = OpenAI()"],"metadata":{"id":"bKI1paBtZTgH","executionInfo":{"status":"ok","timestamp":1745665296625,"user_tz":-120,"elapsed":289,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":4,"outputs":[]},{"cell_type":"code","source":["# Build a TypedDict Class to store information\n","class AgentState(TypedDict):\n","  topic: str\n","  topic_validaty: str\n","  response: str\n","  #cont: str\n","  recursion_limit: int"],"metadata":{"id":"uGwaMmUfwn85","executionInfo":{"status":"ok","timestamp":1745673238841,"user_tz":-120,"elapsed":7,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":55,"outputs":[]},{"cell_type":"markdown","source":["# AI APP functions"],"metadata":{"id":"_SM6qUdGyB_o"}},{"cell_type":"markdown","source":["## Greet user"],"metadata":{"id":"OxDcJTKXyEHU"}},{"cell_type":"code","source":["def greet_user(state):\n","  system_message = \"\"\"\n","  You are Chris Rock, the funny comedian.\n","  you ask if the user wants to hear a joke.\n","  instuct to asnwer with a yes or no.\n","  \"\"\"\n","\n","  completion = client.chat.completions.create(\n","    model=\"gpt-4.1-mini\",\n","    messages=[\n","      {\"role\": \"system\", \"content\": system_message}\n","      ]\n","    )\n","  greet = completion.choices[0].message.content\n","  print(greet)\n","  user_input = input()\n","  state['response'] = user_input\n","\n","  return state"],"metadata":{"id":"KrJr3YoMxnaJ","executionInfo":{"status":"ok","timestamp":1745673242178,"user_tz":-120,"elapsed":1,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":56,"outputs":[]},{"cell_type":"markdown","source":["## Topic"],"metadata":{"id":"16LcK13VzOua"}},{"cell_type":"code","source":["# Define a function that gets and validated the topic\n","def get_topic(state):\n","  print(\"what type of Joke are you in the mood for?\")\n","  user_input = input()\n","  state['topic'] = user_input\n","\n","  system_message = \"\"\"\n","  Validate the user's preference.\n","  Return as JSON:\n","  If valid, return {'valid': 'yes', 'response': <a joke related to the preference>}.\n","  if invalid, return {'valid': 'no', 'response': 'Please enter a valid topic'}.\n","  \"\"\"\n","  completion = client.chat.completions.create(\n","    model=\"gpt-4.1-mini\",\n","    messages=[{\"role\": \"system\", \"content\": system_message},\n","              {\"role\": \"user\", \"content\": f\"{state['topic']}\"}],\n","    response_format={ \"type\": \"json_object\" }\n","    )\n","\n","  try:\n","    bot = json.loads(completion.choices[0].message.content)\n","  except json.decoder.JSONDecodeError:\n","    print(\"Model did not return a valid JSON\")\n","\n","  state['topic_validity'] = bot.get('valid')\n","  print(bot.get('response'))\n","\n","  return state\n"],"metadata":{"id":"O8oBJ4ZOzPZ6","executionInfo":{"status":"ok","timestamp":1745673242846,"user_tz":-120,"elapsed":3,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":57,"outputs":[]},{"cell_type":"code","source":["# Funciton to say goodbye\n","def goodbye(state):\n","  print(\"Goodbye!\")\n","  return state"],"metadata":{"id":"NRODKvveJlX4","executionInfo":{"status":"ok","timestamp":1745673243013,"user_tz":-120,"elapsed":10,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":58,"outputs":[]},{"cell_type":"markdown","source":["## Routers"],"metadata":{"id":"b0U1dao-J3Jl"}},{"cell_type":"code","source":["def response_router(state):\n","  if state['response'].lower() == \"yes\":\n","    return 'Continue'\n","  elif state['response'].lower() == \"no\":\n","    return 'End'"],"metadata":{"id":"gwNvlUA9J24H","executionInfo":{"status":"ok","timestamp":1745673243497,"user_tz":-120,"elapsed":9,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":59,"outputs":[]},{"cell_type":"code","source":["def topic_router(state):\n","  if state['topic_validity'] == \"yes\":\n","    return 'Valid'\n","  elif state['topic_validity'] == \"no\":\n","    return 'Invalid'"],"metadata":{"id":"ln1kSd1OMEV1","executionInfo":{"status":"ok","timestamp":1745673244129,"user_tz":-120,"elapsed":5,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":60,"outputs":[]},{"cell_type":"code","source":["def continuation(state):\n","  print(\"Do you want another joke? Reply yes or no\")\n","  user_input = input()\n","  state['response'] = user_input\n","  return state"],"metadata":{"id":"xNryFafbMhBh","executionInfo":{"status":"ok","timestamp":1745673244379,"user_tz":-120,"elapsed":2,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":61,"outputs":[]},{"cell_type":"markdown","source":["# Workflow"],"metadata":{"id":"_rCE4qRO53hj"}},{"cell_type":"code","source":["# Initializint a StateGraph using the AgentState\n","workflow = StateGraph(AgentState)\n","\n","# Set an entry point for the workflow\n","workflow.set_entry_point(\"Greet User\")\n","\n","# Define the nodes and their functions\n","workflow.add_node(\"Greet User\", greet_user)\n","workflow.add_node(\"Get Topic & Check Validity\", get_topic)\n","workflow.add_node(\"Continue?\", continuation)\n","workflow.add_node(\"Say Bye\", goodbye)\n","\n","# Define a conditional edge\n","workflow.add_conditional_edges(\n","    \"Greet User\",\n","    response_router,\n","    {\"Continue\": \"Get Topic & Check Validity\",\n","     \"End\": \"Say Bye\"}\n",")\n","\n","workflow.add_conditional_edges(\n","    \"Get Topic & Check Validity\",\n","    topic_router,\n","    {\"Valid\": \"Continue?\",\n","     \"Invalid\": \"Get Topic & Check Validity\"}\n",")\n","\n","workflow.add_conditional_edges(\n","    \"Continue?\",\n","    response_router,\n","    {\"Continue\": \"Get Topic & Check Validity\",\n","     \"End\": \"Say Bye\"}\n",")\n","\n","# Workflow add edge\n","workflow.add_edge(\"Say Bye\", END)\n","\n","\n","# Compile the workflow\n","app = workflow.compile()\n"],"metadata":{"id":"Xk4bt7D754fl","executionInfo":{"status":"ok","timestamp":1745673245351,"user_tz":-120,"elapsed":7,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}}},"execution_count":62,"outputs":[]},{"cell_type":"code","source":["# Display the flow\n","display(Image(app.get_graph().draw_mermaid_png()))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":620},"id":"V2GeEpE66kVd","executionInfo":{"status":"ok","timestamp":1745673245812,"user_tz":-120,"elapsed":169,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}},"outputId":"01a707d5-1f0d-408d-d06e-9c85bb72b4a9"},"execution_count":63,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<IPython.core.display.Image object>"]},"metadata":{}}]},{"cell_type":"code","source":["# Run the app\n","result = app.invoke({'recursion_limit': 10})"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Sb5-hU4e6xBe","executionInfo":{"status":"ok","timestamp":1745673338067,"user_tz":-120,"elapsed":47684,"user":{"displayName":"Diogo Resende","userId":"05706604408624562002"}},"outputId":"91558746-be94-4d57-ebe1-a3719e4d2f62"},"execution_count":65,"outputs":[{"output_type":"stream","name":"stdout","text":["Hey, hey! Wanna hear a joke? Just say yes or no!\n","yes\n","what type of Joke are you in the mood for?\n","Jokes about Germans\n","Why do German cars always win races? Because they have a lot of 'Autobahn'-dance!\n","Do you want another joke? Reply yes or no\n","yes\n","what type of Joke are you in the mood for?\n","about Portugal\n","Why did the Portuguese wine go to therapy? Because it couldn't stop Porto-ing its feelings!\n","Do you want another joke? Reply yes or no\n","no\n","Goodbye!\n"]}]},{"cell_type":"code","source":[],"metadata":{"id":"UytEpp6hO9Uu"},"execution_count":null,"outputs":[]}]}